I use react-native to connect to fat-secret. Heres my code, maybe it will help you or someone else:
var CryptoJS = require('crypto-js/crypto-js');
var OAUTH_CONSUMER_KEY = '*********************************';
var SHARED_SECRET = '*********************************';
var APPLICATION = 'MyApp';
var REQUEST_METHOD = 'GET';
var OAUTH_SIGNATURE_METHOD = 'HMAC-SHA1';
var OAUTH_VERSION = '1.0';
// Optional
var FORMAT = 'json';
module.exports = {
 searchRecipes: function(SEARCH_EXPRESSION, RECIPE_TYPE, PAGE_NUMBER, MAX_RESULTS){
  var METHOD = 'recipes.search';
  var OAUTH_TIMESTAMP = new Date().getTime();
  var OAUTH_NONCE = ''+new Date().getTime();
  // Create a Signature Base String
  var REQUEST_URL_ENCODED = encodeURIComponent(REQUEST_URL);
  var NORMALISED_PARAMETERS = 'format='+FORMAT;  Â
  if(MAX_RESULTS != null)
   NORMALISED_PARAMETERS += '&max_results='+MAX_RESULTS;
  NORMALISED_PARAMETERS += '&method='+METHOD;
  NORMALISED_PARAMETERS += '&oauth_consumer_key='+OAUTH_CONSUMER_KEY;
  NORMALISED_PARAMETERS += '&oauth_nonce='+OAUTH_NONCE;
  NORMALISED_PARAMETERS += '&oauth_signature_method='+OAUTH_SIGNATURE_METHOD;
  NORMALISED_PARAMETERS += '&oauth_timestamp='+OAUTH_TIMESTAMP;
  NORMALISED_PARAMETERS += '&oauth_version='+OAUTH_VERSION;
  if(PAGE_NUMBER != null)
   NORMALISED_PARAMETERS += '&page_number='+PAGE_NUMBER; Â
  if(RECIPE_TYPE != null)
   NORMALISED_PARAMETERS += '&recipe_type='+RECIPE_TYPE;
  if(SEARCH_EXPRESSION != null)
   NORMALISED_PARAMETERS += '&search_expression='+SEARCH_EXPRESSION;
  NORMALISED_PARAMETERS_ENCODED = encodeURIComponent(NORMALISED_PARAMETERS);
  var BASE_STRING = `${REQUEST_METHOD}&${REQUEST_URL_ENCODED}&${NORMALISED_PARAMETERS_ENCODED}`;
  // Calculate the Signature value
  SHARED_SECRET+='&'; // no user, & needed  Â
  var OAUTH_SIGNATURE = CryptoJS.HmacSHA1(BASE_STRING, SHARED_SECRET);
  var OAUTH_SIGNATURE_BASE64 = CryptoJS.enc.Base64.stringify(OAUTH_SIGNATURE);
  var OAUTH_SIGNATURE_BASE64_ENCODED = encodeURIComponent(OAUTH_SIGNATURE_BASE64);
  var OAUTH_REQUEST_URL = `${REQUEST_URL}?${NORMALISED_PARAMETERS}&oauth_signature=${OAUTH_SIGNATURE_BASE64_ENCODED}`;
  // Send the Request
  return fetch(OAUTH_REQUEST_URL)
   .then((response) => response.json())
   .then((responseData) => {
    console.log('responseData');
    console.log(responseData);
    return responseData;
   });
 },
 getRecipeDetails: function(RECIPE_ID){
  var METHOD = 'recipe.get';
  var OAUTH_TIMESTAMP = new Date().getTime();
  var OAUTH_NONCE = ''+new Date().getTime();
  // Create a Signature Base String
  var REQUEST_URL_ENCODED = encodeURIComponent(REQUEST_URL);
  var NORMALISED_PARAMETERS = 'format='+FORMAT;  Â
  NORMALISED_PARAMETERS += '&method='+METHOD;
  NORMALISED_PARAMETERS += '&oauth_consumer_key='+OAUTH_CONSUMER_KEY;
  NORMALISED_PARAMETERS += '&oauth_nonce='+OAUTH_NONCE;
  NORMALISED_PARAMETERS += '&oauth_signature_method='+OAUTH_SIGNATURE_METHOD;
  NORMALISED_PARAMETERS += '&oauth_timestamp='+OAUTH_TIMESTAMP;
  NORMALISED_PARAMETERS += '&oauth_version='+OAUTH_VERSION;
  NORMALISED_PARAMETERS += '&recipe_id='+RECIPE_ID;
  NORMALISED_PARAMETERS_ENCODED = encodeURIComponent(NORMALISED_PARAMETERS);
  var BASE_STRING = `${REQUEST_METHOD}&${REQUEST_URL_ENCODED}&${NORMALISED_PARAMETERS_ENCODED}`;
  // Calculate the Signature value
  SHARED_SECRET+='&'; // no user, & needed  Â
  var OAUTH_SIGNATURE = CryptoJS.HmacSHA1(BASE_STRING, SHARED_SECRET);
  var OAUTH_SIGNATURE_BASE64 = CryptoJS.enc.Base64.stringify(OAUTH_SIGNATURE);
  var OAUTH_SIGNATURE_BASE64_ENCODED = encodeURIComponent(OAUTH_SIGNATURE_BASE64);
  var OAUTH_REQUEST_URL = `${REQUEST_URL}?${NORMALISED_PARAMETERS}&oauth_signature=${OAUTH_SIGNATURE_BASE64_ENCODED}`;
  // Send the Request
  return fetch(OAUTH_REQUEST_URL)
   .then((response) => response.json())
   .then((responseData) => {
    console.log('responseData');
    console.log(responseData);
    return responseData;
   });
 }
}