Coder Social home page Coder Social logo

js-client's Introduction

netlify/js-client

npm version build status windows build status coverage dependencies downloads

A Netlify open-api client that works in the browser and Node.js.

Usage

const NetlifyAPI = require('netlify')
const client = new NetlifyAPI('1234myAccessToken')
const sites = await client.listSites()

Using Open API methods

const NetlifyAPI = require('netlify')
const client = new NetlifyAPI('1234myAccessToken')

// Fetch sites
const sites = await client.listSites()

// Create a site. Notice `body` here for sending OpenAPI body
const site = await netlify.createSite({
  body: {
    name: `my-awesome-site`
    // ... https://open-api.netlify.com/#/default/createSite
  }
})

// Delete site. Notice `site_id` is a path parameter https://open-api.netlify.com/#/default/deleteSite
await netlify.deleteSite({
  site_id: siteId
})

API

client = new NetlifyAPI([accessToken], [opts])

Create a new instance of the Netlify API client with the provided accessToken.

accessToken is optional. Without it, you can't make authorized requests.

opts includes:

{
  userAgent: 'netlify/js-client',
  scheme: 'https',
  host: 'api.netlify.com',
  pathPrefix: '/api/v1',
  globalParams: {} // parameters you want available for every request.
  // Global params are only sent of the open-api spec specifies the provided params.
}

client.accessToken

A setter/getter that returns the accessToken that the client is configured to use. You can set this after the class is instantiated, and all subsequent calls will use the newly set accessToken.

client.basePath

A getter that returns the formatted base URL of the endpoint the client is configured to use.

Open API Client methods

The client is dynamically generated from the open-api definition file. Each method is is named after the operationId name of each endpoint action. To see list of available operations see the open-api website.

Every open-api method has the following signature:

promise(response) = client.operationId([params], [opts])

Perform a call to the given endpoint corresponding with the operationId. Returns promise that will resolve with the body of the response, or reject with an error with details about the request attached. Rejects if the status > 400.

  • params is an object that includes any of the required or optional endpoint parameters.
  • params.body should be an object which gets serialized to JSON automatically. Any object can live here but refer to the open-api specification for allowed fields in a particular request body.
  • If the endpoint accepts binary, params.body can be a Node.js readable stream or stream ctor (e.g. () => fs.createReadStream('./foo')). A Stream ctor function is required to support rate limit retry.
// example params
{
  any_param_needed,
  paramsCanAlsoBeCamelCase,
  body: {
    an: 'arbitrary js object'
  }
}

Optional opts can include any property you want passed to node-fetch. The headers property is merged with some defaultHeaders.

// example opts
{
  headers: { // Default headers
    'User-agent': 'netlify-js-client',
    accept: 'application/json'
  }
  // any other properties for node-fetch
}

All methods are conveniently consumed with async/await:

async function getSomeData () {
  // Calls may fail!
  try {
    return await client.getSiteDeploy({
      siteId: '1234abcd',
      deploy_id: '4567'
    })
  } catch (e) {
    // handle error
  }
}

If the request response includes json in the contentType header, fetch will deserialize the JSON body. Otherwise the text of the response is returned.

API Flow Methods

Some methods have been added in addition to the open API methods that make certain actions simpler to perform.

promise(accessToken) = client.getAccessToken(ticket, [opts])

Pass in a ticket and get back an accessToken. Call this with the response from a client.createTicket({ client_id }) call. Automatically sets the accessToken to this.accessToken and returns accessToken for the consumer to save for later.

Optional opts include:

{
  poll: 1000, // number of ms to wait between polling
  timeout: 3.6e6 // number of ms to wait before timing out
}

See the authenticating docs for more context.

// example:
async function login () {
  const ticket = await api.createTicket({
    clientId: CLIENT_ID
  })
  // Open browser for authentication
  await openBrowser(`https://app.netlify.com/authorize?response_type=ticket&ticket=${ticket.id}`)
  const accessToken = await api.getAccessToken(ticket)
  // API is also set up to use the returned access token as a side effect
  return accessToken // Save this for later so you can quickly set up an authenticated client
}

promise(deploy) = client.deploy(siteId, buildDir, [opts])

Node.js Only: Pass in a siteId, a buildDir (the folder you want to deploy) and an options object to deploy the contents of that folder. Sometimes this method needs to write to a tmpDir. By default tmpDir is a folder in the system temporary directory.

The following paths can be passed in the options:

  • configPath (path to a netlify.toml file that includes redirect rules for the deploy, etc.)
  • functionsDir (a folder with lambda functions to deploy)

Optional opts include:

{
  functionsDir: null, // path to a folder of functions to deploy
  configPath: null, // path to a netlify.toml file to include in the deploy (e.g. redirect support for manual deploys)
  draft: false, // draft deploy or production deploy
  message: undefined, // a short message to associate with the deploy
  deployTimeout: 1.2e6, // 20 mins
  parallelHash: 100, // number of parallel hashing calls
  parallelUpload: 15, // number of files to upload in parallel
  maxRetry: 5, // number of times to try on failed file uploads
  filter: filepath => { /* return false to filter a file  from the deploy */ },
  tmpDir: tempy.directory(), // a temporary directory to zip functions into
  statusCb: statusObj => {
    // a callback function to receive status events
    /* statusObj: {
            type: name-of-step
            msg: msg to print
            phase: [start, progress, stop]
        } */
    // See https://github.com/netlify/cli/blob/v2.0.0-beta.3/src/commands/deploy.js#L161-L195
    // for an example of how this can be used.
  }
 }

UMD Builds

A UMD build is provided for your convenience, however browser support is still experimental. Contributions to improve browser support are welcome.

Contributing

See CONTRIBUTING.md for more info on how to make contributions to this project.

License

MIT. See LICENSE for more details.

js-client's People

Contributors

bcomnes avatar biilmann avatar calavera avatar davej avatar davidwells avatar felipeleusin avatar fool avatar grifotv avatar leonardodino avatar pentiado avatar ruemic avatar tobiaslins avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.