{"record":{"id":"0d2baf08595879a3","repo":"hcengineering/platform","slug":"love-service-endpoint-not-found","errorCode":null,"errorMessage":"Love service endpoint not found","messagePattern":"Love service endpoint not found","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"plugins/love-resources/src/loveClient.ts","lineNumber":74,"sourceCode":"        await fetch(concatLink(endpoint, '/startRecord'), {\n          method: 'POST',\n          headers: {\n            Authorization: 'Bearer ' + token,\n            'Content-Type': 'application/json'\n          },\n          body: JSON.stringify({ roomName, room: room.name, meetingMinutes: get(currentMeetingMinutes)?._id })\n        })\n      }\n    } catch (err: any) {\n      Analytics.handleError(err)\n      console.error(err)\n    }\n  }\n\n  private getLoveEndpoint (): string {\n    const endpoint = getMetadata(love.metadata.ServiceEnpdoint)\n    if (endpoint === undefined) {\n      throw new Error('Love service endpoint not found')\n    }\n\n    return endpoint\n  }\n\n  private async refreshRoomToken (room: Room): Promise<string> {\n    const sessionName = this.getTokenRoomName(room)\n    const endpoint = this.getLoveEndpoint()\n    if (endpoint === undefined) {\n      throw new Error('Love service endpoint not found')\n    }\n    const myPerson = await getPersonByPersonRef(getCurrentEmployee())\n    if (myPerson == null) {\n      throw new Error('Cannot find current person')\n    }\n    const platformToken = getPlatformToken()\n    const res = await fetch(concatLink(endpoint, '/getToken'), {\n      method: 'POST',","sourceCodeStart":56,"sourceCodeEnd":92,"githubUrl":"https://github.com/hcengineering/platform/blob/63e28dc96483967b2fc21c881b3f1023c1de7718/plugins/love-resources/src/loveClient.ts#L56-L92","documentation":"getLoveEndpoint reads the 'Love service endpoint' from client metadata (love.metadata.ServiceEnpdoint). If that metadata key is undefined — i.e. the server never injected the endpoint URL into the client configuration — the client cannot know where the Love service lives and throws immediately. This is a configuration-missing error thrown before any network call is attempted.","triggerScenarios":"Any LoveClient method that resolves the endpoint (directly or via refreshRoomToken) runs in a client bundle that was started without the love service endpoint metadata registered, e.g. endpoint or getRoomToken called before server config is applied.","commonSituations":"Self-hosted deployment where the love/voximplant service URL was never configured; frontend built/started before the backend registered love.metadata.ServiceEnpdoint; typo or outdated plugin version where the metadata key name (note the 'ServiceEnpdoint' spelling) does not match what the server sets.","solutions":["Ensure the server/account configuration sets the love service endpoint metadata (love.metadata.ServiceEnpdoint) before the client initializes; restart/reconnect after configuring.","Check the deployment config (e.g. workspace/service URL settings) and add the Love service endpoint, then reload the client.","Verify frontend and love plugin versions match so the metadata key is the one the server actually writes.","In code, read the metadata first and bail out with a friendly message instead of constructing the client when it is undefined."],"exampleFix":"// before\nconst client = new LoveClient(token)\nconst ep = client.endpoint // throws if metadata missing\n// after\nconst endpoint = getMetadata(love.metadata.ServiceEnpdoint)\nif (endpoint === undefined) {\n  console.error('Love service endpoint is not configured')\n} else {\n  const client = new LoveClient(token)\n  const ep = client.endpoint\n}","handlingStrategy":"try-catch","validationCode":"const endpoint = getMetadata(love.metadata.ServiceEnpdoint)\nif (endpoint === undefined) {\n  // service not configured; do not construct/use LoveClient\n  return\n}","typeGuard":"function hasLoveEndpoint (ep: string | undefined): ep is string {\n  return typeof ep === 'string' && ep.length > 0\n}","tryCatchPattern":"try {\n  const ep = client.endpoint\n} catch (err) {\n  if (err.message === 'Love service endpoint not found') {\n    showSetupRequiredNotice()\n    return\n  }\n  throw err\n}","preventionTips":["Configure the love service endpoint in deployment settings before shipping the client.","Verify after bootstrap that love.metadata.ServiceEnpdoint is set; surface a config warning early.","Keep client and server plugin versions in sync so metadata keys match."],"tags":["configuration","missing-metadata","service-endpoint","deployment"],"backgroundTag":"missing-service-endpoint","analyzedSha":"63e28dc96483967b2fc21c881b3f1023c1de7718","analyzedAt":"2026-08-29T15:21:27.377Z","schemaVersion":2},"datasetVersion":"2026-08-29T17:17:51.833Z"}