npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@icose/restmaker

v1.6.2

Published

A TypeScript utility to connect to the FileMaker Data API (REST) seamlessly.

Downloads

70

Readme

RestMaker

🚀 Run Tests

A TypeScript utility to connect to the FileMaker Data API (REST) seamlessly.

Table of Contents

Getting Started

Installation

npm install @icose/restmaker

Usage

This library is designed to work with the FileMaker Data API (REST). To use this library, you need to have a FileMaker Server with the Data API enabled. Start by creating a new instance of RestMaker with the server details:

import { RestMaker } from '@icose/restmaker'

const restMaker = new RestMaker({
  host: 'https://your-fm-server.com', // or http://your-fm-server.com
  database: 'your-database',
  username: 'your-username',
  password: 'your-password'
})

Take a look at the methods below to see how you can interact with the FileMaker Data API.

Session management

RestMaker will automatically manage the session for you, so if a session token times out it will attempt to start a new session. You can also manually manage the session by calling the logIn and logOut methods:

// Log in
await restMaker.logIn()

// Log out
await restMaker.logOut()

Creating a record

To create a record, you need to provide the layout name and the field data. Here is a complete example with type definitions:

const record = await restMaker.createRecord<YourRecordFields>({
  layout: 'your-layout',
  fieldData: {
    field1: 'value1',
    field2: 1234
  }
})

Editing a record

To update a record, you need to provide the layout name, the record ID, and the field data. Here is a complete example:

type YourRecordPortalFields = {
  portal1: {
    recordId: number
    field1: string
    field2: number
  }
}

const record = await restMaker.editRecord<
  YourRecordFields,
  YourRecordPortalFields
>({
  layout: 'your-layout',
  recordId: 'your-record-id',
  fieldData: {
    field1: 'value1',
    field2: 1234
  },
  portalData: {
    portal1: [
      {
        recordId: 'portal-record-id',
        field1: 'portal-value1',
        field2: 5678
      }
    ]
  }
})

Duplicate a record

To duplicate a record, you need to provide the layout name and the record ID. Here is a complete example:

const record = await restMaker.duplicateRecord({
  layout: 'your-layout',
  recordId: 'your-record-id'
})

Delete a record

To delete a record, you need to provide the layout name and the record ID. Here is a complete example:

const record = await restMaker.deleteRecord({
  layout: 'your-layout',
  recordId: 'your-record-id'
})

Get a record

To get a record, you need to provide the layout name and the record ID. Here is a complete example with type definitions, including the layout response and the portals:

const record = await restMaker.getRecord<
  YourRecordFields,
  YourRecordPortalFields
>({
  layout: 'your-layout',
  recordId: 'your-record-id',
  layoutResponse: 'your-relevant-layout',
  portals = ['portal1', 'portal2']
})

Get a range of records

To get a range of records, you need to provide the layout name and the range. Here is a complete example with type definitions, including the layout response, portals and sorting:

const records = await restMaker.getRecordRange<YourRecordFields, YourRecordPortalFields>({
  layout: 'your-layout',
  startingIndex: 1,
  limit: 10,
  layoutResponse: 'your-relevant-layout',
  portals = [
    {
        name: 'portal1',
        limit: 10
        offset: 5
    }
  ],
  sort = [
    {
      field: 'field1',
      order: 'asc'
    }
  ]
})

Find records

To find records, you need to provide the layout name and the query. Here is a complete example with type definitions, including the layout response, portals and sorting:

const records = await restMaker.findRecords<YourRecordFields, YourRecordPortalFields>({
  layout: 'your-layout',
  query: [
    {
        field1: 'value1'
    },
    {
        field1: 'value1'
        omit: true
    }
  ],
  layoutResponse: 'your-relevant-layout',
  portals = [
    {
        name: 'portal1',
        limit: 10
        offset: 5
    }
  ],
  sort = [
    {
      field: 'field1',
      order: 'ascend'
    }
  ]
})

Running a script in a request

You can also include the execution of a script in a lifecycle stage of a request. Here is a complete example:

const records = await restMaker.findRecords<YourRecordFields>({
  layout: 'your-layout',
  query: [
    {
      field1: 'value1'
    }
  ],
  sort = [
    {
      field: 'field1',
      order: 'ascend'
    }
  ],
  // This will run the script after the record is created,
  script: {
    name: 'your-script',
    param: 'your-param'
  },
  // This will run the script before the record is created,
  prerequestScript: {
    name: 'your-prerequest-script',
    param: 'your-param'
  },
  // This will run the script after the record is created,
  presortScript: {
    name: 'your-presort-script',
    param: 'your-param'
  }
})

Running a script standalone

You can also run a script standalone without any request. Here is a complete example:

const result = await restMaker.runScript({
  layout: 'your-layout',
  scriptName: 'your-script',
  scriptParameter: 'your-param'
})

Profiling mode

You can enable profiling to see the time taken for each request. This is useful for debugging and performance tuning. To enable profiling, set the enableProfiling option to true when creating a new instance of RestMaker:

const restMaker = new RestMaker({
  host: 'https://your-fm-server.com',
  database: 'your-database',
  username: 'your-username',
  password: 'your-password',
  profilingMode: true
})

Persistent mode

You can enable persistence to keep the session token between client instances (e.g. when using the library in a serverless environment). To enable persistence, set the enablePersistence option to true when creating a new instance of RestMaker:

const restMaker = new RestMaker({
  host: 'https://your-fm-server.com',
  database: 'your-database',
  username: 'your-username',
  password: 'your-password',
  persistentMode: {
    tokenEncryptionKey: 'your-encryption-key',
    existingEncryptedToken: null || 'your-existing-token'
  }
})

The existingEncryptedToken option is used to provide an existing encrypted token. This is useful when you want to keep the token between client instances, otherwise read below on how to get the token on the first run.

Debugging mode

You can enable debugging mode for a verbose output of most operations. To enable debugging mode, set the debuggingMode option to true when creating a new instance of RestMaker:

const restMaker = new RestMaker({
  host: 'https://your-fm-server.com',
  database: 'your-database',
  username: 'your-username',
  password: 'your-password',
  debuggingMode: true
})

Note: This will output a lot of information to the console, so please use it only for debugging purposes.

Getting the token

If you don't have a token and you want to get it, you can use the token() method:

const token = await restMaker.token()

Note: The token is always encrypted by default with its embedded expiration time, so you don't need to worry about anything else.

Contributing

Check out the Contributing Guidelines to get started on contributing to this repository.

License

This project is licensed under the MIT License. See the LICENSE file for details.