{"record":{"id":"bc3ddc80f5bd7e1c","repo":"transloadit/uppy","slug":"facebook-provider-secret-is-not-configured","errorCode":null,"errorMessage":"Facebook provider secret is not configured","messagePattern":"Facebook provider secret is not configured","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"critical","filePath":"packages/@uppy/companion/src/server/provider/facebook/index.ts","lineNumber":154,"sourceCode":"      const qs: Record<string, string> = {\n        fields: 'name,cover_photo,created_time,type',\n      }\n\n      const cursor = query?.['cursor'] ?? null\n\n      if (typeof cursor === 'string') {\n        qs['after'] = cursor\n      }\n\n      let path = 'me/albums'\n      if (directory) {\n        path = `${directory}/photos`\n        qs['fields'] = 'icon,images,name,width,height,created_time'\n      }\n\n      const { secret } = (await companion.getProviderCredentials?.())!\n      if (secret == null) {\n        throw new Error('Facebook provider secret is not configured')\n      }\n\n      const responses = await runRequestBatch({\n        secret,\n        token,\n        requests: [\n          {\n            method: 'GET',\n            relative_url: `me?${new URLSearchParams({ fields: 'email' }).toString()}`,\n          },\n          { method: 'GET', relative_url: `${path}?${new URLSearchParams(qs)}` },\n        ],\n      })\n      const response1 = responses[0]\n      const response2 = responses[1]\n      if (!response1 || !response2) {\n        throw new Error('Unexpected Facebook response: missing batch result')\n      }","sourceCodeStart":136,"sourceCodeEnd":172,"githubUrl":"https://github.com/transloadit/uppy/blob/5d4dedd02a1ac0ae022c75c54aca76558f88e256/packages/@uppy/companion/src/server/provider/facebook/index.ts#L136-L172","documentation":"The Facebook provider needs the app's client secret to sign batch requests (appsecret_proof). list() fetches provider credentials and throws this error when secret is null/undefined — i.e. the Facebook app secret is not configured on this Companion instance.","triggerScenarios":"Invoking the Facebook list/listWithPagination flow (browsing files in the Dashboard) while companionOptions.providerOptions.facebook.secret (or the corresponding env var FACEBOOK_SECRET / credentials service response) is unset or returns null.","commonSituations":"Facebook key is set but the secret env var was forgotten or misspelled, only one of key/secret is provided via a custom credentials service, or a multi-tenant setup where the credentials resolver omits secret.","solutions":["Set both Facebook credentials: FACEBOOK_KEY and FACEBOOK_SECRET env vars (or providerOptions.facebook.key and .secret)","If using a credentialsUrl service, ensure its response includes both key and secret fields","Restart Companion after adding the secret and verify it loads (check startup logs)","Confirm the secret matches the app configured at developers.facebook.com"],"exampleFix":"# before\nFACEBOOK_KEY=123456 uppy-companion\n\n# after\nFACEBOOK_KEY=123456\nFACEBOOK_SECRET=abcdef1234567890 uppy-companion","handlingStrategy":"validation","validationCode":"// At startup, verify Facebook credentials are complete\nconst { key, secret } = resolveFacebookCredentials(providerOptions)\nif (!key || !secret) {\n  throw new Error('Facebook provider requires both key and secret')\n}","typeGuard":"function hasFacebookSecret(creds: { secret?: string | null } | undefined): creds is { secret: string } {\n  return typeof creds?.secret === 'string' && creds.secret.length > 0\n}","tryCatchPattern":null,"preventionTips":["Add a startup config check asserting all configured providers have complete credentials","Use an env-var schema validator (e.g. envalid/zod) so missing secrets fail fast","Document required env vars per provider in deployment runbooks"],"tags":["companion","facebook","configuration","credentials"],"backgroundTag":"missing-configuration-value","analyzedSha":"5d4dedd02a1ac0ae022c75c54aca76558f88e256","analyzedAt":"2026-08-28T12:18:41.267Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}