@memberjunction/cli 5.0.0 → 5.2.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 (48) hide show
  1. package/README.md +16 -2
  2. package/bin/dev.cmd +2 -2
  3. package/bin/run.cmd +3 -3
  4. package/dist/commands/app/check-updates.d.ts +13 -0
  5. package/dist/commands/app/check-updates.d.ts.map +1 -0
  6. package/dist/commands/app/check-updates.js +54 -0
  7. package/dist/commands/app/check-updates.js.map +1 -0
  8. package/dist/commands/app/disable.d.ts +16 -0
  9. package/dist/commands/app/disable.d.ts.map +1 -0
  10. package/dist/commands/app/disable.js +47 -0
  11. package/dist/commands/app/disable.js.map +1 -0
  12. package/dist/commands/app/enable.d.ts +16 -0
  13. package/dist/commands/app/enable.d.ts.map +1 -0
  14. package/dist/commands/app/enable.js +47 -0
  15. package/dist/commands/app/enable.js.map +1 -0
  16. package/dist/commands/app/info.d.ts +16 -0
  17. package/dist/commands/app/info.d.ts.map +1 -0
  18. package/dist/commands/app/info.js +64 -0
  19. package/dist/commands/app/info.js.map +1 -0
  20. package/dist/commands/app/install.d.ts +21 -0
  21. package/dist/commands/app/install.d.ts.map +1 -0
  22. package/dist/commands/app/install.js +54 -0
  23. package/dist/commands/app/install.js.map +1 -0
  24. package/dist/commands/app/list.d.ts +16 -0
  25. package/dist/commands/app/list.d.ts.map +1 -0
  26. package/dist/commands/app/list.js +60 -0
  27. package/dist/commands/app/list.js.map +1 -0
  28. package/dist/commands/app/remove.d.ts +22 -0
  29. package/dist/commands/app/remove.d.ts.map +1 -0
  30. package/dist/commands/app/remove.js +66 -0
  31. package/dist/commands/app/remove.js.map +1 -0
  32. package/dist/commands/app/upgrade.d.ts +20 -0
  33. package/dist/commands/app/upgrade.d.ts.map +1 -0
  34. package/dist/commands/app/upgrade.js +52 -0
  35. package/dist/commands/app/upgrade.js.map +1 -0
  36. package/dist/commands/codegen/5-0-fix-entity-names.d.ts.map +1 -1
  37. package/dist/commands/codegen/5-0-fix-entity-names.js +8 -3
  38. package/dist/commands/codegen/5-0-fix-entity-names.js.map +1 -1
  39. package/dist/config.d.ts +142 -0
  40. package/dist/config.d.ts.map +1 -1
  41. package/dist/config.js +35 -0
  42. package/dist/config.js.map +1 -1
  43. package/dist/utils/open-app-context.d.ts +48 -0
  44. package/dist/utils/open-app-context.d.ts.map +1 -0
  45. package/dist/utils/open-app-context.js +143 -0
  46. package/dist/utils/open-app-context.js.map +1 -0
  47. package/oclif.manifest.json +458 -160
  48. package/package.json +12 -12
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Shared context builder for MJ Open App CLI commands.
3
+ *
4
+ * Constructs the OrchestratorContext needed by the engine's install/upgrade/remove
5
+ * functions, using the MJ entity framework (Metadata, RunView, BaseEntity) backed
6
+ * by the SQL Server data provider.
7
+ */
8
+ import sql from 'mssql';
9
+ import ora from 'ora-classic';
10
+ import { setupSQLServerClient, SQLServerProviderConfigData, UserCache } from '@memberjunction/sqlserver-dataprovider';
11
+ import { getValidatedConfig } from '../config.js';
12
+ // ─────────────────────────────────────────────────────────────────────────────
13
+ // Provider initialization (lazy singleton)
14
+ // ─────────────────────────────────────────────────────────────────────────────
15
+ let _pool = null;
16
+ let _provider = null;
17
+ let _initPromise = null;
18
+ /**
19
+ * Initializes the MJ SQL Server provider if not already done.
20
+ * Creates a connection pool, configures the provider, and populates UserCache.
21
+ */
22
+ async function ensureProviderInitialized() {
23
+ if (_provider && _pool?.connected) {
24
+ return { pool: _pool, provider: _provider };
25
+ }
26
+ if (_initPromise) {
27
+ const provider = await _initPromise;
28
+ return { pool: _pool, provider };
29
+ }
30
+ _initPromise = (async () => {
31
+ const config = getValidatedConfig();
32
+ const poolConfig = {
33
+ server: config.dbHost,
34
+ port: config.dbPort,
35
+ database: config.dbDatabase,
36
+ user: config.codeGenLogin,
37
+ password: config.codeGenPassword,
38
+ options: {
39
+ encrypt: false,
40
+ trustServerCertificate: config.dbTrustServerCertificate ?? true,
41
+ enableArithAbort: true,
42
+ },
43
+ };
44
+ _pool = new sql.ConnectionPool(poolConfig);
45
+ await _pool.connect();
46
+ const providerConfig = new SQLServerProviderConfigData(_pool, config.coreSchema ?? '__mj');
47
+ _provider = await setupSQLServerClient(providerConfig);
48
+ return _provider;
49
+ })();
50
+ const provider = await _initPromise;
51
+ return { pool: _pool, provider };
52
+ }
53
+ /**
54
+ * Closes the shared connection pool. Call on CLI exit for cleanup.
55
+ */
56
+ export async function closeConnectionPool() {
57
+ if (_pool?.connected) {
58
+ await _pool.close();
59
+ _pool = null;
60
+ }
61
+ _provider = null;
62
+ _initPromise = null;
63
+ }
64
+ // ─────────────────────────────────────────────────────────────────────────────
65
+ // System User
66
+ // ─────────────────────────────────────────────────────────────────────────────
67
+ /**
68
+ * Resolves the system user for Open App operations.
69
+ * Falls back to Owner user, then first active user if no system user exists.
70
+ */
71
+ function getSystemUserInfo() {
72
+ const sysUser = UserCache.Instance.GetSystemUser();
73
+ if (sysUser) {
74
+ return sysUser;
75
+ }
76
+ // Fallback: find first Owner user
77
+ const ownerUser = UserCache.Instance.Users.find(u => u.IsActive && u.Type === 'Owner');
78
+ if (ownerUser) {
79
+ return ownerUser;
80
+ }
81
+ // Last resort: first active user
82
+ const firstUser = UserCache.Instance.Users.find(u => u.IsActive);
83
+ if (firstUser) {
84
+ return firstUser;
85
+ }
86
+ throw new Error('No users found in UserCache. Cannot determine system user for Open App operations.');
87
+ }
88
+ // ─────────────────────────────────────────────────────────────────────────────
89
+ // Public API
90
+ // ─────────────────────────────────────────────────────────────────────────────
91
+ /**
92
+ * Builds a context user for read-only commands (list, info, check-updates).
93
+ * Initializes the MJ runtime and returns the system user.
94
+ */
95
+ export async function buildContextUser() {
96
+ await ensureProviderInitialized();
97
+ return getSystemUserInfo();
98
+ }
99
+ /**
100
+ * Builds the full OrchestratorContext for install/upgrade/remove/disable/enable commands.
101
+ */
102
+ export async function buildOrchestratorContext(command, verbose) {
103
+ const config = getValidatedConfig();
104
+ const { provider } = await ensureProviderInitialized();
105
+ const contextUser = getSystemUserInfo();
106
+ const spinner = verbose ? ora() : undefined;
107
+ return {
108
+ ContextUser: contextUser,
109
+ DatabaseProvider: provider,
110
+ DatabaseConfig: {
111
+ Host: config.dbHost,
112
+ Port: config.dbPort,
113
+ Database: config.dbDatabase,
114
+ User: config.codeGenLogin,
115
+ Password: config.codeGenPassword,
116
+ },
117
+ GitHubOptions: {
118
+ Token: config.openApps?.github?.token ?? process.env.GITHUB_TOKEN,
119
+ },
120
+ RepoRoot: process.cwd(),
121
+ MJVersion: getMJVersion(),
122
+ Callbacks: {
123
+ OnProgress: (phase, message) => spinner?.start(`[${phase}] ${message}`),
124
+ OnSuccess: (phase, message) => spinner?.succeed(`[${phase}] ${message}`),
125
+ OnError: (phase, message) => command.warn(`[${phase}] ${message}`),
126
+ OnWarn: (phase, message) => command.warn(`[${phase}] ${message}`),
127
+ OnLog: (message) => command.log(message),
128
+ },
129
+ };
130
+ }
131
+ /** Reads the current MJ version from MJGlobal's package.json. */
132
+ function getMJVersion() {
133
+ try {
134
+ const { readFileSync } = require('node:fs');
135
+ const { resolve } = require('node:path');
136
+ const pkgJson = JSON.parse(readFileSync(resolve(process.cwd(), 'packages/MJGlobal/package.json'), 'utf-8'));
137
+ return pkgJson.version;
138
+ }
139
+ catch {
140
+ return '4.3.1';
141
+ }
142
+ }
143
+ //# sourceMappingURL=open-app-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-app-context.js","sourceRoot":"","sources":["../../src/utils/open-app-context.ts"],"names":[],"mappings":"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"}