@memberjunction/server-bootstrap 6.1.0-edge.5 → 6.1.0-edge.6

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
@@ -14,89 +14,38 @@
14
14
  * See BaseServerMiddleware for details.
15
15
  */
16
16
  import { serve } from '@memberjunction/server';
17
- import { describeServerExtensionMount, extractServerExtensionsFromModule, extractServerExtensionsFromPackageJson, } from '@memberjunction/server-extensions-core';
17
+ import { MJ_SERVER_EXTENSIONS_EXPORT, describeServerExtensionMount, extractServerExtensionsFromPackageJson, normalizeServerExtensionConfigs, } from '@memberjunction/server-extensions-core';
18
+ import { FindWorkspacePackageDir, LoadDynamicPackages, resolvePackageJsonFromHost } from '@memberjunction/dynamic-packages';
19
+ import path from 'node:path';
18
20
  import { cosmiconfigSync } from 'cosmiconfig';
19
21
  import { readFileSync } from 'node:fs';
20
- import { importFromHost, isResolutionFailure, resolvePackageJsonFromHost } from './host-import.js';
22
+ /** Process ID MJAPI identifies itself with to the dynamic-package loader (entry `Processes` filters match it). */
23
+ export const MJAPI_PROCESS_ID = 'mjapi';
21
24
  /**
22
- * Discovers and loads generated packages from the workspace based on configuration.
25
+ * Loads the host's generated packages (`codeGeneration.packages`) and the installed Open Apps'
26
+ * server packages (`dynamicPackages.server[]`, written by `mj app install`) through the shared,
27
+ * process-agnostic loader in @memberjunction/dynamic-packages — the same loader the `mj` CLI,
28
+ * the MCP/A2A servers and the test bootstraps use, so an app's entity subclasses register in
29
+ * every process, not only here. Generated packages load first, apps after, so an app's
30
+ * @RegisterClass wins via the ClassFactory's load-order priority.
23
31
  *
24
- * Generated packages (entities, actions, resolvers) register themselves via side effects when imported.
25
- * This function uses the mj.config.cjs to determine which packages to load.
32
+ * What stays MJAPI-specific is what happens AFTER a package is loaded:
26
33
  *
27
- * @param config - The loaded MemberJunction configuration
28
- */
29
- async function discoverAndLoadGeneratedPackages(configResult) {
30
- const codeGeneration = configResult.config?.codeGeneration;
31
- if (!codeGeneration?.packages) {
32
- // Common case for app deployments that import their generated package directly —
33
- // not actionable, so stay silent (was a verbose-only console.debug).
34
- return;
35
- }
36
- console.log('Loading generated packages...');
37
- const packages = codeGeneration.packages;
38
- // Attempt to import each configured generated package
39
- // These imports trigger class registration via @RegisterClass decorators
40
- const packageTypes = ['entities', 'actions', 'angularForms', 'graphqlResolvers'];
41
- for (const pkgType of packageTypes) {
42
- const pkgConfig = packages[pkgType];
43
- if (pkgConfig?.name) {
44
- const pkgName = pkgConfig.name;
45
- try {
46
- // Dynamic import to trigger side effects (class registration)
47
- await importFromHost(pkgName, configResult.configFilePath);
48
- console.log(` Loaded generated package: ${pkgName}`);
49
- }
50
- catch (error) {
51
- // Not finding a package is expected in some cases (e.g., no forms generated yet).
52
- // isResolutionFailure (not a bare code check) because ts-node's ESM shim throws
53
- // resolution failures with no code at all. Only claim "not found" when THIS package
54
- // is the error's QUOTED subject ("Cannot find package '<name>'") — a missing
55
- // TRANSITIVE dependency of a package that WAS found quotes the transitive name
56
- // instead (this package's name still appears UNQUOTED in the imported-from path,
57
- // which is why a bare includes(pkgName) check is not enough); its message is the
58
- // true cause and must reach the operator via the warn path.
59
- const message = error instanceof Error ? error.message : String(error);
60
- if (isResolutionFailure(error) && message.includes(`'${pkgName}'`)) {
61
- console.log(` Generated package not found (may not exist yet): ${pkgName}`);
62
- }
63
- else {
64
- console.warn(` Error loading generated package ${pkgName}:`, error);
65
- }
66
- }
67
- }
68
- }
69
- console.log('');
70
- }
71
- /**
72
- * Imports the server packages of installed Open Apps, declared in
73
- * `mj.config.cjs` under `dynamicPackages.server[]` by `mj app install`.
74
- *
75
- * Importing each package triggers its `@RegisterClass` decorators; if an entry
76
- * declares a `StartupExport`, that named export is invoked after import. This is
77
- * called AFTER {@link discoverAndLoadGeneratedPackages} (and after the bootstrap
78
- * manifests imported at module load), so an app's registrations land last and
79
- * therefore win via the ClassFactory's load-order priority — letting an app
80
- * override a base class.
81
- *
82
- * It ALSO collects each package's exported `RESOLVER_PATHS` (absolute paths to the
83
- * package's generated resolver files) and returns them. This is required for the app's
84
- * GraphQL mutations/queries to actually enter the live schema: side-effect-importing a
85
- * resolver class only registers type-graphql metadata, but `buildSchema` includes a
86
- * resolver ONLY if it is PASSED in. `serve()` builds its resolver set by globbing the
87
- * paths it is given — so the caller must hand these paths to `serve()`, or the app's
88
- * entity-specific mutations (e.g. `CreateXxx`) never appear in the API. The app's own
89
- * `packages/MJAPI/src/generated/generated.ts` does NOT regenerate the app's entities, so
90
- * the package is the only source of these resolvers.
34
+ * - Each package's exported `RESOLVER_PATHS` (absolute paths to its generated resolver files)
35
+ * are collected and returned. This is required for the app's GraphQL mutations/queries to
36
+ * actually enter the live schema: side-effect-importing a resolver class only registers
37
+ * type-graphql metadata, but `buildSchema` includes a resolver ONLY if it is PASSED in.
38
+ * `serve()` builds its resolver set by globbing the paths it is given — so the caller must
39
+ * hand these paths to `serve()`, or the app's entity-specific mutations (e.g. `CreateXxx`)
40
+ * never appear in the API. The app's own `packages/MJAPI/src/generated/generated.ts` does
41
+ * NOT regenerate the app's entities, so the package is the only source of these resolvers.
42
+ * - Each package's server-extension declarations (`MJ_SERVER_EXTENSIONS` export, falling back
43
+ * to `package.json` `memberjunction.serverExtensions`) are collected so `serve()` can mount
44
+ * Open App routes (webhooks, anonymous checkout, …) without the operator copying those
45
+ * blocks into the host `mj.config.cjs`. Host `serverExtensions[]` still overlays by DriverClass.
91
46
  *
92
- * It ALSO collects each package's server-extension declarations (`MJ_SERVER_EXTENSIONS`
93
- * export, falling back to `package.json` `memberjunction.serverExtensions`) so `serve()`
94
- * can mount Open App routes (webhooks, anonymous checkout, …) without the operator
95
- * copying those blocks into the host `mj.config.cjs`. Host `serverExtensions[]` still
96
- * overlays by DriverClass.
97
- *
98
- * Mirrors the generated-package loader's robustness contract: no-op when the
99
- * section is absent, per-package try/catch, tolerate `ERR_MODULE_NOT_FOUND`
47
+ * The loader's robustness contract is unchanged from the loader that used to live here: no-op
48
+ * when nothing is configured, per-package try/catch, tolerate a package that cannot be resolved
100
49
  * (e.g. before `npm install`), warn on anything else, and never crash boot.
101
50
  *
102
51
  * @param configResult - The loaded MemberJunction configuration
@@ -105,98 +54,105 @@ async function discoverAndLoadGeneratedPackages(configResult) {
105
54
  * Open App server packages are installed — the common case).
106
55
  */
107
56
  async function loadDynamicAppPackages(configResult) {
108
- const dynamicPackages = configResult.config?.dynamicPackages;
109
- const serverPackages = dynamicPackages?.server;
57
+ const report = await LoadDynamicPackages({
58
+ processId: MJAPI_PROCESS_ID,
59
+ tier: 'server',
60
+ config: configResult.config,
61
+ configFilePath: configResult.configFilePath,
62
+ });
110
63
  const resolverPaths = [];
111
64
  const serverExtensions = [];
112
- if (!serverPackages || serverPackages.length === 0) {
113
- // No installed Open App server packages — the common case. Stay silent, no paths.
114
- return { resolverPaths, serverExtensions };
115
- }
116
- console.log('Loading Open App server packages...');
117
- for (const entry of serverPackages) {
118
- const pkgName = entry?.PackageName;
119
- if (!pkgName || entry.Enabled === false) {
120
- continue;
65
+ for (const loaded of report.Loaded) {
66
+ if (loaded.Source === 'generated') {
67
+ continue; // the host's own generated resolvers are globbed from the standard locations below
121
68
  }
122
- try {
123
- // Dynamic import to trigger side effects (class registration).
124
- const mod = await importFromHost(pkgName, configResult.configFilePath);
125
- // Invoke the declared startup export, if any (e.g. a registration kicker).
126
- const startup = entry.StartupExport ? mod[entry.StartupExport] : undefined;
127
- if (typeof startup === 'function') {
128
- await Promise.resolve(startup());
129
- }
130
- // Collect the package's exported resolver paths so serve() globs them into the schema.
131
- const pkgResolverPaths = mod.RESOLVER_PATHS;
132
- let added = 0;
133
- if (Array.isArray(pkgResolverPaths)) {
134
- for (const p of pkgResolverPaths) {
135
- if (typeof p === 'string' && p.length > 0) {
136
- resolverPaths.push(p);
137
- added++;
138
- }
139
- }
69
+ const added = collectResolverPaths(loaded, resolverPaths);
70
+ const extensions = collectServerExtensions(loaded, configResult.configFilePath);
71
+ serverExtensions.push(...extensions);
72
+ if (added > 0 || extensions.length > 0) {
73
+ console.log(` ${loaded.Entry.PackageName}:` +
74
+ `${added > 0 ? ` +${added} resolver path${added === 1 ? '' : 's'}` : ''}` +
75
+ `${extensions.length > 0 ? ` +${extensions.length} server extension${extensions.length === 1 ? '' : 's'}` : ''}`);
76
+ }
77
+ for (const ext of extensions) {
78
+ // Inventory is the consent surface: these routes mount BEFORE auth.
79
+ console.log(` ${describeServerExtensionMount(ext)}`);
80
+ }
81
+ }
82
+ if (report.Loaded.length > 0) {
83
+ console.log('');
84
+ }
85
+ return { resolverPaths, serverExtensions };
86
+ }
87
+ /** Appends the package's exported `RESOLVER_PATHS` strings to `into`; returns how many were added. */
88
+ function collectResolverPaths(loaded, into) {
89
+ const pkgResolverPaths = loaded.Module.RESOLVER_PATHS;
90
+ let added = 0;
91
+ if (Array.isArray(pkgResolverPaths)) {
92
+ for (const p of pkgResolverPaths) {
93
+ if (typeof p === 'string' && p.length > 0) {
94
+ into.push(p);
95
+ added++;
140
96
  }
141
- // Server extensions: runtime export wins; package.json is the static fallback
142
- // for packages that declare metadata without a named export. Isolated from the
143
- // package-load try so a collect failure still leaves resolvers registered.
144
- let extensions = [];
145
- try {
146
- extensions = extractServerExtensionsFromModule(mod, {
147
- source: pkgName,
97
+ }
98
+ }
99
+ return added;
100
+ }
101
+ /**
102
+ * `package.json` of a package the loader imported by path from an Open App's own repository
103
+ * (`mj-app.json` beside the config). No resolution anchor can see such a package — that is why
104
+ * the loader fell back to its on-disk location — so the host-anchored lookup above returns null
105
+ * for it and its `memberjunction.serverExtensions` would never mount.
106
+ */
107
+ function workspacePackageJson(loaded) {
108
+ const home = loaded.WorkspaceHome;
109
+ if (!home) {
110
+ return null;
111
+ }
112
+ const dir = FindWorkspacePackageDir(home.RepoDir, home.SourceDirectory, loaded.Entry.PackageName);
113
+ return dir ? path.join(dir, 'package.json') : null;
114
+ }
115
+ /**
116
+ * Server extensions: runtime export wins; package.json is the static fallback for packages that
117
+ * declare metadata without a named export. Isolated in its own try so a collect failure still
118
+ * leaves the package's resolvers registered.
119
+ */
120
+ function collectServerExtensions(loaded, configFilePath) {
121
+ const pkgName = loaded.Entry.PackageName;
122
+ try {
123
+ // Read the export by property access rather than `in`: the loader hands back whatever
124
+ // `import()` produced, and a wrapped/proxied namespace (vitest's mocks are one) can answer
125
+ // `get` for an export while answering `has` with false.
126
+ const exported = loaded.Module[MJ_SERVER_EXTENSIONS_EXPORT];
127
+ let extensions = exported === undefined
128
+ ? []
129
+ : normalizeServerExtensionConfigs(exported, {
130
+ source: pkgName,
131
+ onInvalid: (message) => console.warn(` ${message}`),
132
+ });
133
+ if (extensions.length === 0) {
134
+ const pkgJsonPath = resolvePackageJsonFromHost(pkgName, configFilePath) ?? workspacePackageJson(loaded);
135
+ if (pkgJsonPath) {
136
+ const pkgJson = JSON.parse(readFileSync(pkgJsonPath, 'utf8'));
137
+ extensions = extractServerExtensionsFromPackageJson(pkgJson, {
138
+ source: `${pkgName} package.json`,
148
139
  onInvalid: (message) => console.warn(` ${message}`),
149
140
  });
150
- if (extensions.length === 0) {
151
- const pkgJsonPath = resolvePackageJsonFromHost(pkgName, configResult.configFilePath);
152
- if (pkgJsonPath) {
153
- const pkgJson = JSON.parse(readFileSync(pkgJsonPath, 'utf8'));
154
- extensions = extractServerExtensionsFromPackageJson(pkgJson, {
155
- source: `${pkgName} package.json`,
156
- onInvalid: (message) => console.warn(` ${message}`),
157
- });
158
- }
159
- }
160
- }
161
- catch (collectError) {
162
- console.warn(` Error collecting serverExtensions from ${pkgName}:`, collectError);
163
- }
164
- if (extensions.length > 0) {
165
- serverExtensions.push(...extensions);
166
- }
167
- console.log(` Loaded Open App server package: ${pkgName}` +
168
- `${entry.StartupExport ? ` (ran ${entry.StartupExport})` : ''}` +
169
- `${added > 0 ? ` (+${added} resolver path${added === 1 ? '' : 's'})` : ''}` +
170
- `${extensions.length > 0 ? ` (+${extensions.length} server extension${extensions.length === 1 ? '' : 's'})` : ''}`);
171
- for (const ext of extensions) {
172
- // Inventory is the consent surface: these routes mount BEFORE auth.
173
- console.log(` ${describeServerExtensionMount(ext)}`);
174
- }
175
- }
176
- catch (error) {
177
- // isResolutionFailure (not a bare code check) because ts-node's ESM shim throws
178
- // resolution failures with no code at all. The quoted-name guard keeps a missing
179
- // TRANSITIVE dependency on the warn path with its true cause: resolution errors QUOTE
180
- // the missing name, and a transitive failure quotes the transitive dep — this
181
- // package's name only appears unquoted in the imported-from path.
182
- const message = error instanceof Error ? error.message : String(error);
183
- if (isResolutionFailure(error) && message.includes(`'${pkgName}'`)) {
184
- console.log(` Open App server package not found (run 'npm install'?): ${pkgName}`);
185
- }
186
- else {
187
- console.warn(` Error loading Open App server package ${pkgName}:`, error);
188
141
  }
189
142
  }
143
+ return extensions;
144
+ }
145
+ catch (collectError) {
146
+ console.warn(` Error collecting serverExtensions from ${pkgName}:`, collectError);
147
+ return [];
190
148
  }
191
- console.log('');
192
- return { resolverPaths, serverExtensions };
193
149
  }
194
150
  /**
195
151
  * Creates and starts a MemberJunction API server with minimal configuration.
196
152
  *
197
153
  * This is the primary entry point for MJ 3.0 applications. It:
198
154
  * 1. Loads configuration from mj.config.cjs (or specified path)
199
- * 2. Auto-discovers and imports generated packages (triggering @RegisterClass decorators)
155
+ * 2. Auto-discovers and imports generated + installed Open App packages (triggering @RegisterClass decorators)
200
156
  * 3. Middleware is discovered via ClassFactory from @RegisterClass(BaseServerMiddleware, key) classes
201
157
  * 4. Builds the GraphQL schema with all registered resolvers
202
158
  * 5. Starts the server with proper lifecycle hooks
@@ -243,16 +199,14 @@ export async function createMJServer(options = {}) {
243
199
  hasUserConfig: configSearchResult && !configSearchResult.isEmpty,
244
200
  configFilePath: configSearchResult?.filepath
245
201
  };
246
- // Discover and load generated packages automatically
247
- // This triggers their @RegisterClass decorators to register entities, actions, etc.
248
- await discoverAndLoadGeneratedPackages(configResult);
249
- // Load installed Open App server packages (dynamicPackages.server[] from `mj app
250
- // install`). Done AFTER the generated packages so an app's @RegisterClass wins via
251
- // ClassFactory load-order priority. Without this, `mj app install` writes the
252
- // section but nothing consumes it — the app's server classes never load. The returned
253
- // resolver paths are the app packages' generated resolver files, which must be globbed
254
- // into the schema below (loading the classes alone does NOT put their mutations/queries
255
- // in the GraphQL schema — type-graphql only includes resolvers passed to serve()).
202
+ // Load the host's generated packages and the installed Open App server packages
203
+ // (dynamicPackages.server[] from `mj app install`) — generated first, apps after, so an
204
+ // app's @RegisterClass wins via ClassFactory load-order priority. Without this, `mj app
205
+ // install` writes the section but nothing consumes it — the app's server classes never
206
+ // load. The returned resolver paths are the app packages' generated resolver files, which
207
+ // must be globbed into the schema below (loading the classes alone does NOT put their
208
+ // mutations/queries in the GraphQL schema — type-graphql only includes resolvers passed
209
+ // to serve()).
256
210
  const { resolverPaths: dynamicResolverPaths, serverExtensions: dynamicServerExtensions } = await loadDynamicAppPackages(configResult);
257
211
  // Build resolver paths - auto-discover standard locations if not provided
258
212
  // This enables truly minimal MJAPI files without needing to specify paths
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}