

import { PROJECT } from '../../@utility/constants/project'

import { PROVIDER_CONSTANTS, PROVIDER_TABLE } from '../../provider/@utility/constants/EXTERNAL_USE_ONLY'

import { addProvider } from '../../provider/@utility/algorithms/provider/add-provider'
import { addProviderCredential } from '../../provider/@utility/algorithms/provider/add-provider-credential'
import { deleteProvider } from '../../provider/@utility/algorithms/provider/delete-provider'
import { deleteProviderCredential } from '../../provider/@utility/algorithms/provider/delete-provider-credential'
import { getProvider } from '../../provider/@utility/algorithms/provider/get-provider'
import { getProviderCredential } from '../../provider/@utility/algorithms/provider/get-provider-credential'
import { getProviderCredentialList } from '../../provider/@utility/algorithms/provider/get-provider-credential-list'
import { getProviderList } from '../../provider/@utility/algorithms/provider/get-provider-list'
import { getRandomProviderCredential } from '../../provider/@utility/algorithms/provider/get-random-provider-credential'
import { isValidProviderType } from '../../provider/@utility/algorithms/provider/is-valid-provider-type'
import { loadProviderCredentialList } from '../../provider/@utility/algorithms/provider/load-provider-credential-list'
import { loadProviderList } from '../../provider/@utility/algorithms/provider/load-provider-list'
import { multiplexProviderFunction } from '../../provider/@utility/algorithms/provider/multiplex-provider-function'

import { multiplexerTable } from '../../provider/@utility/variables/provider'

const javascriptLibrary = {
  PROJECT,
  constant: {
    ...PROVIDER_CONSTANTS,
    ...PROVIDER_TABLE
  },

  // Provider related functions
  addProvider,
  addProviderCredential,
  deleteProvider,
  deleteProviderCredential,
  getProvider,
  getProviderCredential,
  getProviderCredentialList,
  getProviderList,
  getRandomProviderCredential,
  isValidProviderType,
  loadProviderCredentialList,
  loadProviderList,
  multiplexProviderFunction,

  // Multiplexer related functions
  ...multiplexerTable
}

export {
  javascriptLibrary
}