everything-dev 1.17.0 → 1.19.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.
Files changed (47) hide show
  1. package/dist/cli/init.cjs +165 -84
  2. package/dist/cli/init.cjs.map +1 -1
  3. package/dist/cli/init.d.cts +14 -2
  4. package/dist/cli/init.d.cts.map +1 -1
  5. package/dist/cli/init.d.mts +14 -2
  6. package/dist/cli/init.d.mts.map +1 -1
  7. package/dist/cli/init.mjs +164 -85
  8. package/dist/cli/init.mjs.map +1 -1
  9. package/dist/cli/prompts.cjs +12 -14
  10. package/dist/cli/prompts.cjs.map +1 -1
  11. package/dist/cli/prompts.mjs +12 -14
  12. package/dist/cli/prompts.mjs.map +1 -1
  13. package/dist/cli/upgrade.cjs +114 -49
  14. package/dist/cli/upgrade.cjs.map +1 -1
  15. package/dist/cli/upgrade.mjs +114 -49
  16. package/dist/cli/upgrade.mjs.map +1 -1
  17. package/dist/contract.cjs +1 -4
  18. package/dist/contract.cjs.map +1 -1
  19. package/dist/contract.d.cts +6 -12
  20. package/dist/contract.d.cts.map +1 -1
  21. package/dist/contract.d.mts +6 -12
  22. package/dist/contract.d.mts.map +1 -1
  23. package/dist/contract.meta.cjs +5 -5
  24. package/dist/contract.meta.cjs.map +1 -1
  25. package/dist/contract.meta.d.cts +9 -9
  26. package/dist/contract.meta.d.mts +9 -9
  27. package/dist/contract.meta.mjs +5 -5
  28. package/dist/contract.meta.mjs.map +1 -1
  29. package/dist/contract.mjs +1 -4
  30. package/dist/contract.mjs.map +1 -1
  31. package/dist/plugin.cjs +64 -106
  32. package/dist/plugin.cjs.map +1 -1
  33. package/dist/plugin.d.cts +4 -7
  34. package/dist/plugin.d.cts.map +1 -1
  35. package/dist/plugin.d.mts +4 -7
  36. package/dist/plugin.d.mts.map +1 -1
  37. package/dist/plugin.mjs +65 -107
  38. package/dist/plugin.mjs.map +1 -1
  39. package/dist/types.d.cts +2 -2
  40. package/dist/types.d.mts +2 -2
  41. package/package.json +1 -1
  42. package/src/cli/init.ts +224 -162
  43. package/src/cli/prompts.ts +17 -22
  44. package/src/cli/upgrade.ts +173 -56
  45. package/src/contract.meta.ts +6 -8
  46. package/src/contract.ts +1 -4
  47. package/src/plugin.ts +118 -187
package/dist/plugin.cjs CHANGED
@@ -409,58 +409,20 @@ var plugin_default = (0, every_plugin.createPlugin)({
409
409
  const integrity = publishedUrl ? await require_integrity.computeSriHashForUrl(publishedUrl) : null;
410
410
  const version = manifest?.plugin.version ?? pkgJson.version;
411
411
  if (publishedUrl) {
412
- const pluginConfigPath = (0, node_path.join)(localPath, "bos.config.json");
413
- if ((0, node_fs.existsSync)(pluginConfigPath)) try {
414
- const pluginConfig = JSON.parse((0, node_fs.readFileSync)(pluginConfigPath, "utf-8"));
415
- if (!pluginConfig.plugins || typeof pluginConfig.plugins !== "object") pluginConfig.plugins = {};
416
- const plugins = pluginConfig.plugins;
412
+ const rootConfigPath = (0, node_path.join)(deps.configDir, "bos.config.json");
413
+ try {
414
+ const rootConfig = JSON.parse((0, node_fs.readFileSync)(rootConfigPath, "utf-8"));
415
+ if (!rootConfig.plugins || typeof rootConfig.plugins !== "object") rootConfig.plugins = {};
416
+ const plugins = rootConfig.plugins;
417
417
  if (!plugins[input.key] || typeof plugins[input.key] !== "object") plugins[input.key] = {};
418
418
  const entry = plugins[input.key];
419
419
  entry.production = publishedUrl;
420
420
  if (integrity) entry.integrity = integrity;
421
421
  else delete entry.integrity;
422
- (0, node_fs.writeFileSync)(pluginConfigPath, `${JSON.stringify(pluginConfig, null, 2)}\n`);
423
- console.log(` ✅ Updated ${pluginConfigPath}: plugins.${input.key}.production`);
422
+ (0, node_fs.writeFileSync)(rootConfigPath, `${JSON.stringify(rootConfig, null, 2)}\n`);
423
+ console.log(` ✅ Updated bos.config.json: plugins.${input.key}.production`);
424
424
  } catch (err) {
425
- console.error(` ❌ Failed to update plugin bos.config.json:`, err instanceof Error ? err.message : err);
426
- }
427
- const account = deps.bosConfig.account;
428
- const network = require_network.getNetworkIdForAccount(account);
429
- let pluginDomain;
430
- if ((0, node_fs.existsSync)(pluginConfigPath)) try {
431
- const pluginConfig = JSON.parse((0, node_fs.readFileSync)(pluginConfigPath, "utf-8"));
432
- if (typeof pluginConfig.domain === "string") pluginDomain = pluginConfig.domain;
433
- } catch {}
434
- if (!pluginDomain) pluginDomain = `${input.key}.${deps.bosConfig.domain ?? "everything.dev"}`;
435
- try {
436
- const registryEntries = {};
437
- if ((0, node_fs.existsSync)(pluginConfigPath)) try {
438
- const publishedPluginConfig = JSON.parse((0, node_fs.readFileSync)(pluginConfigPath, "utf-8"));
439
- delete publishedPluginConfig.development;
440
- registryEntries[`apps/${account}/${pluginDomain}/bos.config.json`] = JSON.stringify(publishedPluginConfig);
441
- } catch {}
442
- if (Object.keys(registryEntries).length > 0) {
443
- const payload = JSON.stringify(registryEntries);
444
- const argsBase64 = Buffer.from(payload).toString("base64");
445
- const privateKey = process.env.NEAR_PRIVATE_KEY || process.env.BOS_NEAR_PRIVATE_KEY;
446
- await effect.Effect.runPromise(require_near_cli.ensureNearCli);
447
- try {
448
- await effect.Effect.runPromise(require_near_cli.executeTransaction({
449
- account,
450
- contract: require_fastkv.getRegistryNamespaceForNetwork(network),
451
- method: "__fastdata_kv",
452
- argsBase64,
453
- network,
454
- privateKey,
455
- gas: "50Tgas",
456
- deposit: "0NEAR"
457
- }));
458
- } catch (registryError) {
459
- if (!extractTransactionHash(registryError)) console.warn(`[publish] Plugin registry write failed: ${registryError instanceof Error ? registryError.message : registryError}`);
460
- }
461
- }
462
- } catch (registryError) {
463
- console.warn(`[publish] Plugin registry write skipped: ${registryError instanceof Error ? registryError.message : registryError}`);
425
+ console.error(` ❌ Failed to update bos.config.json:`, err instanceof Error ? err.message : err);
464
426
  }
465
427
  await generateCodeArtifacts(deps.configDir, deps.bosConfig);
466
428
  }
@@ -728,18 +690,6 @@ var plugin_default = (0, every_plugin.createPlugin)({
728
690
  }
729
691
  }
730
692
  const registryEntries = { [`apps/${account}/${gateway}/bos.config.json`]: JSON.stringify(publishConfig) };
731
- for (const [pluginKey, pluginEntry] of Object.entries(publishConfig.plugins ?? {})) {
732
- const pluginRef = getPluginRef(pluginEntry);
733
- if (!pluginRef?.development?.startsWith("local:")) continue;
734
- const pluginConfigPath = (0, node_path.join)((0, node_path.join)(deps.configDir, pluginRef.development.slice(6)), "bos.config.json");
735
- if (!(0, node_fs.existsSync)(pluginConfigPath)) continue;
736
- try {
737
- const pluginConfig = JSON.parse((0, node_fs.readFileSync)(pluginConfigPath, "utf-8"));
738
- const pluginDomain = typeof pluginConfig.domain === "string" ? pluginConfig.domain : `${pluginKey}.${gateway}`;
739
- delete pluginConfig.development;
740
- registryEntries[`apps/${account}/${pluginDomain}/bos.config.json`] = JSON.stringify(pluginConfig);
741
- } catch {}
742
- }
743
693
  const payload = JSON.stringify(registryEntries);
744
694
  const argsBase64 = Buffer.from(payload).toString("base64");
745
695
  const privateKey = input.privateKey || process.env.NEAR_PRIVATE_KEY || process.env.BOS_NEAR_PRIVATE_KEY;
@@ -829,18 +779,18 @@ var plugin_default = (0, every_plugin.createPlugin)({
829
779
  init: builder.init.handler(async ({ input }) => {
830
780
  try {
831
781
  const timings = [];
832
- let extendsAccount = input.extendsAccount;
833
- let extendsGateway = input.extendsGateway;
782
+ let extendsAccount = "";
783
+ let extendsGateway = "";
834
784
  let directory = input.directory;
835
785
  let account = input.account;
836
786
  let domain = input.domain;
837
787
  let withHost = input.withHost;
838
788
  let plugins = input.plugins;
839
789
  if (input.extends) {
840
- const match = input.extends.match(/^(?:bos:\/\/)?([^/]+)\/(.+)$/);
790
+ const match = (input.extends.startsWith("bos://") ? input.extends : `bos://${input.extends}`).match(/^bos:\/\/([^/]+)\/(.+)$/);
841
791
  if (match) {
842
- if (!extendsAccount) extendsAccount = match[1];
843
- if (!extendsGateway) extendsGateway = match[2];
792
+ extendsAccount = match[1];
793
+ extendsGateway = match[2];
844
794
  }
845
795
  }
846
796
  extendsAccount = extendsAccount || "dev.everything.near";
@@ -853,9 +803,7 @@ var plugin_default = (0, every_plugin.createPlugin)({
853
803
  } catch {}
854
804
  if (!input.noInteractive) {
855
805
  const prompted = await require_prompts.promptInitOptions({
856
- extendsAccount,
857
- extendsGateway,
858
- extends: input.extends,
806
+ extends: `bos://${extendsAccount}/${extendsGateway}`,
859
807
  directory,
860
808
  account,
861
809
  domain,
@@ -874,21 +822,21 @@ var plugin_default = (0, every_plugin.createPlugin)({
874
822
  directory = directory || domain || extendsGateway;
875
823
  const targetDir = (0, node_path.resolve)(directory);
876
824
  plugins = plugins ?? [];
825
+ const extendsRef = `bos://${extendsAccount}/${extendsGateway}`;
877
826
  if (!parentConfig) try {
878
827
  parentConfig = await require_timing.timePhase(timings, "parent config", () => require_cli_init.fetchParentConfig(extendsAccount, extendsGateway));
879
828
  } catch {
880
829
  return {
881
830
  status: "error",
882
831
  directory,
883
- extendsAccount,
884
- extendsGateway,
832
+ extendsRef,
885
833
  account,
886
834
  domain,
887
- extends: `bos://${extendsAccount}/${extendsGateway}`,
835
+ extends: extendsRef,
888
836
  plugins: plugins ?? [],
889
837
  filesCopied: 0,
890
838
  timings,
891
- error: `No config found at bos://${extendsAccount}/${extendsGateway} — are you sure this is the right parent?`
839
+ error: `No config found at ${extendsRef} — are you sure this is the right parent?`
892
840
  };
893
841
  }
894
842
  const { sourceDir, parentConfig: resolvedParentConfig, cleanup } = await require_timing.timePhase(timings, "template source", () => require_cli_init.resolveSourceDir({
@@ -897,45 +845,56 @@ var plugin_default = (0, every_plugin.createPlugin)({
897
845
  source: input.source
898
846
  }));
899
847
  parentConfig = resolvedParentConfig;
848
+ const isMinimalScaffold = sourceDir === "";
900
849
  try {
901
- const patterns = await require_cli_init.readTemplatekeep(sourceDir);
902
- if (patterns.length === 0) return {
903
- status: "error",
904
- directory,
905
- extendsAccount,
906
- extendsGateway,
907
- account,
908
- domain,
909
- extends: `bos://${extendsAccount}/${extendsGateway}`,
910
- plugins: plugins ?? [],
911
- filesCopied: 0,
912
- error: "No .templatekeep found in template source"
913
- };
914
- const pluginRoutes = {};
915
- const parentRuntimePlugins = await require_config.buildRuntimePluginsForConfig(parentConfig, sourceDir, "production");
916
- for (const [key, plugin] of Object.entries(parentRuntimePlugins ?? {})) if (plugin.routes && plugin.routes.length > 0) pluginRoutes[key] = plugin.routes;
917
850
  const s = _clack_prompts.spinner();
918
851
  s.start("Setting up project");
919
- const filesCopied = await require_timing.timePhase(timings, "copy files", () => require_cli_init.copyFilteredFiles(sourceDir, targetDir, patterns, {
920
- withHost,
921
- plugins,
922
- pluginRoutes
923
- }));
924
- await require_timing.timePhase(timings, "personalize config", () => require_cli_init.personalizeConfig(targetDir, {
852
+ let filesCopied;
853
+ if (isMinimalScaffold) filesCopied = await require_timing.timePhase(timings, "scaffold project", () => require_cli_init.scaffoldMinimalProject(targetDir, parentConfig, {
925
854
  extendsAccount,
926
855
  extendsGateway,
927
856
  account: account || extendsAccount,
928
- domain: domain || extendsGateway,
857
+ domain,
929
858
  plugins,
930
- pluginRoutes,
931
- workspaceOpts: { sourceDir },
932
859
  withHost
933
860
  }));
934
- await require_timing.timePhase(timings, "write snapshot", () => require_cli_init.writeInitSnapshot(targetDir, extendsAccount, extendsGateway, sourceDir, patterns, {
935
- withHost,
936
- plugins,
937
- pluginRoutes
938
- }));
861
+ else {
862
+ const patterns = await require_cli_init.readTemplatekeep(sourceDir);
863
+ if (patterns.length === 0) return {
864
+ status: "error",
865
+ directory,
866
+ extendsRef,
867
+ account,
868
+ domain,
869
+ extends: extendsRef,
870
+ plugins: plugins ?? [],
871
+ filesCopied: 0,
872
+ error: "No .templatekeep found in template source"
873
+ };
874
+ const pluginRoutes = {};
875
+ const parentRuntimePlugins = await require_config.buildRuntimePluginsForConfig(parentConfig, sourceDir, "production");
876
+ for (const [key, plugin] of Object.entries(parentRuntimePlugins ?? {})) if (plugin.routes && plugin.routes.length > 0) pluginRoutes[key] = plugin.routes;
877
+ filesCopied = await require_timing.timePhase(timings, "copy files", () => require_cli_init.copyFilteredFiles(sourceDir, targetDir, patterns, {
878
+ withHost,
879
+ plugins,
880
+ pluginRoutes
881
+ }));
882
+ await require_timing.timePhase(timings, "personalize config", () => require_cli_init.personalizeConfig(targetDir, {
883
+ extendsAccount,
884
+ extendsGateway,
885
+ account: account || extendsAccount,
886
+ domain: domain || extendsGateway,
887
+ plugins,
888
+ pluginRoutes,
889
+ workspaceOpts: { sourceDir },
890
+ withHost
891
+ }));
892
+ await require_timing.timePhase(timings, "write snapshot", () => require_cli_init.writeInitSnapshot(targetDir, extendsAccount, extendsGateway, sourceDir, patterns, {
893
+ withHost,
894
+ plugins,
895
+ pluginRoutes
896
+ }));
897
+ }
939
898
  const initConfig = await require_timing.timePhase(timings, "resolve config", () => require_config.loadConfig({ cwd: targetDir }));
940
899
  if (initConfig?.runtime) await require_timing.timePhase(timings, "generate env/docker", async () => {
941
900
  require_infra.writeGeneratedInfra(targetDir, initConfig.runtime);
@@ -969,11 +928,10 @@ var plugin_default = (0, every_plugin.createPlugin)({
969
928
  return {
970
929
  status: "initialized",
971
930
  directory,
972
- extendsAccount,
973
- extendsGateway,
931
+ extendsRef,
974
932
  account,
975
933
  domain,
976
- extends: `bos://${extendsAccount}/${extendsGateway}`,
934
+ extends: extendsRef,
977
935
  plugins,
978
936
  filesCopied,
979
937
  timings
@@ -982,14 +940,14 @@ var plugin_default = (0, every_plugin.createPlugin)({
982
940
  await cleanup();
983
941
  }
984
942
  } catch (error) {
943
+ const extendsRef = input.extends ? input.extends.startsWith("bos://") ? input.extends : `bos://${input.extends}` : "bos://dev.everything.near/everything.dev";
985
944
  return {
986
945
  status: "error",
987
946
  directory: input.directory ?? "",
988
- extendsAccount: input.extendsAccount ?? "",
989
- extendsGateway: input.extendsGateway ?? "",
947
+ extendsRef,
990
948
  account: input.account,
991
949
  domain: input.domain,
992
- extends: input.extendsAccount && input.extendsGateway ? `bos://${input.extendsAccount}/${input.extendsGateway}` : "",
950
+ extends: extendsRef,
993
951
  plugins: input.plugins ?? [],
994
952
  filesCopied: 0,
995
953
  timings: [],