Merge pull request #159 from Superalgos/develop

Merge Develop into Master for release
This commit is contained in:
z@tOr authored and GitHub committed 2019-02-10 22:39:19 -03:00
commit fa0255112d
67 files changed
+8803 -7845

No files matched your search

+34
View File
@@ -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
View File
@@ -28,7 +28,7 @@ Cool? Then, by submitting your first Pull Request, and as a condition of your co
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 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.
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-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.
+3 -3
View File
@@ -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
@@ -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
View File
@@ -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
+19
View File
@@ -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]
+1 -1
View File
@@ -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.
+6 -6
View File
@@ -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
View File
@@ -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.
+4 -4
View File
@@ -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
};
}
}
+19 -12
View File
@@ -2,43 +2,50 @@
<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&amp;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="https://charts-dev.superalgos.org/Scripts/require.js"></script>
<script type="text/javascript" src="https://charts-dev.superalgos.org/Scripts/AppPreLoader.js"></script>
<script type="text/javascript">
function loadCanvas(){
if (window.canvasApp.visible === undefined) {
window.canvasApp = {
sessionToken: '',
executingAt: 'Master App',
visible: false,
topMargin: 130,
urlPrefix: 'https://develop.advancedalgos.net/' , /* 'http://localhost:1337/' */ /* 'https://develop.advancedalgos.net/' */
urlPrefix: '<%= process.env.CANVAS_URL %>',
graphQL: {
masterAppApiUrl: 'https://app-api.advancedalgos.net/graphql'
},
context: {}
masterAppApiUrl: '<%= process.env.PLATFORM_API_URL %>',
},
context: {}
};
loadAdvancedAlgosPlatform();
let delay = 0
if (window.innerHeight === 0) {delay = 3000} // Inside IFRAMES the onload event is reaised before the window has its real size.
setTimeout(loadAdvancedAlgosPlatform, delay)
}
}
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="loadCanvas()" onresize="onResize()">
<div id="masterApp"></div>
<div id="canvasApp"></div>
</body>
+6714 -6153
View File
File diff suppressed because it is too large. Load diff
+19 -10
View File
@@ -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.4",
"@advancedalgos/key-vault-client": "^0.0.21",
"@advancedalgos/teams-client": "^0.0.27",
"@advancedalgos/users-client": "^0.0.22",
"@advancedalgos/web-components": "0.0.13",
"@advancedalgos/events-client": "0.0.4",
"@advancedalgos/financial-beings-client": "0.0.5",
"@superalgos/operations-client": "0.0.13",
"@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.26",
"@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",
+20 -5
View File
@@ -14,17 +14,19 @@ import Auth from './auth'
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}>
@@ -43,7 +45,12 @@ export const MasterApp = (props) => (
path='/email-verification'
render={props => {
console.log(props.location)
return <EmailSignupConfirm {...props} tokenParam={props.location.search} />
return (
<EmailSignupConfirm
{...props}
tokenParam={props.location.search}
/>
)
}}
/>
<Route
@@ -62,10 +69,18 @@ export const MasterApp = (props) => (
path='/events'
render={props => <Events {...props} auth={auth} />}
/>
<Route
path='/financial-beings'
render={props => <FinancialBeings {...props} auth={auth}/>}
/>
<Route
path='/key-vault'
render={props => <KeyVault {...props} auth={auth} />}
/>
<Route
path='/operations'
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

@@ -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

@@ -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">
@@ -1,6 +1,6 @@
{
"name": "Advanced Algos",
"short_name": "Advanced Algos",
"name": "Superalgos",
"short_name": "Superalgos",
"icons": [
{
"src": "/android-chrome-192x192.png",
+11 -7
View File
@@ -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: 'Platform Dev'
},
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)
+1 -6
View File
@@ -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
View File
@@ -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')
)
+10 -3
View File
@@ -7,7 +7,7 @@ $height-nav-bar: 131px;
$height-not-top: 87px;
$image-height-big: 75px;
$image-height-big: 60px;
$image-height-small: 45px;
$text-height: 25px;
@@ -44,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;
@@ -235,6 +236,9 @@ header.menu{
&:hover{
color: $advanced-algos-red;
}
svg{
padding-top: 10px;
}
}
ul.subMenu{
display: none;
@@ -293,6 +297,9 @@ header.menu{
&.selected{
color: $advanced-algos-red;
}
svg{
padding-top: 10px;
}
}
ul.subMenu{
display: none;
@@ -331,7 +338,7 @@ header.menu{
.bannerTopBar{
background-position: center center;
background-size: cover;
background-image: url(https://advancedalgos.net/img/photos/teams.jpg);
background-image: url(https://superalgos.org/img/photos/teams.jpg);
width: 100%;
height: 220px;
&.big{
+1 -1
View File
@@ -6,7 +6,7 @@ const Callback = () => <BannerTopBar
size='big'
title=''
text='Authenticating...'
backgroundUrl='https://aacorporatesitedevelop.azurewebsites.net/img/photos/superalgos-platform.jpg'
backgroundUrl='https://superalgos.org/img/photos/superalgos-platform.jpg'
/>
export default Callback
+13 -6
View File
@@ -44,23 +44,30 @@ class Charts extends Component {
size='medium'
title=''
text='Charts loading...'
backgroundUrl='https://aacorporatesitedevelop.azurewebsites.net/img/photos/superalgos-platform.jpg'
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))
@@ -2,17 +2,18 @@ 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})` } : {}}>
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>
<Typography className='title' variant='h1' align='center'>
{title}
</Typography>
<Typography className='text' variant='h2' align='center'>
{text}
</Typography>
{children}
</div>
</div>
@@ -47,7 +47,7 @@ export class SignupForm extends Component {
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 Advanced Algos Project.</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'
@@ -122,7 +122,7 @@ export class SignupForm extends Component {
console.log('NewsletterSignup handleSubmit: ', this.state.email)
const signupResponse = await NewsletterSignup({ variables: { email: this.state.email } })
console.log('NewsletterSignup: ', signupResponse)
if (signupResponse.data.master_NewsletterSignup === 'SUCCESS') this.setState({ email: '', success: true })
if (signupResponse.data.notifications_Master_NewsletterSignup === 'SUCCESS') this.setState({ email: '', success: true })
}
}
@@ -8,7 +8,7 @@ export class SignupVerifyResponse extends React.Component {
componentDidMount () {
const { mutate } = this.props
mutate()
};
}
render () {
const { loading, error, data } = this.props
@@ -17,7 +17,10 @@ export class SignupVerifyResponse extends React.Component {
let displayForm = false
console.log('SignupVerifyResponse:', loading, error, data)
if (error) {
if (error.message === 'GraphQL error: Error: Token Expired. Please resubmit email address.') {
if (
error.message ===
'GraphQL error: Error: Token Expired. Please resubmit email address.'
) {
BannerText = [
<strong key='EmailSignupConfirm-error-b1'>
Newsletter Signup Error: Verification Token Expired
@@ -29,30 +32,38 @@ export class SignupVerifyResponse extends React.Component {
]
displayForm = true
} else {
BannerText = ['Newsletter Signup Error: ', <br key='EmailSignupConfirm-error-br' />, error.message]
BannerText = [
'Newsletter Signup Error: ',
<br key='EmailSignupConfirm-error-br' />,
error.message
]
}
return (
<BannerTopBar
size='big'
title={BannerTitle}
text={BannerText}
backgroundUrl='https://aacorporatesitedevelop.azurewebsites.net/img/photos/superalgos-platform.jpg'
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 Advanced Algos project!']
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.master_NewsletterSignupVerify === 'SUCCESS') {
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 Advanced Algos project.'
backgroundUrl='https://aacorporatesitedevelop.azurewebsites.net/img/photos/superalgos-platform.jpg'
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>
@@ -65,7 +76,7 @@ export class SignupVerifyResponse extends React.Component {
size='big'
title='Processing...'
text=''
backgroundUrl='https://aacorporatesitedevelop.azurewebsites.net/img/photos/superalgos-platform.jpg'
backgroundUrl='https://superalgos.org/img/photos/superalgos-platform.jpg'
/>
)
}
@@ -3,7 +3,7 @@ import gql from 'graphql-tag'
const NEWSLETTER_SIGNUP = gql`
mutation NewsletterSignup($email: String!) {
master_NewsletterSignup(email: $email)
notifications_Master_NewsletterSignup(email: $email)
}
`
@@ -2,8 +2,8 @@
import gql from 'graphql-tag'
const NEWSLETTER_SIGNUP_VERIFY = gql`
mutation NewsletterSignupVerify($token: String!) {
master_NewsletterSignupVerify(token: $token)
mutation NewsletterSignupVerify($token: String!){
notifications_Master_NewsletterSignupVerify(token: $token)
}
`
+3 -7
View File
@@ -27,16 +27,13 @@ export const EmailSignupConfirm = ({ tokenParam }) => {
size='big'
title=''
text={BannerText}
backgroundUrl='https://aacorporatesitedevelop.azurewebsites.net/img/photos/superalgos-platform.jpg'
backgroundUrl='https://superalgos.org/img/photos/superalgos-platform.jpg'
/>
)
}
console.log(token)
return (
<Mutation
mutation={NEWSLETTER_SIGNUP_VERIFY}
variables={{ token: token }}
>
<Mutation mutation={NEWSLETTER_SIGNUP_VERIFY} variables={{ token: token }}>
{(NewsletterSignupVerify, { loading, error, data }) => {
return (
<SignupVerifyResponse
@@ -46,8 +43,7 @@ export const EmailSignupConfirm = ({ tokenParam }) => {
data={data}
/>
)
}
}
}}
</Mutation>
)
}
+8 -8
View File
@@ -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 container'>
<Typography variant='h1' align='center' className='title'>Welcome to the Advanced Algos Platform!</Typography>
<Typography variant='h2' align='center' className='subtitle'>CO-CREATE >> COMPETE >> EVOLVE</Typography>
<Typography variant='h1' align='center' className='title'>Welcome to the Superalgos Platform!</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>
+12 -12
View File
@@ -15,7 +15,7 @@ import styles from './styles'
import SignupForm from '../../email-verification/components/SignupForm'
import aalogo from '../../../assets/advanced-algos/aa-logo-horiz-dark.svg'
import aalogo from '../../../assets/superalgos/Superalgos-logo-horz-dark.svg'
class Footer extends Component {
render () {
@@ -34,16 +34,16 @@ class Footer extends Component {
className={classes.footerContainer}
>
<Grid item xs={12} sm={4} md={4}>
<NavLink to='/'>
<a target='_blank' href='https://superalgos.org/' className={classes.linkStrong}>
<img alt='' src={aalogo} width={'100%'} height={'auto'} className={classes.footerLogo} />
</NavLink>
</a>
<Grid container className={classes.descriptionLeft} direction='column'>
<Typography className={classNames(classes.textLight, classes.descriptionText)} ><strong>Advanced Algos Ltd.</strong></Typography>
<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&nbsp;STJ3049, Malta</Typography>
<Typography className={classNames(classes.textLight, classes.descriptionText)}>
<Link to='legal-privacy-statement.shtml' className={classNames(classes.textLight, classes.descriptionText)}>Privacy Statement</Link> | <a href='legal-terms-of-service.shtml' className={classes.linkLight}>Terms of Service</a>
<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>&copy; Advanced Algos, Ltd. 2018 | All Rights Reserved.</Typography>
<Typography variant='body2' className={classNames(classes.textLight, classes.copyright)} gutterBottom>&copy; Superalgos, Ltd. 2018 | All Rights Reserved.</Typography>
</Grid>
</Grid>
<Grid item xs={12} sm={1} md={1} />
@@ -51,24 +51,24 @@ class Footer extends Component {
<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>
+1 -1
View File
@@ -42,7 +42,7 @@ 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: {
+6 -4
View File
@@ -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>
)
+40 -11
View File
@@ -7,7 +7,7 @@ import {
BugReport,
People,
Group,
Adb,
// Adb,
VpnKey,
Home,
AddCircleOutline
@@ -18,10 +18,10 @@ const usersMenus = {
to: '/users',
icon: Home,
submenus: [
{ title: 'Your Profile', to: '/users/user', icon: People, authenticated: true },
{ 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, authenticated: true },
{ title: 'Report a Bug', to: 'https://github.com/Superalgos/UsersModule/issues/new', icon: BugReport, externalLink: true }
]
}
@@ -30,11 +30,10 @@ const teamsMenus = {
to: '/teams',
icon: Home,
submenus: [
{ title: 'Explore teams', to: '/teams/explore', icon: Search },
{ 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: 'Financial beings', to: '/teams/financial-beings', icon: Adb, authenticated: true },
{ title: 'Report', to: 'https://github.com/AdvancedAlgos/TeamsModule/issues/new', icon: BugReport, externalLink: true }
{ title: 'Report a Bug', to: 'https://github.com/Superalgos/TeamsModule/issues/new', icon: BugReport, externalLink: true }
]
}
@@ -43,11 +42,11 @@ const eventsMenus = {
to: '/events',
icon: Home,
submenus: [
{ title: 'All events', to: '/events', icon: Search },
{ 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', to: 'https://github.com/AdvancedAlgos/UsersModule/issues/new', icon: BugReport, externalLink: true }
{ title: 'Report a Bug', to: 'https://github.com/Superalgos/UsersModule/issues/new', icon: BugReport, externalLink: true }
]
}
@@ -57,12 +56,42 @@ const keyvaultMenus = {
icon: Home,
authenticated: true,
submenus: [
{ title: 'Manage keys', to: '/key-vault/browse', icon: VpnKey },
{ title: 'Your keys', to: '/key-vault/browse', icon: VpnKey },
{ title: 'Add key', to: '/key-vault/addKey', icon: AddCircleOutline },
{ title: 'Report', to: 'https://github.com/AdvancedAlgos/KeyVaultModule/issues/new', icon: BugReport, externalLink: true }
{ 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: 'Operations',
to: '/operations',
icon: Home,
authenticated: true,
submenus: [
{ title: 'Active clones', to: '/operations/browse', icon: ImportContacts },
{ title: 'History', to: '/operations/history', icon: LibraryAdd },
{ title: 'Clone a bot', to: '/operations/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
+5 -5
View File
@@ -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) {
@@ -98,7 +98,7 @@ class Header extends Component {
<ul className='subMenu'>
{ bigScreen
? ''
: <li key={index + 'home'}><a href={to}> <Icon /> Homepage </a></li>
: <li key={index + 'home'}><Link to={to}> <Icon /> Module Home Page </Link></li>
}
{
submenus.map(({ icon: SubIcon, to: subTo, title: subTitle, externalLink, authenticated: subAuthenticated }, subindex) => {
@@ -107,7 +107,7 @@ class Header extends Component {
}
if (externalLink) {
return (
<li key={subindex}><a href={subTo}> <SubIcon /> {subTitle} </a></li>
<li key={subindex}><a href={subTo} target='_blank'> <SubIcon /> {subTitle} </a></li>
)
}
return (
@@ -123,7 +123,7 @@ class Header extends Component {
<React.Fragment>
<header className={onTop ? 'menu' : 'menu notOnTop'}>
<div className='container'>
<Link to='/'> <img className='logo' src={AALogo} alt='Advanced Algos' /> </Link>
<Link to='/'> <img className='logo' src={AALogo} alt='Superalgos' /> </Link>
<div className={mobileOpen ? 'mobileHandle openedMobile' : 'mobileHandle'} onClick={() => this.toggleMobileOpen()}>
Menu
</div>
@@ -134,7 +134,7 @@ class Header extends Component {
</li>
{menus}
<li className='primaryLink'>
<a href='https://www.advancedalgos.net/documentation-quick-start.shtml'> Docs </a>
<a href='https://www.superalgos.org/documentation-quick-start.shtml'> Docs </a>
</li>
{this.state.user !== undefined && this.state.user !== null ? (
<LoggedIn
+1 -3
View File
@@ -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/,
+1 -1
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -20,5 +20,8 @@ dist/
# Visual Studio Code
.vscode
#Mac specific files
# Mac specific files
.DS_Store
# JetBrains
.idea
+1 -1
View File
@@ -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 -2
View File
@@ -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
View File
@@ -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
+1683 -1230
View File
File diff suppressed because it is too large. Load diff
+2 -2
View File
@@ -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",
+2 -1
View File
@@ -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, [
+51 -11
View File
@@ -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,6 +94,15 @@ 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,
@@ -151,7 +170,7 @@ async function run () {
return error
},
formatResponse: response => {
logger.debug('Response from Apolo Server: ' + response)
logger.debug('Response from Apollo Server: ' + response)
return response
},
playground: {
@@ -162,9 +181,30 @@ async function run () {
}
})
server.applyMiddleware({ app })
const whitelist = [
process.env.PROJECT_SITE_URL,
process.env.PLATFORM_URL,
process.env.GRAPHQL_API_URL,
process.env.TEAMS_API_URL,
process.env.USERS_API_URL,
process.env.EVENTS_API_URL,
process.env.KEYVAULT_API_URL,
process.env.FINANCIAL_BEINGS_API_URL,
process.env.NOTIFICATIONS_API_URL
]
app.use(cors())
const corsOptionsDelegate = (req, callback) => {
let corsOptions
if (whitelist.indexOf(req.header('Origin')) !== -1) {
corsOptions = { origin: true, credentials: true }
} else {
corsOptions = { origin: false, credentials: true }
}
callback(null, corsOptions)
}
// server.applyMiddleware({ app, cors: corsOptionsDelegate })
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.`)
+1
View File
@@ -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)))}`
+2 -2
View File
@@ -1,9 +1,9 @@
import merge from 'lodash.merge'
import { SendgridMutations } from './mutation'
// import { SendgridMutations } from './mutation'
const resolvers = {
Mutation: {
...SendgridMutations
// ...SendgridMutations
}
}
-3
View File
@@ -1,3 +0,0 @@
import SendgridMutations from './sendgrid'
export { SendgridMutations }
-245
View File
@@ -1,245 +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) {
logger.info('master_NewsletterSignup params email:')
logger.info(email)
const token = jwt.sign({ email: email }, API_KEY, { expiresIn: '1d' })
const params = '/email-verification?token='
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:3100'
}
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) {
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 -3
View File
@@ -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 {