{"record":{"id":"06f99f21ed605851","repo":"we-promise/sure","slug":"snaptrade-is-not-authorized-06f99f","errorCode":null,"errorMessage":"SnapTrade is not authorized","messagePattern":"SnapTrade is not authorized","errorType":"exception","errorClass":"StandardError","httpStatus":null,"severity":"error","filePath":"app/models/snaptrade_item/provided.rb","lineNumber":29,"sourceCode":"    Provider::Snaptrade.new(self)\n  end\n\n  # Exchange an authorization code for tokens and mark the item usable.\n  def complete_oauth_exchange!(code:, redirect_uri:, code_verifier:)\n    payload = Provider::Snaptrade.exchange_code(\n      code: code,\n      redirect_uri: redirect_uri,\n      code_verifier: code_verifier\n    )\n    apply_oauth_tokens!(payload)\n    update!(status: :good)\n    payload\n  end\n\n  # Get the connection portal URL for linking brokerages\n  def connection_portal_url(redirect_url:, broker: nil)\n    provider = snaptrade_provider\n    raise StandardError, \"SnapTrade is not authorized\" unless provider\n\n    provider.get_connection_url(redirect_url: redirect_url, broker: broker)\n  end\n\n  # Fetch all brokerage connections from SnapTrade API. Returns Array<Hash>.\n  def fetch_connections\n    provider = snaptrade_provider\n    return [] unless provider\n\n    provider.list_connections\n  rescue Provider::Snaptrade::ApiError => e\n    Rails.logger.error \"SnaptradeItem #{id} - Failed to list connections: #{e.message}\"\n    raise\n  end\n\n  private\n\n    # Best-effort token revocation when the item is destroyed.","sourceCodeStart":11,"sourceCodeEnd":47,"githubUrl":"https://github.com/we-promise/sure/blob/e69894adb92547273377398c15f45c979cd9416a/app/models/snaptrade_item/provided.rb#L11-L47","documentation":"Error \"SnapTrade is not authorized\" thrown in we-promise/sure.","triggerScenarios":"Thrown at app/models/snaptrade_item/provided.rb:29 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"e69894adb92547273377398c15f45c979cd9416a","analyzedAt":"2026-08-21T18:22:41.165Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}