diff --git a/CONFIGURATION.md b/CONFIGURATION.md
index 62d173996..4d7e99009 100644
--- a/CONFIGURATION.md
+++ b/CONFIGURATION.md
@@ -1,103 +1,11 @@
# Configuration
This document outlines configuration options which aren't exposed via N1's
-preferences interface, but may be useful.
+preferences interface but may be useful.
## Running Against Open Source Sync Engine
-N1 needs to fetch mail from a running instance of the [Nylas Sync
-Engine](https://github.com/nylas/sync-engine). The Sync Engine is what
-abstracts away IMAP, POP, and SMTP to serve your email on any provider
-through a modern, RESTful API.
-
-By default the N1 source points to our hosted version of the sync-engine;
-however, the Sync Engine is open source and you can run it yourself.
-
-1. Install the Nylas Sync Engine in a Vagrant virtual machine by following the
- [installation and setup](https://github.com/nylas/sync-engine#installation-and-setup)
- instructions.
-
-2. Once you've installed the sync engine, add accounts by running the inbox-auth
- script. For Gmail accounts, the syntax is simple: `bin/inbox-auth you@gmail.com`
-
-3. Start the sync engine by running `bin/inbox-start` and the API via `bin/inbox-api`.
-
-4. After you've linked accounts to the Sync Engine, open or create a file at
- `~/.nylas/config.json`. This is the config file that N1 reads at launch.
-
- Replace `env: "production"` with `env: "local"` at the top level of the config.
- This tells N1 to look at `localhost:5555` for the sync engine. If you've deployed
- the sync engine elsewhere, add the following block beneath `env: "local"`:
-
- ```javascript
- "syncEngine": {
- "APIRoot": "http://mysite.com:5555"
- },
- ```
-
- NOTE: If you are using a custom network layout and your sync engine is not on
- `localhost:5555`, use `env: custom` instead along with your alternate IP for the
- API Root, for example `192.168.1.00:5555`
-
- ```javascript
- {
- "env": "custom",
- "syncEngine": {
- "APIRoot": "http://192.168.1.100:5555"
- },
- ```
-
- Copy the JSON array of accounts returned from the Sync Engine's `/accounts`
- endpoint (ex. `http://localhost:5555/accounts`) into the config file at the
- path `*.nylas.accounts`.
-
- N1 will look for access tokens for these accounts under `*.nylas.accountTokens`,
- but the open source version of the sync engine does not provide access tokens.
- When you make requests to the open source API, you provide an account
- ID in the HTTP Basic Auth username field instead of an account token.
-
- For each account you've created, add an entry to `*.nylas.accountTokens`
- with the account ID as both the key and value.
-
- The final `config.json` file should look something like this:
- ```javascript
- {
- "*": {
- "env": "local",
- "nylas": {
- "accounts": [
- {
- "server_id": "{ACCOUNT_ID_1}",
- "object": "account",
- "account_id": "{ACCOUNT_ID_1}",
- "name": "{YOUR NAME}",
- "provider": "{PROVIDER_NAME}",
- "email_address": "{YOUR_EMAIL_ADDRESS}",
- "organization_unit": "{folder or label}",
- "id": "{ACCOUNT_ID_1}"
- },
- {
- "server_id": "{ACCOUNT_ID_2}",
- "object": "account",
- "account_id": "{ACCOUNT_ID_2}",
- "name": "{YOUR_NAME}",
- "provider": "{PROVIDER_NAME}",
- "email_address": "{YOUR_EMAIL_ADDRESS}",
- "organization_unit": "{folder or label}",
- "id": "{ACCOUNT_ID_2}"
- }
- ],
- "accountTokens": {
- "{ACCOUNT_ID_1}": "{ACCOUNT_ID_1}",
- "{ACCOUNT_ID_2}": "{ACCOUNT_ID_2}"
- }
- }
- }
- }
- ```
-Note: `{ACCOUNT_ID_1}` refers to the database ID of the `Account` object
-you create when setting up the Sync Engine. The JSON above should match
-fairly closely with the Sync Engine `Account` object.
+If you want to point N1 to your self-hosted sync engine, select "Hosting your own sync engine?" under the "Get Started" button on the welcome screen. There, follow the instructions for creating your own instance of the sync engine and enter the URL and port number where you have it running.
## Other Config Options
diff --git a/README.md b/README.md
index eec0e3f9d..72b38a055 100644
--- a/README.md
+++ b/README.md
@@ -68,8 +68,8 @@ Great starting points for creating your own plugins!
- [Website Launcher](https://github.com/adriangrantdotorg/nylas-n1-background-webpage)—Opens a URL in separate window
- In Development: [Cypher](https://github.com/mbilker/cypher) (PGP Encryption)
-# Running Locally
-By default, the N1 source points to our hosted version of the Nylas Sync Engine—however, the Sync Engine is open source, and you can [run it yourself](https://github.com/nylas/N1/blob/master/CONFIGURATION.md).
+# Configuration
+You can configure N1 in a few ways—for instance, pointing it to your self-hosted instance of the sync engine or changing the interface zoom level. [Learn more about how.](https://github.com/nylas/N1/blob/master/CONFIGURATION.md).
# Feature Requests / Plugin Ideas
diff --git a/internal_packages/onboarding/lib/onboarding-actions.es6 b/internal_packages/onboarding/lib/onboarding-actions.es6
index c2602e76f..f47195cb5 100644
--- a/internal_packages/onboarding/lib/onboarding-actions.es6
+++ b/internal_packages/onboarding/lib/onboarding-actions.es6
@@ -7,6 +7,7 @@ const OnboardingActions = Reflux.createActions([
"moveToPage",
"authenticationJSONReceived",
"accountJSONReceived",
+ "accountsAddedLocally",
]);
for (const key of Object.keys(OnboardingActions)) {
diff --git a/internal_packages/onboarding/lib/onboarding-root.jsx b/internal_packages/onboarding/lib/onboarding-root.jsx
index d964a46b5..9a786b984 100644
--- a/internal_packages/onboarding/lib/onboarding-root.jsx
+++ b/internal_packages/onboarding/lib/onboarding-root.jsx
@@ -5,6 +5,8 @@ import PageTopBar from './page-top-bar';
import WelcomePage from './page-welcome';
import TutorialPage from './page-tutorial';
+import SelfHostingSetupPage from './page-self-hosting-setup';
+import SelfHostingConfigPage from './page-self-hosting-config';
import AuthenticatePage from './page-authenticate';
import AccountChoosePage from './page-account-choose';
import AccountSettingsPage from './page-account-settings';
@@ -16,6 +18,8 @@ import InitialPreferencesPage from './page-initial-preferences';
const PageComponents = {
"welcome": WelcomePage,
"tutorial": TutorialPage,
+ "self-hosting-setup": SelfHostingSetupPage,
+ "self-hosting-config": SelfHostingConfigPage,
"authenticate": AuthenticatePage,
"account-choose": AccountChoosePage,
"account-settings": AccountSettingsPage,
diff --git a/internal_packages/onboarding/lib/onboarding-store.es6 b/internal_packages/onboarding/lib/onboarding-store.es6
index ed6dc40a3..e3b5698eb 100644
--- a/internal_packages/onboarding/lib/onboarding-store.es6
+++ b/internal_packages/onboarding/lib/onboarding-store.es6
@@ -24,6 +24,7 @@ class OnboardingStore extends NylasStore {
this.listenTo(OnboardingActions.moveToPreviousPage, this._onMoveToPreviousPage)
this.listenTo(OnboardingActions.moveToPage, this._onMoveToPage)
this.listenTo(OnboardingActions.accountJSONReceived, this._onAccountJSONReceived)
+ this.listenTo(OnboardingActions.accountsAddedLocally, this._onAccountsAddedLocally)
this.listenTo(OnboardingActions.authenticationJSONReceived, this._onAuthenticationJSONReceived)
this.listenTo(OnboardingActions.setAccountInfo, this._onSetAccountInfo);
this.listenTo(OnboardingActions.setAccountType, this._onSetAccountType);
@@ -177,6 +178,29 @@ class OnboardingStore extends NylasStore {
}
}
+ _onAccountsAddedLocally = (accounts) => {
+ try {
+ const isFirstAccount = AccountStore.accounts().length === 0
+
+ for (const account of accounts) {
+ account.auth_token = account.id
+ AccountStore.addAccountFromJSON(account)
+ }
+
+ ipcRenderer.send('new-account-added')
+ NylasEnv.displayWindow()
+
+ if (isFirstAccount) {
+ this._onMoveToPage('initial-preferences')
+ } else {
+ this._onOnboardingComplete();
+ }
+ } catch (e) {
+ NylasEnv.reportError(e)
+ NylasEnv.showErrorDialog("Unable to Connect Accounts", "Sorry, something went wrong on your instance of the sync engine. Please try again.")
+ }
+ }
+
page() {
return this._pageStack[this._pageStack.length - 1];
}
diff --git a/internal_packages/onboarding/lib/page-account-choose.jsx b/internal_packages/onboarding/lib/page-account-choose.jsx
index 6c607e60a..21e033e22 100644
--- a/internal_packages/onboarding/lib/page-account-choose.jsx
+++ b/internal_packages/onboarding/lib/page-account-choose.jsx
@@ -2,6 +2,7 @@ import React from 'react';
import {RetinaImg} from 'nylas-component-kit';
import OnboardingActions from './onboarding-actions';
import AccountTypes from './account-types';
+import SelfHostingConfigPage from './page-self-hosting-config'
export default class AccountChoosePage extends React.Component {
static displayName = "AccountChoosePage";
@@ -30,6 +31,11 @@ export default class AccountChoosePage extends React.Component {
}
render() {
+ if (NylasEnv.config.get('env', 'custom') ||
+ NylasEnv.config.get('env', 'local')) {
+ return (
bin/inbox-auth you@gmail.com
+ inbox-auth
script. For example: bin/inbox-auth you@gmail.com
.
+ bin/inbox-start
and the API via bin/inbox-api
.
+ Welcome back!
-This month we're launching Nylas Pro. As an existing user, you'll receive a coupon for your first year free. Create a Nylas ID to continue using N1, and look out for a coupon email!
+Since you've been gone, we've launched Nylas Pro, which now requires a paid subscription. Create a Nylas ID to start your trial and continue using N1!