From d294945ef0f2d018ed25a962a5a5a8f817bf7026 Mon Sep 17 00:00:00 2001
From: Kevin <kevin@dendron.so>
Date: Tue, 26 Jul 2022 12:16:16 -0700
Subject: [PATCH 1/8] support enterprise build

---
 bootstrap/scripts/buildPatch.sh                    | 3 +++
 packages/dendron-cli/src/commands/devCLICommand.ts | 4 ++++
 packages/dendron-cli/src/utils/build.ts            | 5 +++++
 3 files changed, 12 insertions(+)

diff --git a/bootstrap/scripts/buildPatch.sh b/bootstrap/scripts/buildPatch.sh
index 4b07ac35d3..e18fa338b0 100755
--- a/bootstrap/scripts/buildPatch.sh
+++ b/bootstrap/scripts/buildPatch.sh
@@ -30,6 +30,9 @@ EXT_TARGET=dendron
 if [ $SCRIPT_EXT_TARGET = "nightly" ]; then
   EXT_TARGET=nightly
 fi
+if [ $SCRIPT_EXT_TARGET = "enterprise" ]; then
+  EXT_TARGET=enterprise
+fi
 
 if [ -z $FAST ]; then
 	LOG_LEVEL=info $DENDRON_CLI dev build --upgradeType $UPGRADE_TYPE --publishEndpoint $PUBLISH_ENDPOINT --extensionTarget $EXT_TARGET
diff --git a/packages/dendron-cli/src/commands/devCLICommand.ts b/packages/dendron-cli/src/commands/devCLICommand.ts
index d98dfb682a..2173f4fbb7 100644
--- a/packages/dendron-cli/src/commands/devCLICommand.ts
+++ b/packages/dendron-cli/src/commands/devCLICommand.ts
@@ -472,6 +472,10 @@ export class DevCLICommand extends CLICommand<CommandOpts, CommandOutput> {
       this.print("modifying plugin manifest for nightly target...");
       await BuildUtils.prepPluginPkg(ExtensionTarget.NIGHTLY);
     }
+    if (opts.extensionTarget === ExtensionTarget.ENTERPRISE) {
+      this.print("modifying plugin manifest for enterprisetarget...");
+      await BuildUtils.prepPluginPkg(ExtensionTarget.ENTERPRISE);
+    }
 
     this.print("package deps...");
     await BuildUtils.packagePluginDependencies(opts);
diff --git a/packages/dendron-cli/src/utils/build.ts b/packages/dendron-cli/src/utils/build.ts
index 7e40c57821..9583fb8688 100644
--- a/packages/dendron-cli/src/utils/build.ts
+++ b/packages/dendron-cli/src/utils/build.ts
@@ -39,6 +39,7 @@ export enum PublishEndpoint {
 export enum ExtensionTarget {
   DENDRON = "dendron",
   NIGHTLY = "nightly",
+  ENTERPRISE = "enterprise",
 }
 
 const LOCAL_NPM_ENDPOINT = "http://localhost:4873";
@@ -200,6 +201,10 @@ export class BuildUtils {
         "This is a prerelease version of Dendron that may be unstable. Please install the main dendron extension instead.";
       icon = "media/logo-bw.png";
     }
+    if (target === ExtensionTarget.ENTERPRISE) {
+      version = await this.getIncrementedVerForNightly();
+      description = "Dendron - Enterprise Version";
+    }
 
     this.updatePkgMeta({
       pkgPath,

From db78a04dc9a64023838075e1e1de29f934065030 Mon Sep 17 00:00:00 2001
From: Kevin <kevin@dendron.so>
Date: Tue, 26 Jul 2022 12:24:42 -0700
Subject: [PATCH 2/8] add enterprise build

---
 package.json | 1 +
 1 file changed, 1 insertion(+)

diff --git a/package.json b/package.json
index 49efd4e579..f04fae36f3 100644
--- a/package.json
+++ b/package.json
@@ -61,6 +61,7 @@
     "build:patch:local": "cross-env UPGRADE_TYPE=patch PUBLISH_ENDPOINT=local USE_IN_MEMORY_REGISTRY=1 ./bootstrap/scripts/buildPatch.sh",
     "build:patch:local:ci": "cross-env UPGRADE_TYPE=patch PUBLISH_ENDPOINT=local BUILD_ENV=ci USE_IN_MEMORY_REGISTRY=1 ./bootstrap/scripts/buildPatch.sh",
     "build:patch:local:ci:nightly": "cross-env UPGRADE_TYPE=patch PUBLISH_ENDPOINT=local BUILD_ENV=ci USE_IN_MEMORY_REGISTRY=1 EXT_TARGET=nightly ./bootstrap/scripts/buildPatch.sh",
+    "build:patch:local:ci:enterprise": "cross-env UPGRADE_TYPE=patch PUBLISH_ENDPOINT=local BUILD_ENV=ci USE_IN_MEMORY_REGISTRY=1 EXT_TARGET=enterprise ./bootstrap/scripts/buildPatch.sh",
     "build:patch:remote": "cross-env UPGRADE_TYPE=patch PUBLISH_ENDPOINT=remote ./bootstrap/scripts/buildPatch.sh",
     "build:patch:remote:ci": "cross-env UPGRADE_TYPE=patch PUBLISH_ENDPOINT=remote BUILD_ENV=ci ./bootstrap/scripts/buildPatch.sh",
     "build:minor:local": "cross-env UPGRADE_TYPE=minor PUBLISH_ENDPOINT=local ./bootstrap/scripts/buildPatch.sh",

From 1deec03b492ffbd999718bb1a9ba733ff961d2d2 Mon Sep 17 00:00:00 2001
From: Kevin <kevin@dendron.so>
Date: Tue, 26 Jul 2022 14:21:31 -0700
Subject: [PATCH 3/8] update name

---
 packages/dendron-cli/src/utils/build.ts | 46 ++++++++++++++++++-------
 1 file changed, 33 insertions(+), 13 deletions(-)

diff --git a/packages/dendron-cli/src/utils/build.ts b/packages/dendron-cli/src/utils/build.ts
index 9583fb8688..8098f5383b 100644
--- a/packages/dendron-cli/src/utils/build.ts
+++ b/packages/dendron-cli/src/utils/build.ts
@@ -1,5 +1,9 @@
 /* eslint-disable no-console */
-import { DendronError, error2PlainObject } from "@dendronhq/common-all";
+import {
+  assertUnreachable,
+  DendronError,
+  error2PlainObject,
+} from "@dendronhq/common-all";
 import { createLogger, findUpTo } from "@dendronhq/common-server";
 import execa from "execa";
 import fs from "fs-extra";
@@ -194,22 +198,38 @@ export class BuildUtils {
     let version;
     let description;
     let icon;
-
-    if (target === ExtensionTarget.NIGHTLY) {
-      version = await this.getIncrementedVerForNightly();
-      description =
-        "This is a prerelease version of Dendron that may be unstable. Please install the main dendron extension instead.";
-      icon = "media/logo-bw.png";
-    }
-    if (target === ExtensionTarget.ENTERPRISE) {
-      version = await this.getIncrementedVerForNightly();
-      description = "Dendron - Enterprise Version";
+    let license: string = "GPLv3";
+    let name: string;
+    switch (target) {
+      case ExtensionTarget.DENDRON: {
+        name = target.toString();
+        break;
+      }
+      case ExtensionTarget.NIGHTLY: {
+        name = target.toString();
+        version = await this.getIncrementedVerForNightly();
+        description =
+          "This is a prerelease version of Dendron that may be unstable. Please install the main dendron extension instead.";
+        icon = "media/logo-bw.png";
+        break;
+      }
+      case ExtensionTarget.ENTERPRISE: {
+        name = `dendron-enterprise`;
+        version = await this.getIncrementedVerForNightly();
+        description = "Dendron - Enterprise Version";
+        license =
+          "see license in https://github.com/dendronhq/dendron/wiki/Enterprise-EULA";
+        break;
+      }
+      default: {
+        assertUnreachable(target);
+      }
     }
 
     this.updatePkgMeta({
       pkgPath,
-      name: target.toString(),
-      displayName: target.toString(),
+      name,
+      displayName: name,
       description,
       main: "./dist/extension.js",
       repository: {

From 5b8009126f2cfe14cee3ddd48c4969a9d1b06973 Mon Sep 17 00:00:00 2001
From: Kevin <kevin@dendron.so>
Date: Tue, 26 Jul 2022 14:26:50 -0700
Subject: [PATCH 4/8] add license

---
 packages/dendron-cli/src/utils/build.ts | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/packages/dendron-cli/src/utils/build.ts b/packages/dendron-cli/src/utils/build.ts
index 8098f5383b..00c6687d47 100644
--- a/packages/dendron-cli/src/utils/build.ts
+++ b/packages/dendron-cli/src/utils/build.ts
@@ -20,6 +20,7 @@ type PkgJson = {
   repository: PkgRepository;
   devDependencies: { [key: string]: string };
   icon: string;
+  license: string;
 };
 
 type PkgRepository = {
@@ -229,6 +230,7 @@ export class BuildUtils {
     this.updatePkgMeta({
       pkgPath,
       name,
+      license,
       displayName: name,
       description,
       main: "./dist/extension.js",
@@ -455,11 +457,13 @@ export class BuildUtils {
     main,
     repository,
     version,
+    license,
     icon,
   }: {
     pkgPath: string;
     name: string;
     displayName: string;
+    license: string;
   } & Partial<PkgJson>) {
     const pkg = fs.readJSONSync(pkgPath) as PkgJson;
     pkg.name = name;
@@ -482,6 +486,7 @@ export class BuildUtils {
       pkg.icon = icon;
     }
     pkg.main = "dist/extension.js";
+    pkg.license = license;
     fs.writeJSONSync(pkgPath, pkg, { spaces: 4 });
   }
 

From 5f6e12ed43526c5145d6cc8478617a1e567baed8 Mon Sep 17 00:00:00 2001
From: Kevin <kevin@dendron.so>
Date: Tue, 26 Jul 2022 15:06:44 -0700
Subject: [PATCH 5/8] update readme

---
 packages/plugin-core/README.md | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/packages/plugin-core/README.md b/packages/plugin-core/README.md
index b4259458aa..3c5705931e 100644
--- a/packages/plugin-core/README.md
+++ b/packages/plugin-core/README.md
@@ -175,7 +175,7 @@ Dendron sends out a weekly newsletter highlighting:
 
 There are a variety of ways to connect with Dendron devs, contributors, and other members of the Dendron community:
 
-- Join the [Dendron on Discord](https://link.dendron.so/discord) 
+- Join the [Dendron on Discord](https://link.dendron.so/discord)
 - Follow [Dendron on Twitter (`@dendronhq`)](https://link.dendron.so/twitter)
 - Checkout [Dendron on GitHub](https://link.dendron.so/github)
 - Read the [Dendron Blog](https://blog.dendron.so/)
@@ -363,3 +363,5 @@ This project follows the [all-contributors](https://github.com/all-contributors/
 Dendron is distributed under the GNU AFFERO GENERAL PUBLIC LICENSE Version 3.
 
 See [LICENSE](https://github.com/dendronhq/dendron/blob/master/LICENSE.md) and [NOTICE](https://github.com/dendronhq/dendron/blob/master/NOTICE.md) for more information.
+
+Dendron Enterprise is distributed and licensed separately under the [Dendron Enterprise END-USER LICENSE AGREEMENT](https://github.com/dendronhq/dendron/wiki/Enterprise-EULA)

From fd090a886ed2e42fec0df33b776fe91f5874b000 Mon Sep 17 00:00:00 2001
From: Kevin <kevin@dendron.so>
Date: Tue, 26 Jul 2022 16:05:48 -0700
Subject: [PATCH 6/8] add license check

---
 packages/plugin-core/src/_extension.ts        | 20 +++++++++
 packages/plugin-core/src/survey.ts            | 43 ++++++++++++++++---
 .../plugin-core/src/utils/ExtensionUtils.ts   | 17 ++++++++
 3 files changed, 74 insertions(+), 6 deletions(-)

diff --git a/packages/plugin-core/src/_extension.ts b/packages/plugin-core/src/_extension.ts
index 36f528309b..37d08f7356 100644
--- a/packages/plugin-core/src/_extension.ts
+++ b/packages/plugin-core/src/_extension.ts
@@ -68,6 +68,8 @@ import { DendronExtension, getDWorkspace, getExtension } from "./workspace";
 import { TutorialInitializer } from "./workspace/tutorialInitializer";
 import { WorkspaceActivator } from "./workspace/workspaceActivator";
 import { WSUtils } from "./WSUtils";
+import { SurveyUtils } from "./survey";
+import _ from "lodash";
 
 const MARKDOWN_WORD_PATTERN = new RegExp("([\\w\\.\\#]+)");
 // === Main
@@ -353,6 +355,24 @@ export async function _activate(
           showcase.showToast();
         }, ONE_MINUTE_IN_MS);
       }
+      if (ExtensionUtils.isEnterprise(context)) {
+        let resp: boolean | undefined | string = true;
+        while (!ExtensionUtils.hasValidLicense() && resp !== undefined) {
+          // eslint-disable-next-line no-await-in-loop
+          resp = await SurveyUtils.showEnterpriseLicenseSurvey();
+        }
+        if (resp === undefined) {
+          vscode.window.showInformationMessage(
+            "Please reload to enter your license key",
+            {
+              modal: true,
+              detail:
+                "Dendron will be inactive until you enter a license key. You can reload your vscode instance to be prompted again",
+            }
+          );
+          return false;
+        }
+      }
     } else {
       // ws not active
       Logger.info({ ctx, msg: "dendron not active" });
diff --git a/packages/plugin-core/src/survey.ts b/packages/plugin-core/src/survey.ts
index a4b657ac8a..b7d1cd8800 100644
--- a/packages/plugin-core/src/survey.ts
+++ b/packages/plugin-core/src/survey.ts
@@ -1,10 +1,4 @@
 import { ConfirmStatus, getStage, SurveyEvents } from "@dendronhq/common-all";
-import { AnalyticsUtils } from "./utils/analytics";
-import * as vscode from "vscode";
-import _ from "lodash";
-import { Logger } from "./logger";
-import { resolve } from "path";
-import { VSCodeUtils } from "./vsCodeUtils";
 import {
   InactvieUserMsgStatusEnum,
   InitialSurveyStatusEnum,
@@ -12,6 +6,12 @@ import {
   MetadataService,
   PriorTools,
 } from "@dendronhq/engine-server";
+import _ from "lodash";
+import { resolve } from "path";
+import * as vscode from "vscode";
+import { Logger } from "./logger";
+import { AnalyticsUtils } from "./utils/analytics";
+import { VSCodeUtils } from "./vsCodeUtils";
 
 export class DendronQuickInputSurvey {
   opts: {
@@ -491,6 +491,37 @@ export class LapsedUserPlugDiscordSurvey extends DendronQuickPickSurvey {
 }
 
 export class SurveyUtils {
+  static async showEnterpriseLicenseSurvey() {
+    AnalyticsUtils.track("EnterpriseLicenseSurveyPrompted");
+    return vscode.window
+      .showInformationMessage(
+        "Welcome to Dendron! 🌱",
+        {
+          modal: true,
+          detail: "Please enter your enterprise license key to proceed",
+        },
+        { title: "Enter" }
+      )
+      .then(async (resp) => {
+        if (resp === undefined) {
+          return undefined;
+        }
+        const licenseKey = await vscode.window.showInputBox({
+          ignoreFocusOut: true,
+          placeHolder: "license key",
+          prompt: "Please paste your license key here",
+          title: "License key",
+        });
+        const meta = MetadataService.instance();
+        if (licenseKey !== undefined) {
+          // @ts-ignore
+          meta.setMeta("enterpriseLicense", licenseKey);
+          return true;
+        }
+        return undefined;
+      });
+  }
+
   /**
    * Asks three questions about background, use case, and prior tools used.
    */
diff --git a/packages/plugin-core/src/utils/ExtensionUtils.ts b/packages/plugin-core/src/utils/ExtensionUtils.ts
index bff48a2bcf..79f8334fe0 100644
--- a/packages/plugin-core/src/utils/ExtensionUtils.ts
+++ b/packages/plugin-core/src/utils/ExtensionUtils.ts
@@ -159,6 +159,23 @@ export class ExtensionUtils {
     return ext as vscode.Extension<any>;
   }
 
+  static isEnterprise(context: vscode.ExtensionContext) {
+    // return context.extension.id === "dendron.@dendronhq/plugin-core";
+    return context.extension.id === "dendron.dendron-enterprise";
+  }
+
+  static hasValidLicense() {
+    // @ts-ignore
+    const enterpriseLicense = MetadataService.instance().getMeta()[
+      "enterpriseLicense"
+    ] as string;
+    // TODO
+    if (!enterpriseLicense) {
+      return false;
+    }
+    return true;
+  }
+
   static _TUTORIAL_IDS: Set<string> | undefined;
   static getTutorialIds(): Set<string> {
     if (_.isUndefined(ExtensionUtils._TUTORIAL_IDS)) {

From dbb289b48df2d6efa8e82f5ba8985b8e7d2273f3 Mon Sep 17 00:00:00 2001
From: Kevin <kevin@dendron.so>
Date: Wed, 27 Jul 2022 08:34:35 -0700
Subject: [PATCH 7/8] update build step

---
 packages/dendron-cli/src/commands/devCLICommand.ts | 13 ++-----------
 1 file changed, 2 insertions(+), 11 deletions(-)

diff --git a/packages/dendron-cli/src/commands/devCLICommand.ts b/packages/dendron-cli/src/commands/devCLICommand.ts
index 2173f4fbb7..cc18f56ca2 100644
--- a/packages/dendron-cli/src/commands/devCLICommand.ts
+++ b/packages/dendron-cli/src/commands/devCLICommand.ts
@@ -449,8 +449,8 @@ export class DevCLICommand extends CLICommand<CommandOpts, CommandOutput> {
     this.print("sync assets...");
     await this.syncAssets(opts);
 
-    this.print("prep repo...");
-    await BuildUtils.prepPluginPkg();
+    this.print(`prep repo... extensionTarget: ${opts.extensionTarget}`);
+    await BuildUtils.prepPluginPkg(opts.extensionTarget);
 
     if (!shouldPublishLocal) {
       this.print(
@@ -468,15 +468,6 @@ export class DevCLICommand extends CLICommand<CommandOpts, CommandOutput> {
     this.print("compiling plugin...");
     await BuildUtils.compilePlugin(opts);
 
-    if (opts.extensionTarget === ExtensionTarget.NIGHTLY) {
-      this.print("modifying plugin manifest for nightly target...");
-      await BuildUtils.prepPluginPkg(ExtensionTarget.NIGHTLY);
-    }
-    if (opts.extensionTarget === ExtensionTarget.ENTERPRISE) {
-      this.print("modifying plugin manifest for enterprisetarget...");
-      await BuildUtils.prepPluginPkg(ExtensionTarget.ENTERPRISE);
-    }
-
     this.print("package deps...");
     await BuildUtils.packagePluginDependencies(opts);
 

From 5391c951a2fd02c4818b5d5b6a2be704f7d3cb9f Mon Sep 17 00:00:00 2001
From: Kevin <kevin@dendron.so>
Date: Wed, 27 Jul 2022 08:43:15 -0700
Subject: [PATCH 8/8] track extension version

---
 packages/plugin-core/src/utils/ExtensionUtils.ts | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/plugin-core/src/utils/ExtensionUtils.ts b/packages/plugin-core/src/utils/ExtensionUtils.ts
index 79f8334fe0..f6dc988a22 100644
--- a/packages/plugin-core/src/utils/ExtensionUtils.ts
+++ b/packages/plugin-core/src/utils/ExtensionUtils.ts
@@ -416,6 +416,7 @@ export class ExtensionUtils {
     const workspaceConfig = ConfigUtils.getWorkspace(dendronConfig);
     const { workspaceFile, workspaceFolders } = vscode.workspace;
     const trackProps = {
+      extensionId: ext.context.extension.id,
       duration: durationReloadWorkspace,
       noCaching: dendronConfig.noCaching || false,
       numNotes,