Created
August 26, 2020 16:33
-
-
Save mmcguff/dc1728f6446647d1deea913ddc32eeb9 to your computer and use it in GitHub Desktop.
Code for the custom Sugar CRM Custom connector
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| title: "SugarCRM", | |
| connection: { | |
| fields: [ | |
| { | |
| name: "base_url", | |
| hint: "Provide the REST endpoint for your Sugar CRM Instance. " \ | |
| "The REST version and the release version are different. See " \ | |
| "<a href='https://support.sugarcrm.com/Documentation/Sugar_Developer/Sugar_Developer_Guide_9.0/Integration/Web_Services/' " \ | |
| "target='_blank'>Docs</a> for more details.", | |
| optional: false | |
| }, | |
| { | |
| label: "Client Id", | |
| name: "client_id", | |
| optional: false, | |
| }, | |
| { | |
| label: "Client Secret", | |
| name: "client_secret", | |
| optional: true | |
| }, | |
| { | |
| name: "username", | |
| hint: "Enter your sugar CRM username.", | |
| optional: false | |
| }, | |
| { | |
| name: "password", | |
| hint: "Enter your sugar CRM password.", | |
| control_type: "password", | |
| optional: false | |
| }, | |
| ], | |
| authorization: { | |
| type: 'custom-auth', | |
| acquire: lambda do | connection| | |
| response = post(connection["base_url"] + '/oauth2/token', | |
| grant_type: "password", | |
| client_id: connection["client_id"], | |
| client_secret: connection["client_secret"], | |
| username: connection["username"], | |
| password: connection["password"], | |
| platform: "leadMethod" | |
| ) | |
| { | |
| access_token: response["access_token"], | |
| refresh_token: response["refresh_token"] | |
| } | |
| end, | |
| refresh_on: [401, 403], | |
| refresh: lambda do | connection, refresh_token| | |
| response = post(connection["base_url"] + '/oauth2/token', | |
| grant_type: "refresh_token", | |
| refresh_token: refresh_token, | |
| client_id: connection["refresh_token"], | |
| client_secret: connection["client_secret"], | |
| platform: "leadMethod" | |
| ), | |
| { | |
| access_token: response["access_token"], | |
| refresh_token: response["refresh_token"] | |
| } | |
| end, | |
| # TODO: This access token isn't showing up the way it should. | |
| # Ass a work around for building action we can insert out own token but this must get fixed. | |
| apply: lambda do |connection, access_token| | |
| headers(Authorization: "Bearer #{connection["access_token"]}") | |
| end, | |
| }, | |
| }, | |
| test: lambda do |connection | | |
| post(connection['base_url'] + '/oauth2/token', | |
| grant_type: "password", | |
| client_id: connection["client_id"], | |
| client_secret: connection["client_secret"], | |
| username: connection["username"], | |
| password: connection["password"], | |
| platform: "leadMethod" | |
| ) | |
| end, | |
| object_definitions: { | |
| opporutnity: { | |
| fields: ->(){ | |
| [ | |
| {name: "id", type: "string"}, | |
| {name: "name", type: "string"}, | |
| {name: "date_entered", type: "string"}, | |
| {name: "date_modified", type: "string"}, | |
| {name: "modified_user_id", type: "string"}, | |
| {name: "modified_by_name", type: "string"}, | |
| {name: "modified_by_link", type: "object", | |
| properties: [ | |
| {name: "full_name", type:"string"}, | |
| {name: "id", type:"string"}, | |
| {name: "_acl", type:"object", | |
| properties: [ | |
| {name: "fields", type: "object", | |
| properties: [ | |
| {name: "user_name", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "user_hash", type: "object", | |
| properties: [ | |
| {name: "read", type: "string"}, | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "system_generated_password", type: "object", | |
| properties: [ | |
| {name: "read", type: "string"}, | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "pwd_last_change", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "authenticate_id", type: "object", | |
| properties: [ | |
| {name: "read", type: "string"}, | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "sugar_login", type: "object", | |
| properties: [ | |
| {name: "read", type: "string"}, | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "is_admin", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "external_auth_only", type: "object", | |
| properties: [ | |
| {name: "read", type: "string"}, | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "last_login", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "title", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "department", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "status", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "license_type", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "portal_only", type: "object", | |
| properties: [ | |
| {name: "read", type: "string"}, | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "show_on_employees", type: "object", | |
| properties: [ | |
| {name: "read", type: "string"}, | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "employee_status", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "reports_to_id", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "reports_to_name", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "reports_to_link", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "is_group", type: "object", | |
| properties: [ | |
| {name: "read", type: "string"}, | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| ]}, | |
| {name: "admin", type: "string"}, | |
| {name: "developer", type: "string"}, | |
| {name: "delete", type: "string"}, | |
| {name: "import", type: "string"}, | |
| {name: "massupdate", type: "string"}, | |
| {name: "_hash", type: "string"}, | |
| ]}, | |
| ]}, | |
| {name: "created_by", type: "string"}, | |
| {name: "created_by_name", type: "string"}, | |
| {name: "created_by_link", type: "object", | |
| properties: [ | |
| {name: "full_name", type: "string"}, | |
| {name: "id", type: "string"}, | |
| {name: "_acl", type:"object", | |
| properties: [ | |
| {name: "fields", type: "object", | |
| properties: [ | |
| {name: "user_name", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "user_hash", type: "object", | |
| properties: [ | |
| {name: "read", type: "string"}, | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "system_generated_password", type: "object", | |
| properties: [ | |
| {name: "read", type: "string"}, | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "pwd_last_change", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "authenticate_id", type: "object", | |
| properties: [ | |
| {name: "read", type: "string"}, | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "sugar_login", type: "object", | |
| properties: [ | |
| {name: "read", type: "string"}, | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "is_admin", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "external_auth_only", type: "object", | |
| properties: [ | |
| {name: "read", type: "string"}, | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "last_login", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "title", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "department", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "status", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "license_type", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "portal_only", type: "object", | |
| properties: [ | |
| {name: "read", type: "string"}, | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "show_on_employees", type: "object", | |
| properties: [ | |
| {name: "read", type: "string"}, | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "employee_status", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "reports_to_id", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "reports_to_name", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "reports_to_link", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "is_group", type: "object", | |
| properties: [ | |
| {name: "read", type: "string"}, | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| ]}, | |
| {name: "admin", type: "string"}, | |
| {name: "developer", type: "string"}, | |
| {name: "delete", type: "string"}, | |
| {name: "import", type: "string"}, | |
| {name: "massupdate", type: "string"}, | |
| {name: "_hash", type: "string"}, | |
| ]}, | |
| ]}, | |
| {name: "descritpion", type: "string"}, | |
| {name: "deleted", type: "boolean"}, | |
| {name: "opportutnity_type", type: "string"}, | |
| {name: "account_name", type: "string"}, | |
| {name: "accounts", type: "object", | |
| properties: [ | |
| {name: "name", type: "string"}, | |
| {name: "id", type: "string"}, | |
| {name: "_acl", type: "object", | |
| properties: [ | |
| {name: "fields", type: "array", of: "object"}, | |
| {name: "admin", type: "string"}, | |
| {name: "developer", type: "string"}, | |
| {name: "_hash", type: "string"} | |
| ]} | |
| ]}, | |
| {name: "account_id", type: "string"}, | |
| {name: "campaign_id", type: "string"}, | |
| {name: "campaign_name", type: "string"}, | |
| {name: "campaign_opportunitites", type: "object", | |
| properties: [ | |
| {name: "name", type: "string"}, | |
| {name: "id", type: "string"}, | |
| {name: "_acl", type: "object", | |
| properties: [ | |
| {name: "fields", type: "array", of: "object"}, | |
| {name: "admin", type: "string"}, | |
| {name: "developer", type: "string"}, | |
| {name: "_hash", type: "string"} | |
| ]} | |
| ]}, | |
| {name: "lead_source", type: "string"}, | |
| {name: "amount", type: "string"}, | |
| {name: "amount_usdollar", type: "string"}, | |
| {name: "date_closed", type: "string"}, | |
| {name: "date_closed_timestamp", type: "integer"}, | |
| {name: "next_step", type: "string"}, | |
| {name: "sales_stage", type: "string"}, | |
| {name: "sales_status", type: "string"}, | |
| {name: "probability", type: "string"}, | |
| {name: "best_case", type: "string"}, | |
| {name: "worst_case", type: "string"}, | |
| {name: "commit_stage", type: "string"}, | |
| {name: "service_start_date", type: "string"}, | |
| {name: "service_open_revenue_line_items", type: "string"}, | |
| {name: "service_start_date_cascade", type: "string"}, | |
| {name: "total_revenue_line_items", type: "integer"}, | |
| {name: "closed_revenue_line_items", type: "integer"}, | |
| {name: "included_revenue_line_items", type: "integer"}, | |
| {name: "renewal_parent_id", type: "string"}, | |
| {name: "widget_sales_stage", type: "string"}, | |
| {name: "widget_date_closed", type: "string"}, | |
| {name: "widget_amount", type: "string"}, | |
| {name: "sales_stage_cascade", type: "string"}, | |
| {name: "date_closed_cascade", type: "string"}, | |
| {name: "contact_role", type: "string"}, | |
| {name: "mkto_sync", type: "boolean"}, | |
| {name: "mkto_id", type: "string"}, | |
| {name: "following", type: "boolean"}, | |
| {name: "my_favorite", type: "boolean"}, | |
| {name: "tag", type: "array", of: "string"}, | |
| {name: "locked_fields", type: "array", of: "string"}, | |
| {name: "assigned_user_id", type: "string"}, | |
| {name: "assigned_user_name", type: "string"}, | |
| {name: "assigned_user_link", type: "object", | |
| properties: [ | |
| {name: "full_name", type:"string"}, | |
| {name: "id", type:"string"}, | |
| {name: "_acl", type:"object", | |
| properties: [ | |
| {name: "fields", type: "object", | |
| properties: [ | |
| {name: "user_name", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "user_hash", type: "object", | |
| properties: [ | |
| {name: "read", type: "string"}, | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "system_generated_password", type: "object", | |
| properties: [ | |
| {name: "read", type: "string"}, | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "pwd_last_change", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "authenticate_id", type: "object", | |
| properties: [ | |
| {name: "read", type: "string"}, | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "sugar_login", type: "object", | |
| properties: [ | |
| {name: "read", type: "string"}, | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "is_admin", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "external_auth_only", type: "object", | |
| properties: [ | |
| {name: "read", type: "string"}, | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "last_login", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "title", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "department", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "status", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "license_type", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "portal_only", type: "object", | |
| properties: [ | |
| {name: "read", type: "string"}, | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "show_on_employees", type: "object", | |
| properties: [ | |
| {name: "read", type: "string"}, | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "employee_status", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "reports_to_id", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "reports_to_name", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "reports_to_link", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "is_group", type: "object", | |
| properties: [ | |
| {name: "read", type: "string"}, | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| ]}, | |
| {name: "admin", type: "string"}, | |
| {name: "developer", type: "string"}, | |
| {name: "delete", type: "string"}, | |
| {name: "import", type: "string"}, | |
| {name: "massupdate", type: "string"}, | |
| {name: "_hash", type: "string"}, | |
| ]}, | |
| ]}, | |
| {name: "team_count", type: "string"}, | |
| {name: "team_count_link", type: "object", | |
| properties: [ | |
| {name: "full_name", type:"string"}, | |
| {name: "id", type:"string"}, | |
| {name: "_acl", type:"object", | |
| properties: [ | |
| {name: "fields", type: "object", | |
| properties: [ | |
| {name: "id", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "name", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "date_entered", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "date_modified", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "modified_user_id", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "modified_by_name", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "created_by", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "created_by_name", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "description", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "deleted", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "created_by_link", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "modified_user_link", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "activities", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "name_2", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "associated_user_id", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "private", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "users", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "teams_sets", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "activities_teams", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "following", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "following_link", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "my_favorite", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "favorite_link", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "commentlog", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "commentlog_link", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "locked_fields", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "locked_fields_link", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| ]}, | |
| {name: "admin", type: "string"}, | |
| {name: "developer", type: "string"}, | |
| {name: "delete", type: "string"}, | |
| {name: "import", type: "string"}, | |
| {name: "massupdate", type: "string"}, | |
| {name: "_hash", type: "string"}, | |
| ]}, | |
| ]}, | |
| {name: "team_name", type:"array", of: "object", | |
| properties: [ | |
| {name: "id", type: "string"}, | |
| {name: "name", type: "string"}, | |
| {name: "name_2", type: "string"}, | |
| {name: "primary", type: "boolean"}, | |
| {name: "selected", type: "boolean"}, | |
| ]}, | |
| {name: "currency_id", type: "string"}, | |
| {name: "base_rate", type: "string"}, | |
| {name: "currency_name", type: "string"}, | |
| {name: "currencies", type: "object", | |
| properties: [ | |
| {name: "full_name", type:"string"}, | |
| {name: "id", type:"string"}, | |
| {name: "_acl", type:"object", | |
| properties: [ | |
| {name: "fields", type: "object", | |
| properties: [ | |
| {name: "id", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "name", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "symbol", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "iso4217", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "conversion_rate", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "status", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "deleted", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "date_entered", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "date_modified", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "created_by", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| ]}, | |
| {name: "admin", type: "string"}, | |
| {name: "developer", type: "string"}, | |
| {name: "edit", type: "string"}, | |
| {name: "delete", type: "string"}, | |
| {name: "import", type: "string"}, | |
| {name: "massupdate", type: "string"}, | |
| {name: "create", type: "string"}, | |
| {name: "_hash", type: "string"}, | |
| ]}, | |
| ]}, | |
| {name: "currency_symbol", type: "string"}, | |
| {name: "opportunities_dna_dna_1_name", type: "string"}, | |
| {name: "opportunities_dna_dna_1", type: "object", | |
| properties: [ | |
| {name: "name", type: "string"}, | |
| {name: "id", type: "string"}, | |
| {name: "_acl", type: "object", | |
| properties: [ | |
| {name: "fields", type: "array", of: "string"}, | |
| {name: "admin", type: "string"}, | |
| {name: "developer", type: "string"}, | |
| {name: "_hash", type: "string"}, | |
| ]}, | |
| ]}, | |
| {name: "opportunities_dna_dna_1dna_dna_idb", type: "string"}, | |
| {name: "actuated_linear_guide_system_c", type: "string"}, | |
| {name: "actual_close_date_c", type: "string"}, | |
| {name: "admin_fix_c", type: "boolean"}, | |
| {name: "asp_c", type: "boolean"}, | |
| {name: "bwc_products_c", type: "boolean"}, | |
| {name: "bwc_strategy_c", type: "array", of: "string"}, | |
| {name: "bwc_products_pricing_c", type: "string"}, | |
| {name: "actual_close_date_c", type: "string"}, | |
| {name: "closed_won_cbk_c", type: "boolean"}, | |
| {name: "hepco_pricing_c", type: "string"}, | |
| {name: "dna_alert_1_c", type: "boolean"}, | |
| {name: "hepcoproducts_c", type: "boolean"}, | |
| {name: "distributor_name_c", type: "string"}, | |
| {name: "dna_alert_2_c", type: "boolean"}, | |
| {name: "dna_alert_3_c", type: "boolean"}, | |
| {name: "distributor_c", type: "boolean"}, | |
| {name: "dna_status_c", type: "string"}, | |
| {name: "lopro_c", type: "boolean"}, | |
| {name: "mrkto2_expected_revenue_c", type: "string"}, | |
| {name: "is_nda_c", type: "boolean"}, | |
| {name: "mkto2_campaign_c", type: "string"}, | |
| {name: "lopro_pricing_c", type: "string"}, | |
| {name: "nda_alert_1_c", type: "boolean"}, | |
| {name: "nda_alert_2_c", type: "boolean"}, | |
| {name: "nda_status_c", type: "string"}, | |
| {name: "nda_alert_3_c", type: "boolean"}, | |
| {name: "negotiation_date_c", type: "string"}, | |
| {name: "new_account_c", type: "boolean"}, | |
| {name: "notes_c", type: "string"}, | |
| {name: "new_oem_c", type: "string"}, | |
| {name: "order_value_c", type: "string"}, | |
| {name: "opportunity_closed_by_c", type: "string"}, | |
| {name: "opp_admin_notes_c", type: "string"}, | |
| {name: "other_c", type: "boolean"}, | |
| {name: "other_estimated_pricing_c", type: "string"}, | |
| {name: "proposal_date_c", type: "string"}, | |
| {name: "prototype_c", type: "boolean"}, | |
| {name: "qualified_date_c", type: "string"}, | |
| {name: "qualification_notes_c", type: "string"}, | |
| {name: "quote_value_c", type: "string"}, | |
| {name: "rsm_c", type: "string"}, | |
| {name: "region_c", type: "string"}, | |
| {name: "send_notification_c", type: "boolean"}, | |
| {name: "sales_won_notes_c", type: "string"}, | |
| {name: "spflo_notes_c", type: "string"}, | |
| {name: "trace_c", type: "boolean"}, | |
| {name: "spflo_alert_sent_c", type: "boolean"}, | |
| {name: "signature_motion_pricing_c", type: "string"}, | |
| {name: "signature_motion_c", type: "boolean"}, | |
| {name: "spflo_flag_c", type: "string"}, | |
| {name: "start_date_c", type: "string"}, | |
| {name: "total_age_in_days_c", type: "integer"}, | |
| {name: "territory_c", type: "string"}, | |
| {name: "trace_pricing_c", type: "string"}, | |
| {name: "is_dna_c", type: "boolean"}, | |
| {name: "primary_contact_c", type: "string"}, | |
| {name: "contact_count_c", type: "integer"}, | |
| {name: "recentcampaign_c", type: "string"}, | |
| {name: "risk_level_c", type: "string"}, | |
| {name: "primary_contact_campaign_c", type: "string"}, | |
| {name: "opportunity_campaign_c", type: "string"}, | |
| {name: "hdyhau_c", type: "string"}, | |
| {name: "gfx_products_c", type: "boolean"}, | |
| {name: "gfx_estimated_pricing_c", type: "string"}, | |
| {name: "close_reason_c", type: "string"}, | |
| {name: "sugar_syspro_id", type: "integer"}, | |
| {name: "mql_campaign_c", type: "string"}, | |
| {name: "dri_workflow_template_id", type: "string"}, | |
| {name: "dri_workflow_template_name", type: "string"}, | |
| {name: "dri_workflow_template_link", type: "object", | |
| properties: [ | |
| {name: "full_name", type:"string"}, | |
| {name: "id", type:"string"}, | |
| {name: "_acl", type:"object", | |
| properties: [ | |
| {name: "fields", type: "object", | |
| properties: [ | |
| {name: "id", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "name", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "date_entered", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "date_modified", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "modified_user_id", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "modified_by_name", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "created_by", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "created_by_name", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "description", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "deleted", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "created_by_link", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "modified_user_link", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "activities", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "following", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "following_link", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "my_favorite", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "favorite_link", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "tag", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "tag_link", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "commentlog", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "commentlog_link", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "locked_fields", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "locked_fields_link", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "team_id", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "team_set_id", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "acl_team_set_id", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "team_count", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "team_name", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "acl_team_names", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "team_link", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "team_count_link", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "teams", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "available_modules", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "disabled_stage_actions", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "disabled_activity_actions", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "dri_workflows", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "dri_subworkflow_templates", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "dri_workflow_task_templates", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "forms", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "copies", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "tasks", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "meetings", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "calls", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "accounts", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "contacts", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "leads", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "cases", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "opportunities", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "active_limit", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "points", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "related_activities", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "active", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "assignee_rule", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "target_assignee", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "web_hooks", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "copied_template_id", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "copied_template_name", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| {name: "copied_template_link", type: "object", | |
| properties: [ | |
| {name: "write", type: "string"}, | |
| {name: "create", type: "string"}, | |
| ]}, | |
| ]}, | |
| {name: "admin", type: "string"}, | |
| {name: "developer", type: "string"}, | |
| {name: "edit", type: "string"}, | |
| {name: "delete", type: "string"}, | |
| {name: "import", type: "string"}, | |
| {name: "massupdate", type: "string"}, | |
| {name: "create", type: "string"}, | |
| {name: "_hash", type: "string"}, | |
| ]}, | |
| ]}, | |
| {name: "timestamp_status_qualify_c", type: "string"}, | |
| {name: "timestamp_status_discovery_c", type: "string"}, | |
| {name: "timestamp_status_champion_c", type: "string"}, | |
| {name: "timestamp_status_stakeholder_c", type: "string"}, | |
| {name: "timestamp_status_evaluation_c", type: "string"}, | |
| {name: "timestamp_status_negotiation_c", type: "string"}, | |
| {name: "timestamp_status_won_c", type: "string"}, | |
| {name: "timestamp_status_closed_c", type: "string"}, | |
| {name: "compamy_c", type: "string"}, | |
| {name: "quote_notes_c", type: "string"}, | |
| {name: "negotiation_notes_c", type: "string"}, | |
| {name: "generate_withdrawal_letter_c", type: "string"}, | |
| {name: "customer_goal_c", type: "string"}, | |
| {name: "diagnostic_notes_c", type: "string"}, | |
| {name: "usage_scenario_notes_c", type: "string"}, | |
| {name: "solutions_considered_c", type: "string"}, | |
| {name: "key_stakeholders_c", type: "string"}, | |
| {name: "mql_date_c", type: "string"}, | |
| {name: "key_stakeholders_count_c", type: "integer"}, | |
| {name: "stakeholder_feedback_count_c", type: "integer"}, | |
| {name: "verbal_approval_received_c", type: "string"}, | |
| {name: "verbal_approval_notes_c", type: "string"}, | |
| {name: "request_quote_creation_c", type: "string"}, | |
| {name: "sales_process_path_c", type: "string"}, | |
| {name: "request_engr_support_c", type: "string"}, | |
| {name: "mrkto2_is_closed_c", type: "boolean"}, | |
| {name: "close_reason_details_c", type: "string"}, | |
| {name: "last_user_activity_date_c", type: "string"}, | |
| {name: "engagement_actions_c", type: "string"}, | |
| {name: "total_sales_order_amount_c", type: "string"}, | |
| {name: "product_summary_c", type:"array", of:"string"}, | |
| {name: "generate_icd_c", type: "string"}, | |
| {name: "generate_scd_c", type: "string"}, | |
| {name: "generate_ccd_c", type: "string"}, | |
| {name: "mrkto2_is_won_c", type: "boolean"}, | |
| {name: "opportunities_so_sales_orders_1_name", type: "string"}, | |
| {name: "opportunities_so_sales_orders_1_right", type: "object", | |
| properties: [ | |
| {name: "name", type: "string"}, | |
| {name: "id", type: "string"}, | |
| {name: "_acl", type: "object", | |
| properties: [ | |
| {name: "fields", type: "array", of: "string"}, | |
| {name: "admin", type: "string"}, | |
| {name: "developer", type: "string"}, | |
| {name: "_hash", type: "string"}, | |
| ]} | |
| ]}, | |
| {name: "opportunities_so_sales_orders_1so_sales_orders_idb", type: "string"}, | |
| {name: "distance", type: "string"}, | |
| {name: "geolocation", type: "string"}, | |
| {name: "gc_status_c", type: "string"}, | |
| {name: "wmaps_balloon_c", type: "string"}, | |
| {name: "gc_latitude_c", type: "number"}, | |
| {name: "gc_longitude_c", type: "number"}, | |
| {name: "gc_status_detail_c", type: "string"}, | |
| {name: "gc_date_c", type: "string"}, | |
| {name: "wmaps_pushpin_icon_c", type: "string"}, | |
| {name: "contact_id_c", type: "string"}, | |
| {name: "mrkto2_fiscal_quarter_c", type: "string"}, | |
| {name: "mrkto2_forecastcategoryname_c", type: "string"}, | |
| {name: "mrkto2_forecastcategoryname_c", type: "string"}, | |
| {name: "_acl", type: "object", | |
| properites: [ | |
| {names: "fields", type: "object"} | |
| ]}, | |
| {name: "_module", type: "string"}, | |
| ]} | |
| }, | |
| opporutnity_update_fields: { | |
| fields: ->() { | |
| [ | |
| {name: "name", type: "string"}, | |
| {name: "account_id", type: "string"}, | |
| {name: "date_closed", type: "string"}, | |
| {name: "assigned_user_id", type: "string"}, | |
| {name: "region_c", type: "string"}, | |
| {name: "sales_stage", type: "string"}, | |
| {name: "opportunity_type", type: "string"}, | |
| {name: "lead_source", type: "string"}, | |
| {name: "next_step", type: "string"}, | |
| {name: "mkto_sync", type: "boolean"} | |
| ] | |
| } | |
| } | |
| }, | |
| actions: { | |
| read_opporutnity: { | |
| input_fields: lambda do | |
| [ | |
| { name: "id", optional: false } | |
| ] | |
| end, | |
| execute: lambda do |connection, input| | |
| get(connection["base_url"] + "/Opportunities/#{input["id"]}") | |
| end, | |
| output_fields: lambda do |object_definitions| | |
| object_definitions["opporutnity"] | |
| end | |
| }, | |
| update_opporutnity: { | |
| input_fields: lambda do |object_definitions| | |
| [ | |
| { name: "id", optional: false } | |
| ].concat(object_definitions["opporutnity"]) | |
| end, | |
| execute: lambda do |connection, input| | |
| input.map {|k, v|} | |
| updated_input = input.reject { |k,v| k == 'id' or v == nil or v == "" or v == "null" } | |
| puts(updated_input) | |
| put(connection["base_url"] + "/Opportunities/#{input["id"]}", updated_input) | |
| end, | |
| output_fields: lambda do |object_definitions| | |
| object_definitions["opporutnity"] | |
| end | |
| }, | |
| }, | |
| triggers: { | |
| new_or_modified_opportunitites: { | |
| #type: :paging_desc, | |
| input_fields: -> () { | |
| [ | |
| { | |
| name: "date_modified", | |
| type: :timestamp, | |
| optional: false | |
| }, | |
| { | |
| name: "offset", | |
| type: :integer, | |
| optional: false, | |
| value: 0 | |
| } | |
| ] | |
| }, | |
| poll: -> (connection, input) { | |
| max_num = 1; | |
| offset = input["offset"]; | |
| can_poll_more = true; | |
| params = { | |
| max_num: max_num, | |
| offset: offset | |
| }.reject {|k, v| v.present? == false} | |
| date_modified_since = (input["date_modified"]).to_time.utc.iso8601 | |
| # response = post(connection["base_url"] + "/Opportunities/filter", | |
| response = post("https://lead-method-sugar-crm-api.herokuapp.com/gateway/Opportunities/filter", | |
| { | |
| "filter":[ | |
| { | |
| "date_modified":{ | |
| "$gte": "#{date_modified_since}" | |
| } | |
| } | |
| ] | |
| } | |
| ).params(params) | |
| opportuntities = response["records"][0]; | |
| if response["next_offset"] == -1 | |
| can_poll_more = false | |
| end | |
| { | |
| events: opportuntities, | |
| offset: response["next_offset"], | |
| can_poll_more: can_poll_more | |
| } | |
| }, | |
| output_fields: -> (object_definitions){ | |
| object_definitions["opporutnity"] | |
| }, | |
| dedup: ->(event){ | |
| event["id"] | |
| } | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment