Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@planningcenter/api-client

Package Overview
Dependencies
Maintainers
0
Versions
17
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@planningcenter/api-client

A Planning Center JavaScript API client that will make you smile

  • 2.4.1
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
0
Created
Source

Planning Center API Client

Description

A javascript library that provides a client for interacting with Planning Center's Graph API as well as helper methods for transforming request and response data.

View the classic README here.

Installation

yarn add @planningcenter/api-client

API Client

General Usage

import { Client } from "@planningcenter/api-client"
const client = new Client({ app: "services", version: "2018-11-01" })

client.get({
  url: '/plans',
  data: {
    fields: {
      Plan: ['dates', 'series', 'title'],
    },
  }
})

Client request methods will return a promise. When the promise is resolved, you'll be left with a transformed response (see below).

Get

When making a request, the client will enforce the use of sparse fieldsets which requires the fields key.

client.get({
  url: '/plans',
  data: {
    where: { title: 'Plan Title' },
    include: ['series'],
    order: 'created_at',
    fields: {
      Plan: ['dates', 'series', 'title'],
      Series: ['title', 'artwork_for_dashboard']
    },
  }
})

🚨 NOTE: When including records you also need to define the relation in fields. See the usage of 'series' above.

Pagination

The default value of perPage is 100. You can adjust this value in the data attribute:

client.get({
  url: '/plans',
  data: {
    perPage: 25,
    fields: {
      Plan: ['title'],
    },
  }
})

If you need to return all results from a collection, instead of only the first page of results, you can include the walk: true attribute inside the data attribute:

client.get({
  url: '/plans',
  data: {
    walk: true,
    fields: {
      Plan: ['title'],
    },
  }
})

This can be used in combination with perPage to make many smaller requests for a large collection of data.

Patch

client.patch({
  url: `/series/${seriesId}`,
  data: {
    fields: { Series: 'title,artwork_for_dashboard' },
    data: { type: 'Series', attributes: { name: 'New Series Name' }
  }
})

Post

client.post({
  url: '/series',
  data: {
    fields: { Series: 'title,artwork_for_dashboard' },
    data: {
      type: 'Series',
      attributes: { name: 'New Series Name' },
      relationships: {
        plan: {
          data: { type: 'Plan', id }
        }
      }
    }
  }
})

Delete

client.delete({ url: `/series/${seriesId}` })

Helper Functions

The Client class will automatically transform request and response data, but helpers for transforming data are also available to be used manually.

transformRequestData

Takes an object with camelCase request parameters and transforms to a more api friendly format.

Input
import { transformRequestData } from "@planningcenter/api-client"

transformRequestData({
  fields: { Song: ["title", "arrangements"], Arrangement: ["name"] },
  include: "arrangements",
  where: { title: "I Like Bugs" },
})
Output
{
  "fields[Song]": "title,arrangements",
  "fields[Arrangement]": "name",
  include: "arrangements",
  per_page: 100,
  "where[title]": "I Like Bugs",
}

transformResponse

Takes an JSON API spec-adhering response and transforms it to a more appropriate format for JavaScript.

Input
import { transformResponse } from "@planningcenter/api-client"

transformResponse({
  "data": {
    "type": "Person",
    "id": "123",
    "attributes": {
      "first_name": "Marvin",
      "last_name": "Gaye"
    },
    "relationships": {
      "top_song": {
        "data": {
          "type": "Song",
          "id": "456"
        }
      },
      "instruments": {
        "data": [{
          "type": "Instrument",
          "id": "789"
        }]
      }
    },
    "links": { ... }
  },
  "included": [
    {
      "type": "Instrument",
      "id": "789",
      "attributes": {
        "name": "Piano"
      }
    }
  ],
  "meta": {
    "parent": {
      "id": "1",
      "type": "Organization"
    }
  }
})
Output
{
  data: {
    // string IDs are parsed into integers
    id: 123,
    type: "Person",

    // all keys are camel-cased
    firstName: "Marvin",
    lastName: "Gaye",

    // belongs to relationships are given a singular foreign key property
    topSongId: 456,
    topSongType: "Song",

    // relationships not also `included` are given a property with a null value
    topSong: null,

    // has many relationships are given a plural foreign key property
    instrumentIds: [789],

    // included records are gathered via relationships & placed in a collection:
    instruments: [
      { id: 789, type: "Instrument", name: "Piano" },
    ],

    links: {}
  },
  // response meta is available in case you need it
  meta: { parent: { id: "1", type: "Organization" } }
}

Contributing

Pull requests are welcome and encouraged! See the contributing guidelines for more information.

FAQs

Package last updated on 26 Aug 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc