Socket
Socket
Sign inDemoInstall

figma-js

Package Overview
Dependencies
Maintainers
1
Versions
33
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

figma-js - npm Package Compare versions

Comparing version 1.2.0 to 1.2.1

55

build/main/index.d.ts

@@ -26,9 +26,48 @@ import * as Figma from './figmaTypes';

}
export declare const Client: (opts: ClientOptions) => {
file: (fileId: string) => AxiosPromise<Figma.FileResponse>;
fileImages: (fileId: string, params: FileImageParams) => AxiosPromise<Figma.FileImageResponse>;
comments: (fileId: string) => AxiosPromise<Figma.CommentsResponse>;
postComment: (fileId: string, params: PostCommentParams) => AxiosPromise<Figma.Comment>;
teamProjects: (teamId: string) => AxiosPromise<Figma.TeamProjectsResponse>;
projectFiles: (projectId: string) => AxiosPromise<Figma.ProjectFilesResponse>;
};
export interface ClientInterface {
/**
* Returns the document refered to by :key as a JSON object.
* The file key can be parsed from any Figma file url:
* https://www.figma.com/file/:key/:title.
* The "document" attribute contains a Node of type DOCUMENT.
* @param {fileId} String File to export JSON from
*/
readonly file: (fileId: string) => AxiosPromise<Figma.FileResponse>;
/**
* If no error occurs, "images" will be populated with a map from
* node IDs to URLs of the rendered images, and "status" will be omitted.
* Important: the image map may contain values that are null.
* This indicates that rendering of that specific node has failed.
* This may be due to the node id not existing, or other reasons such
* has the node having no renderable components. It is guaranteed that
* any node that was requested for rendering will be represented in this
* map whether or not the render succeeded.
* @param {fileId} String File to export images from
* @param {params} FileImageParams
*/
readonly fileImages: (fileId: string, params: FileImageParams) => AxiosPromise<Figma.FileImageResponse>;
/**
* A list of comments left on the file
* @param {fileId} String File to get comments from
*/
readonly comments: (fileId: string) => AxiosPromise<Figma.CommentsResponse>;
/**
* Posts a new comment on the file.
* @param {fileId} String File to get comments from
* @param {params} PostCommentParams
*/
readonly postComment: (fileId: string, params: PostCommentParams) => AxiosPromise<Figma.Comment>;
/**
* Lists the projects for a specified team. Note that this will only
* return projects visible to the authenticated user or owner of the
* developer token.
* @param {teamId} String Id of the team to list projects from
*/
readonly teamProjects: (teamId: string) => AxiosPromise<Figma.TeamProjectsResponse>;
/**
* List the files in a given project.
* @param {projectId} String Id of the project to list files from
*/
readonly projectFiles: (projectId: string) => AxiosPromise<Figma.ProjectFilesResponse>;
}
export declare const Client: (opts: ClientOptions) => ClientInterface;

48

build/main/index.js

@@ -24,50 +24,12 @@ "use strict";

return {
/**
* Returns the document refered to by :key as a JSON object.
* The file key can be parsed from any Figma file url:
* https://www.figma.com/file/:key/:title.
* The "document" attribute contains a Node of type DOCUMENT.
* @param {fileId} String File to export JSON from
*/
file: (fileId) => client.get(`files/${fileId}`),
/**
* If no error occurs, "images" will be populated with a map from
* node IDs to URLs of the rendered images, and "status" will be omitted.
* Important: the image map may contain values that are null.
* This indicates that rendering of that specific node has failed.
* This may be due to the node id not existing, or other reasons such
* has the node having no renderable components. It is guaranteed that
* any node that was requested for rendering will be represented in this
* map whether or not the render succeeded.
* @param {fileId} String File to export images from
* @param {params} FileImageParams
*/
file: fileId => client.get(`files/${fileId}`),
fileImages: (fileId, params) => client.get(`images/${fileId}`, {
params: Object.assign({}, params, { ids: params.ids.join(',') })
}),
/**
* A list of comments left on the file
* @param {fileId} String File to get comments from
*/
comments: (fileId) => client.get(`files/${fileId}/comments`),
/**
* Posts a new comment on the file.
* @param {fileId} String File to get comments from
* @param {params} PostCommentParams
*/
comments: fileId => client.get(`files/${fileId}/comments`),
postComment: (fileId, params) => client.post(`files/${fileId}/comments`, params),
/**
* Lists the projects for a specified team. Note that this will only
* return projects visible to the authenticated user or owner of the
* developer token.
* @param {teamId} String Id of the team to list projects from
*/
teamProjects: (teamId) => client.get(`teams/${teamId}/projects`),
/**
* List the files in a given project.
* @param {projectId} String Id of the project to list files from
*/
projectFiles: (projectId) => client.get(`projects/${projectId}/files`)
teamProjects: teamId => client.get(`teams/${teamId}/projects`),
projectFiles: projectId => client.get(`projects/${projectId}/files`)
};
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFFQSxrQ0FBNkI7QUFDN0Isa0RBQTRDO0FBNEIvQixRQUFBLE1BQU0sR0FBRyxDQUFDLElBQW1CLEVBQUUsRUFBRTtJQUM1QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVztRQUM5QixDQUFDLENBQUM7WUFDRSxhQUFhLEVBQUUsV0FBVyxJQUFJLENBQUMsV0FBVyxFQUFFO1NBQzdDO1FBQ0gsQ0FBQyxDQUFDO1lBQ0UsZUFBZSxFQUFFLElBQUksQ0FBQyxtQkFBbUI7U0FDMUMsQ0FBQztJQUVOLE1BQU0sTUFBTSxHQUFHLGVBQUssQ0FBQyxNQUFNLENBQUM7UUFDMUIsT0FBTyxFQUFFLFdBQVcsSUFBSSxDQUFDLE9BQU8sSUFBSSxlQUFlLE1BQU07UUFDekQsT0FBTztLQUNSLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQztRQUNMOzs7Ozs7V0FNRztRQUNILElBQUksRUFBRSxDQUFDLE1BQVUsRUFBb0MsRUFBRSxDQUNyRCxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsTUFBTSxFQUFFLENBQUM7UUFFL0I7Ozs7Ozs7Ozs7O1dBV0c7UUFDSCxVQUFVLEVBQUUsQ0FDVixNQUFVLEVBQ1YsTUFBdUIsRUFDZ0IsRUFBRSxDQUN6QyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsTUFBTSxFQUFFLEVBQUU7WUFDN0IsTUFBTSxvQkFDRCxNQUFNLElBQ1QsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUMxQjtTQUNGLENBQUM7UUFFSjs7O1dBR0c7UUFDSCxRQUFRLEVBQUUsQ0FBQyxNQUFVLEVBQXdDLEVBQUUsQ0FDN0QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLE1BQU0sV0FBVyxDQUFDO1FBRXhDOzs7O1dBSUc7UUFDSCxXQUFXLEVBQUUsQ0FDWCxNQUFVLEVBQ1YsTUFBeUIsRUFDSSxFQUFFLENBQy9CLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxNQUFNLFdBQVcsRUFBRSxNQUFNLENBQUM7UUFFakQ7Ozs7O1dBS0c7UUFDSCxZQUFZLEVBQUUsQ0FBQyxNQUFVLEVBQTRDLEVBQUUsQ0FDckUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLE1BQU0sV0FBVyxDQUFDO1FBRXhDOzs7V0FHRztRQUNILFlBQVksRUFBRSxDQUFDLFNBQWEsRUFBNEMsRUFBRSxDQUN4RSxNQUFNLENBQUMsR0FBRyxDQUFDLFlBQVksU0FBUyxRQUFRLENBQUM7S0FDNUMsQ0FBQztBQUNKLENBQUMsQ0FBQyJ9
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFFQSxrQ0FBNkI7QUFDN0Isa0RBQTRDO0FBeUYvQixRQUFBLE1BQU0sR0FBRyxDQUFDLElBQW1CLEVBQW1CLEVBQUU7SUFDN0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVc7UUFDOUIsQ0FBQyxDQUFDO1lBQ0UsYUFBYSxFQUFFLFdBQVcsSUFBSSxDQUFDLFdBQVcsRUFBRTtTQUM3QztRQUNILENBQUMsQ0FBQztZQUNFLGVBQWUsRUFBRSxJQUFJLENBQUMsbUJBQW1CO1NBQzFDLENBQUM7SUFFTixNQUFNLE1BQU0sR0FBRyxlQUFLLENBQUMsTUFBTSxDQUFDO1FBQzFCLE9BQU8sRUFBRSxXQUFXLElBQUksQ0FBQyxPQUFPLElBQUksZUFBZSxNQUFNO1FBQ3pELE9BQU87S0FDUixDQUFDLENBQUM7SUFFSCxNQUFNLENBQUM7UUFDTCxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsTUFBTSxFQUFFLENBQUM7UUFFN0MsVUFBVSxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQzdCLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxNQUFNLEVBQUUsRUFBRTtZQUM3QixNQUFNLG9CQUNELE1BQU0sSUFDVCxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQzFCO1NBQ0YsQ0FBQztRQUVKLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxNQUFNLFdBQVcsQ0FBQztRQUUxRCxXQUFXLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FDOUIsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLE1BQU0sV0FBVyxFQUFFLE1BQU0sQ0FBQztRQUVqRCxZQUFZLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsTUFBTSxXQUFXLENBQUM7UUFFOUQsWUFBWSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLFNBQVMsUUFBUSxDQUFDO0tBQ3JFLENBQUM7QUFDSixDQUFDLENBQUMifQ==

@@ -26,9 +26,48 @@ import * as Figma from './figmaTypes';

}
export declare const Client: (opts: ClientOptions) => {
file: (fileId: string) => AxiosPromise<Figma.FileResponse>;
fileImages: (fileId: string, params: FileImageParams) => AxiosPromise<Figma.FileImageResponse>;
comments: (fileId: string) => AxiosPromise<Figma.CommentsResponse>;
postComment: (fileId: string, params: PostCommentParams) => AxiosPromise<Figma.Comment>;
teamProjects: (teamId: string) => AxiosPromise<Figma.TeamProjectsResponse>;
projectFiles: (projectId: string) => AxiosPromise<Figma.ProjectFilesResponse>;
};
export interface ClientInterface {
/**
* Returns the document refered to by :key as a JSON object.
* The file key can be parsed from any Figma file url:
* https://www.figma.com/file/:key/:title.
* The "document" attribute contains a Node of type DOCUMENT.
* @param {fileId} String File to export JSON from
*/
readonly file: (fileId: string) => AxiosPromise<Figma.FileResponse>;
/**
* If no error occurs, "images" will be populated with a map from
* node IDs to URLs of the rendered images, and "status" will be omitted.
* Important: the image map may contain values that are null.
* This indicates that rendering of that specific node has failed.
* This may be due to the node id not existing, or other reasons such
* has the node having no renderable components. It is guaranteed that
* any node that was requested for rendering will be represented in this
* map whether or not the render succeeded.
* @param {fileId} String File to export images from
* @param {params} FileImageParams
*/
readonly fileImages: (fileId: string, params: FileImageParams) => AxiosPromise<Figma.FileImageResponse>;
/**
* A list of comments left on the file
* @param {fileId} String File to get comments from
*/
readonly comments: (fileId: string) => AxiosPromise<Figma.CommentsResponse>;
/**
* Posts a new comment on the file.
* @param {fileId} String File to get comments from
* @param {params} PostCommentParams
*/
readonly postComment: (fileId: string, params: PostCommentParams) => AxiosPromise<Figma.Comment>;
/**
* Lists the projects for a specified team. Note that this will only
* return projects visible to the authenticated user or owner of the
* developer token.
* @param {teamId} String Id of the team to list projects from
*/
readonly teamProjects: (teamId: string) => AxiosPromise<Figma.TeamProjectsResponse>;
/**
* List the files in a given project.
* @param {projectId} String Id of the project to list files from
*/
readonly projectFiles: (projectId: string) => AxiosPromise<Figma.ProjectFilesResponse>;
}
export declare const Client: (opts: ClientOptions) => ClientInterface;

@@ -16,22 +16,3 @@ export * from './figmaTypes';

return {
/**
* Returns the document refered to by :key as a JSON object.
* The file key can be parsed from any Figma file url:
* https://www.figma.com/file/:key/:title.
* The "document" attribute contains a Node of type DOCUMENT.
* @param {fileId} String File to export JSON from
*/
file: (fileId) => client.get(`files/${fileId}`),
/**
* If no error occurs, "images" will be populated with a map from
* node IDs to URLs of the rendered images, and "status" will be omitted.
* Important: the image map may contain values that are null.
* This indicates that rendering of that specific node has failed.
* This may be due to the node id not existing, or other reasons such
* has the node having no renderable components. It is guaranteed that
* any node that was requested for rendering will be represented in this
* map whether or not the render succeeded.
* @param {fileId} String File to export images from
* @param {params} FileImageParams
*/
file: fileId => client.get(`files/${fileId}`),
fileImages: (fileId, params) => client.get(`images/${fileId}`, {

@@ -43,27 +24,8 @@ params: {

}),
/**
* A list of comments left on the file
* @param {fileId} String File to get comments from
*/
comments: (fileId) => client.get(`files/${fileId}/comments`),
/**
* Posts a new comment on the file.
* @param {fileId} String File to get comments from
* @param {params} PostCommentParams
*/
comments: fileId => client.get(`files/${fileId}/comments`),
postComment: (fileId, params) => client.post(`files/${fileId}/comments`, params),
/**
* Lists the projects for a specified team. Note that this will only
* return projects visible to the authenticated user or owner of the
* developer token.
* @param {teamId} String Id of the team to list projects from
*/
teamProjects: (teamId) => client.get(`teams/${teamId}/projects`),
/**
* List the files in a given project.
* @param {projectId} String Id of the project to list files from
*/
projectFiles: (projectId) => client.get(`projects/${projectId}/files`)
teamProjects: teamId => client.get(`teams/${teamId}/projects`),
projectFiles: projectId => client.get(`projects/${projectId}/files`)
};
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsY0FBYyxjQUFjLENBQUM7QUFDN0IsT0FBTyxLQUF1QixNQUFNLE9BQU8sQ0FBQztBQTRCNUMsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBbUIsRUFBRSxFQUFFO0lBQzVDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXO1FBQzlCLENBQUMsQ0FBQztZQUNFLGFBQWEsRUFBRSxXQUFXLElBQUksQ0FBQyxXQUFXLEVBQUU7U0FDN0M7UUFDSCxDQUFDLENBQUM7WUFDRSxlQUFlLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjtTQUMxQyxDQUFDO0lBRU4sTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUMxQixPQUFPLEVBQUUsV0FBVyxJQUFJLENBQUMsT0FBTyxJQUFJLGVBQWUsTUFBTTtRQUN6RCxPQUFPO0tBQ1IsQ0FBQyxDQUFDO0lBRUgsTUFBTSxDQUFDO1FBQ0w7Ozs7OztXQU1HO1FBQ0gsSUFBSSxFQUFFLENBQUMsTUFBVSxFQUFvQyxFQUFFLENBQ3JELE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxNQUFNLEVBQUUsQ0FBQztRQUUvQjs7Ozs7Ozs7Ozs7V0FXRztRQUNILFVBQVUsRUFBRSxDQUNWLE1BQVUsRUFDVixNQUF1QixFQUNnQixFQUFFLENBQ3pDLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxNQUFNLEVBQUUsRUFBRTtZQUM3QixNQUFNLEVBQUU7Z0JBQ04sR0FBRyxNQUFNO2dCQUNULEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7YUFDMUI7U0FDRixDQUFDO1FBRUo7OztXQUdHO1FBQ0gsUUFBUSxFQUFFLENBQUMsTUFBVSxFQUF3QyxFQUFFLENBQzdELE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxNQUFNLFdBQVcsQ0FBQztRQUV4Qzs7OztXQUlHO1FBQ0gsV0FBVyxFQUFFLENBQ1gsTUFBVSxFQUNWLE1BQXlCLEVBQ0ksRUFBRSxDQUMvQixNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsTUFBTSxXQUFXLEVBQUUsTUFBTSxDQUFDO1FBRWpEOzs7OztXQUtHO1FBQ0gsWUFBWSxFQUFFLENBQUMsTUFBVSxFQUE0QyxFQUFFLENBQ3JFLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxNQUFNLFdBQVcsQ0FBQztRQUV4Qzs7O1dBR0c7UUFDSCxZQUFZLEVBQUUsQ0FBQyxTQUFhLEVBQTRDLEVBQUUsQ0FDeEUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLFNBQVMsUUFBUSxDQUFDO0tBQzVDLENBQUM7QUFDSixDQUFDLENBQUMifQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsY0FBYyxjQUFjLENBQUM7QUFDN0IsT0FBTyxLQUF1QixNQUFNLE9BQU8sQ0FBQztBQXlGNUMsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBbUIsRUFBbUIsRUFBRTtJQUM3RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVztRQUM5QixDQUFDLENBQUM7WUFDRSxhQUFhLEVBQUUsV0FBVyxJQUFJLENBQUMsV0FBVyxFQUFFO1NBQzdDO1FBQ0gsQ0FBQyxDQUFDO1lBQ0UsZUFBZSxFQUFFLElBQUksQ0FBQyxtQkFBbUI7U0FDMUMsQ0FBQztJQUVOLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDMUIsT0FBTyxFQUFFLFdBQVcsSUFBSSxDQUFDLE9BQU8sSUFBSSxlQUFlLE1BQU07UUFDekQsT0FBTztLQUNSLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQztRQUNMLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxNQUFNLEVBQUUsQ0FBQztRQUU3QyxVQUFVLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FDN0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLE1BQU0sRUFBRSxFQUFFO1lBQzdCLE1BQU0sRUFBRTtnQkFDTixHQUFHLE1BQU07Z0JBQ1QsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQzthQUMxQjtTQUNGLENBQUM7UUFFSixRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsTUFBTSxXQUFXLENBQUM7UUFFMUQsV0FBVyxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxNQUFNLFdBQVcsRUFBRSxNQUFNLENBQUM7UUFFakQsWUFBWSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLE1BQU0sV0FBVyxDQUFDO1FBRTlELFlBQVksRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsWUFBWSxTQUFTLFFBQVEsQ0FBQztLQUNyRSxDQUFDO0FBQ0osQ0FBQyxDQUFDIn0=
{
"name": "figma-js",
"version": "1.2.0",
"version": "1.2.1",
"description": "A simple wrapper for the Figma API",

@@ -5,0 +5,0 @@ "main": "build/main/index.js",

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