Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/lef 229 migrate frontify api module over to frigg #169

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
e2413d2
Import frontify module
roboli May 26, 2023
dbdc7e0
Test api constructor
roboli May 29, 2023
13a1e73
Test setDomain method [ci skip]
roboli May 29, 2023
2068622
Test getAuthUri method [ci skip]
roboli May 29, 2023
267e730
Test getUser hit endpoint [ci skip]
roboli May 29, 2023
a60638d
Test all request methods [ci skip]
roboli May 29, 2023
6ac0a8b
Test Manager getName method
roboli May 31, 2023
2832fb0
Test getInstance method [ci skip]
roboli May 31, 2023
bdca2cc
Test api initial values [ci skip]
roboli May 31, 2023
17edbe5
Test api initial values [ci skip]
roboli May 31, 2023
999c6c3
Improve testing setting domain [ci skip]
roboli May 31, 2023
f12b9aa
Test testAuth method [ci skip]
roboli May 31, 2023
e9a5e9d
Fix and test getAuthorizationRequirements method [ci skip]
roboli May 31, 2023
70fd2dd
Test processAuthorizationCallback method [ci skip]
roboli May 31, 2023
ada96d8
Test findOrCreateEntity method [ci skip]
roboli May 31, 2023
71d3841
Test receiveNotification method [ci skip]
roboli May 31, 2023
3545270
Test deauthorize method [ci skip]
roboli May 31, 2023
f038e40
Implement config
roboli Jun 2, 2023
d58f0bb
Include lock file [ci skip]
roboli Jun 5, 2023
efccd6f
Remove Config and restore meta as defaultConfig [ci skip]
roboli Jun 8, 2023
12b6855
Update lock file
roboli Jun 8, 2023
e4fd48f
Add publishConfig to package.json
roboli Jun 8, 2023
b471280
Refactor building options for request into a method [ci skip]
roboli Jun 8, 2023
7810bbe
Improve Frontify description [ci skip]
roboli Jun 8, 2023
3f1bcd3
Remove unnecessary comments [ci skip]
roboli Jun 8, 2023
3eed3c4
Fix typos [ci skip]
roboli Jun 8, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 99 additions & 0 deletions api-module-library/frontify/api.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
const { get } = require('@friggframework/assertions');
const { OAuth2Requester } = require('@friggframework/module-plugin');
const querystring = require('querystring');

class Api extends OAuth2Requester {
constructor(params) {
super(params);
this.domain = get(params, 'domain', null);

if (this.domain) {
this.baseUrl = `https://${this.domain}/graphql`;
this.tokenUri = `https://${this.domain}/api/oauth/accesstoken`;
}
}

setDomain(domain) {
this.domain = domain;
this.baseUrl = `https://${this.domain}/graphql`;
this.tokenUri = `https://${this.domain}/api/oauth/accesstoken`;
}

getAuthUri() {
const query = {
client_id: this.client_id,
response_type: 'code',
redirect_uri: this.redirect_uri,
scope: this.scope,
state: this.state,
};

let authorizationUri;

if (this.domain) {
authorizationUri = `https://${this.domain}/api/oauth/authorize`;
} else {
authorizationUri = 'https://{{domain}}/api/oauth/authorize';
}

return `${authorizationUri}?${querystring.stringify(query)}`;
}

buildRequestOptions(query) {
return {
url: this.baseUrl,
headers: {
'Content-Type': 'application/json',
},
body: {
query
},
};
}

async getUser() {
const query = 'query CurrentUser { currentUser { id email name }}';
const response = await this._post(this.buildRequestOptions(query));
return {
user: response.data.currentUser,
};
}

async listBrands() {
const ql = 'query Brands { brands { id avatar name }}';
const response = await this._post(this.buildRequestOptions(ql));
return response.data;
}

async listProjects(query) {
const ql = `query Projects { brand(id: "${query.brandId}") { workspaceProjects { items { id name }}}}`;
const response = await this._post(this.buildRequestOptions(ql));
return {
projects: response.data.brand.workspaceProjects.items,
};
}

async listLibraries(query) {
const ql = `query Libraries { brand(id: "${query.brandId}") { libraries { items { id name }}}}`;
const response = await this._post(this.buildRequestOptions(ql));
return response.data.brand.libraries.items;
}

async listProjectAssets(query) {
const ql = `query ProjectAssets { workspaceProject(id: "${query.projectId}") { assets { items { id title description }}}}`;
const response = await this._post(this.buildRequestOptions(ql));
return {
assets: response.data.workspaceProject.assets.items,
};
}

async listLibraryAssets(query) {
const ql = `query LibraryAssets { library(id: "${query.libraryId}") { assets { items { id title description }}}}`;
const response = await this._post(this.buildRequestOptions(ql));
return {
assets: response.data.library.assets.items,
};
}
}

module.exports = { Api };
Loading