utilities/urls.utilities.js

'use strict';

/** @class urls */

const urls = {
  /**
   * @function create
   * @memberof urls
   * @public
   * @description The create function generates a url for creating a new record.
   * @param {String} host The host FileMaker server.
   * @param {String} database The FileMaker database to target.
   * @param {String} layout The database layout to use.
   * @param {String} [version="vLatest"] The Data API version to use. The default is 'vLatest'.
   * @return {String} A URL to use when creating records.
   */
  create: (host, database, layout, version = 'vLatest') =>
    `${host}/fmi/data/${version}/databases/${database}/layouts/${layout}/records`,

  /**
   * @function update
   * @memberof urls
   * @public
   * @description The update function generates a url for updating a record.
   * @param {String} host The host FileMaker server.
   * @param {String} database The FileMaker database to target.
   * @param {String} layout The database layout to use.
   * @param {String} recordId The FileMaker internal record id to update.
   * @param {String} [version="vLatest"] The Data API version to use. The default is 'vLatest'.
   * @return {String} A URL to use when updating records.
   */
  update: (host, database, layout, recordId, version = 'vLatest') =>
    `${host}/fmi/data/${version}/databases/${database}/layouts/${layout}/records/${recordId}`,

  /**
   * @function delete
   * @memberof urls
   * @public
   * @description The delete funtion generates a url for  deleting a record.
   * @param {String} host The host FileMaker server.
   * @param {String} database The FileMaker database to target.
   * @param {String} layout The database layout to use.
   * @param {String} recordId The FileMaker internal record id to update.
   * @param {String} [version="vLatest"] The Data API version to use. The default is 'vLatest'.
   * @return {String} A URL to use when deleting records.
   */
  delete: (host, database, layout, recordId, version = 'vLatest') =>
    `${host}/fmi/data/${version}/databases/${database}/layouts/${layout}/records/${recordId}`,

  /**
   * @function get
   * @public
   * @memberOf urls
   * @description The get function generates a url to get a record's details.
   * @param {String} host The host FileMaker server.
   * @param {String} database The FileMaker database to target.
   * @param {String} layout The database layout to use.
   * @param {String} recordId The FileMaker internal record id to update.
   * @param {String} [version="vLatest"] The Data API version to use. The default is 'vLatest'.
   * @return {String} A URL to used when getting one record.
   */
  get: (host, database, layout, recordId, version = 'vLatest') =>
    `${host}/fmi/data/${version}/databases/${database}/layouts/${layout}/records/${recordId}`,

  /**
   * @function list
   * @public
   * @memberOf urls
   * @description The list function generates a url for listing records.
   * @param {String} host The host FileMaker server.
   * @param {String} database The FileMaker database to target.
   * @param {String} layout The database layout to use.
   * @param {String} [version="vLatest"] The Data API version to use. The default is 'vLatest'.
   * @return {String} A URL to use when listing records.
   */
  list: (host, database, layout, version = 'vLatest') =>
    `${host}/fmi/data/${version}/databases/${database}/layouts/${layout}/records`,

  /**
   * @function find
   * @public
   * @memberOf urls
   * @description The find function generates a url for performing a find request.
   * @param {String} host The host FileMaker server.
   * @param {String} database The FileMaker database to target.
   * @param {String} layout The database layout to use.
   * @param {String} [version="vLatest"] The Data API version to use. The default is 'vLatest'.
   * @return {String} A URL to use when performing a find.
   */
  find: (host, database, layout, version = 'vLatest') =>
    `${host}/fmi/data/${version}/databases/${database}/layouts/${layout}/_find`,

  /**
   * @function globals
   * @public
   * @memberOf urls
   * @description The global function generates a url for setting globals. Like FileMaker
   * globals, these values will only be set for the current session.
   * @param {String} host The host FileMaker server.
   * @param {String} database The FileMaker database to target.
   * @param {String} [version="vLatest"] The Data API version to use. The default is 'vLatest'.
   * @return {String} A URL to use when setting globals
   */
  globals: (host, database, version = 'vLatest') =>
    `${host}/fmi/data/${version}/databases/${database}/globals`,

  /**
   * @function logout
   * @memberOf urls
   * @public
   * @description The logout function generates a url for logging out of a FileMaker Session.
   * @param {String} host The host FileMaker server.
   * @param {String} database The FileMaker database to target.
   * @param {String} token The token to logout
   * @param {String} [version="vLatest"] The Data API version to use. The default is 'vLatest'.
   * @return {String} A URL to use when logging out of a FileMaker DAPI session.
   */
  logout: (host, database, token, version = 'vLatest') =>
    `${host}/fmi/data/${version}/databases/${database}/sessions/${token}`,

  /**
   * @function upload
   * @memberOf urls
   * @description The upload function generates a url for use when uploading files to FileMaker containers.
   * @public
   * @param {String} host The host FileMaker server.
   * @param {String} database The FileMaker database to target.
   * @param {String} layout The database layout to use.
   * @param {String} recordId the record id to use when inserting the file.
   * @param {String} fieldName the field to use when inserting a file.
   * @param {String|Number} [fieldRepetition=1] The field repetition to use when inserting the file. The default is 1.
   * @param {String} [version="vLatest"] The Data API version to use. The default is 'vLatest'.
   * @return {String} A URL to use when uploading files to FileMaker.
   */
  upload: (
    host,
    database,
    layout,
    recordId,
    fieldName,
    fieldRepetition = 1,
    version = 'vLatest'
  ) =>
    `${host}/fmi/data/${version}/databases/${database}/layouts/${layout}/records/${recordId}/containers/${fieldName}/${fieldRepetition}`,

  /**
   * @function authentication
   * @memberOf urls
   * @public
   * @description The authentication function generates a url for retrieving authentication tokens.
   * @param {String} host The host FileMaker server.
   * @param {String} database The FileMaker database to target.
   * @param {String} [version="vLatest"] The Data API version to use. The default is 'vLatest'.
   * @return {String} A URL to use when authenticating a FileMaker DAPI session.
   */
  authentication: (host, database, version = 'vLatest') =>
    `${host}/fmi/data/${version}/databases/${database}/sessions`,

  /**
   * @function layouts
   * @memberOf urls
   * @public
   * @description The layouts function generates a url for retrieving database layouts.
   * @param {String} host The host FileMaker server.
   * @param {String} database The FileMaker database to target.
   * @param {String} [version="vLatest"] The Data API version to use. The default is 'vLatest'.
   * @return {String} A URL for retrieving database layouts.
   */
  layouts: (host, database, version = 'vLatest') =>
    `${host}/fmi/data/${version}/databases/${database}/layouts`,

  /**
   * @function layout
   * @memberOf urls
   * @public
   * @description The layout function generates a url for getting specific layout metadata.
   * in exchange for Account credentials.
   * @param {String} host The host FileMaker server.
   * @param {String} database The FileMaker database to target.
   * @param {String} layout The database layout to use.
   * @param {String} [version="vLatest"] The Data API version to use. The default is 'vLatest'.
   * @return {String} A URL for retrieving specific layout metadata.
   */
  layout: (host, database, layout, version = 'vLatest') =>
    `${host}/fmi/data/${version}/databases/${database}/layouts/${layout}`,

  /**
   * @function scripts
   * @memberOf urls
   * @public
   * @description The scripts function generates a url for listing database scripts.
   * @param {String} host The host FileMaker server.
   * @param {String} database The FileMaker database to target.
   * @param {String} [version="vLatest"] The Data API version to use. The default is 'vLatest'.
   * @return {String} A URL for listing datbase scripts
   */
  scripts: (host, database, version = 'vLatest') =>
    `${host}/fmi/data/${version}/databases/${database}/scripts`,

  /**
   * @function duplicate
   * @memberOf urls
   * @public
   * @description The duplicate function generates a url for duplicating FileMaker records.
   * in exchange for Account credentials.
   * @param {String} host The host FileMaker server.
   * @param {String} database The FileMaker database to target.
   * @param {String} layout The database layout to use.
   * @param {String} recordId The FileMaker internal record id to duplicate.
   * @param {String} [version="vLatest"] The Data API version to use. The default is 'vLatest'.
   * @return {String} A URL to duplicate FileMaker records.
   */
  duplicate: (host, database, layout, recordId, version = 'vLatest') =>
    `${host}/fmi/data/${version}/databases/${database}/layouts/${layout}/records/${recordId}`,

  /**
   * @function productInfo
   * @memberOf urls
   * @public
   * @description The productInfo function generates a url for retrieving FileMaker Server metadata.
   * @param {String} host The host FileMaker server.
   * @param {String} [version="vLatest"] The Data API version to use. The default is 'vLatest'.
   * @return {String} The URL to use to retrieve FileMaker Server metadata.
   */
  productInfo: (host, version = 'vLatest') =>
    `${host}/fmi/data/${version}/productInfo`,

  /**
   * @function databases
   * @memberOf urls
   * @public
   * @description The databases function generates a url for retrieving FileMaker Server hosted databases.
   * @param {String} host The host FileMaker server.
   * @param {String} [version="vLatest"] The Data API version to use. The default is 'vLatest'.
   * @return {String} The URL to use to retrieve FileMaker Server hosted databases.
   */
  databases: (host, version = 'vLatest') =>
    `${host}/fmi/data/${version}/databases`,

  /**
   * @function script
   * @memberOf urls
   * @public
   * @description The script function generates a url for running a FileMaker script.
   * @param {String} host The host FileMaker server.
   * @param {String} database The FileMaker database to target.
   * @param {String} layout The database layout to use.
   * @param {String} script The name of the script to run .
   * @param {String|Object|Number} [parameter] Optional script parameters to pass to the called script.
   * @param {String} [version="vLatest"] The Data API version to use. The default is 'vLatest'.
   * @return {String} The URL to call a specific FileMaker script
   */
  script: (host, database, layout, script, parameter, version = 'vLatest') =>
    `${host}/fmi/data/${version}/databases/${database}/layouts/${layout}/script/${script}`
};

module.exports = { urls };