@privos_ai/app-server 0.6.2 → 0.7.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/dist/index.d.ts +7 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/relay/agent-bot-credential.d.ts +71 -0
- package/dist/relay/agent-bot-credential.d.ts.map +1 -0
- package/dist/relay/agent-bot-credential.js +92 -0
- package/dist/relay/agent-bot-credential.js.map +1 -0
- package/dist/relay/hub-rest-as-bot-client.d.ts +77 -0
- package/dist/relay/hub-rest-as-bot-client.d.ts.map +1 -0
- package/dist/relay/hub-rest-as-bot-client.js +136 -0
- package/dist/relay/hub-rest-as-bot-client.js.map +1 -0
- package/dist/relay/standalone-control.d.ts +2 -1
- package/dist/relay/standalone-control.d.ts.map +1 -1
- package/dist/relay/standalone-control.js +39 -0
- package/dist/relay/standalone-control.js.map +1 -1
- package/dist/relay/standalone-identity.d.ts +9 -0
- package/dist/relay/standalone-identity.d.ts.map +1 -1
- package/dist/relay/standalone-identity.js +12 -1
- package/dist/relay/standalone-identity.js.map +1 -1
- package/dist/runtime-mode.d.ts +1 -1
- package/dist/runtime-mode.d.ts.map +1 -1
- package/dist/runtime-mode.js.map +1 -1
- package/dist/serve-app.d.ts +81 -0
- package/dist/serve-app.d.ts.map +1 -0
- package/dist/serve-app.js +277 -0
- package/dist/serve-app.js.map +1 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -25,10 +25,16 @@ export { DEFAULT_HUB_USER_TOKEN_JWKS_PATH, buildHubUserTokenAuthOptions, extract
|
|
|
25
25
|
export type { HubUserTokenAuthOptions } from './relay/hub-user-token-actor.js';
|
|
26
26
|
export { DEFAULT_STANDALONE_IDENTITY_FILE, StandaloneIdentityError, loadStandaloneIdentity, saveStandaloneIdentity, rotateStandaloneIdentity, standaloneIdentityFileExists, standaloneHubFingerprint, assertStandaloneIdentityShape, } from './relay/standalone-identity.js';
|
|
27
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';
|
|
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';
|
|
31
31
|
export type { StandaloneReadinessCheckOptions, StandaloneReadinessReason, StandaloneReadinessResult, } from './relay/standalone-readiness.js';
|
|
32
|
+
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';
|
|
33
|
+
export type { AgentBotCredential, AgentBotCredentialState } from './relay/agent-bot-credential.js';
|
|
34
|
+
export { createAgentBotHubClient, createAgentBotHubClientFromWorkloadIdentity, createAgentBotHubClientFromHubOrigin, AgentBotCredentialAbsentError, AgentBotHubUnreachableError, } from './relay/hub-rest-as-bot-client.js';
|
|
35
|
+
export type { RoomBoundHubClient, RoomBoundHubFetchInit, AgentBotHubClientOptions, } from './relay/hub-rest-as-bot-client.js';
|
|
36
|
+
export { serveApp, DEFAULT_SERVE_APP_PORT } from './serve-app.js';
|
|
37
|
+
export type { ServeAppOptions, ServeAppHandle, ServeAppHandlerContext, ServeAppTransportOverride, ServeAppTestSeams, } from './serve-app.js';
|
|
32
38
|
export { resolveRuntimeMode, RuntimeModeError } from './runtime-mode.js';
|
|
33
39
|
export type { RuntimeMode, RuntimeModeResolution, RuntimeModeErrorCode, ResolveRuntimeModeOptions, } from './runtime-mode.js';
|
|
34
40
|
export { DEFAULT_WORKLOAD_SOCKET, WorkloadIdentityClient, WorkloadIdentityError, WorkloadPermissionDeniedError, RoomBoundWorkloadClient, getWorkloadIdentityClient, } from './workload/workload-identity.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":"AAAA,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACxE,YAAY,EACX,aAAa,EACb,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,6BAA6B,GAC7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,EACpB,8BAA8B,EAC9B,6BAA6B,GAC7B,MAAM,qBAAqB,CAAC;AAE7B,YAAY,EACX,aAAa,EACb,uBAAuB,EACvB,aAAa,EACb,eAAe,GACf,MAAM,gCAAgC,CAAC;AACxC,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACpF,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AACjF,YAAY,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EACN,sBAAsB,EACtB,oBAAoB,EACpB,0BAA0B,GAC1B,MAAM,kCAAkC,CAAC;AAE1C,YAAY,EACX,WAAW,EACX,gBAAgB,EAChB,qBAAqB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACN,eAAe,EACf,gBAAgB,EAChB,cAAc,GACd,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EACX,SAAS,EACT,kBAAkB,EAClB,UAAU,EACV,eAAe,EACf,WAAW,EACX,qBAAqB,EACrB,oBAAoB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,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;AAEhC,YAAY,EACX,aAAa,EACb,cAAc,EACd,yBAAyB,EACzB,0BAA0B,EAC1B,kBAAkB,EAClB,aAAa,EACb,uBAAuB,EACvB,eAAe,EACf,sBAAsB,GACtB,MAAM,cAAc,CAAC;AACtB,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;AAChE,YAAY,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EACN,oBAAoB,EACpB,gBAAgB,EAChB,wBAAwB,GACxB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACX,qBAAqB,EACrB,wBAAwB,EACxB,iBAAiB,EACjB,oBAAoB,EACpB,+BAA+B,GAC/B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACN,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,GACZ,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACX,WAAW,EACX,aAAa,EACb,wBAAwB,EACxB,kBAAkB,EAClB,WAAW,GACX,MAAM,yBAAyB,CAAC;AACjC,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;AACzC,YAAY,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAE/E,OAAO,EACN,gCAAgC,EAChC,uBAAuB,EACvB,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EACxB,4BAA4B,EAC5B,wBAAwB,EACxB,6BAA6B,GAC7B,MAAM,gCAAgC,CAAC;AACxC,YAAY,EACX,oBAAoB,EACpB,wBAAwB,EACxB,2BAA2B,GAC3B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACN,+BAA+B,EAC/B,8BAA8B,EAC9B,sCAAsC,EACtC,sCAAsC,EACtC,sBAAsB,EACtB,yBAAyB,EACzB,uCAAuC,EACvC,qCAAqC,GACrC,MAAM,+BAA+B,CAAC;AACvC,YAAY,EACX,+BAA+B,EAC/B,iCAAiC,EACjC,wCAAwC,GACxC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACN,wBAAwB,EACxB,8BAA8B,GAC9B,MAAM,iCAAiC,CAAC;AACzC,YAAY,EACX,+BAA+B,EAC/B,yBAAyB,EACzB,yBAAyB,GACzB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACN,4BAA4B,EAC5B,yBAAyB,EACzB,yCAAyC,EACzC,sBAAsB,EACtB,0BAA0B,EAC1B,4BAA4B,EAC5B,0BAA0B,EAC1B,8BAA8B,EAC9B,sCAAsC,GACtC,MAAM,iCAAiC,CAAC;AACzC,YAAY,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AACnG,OAAO,EACN,uBAAuB,EACvB,2CAA2C,EAC3C,oCAAoC,EACpC,6BAA6B,EAC7B,2BAA2B,GAC3B,MAAM,mCAAmC,CAAC;AAC3C,YAAY,EACX,kBAAkB,EAClB,qBAAqB,EACrB,wBAAwB,GACxB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAClE,YAAY,EACX,eAAe,EACf,cAAc,EACd,sBAAsB,EACtB,yBAAyB,EACzB,iBAAiB,GACjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACzE,YAAY,EACX,WAAW,EACX,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,GACzB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACN,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,6BAA6B,EAC7B,uBAAuB,EACvB,yBAAyB,GACzB,MAAM,iCAAiC,CAAC;AACzC,YAAY,EACX,qBAAqB,EACrB,eAAe,EACf,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,0BAA0B,EAC1B,6BAA6B,EAC7B,yBAAyB,GACzB,MAAM,iCAAiC,CAAC;AACzC,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;AAC1C,YAAY,EACX,yBAAyB,EACzB,8BAA8B,EAC9B,mCAAmC,EACnC,8BAA8B,EAC9B,+BAA+B,EAC/B,4BAA4B,EAC5B,yBAAyB,EACzB,0BAA0B,EAC1B,8BAA8B,EAC9B,sBAAsB,EACtB,kCAAkC,EAClC,qBAAqB,EACrB,yBAAyB,EACzB,kCAAkC,EAClC,8BAA8B,GAC9B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACN,gCAAgC,EAChC,+CAA+C,EAC/C,6CAA6C,GAC7C,MAAM,uCAAuC,CAAC;AAC/C,YAAY,EACX,+BAA+B,EAC/B,6BAA6B,EAC7B,qCAAqC,EACrC,mCAAmC,EACnC,+BAA+B,EAC/B,gCAAgC,EAChC,uCAAuC,EACvC,0CAA0C,EAC1C,gDAAgD,EAChD,oCAAoC,GACpC,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EACN,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,kCAAkC,GAClC,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -13,8 +13,11 @@ export { pairOverWebSocket, pairFromDescriptor, connectRelay, } from './relay/re
|
|
|
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
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';
|
|
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
|
+
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';
|
|
19
|
+
export { createAgentBotHubClient, createAgentBotHubClientFromWorkloadIdentity, createAgentBotHubClientFromHubOrigin, AgentBotCredentialAbsentError, AgentBotHubUnreachableError, } from './relay/hub-rest-as-bot-client.js';
|
|
20
|
+
export { serveApp, DEFAULT_SERVE_APP_PORT } from './serve-app.js';
|
|
18
21
|
export { resolveRuntimeMode, RuntimeModeError } from './runtime-mode.js';
|
|
19
22
|
export { DEFAULT_WORKLOAD_SOCKET, WorkloadIdentityClient, WorkloadIdentityError, WorkloadPermissionDeniedError, RoomBoundWorkloadClient, getWorkloadIdentityClient, } from './workload/workload-identity.js';
|
|
20
23
|
export { BoundedRuntimeDispatchReplayConsumerV3, assertRuntimeDispatchRelayAffinityV3, assertRuntimeDispatchTrustConfigurationV3, extractRuntimeDispatchRelayEnvelopeV3, isExactRuntimeReadinessRpcV3, isUnsignedRuntimeReadinessRpcV3, parseRuntimeDispatchTrustV3Json, sha256RuntimeDispatchBodyV3, verifyClusterDispatchAssertionV3, verifyDispatchAssertion, verifyRuntimeDispatchAssertionV3, } from './workload/dispatch-assertion.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,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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An app's own installation-bot credential, read from its own environment or
|
|
3
|
+
* adopted live over the standalone control channel.
|
|
4
|
+
*
|
|
5
|
+
* There is no issuance code path here. A workspace admin issues (or re-issues)
|
|
6
|
+
* the credential from Hub's admin app settings page; Hub mints it, then
|
|
7
|
+
* delivers it to the running app one of two ways:
|
|
8
|
+
* - managed / marketplace: written into the app's encrypted env config, so it
|
|
9
|
+
* arrives as an environment variable at container (re)start;
|
|
10
|
+
* - standalone-production: pushed as a signed control assertion over the Relay
|
|
11
|
+
* WebSocket (see `standalone-control.ts`), which persists it into the
|
|
12
|
+
* identity file and adopts it in-process HOT — no restart required.
|
|
13
|
+
*
|
|
14
|
+
* This module therefore does exactly these things, and nothing else:
|
|
15
|
+
* - read the two reserved env vars, fresh, every time (env is the operator
|
|
16
|
+
* override and always wins);
|
|
17
|
+
* - fall back to a live-adopted / identity-file-persisted value when the env
|
|
18
|
+
* vars are absent (the standalone hot-adoption path);
|
|
19
|
+
* - derive a coarse state from the last outcome of actually using them;
|
|
20
|
+
* - let the transport that uses them report what happened, without ever
|
|
21
|
+
* handing the token itself to anything but the transport's own headers.
|
|
22
|
+
*
|
|
23
|
+
* No function here returns, logs, or throws the credential value beyond the
|
|
24
|
+
* opaque pair `readAgentBotCredential` returns for the transport to place
|
|
25
|
+
* directly into request headers.
|
|
26
|
+
*/
|
|
27
|
+
/** The reserved manifest env keys Hub uses to deliver this credential. */
|
|
28
|
+
export declare const AGENT_BOT_CREDENTIAL_ENV_KEY = "PRIVOS_AGENT_BOT_CREDENTIAL";
|
|
29
|
+
export declare const AGENT_BOT_USER_ID_ENV_KEY = "PRIVOS_AGENT_BOT_USER_ID";
|
|
30
|
+
/**
|
|
31
|
+
* Derived credential state — never owned, always recomputed:
|
|
32
|
+
* - `absent`: neither the env pair nor an adopted value is available. Normal
|
|
33
|
+
* for a fresh install; the credential arrives later and out-of-band.
|
|
34
|
+
* - `live`: a credential is available and the most recent call using it (if
|
|
35
|
+
* any) did not come back 401. Optimistic default before any call.
|
|
36
|
+
* - `rejected`: the most recent call using this exact credential came back
|
|
37
|
+
* 401. Every re-issue rotates the previous token dead, and revocation has
|
|
38
|
+
* more causes than loss (grant change, suspension, upgrade cutover,
|
|
39
|
+
* uninstall) — this app cannot distinguish them and cannot fix any of them.
|
|
40
|
+
* Only a newly delivered credential (env restart, or a fresh control-channel
|
|
41
|
+
* push) can return to `live`.
|
|
42
|
+
*/
|
|
43
|
+
export type AgentBotCredentialState = 'absent' | 'live' | 'rejected';
|
|
44
|
+
/** Opaque header pair. Never stringify, log, or embed this outside a request header. */
|
|
45
|
+
export interface AgentBotCredential {
|
|
46
|
+
readonly botUserId: string;
|
|
47
|
+
readonly token: string;
|
|
48
|
+
}
|
|
49
|
+
/** Operator-facing instruction shown while the app cannot use its own credential. */
|
|
50
|
+
export declare const AGENT_BOT_CREDENTIAL_OPERATOR_INSTRUCTION: string;
|
|
51
|
+
/**
|
|
52
|
+
* Adopt a credential delivered out-of-band (standalone control channel, or a
|
|
53
|
+
* boot-time seed from the persisted identity file). Env always overrides this,
|
|
54
|
+
* so adopting never masks an operator-set env value. A fresh adoption clears the
|
|
55
|
+
* last outcome so a previously-rejected token does not keep the state `rejected`.
|
|
56
|
+
*/
|
|
57
|
+
export declare function setAdoptedAgentBotCredential(credential: AgentBotCredential): void;
|
|
58
|
+
/**
|
|
59
|
+
* Read the credential: the env pair first (operator override), then any
|
|
60
|
+
* adopted / persisted value. `null` when neither is available.
|
|
61
|
+
*/
|
|
62
|
+
export declare function readAgentBotCredential(): AgentBotCredential | null;
|
|
63
|
+
/** Current derived state. Safe to expose to a UI: never carries the token. */
|
|
64
|
+
export declare function getAgentBotCredentialState(): AgentBotCredentialState;
|
|
65
|
+
/** Record that the credential was just used successfully. */
|
|
66
|
+
export declare function markAgentBotCredentialLive(): void;
|
|
67
|
+
/** Record that Hub just rejected this exact credential with 401. */
|
|
68
|
+
export declare function markAgentBotCredentialRejected(): void;
|
|
69
|
+
/** Test-only: reset all in-process state so cases do not leak into each other. */
|
|
70
|
+
export declare function resetAgentBotCredentialOutcomeForTests(): void;
|
|
71
|
+
//# sourceMappingURL=agent-bot-credential.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-bot-credential.d.ts","sourceRoot":"","sources":["../../src/relay/agent-bot-credential.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,0EAA0E;AAC1E,eAAO,MAAM,4BAA4B,gCAAgC,CAAC;AAC1E,eAAO,MAAM,yBAAyB,6BAA6B,CAAC;AAEpE;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAErE,wFAAwF;AACxF,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACvB;AAED,qFAAqF;AACrF,eAAO,MAAM,yCAAyC,QAE2C,CAAC;AAiBlG;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,kBAAkB,GAAG,IAAI,CAKjF;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,kBAAkB,GAAG,IAAI,CAQlE;AAED,8EAA8E;AAC9E,wBAAgB,0BAA0B,IAAI,uBAAuB,CAGpE;AAED,6DAA6D;AAC7D,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD;AAED,oEAAoE;AACpE,wBAAgB,8BAA8B,IAAI,IAAI,CAErD;AAED,kFAAkF;AAClF,wBAAgB,sCAAsC,IAAI,IAAI,CAG7D"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An app's own installation-bot credential, read from its own environment or
|
|
3
|
+
* adopted live over the standalone control channel.
|
|
4
|
+
*
|
|
5
|
+
* There is no issuance code path here. A workspace admin issues (or re-issues)
|
|
6
|
+
* the credential from Hub's admin app settings page; Hub mints it, then
|
|
7
|
+
* delivers it to the running app one of two ways:
|
|
8
|
+
* - managed / marketplace: written into the app's encrypted env config, so it
|
|
9
|
+
* arrives as an environment variable at container (re)start;
|
|
10
|
+
* - standalone-production: pushed as a signed control assertion over the Relay
|
|
11
|
+
* WebSocket (see `standalone-control.ts`), which persists it into the
|
|
12
|
+
* identity file and adopts it in-process HOT — no restart required.
|
|
13
|
+
*
|
|
14
|
+
* This module therefore does exactly these things, and nothing else:
|
|
15
|
+
* - read the two reserved env vars, fresh, every time (env is the operator
|
|
16
|
+
* override and always wins);
|
|
17
|
+
* - fall back to a live-adopted / identity-file-persisted value when the env
|
|
18
|
+
* vars are absent (the standalone hot-adoption path);
|
|
19
|
+
* - derive a coarse state from the last outcome of actually using them;
|
|
20
|
+
* - let the transport that uses them report what happened, without ever
|
|
21
|
+
* handing the token itself to anything but the transport's own headers.
|
|
22
|
+
*
|
|
23
|
+
* No function here returns, logs, or throws the credential value beyond the
|
|
24
|
+
* opaque pair `readAgentBotCredential` returns for the transport to place
|
|
25
|
+
* directly into request headers.
|
|
26
|
+
*/
|
|
27
|
+
/** The reserved manifest env keys Hub uses to deliver this credential. */
|
|
28
|
+
export const AGENT_BOT_CREDENTIAL_ENV_KEY = 'PRIVOS_AGENT_BOT_CREDENTIAL';
|
|
29
|
+
export const AGENT_BOT_USER_ID_ENV_KEY = 'PRIVOS_AGENT_BOT_USER_ID';
|
|
30
|
+
/** Operator-facing instruction shown while the app cannot use its own credential. */
|
|
31
|
+
export const AGENT_BOT_CREDENTIAL_OPERATOR_INSTRUCTION = 'A workspace admin must issue or re-issue this app’s credential from Hub → Admin → Apps '
|
|
32
|
+
+ '→ this app → Settings, then press Apply. This app cannot issue or repair its own credential.';
|
|
33
|
+
// Last observed outcome of actually using the credential. `null` means no
|
|
34
|
+
// call has been made yet in this process, which reads as `live` (optimistic)
|
|
35
|
+
// per the state machine above.
|
|
36
|
+
let lastOutcome = null;
|
|
37
|
+
// A credential adopted at boot (seeded from the persisted identity file) or
|
|
38
|
+
// hot over the standalone control channel. Env always wins over this; it is the
|
|
39
|
+
// fallback that makes standalone delivery without a restart observable at all.
|
|
40
|
+
let adopted = null;
|
|
41
|
+
function normalize(botUserId, token) {
|
|
42
|
+
if (!token.trim() || !botUserId.trim())
|
|
43
|
+
return null;
|
|
44
|
+
return Object.freeze({ botUserId: botUserId.trim(), token });
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Adopt a credential delivered out-of-band (standalone control channel, or a
|
|
48
|
+
* boot-time seed from the persisted identity file). Env always overrides this,
|
|
49
|
+
* so adopting never masks an operator-set env value. A fresh adoption clears the
|
|
50
|
+
* last outcome so a previously-rejected token does not keep the state `rejected`.
|
|
51
|
+
*/
|
|
52
|
+
export function setAdoptedAgentBotCredential(credential) {
|
|
53
|
+
const next = normalize(credential.botUserId, credential.token);
|
|
54
|
+
if (!next)
|
|
55
|
+
return;
|
|
56
|
+
adopted = next;
|
|
57
|
+
lastOutcome = null;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Read the credential: the env pair first (operator override), then any
|
|
61
|
+
* adopted / persisted value. `null` when neither is available.
|
|
62
|
+
*/
|
|
63
|
+
export function readAgentBotCredential() {
|
|
64
|
+
const token = process.env[AGENT_BOT_CREDENTIAL_ENV_KEY];
|
|
65
|
+
const botUserId = process.env[AGENT_BOT_USER_ID_ENV_KEY];
|
|
66
|
+
if (token && botUserId) {
|
|
67
|
+
const fromEnv = normalize(botUserId, token);
|
|
68
|
+
if (fromEnv)
|
|
69
|
+
return fromEnv;
|
|
70
|
+
}
|
|
71
|
+
return adopted;
|
|
72
|
+
}
|
|
73
|
+
/** Current derived state. Safe to expose to a UI: never carries the token. */
|
|
74
|
+
export function getAgentBotCredentialState() {
|
|
75
|
+
if (!readAgentBotCredential())
|
|
76
|
+
return 'absent';
|
|
77
|
+
return lastOutcome === 'rejected' ? 'rejected' : 'live';
|
|
78
|
+
}
|
|
79
|
+
/** Record that the credential was just used successfully. */
|
|
80
|
+
export function markAgentBotCredentialLive() {
|
|
81
|
+
lastOutcome = 'live';
|
|
82
|
+
}
|
|
83
|
+
/** Record that Hub just rejected this exact credential with 401. */
|
|
84
|
+
export function markAgentBotCredentialRejected() {
|
|
85
|
+
lastOutcome = 'rejected';
|
|
86
|
+
}
|
|
87
|
+
/** Test-only: reset all in-process state so cases do not leak into each other. */
|
|
88
|
+
export function resetAgentBotCredentialOutcomeForTests() {
|
|
89
|
+
lastOutcome = null;
|
|
90
|
+
adopted = null;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=agent-bot-credential.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-bot-credential.js","sourceRoot":"","sources":["../../src/relay/agent-bot-credential.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,0EAA0E;AAC1E,MAAM,CAAC,MAAM,4BAA4B,GAAG,6BAA6B,CAAC;AAC1E,MAAM,CAAC,MAAM,yBAAyB,GAAG,0BAA0B,CAAC;AAuBpE,qFAAqF;AACrF,MAAM,CAAC,MAAM,yCAAyC,GACrD,yFAAyF;MACvF,8FAA8F,CAAC;AAElG,0EAA0E;AAC1E,6EAA6E;AAC7E,+BAA+B;AAC/B,IAAI,WAAW,GAA+B,IAAI,CAAC;AAEnD,4EAA4E;AAC5E,gFAAgF;AAChF,+EAA+E;AAC/E,IAAI,OAAO,GAA8B,IAAI,CAAC;AAE9C,SAAS,SAAS,CAAC,SAAiB,EAAE,KAAa;IAClD,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QAAE,OAAO,IAAI,CAAC;IACpD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAAC,UAA8B;IAC1E,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/D,IAAI,CAAC,IAAI;QAAE,OAAO;IAClB,OAAO,GAAG,IAAI,CAAC;IACf,WAAW,GAAG,IAAI,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB;IACrC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACzD,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC5C,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;IAC7B,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,0BAA0B;IACzC,IAAI,CAAC,sBAAsB,EAAE;QAAE,OAAO,QAAQ,CAAC;IAC/C,OAAO,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;AACzD,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,0BAA0B;IACzC,WAAW,GAAG,MAAM,CAAC;AACtB,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,8BAA8B;IAC7C,WAAW,GAAG,UAAU,CAAC;AAC1B,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,sCAAsC;IACrD,WAAW,GAAG,IAAI,CAAC;IACnB,OAAO,GAAG,IAAI,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hub REST transport that authenticates as this app's own installation bot.
|
|
3
|
+
*
|
|
4
|
+
* Hub authenticates a REST call from the header PAIR `x-user-id` +
|
|
5
|
+
* `x-auth-token` (privos-hub `apps/meteor/app/api/server/api.ts` auth path).
|
|
6
|
+
* This transport reads that pair from `agent-bot-credential.ts` on every
|
|
7
|
+
* call — never once at construction — and never carries any Sandbox
|
|
8
|
+
* selector, verified-room binding, or human-actor identity: the bot is a
|
|
9
|
+
* standing, room-independent identity, so this transport needs no
|
|
10
|
+
* `ToolCallContext` at all and works exactly the same inside a live tool
|
|
11
|
+
* call as it does in the background.
|
|
12
|
+
*
|
|
13
|
+
* This is the canonical home of `RoomBoundHubClient` / `RoomBoundHubFetchInit`.
|
|
14
|
+
* Both this bot-credential transport and the per-call room-bound workload
|
|
15
|
+
* client (`workloadIdentityClient.forRoom(context)`) satisfy the same
|
|
16
|
+
* `RoomBoundHubClient` shape, so callers can accept either without a second
|
|
17
|
+
* interface.
|
|
18
|
+
*/
|
|
19
|
+
import type { WorkloadIdentityClient } from '../workload/workload-identity.js';
|
|
20
|
+
/** The room-bound surface a Hub REST caller is allowed to use. */
|
|
21
|
+
export interface RoomBoundHubClient {
|
|
22
|
+
authorizedFetch(input: string, init: RoomBoundHubFetchInit): Promise<Response>;
|
|
23
|
+
}
|
|
24
|
+
export interface RoomBoundHubFetchInit extends RequestInit {
|
|
25
|
+
/** One exact granted permission this call exercises. Documentation only here: this transport carries exactly one identity, not a per-scope token. */
|
|
26
|
+
requiredScope: string;
|
|
27
|
+
retryMode?: 'safe-methods' | 'idempotent' | 'never';
|
|
28
|
+
replayable?: true;
|
|
29
|
+
}
|
|
30
|
+
/** The credential is absent: there is nothing to send. Distinct from a Hub rejection. */
|
|
31
|
+
export declare class AgentBotCredentialAbsentError extends Error {
|
|
32
|
+
constructor();
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Hub could not be reached, or its origin could not be resolved. Distinct
|
|
36
|
+
* from a 401: nothing here says the credential itself is wrong. Deliberately
|
|
37
|
+
* carries no cause detail — a caught network error's message is never safe to
|
|
38
|
+
* surface, since nothing guarantees it cannot embed request state.
|
|
39
|
+
*/
|
|
40
|
+
export declare class AgentBotHubUnreachableError extends Error {
|
|
41
|
+
constructor();
|
|
42
|
+
}
|
|
43
|
+
export interface AgentBotHubClientOptions {
|
|
44
|
+
/** Resolve the current Hub origin. `undefined` means Hub is unreachable right now. */
|
|
45
|
+
resolveHubOrigin: () => Promise<string | undefined>;
|
|
46
|
+
fetchImplementation?: typeof fetch;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Build the bot-credential transport.
|
|
50
|
+
*
|
|
51
|
+
* Every call re-reads the credential and re-resolves the Hub origin, so a
|
|
52
|
+
* long-lived instance never holds a stale value across a container restart
|
|
53
|
+
* boundary (irrelevant in practice, since a restart is a new process) or
|
|
54
|
+
* across a hot credential re-issue within the same process (relevant: the
|
|
55
|
+
* standalone control channel adopts a re-issued value in-process, and reading
|
|
56
|
+
* fresh here is what makes that observable without a restart).
|
|
57
|
+
*/
|
|
58
|
+
export declare function createAgentBotHubClient(options: AgentBotHubClientOptions): RoomBoundHubClient;
|
|
59
|
+
/**
|
|
60
|
+
* Managed-mode production factory: resolve the Hub origin from the same
|
|
61
|
+
* broker connection the workload identity client already maintains,
|
|
62
|
+
* independent of any verified `ToolCallContext` — `brokerContext()` is
|
|
63
|
+
* available whenever this process is paired, exactly the background-safe
|
|
64
|
+
* property this transport needs. Managed mode only: standalone-production
|
|
65
|
+
* (Relay) never mounts a workload broker, so this factory is not usable
|
|
66
|
+
* there — see `createAgentBotHubClientFromHubOrigin`.
|
|
67
|
+
*/
|
|
68
|
+
export declare function createAgentBotHubClientFromWorkloadIdentity(workloadIdentityClient: WorkloadIdentityClient): RoomBoundHubClient;
|
|
69
|
+
/**
|
|
70
|
+
* Standalone-production factory: there is no workload broker to resolve a
|
|
71
|
+
* Hub origin from in this mode, so the caller supplies the one already
|
|
72
|
+
* pinned in the paired standalone identity file (`loadStandaloneIdentity()`
|
|
73
|
+
* → `relay.privosUrl` — the same origin the Relay OAuth token and WebSocket
|
|
74
|
+
* are reached at).
|
|
75
|
+
*/
|
|
76
|
+
export declare function createAgentBotHubClientFromHubOrigin(hubOrigin: string): RoomBoundHubClient;
|
|
77
|
+
//# sourceMappingURL=hub-rest-as-bot-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hub-rest-as-bot-client.d.ts","sourceRoot":"","sources":["../../src/relay/hub-rest-as-bot-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAQ/E,kEAAkE;AAClE,MAAM,WAAW,kBAAkB;IAClC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC/E;AAED,MAAM,WAAW,qBAAsB,SAAQ,WAAW;IACzD,qJAAqJ;IACrJ,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,cAAc,GAAG,YAAY,GAAG,OAAO,CAAC;IACpD,UAAU,CAAC,EAAE,IAAI,CAAC;CAClB;AAED,yFAAyF;AACzF,qBAAa,6BAA8B,SAAQ,KAAK;;CAKvD;AAED;;;;;GAKG;AACH,qBAAa,2BAA4B,SAAQ,KAAK;;CAKrD;AAaD,MAAM,WAAW,wBAAwB;IACxC,sFAAsF;IACtF,gBAAgB,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACpD,mBAAmB,CAAC,EAAE,OAAO,KAAK,CAAC;CACnC;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,wBAAwB,GAAG,kBAAkB,CA4D7F;AAED;;;;;;;;GAQG;AACH,wBAAgB,2CAA2C,CAAC,sBAAsB,EAAE,sBAAsB,GAAG,kBAAkB,CAU9H;AAED;;;;;;GAMG;AACH,wBAAgB,oCAAoC,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,CAE1F"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { markAgentBotCredentialLive, markAgentBotCredentialRejected, readAgentBotCredential, } from './agent-bot-credential.js';
|
|
2
|
+
/** The credential is absent: there is nothing to send. Distinct from a Hub rejection. */
|
|
3
|
+
export class AgentBotCredentialAbsentError extends Error {
|
|
4
|
+
constructor() {
|
|
5
|
+
super('agent_bot_credential_absent');
|
|
6
|
+
this.name = 'AgentBotCredentialAbsentError';
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Hub could not be reached, or its origin could not be resolved. Distinct
|
|
11
|
+
* from a 401: nothing here says the credential itself is wrong. Deliberately
|
|
12
|
+
* carries no cause detail — a caught network error's message is never safe to
|
|
13
|
+
* surface, since nothing guarantees it cannot embed request state.
|
|
14
|
+
*/
|
|
15
|
+
export class AgentBotHubUnreachableError extends Error {
|
|
16
|
+
constructor() {
|
|
17
|
+
super('agent_bot_hub_unreachable');
|
|
18
|
+
this.name = 'AgentBotHubUnreachableError';
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const RETRY_ATTEMPTS = 3;
|
|
22
|
+
const RETRY_BASE_DELAY_MS = 200;
|
|
23
|
+
const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
24
|
+
const isRetryableMethod = (method, retryMode) => {
|
|
25
|
+
if (retryMode === 'safe-methods')
|
|
26
|
+
return method === 'GET' || method === 'HEAD';
|
|
27
|
+
if (retryMode === 'idempotent')
|
|
28
|
+
return method === 'GET' || method === 'HEAD' || method === 'PUT' || method === 'DELETE';
|
|
29
|
+
return false;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Build the bot-credential transport.
|
|
33
|
+
*
|
|
34
|
+
* Every call re-reads the credential and re-resolves the Hub origin, so a
|
|
35
|
+
* long-lived instance never holds a stale value across a container restart
|
|
36
|
+
* boundary (irrelevant in practice, since a restart is a new process) or
|
|
37
|
+
* across a hot credential re-issue within the same process (relevant: the
|
|
38
|
+
* standalone control channel adopts a re-issued value in-process, and reading
|
|
39
|
+
* fresh here is what makes that observable without a restart).
|
|
40
|
+
*/
|
|
41
|
+
export function createAgentBotHubClient(options) {
|
|
42
|
+
const doFetch = options.fetchImplementation ?? fetch;
|
|
43
|
+
async function attempt(url, init, credential) {
|
|
44
|
+
const { requiredScope: _requiredScope, retryMode: _retryMode, replayable: _replayable, headers, ...rest } = init;
|
|
45
|
+
const response = await doFetch(url, {
|
|
46
|
+
...rest,
|
|
47
|
+
headers: {
|
|
48
|
+
...headers,
|
|
49
|
+
'x-user-id': credential.botUserId,
|
|
50
|
+
'x-auth-token': credential.token,
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
if (response.status === 401)
|
|
54
|
+
markAgentBotCredentialRejected();
|
|
55
|
+
else if (response.ok)
|
|
56
|
+
markAgentBotCredentialLive();
|
|
57
|
+
return response;
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
async authorizedFetch(input, init) {
|
|
61
|
+
const credential = readAgentBotCredential();
|
|
62
|
+
if (!credential)
|
|
63
|
+
throw new AgentBotCredentialAbsentError();
|
|
64
|
+
let hubOrigin;
|
|
65
|
+
try {
|
|
66
|
+
hubOrigin = await options.resolveHubOrigin();
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
hubOrigin = undefined;
|
|
70
|
+
}
|
|
71
|
+
if (!hubOrigin)
|
|
72
|
+
throw new AgentBotHubUnreachableError();
|
|
73
|
+
const url = `${hubOrigin}${input}`;
|
|
74
|
+
const method = (init.method || 'GET').toUpperCase();
|
|
75
|
+
const retryable = isRetryableMethod(method, init.retryMode);
|
|
76
|
+
const maxAttempts = retryable ? RETRY_ATTEMPTS : 1;
|
|
77
|
+
for (let index = 0; index < maxAttempts; index += 1) {
|
|
78
|
+
try {
|
|
79
|
+
const response = await attempt(url, init, credential);
|
|
80
|
+
// A 401 is a definitive rejection: retrying with the SAME stale
|
|
81
|
+
// credential cannot succeed, so it is never retried.
|
|
82
|
+
if (response.status === 401)
|
|
83
|
+
return response;
|
|
84
|
+
if (response.status >= 500 && retryable && index < maxAttempts - 1) {
|
|
85
|
+
await delay(RETRY_BASE_DELAY_MS * 2 ** index);
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
return response;
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
// Network/DNS/timeout failure. The caught error is discarded
|
|
92
|
+
// entirely and never inspected: nothing guarantees its message
|
|
93
|
+
// cannot embed request state, and none of it is safe to surface.
|
|
94
|
+
if (!retryable || index >= maxAttempts - 1)
|
|
95
|
+
throw new AgentBotHubUnreachableError();
|
|
96
|
+
await delay(RETRY_BASE_DELAY_MS * 2 ** index);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// Unreachable in practice (the loop above always returns or throws),
|
|
100
|
+
// kept only so this function has an exhaustive static return type.
|
|
101
|
+
throw new AgentBotHubUnreachableError();
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Managed-mode production factory: resolve the Hub origin from the same
|
|
107
|
+
* broker connection the workload identity client already maintains,
|
|
108
|
+
* independent of any verified `ToolCallContext` — `brokerContext()` is
|
|
109
|
+
* available whenever this process is paired, exactly the background-safe
|
|
110
|
+
* property this transport needs. Managed mode only: standalone-production
|
|
111
|
+
* (Relay) never mounts a workload broker, so this factory is not usable
|
|
112
|
+
* there — see `createAgentBotHubClientFromHubOrigin`.
|
|
113
|
+
*/
|
|
114
|
+
export function createAgentBotHubClientFromWorkloadIdentity(workloadIdentityClient) {
|
|
115
|
+
return createAgentBotHubClient({
|
|
116
|
+
resolveHubOrigin: async () => {
|
|
117
|
+
try {
|
|
118
|
+
return (await workloadIdentityClient.brokerContext()).hubOrigin;
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
return undefined;
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Standalone-production factory: there is no workload broker to resolve a
|
|
128
|
+
* Hub origin from in this mode, so the caller supplies the one already
|
|
129
|
+
* pinned in the paired standalone identity file (`loadStandaloneIdentity()`
|
|
130
|
+
* → `relay.privosUrl` — the same origin the Relay OAuth token and WebSocket
|
|
131
|
+
* are reached at).
|
|
132
|
+
*/
|
|
133
|
+
export function createAgentBotHubClientFromHubOrigin(hubOrigin) {
|
|
134
|
+
return createAgentBotHubClient({ resolveHubOrigin: async () => hubOrigin });
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=hub-rest-as-bot-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hub-rest-as-bot-client.js","sourceRoot":"","sources":["../../src/relay/hub-rest-as-bot-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,8 @@ import { type LoadedStandaloneIdentity } from './standalone-identity.js';
|
|
|
3
3
|
export declare const STANDALONE_SECRET_ROTATE_METHOD = "notifications/privos.standaloneSecretRotate";
|
|
4
4
|
export declare const STANDALONE_TRUST_ROTATE_METHOD = "notifications/privos.standaloneTrustRotate";
|
|
5
5
|
export declare const STANDALONE_CAPABILITIES_CHANGED_METHOD = "notifications/privos.standaloneCapabilitiesChanged";
|
|
6
|
-
export declare
|
|
6
|
+
export declare const STANDALONE_AGENT_BOT_CREDENTIAL_METHOD = "notifications/privos.agentBotCredential";
|
|
7
|
+
export declare function isStandaloneControlMethod(method: unknown): method is typeof STANDALONE_SECRET_ROTATE_METHOD | typeof STANDALONE_TRUST_ROTATE_METHOD | typeof STANDALONE_CAPABILITIES_CHANGED_METHOD | typeof STANDALONE_AGENT_BOT_CREDENTIAL_METHOD;
|
|
7
8
|
export type StandaloneEffectiveCapabilities = Readonly<{
|
|
8
9
|
scopes: readonly string[];
|
|
9
10
|
grantEpoch: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standalone-control.d.ts","sourceRoot":"","sources":["../../src/relay/standalone-control.ts"],"names":[],"mappings":"AAuBA,OAAO,EAEN,KAAK,sBAAsB,EAC3B,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"standalone-control.d.ts","sourceRoot":"","sources":["../../src/relay/standalone-control.ts"],"names":[],"mappings":"AAuBA,OAAO,EAEN,KAAK,sBAAsB,EAC3B,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAIN,KAAK,wBAAwB,EAE7B,MAAM,0BAA0B,CAAC;AAElC,eAAO,MAAM,+BAA+B,gDAAgD,CAAC;AAC7F,eAAO,MAAM,8BAA8B,+CAA+C,CAAC;AAC3F,eAAO,MAAM,sCAAsC,uDAAuD,CAAC;AAC3G,eAAO,MAAM,sCAAsC,4CAA4C,CAAC;AAShG,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAC/D,OAAO,+BAA+B,GACtC,OAAO,8BAA8B,GACrC,OAAO,sCAAsC,GAC7C,OAAO,sCAAsC,CAE/C;AAED,MAAM,MAAM,+BAA+B,GAAG,QAAQ,CAAC;IACtD,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CAClB,CAAC,CAAC;AAaH,qBAAa,sBAAuB,SAAQ,KAAK;gBACpC,OAAO,EAAE,MAAM;CAI3B;AA+ID,MAAM,WAAW,iCAAiC;IACjD,cAAc,IAAI,QAAQ,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvE,QAAQ,IAAI,sBAAsB,CAAC;IACnC,yBAAyB,IAAI,+BAA+B,CAAC;IAC7D,qBAAqB,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE,+BAA+B,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACrG;;;OAGG;IACH,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;CAC3F;AAED,MAAM,MAAM,wCAAwC,GAAG,QAAQ,CAAC;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,wBAAwB,KAAK,IAAI,CAAC;IACzD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAClE,CAAC,CAAC;AA+DH;;;;;GAKG;AACH,wBAAgB,uCAAuC,CACtD,MAAM,EAAE,wBAAwB,EAChC,OAAO,GAAE,wCAA6C,GACpD,iCAAiC,CAwInC;AAED,gFAAgF;AAChF,wBAAgB,qCAAqC,CACpD,OAAO,GAAE,wCAA6C,GACpD,iCAAiC,CAGnC"}
|
|
@@ -21,14 +21,17 @@
|
|
|
21
21
|
*/
|
|
22
22
|
import crypto from 'node:crypto';
|
|
23
23
|
import { assertRuntimeDispatchTrustConfigurationV3, } from '../workload/dispatch-assertion.js';
|
|
24
|
+
import { setAdoptedAgentBotCredential } from './agent-bot-credential.js';
|
|
24
25
|
import { loadStandaloneIdentity, rotateStandaloneIdentity, standaloneHubFingerprint, } from './standalone-identity.js';
|
|
25
26
|
export const STANDALONE_SECRET_ROTATE_METHOD = 'notifications/privos.standaloneSecretRotate';
|
|
26
27
|
export const STANDALONE_TRUST_ROTATE_METHOD = 'notifications/privos.standaloneTrustRotate';
|
|
27
28
|
export const STANDALONE_CAPABILITIES_CHANGED_METHOD = 'notifications/privos.standaloneCapabilitiesChanged';
|
|
29
|
+
export const STANDALONE_AGENT_BOT_CREDENTIAL_METHOD = 'notifications/privos.agentBotCredential';
|
|
28
30
|
const CONTROL_METHODS = new Set([
|
|
29
31
|
STANDALONE_SECRET_ROTATE_METHOD,
|
|
30
32
|
STANDALONE_TRUST_ROTATE_METHOD,
|
|
31
33
|
STANDALONE_CAPABILITIES_CHANGED_METHOD,
|
|
34
|
+
STANDALONE_AGENT_BOT_CREDENTIAL_METHOD,
|
|
32
35
|
]);
|
|
33
36
|
export function isStandaloneControlMethod(method) {
|
|
34
37
|
return typeof method === 'string' && CONTROL_METHODS.has(method);
|
|
@@ -39,6 +42,7 @@ const CONTROL_TYPE_BY_METHOD = {
|
|
|
39
42
|
[STANDALONE_SECRET_ROTATE_METHOD]: 'standalone-secret-rotate',
|
|
40
43
|
[STANDALONE_TRUST_ROTATE_METHOD]: 'standalone-trust-rotate',
|
|
41
44
|
[STANDALONE_CAPABILITIES_CHANGED_METHOD]: 'standalone-capabilities-changed',
|
|
45
|
+
[STANDALONE_AGENT_BOT_CREDENTIAL_METHOD]: 'standalone-agent-bot-credential',
|
|
42
46
|
};
|
|
43
47
|
const MAX_CONTROL_COMPACT_BYTES = 32_768;
|
|
44
48
|
const DEFAULT_REPLAY_CAPACITY = 64;
|
|
@@ -206,6 +210,16 @@ function assertTrustRotateData(value, current) {
|
|
|
206
210
|
throw new StandaloneControlError('standalone_control_trust_rotate_identity_mismatch');
|
|
207
211
|
}
|
|
208
212
|
}
|
|
213
|
+
function assertAgentBotCredentialData(value) {
|
|
214
|
+
if (!isRecord(value) ||
|
|
215
|
+
!exactKeys(value, ['botUserId', 'token']) ||
|
|
216
|
+
typeof value.botUserId !== 'string' ||
|
|
217
|
+
!value.botUserId ||
|
|
218
|
+
typeof value.token !== 'string' ||
|
|
219
|
+
!value.token) {
|
|
220
|
+
throw new StandaloneControlError('standalone_control_agent_bot_credential_data_invalid');
|
|
221
|
+
}
|
|
222
|
+
}
|
|
209
223
|
function assertCapabilitiesChangedData(value) {
|
|
210
224
|
if (!isRecord(value) ||
|
|
211
225
|
!exactKeys(value, ['scopes', 'grantEpoch']) ||
|
|
@@ -277,6 +291,29 @@ export function createStandaloneRelayIdentityController(loaded, options = {}) {
|
|
|
277
291
|
});
|
|
278
292
|
options.onRotated?.(current);
|
|
279
293
|
}
|
|
294
|
+
async function applyAgentBotCredential(assertionCompact) {
|
|
295
|
+
if (typeof assertionCompact !== 'string')
|
|
296
|
+
throw new StandaloneControlError('standalone_control_assertion_invalid');
|
|
297
|
+
const verified = verifyStandaloneControlAssertion({
|
|
298
|
+
method: STANDALONE_AGENT_BOT_CREDENTIAL_METHOD,
|
|
299
|
+
compact: assertionCompact,
|
|
300
|
+
trust: current.trust,
|
|
301
|
+
replay,
|
|
302
|
+
now: now(),
|
|
303
|
+
clockSkewSeconds,
|
|
304
|
+
});
|
|
305
|
+
assertAgentBotCredentialData(verified.data);
|
|
306
|
+
const { botUserId, token } = verified.data;
|
|
307
|
+
// Persist into the identity file so the credential survives a restart,
|
|
308
|
+
// then adopt it in-process so the running app uses it HOT — no restart.
|
|
309
|
+
// Env always overrides the adopted value (operator override preserved).
|
|
310
|
+
const rotated = await rotateStandaloneIdentity((identity) => ({ ...identity, agentBotCredential: { botUserId, token }, rotatedAt: Date.now() }), { filePath: current.filePath });
|
|
311
|
+
current = rotated;
|
|
312
|
+
setAdoptedAgentBotCredential({ botUserId, token });
|
|
313
|
+
// The token is never logged; only that a delivery landed.
|
|
314
|
+
options.logger?.('standalone.identity.agent_bot_credential_delivered', { filePath: current.filePath });
|
|
315
|
+
options.onRotated?.(current);
|
|
316
|
+
}
|
|
280
317
|
async function applyCapabilitiesChanged(assertionCompact) {
|
|
281
318
|
if (typeof assertionCompact !== 'string')
|
|
282
319
|
throw new StandaloneControlError('standalone_control_assertion_invalid');
|
|
@@ -324,6 +361,8 @@ export function createStandaloneRelayIdentityController(loaded, options = {}) {
|
|
|
324
361
|
await applySecretRotate(assertion);
|
|
325
362
|
else if (method === STANDALONE_TRUST_ROTATE_METHOD)
|
|
326
363
|
await applyTrustRotate(assertion);
|
|
364
|
+
else if (method === STANDALONE_AGENT_BOT_CREDENTIAL_METHOD)
|
|
365
|
+
await applyAgentBotCredential(assertion);
|
|
327
366
|
else
|
|
328
367
|
await applyCapabilitiesChanged(assertion);
|
|
329
368
|
return 'handled';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standalone-control.js","sourceRoot":"","sources":["../../src/relay/standalone-control.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"standalone-control.js","sourceRoot":"","sources":["../../src/relay/standalone-control.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,15 @@ export type StandaloneIdentityV2 = Readonly<{
|
|
|
15
15
|
pairedAt: number;
|
|
16
16
|
/** Unix ms of the most recent secret or trust rotation, if any. */
|
|
17
17
|
rotatedAt?: number;
|
|
18
|
+
/**
|
|
19
|
+
* The app's installation-bot credential, delivered over the standalone
|
|
20
|
+
* control channel and persisted here so it survives a restart. Opaque pair —
|
|
21
|
+
* never logged. Absent until Hub delivers it.
|
|
22
|
+
*/
|
|
23
|
+
agentBotCredential?: Readonly<{
|
|
24
|
+
botUserId: string;
|
|
25
|
+
token: string;
|
|
26
|
+
}>;
|
|
18
27
|
}>;
|
|
19
28
|
export type LoadedStandaloneIdentity = Readonly<{
|
|
20
29
|
filePath: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standalone-identity.d.ts","sourceRoot":"","sources":["../../src/relay/standalone-identity.ts"],"names":[],"mappings":"AAgBA,OAAO,EAEN,KAAK,sBAAsB,EAC3B,MAAM,mCAAmC,CAAC;AAE3C,eAAO,MAAM,gCAAgC,sCAAsC,CAAC;AAapF,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IAC3C,cAAc,EAAE,CAAC,CAAC;IAClB,+FAA+F;IAC/F,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,2FAA2F;IAC3F,KAAK,EAAE,sBAAsB,CAAC;IAC9B,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"standalone-identity.d.ts","sourceRoot":"","sources":["../../src/relay/standalone-identity.ts"],"names":[],"mappings":"AAgBA,OAAO,EAEN,KAAK,sBAAsB,EAC3B,MAAM,mCAAmC,CAAC;AAE3C,eAAO,MAAM,gCAAgC,sCAAsC,CAAC;AAapF,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IAC3C,cAAc,EAAE,CAAC,CAAC;IAClB,+FAA+F;IAC/F,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,2FAA2F;IAC3F,KAAK,EAAE,sBAAsB,CAAC;IAC9B,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,QAAQ,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpE,CAAC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAC;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,KAAK,EAAE,QAAQ,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/E,KAAK,EAAE,sBAAsB,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;CACpB,CAAC,CAAC;AAEH,MAAM,MAAM,2BAA2B,GACpC,uBAAuB,GACvB,4BAA4B,GAC5B,2BAA2B,GAC3B,uBAAuB,GACvB,8BAA8B,CAAC;AAElC,qBAAa,uBAAwB,SAAQ,KAAK;aAEhC,IAAI,EAAE,2BAA2B;gBAAjC,IAAI,EAAE,2BAA2B,EACjD,OAAO,EAAE,MAAM;CAKhB;AAaD,uFAAuF;AACvF,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE/D;AAMD,qGAAqG;AACrG,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,oBAAoB,CAkDnG;AAeD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,wBAAwB,CAgChG;AAED,uGAAuG;AACvG,wBAAgB,4BAA4B,CAAC,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAErF;AAMD;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC3C,QAAQ,EAAE,oBAAoB,EAC9B,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7B,OAAO,CAAC,MAAM,CAAC,CAuBjB;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC7C,MAAM,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,oBAAoB,EAC/D,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7B,OAAO,CAAC,wBAAwB,CAAC,CAuBnC"}
|
|
@@ -24,7 +24,7 @@ const IDENTITY_REQUIRED_KEYS = [
|
|
|
24
24
|
'fingerprint',
|
|
25
25
|
'pairedAt',
|
|
26
26
|
];
|
|
27
|
-
const IDENTITY_OPTIONAL_KEYS = ['mcpAppId', 'rotatedAt'];
|
|
27
|
+
const IDENTITY_OPTIONAL_KEYS = ['mcpAppId', 'rotatedAt', 'agentBotCredential'];
|
|
28
28
|
export class StandaloneIdentityError extends Error {
|
|
29
29
|
code;
|
|
30
30
|
constructor(code, message) {
|
|
@@ -69,6 +69,17 @@ export function assertStandaloneIdentityShape(value) {
|
|
|
69
69
|
(value.rotatedAt !== undefined && !Number.isFinite(value.rotatedAt))) {
|
|
70
70
|
throw new StandaloneIdentityError('IDENTITY_FILE_INVALID', 'Standalone identity file has an invalid field.');
|
|
71
71
|
}
|
|
72
|
+
if (value.agentBotCredential !== undefined) {
|
|
73
|
+
const credential = value.agentBotCredential;
|
|
74
|
+
if (!isRecord(credential) ||
|
|
75
|
+
Object.keys(credential).sort().join(',') !== 'botUserId,token' ||
|
|
76
|
+
typeof credential.botUserId !== 'string' ||
|
|
77
|
+
!credential.botUserId ||
|
|
78
|
+
typeof credential.token !== 'string' ||
|
|
79
|
+
!credential.token) {
|
|
80
|
+
throw new StandaloneIdentityError('IDENTITY_FILE_INVALID', 'Standalone identity agentBotCredential is invalid.');
|
|
81
|
+
}
|
|
82
|
+
}
|
|
72
83
|
try {
|
|
73
84
|
new URL(value.relayUrl);
|
|
74
85
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standalone-identity.js","sourceRoot":"","sources":["../../src/relay/standalone-identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,MAAM,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EACN,yCAAyC,GAEzC,MAAM,mCAAmC,CAAC;AAE3C,MAAM,CAAC,MAAM,gCAAgC,GAAG,mCAAmC,CAAC;AAEpF,MAAM,sBAAsB,GAAG;IAC9B,gBAAgB;IAChB,UAAU;IACV,UAAU;IACV,cAAc;IACd,OAAO;IACP,aAAa;IACb,UAAU;CACD,CAAC;AACX,MAAM,sBAAsB,GAAG,CAAC,UAAU,EAAE,WAAW,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"standalone-identity.js","sourceRoot":"","sources":["../../src/relay/standalone-identity.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime-mode.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export type RuntimeModeResolution = Readonly<{
|
|
|
5
5
|
workloadSocketPath: string;
|
|
6
6
|
standaloneIdentityFilePath: string;
|
|
7
7
|
}>;
|
|
8
|
-
export type RuntimeModeErrorCode = 'AMBIGUOUS_RUNTIME_IDENTITY' | 'PRODUCTION_WITHOUT_IDENTITY';
|
|
8
|
+
export type RuntimeModeErrorCode = 'AMBIGUOUS_RUNTIME_IDENTITY' | 'PRODUCTION_WITHOUT_IDENTITY' | 'TRANSPORT_OVERRIDE_NOT_ALLOWED';
|
|
9
9
|
export declare class RuntimeModeError extends Error {
|
|
10
10
|
readonly code: RuntimeModeErrorCode;
|
|
11
11
|
constructor(code: RuntimeModeErrorCode, message: string);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-mode.d.ts","sourceRoot":"","sources":["../src/runtime-mode.ts"],"names":[],"mappings":"AAuBA,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,uBAAuB,GAAG,aAAa,CAAC;AAE9E,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IAC5C,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,MAAM,CAAC;IAC3B,0BAA0B,EAAE,MAAM,CAAC;CACnC,CAAC,CAAC;AAEH,MAAM,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"runtime-mode.d.ts","sourceRoot":"","sources":["../src/runtime-mode.ts"],"names":[],"mappings":"AAuBA,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,uBAAuB,GAAG,aAAa,CAAC;AAE9E,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IAC5C,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,MAAM,CAAC;IAC3B,0BAA0B,EAAE,MAAM,CAAC;CACnC,CAAC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAC7B,4BAA4B,GAC5B,6BAA6B,GAC7B,gCAAgC,CAAC;AAEpC,qBAAa,gBAAiB,SAAQ,KAAK;aAEzB,IAAI,EAAE,oBAAoB;gBAA1B,IAAI,EAAE,oBAAoB,EAC1C,OAAO,EAAE,MAAM;CAKhB;AAED,MAAM,MAAM,yBAAyB,GAAG,QAAQ,CAAC;IAChD,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,kFAAkF;IAClF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,2FAA2F;IAC3F,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,sFAAsF;IACtF,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACjD,mGAAmG;IACnG,wBAAwB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CACrD,CAAC,CAAC;AAEH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,yBAA8B,GAAG,qBAAqB,CAuDjG"}
|
package/dist/runtime-mode.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-mode.js","sourceRoot":"","sources":["../src/runtime-mode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,MAAM,MAAM,SAAS,CAAC;AAE7B,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,gCAAgC,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime-mode.js","sourceRoot":"","sources":["../src/runtime-mode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,MAAM,MAAM,SAAS,CAAC;AAE7B,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,gCAAgC,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAgBhH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAEzB;IADjB,YACiB,IAA0B,EAC1C,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,SAAI,GAAJ,IAAI,CAAsB;QAI1C,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IAChC,CAAC;CACD;AAcD,MAAM,UAAU,kBAAkB,CAAC,UAAqC,EAAE;IACzE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACvC,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,IAAI,GAAG,CAAC,sBAAsB,IAAI,uBAAuB,CAAC;IAC/G,MAAM,0BAA0B,GAC/B,OAAO,CAAC,0BAA0B,IAAI,GAAG,CAAC,+BAA+B,IAAI,gCAAgC,CAAC;IAC/G,MAAM,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACzG,MAAM,wBAAwB,GAC7B,OAAO,CAAC,wBAAwB,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,4BAA4B,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAE1G,MAAM,cAAc,GAAG,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;IAChE,MAAM,iBAAiB,GAAG,wBAAwB,CAAC,0BAA0B,CAAC,CAAC;IAE/E,IAAI,cAAc,IAAI,iBAAiB,EAAE,CAAC;QACzC,MAAM,IAAI,gBAAgB,CACzB,4BAA4B,EAC5B,4CAA4C,kBAAkB,mCAAmC;YAChG,IAAI,0BAA0B,mEAAmE;YACjG,8GAA8G,CAC/G,CAAC;IACH,CAAC;IAED,IAAI,cAAc,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,uCAAuC,kBAAkB,EAAE;YACnE,kBAAkB;YAClB,0BAA0B;SAC1B,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,iBAAiB,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,uBAAuB;YAC7B,MAAM,EAAE,uCAAuC,0BAA0B,EAAE;YAC3E,kBAAkB;YAClB,0BAA0B;SAC1B,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,YAAY,EAAE,CAAC;QAClD,MAAM,IAAI,gBAAgB,CACzB,6BAA6B,EAC7B,yEAAyE;YACxE,IAAI,kBAAkB,2CAA2C,0BAA0B,KAAK;YAChG,gGAAgG;YAChG,0EAA0E,CAC3E,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC;QACpB,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,gGAAgG;QACxG,kBAAkB;QAClB,0BAA0B;KAC1B,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { Server } from 'node:http';
|
|
2
|
+
import { type Express } from 'express';
|
|
3
|
+
import type { AppDescriptor } from './app-descriptor.js';
|
|
4
|
+
import { type ReadinessCheckResult } from './direct/http-ingress.js';
|
|
5
|
+
import { type RoomBoundHubClient } from './relay/hub-rest-as-bot-client.js';
|
|
6
|
+
import { connectRelay, type RelayHandle } from './relay/relay-client.js';
|
|
7
|
+
import { createStandaloneRelayIdentityController } from './relay/standalone-control.js';
|
|
8
|
+
import { loadStandaloneIdentity } from './relay/standalone-identity.js';
|
|
9
|
+
import { resolveRuntimeMode, type RuntimeMode } from './runtime-mode.js';
|
|
10
|
+
import type { AppMcpHandler, UiResourceProvider } from './runtime.js';
|
|
11
|
+
import { getWorkloadIdentityClient, type WorkloadIdentityClient } from './workload/workload-identity.js';
|
|
12
|
+
/** Fallback listen port when no explicit `port`, `HTTP_PORT`, or `PORT` is set. */
|
|
13
|
+
export declare const DEFAULT_SERVE_APP_PORT = 8080;
|
|
14
|
+
/** Dev-only transport selector — the API form of the demo's `PRIVOS_TRANSPORT`. */
|
|
15
|
+
export type ServeAppTransportOverride = 'http' | 'relay';
|
|
16
|
+
/**
|
|
17
|
+
* Everything an app's handler factory needs, resolved for the active mode. The
|
|
18
|
+
* app builds its `McpHandler` from this and never touches transport internals.
|
|
19
|
+
*/
|
|
20
|
+
export interface ServeAppHandlerContext {
|
|
21
|
+
mode: RuntimeMode;
|
|
22
|
+
/**
|
|
23
|
+
* Hub REST transport authenticating as this app's own installation bot,
|
|
24
|
+
* wired to the correct Hub-origin source for the mode. Same
|
|
25
|
+
* `RoomBoundHubClient` shape in every mode.
|
|
26
|
+
*/
|
|
27
|
+
agentBotHub: RoomBoundHubClient;
|
|
28
|
+
/**
|
|
29
|
+
* The managed workload identity SINGLETON — present only in `managed` mode.
|
|
30
|
+
* Managed-ingress room authority is WeakMap-keyed by this exact instance, so
|
|
31
|
+
* the handler MUST use this one (never construct a fresh `WorkloadIdentityClient`).
|
|
32
|
+
*/
|
|
33
|
+
workloadIdentityClient?: WorkloadIdentityClient;
|
|
34
|
+
/** Resolve the Hub's own origin (managed: broker; standalone: paired file; dev: `PRIVOS_URL`). */
|
|
35
|
+
resolveHubOrigin(): Promise<string | undefined>;
|
|
36
|
+
}
|
|
37
|
+
export interface ServeAppOptions {
|
|
38
|
+
descriptor: AppDescriptor | (() => AppDescriptor | Promise<AppDescriptor>);
|
|
39
|
+
ui?: UiResourceProvider;
|
|
40
|
+
/** Build the app's MCP handler from the resolved runtime context. */
|
|
41
|
+
createHandler: (context: ServeAppHandlerContext) => AppMcpHandler | Promise<AppMcpHandler>;
|
|
42
|
+
/** Explicit listen port. Precedence: explicit > `HTTP_PORT` > `PORT` > {@link DEFAULT_SERVE_APP_PORT}. */
|
|
43
|
+
port?: number;
|
|
44
|
+
/** Explicit bind host. Default `0.0.0.0`, except `development` which defaults to loopback `127.0.0.1`. */
|
|
45
|
+
host?: string;
|
|
46
|
+
/** DEVELOPMENT-ONLY. Any value under managed or standalone-production is a boot error. */
|
|
47
|
+
transportOverride?: ServeAppTransportOverride;
|
|
48
|
+
/** Standalone `/ready` manifest input. Default: parse `${cwd}/privos-app.json` fresh each check. */
|
|
49
|
+
resolveManifest?: () => unknown | Promise<unknown>;
|
|
50
|
+
/**
|
|
51
|
+
* Express escape hatch — mount app-owned routes (/public, /ui, diagnostics)
|
|
52
|
+
* BEFORE the MCP router, so the router's CORS middleware (ACAO:* + OPTIONS
|
|
53
|
+
* short-circuit) never stamps or swallows them.
|
|
54
|
+
*/
|
|
55
|
+
configure?: (app: Express) => void | Promise<void>;
|
|
56
|
+
/** Own SIGTERM/SIGINT (stop relay + close server). Default true. */
|
|
57
|
+
installSignalHandlers?: boolean;
|
|
58
|
+
logger?: (event: string, fields: Record<string, unknown>) => void;
|
|
59
|
+
/** Test-only seams; never set in production. */
|
|
60
|
+
__test?: ServeAppTestSeams;
|
|
61
|
+
}
|
|
62
|
+
/** Internal seams so unit tests can inject mode, workload posture, and relay without real sockets. */
|
|
63
|
+
export interface ServeAppTestSeams {
|
|
64
|
+
env?: NodeJS.ProcessEnv;
|
|
65
|
+
resolveRuntimeMode?: typeof resolveRuntimeMode;
|
|
66
|
+
getWorkloadIdentityClient?: typeof getWorkloadIdentityClient;
|
|
67
|
+
loadStandaloneIdentity?: typeof loadStandaloneIdentity;
|
|
68
|
+
createStandaloneRelayIdentityController?: typeof createStandaloneRelayIdentityController;
|
|
69
|
+
connectRelay?: typeof connectRelay;
|
|
70
|
+
}
|
|
71
|
+
export interface ServeAppHandle {
|
|
72
|
+
mode: RuntimeMode;
|
|
73
|
+
server: Server;
|
|
74
|
+
/** Present only in standalone-production (MCP rides Relay). */
|
|
75
|
+
relayHandle?: RelayHandle;
|
|
76
|
+
/** The active `/ready` check for the resolved mode. */
|
|
77
|
+
readiness(): Promise<ReadinessCheckResult>;
|
|
78
|
+
close(): Promise<void>;
|
|
79
|
+
}
|
|
80
|
+
export declare function serveApp(options: ServeAppOptions): Promise<ServeAppHandle>;
|
|
81
|
+
//# sourceMappingURL=serve-app.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve-app.d.ts","sourceRoot":"","sources":["../src/serve-app.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `serveApp` — the single entrypoint that hides transport + trust bootstrap
|
|
3
|
+
* across all three runtime modes. A developer writes ONE app, declares its
|
|
4
|
+
* descriptor/ui/handler, and calls `serveApp(...)`; the SDK resolves the mode
|
|
5
|
+
* (`resolveRuntimeMode`) and wires the right transport, the workload/agent-bot
|
|
6
|
+
* hub client, and the readiness/health surface internally. App code never
|
|
7
|
+
* imports `connectRelay`, `loadStandaloneIdentity`, the identity controller,
|
|
8
|
+
* readiness checks, or the workload broker directly.
|
|
9
|
+
*
|
|
10
|
+
* What stays VISIBLE by design (hide plumbing, not trust): serveApp NEVER
|
|
11
|
+
* creates or rotates an identity file and NEVER invokes pairing on a missing
|
|
12
|
+
* one — it surfaces `StandaloneIdentityError` / `RuntimeModeError` verbatim.
|
|
13
|
+
* The pairing fingerprint/TOFU ceremony lives in `pairOverWebSocket` and the
|
|
14
|
+
* app's own pair scripts, and stays there.
|
|
15
|
+
*
|
|
16
|
+
* Mode matrix:
|
|
17
|
+
* - managed: the `getWorkloadIdentityClient()` SINGLETON + agent-bot hub from
|
|
18
|
+
* the workload broker + a Direct HTTP `createDirectRouter` with
|
|
19
|
+
* `workloadSecurity: 'required'` HARD-CODED (never 'auto': 'auto' accepts
|
|
20
|
+
* unsigned traffic whenever the socket is absent, including a managed
|
|
21
|
+
* container whose socket vanishes mid-life).
|
|
22
|
+
* - development: no workload client; the Direct HTTP router accepts unsigned
|
|
23
|
+
* traffic, so it binds loopback (127.0.0.1) by default — exposing it on
|
|
24
|
+
* 0.0.0.0 requires an explicit `host`. `transportOverride: 'relay'` steps
|
|
25
|
+
* aside for an app-owned dev relay loop (the interactive pairing prompt is
|
|
26
|
+
* app-local by design), serving only health/ready/ui/configure over HTTP.
|
|
27
|
+
* - standalone-production: `loadStandaloneIdentity` (fatal if missing/invalid)
|
|
28
|
+
* + the standalone identity controller + agent-bot hub from the paired Hub
|
|
29
|
+
* origin + `connectRelay` (MCP rides the Relay WebSocket, not HTTP) + the
|
|
30
|
+
* SDK readiness check. Any persisted agent-bot credential is adopted at boot.
|
|
31
|
+
*
|
|
32
|
+
* `/health` and `/ready` exist in ALL modes (marketplace Docker HEALTHCHECK and
|
|
33
|
+
* the cluster monitor probe them). Ambiguous identity or production-without-
|
|
34
|
+
* identity fails closed via `RuntimeModeError`, unchanged.
|
|
35
|
+
*/
|
|
36
|
+
import { readFileSync } from 'node:fs';
|
|
37
|
+
import path from 'node:path';
|
|
38
|
+
import express from 'express';
|
|
39
|
+
import { createDirectRouter } from './direct/express-router.js';
|
|
40
|
+
import { resolveHttpIngressListen } from './direct/http-ingress.js';
|
|
41
|
+
import { setAdoptedAgentBotCredential } from './relay/agent-bot-credential.js';
|
|
42
|
+
import { createAgentBotHubClient, createAgentBotHubClientFromHubOrigin, createAgentBotHubClientFromWorkloadIdentity, } from './relay/hub-rest-as-bot-client.js';
|
|
43
|
+
import { connectRelay } from './relay/relay-client.js';
|
|
44
|
+
import { createStandaloneRelayIdentityController, } from './relay/standalone-control.js';
|
|
45
|
+
import { loadStandaloneIdentity, } from './relay/standalone-identity.js';
|
|
46
|
+
import { createStandaloneReadinessCheck } from './relay/standalone-readiness.js';
|
|
47
|
+
import { resolveRuntimeMode, RuntimeModeError } from './runtime-mode.js';
|
|
48
|
+
import { getWorkloadIdentityClient, } from './workload/workload-identity.js';
|
|
49
|
+
/** Fallback listen port when no explicit `port`, `HTTP_PORT`, or `PORT` is set. */
|
|
50
|
+
export const DEFAULT_SERVE_APP_PORT = 8080;
|
|
51
|
+
function defaultLogger(event, fields) {
|
|
52
|
+
if (event.includes('error') || event.includes('fail') || event.includes('rejected')) {
|
|
53
|
+
console.error(`[serveApp] ✗ ${event}`, fields);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
console.log(`[serveApp] · ${event}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/** Dev-only Hub origin: the legacy relay `PRIVOS_URL`, the only Hub address available outside a paired/managed runtime. */
|
|
60
|
+
function developmentHubOrigin(env) {
|
|
61
|
+
const url = env.PRIVOS_URL;
|
|
62
|
+
return url && /^https?:\/\//.test(url) ? url.replace(/\/+$/, '') : undefined;
|
|
63
|
+
}
|
|
64
|
+
function defaultManifestResolver() {
|
|
65
|
+
return JSON.parse(readFileSync(path.resolve(process.cwd(), 'privos-app.json'), 'utf8'));
|
|
66
|
+
}
|
|
67
|
+
export async function serveApp(options) {
|
|
68
|
+
const env = options.__test?.env ?? process.env;
|
|
69
|
+
const logger = options.logger ?? defaultLogger;
|
|
70
|
+
const resolveMode = options.__test?.resolveRuntimeMode ?? resolveRuntimeMode;
|
|
71
|
+
// Fail closed on ambiguous / production-without-identity, exactly as before.
|
|
72
|
+
const resolution = resolveMode({ env });
|
|
73
|
+
const mode = resolution.mode;
|
|
74
|
+
logger('serveApp.mode_resolved', { mode, reason: resolution.reason });
|
|
75
|
+
if (options.transportOverride !== undefined && mode !== 'development') {
|
|
76
|
+
// H1: transportOverride is the API form of PRIVOS_TRANSPORT and is a
|
|
77
|
+
// development affordance only. Accepting it under a production mode would
|
|
78
|
+
// let it override the mode's fixed, trusted transport — a boot error.
|
|
79
|
+
throw new RuntimeModeError('TRANSPORT_OVERRIDE_NOT_ALLOWED', `transportOverride is development-only; runtime mode is '${mode}'. Remove transportOverride, ` +
|
|
80
|
+
'or run without the managed workload socket / standalone identity file for local development.');
|
|
81
|
+
}
|
|
82
|
+
// Per-mode wiring, all resolved BEFORE the handler is built so the handler
|
|
83
|
+
// context is complete when createHandler runs.
|
|
84
|
+
let workloadIdentityClient;
|
|
85
|
+
let agentBotHub;
|
|
86
|
+
let resolveHubOrigin;
|
|
87
|
+
let loaded;
|
|
88
|
+
let identityController;
|
|
89
|
+
let mountDirectRouter = false;
|
|
90
|
+
if (mode === 'managed') {
|
|
91
|
+
const getClient = options.__test?.getWorkloadIdentityClient ?? getWorkloadIdentityClient;
|
|
92
|
+
workloadIdentityClient = getClient();
|
|
93
|
+
resolveHubOrigin = async () => {
|
|
94
|
+
try {
|
|
95
|
+
return (await workloadIdentityClient.brokerContext()).hubOrigin;
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
agentBotHub = createAgentBotHubClientFromWorkloadIdentity(workloadIdentityClient);
|
|
102
|
+
mountDirectRouter = true;
|
|
103
|
+
}
|
|
104
|
+
else if (mode === 'standalone-production') {
|
|
105
|
+
const load = options.__test?.loadStandaloneIdentity ?? loadStandaloneIdentity;
|
|
106
|
+
loaded = load();
|
|
107
|
+
// Boot-seed a persisted agent-bot credential so a delivered credential
|
|
108
|
+
// survives restart and is usable before any live control-channel push.
|
|
109
|
+
if (loaded.identity.agentBotCredential)
|
|
110
|
+
setAdoptedAgentBotCredential(loaded.identity.agentBotCredential);
|
|
111
|
+
const makeController = options.__test?.createStandaloneRelayIdentityController ?? createStandaloneRelayIdentityController;
|
|
112
|
+
identityController = makeController(loaded, {
|
|
113
|
+
logger: (event, fields) => logger(event, fields),
|
|
114
|
+
});
|
|
115
|
+
resolveHubOrigin = async () => loaded.relay.privosUrl;
|
|
116
|
+
agentBotHub = createAgentBotHubClientFromHubOrigin(loaded.relay.privosUrl);
|
|
117
|
+
mountDirectRouter = false; // MCP rides Relay, not HTTP.
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
resolveHubOrigin = async () => developmentHubOrigin(env);
|
|
121
|
+
agentBotHub = createAgentBotHubClient({ resolveHubOrigin });
|
|
122
|
+
// Default dev transport is Direct HTTP; 'relay' steps aside for an
|
|
123
|
+
// app-owned dev relay loop and serves only the HTTP support surface.
|
|
124
|
+
mountDirectRouter = options.transportOverride !== 'relay';
|
|
125
|
+
}
|
|
126
|
+
const handler = await options.createHandler({
|
|
127
|
+
mode,
|
|
128
|
+
agentBotHub,
|
|
129
|
+
workloadIdentityClient,
|
|
130
|
+
resolveHubOrigin,
|
|
131
|
+
});
|
|
132
|
+
// A ref-cell for the relay handle so the readiness closure can observe a
|
|
133
|
+
// connection that is opened AFTER the HTTP server begins listening (M5).
|
|
134
|
+
const relayRef = {};
|
|
135
|
+
const readiness = buildReadiness({
|
|
136
|
+
mode,
|
|
137
|
+
workloadIdentityClient,
|
|
138
|
+
relayRef,
|
|
139
|
+
resolveManifest: options.resolveManifest ?? defaultManifestResolver,
|
|
140
|
+
});
|
|
141
|
+
// Mount order: health/ready → configure → router. The router's CORS
|
|
142
|
+
// middleware stamps ACAO:* and short-circuits OPTIONS on everything mounted
|
|
143
|
+
// after it, so app-owned configure routes MUST come first.
|
|
144
|
+
const app = express();
|
|
145
|
+
app.get('/health', (_req, res) => {
|
|
146
|
+
res.status(200).json({ ok: true, status: 'alive', mode });
|
|
147
|
+
});
|
|
148
|
+
app.get('/ready', async (_req, res, next) => {
|
|
149
|
+
try {
|
|
150
|
+
const result = await readiness();
|
|
151
|
+
const status = result.ok ? 200 : (result.status ?? 503);
|
|
152
|
+
res.status(status).json({ ok: result.ok, status: result.ok ? 'ready' : 'not_ready', ...(result.body ?? {}) });
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
next(error);
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
if (options.configure)
|
|
159
|
+
await options.configure(app);
|
|
160
|
+
if (mountDirectRouter) {
|
|
161
|
+
app.use(createDirectRouter({
|
|
162
|
+
descriptor: options.descriptor,
|
|
163
|
+
handler,
|
|
164
|
+
ui: options.ui,
|
|
165
|
+
// H2: managed hard-codes 'required' (never accept unsigned traffic).
|
|
166
|
+
// Development leaves the default 'auto', which with no workload
|
|
167
|
+
// socket accepts unsigned — safe only because dev binds loopback.
|
|
168
|
+
...(mode === 'managed' ? { workloadSecurity: 'required', workloadIdentityClient } : {}),
|
|
169
|
+
}));
|
|
170
|
+
}
|
|
171
|
+
const listen = resolveHttpIngressListen({ env, defaultPort: DEFAULT_SERVE_APP_PORT });
|
|
172
|
+
// serveApp ALWAYS serves the HTTP support surface (/health + /ready in every
|
|
173
|
+
// mode), so HTTP_INGRESS=off is not honored here: never fall through to
|
|
174
|
+
// resolveHttpIngressListen's disabled port 0 (which would bind a random port).
|
|
175
|
+
const port = options.port ?? (listen.enabled ? listen.port : DEFAULT_SERVE_APP_PORT);
|
|
176
|
+
// H2: unsigned dev traffic must not leak off-host; loopback unless opted out.
|
|
177
|
+
const host = options.host ?? (mode === 'development' ? '127.0.0.1' : '0.0.0.0');
|
|
178
|
+
// Listen BEFORE any async identity bootstrap (M5): the cluster's
|
|
179
|
+
// waitForHealthy is a 30s window and must see the port up promptly.
|
|
180
|
+
const server = await new Promise((resolve, reject) => {
|
|
181
|
+
const created = app.listen(port, host, () => {
|
|
182
|
+
logger('serveApp.listening', { mode, host, port, mountDirectRouter });
|
|
183
|
+
resolve(created);
|
|
184
|
+
});
|
|
185
|
+
created.on('error', reject);
|
|
186
|
+
});
|
|
187
|
+
// Standalone connects the Relay AFTER the HTTP surface is live. connectRelay
|
|
188
|
+
// is non-blocking (returns a handle, connects in the background).
|
|
189
|
+
if (mode === 'standalone-production') {
|
|
190
|
+
const doConnect = options.__test?.connectRelay ?? connectRelay;
|
|
191
|
+
relayRef.current = doConnect({
|
|
192
|
+
privosUrl: loaded.relay.privosUrl,
|
|
193
|
+
standaloneIdentity: identityController,
|
|
194
|
+
descriptor: options.descriptor,
|
|
195
|
+
handler,
|
|
196
|
+
ui: options.ui,
|
|
197
|
+
logger: (event, fields) => logger(event, fields),
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
// Managed: warm the workload attestation in the background (the post-listen
|
|
201
|
+
// bootstrap the SDK's startHttpIngress does) and keep it fresh, so /ready
|
|
202
|
+
// reads a converged LAST-KNOWN-GOOD cache instead of forcing a synchronous
|
|
203
|
+
// broker token mint on every probe. dispose() stops the monitor.
|
|
204
|
+
if (mode === 'managed' && workloadIdentityClient) {
|
|
205
|
+
void workloadIdentityClient.getEffectiveCapabilities({ forceRefresh: true }).catch(() => undefined);
|
|
206
|
+
workloadIdentityClient.startCapabilityMonitor(30_000);
|
|
207
|
+
}
|
|
208
|
+
let signalHandlers = [];
|
|
209
|
+
const handle = {
|
|
210
|
+
mode,
|
|
211
|
+
server,
|
|
212
|
+
relayHandle: relayRef.current,
|
|
213
|
+
readiness,
|
|
214
|
+
async close() {
|
|
215
|
+
for (const { signal, handler: fn } of signalHandlers)
|
|
216
|
+
process.removeListener(signal, fn);
|
|
217
|
+
signalHandlers = [];
|
|
218
|
+
if (relayRef.current)
|
|
219
|
+
await relayRef.current.stop();
|
|
220
|
+
await new Promise((resolve, reject) => {
|
|
221
|
+
server.close((error) => (error ? reject(error) : resolve()));
|
|
222
|
+
});
|
|
223
|
+
workloadIdentityClient?.dispose();
|
|
224
|
+
},
|
|
225
|
+
};
|
|
226
|
+
if (options.installSignalHandlers ?? true) {
|
|
227
|
+
for (const signal of ['SIGTERM', 'SIGINT']) {
|
|
228
|
+
const fn = () => {
|
|
229
|
+
logger('serveApp.shutdown', { signal });
|
|
230
|
+
handle.close().catch((error) => {
|
|
231
|
+
logger('serveApp.shutdown_failed', { error: String(error) });
|
|
232
|
+
process.exitCode = 1;
|
|
233
|
+
});
|
|
234
|
+
};
|
|
235
|
+
process.once(signal, fn);
|
|
236
|
+
signalHandlers.push({ signal, handler: fn });
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
return handle;
|
|
240
|
+
}
|
|
241
|
+
function buildReadiness(input) {
|
|
242
|
+
if (input.mode === 'managed') {
|
|
243
|
+
const client = input.workloadIdentityClient;
|
|
244
|
+
// Read the LAST-KNOWN-GOOD attestation (no broker round-trip). The Docker
|
|
245
|
+
// HEALTHCHECK probes /ready every 30s with a 3s timeout, so it must not
|
|
246
|
+
// force a synchronous token mint that a transient broker latency spike
|
|
247
|
+
// could push past the timeout and flap the container. Freshness comes from
|
|
248
|
+
// the background capability monitor `serveApp` starts after listen.
|
|
249
|
+
return async () => {
|
|
250
|
+
const caps = client.peekEffectiveCapabilities();
|
|
251
|
+
const ok = caps.status === 'paired' || caps.status === 'active';
|
|
252
|
+
return {
|
|
253
|
+
ok,
|
|
254
|
+
status: ok ? 200 : 503,
|
|
255
|
+
body: {
|
|
256
|
+
mode: 'managed',
|
|
257
|
+
workload: caps.status,
|
|
258
|
+
scopes: caps.scopes.length,
|
|
259
|
+
...(caps.reason ? { reason: caps.reason } : {}),
|
|
260
|
+
},
|
|
261
|
+
};
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
if (input.mode === 'standalone-production') {
|
|
265
|
+
const check = createStandaloneReadinessCheck({
|
|
266
|
+
isRelayAuthenticated: () => input.relayRef.current?.isConnected() ?? false,
|
|
267
|
+
resolveManifest: input.resolveManifest,
|
|
268
|
+
});
|
|
269
|
+
return async () => {
|
|
270
|
+
const result = await check();
|
|
271
|
+
return { ok: result.ok, status: result.status, body: result.body };
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
// development: trivial 200 — no trust to attest, unsigned local surface.
|
|
275
|
+
return async () => ({ ok: true, status: 200, body: { mode: 'development' } });
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=serve-app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve-app.js","sourceRoot":"","sources":["../src/serve-app.ts"],"names":[],"mappings":"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"}
|