{"record":{"id":"8ace777e1f5eb2d2","repo":"paperclipai/paperclip","slug":"local-trusted-mode-only-supports-private-exposure","errorCode":null,"errorMessage":"local_trusted mode only supports private exposure","messagePattern":"local_trusted mode only supports private exposure","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"server/src/index.ts","lineNumber":565,"sourceCode":"    });\n  \n    db = createDb(embeddedConnectionString);\n    pluginMigrationDb = db;\n    logger.info(\"Embedded PostgreSQL ready\");\n    activeDatabaseConnectionString = embeddedConnectionString;\n    resolvedEmbeddedPostgresPort = port;\n    startupDbInfo = { mode: \"embedded-postgres\", dataDir, port };\n  }\n  \n  if (config.deploymentMode === \"local_trusted\" && !isLoopbackHost(config.host)) {\n    throw new Error(\n      `local_trusted mode requires loopback host binding (received: ${config.host}). ` +\n        \"Use authenticated mode for non-loopback deployments.\",\n    );\n  }\n  \n  if (config.deploymentMode === \"local_trusted\" && config.deploymentExposure !== \"private\") {\n    throw new Error(\"local_trusted mode only supports private exposure\");\n  }\n  \n  if (config.deploymentMode === \"authenticated\") {\n    if (config.authBaseUrlMode === \"explicit\" && !config.authPublicBaseUrl) {\n      throw new Error(\"auth.baseUrlMode=explicit requires auth.publicBaseUrl\");\n    }\n    if (config.deploymentExposure === \"public\") {\n      if (config.authBaseUrlMode !== \"explicit\") {\n        throw new Error(\"authenticated public exposure requires auth.baseUrlMode=explicit\");\n      }\n      if (!config.authPublicBaseUrl) {\n        throw new Error(\"authenticated public exposure requires auth.publicBaseUrl\");\n      }\n    }\n  }\n\n  const requestedListenPort = config.port;\n  const listenPort = await detectPort(requestedListenPort);","sourceCodeStart":547,"sourceCodeEnd":583,"githubUrl":"https://github.com/paperclipai/paperclip/blob/a7e689b3c35347b529cb9f54c9b9a8575a3dcab6/server/src/index.ts#L547-L583","documentation":"Startup safety check in startServer: deploymentMode is local_trusted but deploymentExposure is not 'private' (e.g. 'public'). local_trusted mode carries no authentication, so it is only permitted with private exposure; any non-private exposure setting is rejected at boot.","triggerScenarios":"Thrown at server/src/index.ts:526 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Keep exposure set to private when using local_trusted mode, or switch to authenticated mode for broader exposure."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"a7e689b3c35347b529cb9f54c9b9a8575a3dcab6","analyzedAt":"2026-08-18T22:49:45.177Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}