75 files changed
+9331
-7998
No files matched your search
@@ -13,9 +13,3 @@ npm-debug.log*
|
||||
#Mac specific files
|
||||
.DS_Store
|
||||
client/package-lock.json
|
||||
client/package-lock.json
|
||||
server/package-lock.json
|
||||
server/package-lock.json
|
||||
client/package-lock.json
|
||||
server/package-lock.json
|
||||
client/package-lock.json
|
||||
@@ -0,0 +1,34 @@
|
||||
# Changelog
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
## [Unreleased]
|
||||
### Changed
|
||||
- [List changes here for upcoming release]
|
||||
|
||||
## 0.1.4 - 2019-01-17
|
||||
### Change
|
||||
- Both: Migrate to superalgos.org
|
||||
|
||||
## 0.1.3 - 2018-12-17
|
||||
### Change
|
||||
- Client: Fix newsletter signup notification integration
|
||||
|
||||
## 0.1.2 - 2018-12-16
|
||||
### Change
|
||||
- Client: Upgrade Material-ui to fix webpack deepmerge import bug
|
||||
|
||||
## 0.1.1 - 2018-12-16
|
||||
### Changed
|
||||
- Update Master Client integration with Notifications Module
|
||||
|
||||
## 0.1.0 - 2018-12-14
|
||||
### Added
|
||||
- Notifications Module - Sending notifications such as emails, messages to client, etc
|
||||
- Reintroduced CORS whitelist
|
||||
- Created CHANGELOG — for the logging of changes
|
||||
|
||||
### Removed
|
||||
- Removed Sendgrid Mutations (moved to notifications module)
|
||||
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
+1
-1
@@ -34,7 +34,7 @@ This Code of Conduct applies both within project spaces and in public spaces whe
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at feedback at advancedalgos dot org. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team using the online form in the contacts page of the superalgos.org website. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
|
||||
|
||||
|
||||
+21
-27
@@ -1,51 +1,45 @@
|
||||
# Contributing
|
||||
|
||||
We are thrilled you are interested in contributing to the this module. Your help may be essential to the project's success and we want you in!
|
||||
We are thrilled you are interested in contributing to this repository. Your help may be essential to the project's success and we want you in!
|
||||
|
||||
Advanced Algos LTD is a startup, currently at a very early stage. Although this module is not open source software yet, we do welcome contributions from the community.
|
||||
Superalgos is a collective project, currently at a very early stage. Although this repository is not open source software yet, we do welcome contributions from the community.
|
||||
|
||||
Contributions are deemed _work for hire_ and --as such-- are compensated on a case by case basis, with ALGO tokens. Contributors agree to provide an express grant of patent rights for their contributions. Our Balanced Contributor Intellectual Property Agreement is a direct implementation of GitHub's [Balanced Employee Intellectual Property Agreement 1.0.1](https://github.com/github/balanced-employee-ip-agreement/blob/master/Balanced_Employee_IP_Agreement.md).
|
||||
Contributions are deemed _voluntary work_. There might be incentives in place for certain kinds of contributions. Contact us for more information in this regard.
|
||||
|
||||
In any case, contributors agree to provide an express grant of patent rights for their contributions. Submitting Pull Requests to this repository represents an express agreement with the terms of our Balanced Contributor Intellectual Property Agreement. This agreement is a direct implementation of GitHub's [Balanced Employee Intellectual Property Agreement 1.0.1](https://github.com/github/balanced-employee-ip-agreement/blob/master/Balanced_Employee_IP_Agreement.md).
|
||||
|
||||
# Balanced Contributor Intellectual Property Agreement 1.0.1
|
||||
|
||||
This BALANCED CONTRIBUTOR INTELLECTUAL PROPERTY AGREEMENT is between person named below and Advanced Algos ("Company").
|
||||
This BALANCED CONTRIBUTOR INTELLECTUAL PROPERTY AGREEMENT is between person or team submitting Pull Requests to this repository and Superalgos.org ("Project").
|
||||
|
||||
**What is this?** This is the Company's Intellectual Property Agreement ("Agreement"). If you've worked in the technology space before, there's a good chance that you've run across one or more of these in the past. This document is the official, entire and exclusive agreement on what intellectual property ("IP") is yours, and what belongs to the Company.
|
||||
**What is this?** This is the Project's Intellectual Property Agreement ("Agreement"). If you've worked in the technology space before, there's a good chance that you've run across one or more of these in the past. This document is the official, entire and exclusive agreement on what intellectual property ("IP") is yours, and what belongs to the Project.
|
||||
|
||||
**Why is this?** The Company needs to be clear on what IP it owns and has rights to. Its customers, contributors, and investors depend on the Company having the legal rights to the products and services it is providing so that the Company can continue operating and doing business.
|
||||
**Why is this?** The Project needs to be clear on what IP it owns and has rights to. Its customers, contributors, and investors depend on the Project having the legal rights to the products and services it is providing so that the Project can continue operating and doing business.
|
||||
|
||||
The Company also believes that it's important to be clear on what it doesn't own. The Company doesn't want you looking over your shoulder every time you work on something personal or worrying that the Company will someday seize your open source non-lethal mousetrap simulation software. In other words, the Company isn't interested in appropriating your personal projects.
|
||||
The Project also believes that it's important to be clear on what it doesn't own. The Project doesn't want you looking over your shoulder every time you work on something personal or worrying that the Project will someday seize your open source non-lethal mousetrap simulation software. In other words, the Project isn't interested in appropriating your personal projects.
|
||||
|
||||
**Read this.** Please read this document and be sure you understand it before you sign it. Due to legal risk and corporate obligations, the Company cannot, by and large, negotiate its terms. If you feel you have a particular circumstance that keeps you from signing, please let the Company's legal department ("Legal") know. And, of course, you're always free and encouraged to get your own legal counsel to explain anything you're not clear on.
|
||||
**Read this.** Please read this document and be sure you understand it before you submit any Pull Requests. Due to legal risk and corporate obligations, the Project cannot, by and large, negotiate its terms. If you feel you have a particular circumstance that keeps you from signing, please let the Project's legal department ("Legal") know. And, of course, you're always free and encouraged to get your own legal counsel to explain anything you're not clear on.
|
||||
|
||||
Cool? Then, by signing this Agreement, and as a condition of your contribution, you agree to the following:
|
||||
Cool? Then, by submitting your first Pull Request, and as a condition of your contribution, you agree to the following:
|
||||
|
||||
1. **What the Company owns.** The Company owns any IP ("Company IP") that you create, or help create _as its contributor or contractor_, but only if it meets one or more of these additional conditions: The IP was (i) related to an existing or prospective Company product or service at the time you developed, invented, or created it, (ii) developed for use by the Company, or (iii) developed or promoted with existing Company IP or with the Company's endorsement. You hereby grant and assign, and will grant and assign, to the Company all rights and interests in all Company IP.
|
||||
1. **What the Project owns.** The Project owns any IP ("Project IP") that you create, or help create _as its contributor_, but only if it meets one or more of these additional conditions: The IP was (i) related to an existing or prospective Project product or service at the time you developed, invented, or created it, (ii) developed for use by the Project, or (iii) developed or promoted with existing Project IP or with the Project's endorsement. You hereby grant and assign, and will grant and assign, to the Project all rights and interests in all Project IP.
|
||||
|
||||
"Company IP" includes concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, and works of authorship.
|
||||
"Project IP" includes concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, and works of authorship.
|
||||
|
||||
2. **What the Company doesn't own.** If you create IP that doesn't fit into one of the categories listed above, the Company doesn't own it. In other words, the Company doesn't own concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, or works of authorship that you develop, invent, or create that do not meet any of the conditions in Section 1. This is true regardless of the computer you use to develop your IP, including the one furnished to you by the Company.
|
||||
2. **What the Project doesn't own.** If you create IP that doesn't fit into one of the categories listed above, the Project doesn't own it. In other words, the Project doesn't own concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, or works of authorship that you develop, invent, or create that do not meet any of the conditions in Section 1.
|
||||
|
||||
3. **Contribution of your IP to Company projects.** If you include your own IP – such as IP you created prior to working for the Company – into a Company product or service, it's still yours, of course, but you grant the Company a non-exclusive, irrevocable, fully paid-up, royalty-free, perpetual, sublicensable, transferable, worldwide license to use it without restriction in any way or implementation, in modified form, or as is, by itself, or incorporated into another product or service ("License"). If you include your name in any project over which the Company would have rights under this Agreement, such as in a copyright notice or a comment in code or documentation, then the License covers the rights associated with that use of your name as well.
|
||||
3. **Contribution of your IP to Project projects.** If you include your own IP – such as IP you created prior to working for the Project – into a Project product or service, it's still yours, of course, but you grant the Project a non-exclusive, irrevocable, fully paid-up, royalty-free, perpetual, sublicensable, transferable, worldwide license to use it without restriction in any way or implementation, in modified form, or as is, by itself, or incorporated into another product or service ("License"). If you include your name in any project over which the Project would have rights under this Agreement, such as in a copyright notice or a comment in code or documentation, then the License covers the rights associated with that use of your name as well.
|
||||
|
||||
4. **Your contributions to non-Company projects.** The Company recognizes that you may be engaged in work that requires you to submit IP to entities other than the Company, such as open source projects used by the Company. Please make sure that Legal is aware of what you're working on so that Legal can help with any licensing issues. If any project asks you to sign a contribution agreement, you should check with Legal before doing so. These agreements may be legally binding on the Company and so should be run through Legal first.
|
||||
4. **Your contributions to non-Project projects.** The Project recognizes that you may be engaged in work that requires you to submit IP to entities other than the Project, such as open source projects used by the Project. Please make sure that Legal is aware of what you're working on so that Legal can help with any licensing issues. If any project asks you to sign a contribution agreement, you should check with Legal before doing so. These agreements may be legally binding on the Project and so should be run through Legal first.
|
||||
|
||||
5. **Works made for hire.** All Company IP that you are involved with or create as part of your work for the Company is [work made for hire](http://www.copyright.gov/circs/circ09.pdf) under copyright law and compensated by your regular salary or pay.
|
||||
5. **Voluntary Works** All Project IP that you are involved with or create as part of your work for the Project is voluntary work which does not require compensation. There might be incentives in place for certain kinds of contributions. Feel free to contact the Project to learn more.
|
||||
|
||||
6. **No conflicts.** You agree that you don't have any outstanding agreements or obligations that conflict with those in this Agreement, and that you won't enter into conflicting agreements in the future.
|
||||
|
||||
7. **IP protection.** The Company might someday need to show the work that went into the development of IP that it uses or has used, or to make government filings to establish that it owns the IP or has rights over it. To help in those situations, you agree not to destroy any records you maintain relating to the development of any Company IP or IP under License (together, "All IP"), and, if the Company asks, to provide those records to the Company. You agree to help the Company secure and defend its rights in All IP, including after you leave the Company. For your help the Company will compensate you at a reasonable rate. If the Company is unable to secure your help, you authorize the Company to act on your behalf (as your agent and attorney-in-fact) in securing all rights related to All IP.
|
||||
7. **IP protection.** The Project might someday need to show the work that went into the development of IP that it uses or has used, or to make government filings to establish that it owns the IP or has rights over it. To help in those situations, you agree not to destroy any records you maintain relating to the development of any Project IP or IP under License (together, "All IP"), and, if the Project asks, to provide those records to the Project. You agree to help the Project secure and defend its rights in All IP. For your help the Project will compensate you at a reasonable rate. If the Project is unable to secure your help, you authorize the Project to act on your behalf (as your agent and attorney-in-fact) in securing all rights related to All IP.
|
||||
|
||||
8. **Confidentiality.** As an contributor or contractor of the Company, you will have access to sensitive confidential information that is important to the Company's business. You are responsible for keeping this information confidential, including after you end your work for the Company.
|
||||
8. **Confidentiality.** As an contributor or contractor of the Project, you will have access to sensitive confidential information that is important to the Project's business. You are responsible for keeping this information confidential, including after you end your work for the Project.
|
||||
|
||||
"Confidential Information" includes non-public technical details about our products or services, financial information, business strategies and forecasts, customer data, or any other information, data or know-how that is valuable to the Company because it is not publicly known.
|
||||
|
||||
The Company's Confidential Information is sensitive and we expect that you'll treat it as such. You agree to only use the Company's Confidential Information for the purpose of performing your job and for the benefit of the Company. You will do your best to keep Confidential Information secret. If you are not sure if something is Confidential Information, you should assume that it is, until you can confirm otherwise.
|
||||
|
||||
|
||||
Print Name: _____________
|
||||
|
||||
Sign: ________________
|
||||
|
||||
Date: ________________
|
||||
"Confidential Information" includes non-public technical details about our products or services, financial information, business strategies and forecasts, customer data, or any other information, data or know-how that is valuable to the Project because it is not publicly known.
|
||||
|
||||
The Project's Confidential Information is sensitive and we expect that you'll treat it as such. You agree to only use the Project's Confidential Information for the purpose of performing your contribution and for the benefit of the Project. You will do your best to keep Confidential Information secret. If you are not sure if something is Confidential Information, you should assume that it is, until you can confirm otherwise.
|
||||
@@ -1,43 +1,39 @@
|
||||
COPYRIGHT NOTICE
|
||||
COPYRIGHT NOTICE
|
||||
|
||||
© Copyright 2018 Advanced Algos LTD.
|
||||
© Copyright 2018 Superalgos.org
|
||||
|
||||
|
||||
LICENSE NOTICE
|
||||
|
||||
Advanced Algos LTD. is a startup, currently at a very early stage. Because certain aspects of
|
||||
the business are still not clearly defined, we have chosen to --temporarily-- grant a
|
||||
restrictive license for the use of this module, until those business aspects are clarified
|
||||
and a proper open source license can be granted.
|
||||
Superalgos is a collaborative project currently at a very early stage. Because certain aspects of
|
||||
the project are still not clearly defined, we have chosen to --temporarily-- grant a restrictive
|
||||
license for the use of this repository, until those aspects are clarified and a proper open source
|
||||
license can be granted.
|
||||
|
||||
Advanced Algos LTD. is publishing the code of this software for several reasons. However,
|
||||
it shall not be considered free software yet. Advanced Algos LTD. is a for-profit company
|
||||
in the crypto space and this module is still proprietary software.
|
||||
Superalgos.org is publishing the code of this software for several reasons. However, it shall not be considered free software yet. Superalgos is a collaborative project in the crypto space and this
|
||||
software is still proprietary software.
|
||||
|
||||
The reasons for opening up the code of this module at this stage are the following:
|
||||
The reasons for opening up the code of this software at this stage are the following:
|
||||
|
||||
* We believe that transparency is paramount to achieving our goals, so we want everyone
|
||||
to be able to understand what this module does and how. Opening up the code of this module
|
||||
* We believe that transparency is paramount to achieving our goals, so we want everyone to
|
||||
be able to understand what this software does and how. Opening up the code of this software
|
||||
allows anyone to take a close look.
|
||||
|
||||
* We welcome contributions from the community. Contributions may be compensated on a case
|
||||
by case basis with ALGO tokens. Contributors agree to provide an express grant of patent
|
||||
rights for their contributions.
|
||||
* We welcome contributions from the community. Contributions are regarded as voluntary work.
|
||||
There may be incentives in place for certain kinds of contributions. Contact us to learn more.
|
||||
Contributors agree to provide an express grant of patent rights for their contributions.
|
||||
|
||||
|
||||
LICENSE WORDING
|
||||
|
||||
Advanced Algos LTD. grants a limited license for the following uses:
|
||||
Superalgos.org grants a limited license for the following uses:
|
||||
|
||||
1. CODE REVIEW AND AUDITS. You are granted permission to clone this repository to analyze,
|
||||
review or audit the code.
|
||||
|
||||
2. COLLABORATING WITH ADVANCED ALGOS LTD. You are granted permission to fork the this repository
|
||||
2. COLLABORATING WITH Superalgos.org. You are granted permission to fork this repository
|
||||
with the sole purpose of correcting bugs and developing functionality in agreement with
|
||||
Advanced Algos LTD. By contributing to this repository you explicitely agree to the terms
|
||||
Superalgos.org. By contributing to this repository you explicitely agree to the terms
|
||||
detailed in CONTRIBUTING.MD.
|
||||
|
||||
PLEASE SEE CONTRIBUTING.MD FOR MORE DETAILS ON THE IMPLICATIONS SURROUNDING YOUR CONTRIBUTIONS
|
||||
TO THIS REPOSITORY.
|
||||
|
||||
|
||||
PLEASE SEE CONTRIBUTING.MD FOR MORE DETAILS ON THE IMPLICATIONS SURROUNDING YOUR CONTRIBUTIONS TO THIS REPOSITORY.
|
||||
@@ -1,5 +1,5 @@
|
||||
# MasterApp
|
||||
The Master App is an application layer that wraps the client-side web modules of the various Advanced Algos platform modules (Users, Teams, KeyVault, Financial Beings, Hosts, etc).
|
||||
The Master App is an application layer that wraps the client-side web modules of the various Superalgos platform modules (Users, Teams, KeyVault, Financial Beings, Hosts, etc).
|
||||
It provides, to these modules, an authentication layer and GraphQL data layer, among other commonly used utilities and APIs.
|
||||
|
||||
Each client-side module is published as an NPM package and their function is best described as a
|
||||
@@ -12,7 +12,7 @@ React higher-order component encasing their given module use cases.
|
||||
Clone the repo.
|
||||
|
||||
```
|
||||
git clone https://github.com/AdvancedAlgos/MasterApp.git
|
||||
git clone https://github.com/Superalgos/MasterApp.git
|
||||
cd MasterApp
|
||||
```
|
||||
|
||||
@@ -33,7 +33,7 @@ The Graphql Playground will be viewable at [http://localhost:4100/graphql](http:
|
||||
|
||||
**Setup Client**
|
||||
|
||||
In another CLI window, navigate to the MasterAoo/client
|
||||
In another CLI window, navigate to the MasterApp/client
|
||||
|
||||
```
|
||||
cd ../client
|
||||
@@ -61,7 +61,7 @@ In the client of the module to be developed:
|
||||
npm link
|
||||
```
|
||||
|
||||
Make note of the module package name — the name in the module's client package.json. *e.g. @advancedalgos/key-vault-client*
|
||||
Make note of the module package name — the name in the module's client package.json. *e.g. @superalgos/key-vault-client*
|
||||
|
||||
In the Master app client dir link the developing module:
|
||||
|
||||
@@ -70,7 +70,7 @@ In the Master app client dir link the developing module:
|
||||
npm link <module-package-name>
|
||||
|
||||
e.g.
|
||||
npm link @advancedalgos/key-vault-client
|
||||
npm link @superalgos/key-vault-client
|
||||
```
|
||||
|
||||
### Starting a new module
|
||||
|
||||
+4
-5
@@ -3,13 +3,12 @@ PORT=3100
|
||||
NODE_ENV=development
|
||||
|
||||
#Graphql API
|
||||
DEV_GRAPHQL=http://localhost:4100/graphql
|
||||
PROD_GRAPHQL=https://app.advancedalgos.net/graphql
|
||||
PLATFORM_API_URL=http://localhost:4100/graphql
|
||||
|
||||
#Auth0 Server
|
||||
AUTH0_DOMAIN=advancedalgos.eu.auth0.com
|
||||
AUTH0_AUDIENCE=https://auth-dev.advancedalgos.net
|
||||
AUTH0_ISSUER=https://advancedalgos.eu.auth0.com/
|
||||
AUTH0_DOMAIN=superalgos.eu.auth0.com
|
||||
AUTH0_AUDIENCE=https://auth-dev.superalgos.org
|
||||
AUTH0_ISSUER=https://superalgos.eu.auth0.com/
|
||||
AUTH0_CLIENTID=<auth0-client-id>
|
||||
|
||||
#Auth0 Client
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
[ignore]
|
||||
node_modules
|
||||
|
||||
[libs]
|
||||
flow-typed
|
||||
|
||||
[lints]
|
||||
|
||||
[options]
|
||||
module.name_mapper='.*\(.scss\)' -> 'empty/object'
|
||||
module.name_mapper='.*\(.css\)' -> 'empty/object'
|
||||
module.name_mapper='^src/\(.*\)$' -> '<PROJECT_ROOT>/src/\1'
|
||||
|
||||
suppress_comment=\\(.\\|\n\\)*\\$FlowIssue
|
||||
suppress_type=$FlowIssue
|
||||
suppress_type=$FlowFixMe
|
||||
suppress_type=$FixMe
|
||||
|
||||
[strict]
|
||||
@@ -34,7 +34,7 @@ This Code of Conduct applies both within project spaces and in public spaces whe
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at feedback at advancedalgos dot org. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at feedback at superalgos dot org. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# Contributing
|
||||
|
||||
We are thrilled you are interested in contributing to this repository. Your help may be essential to the project's success and we want you in!
|
||||
We are thrilled you are interested in contributing to this repository. Your help may be essential to the project's success and we want you in!
|
||||
|
||||
Advanced Algos LTD is a startup, currently at a very early stage. Although this repository is not open source software yet, we do welcome contributions from the community.
|
||||
Superalgos.org is an open source project, currently at a very early stage. Although this repository is not open source software yet, we do welcome contributions from the community.
|
||||
|
||||
Contributions are deemed _voluntary work_. There might be incentives in place for certain kinds of contributions. Contact us for more information in this regards.
|
||||
|
||||
@@ -10,7 +10,7 @@ In any case, contributors agree to provide an express grant of patent rights for
|
||||
|
||||
# Balanced Contributor Intellectual Property Agreement 1.0.1
|
||||
|
||||
This BALANCED CONTRIBUTOR INTELLECTUAL PROPERTY AGREEMENT is between person or team submitting Pull Requests to this repository and Advanced Algos LTD ("Company").
|
||||
This BALANCED CONTRIBUTOR INTELLECTUAL PROPERTY AGREEMENT is between person or team submitting Pull Requests to this repository and Superalgos.org ("Company").
|
||||
|
||||
**What is this?** This is the Company's Intellectual Property Agreement ("Agreement"). If you've worked in the technology space before, there's a good chance that you've run across one or more of these in the past. This document is the official, entire and exclusive agreement on what intellectual property ("IP") is yours, and what belongs to the Company.
|
||||
|
||||
@@ -26,9 +26,9 @@ Cool? Then, by submitting your first Pull Request, and as a condition of your co
|
||||
|
||||
"Company IP" includes concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, and works of authorship.
|
||||
|
||||
2. **What the Company doesn't own.** If you create IP that doesn't fit into one of the categories listed above, the Company doesn't own it. In other words, the Company doesn't own concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, or works of authorship that you develop, invent, or create that do not meet any of the conditions in Section 1.
|
||||
2. **What the Company doesn't own.** If you create IP that doesn't fit into one of the categories listed above, the Company doesn't own it. In other words, the Company doesn't own concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, or works of authorship that you develop, invent, or create that do not meet any of the conditions in Section 1.
|
||||
|
||||
3. **Contribution of your IP to Company projects.** If you include your own IP – such as IP you created prior to working for the Company – into a Company product or service, it's still yours, of course, but you grant the Company a non-exclusive, irrevocable, fully paid-up, royalty-free, perpetual, sublicensable, transferable, worldwide license to use it without restriction in any way or implementation, in modified form, or as is, by itself, or incorporated into another product or service ("License"). If you include your name in any project over which the Company would have rights under this Agreement, such as in a copyright notice or a comment in code or documentation, then the License covers the rights associated with that use of your name as well.
|
||||
3. **Contribution of your IP to Company projects.** If you include your own IP � such as IP you created prior to working for the Company � into a Company product or service, it's still yours, of course, but you grant the Company a non-exclusive, irrevocable, fully paid-up, royalty-free, perpetual, sublicensable, transferable, worldwide license to use it without restriction in any way or implementation, in modified form, or as is, by itself, or incorporated into another product or service ("License"). If you include your name in any project over which the Company would have rights under this Agreement, such as in a copyright notice or a comment in code or documentation, then the License covers the rights associated with that use of your name as well.
|
||||
|
||||
4. **Your contributions to non-Company projects.** The Company recognizes that you may be engaged in work that requires you to submit IP to entities other than the Company, such as open source projects used by the Company. Please make sure that Legal is aware of what you're working on so that Legal can help with any licensing issues. If any project asks you to sign a contribution agreement, you should check with Legal before doing so. These agreements may be legally binding on the Company and so should be run through Legal first.
|
||||
|
||||
@@ -42,4 +42,4 @@ Cool? Then, by submitting your first Pull Request, and as a condition of your co
|
||||
|
||||
"Confidential Information" includes non-public technical details about our products or services, financial information, business strategies and forecasts, customer data, or any other information, data or know-how that is valuable to the Company because it is not publicly known.
|
||||
|
||||
The Company's Confidential Information is sensitive and we expect that you'll treat it as such. You agree to only use the Company's Confidential Information for the purpose of performing your contribution and for the benefit of the Company. You will do your best to keep Confidential Information secret. If you are not sure if something is Confidential Information, you should assume that it is, until you can confirm otherwise.
|
||||
The Company's Confidential Information is sensitive and we expect that you'll treat it as such. You agree to only use the Company's Confidential Information for the purpose of performing your contribution and for the benefit of the Company. You will do your best to keep Confidential Information secret. If you are not sure if something is Confidential Information, you should assume that it is, until you can confirm otherwise.
|
||||
+14
-16
@@ -1,42 +1,40 @@
|
||||
COPYRIGHT NOTICE
|
||||
|
||||
© Copyright 2018 Advanced Algos LTD.
|
||||
© Copyright 2018 Superalgos.org
|
||||
|
||||
|
||||
LICENSE NOTICE
|
||||
|
||||
Advanced Algos LTD. is a startup, currently at a very early stage. Because certain aspects of
|
||||
the business are still not clearly defined, we have chosen to --temporarily-- grant a
|
||||
restrictive license for the use of this repository, until those business aspects are clarified
|
||||
Superalgos.org is a startup, currently at a very early stage. Because certain aspects of
|
||||
the business are still not clearly defined, we have chosen to --temporarily-- grant a
|
||||
restrictive license for the use of this repository, until those business aspects are clarified
|
||||
and a proper open source license can be granted.
|
||||
|
||||
Advanced Algos LTD. is publishing the code of this software for several reasons. However,
|
||||
it shall not be considered free software yet. Advanced Algos LTD. is a for-profit company
|
||||
Superalgos.org is publishing the code of this software for several reasons. However,
|
||||
it shall not be considered free software yet. Superalgos.org is a for-profit company
|
||||
in the crypto space and this module is still proprietary software.
|
||||
|
||||
The reasons for opening up the code of this module at this stage are the following:
|
||||
|
||||
* We believe that transparency is paramount to achieving our goals, so we want everyone
|
||||
to be able to understand what this module does and how. Opening up the code of this module
|
||||
* We believe that transparency is paramount to achieving our goals, so we want everyone
|
||||
to be able to understand what this module does and how. Opening up the code of this module
|
||||
allows anyone to take a close look.
|
||||
|
||||
* We welcome contributions from the community. Contributions are regarded as voluntary work.
|
||||
* We welcome contributions from the community. Contributions are regarded as voluntary work.
|
||||
There may be incentives in place for certain kinds of contributions. Contact us to learn more.
|
||||
Contributors agree to provide an express grant of patent rights for their contributions.
|
||||
|
||||
|
||||
LICENSE WORDING
|
||||
|
||||
Advanced Algos LTD. grants a limited license for the following uses:
|
||||
Superalgos.org grants a limited license for the following uses:
|
||||
|
||||
1. CODE REVIEW AND AUDITS. You are granted permission to clone this repository to analyze,
|
||||
1. CODE REVIEW AND AUDITS. You are granted permission to clone this repository to analyze,
|
||||
review or audit the code.
|
||||
|
||||
2. COLLABORATING WITH ADVANCED ALGOS LTD. You are granted permission to fork this repository
|
||||
with the sole purpose of correcting bugs and developing functionality in agreement with
|
||||
Advanced Algos LTD. By contributing to this repository you explicitely agree to the terms
|
||||
2. COLLABORATING WITH SUPERALGOS.ORG You are granted permission to fork this repository
|
||||
with the sole purpose of correcting bugs and developing functionality in agreement with
|
||||
Superalgos.org By contributing to this repository you explicitely agree to the terms
|
||||
detailed in CONTRIBUTING.MD.
|
||||
|
||||
PLEASE SEE CONTRIBUTING.MD FOR MORE DETAILS ON THE IMPLICATIONS SURROUNDING YOUR CONTRIBUTIONS TO THIS REPOSITORY.
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
module.exports = (api) => {
|
||||
api.cache(true);
|
||||
api.cache(true)
|
||||
|
||||
const presets = [
|
||||
'@babel/preset-env',
|
||||
'@babel/preset-react'
|
||||
];
|
||||
]
|
||||
|
||||
const plugins = [
|
||||
'react-hot-loader/babel',
|
||||
@@ -12,10 +12,10 @@ module.exports = (api) => {
|
||||
'@babel/plugin-syntax-dynamic-import',
|
||||
'dynamic-import-node',
|
||||
'@babel/plugin-transform-runtime'
|
||||
];
|
||||
]
|
||||
|
||||
return {
|
||||
presets,
|
||||
plugins
|
||||
};
|
||||
}
|
||||
}
|
||||
+25
-13
@@ -2,43 +2,55 @@
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Advanced Algos</title>
|
||||
<title>Superalgos Platform</title>
|
||||
<meta name="description" content="The system enabling a collective of humans and machines to collaborate and compete while co-building trading algorithms.">
|
||||
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description" content="Responsible for loading all web modules and running them">
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<link href="https://fonts.googleapis.com/css?family=Saira+Condensed:300,600|Saira:300,600&subset=latin-ext,vietnamese" rel="stylesheet">
|
||||
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.13/css/all.css" integrity="sha384-DNOHZ68U8hZfKXOrtjWvjxusGo9WQnrNx2sqG0tfsghAvtVlRW3tvkXWZh58N9jp" crossorigin="anonymous">
|
||||
<link rel="shortcut icon" type="image/png/ico" href="/favicon.ico" />
|
||||
<link rel="shortcut icon" type="image/png/ico" href="/html/favicon.ico" />
|
||||
<script src="https://unpkg.com/apollo-client-browser@1.7.0"></script>
|
||||
|
||||
<script type="text/javascript" src="https://develop.advancedalgos.net/Scripts/Require.js"></script>
|
||||
<script type="text/javascript" src="https://develop.advancedalgos.net/Scripts/AppPreLoader.js"></script>
|
||||
<script type="text/javascript" src="<%= process.env.CANVAS_URL %>Scripts/require.js"></script>
|
||||
<script type="text/javascript" src="<%= process.env.CANVAS_URL %>Scripts/AppPreLoader.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
function loadCanvas(){
|
||||
|
||||
if (window.canvasApp.visible === undefined) {
|
||||
window.canvasApp = {
|
||||
version: '1.0.0', // This is used to avoid catching problems at the browser level.
|
||||
sessionToken: '',
|
||||
executingAt: 'Master App',
|
||||
visible: false,
|
||||
topMargin: 180,
|
||||
urlPrefix: 'https://develop.advancedalgos.net/' , /* 'http://localhost:1337/' */ /* 'https://develop.advancedalgos.net/' */
|
||||
topMargin: 130,
|
||||
urlPrefix: '<%= process.env.CANVAS_URL %>',
|
||||
graphQL: {
|
||||
masterAppApiUrl: 'https://app-api.advancedalgos.net/graphql'
|
||||
},
|
||||
context: {}
|
||||
masterAppApiUrl: '<%= process.env.PLATFORM_API_URL %>',
|
||||
},
|
||||
context: {}
|
||||
};
|
||||
|
||||
loadAdvancedAlgosPlatform();
|
||||
try {
|
||||
loadAdvancedAlgosPlatform();
|
||||
}
|
||||
catch(err) {
|
||||
console.log("[ERROR] MasterApp -> Index -> CanvasApp can not be started. Please check that AAWeb is running.");
|
||||
console.log("[ERROR] MasterApp -> Index -> err = " + err);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function onResize(){
|
||||
if (window.canvasApp === undefined) {return}
|
||||
if (window.canvasApp.eventHandler === undefined) {return}
|
||||
window.canvasApp.eventHandler.raiseEvent('Browser Resized')
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body id="body" onload="loadCanvas()" onresize="window.canvasApp.eventHandler.raiseEvent('Browser Resized')">
|
||||
<body id="body" onload="" onresize="onResize()">
|
||||
<div id="masterApp"></div>
|
||||
<div id="canvasApp"></div>
|
||||
</body>
|
||||
|
||||
Generated
+6643
-6097
File diff suppressed because it is too large.
Load diff
+20
-10
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "master-app-client",
|
||||
"version": "0.0.1",
|
||||
"version": "0.1.3",
|
||||
"description": "Responsible for loading all web modules and running them.",
|
||||
"main": "src/index.js",
|
||||
"scripts": {
|
||||
@@ -8,32 +8,39 @@
|
||||
"build": "NODE_ENV=production webpack --mode production --config ./webpack.config.js",
|
||||
"dev_win": "webpack-dev-server --hot --port 3100 --config ./webpack.config.js",
|
||||
"build_win": "webpack --mode production --config ./webpack.config.js",
|
||||
"lint": "prettier-standard 'src/**/*.js'"
|
||||
"lint": "prettier-standard 'src/**/*.js'",
|
||||
"flow-coverage": "npm run flow-coverage:build && npm run flow-coverage:open",
|
||||
"flow-coverage:build": "flow-coverage-report --strict-coverage ",
|
||||
"flow-coverage:open": "concurrently \"cd flow-coverage && http-server -c-1 \" \"open http://127.0.0.1:8080\"",
|
||||
"flow": "flow"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/Algoteers/MasterApp.git"
|
||||
},
|
||||
"author": "Advanced Algos, ltd.",
|
||||
"author": "Superalgos.org",
|
||||
"license": "SEE LICENSE IN LICENSE.MD",
|
||||
"bugs": {
|
||||
"url": "https://github.com/Algoteers/MasterApp/issues"
|
||||
},
|
||||
"homepage": "https://github.com/Algoteers/MasterApp#readme",
|
||||
"devDependencies": {
|
||||
"@advancedalgos/events-client": "0.0.2",
|
||||
"@advancedalgos/key-vault-client": "^0.0.20",
|
||||
"@advancedalgos/teams-client": "0.0.25",
|
||||
"@advancedalgos/users-client": "^0.0.18",
|
||||
"@advancedalgos/web-components": "0.0.13",
|
||||
"@advancedalgos/events-client": "0.0.4",
|
||||
"@advancedalgos/financial-beings-client": "0.0.5",
|
||||
"@superalgos/operations-client": "0.0.14",
|
||||
"@babel/core": "^7.1.2",
|
||||
"@babel/plugin-proposal-class-properties": "^7.1.0",
|
||||
"@babel/plugin-syntax-dynamic-import": "^7.0.0",
|
||||
"@babel/plugin-transform-runtime": "^7.1.0",
|
||||
"@babel/preset-env": "^7.1.0",
|
||||
"@babel/preset-react": "^7.0.0",
|
||||
"@superalgos/key-vault-client": "0.0.28",
|
||||
"@superalgos/teams-client": "0.0.33",
|
||||
"@superalgos/users-client": "0.0.25",
|
||||
"@superalgos/web-components": "0.0.18",
|
||||
"autoprefixer": "^9.2.0",
|
||||
"babel-loader": "^8.0.4",
|
||||
"babel-preset-flow": "6.23.0",
|
||||
"connect-history-api-fallback": "^1.5.0",
|
||||
"css-loader": "^1.0.0",
|
||||
"debug": "^4.1.0",
|
||||
@@ -41,12 +48,14 @@
|
||||
"eslint": "^5.7.0",
|
||||
"eslint-config-standard": "^12.0.0",
|
||||
"eslint-config-standard-react": "^7.0.2",
|
||||
"eslint-plugin-flowtype": "^2.42.0",
|
||||
"eslint-plugin-import": "^2.14.0",
|
||||
"eslint-plugin-node": "^7.0.1",
|
||||
"eslint-plugin-promise": "^4.0.1",
|
||||
"eslint-plugin-react": "^7.11.1",
|
||||
"eslint-plugin-standard": "^4.0.0",
|
||||
"file-loader": "^2.0.0",
|
||||
"flow-bin": "0.79.1",
|
||||
"html-webpack-harddisk-plugin": "^0.2.0",
|
||||
"html-webpack-plugin": "^3.2.0",
|
||||
"koa-connect": "^2.0.1",
|
||||
@@ -57,7 +66,7 @@
|
||||
"script-ext-html-webpack-plugin": "^2.0.1",
|
||||
"webpack": "^4.20.2",
|
||||
"webpack-cli": "^3.1.2",
|
||||
"webpack-dev-server": "^3.1.9",
|
||||
"webpack-dev-server": "^3.1.14",
|
||||
"webpack-merge": "^4.1.4"
|
||||
},
|
||||
"standard": {
|
||||
@@ -72,7 +81,7 @@
|
||||
"@fortawesome/free-brands-svg-icons": "^5.5.0",
|
||||
"@fortawesome/free-solid-svg-icons": "^5.5.0",
|
||||
"@fortawesome/react-fontawesome": "^0.1.3",
|
||||
"@material-ui/core": "^3.2.2",
|
||||
"@material-ui/core": "^3.6.2",
|
||||
"@material-ui/icons": "^3.0.1",
|
||||
"apollo-cache-inmemory": "^1.3.5",
|
||||
"apollo-client": "^2.4.2",
|
||||
@@ -90,6 +99,7 @@
|
||||
"npm": "^6.4.1",
|
||||
"optimize-css-assets-webpack-plugin": "^5.0.1",
|
||||
"prop-types": "^15.6.2",
|
||||
"query-string": "^6.2.0",
|
||||
"react": "^16.6.1",
|
||||
"react-apollo": "^2.2.4",
|
||||
"react-dom": "^16.6.1",
|
||||
|
||||
+28
-6
@@ -12,19 +12,21 @@ import './styles/styles.scss'
|
||||
import { client } from './graphql/apollo'
|
||||
import Auth from './auth'
|
||||
|
||||
import { Layout, Home, Charts, Callback } from './views'
|
||||
import { Layout, Home, Charts, Callback, EmailSignupConfirm } from './views'
|
||||
|
||||
import Users from '@advancedalgos/users-client'
|
||||
import Teams from '@advancedalgos/teams-client'
|
||||
import Users from '@superalgos/users-client'
|
||||
import Teams from '@superalgos/teams-client'
|
||||
import Events from '@advancedalgos/events-client'
|
||||
import KeyVault from '@advancedalgos/key-vault-client'
|
||||
import KeyVault from '@superalgos/key-vault-client'
|
||||
import FinancialBeings from '@advancedalgos/financial-beings-client'
|
||||
import Operations from '@superalgos/operations-client'
|
||||
|
||||
export const auth = new Auth(
|
||||
result => console.log('Authentication successful.'),
|
||||
client
|
||||
)
|
||||
|
||||
export const MasterApp = (props) => (
|
||||
export const MasterApp = props => (
|
||||
<BrowserRouter>
|
||||
<ApolloProvider client={client}>
|
||||
<MuiThemeProvider theme={theme}>
|
||||
@@ -39,6 +41,18 @@ export const MasterApp = (props) => (
|
||||
return <Callback {...props} />
|
||||
}}
|
||||
/>
|
||||
<Route
|
||||
path='/email-verification'
|
||||
render={props => {
|
||||
console.log(props.location)
|
||||
return (
|
||||
<EmailSignupConfirm
|
||||
{...props}
|
||||
tokenParam={props.location.search}
|
||||
/>
|
||||
)
|
||||
}}
|
||||
/>
|
||||
<Route
|
||||
path='/charts'
|
||||
render={props => <Charts {...props} auth={auth} />}
|
||||
@@ -56,9 +70,17 @@ export const MasterApp = (props) => (
|
||||
render={props => <Events {...props} auth={auth} />}
|
||||
/>
|
||||
<Route
|
||||
path='/key-vault'
|
||||
path='/financial-beings'
|
||||
render={props => <FinancialBeings {...props} auth={auth}/>}
|
||||
/>
|
||||
<Route
|
||||
path='/keys'
|
||||
render={props => <KeyVault {...props} auth={auth} />}
|
||||
/>
|
||||
<Route
|
||||
path='/clones'
|
||||
render={props => <Operations {...props} auth={auth} />}
|
||||
/>
|
||||
</Switch>
|
||||
</Layout>
|
||||
</MuiThemeProvider>
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 120 24"><defs><style>.cls-1,.cls-3{fill:none;}.cls-2{clip-path:url(#clip-path);}.cls-3{stroke:#2a96ff;stroke-miterlimit:10;stroke-width:0.5px;}.cls-4{fill:#fff;}.cls-5{fill:#e3493c;}</style><clipPath id="clip-path"><rect class="cls-1" x="272.54" y="79.59" width="600" height="600"/></clipPath></defs><title>aa-logo-dark</title><g id="Layer_1" data-name="Layer 1"><g class="cls-2"><circle class="cls-3" cx="338.14" cy="263.28" r="277.97"/></g></g><g id="Layer_4" data-name="Layer 4"><path class="cls-4" d="M27.67,15.74l-.19-1.58H26.29l-.2,1.58H24.51L25.7,7.79h2.39l1.19,8Zm-.75-6.39h-.08l-.4,3.41h.89Z"/><path class="cls-4" d="M32.15,7.79h1.93a2.39,2.39,0,0,1,1.46.35,1.68,1.68,0,0,1,.54,1.11,21,21,0,0,1,.1,2.52,20.93,20.93,0,0,1-.1,2.51,1.68,1.68,0,0,1-.54,1.11,2.39,2.39,0,0,1-1.46.35H32.15Zm1.93,6.51a.46.46,0,0,0,.37-.12,1.19,1.19,0,0,0,.13-.6c0-.32,0-.93,0-1.81s0-1.5,0-1.82a1.19,1.19,0,0,0-.13-.6.46.46,0,0,0-.37-.12h-.36V14.3Z"/><path class="cls-4" d="M39.94,15.74,38.87,7.79h1.59l.66,6.31h.12l.61-6.31h1.57l-1.07,8Z"/><path class="cls-4" d="M48.8,15.74l-.19-1.58H47.42l-.2,1.58H45.64l1.19-7.95h2.39l1.19,8Zm-.75-6.39H48l-.4,3.41h.89Z"/><path class="cls-4" d="M56.06,15.74l-1.23-4h0v4h-1.5V7.79h1.47l1.13,3.61h.06V7.79h1.51v8Z"/><path class="cls-4" d="M63.14,15.77a3.11,3.11,0,0,1-.59.06,2.06,2.06,0,0,1-1.36-.37,1.94,1.94,0,0,1-.58-1.19,17.1,17.1,0,0,1-.13-2.5,14.22,14.22,0,0,1,.15-2.5,1.94,1.94,0,0,1,.58-1.2,2,2,0,0,1,1.34-.37,4.21,4.21,0,0,1,.62,0,1.86,1.86,0,0,1,.45.12V9.2a5.77,5.77,0,0,0-.78-.06.77.77,0,0,0-.55.15,1.22,1.22,0,0,0-.18.64c0,.33,0,.94,0,1.84s0,1.5,0,1.83a1.22,1.22,0,0,0,.18.64.77.77,0,0,0,.55.15,4.74,4.74,0,0,0,.8-.06v1.29A1.56,1.56,0,0,1,63.14,15.77Z"/><path class="cls-4" d="M66.59,15.74V7.79h3.19V9.23h-1.6V11h1.41v1.45H68.18V14.3h1.6v1.44Z"/><path class="cls-4" d="M72.79,7.79h1.92a2.4,2.4,0,0,1,1.47.35,1.67,1.67,0,0,1,.53,1.11,20.46,20.46,0,0,1,.11,2.52,20.38,20.38,0,0,1-.11,2.51,1.67,1.67,0,0,1-.53,1.11,2.4,2.4,0,0,1-1.47.35H72.79Zm1.92,6.51a.48.48,0,0,0,.38-.12,1.19,1.19,0,0,0,.13-.6c0-.32,0-.93,0-1.81s0-1.5,0-1.82a1.19,1.19,0,0,0-.13-.6.48.48,0,0,0-.38-.12h-.35V14.3Z"/><path class="cls-5" d="M85.6,15.74l-.91-2.31H80.93L80,15.74h-.76l3.11-7.95h.89l3.12,8ZM82.84,8.66h-.06l-1.61,4.08h3.27Z"/><path class="cls-5" d="M88.44,15.74V7.79h.74V15H93v.72Z"/><path class="cls-5" d="M97.86,12.24v-.68h2.7v4c-.37.06-.8.12-1.26.16s-.87.06-1.22.06a5.68,5.68,0,0,1-2.14-.3A1.71,1.71,0,0,1,95,14.4a9.76,9.76,0,0,1-.26-2.63A9.85,9.85,0,0,1,95,9.13,1.71,1.71,0,0,1,96,8a5.91,5.91,0,0,1,2.13-.29c.38,0,.81,0,1.27.06s.86.1,1.18.16v.66a13.61,13.61,0,0,0-2-.19,8.76,8.76,0,0,0-2,.16,1.21,1.21,0,0,0-.79.85,8.45,8.45,0,0,0-.23,2.37A10.48,10.48,0,0,0,95.66,14a1.27,1.27,0,0,0,.7.91,4.41,4.41,0,0,0,1.72.24l.9,0c.35,0,.64,0,.87-.09V12.24Z"/><path class="cls-5" d="M103.84,15.54a1.48,1.48,0,0,1-.83-1.08,13.91,13.91,0,0,1-.17-2.69,14,14,0,0,1,.17-2.7A1.48,1.48,0,0,1,103.84,8a6,6,0,0,1,2.21-.29,5.94,5.94,0,0,1,2.2.29,1.46,1.46,0,0,1,.83,1.08,13.75,13.75,0,0,1,.18,2.7,13.7,13.7,0,0,1-.18,2.69,1.46,1.46,0,0,1-.83,1.08,5.94,5.94,0,0,1-2.2.29A6,6,0,0,1,103.84,15.54Zm3.93-.57a1,1,0,0,0,.61-.81,13.62,13.62,0,0,0,.14-2.39,13.68,13.68,0,0,0-.14-2.4,1,1,0,0,0-.61-.81,8.84,8.84,0,0,0-3.45,0,1,1,0,0,0-.6.81,12.47,12.47,0,0,0-.15,2.4,12.42,12.42,0,0,0,.15,2.39,1,1,0,0,0,.6.81,8.84,8.84,0,0,0,3.45,0Z"/><path class="cls-5" d="M112.94,15.79c-.5,0-.94-.06-1.31-.11V15l1.33.1c.48,0,.88.05,1.2.05a8.75,8.75,0,0,0,1-.05,1.78,1.78,0,0,0,.65-.22.68.68,0,0,0,.35-.47,3.13,3.13,0,0,0,.09-.83,4.54,4.54,0,0,0-.06-.9.57.57,0,0,0-.31-.37,3.72,3.72,0,0,0-.88-.18l-2-.22a2.08,2.08,0,0,1-1.06-.32,1.18,1.18,0,0,1-.44-.64,5,5,0,0,1-.09-1.07,2.57,2.57,0,0,1,.3-1.38,1.56,1.56,0,0,1,.9-.63,6.12,6.12,0,0,1,1.59-.16c.45,0,.9,0,1.35,0s.81.08,1.07.13v.66c-.31,0-.68-.07-1.11-.1s-.83,0-1.19,0a6.52,6.52,0,0,0-1.1.07,1.88,1.88,0,0,0-.66.22.73.73,0,0,0-.33.44,2.52,2.52,0,0,0-.08.75,2.94,2.94,0,0,0,.07.77.61.61,0,0,0,.29.36,2.05,2.05,0,0,0,.69.16l2,.21a4.86,4.86,0,0,1,1.17.24,1,1,0,0,1,.55.63,4.24,4.24,0,0,1,.13,1.27,3,3,0,0,1-.31,1.54,1.36,1.36,0,0,1-.85.64,5.78,5.78,0,0,1-1.47.14C113.93,15.83,113.45,15.82,112.94,15.79Z"/><path class="cls-5" d="M11.36,13.89a7.43,7.43,0,0,1,2.52.4c.82.58,2,.89,2.5.3s0-1.61-.79-2.38a7.64,7.64,0,0,1-.93-2.35c.11-1-.23-2.23-1-2.35s-1.47,1-1.65,1.88a7.38,7.38,0,0,1-1.61,2c-.9.42-1.77,1.3-1.49,2S10.48,14.16,11.36,13.89Z"/><path class="cls-5" d="M14.75,3.42C16,3.47,16.49,6,16.29,7.91a26.16,26.16,0,0,0,1.64,4.69,1.88,1.88,0,0,0,.79.79,10.55,10.55,0,0,1-.84-5c.79-2.19.44-5.15-.75-5.84a2.71,2.71,0,0,0-3.68,1.2A1.8,1.8,0,0,1,14.75,3.42Z"/><path class="cls-5" d="M5,14C4.4,13,6.3,11.26,8.09,10.45,8.66,10.2,11,7.2,11.33,6.7a2,2,0,0,0,.29-1.09A10.62,10.62,0,0,1,7.68,8.86C5.38,9.27,3,11.05,3,12.42A2.71,2.71,0,0,0,5.87,15,1.88,1.88,0,0,1,5,14Z"/><path class="cls-5" d="M19.12,17.42c-.66,1-3.07.23-4.67-.92a25.88,25.88,0,0,0-4.87-.92,1.79,1.79,0,0,0-1.08.29,10.37,10.37,0,0,1,4.Line truncated
|
||||
|
Before Width: | Height: | Size: 5.0 KiB |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 120 24"><defs><style>.cls-1,.cls-3{fill:none;}.cls-2{clip-path:url(#clip-path);}.cls-3{stroke:#2a96ff;stroke-miterlimit:10;stroke-width:0.5px;}.cls-4{fill:#fff;}.cls-5{fill:#e3493c;}</style><clipPath id="clip-path"><rect class="cls-1" x="272.54" y="79.59" width="600" height="600"/></clipPath></defs><title>aa-logo-horiz-dark</title><g id="Layer_1" data-name="Layer 1"><g class="cls-2"><circle class="cls-3" cx="338.14" cy="263.28" r="277.97"/></g></g><g id="Layer_4" data-name="Layer 4"><path class="cls-4" d="M27.67,15.74l-.19-1.58H26.29l-.2,1.58H24.51L25.7,7.79h2.39l1.19,8Zm-.75-6.39h-.08l-.4,3.41h.89Z"/><path class="cls-4" d="M32.15,7.79h1.93a2.39,2.39,0,0,1,1.46.35,1.68,1.68,0,0,1,.54,1.11,21,21,0,0,1,.1,2.52,20.93,20.93,0,0,1-.1,2.51,1.68,1.68,0,0,1-.54,1.11,2.39,2.39,0,0,1-1.46.35H32.15Zm1.93,6.51a.46.46,0,0,0,.37-.12,1.19,1.19,0,0,0,.13-.6c0-.32,0-.93,0-1.81s0-1.5,0-1.82a1.19,1.19,0,0,0-.13-.6.46.46,0,0,0-.37-.12h-.36V14.3Z"/><path class="cls-4" d="M39.94,15.74,38.87,7.79h1.59l.66,6.31h.12l.61-6.31h1.57l-1.07,8Z"/><path class="cls-4" d="M48.8,15.74l-.19-1.58H47.42l-.2,1.58H45.64l1.19-7.95h2.39l1.19,8Zm-.75-6.39H48l-.4,3.41h.89Z"/><path class="cls-4" d="M56.06,15.74l-1.23-4h0v4h-1.5V7.79h1.47l1.13,3.61h.06V7.79h1.51v8Z"/><path class="cls-4" d="M63.14,15.77a3.11,3.11,0,0,1-.59.06,2.06,2.06,0,0,1-1.36-.37,1.94,1.94,0,0,1-.58-1.19,17.1,17.1,0,0,1-.13-2.5,14.22,14.22,0,0,1,.15-2.5,1.94,1.94,0,0,1,.58-1.2,2,2,0,0,1,1.34-.37,4.21,4.21,0,0,1,.62,0,1.86,1.86,0,0,1,.45.12V9.2a5.77,5.77,0,0,0-.78-.06.77.77,0,0,0-.55.15,1.22,1.22,0,0,0-.18.64c0,.33,0,.94,0,1.84s0,1.5,0,1.83a1.22,1.22,0,0,0,.18.64.77.77,0,0,0,.55.15,4.74,4.74,0,0,0,.8-.06v1.29A1.56,1.56,0,0,1,63.14,15.77Z"/><path class="cls-4" d="M66.59,15.74V7.79h3.19V9.23h-1.6V11h1.41v1.45H68.18V14.3h1.6v1.44Z"/><path class="cls-4" d="M72.79,7.79h1.92a2.4,2.4,0,0,1,1.47.35,1.67,1.67,0,0,1,.53,1.11,20.46,20.46,0,0,1,.11,2.52,20.38,20.38,0,0,1-.11,2.51,1.67,1.67,0,0,1-.53,1.11,2.4,2.4,0,0,1-1.47.35H72.79Zm1.92,6.51a.48.48,0,0,0,.38-.12,1.19,1.19,0,0,0,.13-.6c0-.32,0-.93,0-1.81s0-1.5,0-1.82a1.19,1.19,0,0,0-.13-.6.48.48,0,0,0-.38-.12h-.35V14.3Z"/><path class="cls-5" d="M85.6,15.74l-.91-2.31H80.93L80,15.74h-.76l3.11-7.95h.89l3.12,8ZM82.84,8.66h-.06l-1.61,4.08h3.27Z"/><path class="cls-5" d="M88.44,15.74V7.79h.74V15H93v.72Z"/><path class="cls-5" d="M97.86,12.24v-.68h2.7v4c-.37.06-.8.12-1.26.16s-.87.06-1.22.06a5.68,5.68,0,0,1-2.14-.3A1.71,1.71,0,0,1,95,14.4a9.76,9.76,0,0,1-.26-2.63A9.85,9.85,0,0,1,95,9.13,1.71,1.71,0,0,1,96,8a5.91,5.91,0,0,1,2.13-.29c.38,0,.81,0,1.27.06s.86.1,1.18.16v.66a13.61,13.61,0,0,0-2-.19,8.76,8.76,0,0,0-2,.16,1.21,1.21,0,0,0-.79.85,8.45,8.45,0,0,0-.23,2.37A10.48,10.48,0,0,0,95.66,14a1.27,1.27,0,0,0,.7.91,4.41,4.41,0,0,0,1.72.24l.9,0c.35,0,.64,0,.87-.09V12.24Z"/><path class="cls-5" d="M103.84,15.54a1.48,1.48,0,0,1-.83-1.08,13.91,13.91,0,0,1-.17-2.69,14,14,0,0,1,.17-2.7A1.48,1.48,0,0,1,103.84,8a6,6,0,0,1,2.21-.29,5.94,5.94,0,0,1,2.2.29,1.46,1.46,0,0,1,.83,1.08,13.75,13.75,0,0,1,.18,2.7,13.7,13.7,0,0,1-.18,2.69,1.46,1.46,0,0,1-.83,1.08,5.94,5.94,0,0,1-2.2.29A6,6,0,0,1,103.84,15.54Zm3.93-.57a1,1,0,0,0,.61-.81,13.62,13.62,0,0,0,.14-2.39,13.68,13.68,0,0,0-.14-2.4,1,1,0,0,0-.61-.81,8.84,8.84,0,0,0-3.45,0,1,1,0,0,0-.6.81,12.47,12.47,0,0,0-.15,2.4,12.42,12.42,0,0,0,.15,2.39,1,1,0,0,0,.6.81,8.84,8.84,0,0,0,3.45,0Z"/><path class="cls-5" d="M112.94,15.79c-.5,0-.94-.06-1.31-.11V15l1.33.1c.48,0,.88.05,1.2.05a8.75,8.75,0,0,0,1-.05,1.78,1.78,0,0,0,.65-.22.68.68,0,0,0,.35-.47,3.13,3.13,0,0,0,.09-.83,4.54,4.54,0,0,0-.06-.9.57.57,0,0,0-.31-.37,3.72,3.72,0,0,0-.88-.18l-2-.22a2.08,2.08,0,0,1-1.06-.32,1.18,1.18,0,0,1-.44-.64,5,5,0,0,1-.09-1.07,2.57,2.57,0,0,1,.3-1.38,1.56,1.56,0,0,1,.9-.63,6.12,6.12,0,0,1,1.59-.16c.45,0,.9,0,1.35,0s.81.08,1.07.13v.66c-.31,0-.68-.07-1.11-.1s-.83,0-1.19,0a6.52,6.52,0,0,0-1.1.07,1.88,1.88,0,0,0-.66.22.73.73,0,0,0-.33.44,2.52,2.52,0,0,0-.08.75,2.94,2.94,0,0,0,.07.77.61.61,0,0,0,.29.36,2.05,2.05,0,0,0,.69.16l2,.21a4.86,4.86,0,0,1,1.17.24,1,1,0,0,1,.55.63,4.24,4.24,0,0,1,.13,1.27,3,3,0,0,1-.31,1.54,1.36,1.36,0,0,1-.85.64,5.78,5.78,0,0,1-1.47.14C113.93,15.83,113.45,15.82,112.94,15.79Z"/><path class="cls-5" d="M11.36,13.89a7.43,7.43,0,0,1,2.52.4c.82.58,2,.89,2.5.3s0-1.61-.79-2.38a7.64,7.64,0,0,1-.93-2.35c.11-1-.23-2.23-1-2.35s-1.47,1-1.65,1.88a7.38,7.38,0,0,1-1.61,2c-.9.42-1.77,1.3-1.49,2S10.48,14.16,11.36,13.89Z"/><path class="cls-5" d="M14.75,3.42C16,3.47,16.49,6,16.29,7.91a26.16,26.16,0,0,0,1.64,4.69,1.88,1.88,0,0,0,.79.79,10.55,10.55,0,0,1-.84-5c.79-2.19.44-5.15-.75-5.84a2.71,2.71,0,0,0-3.68,1.2A1.8,1.8,0,0,1,14.75,3.42Z"/><path class="cls-5" d="M5,14C4.4,13,6.3,11.26,8.09,10.45,8.66,10.2,11,7.2,11.33,6.7a2,2,0,0,0,.29-1.09A10.62,10.62,0,0,1,7.68,8.86C5.38,9.27,3,11.05,3,12.42A2.71,2.71,0,0,0,5.87,15,1.88,1.88,0,0,1,5,14Z"/><path class="cls-5" d="M19.12,17.42c-.66,1-3.07.23-4.67-.92a25.88,25.88,0,0,0-4.87-.92,1.79,1.79,0,0,0-1.08.29,10.37,10.37,0,Line truncated
|
||||
|
Before Width: | Height: | Size: 5.0 KiB |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 98 140"><defs><style>.cls-1,.cls-3{fill:none;}.cls-2{clip-path:url(#clip-path);}.cls-3{stroke:#2a96ff;stroke-miterlimit:10;stroke-width:0.5px;}.cls-4{fill:#fff;}.cls-5{fill:#e3493c;}</style><clipPath id="clip-path"><rect class="cls-1" x="144.54" y="59.59" width="600" height="600"/></clipPath></defs><title>aa-logo-vert-dark</title><g id="Layer_1" data-name="Layer 1"><g class="cls-2"><circle class="cls-3" cx="210.14" cy="243.28" r="277.97"/></g></g><g id="Layer_4" data-name="Layer 4"><path class="cls-4" d="M11.27,108.29l-.38-3H8.62l-.38,3h-3L7.49,93.1h4.57l2.28,15.19ZM9.83,96.08H9.68L8.9,102.6h1.71Z"/><path class="cls-4" d="M18,93.1h3.69a4.53,4.53,0,0,1,2.79.67,3.22,3.22,0,0,1,1,2.11,41.13,41.13,0,0,1,.19,4.82,41,41,0,0,1-.19,4.81,3.19,3.19,0,0,1-1,2.11,4.46,4.46,0,0,1-2.79.67H18Zm3.69,12.43a.89.89,0,0,0,.71-.22,2.31,2.31,0,0,0,.25-1.15c0-.61,0-1.77,0-3.46s0-2.85,0-3.47a2.31,2.31,0,0,0-.25-1.15.89.89,0,0,0-.71-.22H21v9.67Z"/><path class="cls-4" d="M31.16,108.29,29.11,93.1h3l1.25,12.06h.23L34.8,93.1h3l-2.05,15.19Z"/><path class="cls-4" d="M46.35,108.29l-.38-3H43.7l-.38,3h-3L42.57,93.1h4.57l2.28,15.19ZM44.91,96.08h-.15L44,102.6h1.7Z"/><path class="cls-4" d="M58.44,108.29l-2.36-7.62H56v7.62H53.12V93.1h2.8L58.09,100h.11V93.1h2.89v15.19Z"/><path class="cls-4" d="M70.19,108.36a6.43,6.43,0,0,1-1.12.11,4,4,0,0,1-2.61-.71,3.72,3.72,0,0,1-1.1-2.28,31.28,31.28,0,0,1-.26-4.78,29.46,29.46,0,0,1,.28-4.77,3.82,3.82,0,0,1,1.12-2.3,3.9,3.9,0,0,1,2.57-.71,7.72,7.72,0,0,1,1.18.1,3.21,3.21,0,0,1,.85.24v2.53a11.75,11.75,0,0,0-1.48-.11,1.48,1.48,0,0,0-1.05.29,2.16,2.16,0,0,0-.35,1.23c0,.62-.08,1.79-.08,3.5s0,2.87.08,3.5a2.15,2.15,0,0,0,.35,1.22,1.48,1.48,0,0,0,1.05.29,9.89,9.89,0,0,0,1.53-.11v2.47A4.23,4.23,0,0,1,70.19,108.36Z"/><path class="cls-4" d="M75,108.29V93.1h6.09v2.76H78v3.38h2.7V102H78v3.53h3.07v2.76Z"/><path class="cls-4" d="M85.08,93.1h3.69a4.55,4.55,0,0,1,2.79.67,3.16,3.16,0,0,1,1,2.11,38.45,38.45,0,0,1,.2,4.82,38.37,38.37,0,0,1-.2,4.81,3.14,3.14,0,0,1-1,2.11,4.48,4.48,0,0,1-2.79.67H85.08Zm3.69,12.43a.89.89,0,0,0,.71-.22,2.31,2.31,0,0,0,.25-1.15c0-.61,0-1.77,0-3.46s0-2.85,0-3.47a2.31,2.31,0,0,0-.25-1.15.89.89,0,0,0-.71-.22h-.69v9.67Z"/><path class="cls-5" d="M19.79,134.79l-2.1-5.3H9.08L7,134.79H5.24l7.15-18.23h2l7.16,18.23Zm-6.33-16.24h-.14L9.64,127.9h7.5Z"/><path class="cls-5" d="M26.41,134.79V116.56h1.7v16.58H37v1.65Z"/><path class="cls-5" d="M48.1,126.76V125.2h6.2v9.3c-.87.14-1.84.26-2.9.35s-2,.15-2.8.15a12.88,12.88,0,0,1-4.9-.69,3.89,3.89,0,0,1-2.15-2.6,22.5,22.5,0,0,1-.58-6,22.11,22.11,0,0,1,.6-6A3.87,3.87,0,0,1,43.72,117a13.15,13.15,0,0,1,4.88-.67c.88,0,1.85.05,2.92.14s2,.22,2.7.36v1.51a33.49,33.49,0,0,0-4.66-.42,18.69,18.69,0,0,0-4.55.37,2.7,2.7,0,0,0-1.81,1.93,18.81,18.81,0,0,0-.53,5.43,23.5,23.5,0,0,0,.39,5.13,3,3,0,0,0,1.59,2.09,10.15,10.15,0,0,0,4,.55c.56,0,1.25,0,2.07-.08s1.47-.12,2-.19v-6.41Z"/><path class="cls-5" d="M61.91,134.32A3.33,3.33,0,0,1,60,131.86a31.94,31.94,0,0,1-.41-6.19,31.89,31.89,0,0,1,.41-6.18A3.33,3.33,0,0,1,61.91,117a13.45,13.45,0,0,1,5.07-.67A13.42,13.42,0,0,1,72,117a3.33,3.33,0,0,1,1.89,2.47,31.89,31.89,0,0,1,.41,6.18,31.94,31.94,0,0,1-.41,6.19A3.33,3.33,0,0,1,72,134.32,13.38,13.38,0,0,1,67,135,13.4,13.4,0,0,1,61.91,134.32Zm9-1.29a2.34,2.34,0,0,0,1.37-1.86,29.55,29.55,0,0,0,.34-5.5,29.7,29.7,0,0,0-.34-5.5,2.32,2.32,0,0,0-1.37-1.85,13.69,13.69,0,0,0-4-.38,13.73,13.73,0,0,0-4,.38,2.32,2.32,0,0,0-1.37,1.85,28.82,28.82,0,0,0-.34,5.5,28.68,28.68,0,0,0,.34,5.5A2.34,2.34,0,0,0,63,133a13.73,13.73,0,0,0,4,.38A13.69,13.69,0,0,0,70.94,133Z"/><path class="cls-5" d="M82.89,134.91c-1.17-.07-2.18-.15-3-.25v-1.59c.91.08,1.93.16,3,.23s2,.11,2.76.11a17.72,17.72,0,0,0,2.32-.12,4,4,0,0,0,1.49-.49,1.67,1.67,0,0,0,.81-1.07,7.68,7.68,0,0,0,.2-1.92,9.6,9.6,0,0,0-.15-2.07,1.14,1.14,0,0,0-.71-.83,7.63,7.63,0,0,0-2-.42L83,126a4.91,4.91,0,0,1-2.42-.74,2.61,2.61,0,0,1-1-1.47,10.4,10.4,0,0,1-.23-2.45,5.81,5.81,0,0,1,.71-3.17,3.47,3.47,0,0,1,2-1.44,14.24,14.24,0,0,1,3.66-.37c1,0,2,0,3.09.1a19.49,19.49,0,0,1,2.44.29v1.51c-.7-.08-1.55-.16-2.54-.22s-1.9-.09-2.73-.09a15.54,15.54,0,0,0-2.52.16,4.18,4.18,0,0,0-1.51.5,1.74,1.74,0,0,0-.76,1,6,6,0,0,0-.19,1.72,6.83,6.83,0,0,0,.17,1.76,1.32,1.32,0,0,0,.67.82,4.9,4.9,0,0,0,1.57.39l4.51.47a10.3,10.3,0,0,1,2.69.56,2.23,2.23,0,0,1,1.25,1.43,9.9,9.9,0,0,1,.3,2.91,6.84,6.84,0,0,1-.72,3.54,3.17,3.17,0,0,1-2,1.47,14.17,14.17,0,0,1-3.38.32C85.14,135,84.05,135,82.89,134.91Z"/><path class="cls-5" d="M47.08,49.62c1.17-.36,8.61.83,9.61,1.53,3.13,2.21,7.71,3.41,9.55,1.15s-.08-6.13-3-9.1c-.88-.88-3.7-7.75-3.56-9,.42-3.87-.85-8.5-3.73-9s-5.61,3.66-6.3,7.16c-.24,1.22-5,7.11-6.14,7.62-3.48,1.62-6.77,5-5.73,7.69S43.7,50.65,47.08,49.62Z"/><path class="cls-5" d="M60,9.61c4.68.2,6.65,9.72,5.89,17.18-.24,2.37,5.27,15.71,6.24,17.91a7.29,7.29,0,0,0,3,3C71.63,38.07,71.32,30.32,72,28.51c3-8.4,1.71-19.69-2.85-22.32-3.07-1.77-9.79-2.48-14.07,4.56A6.91,6.91,0,0,1,60,9.61Z"/><path class="cls-5" d="M22.61,50.2C2Line truncated
|
||||
|
Before Width: | Height: | Size: 5.3 KiB |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 98 140"><defs><style>.cls-1,.cls-3{fill:none;}.cls-2{clip-path:url(#clip-path);}.cls-3{stroke:#2a96ff;stroke-miterlimit:10;stroke-width:0.5px;}.cls-4{fill:#4d4d4d;}.cls-5{fill:#e3493c;}</style><clipPath id="clip-path"><rect class="cls-1" x="144.54" y="59.59" width="600" height="600"/></clipPath></defs><title>aa-logo-vert</title><g id="Layer_1" data-name="Layer 1"><g class="cls-2"><circle class="cls-3" cx="210.14" cy="243.28" r="277.97"/></g></g><g id="Layer_4" data-name="Layer 4"><path class="cls-4" d="M11.27,108.29l-.38-3H8.62l-.38,3h-3L7.49,93.1h4.57l2.28,15.19ZM9.83,96.08H9.68L8.9,102.6h1.71Z"/><path class="cls-4" d="M18,93.1h3.69a4.53,4.53,0,0,1,2.79.67,3.22,3.22,0,0,1,1,2.11,41.13,41.13,0,0,1,.19,4.82,41,41,0,0,1-.19,4.81,3.19,3.19,0,0,1-1,2.11,4.46,4.46,0,0,1-2.79.67H18Zm3.69,12.43a.89.89,0,0,0,.71-.22,2.31,2.31,0,0,0,.25-1.15c0-.61,0-1.77,0-3.46s0-2.85,0-3.47a2.31,2.31,0,0,0-.25-1.15.89.89,0,0,0-.71-.22H21v9.67Z"/><path class="cls-4" d="M31.16,108.29,29.11,93.1h3l1.25,12.06h.23L34.8,93.1h3l-2.05,15.19Z"/><path class="cls-4" d="M46.35,108.29l-.38-3H43.7l-.38,3h-3L42.57,93.1h4.57l2.28,15.19ZM44.91,96.08h-.15L44,102.6h1.7Z"/><path class="cls-4" d="M58.44,108.29l-2.36-7.62H56v7.62H53.12V93.1h2.8L58.09,100h.11V93.1h2.89v15.19Z"/><path class="cls-4" d="M70.19,108.36a6.43,6.43,0,0,1-1.12.11,4,4,0,0,1-2.61-.71,3.72,3.72,0,0,1-1.1-2.28,31.28,31.28,0,0,1-.26-4.78,29.46,29.46,0,0,1,.28-4.77,3.82,3.82,0,0,1,1.12-2.3,3.9,3.9,0,0,1,2.57-.71,7.72,7.72,0,0,1,1.18.1,3.21,3.21,0,0,1,.85.24v2.53a11.75,11.75,0,0,0-1.48-.11,1.48,1.48,0,0,0-1.05.29,2.16,2.16,0,0,0-.35,1.23c0,.62-.08,1.79-.08,3.5s0,2.87.08,3.5a2.15,2.15,0,0,0,.35,1.22,1.48,1.48,0,0,0,1.05.29,9.89,9.89,0,0,0,1.53-.11v2.47A4.23,4.23,0,0,1,70.19,108.36Z"/><path class="cls-4" d="M75,108.29V93.1h6.09v2.76H78v3.38h2.7V102H78v3.53h3.07v2.76Z"/><path class="cls-4" d="M85.08,93.1h3.69a4.55,4.55,0,0,1,2.79.67,3.16,3.16,0,0,1,1,2.11,38.45,38.45,0,0,1,.2,4.82,38.37,38.37,0,0,1-.2,4.81,3.14,3.14,0,0,1-1,2.11,4.48,4.48,0,0,1-2.79.67H85.08Zm3.69,12.43a.89.89,0,0,0,.71-.22,2.31,2.31,0,0,0,.25-1.15c0-.61,0-1.77,0-3.46s0-2.85,0-3.47a2.31,2.31,0,0,0-.25-1.15.89.89,0,0,0-.71-.22h-.69v9.67Z"/><path class="cls-5" d="M19.79,134.79l-2.1-5.3H9.08L7,134.79H5.24l7.15-18.23h2l7.16,18.23Zm-6.33-16.24h-.14L9.64,127.9h7.5Z"/><path class="cls-5" d="M26.41,134.79V116.56h1.7v16.58H37v1.65Z"/><path class="cls-5" d="M48.1,126.76V125.2h6.2v9.3c-.87.14-1.84.26-2.9.35s-2,.15-2.8.15a12.88,12.88,0,0,1-4.9-.69,3.89,3.89,0,0,1-2.15-2.6,22.5,22.5,0,0,1-.58-6,22.11,22.11,0,0,1,.6-6A3.87,3.87,0,0,1,43.72,117a13.15,13.15,0,0,1,4.88-.67c.88,0,1.85.05,2.92.14s2,.22,2.7.36v1.51a33.49,33.49,0,0,0-4.66-.42,18.69,18.69,0,0,0-4.55.37,2.7,2.7,0,0,0-1.81,1.93,18.81,18.81,0,0,0-.53,5.43,23.5,23.5,0,0,0,.39,5.13,3,3,0,0,0,1.59,2.09,10.15,10.15,0,0,0,4,.55c.56,0,1.25,0,2.07-.08s1.47-.12,2-.19v-6.41Z"/><path class="cls-5" d="M61.91,134.32A3.33,3.33,0,0,1,60,131.86a31.94,31.94,0,0,1-.41-6.19,31.89,31.89,0,0,1,.41-6.18A3.33,3.33,0,0,1,61.91,117a13.45,13.45,0,0,1,5.07-.67A13.42,13.42,0,0,1,72,117a3.33,3.33,0,0,1,1.89,2.47,31.89,31.89,0,0,1,.41,6.18,31.94,31.94,0,0,1-.41,6.19A3.33,3.33,0,0,1,72,134.32,13.38,13.38,0,0,1,67,135,13.4,13.4,0,0,1,61.91,134.32Zm9-1.29a2.34,2.34,0,0,0,1.37-1.86,29.55,29.55,0,0,0,.34-5.5,29.7,29.7,0,0,0-.34-5.5,2.32,2.32,0,0,0-1.37-1.85,13.69,13.69,0,0,0-4-.38,13.73,13.73,0,0,0-4,.38,2.32,2.32,0,0,0-1.37,1.85,28.82,28.82,0,0,0-.34,5.5,28.68,28.68,0,0,0,.34,5.5A2.34,2.34,0,0,0,63,133a13.73,13.73,0,0,0,4,.38A13.69,13.69,0,0,0,70.94,133Z"/><path class="cls-5" d="M82.89,134.91c-1.17-.07-2.18-.15-3-.25v-1.59c.91.08,1.93.16,3,.23s2,.11,2.76.11a17.72,17.72,0,0,0,2.32-.12,4,4,0,0,0,1.49-.49,1.67,1.67,0,0,0,.81-1.07,7.68,7.68,0,0,0,.2-1.92,9.6,9.6,0,0,0-.15-2.07,1.14,1.14,0,0,0-.71-.83,7.63,7.63,0,0,0-2-.42L83,126a4.91,4.91,0,0,1-2.42-.74,2.61,2.61,0,0,1-1-1.47,10.4,10.4,0,0,1-.23-2.45,5.81,5.81,0,0,1,.71-3.17,3.47,3.47,0,0,1,2-1.44,14.24,14.24,0,0,1,3.66-.37c1,0,2,0,3.09.1a19.49,19.49,0,0,1,2.44.29v1.51c-.7-.08-1.55-.16-2.54-.22s-1.9-.09-2.73-.09a15.54,15.54,0,0,0-2.52.16,4.18,4.18,0,0,0-1.51.5,1.74,1.74,0,0,0-.76,1,6,6,0,0,0-.19,1.72,6.83,6.83,0,0,0,.17,1.76,1.32,1.32,0,0,0,.67.82,4.9,4.9,0,0,0,1.57.39l4.51.47a10.3,10.3,0,0,1,2.69.56,2.23,2.23,0,0,1,1.25,1.43,9.9,9.9,0,0,1,.3,2.91,6.84,6.84,0,0,1-.72,3.54,3.17,3.17,0,0,1-2,1.47,14.17,14.17,0,0,1-3.38.32C85.14,135,84.05,135,82.89,134.91Z"/><path class="cls-5" d="M47.08,49.62c1.17-.36,8.61.83,9.61,1.53,3.13,2.21,7.71,3.41,9.55,1.15s-.08-6.13-3-9.1c-.88-.88-3.7-7.75-3.56-9,.42-3.87-.85-8.5-3.73-9s-5.61,3.66-6.3,7.16c-.24,1.22-5,7.11-6.14,7.62-3.48,1.62-6.77,5-5.73,7.69S43.7,50.65,47.08,49.62Z"/><path class="cls-5" d="M60,9.61c4.68.2,6.65,9.72,5.89,17.18-.24,2.37,5.27,15.71,6.24,17.91a7.29,7.29,0,0,0,3,3C71.63,38.07,71.32,30.32,72,28.51c3-8.4,1.71-19.69-2.85-22.32-3.07-1.77-9.79-2.48-14.07,4.56A6.91,6.91,0,0,1,60,9.61Z"/><path class="cls-5" d="M22.61,50.2C20.Line truncated
|
||||
|
Before Width: | Height: | Size: 5.3 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 4.7 KiB |
Binary file not shown.
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 360 96"><defs><style>.cls-1{fill:#fff;}.cls-2{fill:#e3493c;}</style></defs><title>Superalgos-logo-horz-dark</title><g id="Layer_4" data-name="Layer 4"><path class="cls-1" d="M105.33,66.86a30.85,30.85,0,0,1-3.58-.6V61.84a49.59,49.59,0,0,0,5.92.42,11.06,11.06,0,0,0,2.47-.21,2.63,2.63,0,0,0,1.37-.78,3.4,3.4,0,0,0,.65-1.64,17.68,17.68,0,0,0,.18-2.83,24.15,24.15,0,0,0-.18-3.61,2.16,2.16,0,0,0-.8-1.45,6.77,6.77,0,0,0-2.24-.81l-4.41-.88a3.53,3.53,0,0,1-2.78-2.62,23,23,0,0,1-.7-6.57,16.26,16.26,0,0,1,1-6.24,6,6,0,0,1,2.86-3.17,11.16,11.16,0,0,1,4.91-.93,25.48,25.48,0,0,1,4,.28c1.19.2,2,.36,2.57.5v4.46a17,17,0,0,0-2.08-.28c-1-.09-2-.13-3-.13a11.47,11.47,0,0,0-2.78.26,2.19,2.19,0,0,0-1.37.93,3.69,3.69,0,0,0-.63,1.59,17.44,17.44,0,0,0-.15,2.57,20.72,20.72,0,0,0,.15,3,2.29,2.29,0,0,0,.6,1.3,3.23,3.23,0,0,0,1.48.59l3.9.83a7.33,7.33,0,0,1,2.78,1.15,4.9,4.9,0,0,1,1.63,2.59,19.4,19.4,0,0,1,.57,5.77,21.38,21.38,0,0,1-.85,6.83,5.84,5.84,0,0,1-2.68,3.38,10.64,10.64,0,0,1-4.93,1A36.1,36.1,0,0,1,105.33,66.86Z"/><path class="cls-1" d="M143.91,30.93V51a72.1,72.1,0,0,1-.5,10.12,6.77,6.77,0,0,1-2.31,4.52q-1.82,1.41-6,1.41t-6-1.41a6.68,6.68,0,0,1-2.29-4.49A77.15,77.15,0,0,1,126.3,51V30.93h5.3V53.27c0,2.91.06,4.93.18,6.08a3.46,3.46,0,0,0,.88,2.31,3.76,3.76,0,0,0,2.42.6,3.83,3.83,0,0,0,2.46-.6,3.51,3.51,0,0,0,.89-2.31c.12-1.15.18-3.17.18-6.08V30.93Z"/><path class="cls-1" d="M153.51,30.93h9.19a8.12,8.12,0,0,1,5.15,1.38,6.6,6.6,0,0,1,2.26,3.82,31.56,31.56,0,0,1,.54,6.54,31.4,31.4,0,0,1-.52,6.39,6.7,6.7,0,0,1-2.26,3.9,7.89,7.89,0,0,1-5.17,1.45h-3.89V66.67h-5.3Zm8.36,18.71a3.57,3.57,0,0,0,2.32-.6,3.32,3.32,0,0,0,.93-2,28.88,28.88,0,0,0,.23-4.37,28.19,28.19,0,0,0-.23-4.33,3.29,3.29,0,0,0-.93-2,3.63,3.63,0,0,0-2.32-.6h-3.06V49.64Z"/><path class="cls-1" d="M179.28,66.67V30.93h14.07v4.83h-8.73V46.21h7.64V51h-7.64v10.8h8.73v4.83Z"/><path class="cls-1" d="M214.78,66.67l-3.27-13.29h-4V66.67h-5.29V30.93h9.4a8.5,8.5,0,0,1,5.14,1.3A6.17,6.17,0,0,1,219,35.89a29.17,29.17,0,0,1,.55,6.27,26.68,26.68,0,0,1-.63,6.44,5.71,5.71,0,0,1-2.59,3.63l3.89,14.44Zm-1.69-18.54a3,3,0,0,0,.93-1.87,24.61,24.61,0,0,0,.24-4,24.07,24.07,0,0,0-.24-4,2.87,2.87,0,0,0-1-1.87,3.67,3.67,0,0,0-2.28-.58H207.5V48.7h3.28A3.69,3.69,0,0,0,213.09,48.13Z"/><path class="cls-2" d="M243.19,66.67l-1.51-8.57h-7l-1.46,8.57H228l6.44-35.74h7.68l6.45,35.74Zm-4.84-29.92H238l-2.75,16.63h5.82Z"/><path class="cls-2" d="M257,66.67V30.93h5.35V61.79h7.84v4.88Z"/><path class="cls-2" d="M286.87,51.4V46.73H295V66.05a22.89,22.89,0,0,1-3.64.75,30.25,30.25,0,0,1-4,.29q-4.05,0-6-1.43t-2.76-5.25a63.23,63.23,0,0,1-.77-11.61,60.57,60.57,0,0,1,.8-11.58q.81-3.8,2.88-5.25c1.39-1,3.5-1.45,6.34-1.45a26,26,0,0,1,3.66.28,27.48,27.48,0,0,1,3.46.71V36c-1-.17-2.05-.32-3.12-.44a23.88,23.88,0,0,0-2.44-.18,9.28,9.28,0,0,0-4.24.68c-.77.44-1.32,1.56-1.63,3.35A63.63,63.63,0,0,0,283,48.8q0,6.35.29,9a6.46,6.46,0,0,0,1.17,3.64,3.93,3.93,0,0,0,3,.93,10.23,10.23,0,0,0,2.7-.31V51.4Z"/><path class="cls-2" d="M306.66,65.58q-1.91-1.5-2.39-5a95.6,95.6,0,0,1-.5-11.74,95.52,95.52,0,0,1,.5-11.73,7.43,7.43,0,0,1,2.39-5q1.89-1.5,6.26-1.5t6.31,1.5a7.52,7.52,0,0,1,2.39,5,98.19,98.19,0,0,1,.49,11.73,98.27,98.27,0,0,1-.49,11.74q-.5,3.54-2.39,5t-6.31,1.51Q308.55,67.09,306.66,65.58Zm8.9-4c.49-.45.82-1.56,1-3.32s.26-4.92.26-9.46-.09-7.69-.26-9.45-.5-2.88-1-3.32a3.9,3.9,0,0,0-2.64-.68,3.83,3.83,0,0,0-2.63.68c-.47.44-.79,1.55-1,3.32s-.26,4.92-.26,9.45.09,7.69.26,9.46.49,2.87,1,3.32a3.83,3.83,0,0,0,2.63.68A3.9,3.9,0,0,0,315.56,61.58Z"/><path class="cls-2" d="M334.69,66.86a30.48,30.48,0,0,1-3.58-.6V61.84a49.59,49.59,0,0,0,5.92.42,11,11,0,0,0,2.46-.21,2.66,2.66,0,0,0,1.38-.78,3.5,3.5,0,0,0,.65-1.64,17.68,17.68,0,0,0,.18-2.83,24.15,24.15,0,0,0-.18-3.61,2.13,2.13,0,0,0-.81-1.45,6.69,6.69,0,0,0-2.23-.81l-4.41-.88a3.51,3.51,0,0,1-2.78-2.62,23,23,0,0,1-.7-6.57,16.26,16.26,0,0,1,1-6.24,6,6,0,0,1,2.85-3.17,11.19,11.19,0,0,1,4.91-.93,25.52,25.52,0,0,1,4,.28c1.19.2,2,.36,2.57.5v4.46a17,17,0,0,0-2.08-.28c-1-.09-2-.13-3-.13a11.47,11.47,0,0,0-2.78.26,2.24,2.24,0,0,0-1.38.93,3.56,3.56,0,0,0-.62,1.59,17.23,17.23,0,0,0-.16,2.57,20.35,20.35,0,0,0,.16,3,2.17,2.17,0,0,0,.6,1.3,3.19,3.19,0,0,0,1.48.59l3.89.83a7.26,7.26,0,0,1,2.78,1.15,4.91,4.91,0,0,1,1.64,2.59,19.4,19.4,0,0,1,.57,5.77,21.33,21.33,0,0,1-.86,6.83,5.79,5.79,0,0,1-2.67,3.38,10.66,10.66,0,0,1-4.94,1A35.92,35.92,0,0,1,334.69,66.86Z"/><path class="cls-2" d="M46.72,59c1.23-.38,9.08.88,10.13,1.62,3.3,2.33,8.14,3.58,10.08,1.2s-.09-6.47-3.19-9.59c-.92-.94-3.89-8.18-3.75-9.47.44-4.09-.9-9-3.94-9.46s-5.91,3.86-6.64,7.56c-.25,1.29-5.32,7.5-6.48,8-3.67,1.7-7.14,5.24-6,8.11S43.15,60.05,46.72,59Z"/><path class="cls-2" d="M60.38,16.76c4.93.21,7,10.25,6.21,18.12-.25,2.5,5.56,16.57,6.58,18.88A7.82,7.82,0,0,0,76.37,57C72.61,46.77,72.28,38.6,73,36.69c3.21-8.85,1.8-20.77-3-23.53-3.25-1.87-10.33-2.62-14.85,4.8A7.33,7.33,0,0,1,60.38,16.76Z"/><path class="cls-2" d="M20.91,59.57c-2.28-4.39,5.38-11.2,12.6-14.45C35.8,44.09,45.07,32,46.57,30a7.77,7.77,0,0,0,1.17-4.37c-7,8.35-13.86,Line truncated
|
||||
|
After Width: | Height: | Size: 5.2 KiB |
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
+3
-3
@@ -3,7 +3,7 @@
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
|
||||
<link rel="manifest" href="/site.webmanifest">
|
||||
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#e3493c">
|
||||
<meta name="apple-mobile-web-app-title" content="Advanced Algos">
|
||||
<meta name="application-name" content="Advanced Algos">
|
||||
<meta name="apple-mobile-web-app-title" content="Superalgos">
|
||||
<meta name="application-name" content="Superalgos">
|
||||
<meta name="msapplication-TileColor" content="#da532c">
|
||||
<meta name="theme-color" content="#ffffff">
|
||||
<meta name="theme-color" content="#ffffff">
|
||||
File renamed without changes.
File renamed without changes.
+2
-2
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "Advanced Algos",
|
||||
"short_name": "Advanced Algos",
|
||||
"name": "Superalgos",
|
||||
"short_name": "Superalgos",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/android-chrome-192x192.png",
|
||||
@@ -32,6 +32,7 @@ const VERIFY_TEAM_INVITE = gql`
|
||||
export const defaultOptions = {
|
||||
oidcConformant: true,
|
||||
autoclose: true,
|
||||
allowedConnections: ['Username-Password-Authentication'],
|
||||
auth: {
|
||||
sso: true,
|
||||
redirectUrl: window.location.origin + '/callback',
|
||||
@@ -40,7 +41,15 @@ export const defaultOptions = {
|
||||
params: {
|
||||
scope: `openid profile email user_metadata app_metadata picture`
|
||||
}
|
||||
}
|
||||
},
|
||||
theme: {
|
||||
logo: 'https://aadevelop.blob.core.windows.net/module-master/assets/logos/Superalgos-mark-auth0-lock.png',
|
||||
primaryColor: '#e3493c'
|
||||
},
|
||||
languageDictionary: {
|
||||
title: 'Superalgos Platform'
|
||||
},
|
||||
avatar:null
|
||||
}
|
||||
|
||||
export const inviteOptions = {
|
||||
@@ -172,9 +181,6 @@ class Auth {
|
||||
alias: authResult.idTokenPayload.nickname
|
||||
}
|
||||
setItem('user', JSON.stringify(user))
|
||||
if (window.location.href.includes(`callback`)) {
|
||||
// window.location.href = '/dashboard'
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
@@ -192,9 +198,7 @@ class Auth {
|
||||
alias: response.data.users_Authenticate.alias
|
||||
}
|
||||
setItem('user', JSON.stringify(user))
|
||||
if (window.location.href.includes(`callback`)) {
|
||||
window.location.href = '/'
|
||||
}
|
||||
window.location.href = '/'
|
||||
return response.data
|
||||
} catch (err) {
|
||||
return console.log('Sign in or create account error: ', err)
|
||||
|
||||
@@ -7,12 +7,7 @@ import { setContext } from 'apollo-link-context'
|
||||
|
||||
import { getItem } from '../utils/local-storage'
|
||||
|
||||
const graphqlEndpoint =
|
||||
process.env.NODE_ENV === 'production'
|
||||
? process.env.PROD_GRAPHQL
|
||||
: process.env.DEV_GRAPHQL
|
||||
|
||||
const httpLink = new HttpLink({ uri: graphqlEndpoint })
|
||||
const httpLink = new HttpLink({ uri: process.env.PLATFORM_API_URL })
|
||||
|
||||
const authRetryLink = onError(
|
||||
({ graphQLErrors, networkError, operation, forward }) => {
|
||||
|
||||
+6
-1
@@ -12,4 +12,9 @@ if (process.env.NODE_ENV !== 'production') {
|
||||
window.localStorage.setItem('debug', 'advanced-algos:*')
|
||||
}
|
||||
|
||||
ReactDOM.render(<Provider store={store}><MasterApp /></Provider>, document.getElementById('masterApp'))
|
||||
ReactDOM.render(
|
||||
<Provider store={store}>
|
||||
<MasterApp />
|
||||
</Provider>,
|
||||
document.getElementById('masterApp')
|
||||
)
|
||||
@@ -1,6 +1,15 @@
|
||||
import { createMuiTheme } from '@material-ui/core/styles'
|
||||
|
||||
export const theme = createMuiTheme({
|
||||
breakpoints: {
|
||||
values: {
|
||||
xs: 0,
|
||||
sm: 768,
|
||||
md: 992,
|
||||
lg: 1200,
|
||||
xl: 1920
|
||||
}
|
||||
},
|
||||
palette: {
|
||||
primary: {
|
||||
main: '#303036',
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
$break-big: 1280px;
|
||||
$break-middle: 992px;
|
||||
$break-small: 768px;
|
||||
$break-extra-small: 532px;
|
||||
$break-lg: 1200px;
|
||||
$break-md: 992px;
|
||||
$break-sm: 768px;
|
||||
$break-xs: 540px;
|
||||
|
||||
$height-large-device: 131px;
|
||||
$height-small-device: 220px;
|
||||
$height-nav-bar: 131px;
|
||||
|
||||
$height-not-top: 87px;
|
||||
|
||||
$image-height-big: 75px;
|
||||
$image-height-big: 60px;
|
||||
$image-height-small: 45px;
|
||||
|
||||
$text-height: 25px;
|
||||
@@ -45,7 +44,8 @@ $advanced-algos-red: rgb(245,88,88);
|
||||
}
|
||||
|
||||
body{
|
||||
overflow-y:scroll;
|
||||
padding-right: 0 !important;
|
||||
overflow-y: scroll;
|
||||
|
||||
&::-webkit-scrollbar-track {
|
||||
border: 1px solid #000;
|
||||
@@ -65,6 +65,23 @@ body{
|
||||
}
|
||||
}
|
||||
|
||||
.container{
|
||||
padding: 15px 15px 15px 15px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
|
||||
width: 100%;
|
||||
@media screen and (min-width: $break-sm) {
|
||||
width: 768px;
|
||||
}
|
||||
@media screen and (min-width: $break-md) {
|
||||
width: 970px;
|
||||
}
|
||||
@media screen and (min-width: $break-lg) {
|
||||
width: 1170px;
|
||||
}
|
||||
}
|
||||
|
||||
header.menu{
|
||||
transition: $transition-time;
|
||||
&.notOnTop{
|
||||
@@ -82,7 +99,7 @@ header.menu{
|
||||
margin-bottom: ( $height-not-top - $mobile-handle-height ) / 2 ;
|
||||
}
|
||||
nav.links{
|
||||
@media screen and (min-width: $break-big) {
|
||||
@media screen and (min-width: $break-lg) {
|
||||
ul.primaryMenu{
|
||||
li.primaryLink{
|
||||
padding-top: ( $height-not-top - $text-height ) / 2;
|
||||
@@ -94,36 +111,23 @@ header.menu{
|
||||
}
|
||||
}
|
||||
position: fixed;
|
||||
height: $height-large-device;
|
||||
height: $height-nav-bar;
|
||||
width: 100vw;
|
||||
z-index: 125;
|
||||
|
||||
@media screen and (max-width: $break-extra-small) {
|
||||
height: $height-small-device;
|
||||
}
|
||||
.container{
|
||||
padding-top: 0px;
|
||||
padding-bottom: 0px;
|
||||
height: 100%;
|
||||
border-bottom: 1px solid rgba(142, 144, 146, 0.3);
|
||||
|
||||
width: 100%;
|
||||
@media screen and (min-width: $break-small) {
|
||||
width: 750px;
|
||||
}
|
||||
@media screen and (min-width: $break-middle) {
|
||||
width: 970px;
|
||||
}
|
||||
@media screen and (min-width: $break-big) {
|
||||
width: 1270px;
|
||||
}
|
||||
|
||||
padding-left: 15px;
|
||||
padding-right: 15px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
img.logo{
|
||||
transition: $transition-time;
|
||||
margin-top: ( $height-large-device - $image-height-big ) / 2 ;
|
||||
margin-top: ( $height-nav-bar - $image-height-big ) / 2 ;
|
||||
height: $image-height-big;
|
||||
@media screen and (max-width: $break-xs) {
|
||||
height: $image-height-small;
|
||||
margin-top: ( $height-nav-bar - $image-height-small ) / 2 ;
|
||||
}
|
||||
}
|
||||
.mobileHandle.openedMobile{
|
||||
&:before{
|
||||
@@ -169,21 +173,21 @@ header.menu{
|
||||
float: right;
|
||||
width: auto;
|
||||
clear: none;
|
||||
margin-top: ( $height-large-device - $mobile-handle-height ) / 2 ;
|
||||
margin-bottom: ( $height-large-device - $mobile-handle-height ) / 2 ;
|
||||
margin-left: 0;
|
||||
margin-top: ( $height-nav-bar - $mobile-handle-height ) / 2 ;
|
||||
margin-bottom: ( $height-nav-bar - $mobile-handle-height ) / 2 ;
|
||||
margin-left: 0 !important;
|
||||
margin-right: 20px;
|
||||
margin: 41px 0 42px 20px;
|
||||
padding: 0 18px 0 40px;
|
||||
position: relative;
|
||||
text-decoration: none;
|
||||
border-radius: 31px;
|
||||
@media screen and (min-width: $break-big) {
|
||||
@media screen and (min-width: $break-lg) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
nav.links{
|
||||
@media screen and (max-width: $break-big - 1) {
|
||||
@media screen and (max-width: $break-lg - 1) {
|
||||
display: none;
|
||||
&.openedMobile{
|
||||
display: block;
|
||||
@@ -209,7 +213,7 @@ header.menu{
|
||||
border: solid white;
|
||||
border-width: 0 2px 2px 0;
|
||||
padding: 3px;
|
||||
margin-top: 18px;
|
||||
margin-top: -32px;
|
||||
margin-right: 7px;
|
||||
transform: rotate(45deg);
|
||||
-webkit-transform: rotate(45deg);
|
||||
@@ -232,6 +236,9 @@ header.menu{
|
||||
&:hover{
|
||||
color: $advanced-algos-red;
|
||||
}
|
||||
svg{
|
||||
padding-top: 10px;
|
||||
}
|
||||
}
|
||||
ul.subMenu{
|
||||
display: none;
|
||||
@@ -245,7 +252,7 @@ header.menu{
|
||||
}
|
||||
}
|
||||
}
|
||||
@media screen and (min-width: $break-big) {
|
||||
@media screen and (min-width: $break-lg) {
|
||||
display: block;
|
||||
float: right;
|
||||
ul.primaryMenu{
|
||||
@@ -262,10 +269,10 @@ header.menu{
|
||||
display: block;
|
||||
float: left;
|
||||
position: relative;
|
||||
padding-top: ( $height-large-device - $text-height ) / 2;
|
||||
padding-bottom: ( $height-large-device - $text-height ) / 2;
|
||||
padding-right: 21px;
|
||||
padding-left: 21px;
|
||||
padding-top: ( $height-nav-bar - $text-height ) / 2;
|
||||
padding-bottom: ( $height-nav-bar - $text-height ) / 2;
|
||||
padding-right: 14px;
|
||||
padding-left: 14px;
|
||||
&.hasChildren{
|
||||
&:after{
|
||||
content: '';
|
||||
@@ -290,6 +297,9 @@ header.menu{
|
||||
&.selected{
|
||||
color: $advanced-algos-red;
|
||||
}
|
||||
svg{
|
||||
padding-top: 10px;
|
||||
}
|
||||
}
|
||||
ul.subMenu{
|
||||
display: none;
|
||||
@@ -326,68 +336,60 @@ header.menu{
|
||||
}
|
||||
|
||||
.bannerTopBar{
|
||||
background-image: url(https://advancedalgos.net/img/photos/teams.jpg);
|
||||
background-position: center center;
|
||||
background-size: cover;
|
||||
background-image: url(https://superalgos.org/img/photos/teams.jpg);
|
||||
width: 100%;
|
||||
height: 220px;
|
||||
&.big{
|
||||
height: 100vh;
|
||||
.caption{
|
||||
display: block;
|
||||
top: 42%;
|
||||
}
|
||||
}
|
||||
&.medium{
|
||||
height: 50vh;
|
||||
.caption{
|
||||
display: block;
|
||||
top: 46%;
|
||||
}
|
||||
}
|
||||
.caption{
|
||||
display: none;
|
||||
position: relative;
|
||||
top: 50%;
|
||||
transform: translateY(-100%);
|
||||
font-family: Saira;
|
||||
.title{
|
||||
color: white;
|
||||
font-size: 64px;
|
||||
line-height: 78px;
|
||||
font-weight: 100;
|
||||
@include fluid-type($break-extra-small, $break-big, 26px, 64px);
|
||||
@include fluid-type($break-xs, $break-lg, 26px, 64px);
|
||||
}
|
||||
.text{
|
||||
color: white;
|
||||
line-height: 30px;
|
||||
font-weight: 600;
|
||||
padding: 20px 0 0.5em 0;
|
||||
@include fluid-type($break-extra-small, $break-big, 18px, 20px);
|
||||
@include fluid-type($break-xs, $break-lg, 18px, 20px);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.homePage{
|
||||
.homePage.container{
|
||||
padding-top: 70px;
|
||||
padding-bottom: 70px;
|
||||
margin-right: auto;
|
||||
margin-left: auto;
|
||||
@media screen and (min-width: $break-small) {
|
||||
width: 750px;
|
||||
}
|
||||
@media screen and (min-width: $break-middle) {
|
||||
width: 970px;
|
||||
}
|
||||
@media screen and (min-width: 1200px) {
|
||||
width: 1170px;
|
||||
}
|
||||
.title{
|
||||
padding: 0 0 10px 0;
|
||||
font-size: 45px;
|
||||
@include fluid-type($break-xs, $break-lg, 24px, 45px);
|
||||
line-height: 55px;
|
||||
padding: 40px 0 0.5em 0;
|
||||
font-weight: 100;
|
||||
}
|
||||
.subtitle{
|
||||
padding-bottom: 5px;
|
||||
font-size: 20px;
|
||||
@include fluid-type($break-xs, $break-lg, 18px, 20px);
|
||||
line-height: 19px;
|
||||
font-weight: 100;
|
||||
text-transform: uppercase;
|
||||
@@ -400,7 +402,7 @@ header.menu{
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
padding: 10px;
|
||||
@media screen and (min-width: $break-small) {
|
||||
@media screen and (min-width: $break-sm) {
|
||||
width: 50%;
|
||||
}
|
||||
p{
|
||||
@@ -419,5 +421,26 @@ header.menu{
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.toTop{
|
||||
position: fixed;
|
||||
height: 40px;
|
||||
width: 40px;
|
||||
bottom: 20px;
|
||||
right: 20px;
|
||||
z-index: 1;
|
||||
background-color: #1a1a1a;
|
||||
border-radius: 100%;
|
||||
&:after{
|
||||
content: '';
|
||||
float: right;
|
||||
border: solid white;
|
||||
border-width: 0 3px 3px 0;
|
||||
padding: 3px;
|
||||
margin-top: 18px;
|
||||
margin-right: 15px;
|
||||
transform: rotate(-135deg);
|
||||
-webkit-transform: rotate(-135deg);
|
||||
}
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
import React from 'react'
|
||||
import Typography from '@material-ui/core/Typography'
|
||||
|
||||
const BannerTopBar = ({
|
||||
size,
|
||||
backgroundUrl,
|
||||
title,
|
||||
text
|
||||
}) => (
|
||||
<div className={`bannerTopBar ${size}`} style={backgroundUrl ? { backgroundImage: `url(${backgroundUrl})` } : {}}>
|
||||
<div className='caption'>
|
||||
<Typography className='title' variant='h1' align='center'>{title}</Typography>
|
||||
<Typography className='text' variant='h2' align='center'>{text}</Typography>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
|
||||
export default BannerTopBar
|
||||
@@ -1,7 +1,12 @@
|
||||
import React from 'react'
|
||||
|
||||
import { MessageCard } from '@advancedalgos/web-components'
|
||||
import { BannerTopBar } from '../common'
|
||||
|
||||
const Callback = () => <MessageCard message='Authenticating...' />
|
||||
const Callback = () => <BannerTopBar
|
||||
size='big'
|
||||
title=''
|
||||
text='Authenticating...'
|
||||
backgroundUrl='https://superalgos.org/img/photos/superalgos-platform.jpg'
|
||||
/>
|
||||
|
||||
export default Callback
|
||||
@@ -2,7 +2,7 @@ import React, { Component } from 'react'
|
||||
|
||||
import { withStyles } from '@material-ui/core/styles'
|
||||
import { connect } from 'react-redux'
|
||||
import BannerTopBar from '../BannerTopBar'
|
||||
import { BannerTopBar } from '../common'
|
||||
|
||||
const styles = theme => ({
|
||||
'@global': {
|
||||
@@ -25,6 +25,10 @@ const styles = theme => ({
|
||||
|
||||
class Charts extends Component {
|
||||
componentDidMount () {
|
||||
if (window.canvasApp.visible === undefined) {
|
||||
loadCanvas() // This happens only once.
|
||||
}
|
||||
|
||||
window.canvasApp.visible = true
|
||||
let body = document.getElementById('body')
|
||||
body.style = 'margin: 0px; padding: 0px; border: 0px; overflow:hidden;'
|
||||
@@ -41,26 +45,33 @@ class Charts extends Component {
|
||||
render () {
|
||||
return (
|
||||
<BannerTopBar
|
||||
size='big'
|
||||
title='Advanced Algos Charts'
|
||||
text='But if you see me, there is probably a problem somewhere, try reloading the page in a moment.'
|
||||
backgroundUrl='https://aacorporatesitedevelop.azurewebsites.net/img/photos/superalgos-platform.jpg'
|
||||
size='medium'
|
||||
title=''
|
||||
text='Charts loading...'
|
||||
backgroundUrl='https://superalgos.org/img/photos/superalgos-platform.jpg'
|
||||
/>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
const mapStateToProps = (state) => {
|
||||
const mapStateToProps = state => {
|
||||
return {
|
||||
context: state.context
|
||||
}
|
||||
}
|
||||
|
||||
const mapDispatchToProps = (dispatch) => {
|
||||
const mapDispatchToProps = dispatch => {
|
||||
return {
|
||||
hideFooter: () => { dispatch({ type: 'HIDE_FOOTER' }) },
|
||||
showFooter: () => { dispatch({ type: 'SHOW_FOOTER' }) }
|
||||
hideFooter: () => {
|
||||
dispatch({ type: 'HIDE_FOOTER' })
|
||||
},
|
||||
showFooter: () => {
|
||||
dispatch({ type: 'SHOW_FOOTER' })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default connect(mapStateToProps, mapDispatchToProps)(withStyles(styles)(Charts))
|
||||
export default connect(
|
||||
mapStateToProps,
|
||||
mapDispatchToProps
|
||||
)(withStyles(styles)(Charts))
|
||||
@@ -0,0 +1,30 @@
|
||||
import React from 'react'
|
||||
import PropTypes from 'prop-types'
|
||||
import Typography from '@material-ui/core/Typography'
|
||||
|
||||
const BannerTopBar = ({ size, backgroundUrl, title, text, children }) => (
|
||||
<div
|
||||
className={`bannerTopBar ${size}`}
|
||||
style={backgroundUrl ? { backgroundImage: `url(${backgroundUrl})` } : {}}
|
||||
>
|
||||
<div className='caption'>
|
||||
<Typography className='title' variant='h1' align='center'>
|
||||
{title}
|
||||
</Typography>
|
||||
<Typography className='text' variant='h2' align='center'>
|
||||
{text}
|
||||
</Typography>
|
||||
{children}
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
|
||||
BannerTopBar.propTypes = {
|
||||
children: PropTypes.node,
|
||||
backgroundUrl: PropTypes.string,
|
||||
size: PropTypes.string,
|
||||
title: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),
|
||||
text: PropTypes.oneOfType([PropTypes.string, PropTypes.array])
|
||||
}
|
||||
|
||||
export default BannerTopBar
|
||||
@@ -0,0 +1,3 @@
|
||||
import BannerTopBar from './components/BannerTopBar'
|
||||
|
||||
export { BannerTopBar }
|
||||
@@ -0,0 +1,139 @@
|
||||
import React, { Component } from 'react'
|
||||
import PropTypes from 'prop-types'
|
||||
import classNames from 'classnames'
|
||||
import { withStyles } from '@material-ui/core/styles'
|
||||
import withWidth from '@material-ui/core/withWidth'
|
||||
import { Mutation } from 'react-apollo'
|
||||
|
||||
import Typography from '@material-ui/core/Typography'
|
||||
import Grid from '@material-ui/core/Grid'
|
||||
import Button from '@material-ui/core/Button'
|
||||
import InputBase from '@material-ui/core/InputBase'
|
||||
|
||||
import styles from './styles'
|
||||
|
||||
import NEWSLETTER_SIGNUP from '../graphql/NewsletterSignup'
|
||||
|
||||
import { isEmpty } from '../../../utils/js-helpers'
|
||||
|
||||
export class SignupForm extends Component {
|
||||
constructor (props) {
|
||||
super(props)
|
||||
|
||||
this.handleChange = this.handleChange.bind(this)
|
||||
this.handleSubmit = this.handleSubmit.bind(this)
|
||||
this.validate = this.validate.bind(this)
|
||||
|
||||
this.state = {
|
||||
email: '',
|
||||
emailError: '',
|
||||
success: false
|
||||
}
|
||||
}
|
||||
|
||||
render () {
|
||||
const {
|
||||
classes,
|
||||
width,
|
||||
alignCenter,
|
||||
displayTitle,
|
||||
displayIntro
|
||||
} = this.props
|
||||
return (
|
||||
<Mutation
|
||||
mutation={NEWSLETTER_SIGNUP}
|
||||
>
|
||||
{(NewsletterSignup, { loading, error, data }) => {
|
||||
return (
|
||||
<Grid container className={classes.signupRight} direction='column' justify={alignCenter ? 'center' : 'flex-start'}>
|
||||
{displayTitle && <Typography variant='h4' className={classNames(classes.textWhite, classes.signupTitle)} gutterBottom>Stay in touch!</Typography>}
|
||||
{displayIntro && <Typography variant='subtitle1' className={classNames(classes.textWhite, classes.signupText)} gutterBottom>Opt-in our mailing list to stay up to date with the Superalgos Project.</Typography>}
|
||||
<form id='email-signup' action='#' className='form-inline' autoComplete='off'>
|
||||
<Typography
|
||||
variant='subtitle1'
|
||||
className={classes.textSuccess}
|
||||
gutterBottom
|
||||
style={{
|
||||
display: this.state.success ? 'block' : 'none',
|
||||
textAlign: alignCenter ? 'center' : 'inherit'
|
||||
}}
|
||||
>
|
||||
Thank you for signing up! Please check your email and click on the confirmation link to complete the signup process.
|
||||
</Typography>
|
||||
<Grid container className={classes.signupContainer} justify={(width === 'xs' || alignCenter) ? 'center' : 'flex-start'}>
|
||||
<InputBase
|
||||
id='email'
|
||||
placeholder='Enter your email'
|
||||
classes={{
|
||||
root: classes.signupInputRoot,
|
||||
input: classes.signupInput
|
||||
}}
|
||||
onChange={this.handleChange}
|
||||
value={this.state.email}
|
||||
/>
|
||||
<Button
|
||||
id='email-submit'
|
||||
className={classes.signupInputSubmit}
|
||||
onClick={e => {
|
||||
this.handleSubmit(e, NewsletterSignup)
|
||||
}}
|
||||
>
|
||||
Submit
|
||||
</Button>
|
||||
</Grid>
|
||||
</form>
|
||||
</Grid>
|
||||
)
|
||||
}}
|
||||
</Mutation>
|
||||
)
|
||||
}
|
||||
|
||||
validate (data) {
|
||||
const errors = {}
|
||||
switch (data.id) {
|
||||
case 'email':
|
||||
if (data.value === '') {
|
||||
this.setState({ emailError: 'Please enter an email address' })
|
||||
} else {
|
||||
this.setState({ emailError: '' })
|
||||
}
|
||||
break
|
||||
default:
|
||||
}
|
||||
return errors
|
||||
}
|
||||
|
||||
handleChange (e) {
|
||||
let id = e.target.id
|
||||
let value = e.target.value
|
||||
let error = this.validate({ id, value })
|
||||
switch (id) {
|
||||
case 'email':
|
||||
if (!isEmpty(error)) this.setState({ emailError: error })
|
||||
this.setState({ email: value })
|
||||
break
|
||||
default:
|
||||
}
|
||||
}
|
||||
|
||||
async handleSubmit (e, NewsletterSignup) {
|
||||
e.preventDefault()
|
||||
console.log('NewsletterSignup handleSubmit: ', this.state.email)
|
||||
const signupResponse = await NewsletterSignup({ variables: { email: this.state.email } })
|
||||
console.log('NewsletterSignup: ', signupResponse)
|
||||
if (signupResponse.data.notifications_Master_NewsletterSignup === 'SUCCESS') this.setState({ email: '', success: true })
|
||||
}
|
||||
}
|
||||
|
||||
SignupForm.propTypes = {
|
||||
classes: PropTypes.object,
|
||||
width: PropTypes.string,
|
||||
alignCenter: PropTypes.bool,
|
||||
displayTitle: PropTypes.bool,
|
||||
displayIntro: PropTypes.bool
|
||||
}
|
||||
|
||||
const SignupFormWithStyles = withStyles(styles)(SignupForm)
|
||||
|
||||
export default withWidth()(SignupFormWithStyles)
|
||||
@@ -0,0 +1,93 @@
|
||||
import React from 'react'
|
||||
import PropTypes from 'prop-types'
|
||||
|
||||
import { BannerTopBar } from '../../common'
|
||||
import SignupForm from './SignupForm'
|
||||
|
||||
export class SignupVerifyResponse extends React.Component {
|
||||
componentDidMount () {
|
||||
const { mutate } = this.props
|
||||
mutate()
|
||||
}
|
||||
|
||||
render () {
|
||||
const { loading, error, data } = this.props
|
||||
let BannerTitle = ''
|
||||
let BannerText = ''
|
||||
let displayForm = false
|
||||
console.log('SignupVerifyResponse:', loading, error, data)
|
||||
if (error) {
|
||||
if (
|
||||
error.message ===
|
||||
'GraphQL error: Error: Token Expired. Please resubmit email address.'
|
||||
) {
|
||||
BannerText = [
|
||||
<strong key='EmailSignupConfirm-error-b1'>
|
||||
Newsletter Signup Error: Verification Token Expired
|
||||
</strong>,
|
||||
<br key='EmailSignupConfirm-error-br' />,
|
||||
'Please resubmit your email address and a new token will be emailed to you.',
|
||||
<br key='EmailSignupConfirm-error-br2' />,
|
||||
' We apologize for the inconvenience, but we highly value your seurity and privacy.'
|
||||
]
|
||||
displayForm = true
|
||||
} else {
|
||||
BannerText = [
|
||||
'Newsletter Signup Error: ',
|
||||
<br key='EmailSignupConfirm-error-br' />,
|
||||
error.message
|
||||
]
|
||||
}
|
||||
return (
|
||||
<BannerTopBar
|
||||
size='big'
|
||||
title={BannerTitle}
|
||||
text={BannerText}
|
||||
backgroundUrl='https://superalgos.org/img/photos/superalgos-platform.jpg'
|
||||
/>
|
||||
)
|
||||
}
|
||||
if (loading && !error) {
|
||||
BannerText = [
|
||||
'Processing newsletter sign-up...',
|
||||
<br key='EmailSignupConfirm-br' />,
|
||||
'Thank you for opting-in to recieve updates about the Superalgos project!'
|
||||
]
|
||||
}
|
||||
if (data !== undefined && data !== null) {
|
||||
console.log(data)
|
||||
if (data.notifications_Master_NewsletterSignupVerify === 'SUCCESS') {
|
||||
return (
|
||||
<React.Fragment>
|
||||
<BannerTopBar
|
||||
size='big'
|
||||
title='Mailing Sign-Up Complete!'
|
||||
text='We look forward to keeping you up-to-date on the Superalgos project.'
|
||||
backgroundUrl='https://superalgos.org/img/photos/superalgos-platform.jpg'
|
||||
>
|
||||
{displayForm && <SignupForm alignCenter />}
|
||||
</BannerTopBar>
|
||||
</React.Fragment>
|
||||
)
|
||||
}
|
||||
} else {
|
||||
return (
|
||||
<BannerTopBar
|
||||
size='big'
|
||||
title='Processing...'
|
||||
text=''
|
||||
backgroundUrl='https://superalgos.org/img/photos/superalgos-platform.jpg'
|
||||
/>
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SignupVerifyResponse.propTypes = {
|
||||
mutate: PropTypes.function,
|
||||
loading: PropTypes.bool,
|
||||
error: PropTypes.object,
|
||||
data: PropTypes.object
|
||||
}
|
||||
|
||||
export default SignupVerifyResponse
|
||||
@@ -0,0 +1,72 @@
|
||||
import lightGreen from '@material-ui/core/colors/lightGreen'
|
||||
|
||||
const styles = theme => ({
|
||||
textLight: {
|
||||
color: theme.palette.primary.light
|
||||
},
|
||||
textWhite: {
|
||||
color: theme.palette.common.white
|
||||
},
|
||||
textSuccess: {
|
||||
color: lightGreen[400]
|
||||
},
|
||||
copyright: {
|
||||
paddingTop: theme.spacing.unit * 3
|
||||
},
|
||||
linkLight: {
|
||||
color: theme.palette.secondary.main,
|
||||
textDecoration: 'none'
|
||||
},
|
||||
signupRight: {
|
||||
marginTop: theme.spacing.unit * 2,
|
||||
[theme.breakpoints.down('xs')]: {
|
||||
textAlign: 'center'
|
||||
}
|
||||
},
|
||||
signupContainer: {
|
||||
marginBottom: theme.spacing.unit * 2,
|
||||
[theme.breakpoints.down('xs')]: {
|
||||
textAlign: 'center'
|
||||
}
|
||||
},
|
||||
signupTitle: {
|
||||
fontSize: '25px',
|
||||
marginBottom: theme.spacing.unit * 5
|
||||
},
|
||||
signupText: {
|
||||
fontSize: '16px'
|
||||
},
|
||||
signupInput: {
|
||||
borderRadius: 4,
|
||||
backgroundColor: theme.palette.common.white,
|
||||
border: '1px solid #ced4da',
|
||||
fontSize: 20,
|
||||
padding: '10px 12px',
|
||||
transition: theme.transitions.create(['border-color', 'box-shadow']),
|
||||
marginRight: theme.spacing.unit * 1
|
||||
},
|
||||
signupInputSubmit: {
|
||||
boxShadow: 'none',
|
||||
textTransform: 'none',
|
||||
fontSize: 20,
|
||||
lineHeight: '1.1875em',
|
||||
color: theme.palette.common.white,
|
||||
padding: '10px 12px',
|
||||
backgroundColor: '#5bc0de',
|
||||
borderColor: '#46b8da',
|
||||
'&:hover': {
|
||||
backgroundColor: '#31b0d5',
|
||||
borderColor: '#269abc'
|
||||
},
|
||||
'&:active': {
|
||||
boxShadow: 'none',
|
||||
backgroundColor: '#0062cc',
|
||||
borderColor: '#005cbf'
|
||||
},
|
||||
'&:focus': {
|
||||
boxShadow: '0 0 0 0.2rem rgba(0,123,255,.5)'
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
export default styles
|
||||
@@ -0,0 +1,10 @@
|
||||
/* eslint-disable no-unused-vars */
|
||||
import gql from 'graphql-tag'
|
||||
|
||||
const NEWSLETTER_SIGNUP = gql`
|
||||
mutation NewsletterSignup($email: String!) {
|
||||
notifications_Master_NewsletterSignup(email: $email)
|
||||
}
|
||||
`
|
||||
|
||||
export default NEWSLETTER_SIGNUP
|
||||
@@ -0,0 +1,10 @@
|
||||
/* eslint-disable no-unused-vars */
|
||||
import gql from 'graphql-tag'
|
||||
|
||||
const NEWSLETTER_SIGNUP_VERIFY = gql`
|
||||
mutation NewsletterSignupVerify($token: String!){
|
||||
notifications_Master_NewsletterSignupVerify(token: $token)
|
||||
}
|
||||
`
|
||||
|
||||
export default NEWSLETTER_SIGNUP_VERIFY
|
||||
@@ -0,0 +1,55 @@
|
||||
import React from 'react'
|
||||
import PropTypes from 'prop-types'
|
||||
import queryString from 'query-string'
|
||||
import { Mutation } from 'react-apollo'
|
||||
|
||||
import { BannerTopBar } from '../common'
|
||||
import SignupVerifyResponse from './components/SignupVerifyResponse'
|
||||
|
||||
import NEWSLETTER_SIGNUP_VERIFY from './graphql/NewsletterSignupVerify'
|
||||
|
||||
export const EmailSignupConfirm = ({ tokenParam }) => {
|
||||
let token
|
||||
let BannerText = ''
|
||||
if (tokenParam !== '' && tokenParam !== null) {
|
||||
const values = queryString.parse(tokenParam)
|
||||
token = values.token
|
||||
} else {
|
||||
BannerText = [
|
||||
'Newsletter Signup Error: Invalid Token',
|
||||
<br key='EmailSignupConfirm-error-br' />,
|
||||
'Please try signing up again! We apologize for the inconvenience,',
|
||||
<br key='EmailSignupConfirm-error-br2' />,
|
||||
'but we highly value your seurity and privacy.'
|
||||
]
|
||||
return (
|
||||
<BannerTopBar
|
||||
size='big'
|
||||
title=''
|
||||
text={BannerText}
|
||||
backgroundUrl='https://superalgos.org/img/photos/superalgos-platform.jpg'
|
||||
/>
|
||||
)
|
||||
}
|
||||
console.log(token)
|
||||
return (
|
||||
<Mutation mutation={NEWSLETTER_SIGNUP_VERIFY} variables={{ token: token }}>
|
||||
{(NewsletterSignupVerify, { loading, error, data }) => {
|
||||
return (
|
||||
<SignupVerifyResponse
|
||||
mutate={NewsletterSignupVerify}
|
||||
loading={loading}
|
||||
error={error}
|
||||
data={data}
|
||||
/>
|
||||
)
|
||||
}}
|
||||
</Mutation>
|
||||
)
|
||||
}
|
||||
|
||||
EmailSignupConfirm.propTypes = {
|
||||
tokenParam: PropTypes.string
|
||||
}
|
||||
|
||||
export default EmailSignupConfirm
|
||||
@@ -1,5 +1,5 @@
|
||||
import React, { Component } from 'react'
|
||||
import BannerTopBar from '../BannerTopBar'
|
||||
import { BannerTopBar } from '../common'
|
||||
import { Typography } from '@material-ui/core'
|
||||
|
||||
class Home extends Component {
|
||||
@@ -8,13 +8,13 @@ class Home extends Component {
|
||||
<React.Fragment>
|
||||
<BannerTopBar
|
||||
size='big'
|
||||
title='Advanced Algos Platform'
|
||||
text='Enabling the evolutionary race towards the emergence of superalgos'
|
||||
backgroundUrl='https://aacorporatesitedevelop.azurewebsites.net/img/photos/superalgos-platform.jpg'
|
||||
title='Superalgos Platform'
|
||||
text='People and machines working together to create Superalgos'
|
||||
backgroundUrl='https://superalgos.org/img/photos/superalgos-platform.jpg'
|
||||
/>
|
||||
<div className='homePage'>
|
||||
<div className='homePage container'>
|
||||
<Typography variant='h1' align='center' className='title'>Welcome to the Superalgos Platform!</Typography>
|
||||
<Typography variant='h2' align='center' className='subtitle'>CO-CREATE >> COMPETE >> EVOLVE</Typography>
|
||||
<Typography variant='h2' align='center' className='subtitle'>Enabling the evolutionary race towards the emergence of superalgos</Typography>
|
||||
<div className='column'>
|
||||
<Typography align='justify'>
|
||||
Before you begin, please be aware <strong>this is a development environment in pre-alpha stage</strong>.
|
||||
@@ -28,11 +28,11 @@ class Home extends Component {
|
||||
</div>
|
||||
<div className='column'>
|
||||
<Typography align='justify'>
|
||||
Feel free to explore the menu in the top-right corner or visit the <a href='https://www.advancedalgos.net/documentation-quick-start.shtml' target='_blank'>Quick Start Guide</a>.
|
||||
Reporting of bugs at the corresponding <a href='https://github.com/AdvancedAlgos' target='_blank' rel='nofollow'>Advanced Algos Github repository</a> is highly appreciated.
|
||||
Feel free to explore the menu in the top-right corner or visit the <a href='https://www.superalgos.org/documentation-quick-start.shtml' target='_blank'>Quick Start Guide</a>.
|
||||
Reporting of bugs at the corresponding <a href='https://github.com/Superalgos' target='_blank' rel='nofollow'>Superalgos Github repository</a> is highly appreciated.
|
||||
</Typography>
|
||||
<Typography align='justify'>
|
||||
Get in touch with the rest of the community and get answers to your questions in our <a href='https://t.me/advancedalgoscommunity' target='_blank' rel='nofollow'>Telegram Group</a>.
|
||||
Get in touch with the rest of the community and get answers to your questions in our <a href='https://t.me/superalgoscommunity' target='_blank' rel='nofollow'>Telegram Group</a>.
|
||||
Have fun!
|
||||
</Typography>
|
||||
</div>
|
||||
|
||||
@@ -2,5 +2,6 @@ import Home from './home'
|
||||
import Charts from './charts'
|
||||
import Callback from './callback'
|
||||
import Layout from './layout'
|
||||
import EmailSignupConfirm from './email-verification'
|
||||
|
||||
export { Layout, Home, Charts, Callback }
|
||||
export { Layout, Home, Charts, Callback, EmailSignupConfirm }
|
||||
@@ -9,13 +9,13 @@ import { connect } from 'react-redux'
|
||||
|
||||
import Typography from '@material-ui/core/Typography'
|
||||
import Grid from '@material-ui/core/Grid'
|
||||
import Button from '@material-ui/core/Button'
|
||||
import InputBase from '@material-ui/core/InputBase'
|
||||
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
|
||||
import { faFacebookF, faTelegramPlane, faTwitter } from '@fortawesome/free-brands-svg-icons'
|
||||
import styles from './styles'
|
||||
|
||||
import aalogo from '../../../assets/advanced-algos/aa-logo-horiz-dark.svg'
|
||||
import SignupForm from '../../email-verification/components/SignupForm'
|
||||
|
||||
import aalogo from '../../../assets/superalgos/Superalgos-logo-horz-dark.svg'
|
||||
|
||||
class Footer extends Component {
|
||||
render () {
|
||||
@@ -34,57 +34,41 @@ class Footer extends Component {
|
||||
className={classes.footerContainer}
|
||||
>
|
||||
<Grid item xs={12} sm={4} md={4}>
|
||||
<NavLink to='/'>
|
||||
<img alt='' src={aalogo} width={'100%'} height={'auto'} />
|
||||
</NavLink>
|
||||
<a target='_blank' href='https://superalgos.org/' className={classes.linkStrong}>
|
||||
<img alt='' src={aalogo} width={'100%'} height={'auto'} className={classes.footerLogo} />
|
||||
</a>
|
||||
<Grid container className={classes.descriptionLeft} direction='column'>
|
||||
<Typography variant='subtitle2' className={classes.textLight} ><strong>Advanced Algos Ltd.</strong></Typography>
|
||||
<Typography variant='subtitle1' className={classes.textLight} gutterBottom>Ground Floor, Palace Court, Church Street,<br />St. Julians STJ3049, Malta</Typography>
|
||||
<Typography variant='subtitle1' className={classes.textLight}>
|
||||
<Link to='legal-privacy-statement.shtml' className={classes.linkLight}>Privacy Statement</Link> | <a href='legal-terms-of-service.shtml' className={classes.linkLight}>Terms of Service</a>
|
||||
<Typography className={classNames(classes.textLight, classes.descriptionText)} ><strong>Superalgos Ltd.</strong></Typography>
|
||||
<Typography className={classNames(classes.textLight, classes.descriptionText)} gutterBottom>Ground Floor, Palace Court, Church Street,<br />St. Julians STJ3049, Malta</Typography>
|
||||
<Typography className={classNames(classes.textLight, classes.descriptionText)}>
|
||||
<a target='_blank' href='https://www.superalgos.org/legal-privacy-statement.shtml' className={classes.linkLight}>Privacy Statement</a> | <a target='_blank' href='https://www.superalgos.org/legal-terms-of-service.shtml' className={classes.linkLight}>Terms of Service</a>
|
||||
</Typography>
|
||||
<Typography variant='body2' className={classNames(classes.textLight, classes.copyright)} gutterBottom>© Superalgos, Ltd. 2018 | All Rights Reserved.</Typography>
|
||||
</Grid>
|
||||
</Grid>
|
||||
<Grid item xs={12} sm={1} md={1} />
|
||||
<Grid item xs={12} sm={7} md={6}>
|
||||
<Grid container className={classes.signupRight} direction='column'>
|
||||
<Typography variant='h4' className={classes.textWhite} gutterBottom>Stay in touch!</Typography>
|
||||
<Typography variant='subtitle1' className={classes.textWhite} gutterBottom>Opt-in our mailing list to stay up to date with the Advanced Algos Project.</Typography>
|
||||
<form id='email-signup' action='#' className='form-inline' autoComplete='off'>
|
||||
<Typography variant='body2' className={classes.textSuccess} gutterBottom>Thank you for your interest! We'll keep you informed</Typography>
|
||||
<Grid container className={classes.signupContainer} justify={width === 'xs' ? 'center' : 'flex-start'}>
|
||||
<InputBase
|
||||
id='footer-input'
|
||||
placeholder='Enter your email'
|
||||
classes={{
|
||||
root: classes.footerInputRoot,
|
||||
input: classes.footerInput
|
||||
}}
|
||||
/>
|
||||
<Button id='email-submit' className={classes.footerInputSubmit}>Submit</Button>
|
||||
</Grid>
|
||||
</form>
|
||||
</Grid>
|
||||
<SignupForm displayTitle displayIntro />
|
||||
<Typography variant='subtitle1' className={classes.textWhite} style={{ textAlign: width === 'xs' ? 'center' : '' }}>Meet us on Social Networks:</Typography>
|
||||
<Grid container justify={width === 'xs' ? 'center' : 'flex-start'}>
|
||||
<Link to='https://t.me/advancedalgoscommunity' title='Join us on Telgram' className={classes.linkLight}>
|
||||
<a target='_blank' href='https://t.me/superalgoscommunity' title='Join us on Telgram' className={classes.linkLight}>
|
||||
<FontAwesomeIcon
|
||||
icon={faTelegramPlane}
|
||||
className={classNames(classes.icon, classes.iconHover)}
|
||||
/>
|
||||
</Link>
|
||||
<Link to='https://twitter.com/advancedalgos' title='Follow us on Twitter' className={classes.linkLight}>
|
||||
</a>
|
||||
<a target='_blank' href='https://twitter.com/superalgos' title='Follow us on Twitter' className={classes.linkLight}>
|
||||
<FontAwesomeIcon
|
||||
icon={faTwitter}
|
||||
className={classNames(classes.icon, classes.iconHover)}
|
||||
/>
|
||||
</Link>
|
||||
<Link to='https://www.facebook.com/Advanced-Algos-173249670001615/' title='Meet us on Facebook' className={classes.linkLight}>
|
||||
</a>
|
||||
<a target='_blank' href='https://www.facebook.com/Superalgos-375022859724428/' title='Meet us on Facebook' className={classes.linkLight}>
|
||||
<FontAwesomeIcon
|
||||
icon={faFacebookF}
|
||||
className={classNames(classes.icon, classes.iconHover)}
|
||||
/>
|
||||
</Link>
|
||||
</a>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Grid>
|
||||
|
||||
@@ -10,19 +10,23 @@ const styles = theme => ({
|
||||
textSuccess: {
|
||||
color: lightGreen[400]
|
||||
},
|
||||
copyright: {
|
||||
paddingTop: theme.spacing.unit * 9,
|
||||
fontSize: '16px'
|
||||
},
|
||||
linkLight: {
|
||||
color: theme.palette.secondary.main,
|
||||
textDecoration: 'none'
|
||||
},
|
||||
descriptionLeft: {
|
||||
marginLeft: theme.spacing.unit * 8,
|
||||
[theme.breakpoints.down('sm')]: {
|
||||
marginLeft: 0
|
||||
},
|
||||
marginLeft: 0,
|
||||
[theme.breakpoints.down('xs')]: {
|
||||
textAlign: 'center'
|
||||
}
|
||||
},
|
||||
descriptionText: {
|
||||
fontSize: '16px'
|
||||
},
|
||||
signupRight: {
|
||||
marginTop: theme.spacing.unit * 2,
|
||||
[theme.breakpoints.down('xs')]: {
|
||||
@@ -38,19 +42,20 @@ const styles = theme => ({
|
||||
footer: {
|
||||
borderTop: `4px solid ${theme.palette.secondary.light}`,
|
||||
padding: `${theme.spacing.unit * 6}px 0`,
|
||||
backgroundColor: '#19191C', /* #29292c */
|
||||
backgroundColor: '#19191C' /* #29292c */,
|
||||
color: theme.palette.primary.light
|
||||
},
|
||||
footerContainer: {
|
||||
width: 'auto',
|
||||
marginLeft: theme.spacing.unit * 3,
|
||||
marginRight: theme.spacing.unit * 3,
|
||||
[theme.breakpoints.up(1200 + theme.spacing.unit * 3 * 2)]: {
|
||||
width: 1200,
|
||||
marginLeft: 'auto',
|
||||
marginRight: 'auto'
|
||||
}
|
||||
},
|
||||
footerLogo: {
|
||||
marginBottom: theme.spacing.unit * 2
|
||||
},
|
||||
footerLink: {
|
||||
textDecoration: 'none',
|
||||
'&:hover': {
|
||||
@@ -98,7 +103,7 @@ const styles = theme => ({
|
||||
},
|
||||
icon: {
|
||||
margin: theme.spacing.unit * 1,
|
||||
fontSize: 24
|
||||
fontSize: 30
|
||||
},
|
||||
iconHover: {
|
||||
margin: theme.spacing.unit * 1,
|
||||
|
||||
@@ -19,9 +19,10 @@ export const LoggedIn = props => {
|
||||
displayName = user.firstName
|
||||
}
|
||||
|
||||
if (isDefined(user.firstName) && isDefined(user.lastName)) {
|
||||
displayName = user.firstName + ' ' + user.lastName
|
||||
}
|
||||
displayName = displayName.split('-')[0]
|
||||
displayName = displayName.split('.')[0]
|
||||
displayName = displayName.split('_')[0]
|
||||
displayName = displayName.split(' ')[0]
|
||||
|
||||
return (
|
||||
|
||||
@@ -32,8 +33,9 @@ export const LoggedIn = props => {
|
||||
>
|
||||
<Link to='/users/user' onClick={() => toggleMenuOpen(42, true)}> {displayName} </Link>
|
||||
<ul className='subMenu'>
|
||||
<li><Link to='/users/user' onClick={() => closeAll()}> Profile </Link></li>
|
||||
<li><Link to='/users/user' onClick={() => closeAll()}> Your Profile </Link></li>
|
||||
<li><a href='#' onClick={() => auth.logout()}> Logout </a></li>
|
||||
<li><a href='https://superalgos.org'> Exit Platform </a></li>
|
||||
</ul>
|
||||
</li>
|
||||
)
|
||||
|
||||
@@ -3,58 +3,94 @@ import {
|
||||
GamepadRounded,
|
||||
AccessibilityNew,
|
||||
LibraryAdd,
|
||||
Home,
|
||||
ImportContacts,
|
||||
BugReport,
|
||||
People
|
||||
People,
|
||||
Group,
|
||||
VpnKey,
|
||||
Home,
|
||||
AddCircleOutline
|
||||
} from '@material-ui/icons'
|
||||
|
||||
const usersMenus = {
|
||||
title: 'Users',
|
||||
to: '/users',
|
||||
icon: Home,
|
||||
submenus: [
|
||||
{ title: 'Home', to: '/users/', icon: Home },
|
||||
{ title: 'Directory', to: '/users/browse', icon: ImportContacts },
|
||||
{ title: 'Search', to: '/users/search', icon: Search },
|
||||
{ title: 'Report', to: 'https://github.com/AdvancedAlgos/UsersModule/issues/new', icon: BugReport, externalLink: true },
|
||||
{ title: 'Your Profile', to: '/users/user', icon: People }
|
||||
{ title: 'Your Profile', to: '/users/user', icon: People, authenticated: true },
|
||||
{ title: 'Report a Bug', to: 'https://github.com/Superalgos/UsersModule/issues/new', icon: BugReport, externalLink: true }
|
||||
]
|
||||
}
|
||||
|
||||
const teamsMenus = {
|
||||
title: 'Teams',
|
||||
to: '/teams',
|
||||
icon: Home,
|
||||
submenus: [
|
||||
{ title: 'All teams', to: '/teams', icon: Search },
|
||||
{ title: 'Your teams', to: '/teams/manage-teams', icon: GamepadRounded },
|
||||
{ title: 'Team members', to: '/teams/team-members', icon: GamepadRounded },
|
||||
{ title: 'Financial beings', to: '/teams/financial-beings', icon: GamepadRounded },
|
||||
{ title: 'Report', to: 'https://github.com/AdvancedAlgos/TeamsModule/issues/new', icon: LibraryAdd, externalLink: true }
|
||||
{ title: 'Directory', to: '/teams/explore', icon: ImportContacts },
|
||||
{ title: 'Your teams', to: '/teams/manage-teams', icon: Group, authenticated: true },
|
||||
{ title: 'Team members', to: '/teams/team-members', icon: People, authenticated: true },
|
||||
{ title: 'Report a Bug', to: 'https://github.com/Superalgos/TeamsModule/issues/new', icon: BugReport, externalLink: true }
|
||||
]
|
||||
}
|
||||
|
||||
const eventsMenus = {
|
||||
title: 'Events',
|
||||
to: '/events',
|
||||
icon: Home,
|
||||
submenus: [
|
||||
{ title: 'All events', to: '/events', icon: Search },
|
||||
{ title: 'Your events', to: '/events/my', icon: GamepadRounded },
|
||||
{ title: 'Your hosted events', to: '/events/host', icon: AccessibilityNew },
|
||||
{ title: 'Host an event', to: '/events/create', icon: LibraryAdd },
|
||||
{ title: 'Report', to: 'https://github.com/AdvancedAlgos/UsersModule/issues/new', icon: LibraryAdd, externalLink: true }
|
||||
{ title: 'Directory', to: '/events', icon: ImportContacts },
|
||||
{ title: 'Your events', to: '/events/my', icon: GamepadRounded, authenticated: true },
|
||||
{ title: 'Your hosted events', to: '/events/host', icon: AccessibilityNew, authenticated: true },
|
||||
{ title: 'Host an event', to: '/events/create', icon: LibraryAdd, authenticated: true },
|
||||
{ title: 'Report a Bug', to: 'https://github.com/Superalgos/UsersModule/issues/new', icon: BugReport, externalLink: true }
|
||||
]
|
||||
}
|
||||
|
||||
const keyvaultMenus = {
|
||||
title: 'Key Vault',
|
||||
to: '/key-vault',
|
||||
title: 'Keys',
|
||||
to: '/keys',
|
||||
icon: Home,
|
||||
authenticated: true,
|
||||
submenus: [
|
||||
{ title: 'Manage keys', to: '/key-vault/browse', icon: Search },
|
||||
{ title: 'Add key', to: '/key-vault/addKey', icon: GamepadRounded },
|
||||
{ title: 'Report', to: 'https://github.com/AdvancedAlgos/KeyVaultModule/issues/new', icon: LibraryAdd, externalLink: true }
|
||||
{ title: 'Your keys', to: '/keys/browse', icon: VpnKey },
|
||||
{ title: 'Add key', to: '/keys/addKey', icon: AddCircleOutline },
|
||||
{ title: 'Report a Bug', to: 'https://github.com/Superalgos/KeyVaultModule/issues/new', icon: BugReport, externalLink: true }
|
||||
]
|
||||
}
|
||||
|
||||
const allMenus = [ usersMenus, teamsMenus, eventsMenus, keyvaultMenus ]
|
||||
const operationsMenus = {
|
||||
title: 'Clones',
|
||||
to: '/clones',
|
||||
icon: Home,
|
||||
authenticated: true,
|
||||
submenus: [
|
||||
{ title: 'Active Clones', to: '/clones/browse', icon: ImportContacts },
|
||||
{ title: 'History Clones', to: '/clones/history', icon: LibraryAdd },
|
||||
{ title: 'Create Clone', to: '/clones/add', icon: AddCircleOutline },
|
||||
{ title: 'Report a Bug', to: 'https://github.com/Superalgos/OperationsModule/issues/new', icon: BugReport, externalLink: true }
|
||||
]
|
||||
}
|
||||
|
||||
const financialBeingsMenus = {
|
||||
title: 'FBs',
|
||||
to: '/financial-beings',
|
||||
icon: Home,
|
||||
authenticated: false,
|
||||
submenus: [
|
||||
{ title: 'Directory', to: '/financial-beings', icon: ImportContacts }
|
||||
]
|
||||
}
|
||||
|
||||
const allMenus = [
|
||||
usersMenus,
|
||||
teamsMenus,
|
||||
// eventsMenus,
|
||||
// financialBeingsMenus,
|
||||
keyvaultMenus,
|
||||
operationsMenus
|
||||
]
|
||||
|
||||
export default allMenus
|
||||
@@ -8,7 +8,7 @@ import withWidth from '@material-ui/core/withWidth'
|
||||
import { LoggedIn } from './LoggedIn'
|
||||
|
||||
import allMenus from './imports'
|
||||
import AALogo from '../../../assets/advanced-algos/aa-logo-dark.svg'
|
||||
import AALogo from '../../../assets/superalgos/Superalgos-logo-horz-dark.svg'
|
||||
|
||||
class Header extends Component {
|
||||
constructor (props) {
|
||||
@@ -29,6 +29,11 @@ class Header extends Component {
|
||||
}
|
||||
}
|
||||
|
||||
scrollToTop () {
|
||||
document.body.scrollTop = 0 // For Safari
|
||||
document.documentElement.scrollTop = 0 // For Chrome, Firefox, IE and Opera
|
||||
}
|
||||
|
||||
toggleMobileOpen () {
|
||||
this.setState({ mobileOpen: !this.state.mobileOpen })
|
||||
}
|
||||
@@ -75,7 +80,10 @@ class Header extends Component {
|
||||
}
|
||||
let user = JSON.parse(this.state.user)
|
||||
|
||||
const menus = allMenus.map(({ to, title, submenus }, index) => {
|
||||
const menus = allMenus.map(({ icon: Icon, to, title, submenus, authenticated }, index) => {
|
||||
if (authenticated && !(this.state.user !== undefined && this.state.user !== null)) {
|
||||
return
|
||||
}
|
||||
return (
|
||||
<li
|
||||
onMouseEnter={() => this.toggleMenuOpen(index, bigScreen)}
|
||||
@@ -83,17 +91,27 @@ class Header extends Component {
|
||||
key={index}
|
||||
className={openedMenu === index ? 'primaryLink hasChildren selected' : 'primaryLink hasChildren'}
|
||||
>
|
||||
<Link to={to} onClick={() => this.toggleMenuOpen(index, true)}> {title} </Link>
|
||||
{ bigScreen
|
||||
? <Link to={to} onClick={() => this.toggleMenuOpen(index, true)}> {title} </Link>
|
||||
: <a onClick={() => this.toggleMenuOpen(index, true)}> {title} </a>
|
||||
}
|
||||
<ul className='subMenu'>
|
||||
{ bigScreen
|
||||
? ''
|
||||
: <li key={index + 'home'}><Link to={to}> <Icon /> Module Home Page </Link></li>
|
||||
}
|
||||
{
|
||||
submenus.map(({ icon: Icon, to: subTo, title: subTitle, externalLink }, subindex) => {
|
||||
submenus.map(({ icon: SubIcon, to: subTo, title: subTitle, externalLink, authenticated: subAuthenticated }, subindex) => {
|
||||
if (subAuthenticated && !(this.state.user !== undefined && this.state.user !== null)) {
|
||||
return
|
||||
}
|
||||
if (externalLink) {
|
||||
return (
|
||||
<li key={subindex}><a href={subTo}> <Icon /> {subTitle} </a></li>
|
||||
<li key={subindex}><a href={subTo} target='_blank'> <SubIcon /> {subTitle} </a></li>
|
||||
)
|
||||
}
|
||||
return (
|
||||
<li key={subindex}><Link to={subTo} onClick={() => this.closeAll(index)}> <Icon /> {subTitle} </Link></li>
|
||||
<li key={subindex}><Link to={subTo} onClick={() => this.closeAll(index)}> <SubIcon /> {subTitle} </Link></li>
|
||||
)
|
||||
})}
|
||||
</ul>
|
||||
@@ -102,41 +120,44 @@ class Header extends Component {
|
||||
})
|
||||
|
||||
return (
|
||||
<header className={onTop ? 'menu' : 'menu notOnTop'}>
|
||||
<div className='container'>
|
||||
<Link to='/'> <img className='logo' src={AALogo} alt='Advanced Algos' /> </Link>
|
||||
<div className={mobileOpen ? 'mobileHandle openedMobile' : 'mobileHandle'} onClick={() => this.toggleMobileOpen()}>
|
||||
Menu
|
||||
</div>
|
||||
<nav className={mobileOpen ? 'links openedMobile' : 'links'}>
|
||||
<ul className='primaryMenu'>
|
||||
<li className='primaryLink'>
|
||||
<Link to='/charts'> Charts </Link>
|
||||
</li>
|
||||
{menus}
|
||||
<li className='primaryLink'>
|
||||
<a href='https://www.advancedalgos.net/documentation-quick-start.shtml'> Docs </a>
|
||||
</li>
|
||||
{this.state.user !== undefined && this.state.user !== null ? (
|
||||
<LoggedIn
|
||||
user={user}
|
||||
auth={auth}
|
||||
bigScreen={bigScreen}
|
||||
openedMenu={openedMenu}
|
||||
toggleMenuOpen={(keyValue, allowedValue) => this.toggleMenuOpen(keyValue, allowedValue)}
|
||||
mouseLeave={(allowedValue) => this.mouseLeave(allowedValue)}
|
||||
closeAll={() => this.closeAll()}
|
||||
/>
|
||||
) : (
|
||||
|
||||
<React.Fragment>
|
||||
<header className={onTop ? 'menu' : 'menu notOnTop'}>
|
||||
<div className='container'>
|
||||
<Link to='/'> <img className='logo' src={AALogo} alt='Superalgos' /> </Link>
|
||||
<div className={mobileOpen ? 'mobileHandle openedMobile' : 'mobileHandle'} onClick={() => this.toggleMobileOpen()}>
|
||||
Menu
|
||||
</div>
|
||||
<nav className={mobileOpen ? 'links openedMobile' : 'links'}>
|
||||
<ul className='primaryMenu'>
|
||||
<li className='primaryLink'>
|
||||
<a href='#' onClick={() => auth.login()}> Login / Sign Up </a>
|
||||
<Link to='/charts'> Charts </Link>
|
||||
</li>
|
||||
)}
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
{menus}
|
||||
<li className='primaryLink'>
|
||||
<a href='https://www.superalgos.org/documentation-quick-start.shtml'> Docs </a>
|
||||
</li>
|
||||
{this.state.user !== undefined && this.state.user !== null ? (
|
||||
<LoggedIn
|
||||
user={user}
|
||||
auth={auth}
|
||||
bigScreen={bigScreen}
|
||||
openedMenu={openedMenu}
|
||||
toggleMenuOpen={(keyValue, allowedValue) => this.toggleMenuOpen(keyValue, allowedValue)}
|
||||
mouseLeave={(allowedValue) => this.mouseLeave(allowedValue)}
|
||||
closeAll={() => this.closeAll()}
|
||||
/>
|
||||
) : (
|
||||
|
||||
<li className='primaryLink'>
|
||||
<a href='#' onClick={() => auth.login()}> Login / Sign Up </a>
|
||||
</li>
|
||||
)}
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
{onTop ? '' : <div className='toTop' onClick={() => { this.scrollToTop() }} />}
|
||||
</React.Fragment>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,9 +11,7 @@ class Index extends React.Component {
|
||||
return (
|
||||
<div className={this.props.classes.layout}>
|
||||
<Header auth={this.props.auth} />
|
||||
<div>
|
||||
{this.props.children}
|
||||
</div>
|
||||
<div>{this.props.children}</div>
|
||||
<Footer />
|
||||
</div>
|
||||
)
|
||||
|
||||
@@ -7,6 +7,16 @@ module.exports = {
|
||||
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.js$/,
|
||||
include: /node_modules\\@superalgos/,
|
||||
loader: 'babel-loader'
|
||||
},
|
||||
{
|
||||
test: /\.js$/,
|
||||
include: /node_modules\/@superalgos/,
|
||||
loader: 'babel-loader'
|
||||
},
|
||||
{
|
||||
test: /\.js$/,
|
||||
include: /node_modules\\@advancedalgos/,
|
||||
|
||||
@@ -16,6 +16,6 @@ The symlinks in
|
||||
1. Navigate to your module client.
|
||||
2. Run `npm link`
|
||||
3. Navigate `MasterApp/client`.
|
||||
4. Run `npm link [you-module-package]`. eg `npm link @advancedalgos/teams-client`
|
||||
4. Run `npm link [you-module-package]`. eg `npm link @superalgos/teams-client`
|
||||
5. Start server: `npm run dev`
|
||||
6. When a change is made in your module, after a second or two, the browser page should update without reloading.
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "master-app",
|
||||
"version": "0.0.1",
|
||||
"version": "0.1.3",
|
||||
"description": "Responsible for loading all web modules and running them.",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
@@ -10,7 +10,7 @@
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/Algoteers/MasterApp.git"
|
||||
},
|
||||
"author": "Advanced Algos, ltd.",
|
||||
"author": "Superalgos, ltd.",
|
||||
"license": "SEE LICENSE IN LICENSE.MD",
|
||||
"bugs": {
|
||||
"url": "https://github.com/Algoteers/MasterApp/issues"
|
||||
|
||||
+16
-10
@@ -1,13 +1,24 @@
|
||||
NODE_ENV=development
|
||||
|
||||
TEAMS_API_PRESHARED=THIS_IS_VERY_SECRET
|
||||
USERS_API_PRESHARED=THIS_IS_VERY_SECRET
|
||||
EVENTS_API_PRESHARED=THIS_IS_VERY_SECRET
|
||||
KEYVAULT_API_PRESHARED=THIS_IS_VERY_SECRET
|
||||
FINANCIAL_BEINGS_API_PRESHARED=THIS_IS_VERY_SECRET
|
||||
NOTIFICATIONS_API_PRESHARED=THIS_IS_VERY_SECRET
|
||||
|
||||
GRAPHQL_API_URL=https://app-api.advancedalgos.net/graphql
|
||||
TEAMS_API_URL=https://teams-api.advancedalgos.net/graphql
|
||||
USERS_API_URL=https://users-api.advancedalgos.net/graphql
|
||||
EVENTS_API_URL=https://events-api.advancedalgos.net/graphql
|
||||
KEYVAULT_API_URL=https://keyvault-api.advancedalgos.net/graphql
|
||||
# PROJECT_SITE_URL=https://superalgos.org
|
||||
PROJECT_SITE_URL=http://localhost:3999
|
||||
# PLATFORM_URL=https://platform.superalgos.org
|
||||
PLATFORM_URL=http://localhost:3100
|
||||
|
||||
GRAPHQL_API_URL=https://platform-api-dev.superalgos.org/graphql
|
||||
TEAMS_API_URL=https://teams-api-dev.superalgos.org/graphql
|
||||
USERS_API_URL=https://users-api-dev.superalgos.org/graphql
|
||||
EVENTS_API_URL=https://events-api-dev.superalgos.org/graphql
|
||||
KEYVAULT_API_URL=https://keyvault-api-dev.superalgos.org/graphql
|
||||
FINANCIAL_BEINGS_API_URL=https://financialbeings-api-dev.superalgos.org/graphql
|
||||
NOTIFICATIONS_API_URL=https://notifications-api-dev.superalgos.org/graphql
|
||||
|
||||
AUTH0_DOMAIN=auth0-domain
|
||||
AUTH0_AUDIENCE=auth0-audience
|
||||
@@ -16,8 +27,3 @@ AUTH0_ISSUER=auth0-issuer
|
||||
AACLOUD_ID=aacloud-id
|
||||
|
||||
RECAPTCHA=<RECAPTCHA_KEY>
|
||||
|
||||
SG_APIKEY=<SENDGRID_API_KEY>
|
||||
SG_APIKEY_CONTACTS=<SENDGRID_API_KEY_CONTACTS>
|
||||
SG_SIGNUP_EMAILID=<SENDGRID_SIGNUP_EMAILID>
|
||||
SG_CONTACT_EMAILID=<SENDGRID_CONTACT_EMAILID>
|
||||
+4
-1
@@ -20,5 +20,8 @@ dist/
|
||||
# Visual Studio Code
|
||||
.vscode
|
||||
|
||||
#Mac specific files
|
||||
# Mac specific files
|
||||
.DS_Store
|
||||
|
||||
# JetBrains
|
||||
.idea
|
||||
@@ -34,7 +34,7 @@ This Code of Conduct applies both within project spaces and in public spaces whe
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at feedback at advancedalgos dot org. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at feedback at superalgos dot org. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
|
||||
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
|
||||
We are thrilled you are interested in contributing to the this module. Your help may be essential to the project's success and we want you in!
|
||||
|
||||
Advanced Algos LTD is a startup, currently at a very early stage. Although this module is not open source software yet, we do welcome contributions from the community.
|
||||
Superalgos.org is an open source project, currently at a very early stage. Although this module is not open source software yet, we do welcome contributions from the community.
|
||||
|
||||
Contributions are deemed _work for hire_ and --as such-- are compensated on a case by case basis, with ALGO tokens. Contributors agree to provide an express grant of patent rights for their contributions. Our Balanced Contributor Intellectual Property Agreement is a direct implementation of GitHub's [Balanced Employee Intellectual Property Agreement 1.0.1](https://github.com/github/balanced-employee-ip-agreement/blob/master/Balanced_Employee_IP_Agreement.md).
|
||||
|
||||
# Balanced Contributor Intellectual Property Agreement 1.0.1
|
||||
|
||||
This BALANCED CONTRIBUTOR INTELLECTUAL PROPERTY AGREEMENT is between person named below and Advanced Algos ("Company").
|
||||
This BALANCED CONTRIBUTOR INTELLECTUAL PROPERTY AGREEMENT is between person named below and Superalgos ("Company").
|
||||
|
||||
**What is this?** This is the Company's Intellectual Property Agreement ("Agreement"). If you've worked in the technology space before, there's a good chance that you've run across one or more of these in the past. This document is the official, entire and exclusive agreement on what intellectual property ("IP") is yours, and what belongs to the Company.
|
||||
|
||||
|
||||
+7
-7
@@ -1,17 +1,17 @@
|
||||
COPYRIGHT NOTICE
|
||||
|
||||
© Copyright 2018 Advanced Algos LTD.
|
||||
© Copyright 2018 Superalgos.org
|
||||
|
||||
|
||||
LICENSE NOTICE
|
||||
|
||||
Advanced Algos LTD. is a startup, currently at a very early stage. Because certain aspects of
|
||||
Superalgos.org is a startup, currently at a very early stage. Because certain aspects of
|
||||
the business are still not clearly defined, we have chosen to --temporarily-- grant a
|
||||
restrictive license for the use of this module, until those business aspects are clarified
|
||||
and a proper open source license can be granted.
|
||||
|
||||
Advanced Algos LTD. is publishing the code of this software for several reasons. However,
|
||||
it shall not be considered free software yet. Advanced Algos LTD. is a for-profit company
|
||||
Superalgos.org is publishing the code of this software for several reasons. However,
|
||||
it shall not be considered free software yet. Superalgos.org is a for-profit company
|
||||
in the crypto space and this module is still proprietary software.
|
||||
|
||||
The reasons for opening up the code of this module at this stage are the following:
|
||||
@@ -27,14 +27,14 @@ The reasons for opening up the code of this module at this stage are the followi
|
||||
|
||||
LICENSE WORDING
|
||||
|
||||
Advanced Algos LTD. grants a limited license for the following uses:
|
||||
Superalgos.org grants a limited license for the following uses:
|
||||
|
||||
1. CODE REVIEW AND AUDITS. You are granted permission to clone this repository to analyze,
|
||||
review or audit the code.
|
||||
|
||||
2. COLLABORATING WITH ADVANCED ALGOS LTD. You are granted permission to fork the this repository
|
||||
2. COLLABORATING WITH SUPERALGOS.ORG You are granted permission to fork the this repository
|
||||
with the sole purpose of correcting bugs and developing functionality in agreement with
|
||||
Advanced Algos LTD. By contributing to this repository you explicitely agree to the terms
|
||||
Superalgos.org By contributing to this repository you explicitely agree to the terms
|
||||
detailed in CONTRIBUTING.MD.
|
||||
|
||||
PLEASE SEE CONTRIBUTING.MD FOR MORE DETAILS ON THE IMPLICATIONS SURROUNDING YOUR CONTRIBUTIONS
|
||||
|
||||
Generated
+1683
-1230
File diff suppressed because it is too large.
Load diff
+2
-2
@@ -11,7 +11,7 @@
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/Algoteers/MasterApp.git"
|
||||
},
|
||||
"author": "Advanced Algos, ltd.",
|
||||
"author": "Superalgos, ltd.",
|
||||
"license": "SEE LICENSE IN LICENSE.MD",
|
||||
"bugs": {
|
||||
"url": "https://github.com/Algoteers/MasterApp/issues"
|
||||
@@ -21,7 +21,7 @@
|
||||
"babel-cli": "^6.26.0",
|
||||
"babel-preset-env": "^1.7.0",
|
||||
"babel-preset-stage-2": "^6.24.1",
|
||||
"nodemon": "^1.18.4"
|
||||
"nodemon": "^1.18.10"
|
||||
},
|
||||
"dependencies": {
|
||||
"apollo-link": "^1.2.3",
|
||||
|
||||
@@ -45,9 +45,10 @@ export const createRemoteSchema = async (uri, preshared_key) => {
|
||||
export const createTransformedRemoteSchema = async (prefix, uri, preshared_key) => {
|
||||
var schema
|
||||
try {
|
||||
logger.info('About to create %s schema at %s.', prefix, uri)
|
||||
schema = await createRemoteSchema(uri, preshared_key)
|
||||
} catch (error) {
|
||||
logger.error(`An error occured while fetching ${prefix}, ${uri} schema. Details: ${error}`)
|
||||
logger.error('An error occured while fetching %s, %s schema. Details: %j', prefix, uri, error)
|
||||
return false
|
||||
}
|
||||
const transformedSchema = transformSchema(schema, [
|
||||
|
||||
+32
-31
@@ -9,8 +9,7 @@ import axios from 'axios'
|
||||
|
||||
import { createTransformedRemoteSchema } from './createRemoteSchema'
|
||||
import { teams, events } from './links'
|
||||
import { typeDef as masterSchema } from './schema'
|
||||
import masterResolvers from './resolvers'
|
||||
|
||||
import logger from './logger'
|
||||
|
||||
async function getUserId (authId) {
|
||||
@@ -43,6 +42,10 @@ async function getUserId (authId) {
|
||||
}
|
||||
|
||||
async function run () {
|
||||
const transformedKeyVaultSchema = await createTransformedRemoteSchema(
|
||||
'keyVault_',
|
||||
process.env.KEYVAULT_API_URL,
|
||||
process.env.KEYVAULT_API_PRESHARED)
|
||||
const transformedTeamsSchema = await createTransformedRemoteSchema(
|
||||
'teams_',
|
||||
process.env.TEAMS_API_URL,
|
||||
@@ -55,14 +58,21 @@ async function run () {
|
||||
'events_',
|
||||
process.env.EVENTS_API_URL,
|
||||
process.env.EVENTS_API_PRESHARED)
|
||||
const transformedKeyVaultSchema = await createTransformedRemoteSchema(
|
||||
'keyVault_',
|
||||
process.env.KEYVAULT_API_URL,
|
||||
process.env.KEYVAULT_API_PRESHARED)
|
||||
const transformedFinancialBeingsSchema = await createTransformedRemoteSchema(
|
||||
'financialBeings_',
|
||||
process.env.FINANCIAL_BEINGS_API_URL,
|
||||
process.env.FINANCIAL_BEINGS_API_PRESHARED)
|
||||
const transformedOperationsSchema = await createTransformedRemoteSchema(
|
||||
'operations_',
|
||||
process.env.OPERATIONS_API_URL,
|
||||
process.env.OPERATIONS_API_PRESHARED)
|
||||
const transformedNotificationsSchema = await createTransformedRemoteSchema(
|
||||
'notifications_',
|
||||
process.env.NOTIFICATIONS_API_URL,
|
||||
process.env.NOTIFICATIONS_API_PRESHARED)
|
||||
|
||||
var schemas = [masterSchema]
|
||||
var schemas = []
|
||||
var resolvers = {}
|
||||
resolvers = Object.assign(resolvers, masterResolvers)
|
||||
|
||||
if (transformedTeamsSchema) {
|
||||
schemas.push(transformedTeamsSchema)
|
||||
@@ -84,22 +94,21 @@ async function run () {
|
||||
if (transformedKeyVaultSchema) {
|
||||
schemas.push(transformedKeyVaultSchema)
|
||||
}
|
||||
if (transformedFinancialBeingsSchema) {
|
||||
schemas.push(transformedFinancialBeingsSchema)
|
||||
}
|
||||
if (transformedOperationsSchema) {
|
||||
schemas.push(transformedOperationsSchema)
|
||||
}
|
||||
if (transformedNotificationsSchema) {
|
||||
schemas.push(transformedNotificationsSchema)
|
||||
}
|
||||
|
||||
const schema = mergeSchemas({
|
||||
schemas,
|
||||
resolvers
|
||||
})
|
||||
|
||||
const defaultQuery = `{
|
||||
teams_Teams{
|
||||
edges{
|
||||
node{
|
||||
name
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
`
|
||||
const app = express()
|
||||
|
||||
app.use('/graphql',
|
||||
@@ -157,30 +166,22 @@ async function run () {
|
||||
schema,
|
||||
context,
|
||||
formatError: error => {
|
||||
logger.error(`An error ocurred inside a module: ${JSON.stringify(error)}`)
|
||||
return error
|
||||
logger.error('An error ocurred inside a module: %s', error.message)
|
||||
return error.message
|
||||
},
|
||||
formatResponse: response => {
|
||||
logger.debug('Response from Apolo Server: ' + response)
|
||||
logger.debug('Response from Apollo Server: ' + response)
|
||||
return response
|
||||
},
|
||||
playground: {
|
||||
settings: {
|
||||
'editor.theme': 'dark',
|
||||
'editor.cursorShape': 'line'
|
||||
},
|
||||
tabs: [
|
||||
{
|
||||
endpoint: process.env.GRAPHQL_API_URL,
|
||||
query: defaultQuery
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
server.applyMiddleware({ app })
|
||||
|
||||
app.use(cors())
|
||||
server.applyMiddleware({ app, cors: { origin: true, credentials: true, methods:'GET,PUT,POST,DELETE,OPTIONS'}})
|
||||
|
||||
app.listen(4100)
|
||||
logger.info(`Server running. Open ${process.env.GRAPHQL_API_URL} to run queries.`)
|
||||
|
||||
@@ -26,6 +26,7 @@ const logger = createLogger({
|
||||
level: 'info',
|
||||
format: format.combine(
|
||||
format.colorize(),
|
||||
format.splat(),
|
||||
format.timestamp({ format: 'YY/MM/DD HH:mm' }),
|
||||
format.printf(
|
||||
info => `${info.timestamp} - ${info.level}: ${JSON.parse(JSON.stringify(inspect(info.message)))}`
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import merge from 'lodash.merge'
|
||||
import { SendgridMutations } from './mutation'
|
||||
// import { SendgridMutations } from './mutation'
|
||||
|
||||
const resolvers = {
|
||||
Mutation: {
|
||||
...SendgridMutations
|
||||
// ...SendgridMutations
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
import SendgridMutations from './sendgrid'
|
||||
|
||||
export { SendgridMutations }
|
||||
@@ -1,251 +0,0 @@
|
||||
import axios from 'axios'
|
||||
import jwt from 'jsonwebtoken'
|
||||
import { ApolloError } from 'apollo-server-express'
|
||||
|
||||
import logger from '../../logger'
|
||||
|
||||
const API_KEY = process.env.SG_APIKEY
|
||||
const API_KEY_CONTACTS = process.env.SG_APIKEY_CONTACTS
|
||||
|
||||
const dev = process.env.NODE_ENV === 'development' ? true : false
|
||||
let origin = 'https://app.advancedalgos.net'
|
||||
if (dev){
|
||||
origin = 'http://localhost:3100'
|
||||
}
|
||||
|
||||
export default {
|
||||
async master_NewsletterSignup(parent, { email }, ctx, info) {
|
||||
const token = jwt.sign({ email: email }, API_KEY, { expiresIn: '1d' })
|
||||
let origin = 'https://advancedalgos.net'
|
||||
const params = '/email-verification?token='
|
||||
if (dev){
|
||||
origin = 'http://localhost:4100'
|
||||
}
|
||||
|
||||
const headers = {
|
||||
'Content-Type': 'application/json',
|
||||
'Access-Control-Allow-Origin' : origin,
|
||||
'Access-Control-Allow-Credentials': 'true'
|
||||
}
|
||||
|
||||
const data = JSON.stringify({
|
||||
"personalizations": [
|
||||
{
|
||||
"to": [
|
||||
{
|
||||
"email": email
|
||||
}
|
||||
],
|
||||
dynamic_template_data: {
|
||||
"aaverifylink": origin + params + token,
|
||||
"subject": 'VERIFY YOUR INTEREST in Advanced Algos'
|
||||
},
|
||||
"subject": 'VERIFY YOUR INTEREST in Advanced Algos'
|
||||
}
|
||||
],
|
||||
"from": {
|
||||
"email": "feedback@advancedalgos.net",
|
||||
"name": "Advanced Algos Team"
|
||||
},
|
||||
"reply_to": {
|
||||
"email": "feedback@advancedalgos.net",
|
||||
"name": "Advanced Algos Team"
|
||||
},
|
||||
"template_id": process.env.SG_SIGNUP_EMAILID
|
||||
})
|
||||
|
||||
const sendVerify = axios({
|
||||
method: 'post',
|
||||
url: 'https://api.sendgrid.com/v3/mail/send',
|
||||
data: data,
|
||||
headers:{
|
||||
'content-type': 'application/json',
|
||||
'authorization': 'Bearer ' + API_KEY
|
||||
}
|
||||
})
|
||||
.then(function (response) {
|
||||
logger.info('Sendgrid sendVerify response:')
|
||||
logger.info(response)
|
||||
if (response.status >= 200 && response.status < 300) {
|
||||
return 'SUCCESS'
|
||||
} else {
|
||||
throw response.data.errors[0].message
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
logger.error('Sendgrid sendVerify Error:')
|
||||
logger.error(error)
|
||||
throw new ApolloError(`Sendgrid sendVerify Error: ${error.response.data.errors[0].message}`, 404)
|
||||
})
|
||||
return sendVerify
|
||||
},
|
||||
async master_NewsletterSignupVerify(parent, { token }, ctx, info){
|
||||
let origin = 'https://app.advancedalgos.net'
|
||||
if (dev){
|
||||
origin = 'http://localhost:4100'
|
||||
}
|
||||
const headers = {
|
||||
'Content-Type': 'application/json',
|
||||
'Access-Control-Allow-Origin' : origin,
|
||||
'Access-Control-Allow-Credentials': 'true'
|
||||
}
|
||||
|
||||
let verifiedToken
|
||||
try {
|
||||
verifiedToken = jwt.verify(token, API_KEY, {maxAge: '1d'})
|
||||
} catch(err) {
|
||||
logger.error('Sendgrid verifiedToken Error:')
|
||||
logger.error(err)
|
||||
if (err.name === 'TokenExpiredError'){
|
||||
throw new ApolloError('Error: Token Expired. Please resubmit email address.', 400)
|
||||
} else {
|
||||
throw new ApolloError(`Error: ${err.message}`, 400)
|
||||
}
|
||||
}
|
||||
logger.info('Sendgrid verifySignup verifiedToken: ')
|
||||
logger.info(verifiedToken)
|
||||
|
||||
const email = verifiedToken.email
|
||||
|
||||
const subscribe = axios({
|
||||
method: 'post',
|
||||
url: 'https://api.sendgrid.com/v3/contactdb/recipients',
|
||||
data: [{"email": email}],
|
||||
headers:{
|
||||
'content-type': 'application/json',
|
||||
'authorization': 'Bearer ' + API_KEY_CONTACTS
|
||||
}
|
||||
})
|
||||
.then(response => {
|
||||
logger.info('Sendgrid verifySignup subscribe: ')
|
||||
logger.info(response)
|
||||
const recipients = response.data.persisted_recipients
|
||||
|
||||
if (recipients.length > 0 ){
|
||||
const addToList = axios({
|
||||
method: 'post',
|
||||
url: 'https://api.sendgrid.com/v3/contactdb/lists/4068018/recipients/' + recipients[0],
|
||||
headers:{
|
||||
'content-type': 'application/json',
|
||||
'authorization': 'Bearer ' + API_KEY_CONTACTS
|
||||
}
|
||||
})
|
||||
.then(response => {
|
||||
logger.info('Sendgrid verifySignup addToList: ')
|
||||
logger.info(response)
|
||||
if (response.status >= 200 && response.status < 300) {
|
||||
return 'SUCCESS'
|
||||
} else {
|
||||
throw response.data.errors[0].message
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
logger.error('Sendgrid verifySignUp subscribe Error:')
|
||||
logger.error(error)
|
||||
throw `Email SignUp Error: ${error}`
|
||||
})
|
||||
return addToList
|
||||
} else{
|
||||
return response.data.errors[0].message
|
||||
}
|
||||
})
|
||||
.then(response => {
|
||||
return response
|
||||
})
|
||||
.catch(error => {
|
||||
logger.error('Sendgrid verifySubscribe Error:')
|
||||
logger.error(error)
|
||||
throw new ApolloError(`Sendgrid verifySubscribe Error: ${error.response.data.errors[0].message}`, 404)
|
||||
})
|
||||
return subscribe
|
||||
},
|
||||
async master_Contact(parent, { email, subject, message, recaptcha }, ctx, info) {
|
||||
let origin = 'https://advancedalgos.net'
|
||||
if (dev){
|
||||
origin = 'http://localhost:4000'
|
||||
}
|
||||
const headers = {
|
||||
'Content-Type': 'application/json',
|
||||
'Access-Control-Allow-Origin' : origin,
|
||||
'Access-Control-Allow-Credentials': 'true'
|
||||
}
|
||||
|
||||
const toEmail = 'feedback@advancedalgos.net'
|
||||
|
||||
const data = JSON.stringify({
|
||||
"personalizations": [
|
||||
{
|
||||
"to": [
|
||||
{
|
||||
"email": email
|
||||
}
|
||||
],
|
||||
dynamic_template_data: {
|
||||
"aacontactname": name,
|
||||
"aacontactemail": email,
|
||||
"aacontactbody": message
|
||||
},
|
||||
"subject": `AA Corporate Site Contact - Message from ${name}`
|
||||
}
|
||||
],
|
||||
"from": {
|
||||
"email": email,
|
||||
"name": name
|
||||
},
|
||||
"reply_to": {
|
||||
"email": email,
|
||||
"name": name
|
||||
},
|
||||
"template_id": process.env.SG_CONTACT_EMAILID
|
||||
})
|
||||
|
||||
const checkCaptcha = axios({
|
||||
method: 'post',
|
||||
url: 'https://www.google.com/recaptcha/api/siteverify',
|
||||
params: {
|
||||
secret: process.env.RECAPTCHA,
|
||||
response: recaptcha
|
||||
}
|
||||
})
|
||||
.then(function (response) {
|
||||
logger.info(response.data)
|
||||
if (response.status >= 200 && response.status < 300 && response.data.success) {
|
||||
context.log('presend SendGrid')
|
||||
return axios({
|
||||
method: 'post',
|
||||
url: 'https://api.sendgrid.com/v3/mail/send',
|
||||
data: data,
|
||||
headers:{
|
||||
'content-type': 'application/json',
|
||||
'authorization': 'Bearer ' + API_KEY
|
||||
}
|
||||
})
|
||||
.then(function (response) {
|
||||
logger.info('Sendgrid Contact response: ')
|
||||
logger.info(response)
|
||||
if (response.status >= 200 && response.status < 300) {
|
||||
return `Contact email sent`
|
||||
} else {
|
||||
throw response.data.errors[0].message
|
||||
}
|
||||
})
|
||||
.catch(function (error) {
|
||||
logger.error(`sendgrid Error: ${JSON.stringify(error)}`)
|
||||
throw `Contact email send error: ${error.response.data.errors[0].message}`
|
||||
})
|
||||
}else{
|
||||
throw response.data
|
||||
}
|
||||
})
|
||||
.then(function(response){
|
||||
return response
|
||||
})
|
||||
.catch(function (error) {
|
||||
logger.error('Sendgrid Contact RECAPTCHA Error:')
|
||||
logger.error(error)
|
||||
throw new ApolloError(`Sendgrid Contact RECAPTCHA Error: ${error.response.data.errors[0].message}`, 404)
|
||||
})
|
||||
|
||||
return checkCaptcha
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,6 @@
|
||||
export const typeDef = `
|
||||
type Mutation {
|
||||
master_NewsletterSignup(email: String!): String
|
||||
master_NewsletterSignupVerify(token: String!): String
|
||||
master_Contact(email: String!, subject: String!, Message: String!, recaptcha: String!): String
|
||||
master_SampleMutation(variable: String!): String
|
||||
}
|
||||
|
||||
schema {
|
||||
|
||||
Reference in new issue
Block a user