@atlashub/smartstack-cli 3.0.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -44464,16 +44464,16 @@ var require_chainedTokenCredential = __commonJS({
44464
44464
  // node_modules/uuid/dist/esm-node/rng.js
44465
44465
  function rng() {
44466
44466
  if (poolPtr > rnds8Pool.length - 16) {
44467
- import_crypto4.default.randomFillSync(rnds8Pool);
44467
+ import_crypto2.default.randomFillSync(rnds8Pool);
44468
44468
  poolPtr = 0;
44469
44469
  }
44470
44470
  return rnds8Pool.slice(poolPtr, poolPtr += 16);
44471
44471
  }
44472
- var import_crypto4, rnds8Pool, poolPtr;
44472
+ var import_crypto2, rnds8Pool, poolPtr;
44473
44473
  var init_rng = __esm({
44474
44474
  "node_modules/uuid/dist/esm-node/rng.js"() {
44475
44475
  "use strict";
44476
- import_crypto4 = __toESM(require("crypto"));
44476
+ import_crypto2 = __toESM(require("crypto"));
44477
44477
  rnds8Pool = new Uint8Array(256);
44478
44478
  poolPtr = rnds8Pool.length;
44479
44479
  }
@@ -44678,13 +44678,13 @@ function md5(bytes) {
44678
44678
  } else if (typeof bytes === "string") {
44679
44679
  bytes = Buffer.from(bytes, "utf8");
44680
44680
  }
44681
- return import_crypto5.default.createHash("md5").update(bytes).digest();
44681
+ return import_crypto3.default.createHash("md5").update(bytes).digest();
44682
44682
  }
44683
- var import_crypto5, md5_default;
44683
+ var import_crypto3, md5_default;
44684
44684
  var init_md5 = __esm({
44685
44685
  "node_modules/uuid/dist/esm-node/md5.js"() {
44686
44686
  "use strict";
44687
- import_crypto5 = __toESM(require("crypto"));
44687
+ import_crypto3 = __toESM(require("crypto"));
44688
44688
  md5_default = md5;
44689
44689
  }
44690
44690
  });
@@ -44733,13 +44733,13 @@ function sha1(bytes) {
44733
44733
  } else if (typeof bytes === "string") {
44734
44734
  bytes = Buffer.from(bytes, "utf8");
44735
44735
  }
44736
- return import_crypto6.default.createHash("sha1").update(bytes).digest();
44736
+ return import_crypto4.default.createHash("sha1").update(bytes).digest();
44737
44737
  }
44738
- var import_crypto6, sha1_default;
44738
+ var import_crypto4, sha1_default;
44739
44739
  var init_sha1 = __esm({
44740
44740
  "node_modules/uuid/dist/esm-node/sha1.js"() {
44741
44741
  "use strict";
44742
- import_crypto6 = __toESM(require("crypto"));
44742
+ import_crypto4 = __toESM(require("crypto"));
44743
44743
  sha1_default = sha1;
44744
44744
  }
44745
44745
  });
@@ -115955,7 +115955,6 @@ var import_fs_extra5 = __toESM(require_lib());
115955
115955
  var import_path6 = require("path");
115956
115956
  var import_os3 = require("os");
115957
115957
  var import_child_process5 = require("child_process");
115958
- var import_crypto2 = require("crypto");
115959
115958
 
115960
115959
  // src/lib/file-tracker.ts
115961
115960
  var import_crypto = require("crypto");
@@ -116689,11 +116688,11 @@ EndGlobal
116689
116688
  throw new Error(`Template not found: ${templatePath}`);
116690
116689
  }
116691
116690
  let appSettingsContent = await import_fs_extra5.default.readFile(templatePath, "utf-8");
116692
- const randomSecret = (0, import_crypto2.randomBytes)(32).toString("hex");
116693
- appSettingsContent = appSettingsContent.replace(/\{\{ProjectName\}\}/g, projectName).replace(/\{\{GenerateRandomSecret\}\}/g, randomSecret).replace(/\{\{ProjectDomain\}\}/g, `${projectName.toLowerCase()}.app`).replace(/\{\{ProjectNameLower\}\}/g, projectName.toLowerCase());
116691
+ appSettingsContent = appSettingsContent.replace(/\{\{ProjectName\}\}/g, projectName).replace(/\{\{ProjectDomain\}\}/g, `${projectName.toLowerCase()}.app`).replace(/\{\{ProjectNameLower\}\}/g, projectName.toLowerCase());
116694
116692
  const appSettings = JSON.parse(appSettingsContent);
116695
116693
  appSettings.MultiTenant = {
116696
116694
  Enabled: config.multiTenant.enabled,
116695
+ EnableB2B: config.multiTenant.enableB2B,
116697
116696
  EnableB2C: config.multiTenant.enableB2C,
116698
116697
  SystemTenantSlug: config.multiTenant.systemTenantSlug,
116699
116698
  SystemTenantName: config.multiTenant.systemTenantName,
@@ -117426,7 +117425,7 @@ async function initializeGit(config, dryRun) {
117426
117425
  execCommand(`git commit -m "${commitMsg}"`, projectDir, dryRun);
117427
117426
  }
117428
117427
  }
117429
- var initCommand = new Command("init").description("Initialize a new SmartStack project").argument("[name]", "Project name (optional, uses current folder if not provided)").option("--dry-run", "Show what would be created without actually creating").option("-y, --yes", "Skip prompts and use defaults").option("--skip-mcp-check", "Skip MCP servers verification").option("--multi-tenant", "Enable multi-tenant mode").option("--b2c", "Enable B2C (user tenant management)").option("--preview", "Use preview/prerelease versions (NuGet --prerelease + npm @next)").option("--here", "Initialize in current directory (use folder name as project name)").action(async (name, options) => {
117428
+ var initCommand = new Command("init").description("Initialize a new SmartStack project").argument("[name]", "Project name (optional, uses current folder if not provided)").option("--dry-run", "Show what would be created without actually creating").option("-y, --yes", "Skip prompts and use defaults").option("--skip-mcp-check", "Skip MCP servers verification").option("--multi-tenant", "Enable multi-tenant mode").option("--b2b", "Enable B2B (organisation management)").option("--b2c", "Enable B2C (user tenant management)").option("--preview", "Use preview/prerelease versions (NuGet --prerelease + npm @next)").option("--here", "Initialize in current directory (use folder name as project name)").action(async (name, options) => {
117430
117429
  logger.header("SmartStack Project Initialization");
117431
117430
  if (!options.skipMcpCheck) {
117432
117431
  logger.info("Checking MCP servers...");
@@ -117666,6 +117665,7 @@ var initCommand = new Command("init").description("Initialize a new SmartStack p
117666
117665
  projectDir: finalProjectDir,
117667
117666
  multiTenant: {
117668
117667
  enabled: options.multiTenant ?? true,
117668
+ enableB2B: options.b2b ?? true,
117669
117669
  enableB2C: options.b2c ?? true,
117670
117670
  systemTenantSlug: "default",
117671
117671
  systemTenantName: "Default Workspace",
@@ -117680,6 +117680,13 @@ var initCommand = new Command("init").description("Initialize a new SmartStack p
117680
117680
  message: "Enable multi-tenant mode?",
117681
117681
  default: true
117682
117682
  },
117683
+ {
117684
+ type: "confirm",
117685
+ name: "enableB2B",
117686
+ message: "Enable B2B (organisation management)?",
117687
+ default: true,
117688
+ when: (answers2) => answers2.multiTenantEnabled
117689
+ },
117683
117690
  {
117684
117691
  type: "confirm",
117685
117692
  name: "enableB2C",
@@ -117710,6 +117717,7 @@ var initCommand = new Command("init").description("Initialize a new SmartStack p
117710
117717
  projectDir: finalProjectDir,
117711
117718
  multiTenant: {
117712
117719
  enabled: answers.multiTenantEnabled ?? true,
117720
+ enableB2B: answers.enableB2B ?? true,
117713
117721
  enableB2C: answers.enableB2C ?? true,
117714
117722
  systemTenantSlug: answers.systemTenantSlug || "default",
117715
117723
  systemTenantName: answers.systemTenantName || "Default Workspace",
@@ -117727,6 +117735,7 @@ var initCommand = new Command("init").description("Initialize a new SmartStack p
117727
117735
  logger.info(`Preview mode: ${config.preview ? source_default.yellow("Enabled (prerelease)") : source_default.gray("Disabled (stable)")}`);
117728
117736
  logger.info(`Multi-Tenant: ${config.multiTenant.enabled ? source_default.green("Enabled") : source_default.gray("Disabled")}`);
117729
117737
  if (config.multiTenant.enabled) {
117738
+ logger.info(` B2B (Organisations): ${config.multiTenant.enableB2B ? source_default.green("Enabled") : source_default.gray("Disabled")}`);
117730
117739
  logger.info(` B2C (User Tenants): ${config.multiTenant.enableB2C ? source_default.green("Enabled") : source_default.gray("Disabled")}`);
117731
117740
  logger.info(` System Tenant: ${source_default.cyan(config.multiTenant.systemTenantSlug)} (${config.multiTenant.systemTenantName})`);
117732
117741
  }
@@ -124550,7 +124559,6 @@ var glob = Object.assign(glob_, {
124550
124559
  glob.glob = glob;
124551
124560
 
124552
124561
  // src/lib/config-sync.ts
124553
- var import_crypto3 = require("crypto");
124554
124562
  function addMissingKeys(target, template, prefix = "") {
124555
124563
  const added = [];
124556
124564
  for (const key of Object.keys(template)) {
@@ -124570,8 +124578,7 @@ function addMissingKeys(target, template, prefix = "") {
124570
124578
  return added;
124571
124579
  }
124572
124580
  function resolveTemplatePlaceholders(content, projectName) {
124573
- const secret = (0, import_crypto3.randomBytes)(32).toString("hex");
124574
- return content.replace(/\{\{ProjectName\}\}/g, projectName).replace(/\{\{GenerateRandomSecret\}\}/g, secret).replace(/\{\{ProjectDomain\}\}/g, `${projectName.toLowerCase()}.app`).replace(/\{\{ProjectNameLower\}\}/g, projectName.toLowerCase());
124581
+ return content.replace(/\{\{ProjectName\}\}/g, projectName).replace(/\{\{ProjectDomain\}\}/g, `${projectName.toLowerCase()}.app`).replace(/\{\{ProjectNameLower\}\}/g, projectName.toLowerCase());
124575
124582
  }
124576
124583
  function isPlainObject(value) {
124577
124584
  return typeof value === "object" && value !== null && !Array.isArray(value);