Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/didoo/figma-api
Figma REST API implementation with TypeScript, Promises & ES6
https://github.com/didoo/figma-api
figma figma-api figma-js
Last synced: about 1 month ago
JSON representation
Figma REST API implementation with TypeScript, Promises & ES6
- Host: GitHub
- URL: https://github.com/didoo/figma-api
- Owner: didoo
- License: mit
- Created: 2018-07-20T00:14:09.000Z (over 6 years ago)
- Default Branch: main
- Last Pushed: 2024-02-16T21:26:57.000Z (9 months ago)
- Last Synced: 2024-09-29T05:42:53.427Z (about 2 months ago)
- Topics: figma, figma-api, figma-js
- Language: JavaScript
- Homepage:
- Size: 516 KB
- Stars: 209
- Watchers: 6
- Forks: 42
- Open Issues: 11
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
Awesome Lists containing this project
README
[![NPM Version](https://badge.fury.io/js/figma-api.svg?style=flat)](https://www.npmjs.com/package/figma-api)
# figma-api
Full implementation of [Figma API](https://www.figma.com/developers/docs).
Figma api's file fully typed with TypeScript.
Both browser & nodejs supported.
Promises & ES6.
## Install
`npm i figma-api`
or browser version:
`https://raw.githubusercontent.com/didoo/figma-api/master/lib/figma-api.js`
`https://raw.githubusercontent.com/didoo/figma-api/master/lib/figma-api.min.js`All api in browser exported to global `Figma` object.
## Usage
```ts
import * as Figma from 'figma-api';export async function main() {
const api = new Figma.Api({
personalAccessToken: 'my token',
});const file = await api.getFile('my file key');
// ... access file data ...
}
```or in browser:
```js
const api = new Figma.Api({ personalAccessToken: 'my token' });api.getFile('my file key').then((file) => {
// access file data
});
```Change API endpoint setting `Figma.API_DOMAIN` & `Figma.API_VER` variables.
## Api
We have followed the same organisation as the official [Figma API documentation](https://www.figma.com/developers/api) to describe our API methods, so it's easier to find the exact endpoint call you are looking for.
Helpers
`Api.appendHeaders(headers: {}): void`
Populate headers with auth.`Api.request(url, opts): Promise`
Make request with auth headers.### Authentication
#### `new Api ({ personalAccessToken, oAuthToken })`
Creates new Api object with specified `personal` or `oAuthToken`.
[Documentation on how to get tokens](https://www.figma.com/developers/api#authentication)Helpers
```ts
function oAuthLink(
client_id: string,
redirect_uri: string,
scope: 'file_read',
state: string,
response_type: 'code',
): string;
```
Returns link for OAuth auth flow.
User should open this link, allow access and he will be redirected to `redirect_uri?code=`.
Then you should use `oAuthToken` method to get `access token`.```ts
function oAuthToken(
client_id: string,
client_secret: string,
redirect_uri: string,
code: string,
grant_type: 'authorization_code',
): Promise<{
access_token: string,
refresh_token: string,
expires_in: number,
}>
```
Returns `access token` info from oauth code (see `oAuthLink` method).### Figma files
Api.getFile
```ts
Api.getFile(fileKey, opts?: { version?, ids?, depth?, geometry?, plugin_data?: string, branch_data?: boolean })
```
[Require file data](https://www.figma.com/developers/api#get-files-endpoint) with specified version.Api.getFileNodes
```ts
Api.getFileNodes(fileKey, ids, opts?: { version?, depth?, geometry?, plugin_data? })
```
[Require file nodes data](https://www.figma.com/developers/api#get-file-nodes-endpoint) with specified version.Api.getImage
```ts
Api.getImage(fileKey, opts?: { ids, scale, format, svg_include_id?, svg_simplify_stroke?, use_absolute_bounds?, version?: string })
```
[Renders images](https://www.figma.com/developers/api#get-images-endpoint) from a file.Api.getImageFills
```ts
Api.getImageFills(fileKey)
```[Returns download links for all images present in image fills in a document.](https://www.figma.com/developers/api#get-image-fills-endpoint)
### Comments
Api.getComments
```ts
Api.getComments(fileKey)
```
[List of comments](https://www.figma.com/developers/api#get-comments-endpoint) left on the file.Api.postComment
```ts
Api.postComment(fileKey, message, client_meta, comment_id?)
```
[Posts a new comment on the file](https://www.figma.com/developers/api#post-comments-endpoint).Api.deleteComments
```ts
Api.deleteComment(fileKey, comment_id)
```
[Deletes a specific comment](https://www.figma.com/developers/api#delete-comments-endpoint). Only the person who made the comment is allowed to delete it.### Users
Api.getMe
```ts
Api.getMe()
```
[You can use the Users Endpoint](https://www.figma.com/developers/api#users-endpoints) to access information regarding the currently authenticated User. When using OAuth 2, the User in question must be authenticated through the Figma API to access their information.### Version history
Api.getVersions
```ts
Api.getVersions(fileKey)
```
A [list of the version](https://www.figma.com/developers/api#get-file-versions-endpoint) history of a file. The version history consists of versions, manually-saved additions to the version history of a file.
If the account is not on a paid team, version history is limited to the past 30 days. Note that version history will not include autosaved versions.### Projects
Api.getTeamProjects
```ts
Api.getTeamProjects(team_id)
```
[Lists the projects](https://www.figma.com/developers/api#get-team-projects-endpoint) for a specified team. Note that this will only return projects visible to the authenticated user or owner of the developer token. Note: it is not currently possible to programmatically obtain the team id of a user just from a token. To obtain a team id, navigate to a team page of a team you are a part of. The team id will be present in the URL after the word team and before your team name.Api.getProjectFiles
```ts
Api.getProjectFiles(project_id, opts?: { branch_data?: boolean })
```
[List the files](https://www.figma.com/developers/api#get-project-files-endpoint) in a given project.### Components and styles
Api.getTeamComponents
```ts
Api.getTeamComponents(team_id, opts?: { page_size?, after?, before? })
```[Get a paginated list of published components](https://www.figma.com/developers/api#get-team-components-endpoint) within a team library.
Api.getFileComponents
```ts
Api.getFileComponents(fileKey)
```[Get a list of published components](https://www.figma.com/developers/api#get-file-components-endpoint) within a file library.
Api.getComponent
```ts
Api.getComponent(key)
```[Get metadata on a component by key.](https://www.figma.com/developers/api#get-component-endpoint)
Api.getTeamComponentSets
```ts
Api.getTeamComponentSets(team_id, opts?: { page_size?, after?, before? })
```[Get a paginated list of published component_sets](https://www.figma.com/developers/api#get-team-component-sets-endpoint) within a team library.
Api.getFileComponentSets
```ts
Api.getFileComponentSets(file_key)
```[Get a list of published component_sets](https://www.figma.com/developers/api#get-file-component-sets-endpoint) within a file library.
Api.getComponentSet
```ts
Api.getComponentSet(key)
```[Get metadata on a component_set by key.](https://www.figma.com/developers/api#get-component-sets-endpoint)
Api.getTeamStyles
```ts
Api.getTeamStyles(team_id, opts?: { page_size?, after?, before? })
```[Get a paginated list of published styles](https://www.figma.com/developers/api#get-team-styles-endpoint) within a team library.
Api.getFileStyles
```ts
Api.getFileStyles(file_key)
```[Get a list of published styles](https://www.figma.com/developers/api#get-file-styles-endpoint) within a file library.
Api.getStyle
```ts
Api.getStyle(key)
```[Get metadata on a style by key.](https://www.figma.com/developers/api#get-style-endpoint)
## File types
[All types with description](src/ast-types.ts)
Helpers
```ts
isEffectShadow(effect: Effect): effect is EffectShadow;
```
Check if effect is one of shadow effects.```ts
isEffectBlur(effect: Effect): effect is EffectBlur;
```
Check if effect is one of blur effects.```ts
isPaintSolid(paint: Paint): paint is PaintSolid;
isPaintGradient(paint: Paint): paint is PaintGradient;
isPaintImage(paint: Paint): paint is PaintImage;
```
Check if paint is one of pain types.```ts
isNodeType(node: Node): node is type of NodeType;
```
Check if node is type of specified node.## Development
```
git clone https://github.com/didoo/figma-api.git
cd figma-api
git checkout main
npm i
npm run build
```## Release
```
npm version [ | major | minor | patch]
#if not yet logged in
npm login
npm publish
```(notice: tags are created automatically after a few minutes from the publishing)