{"record":{"id":"0fb30c98bd0bc135","repo":"JuliusBrussee/caveman","slug":"bedrock-missing-credential","errorCode":null,"errorMessage":"bedrock: missing credential","messagePattern":"bedrock: missing credential","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"proxy/providers/bedrock/signing.go","lineNumber":147,"sourceCode":"\t\treturn \"\", fmt.Errorf(\"bedrock: exact request payload hash is unavailable\")\n\t}\n\tdefer body.Close()\n\traw, err := io.ReadAll(body)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"bedrock: exact request payload hash is unavailable\")\n\t}\n\treturn awssig.HashPayload(raw), nil\n}\n\nfunc credentialAuthKind(credential providers.Credential) (string, error) {\n\tkind := strings.ToLower(strings.TrimSpace(credential.AuthKind))\n\tswitch kind {\n\tcase \"bedrock_api_key\", \"aws_access_keys\":\n\t\treturn kind, nil\n\tcase \"\":\n\t\tkey := strings.TrimSpace(credential.Key)\n\t\tif key == \"\" {\n\t\t\treturn \"\", fmt.Errorf(\"bedrock: missing credential\")\n\t\t}\n\t\t// Backward compatibility for existing x-cave-upstream-key and stored\n\t\t// connection values. A complete colon-form credential remains IAM. An\n\t\t// AKIA/ASIA-looking partial value fails as IAM instead of being sent as a\n\t\t// bearer. Every other opaque value is a Bedrock API key.\n\t\tif _, err := parseAWSCredentials(key); err == nil {\n\t\t\treturn \"aws_access_keys\", nil\n\t\t}\n\t\tif strings.HasPrefix(key, \"AKIA\") || strings.HasPrefix(key, \"ASIA\") {\n\t\t\treturn \"aws_access_keys\", nil\n\t\t}\n\t\treturn \"bedrock_api_key\", nil\n\tdefault:\n\t\treturn \"\", fmt.Errorf(\"bedrock: unsupported credential auth kind\")\n\t}\n}\n\n// parseAWSCredentials decodes the \"accessKeyId:secretAccessKey[:sessionToken]\"","sourceCodeStart":129,"sourceCodeEnd":165,"githubUrl":"https://github.com/JuliusBrussee/caveman/blob/27d5a3981a347890211bb1bf2439e5c821a63bc9/proxy/providers/bedrock/signing.go#L129-L165","documentation":"Error \"bedrock: missing credential\" thrown in JuliusBrussee/caveman.","triggerScenarios":"Thrown at proxy/providers/bedrock/signing.go:147 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Provide a Bedrock credential for signing."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"27d5a3981a347890211bb1bf2439e5c821a63bc9","analyzedAt":"2026-08-15T09:26:11.751Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}