@memberjunction/server 2.111.0 → 2.112.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 (250) hide show
  1. package/dist/agents/skip-agent.d.ts +4 -4
  2. package/dist/agents/skip-agent.d.ts.map +1 -1
  3. package/dist/agents/skip-agent.js +808 -951
  4. package/dist/agents/skip-agent.js.map +1 -1
  5. package/dist/agents/skip-sdk.d.ts +1 -1
  6. package/dist/agents/skip-sdk.d.ts.map +1 -1
  7. package/dist/agents/skip-sdk.js +53 -43
  8. package/dist/agents/skip-sdk.js.map +1 -1
  9. package/dist/apolloServer/index.js +1 -1
  10. package/dist/auth/AuthProviderFactory.d.ts +1 -1
  11. package/dist/auth/AuthProviderFactory.d.ts.map +1 -1
  12. package/dist/auth/AuthProviderFactory.js +1 -3
  13. package/dist/auth/AuthProviderFactory.js.map +1 -1
  14. package/dist/auth/BaseAuthProvider.d.ts +1 -1
  15. package/dist/auth/BaseAuthProvider.d.ts.map +1 -1
  16. package/dist/auth/BaseAuthProvider.js +3 -2
  17. package/dist/auth/BaseAuthProvider.js.map +1 -1
  18. package/dist/auth/IAuthProvider.d.ts +1 -1
  19. package/dist/auth/IAuthProvider.d.ts.map +1 -1
  20. package/dist/auth/exampleNewUserSubClass.d.ts.map +1 -1
  21. package/dist/auth/exampleNewUserSubClass.js +1 -1
  22. package/dist/auth/exampleNewUserSubClass.js.map +1 -1
  23. package/dist/auth/index.d.ts +1 -1
  24. package/dist/auth/index.d.ts.map +1 -1
  25. package/dist/auth/index.js +6 -6
  26. package/dist/auth/index.js.map +1 -1
  27. package/dist/auth/initializeProviders.js +1 -1
  28. package/dist/auth/initializeProviders.js.map +1 -1
  29. package/dist/auth/newUsers.d.ts +1 -1
  30. package/dist/auth/newUsers.d.ts.map +1 -1
  31. package/dist/auth/newUsers.js +7 -7
  32. package/dist/auth/newUsers.js.map +1 -1
  33. package/dist/auth/providers/Auth0Provider.d.ts +1 -1
  34. package/dist/auth/providers/Auth0Provider.d.ts.map +1 -1
  35. package/dist/auth/providers/Auth0Provider.js +1 -1
  36. package/dist/auth/providers/Auth0Provider.js.map +1 -1
  37. package/dist/auth/providers/CognitoProvider.d.ts +1 -1
  38. package/dist/auth/providers/CognitoProvider.d.ts.map +1 -1
  39. package/dist/auth/providers/CognitoProvider.js +3 -6
  40. package/dist/auth/providers/CognitoProvider.js.map +1 -1
  41. package/dist/auth/providers/GoogleProvider.d.ts +1 -1
  42. package/dist/auth/providers/GoogleProvider.d.ts.map +1 -1
  43. package/dist/auth/providers/GoogleProvider.js +1 -1
  44. package/dist/auth/providers/GoogleProvider.js.map +1 -1
  45. package/dist/auth/providers/MSALProvider.d.ts +1 -1
  46. package/dist/auth/providers/MSALProvider.d.ts.map +1 -1
  47. package/dist/auth/providers/MSALProvider.js +1 -1
  48. package/dist/auth/providers/MSALProvider.js.map +1 -1
  49. package/dist/auth/providers/OktaProvider.d.ts +1 -1
  50. package/dist/auth/providers/OktaProvider.d.ts.map +1 -1
  51. package/dist/auth/providers/OktaProvider.js +1 -1
  52. package/dist/auth/providers/OktaProvider.js.map +1 -1
  53. package/dist/config.d.ts.map +1 -1
  54. package/dist/config.js +22 -10
  55. package/dist/config.js.map +1 -1
  56. package/dist/context.d.ts +1 -1
  57. package/dist/context.d.ts.map +1 -1
  58. package/dist/context.js +9 -7
  59. package/dist/context.js.map +1 -1
  60. package/dist/entitySubclasses/entityPermissions.server.d.ts +1 -1
  61. package/dist/entitySubclasses/entityPermissions.server.d.ts.map +1 -1
  62. package/dist/entitySubclasses/entityPermissions.server.js +1 -1
  63. package/dist/entitySubclasses/entityPermissions.server.js.map +1 -1
  64. package/dist/generated/generated.d.ts +648 -648
  65. package/dist/generated/generated.d.ts.map +1 -1
  66. package/dist/generated/generated.js +2986 -1133
  67. package/dist/generated/generated.js.map +1 -1
  68. package/dist/generic/KeyInputOutputTypes.d.ts +1 -1
  69. package/dist/generic/KeyInputOutputTypes.d.ts.map +1 -1
  70. package/dist/generic/KeyInputOutputTypes.js +1 -1
  71. package/dist/generic/KeyInputOutputTypes.js.map +1 -1
  72. package/dist/generic/ResolverBase.d.ts +1 -1
  73. package/dist/generic/ResolverBase.d.ts.map +1 -1
  74. package/dist/generic/ResolverBase.js +15 -10
  75. package/dist/generic/ResolverBase.js.map +1 -1
  76. package/dist/generic/RunViewResolver.d.ts +1 -1
  77. package/dist/generic/RunViewResolver.d.ts.map +1 -1
  78. package/dist/generic/RunViewResolver.js +15 -15
  79. package/dist/generic/RunViewResolver.js.map +1 -1
  80. package/dist/index.d.ts.map +1 -1
  81. package/dist/index.js +18 -9
  82. package/dist/index.js.map +1 -1
  83. package/dist/resolvers/ActionResolver.d.ts +2 -2
  84. package/dist/resolvers/ActionResolver.d.ts.map +1 -1
  85. package/dist/resolvers/ActionResolver.js +28 -30
  86. package/dist/resolvers/ActionResolver.js.map +1 -1
  87. package/dist/resolvers/AskSkipResolver.d.ts +2 -2
  88. package/dist/resolvers/AskSkipResolver.d.ts.map +1 -1
  89. package/dist/resolvers/AskSkipResolver.js +60 -50
  90. package/dist/resolvers/AskSkipResolver.js.map +1 -1
  91. package/dist/resolvers/ComponentRegistryResolver.d.ts.map +1 -1
  92. package/dist/resolvers/ComponentRegistryResolver.js +36 -38
  93. package/dist/resolvers/ComponentRegistryResolver.js.map +1 -1
  94. package/dist/resolvers/CreateQueryResolver.d.ts +1 -1
  95. package/dist/resolvers/CreateQueryResolver.d.ts.map +1 -1
  96. package/dist/resolvers/CreateQueryResolver.js +43 -40
  97. package/dist/resolvers/CreateQueryResolver.js.map +1 -1
  98. package/dist/resolvers/DatasetResolver.d.ts.map +1 -1
  99. package/dist/resolvers/DatasetResolver.js +1 -1
  100. package/dist/resolvers/DatasetResolver.js.map +1 -1
  101. package/dist/resolvers/EntityRecordNameResolver.d.ts +1 -1
  102. package/dist/resolvers/EntityRecordNameResolver.d.ts.map +1 -1
  103. package/dist/resolvers/EntityRecordNameResolver.js +1 -1
  104. package/dist/resolvers/EntityRecordNameResolver.js.map +1 -1
  105. package/dist/resolvers/EntityResolver.d.ts.map +1 -1
  106. package/dist/resolvers/EntityResolver.js +1 -1
  107. package/dist/resolvers/EntityResolver.js.map +1 -1
  108. package/dist/resolvers/FileCategoryResolver.js +1 -1
  109. package/dist/resolvers/FileCategoryResolver.js.map +1 -1
  110. package/dist/resolvers/FileResolver.js +1 -1
  111. package/dist/resolvers/FileResolver.js.map +1 -1
  112. package/dist/resolvers/GetDataContextDataResolver.d.ts +1 -1
  113. package/dist/resolvers/GetDataContextDataResolver.d.ts.map +1 -1
  114. package/dist/resolvers/GetDataContextDataResolver.js +5 -5
  115. package/dist/resolvers/GetDataContextDataResolver.js.map +1 -1
  116. package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
  117. package/dist/resolvers/GetDataResolver.js +8 -6
  118. package/dist/resolvers/GetDataResolver.js.map +1 -1
  119. package/dist/resolvers/MergeRecordsResolver.d.ts +3 -3
  120. package/dist/resolvers/MergeRecordsResolver.d.ts.map +1 -1
  121. package/dist/resolvers/MergeRecordsResolver.js +3 -3
  122. package/dist/resolvers/MergeRecordsResolver.js.map +1 -1
  123. package/dist/resolvers/PotentialDuplicateRecordResolver.d.ts +1 -1
  124. package/dist/resolvers/PotentialDuplicateRecordResolver.d.ts.map +1 -1
  125. package/dist/resolvers/PotentialDuplicateRecordResolver.js +1 -1
  126. package/dist/resolvers/PotentialDuplicateRecordResolver.js.map +1 -1
  127. package/dist/resolvers/QueryResolver.d.ts.map +1 -1
  128. package/dist/resolvers/QueryResolver.js +11 -11
  129. package/dist/resolvers/QueryResolver.js.map +1 -1
  130. package/dist/resolvers/ReportResolver.js +1 -1
  131. package/dist/resolvers/ReportResolver.js.map +1 -1
  132. package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
  133. package/dist/resolvers/RunAIAgentResolver.js +27 -28
  134. package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
  135. package/dist/resolvers/RunAIPromptResolver.d.ts.map +1 -1
  136. package/dist/resolvers/RunAIPromptResolver.js +31 -31
  137. package/dist/resolvers/RunAIPromptResolver.js.map +1 -1
  138. package/dist/resolvers/RunTemplateResolver.d.ts.map +1 -1
  139. package/dist/resolvers/RunTemplateResolver.js +9 -9
  140. package/dist/resolvers/RunTemplateResolver.js.map +1 -1
  141. package/dist/resolvers/SqlLoggingConfigResolver.d.ts.map +1 -1
  142. package/dist/resolvers/SqlLoggingConfigResolver.js +10 -10
  143. package/dist/resolvers/SqlLoggingConfigResolver.js.map +1 -1
  144. package/dist/resolvers/SyncDataResolver.d.ts +1 -1
  145. package/dist/resolvers/SyncDataResolver.d.ts.map +1 -1
  146. package/dist/resolvers/SyncDataResolver.js +15 -14
  147. package/dist/resolvers/SyncDataResolver.js.map +1 -1
  148. package/dist/resolvers/SyncRolesUsersResolver.d.ts +1 -1
  149. package/dist/resolvers/SyncRolesUsersResolver.d.ts.map +1 -1
  150. package/dist/resolvers/SyncRolesUsersResolver.js +48 -44
  151. package/dist/resolvers/SyncRolesUsersResolver.js.map +1 -1
  152. package/dist/resolvers/TaskResolver.d.ts.map +1 -1
  153. package/dist/resolvers/TaskResolver.js +7 -7
  154. package/dist/resolvers/TaskResolver.js.map +1 -1
  155. package/dist/resolvers/TransactionGroupResolver.d.ts +1 -1
  156. package/dist/resolvers/TransactionGroupResolver.d.ts.map +1 -1
  157. package/dist/resolvers/TransactionGroupResolver.js +12 -12
  158. package/dist/resolvers/TransactionGroupResolver.js.map +1 -1
  159. package/dist/resolvers/UserFavoriteResolver.d.ts +1 -1
  160. package/dist/resolvers/UserFavoriteResolver.d.ts.map +1 -1
  161. package/dist/resolvers/UserFavoriteResolver.js +1 -1
  162. package/dist/resolvers/UserFavoriteResolver.js.map +1 -1
  163. package/dist/resolvers/UserViewResolver.d.ts.map +1 -1
  164. package/dist/resolvers/UserViewResolver.js.map +1 -1
  165. package/dist/rest/EntityCRUDHandler.d.ts +1 -1
  166. package/dist/rest/EntityCRUDHandler.d.ts.map +1 -1
  167. package/dist/rest/EntityCRUDHandler.js +14 -16
  168. package/dist/rest/EntityCRUDHandler.js.map +1 -1
  169. package/dist/rest/RESTEndpointHandler.d.ts.map +1 -1
  170. package/dist/rest/RESTEndpointHandler.js +23 -25
  171. package/dist/rest/RESTEndpointHandler.js.map +1 -1
  172. package/dist/rest/ViewOperationsHandler.d.ts +1 -1
  173. package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
  174. package/dist/rest/ViewOperationsHandler.js +17 -21
  175. package/dist/rest/ViewOperationsHandler.js.map +1 -1
  176. package/dist/scheduler/LearningCycleScheduler.d.ts.map +1 -1
  177. package/dist/scheduler/LearningCycleScheduler.js.map +1 -1
  178. package/dist/services/ScheduledJobsService.d.ts.map +1 -1
  179. package/dist/services/ScheduledJobsService.js +4 -6
  180. package/dist/services/ScheduledJobsService.js.map +1 -1
  181. package/dist/services/TaskOrchestrator.d.ts +1 -1
  182. package/dist/services/TaskOrchestrator.d.ts.map +1 -1
  183. package/dist/services/TaskOrchestrator.js +30 -30
  184. package/dist/services/TaskOrchestrator.js.map +1 -1
  185. package/dist/types.d.ts +3 -3
  186. package/dist/types.d.ts.map +1 -1
  187. package/dist/types.js +0 -1
  188. package/dist/types.js.map +1 -1
  189. package/dist/util.d.ts +1 -1
  190. package/dist/util.d.ts.map +1 -1
  191. package/dist/util.js +2 -2
  192. package/dist/util.js.map +1 -1
  193. package/package.json +36 -37
  194. package/src/agents/skip-agent.ts +1067 -1200
  195. package/src/agents/skip-sdk.ts +877 -851
  196. package/src/apolloServer/index.ts +2 -2
  197. package/src/auth/AuthProviderFactory.ts +8 -14
  198. package/src/auth/BaseAuthProvider.ts +5 -4
  199. package/src/auth/IAuthProvider.ts +2 -2
  200. package/src/auth/exampleNewUserSubClass.ts +9 -2
  201. package/src/auth/index.ts +31 -26
  202. package/src/auth/initializeProviders.ts +3 -3
  203. package/src/auth/newUsers.ts +166 -134
  204. package/src/auth/providers/Auth0Provider.ts +5 -5
  205. package/src/auth/providers/CognitoProvider.ts +7 -10
  206. package/src/auth/providers/GoogleProvider.ts +4 -5
  207. package/src/auth/providers/MSALProvider.ts +5 -5
  208. package/src/auth/providers/OktaProvider.ts +6 -7
  209. package/src/config.ts +63 -54
  210. package/src/context.ts +42 -30
  211. package/src/entitySubclasses/entityPermissions.server.ts +3 -3
  212. package/src/generated/generated.ts +48130 -39930
  213. package/src/generic/KeyInputOutputTypes.ts +3 -6
  214. package/src/generic/ResolverBase.ts +119 -78
  215. package/src/generic/RunViewResolver.ts +27 -23
  216. package/src/index.ts +66 -42
  217. package/src/resolvers/ActionResolver.ts +46 -57
  218. package/src/resolvers/AskSkipResolver.ts +607 -533
  219. package/src/resolvers/ComponentRegistryResolver.ts +547 -562
  220. package/src/resolvers/CreateQueryResolver.ts +683 -655
  221. package/src/resolvers/DatasetResolver.ts +5 -6
  222. package/src/resolvers/EntityCommunicationsResolver.ts +1 -1
  223. package/src/resolvers/EntityRecordNameResolver.ts +9 -5
  224. package/src/resolvers/EntityResolver.ts +9 -7
  225. package/src/resolvers/FileCategoryResolver.ts +2 -2
  226. package/src/resolvers/FileResolver.ts +4 -4
  227. package/src/resolvers/GetDataContextDataResolver.ts +106 -118
  228. package/src/resolvers/GetDataResolver.ts +194 -205
  229. package/src/resolvers/MergeRecordsResolver.ts +5 -5
  230. package/src/resolvers/PotentialDuplicateRecordResolver.ts +1 -1
  231. package/src/resolvers/QueryResolver.ts +95 -78
  232. package/src/resolvers/ReportResolver.ts +2 -2
  233. package/src/resolvers/RunAIAgentResolver.ts +818 -828
  234. package/src/resolvers/RunAIPromptResolver.ts +693 -709
  235. package/src/resolvers/RunTemplateResolver.ts +105 -103
  236. package/src/resolvers/SqlLoggingConfigResolver.ts +69 -72
  237. package/src/resolvers/SyncDataResolver.ts +386 -352
  238. package/src/resolvers/SyncRolesUsersResolver.ts +387 -350
  239. package/src/resolvers/TaskResolver.ts +110 -115
  240. package/src/resolvers/TransactionGroupResolver.ts +143 -138
  241. package/src/resolvers/UserFavoriteResolver.ts +17 -8
  242. package/src/resolvers/UserViewResolver.ts +17 -12
  243. package/src/rest/EntityCRUDHandler.ts +291 -268
  244. package/src/rest/RESTEndpointHandler.ts +782 -776
  245. package/src/rest/ViewOperationsHandler.ts +191 -195
  246. package/src/scheduler/LearningCycleScheduler.ts +8 -52
  247. package/src/services/ScheduledJobsService.ts +129 -132
  248. package/src/services/TaskOrchestrator.ts +792 -776
  249. package/src/types.ts +15 -9
  250. package/src/util.ts +112 -109
@@ -1,9 +1,8 @@
1
1
  import { JwtPayload } from 'jsonwebtoken';
2
2
  import { RegisterClass } from '@memberjunction/global';
3
- import { AuthProviderConfig, AuthUserInfo } from '@memberjunction/core';
3
+ import { AuthProviderConfig, AuthUserInfo } from '@memberjunction/global';
4
4
  import { BaseAuthProvider } from '../BaseAuthProvider.js';
5
5
 
6
-
7
6
  /**
8
7
  * AWS Cognito authentication provider implementation
9
8
  */
@@ -18,21 +17,19 @@ export class CognitoProvider extends BaseAuthProvider {
18
17
  */
19
18
  extractUserInfo(payload: JwtPayload): AuthUserInfo {
20
19
  // Cognito uses custom claims with 'cognito:' prefix for some fields
21
- const email = payload.email as string | undefined ||
22
- payload['cognito:username'] as string | undefined;
20
+ const email = (payload.email as string | undefined) || (payload['cognito:username'] as string | undefined);
23
21
  const fullName = payload.name as string | undefined;
24
22
  const firstName = payload.given_name as string | undefined;
25
23
  const lastName = payload.family_name as string | undefined;
26
- const preferredUsername = payload['cognito:username'] as string | undefined ||
27
- payload.preferred_username as string | undefined ||
28
- email;
24
+ const preferredUsername =
25
+ (payload['cognito:username'] as string | undefined) || (payload.preferred_username as string | undefined) || email;
29
26
 
30
27
  return {
31
28
  email,
32
29
  firstName: firstName || fullName?.split(' ')[0],
33
30
  lastName: lastName || fullName?.split(' ')[1] || fullName?.split(' ')[0],
34
31
  fullName,
35
- preferredUsername
32
+ preferredUsername,
36
33
  };
37
34
  }
38
35
 
@@ -44,7 +41,7 @@ export class CognitoProvider extends BaseAuthProvider {
44
41
  const hasClientId = !!this.config.clientId;
45
42
  const hasRegion = !!this.config.region;
46
43
  const hasUserPoolId = !!this.config.userPoolId;
47
-
44
+
48
45
  return baseValid && hasClientId && hasRegion && hasUserPoolId;
49
46
  }
50
- }
47
+ }
@@ -1,9 +1,8 @@
1
1
  import { JwtPayload } from 'jsonwebtoken';
2
2
  import { RegisterClass } from '@memberjunction/global';
3
- import { AuthProviderConfig, AuthUserInfo } from '@memberjunction/core';
3
+ import { AuthProviderConfig, AuthUserInfo } from '@memberjunction/global';
4
4
  import { BaseAuthProvider } from '../BaseAuthProvider.js';
5
5
 
6
-
7
6
  /**
8
7
  * Google Identity Platform authentication provider implementation
9
8
  */
@@ -29,7 +28,7 @@ export class GoogleProvider extends BaseAuthProvider {
29
28
  firstName: firstName || fullName?.split(' ')[0],
30
29
  lastName: lastName || fullName?.split(' ')[1] || fullName?.split(' ')[0],
31
30
  fullName,
32
- preferredUsername
31
+ preferredUsername,
33
32
  };
34
33
  }
35
34
 
@@ -39,7 +38,7 @@ export class GoogleProvider extends BaseAuthProvider {
39
38
  validateConfig(): boolean {
40
39
  const baseValid = super.validateConfig();
41
40
  const hasClientId = !!this.config.clientId;
42
-
41
+
43
42
  return baseValid && hasClientId;
44
43
  }
45
- }
44
+ }
@@ -1,6 +1,6 @@
1
1
  import { JwtPayload } from 'jsonwebtoken';
2
2
  import { RegisterClass } from '@memberjunction/global';
3
- import { AuthProviderConfig, AuthUserInfo } from '@memberjunction/core';
3
+ import { AuthProviderConfig, AuthUserInfo } from '@memberjunction/global';
4
4
  import { BaseAuthProvider } from '../BaseAuthProvider.js';
5
5
 
6
6
  /**
@@ -17,7 +17,7 @@ export class MSALProvider extends BaseAuthProvider {
17
17
  */
18
18
  extractUserInfo(payload: JwtPayload): AuthUserInfo {
19
19
  // MSAL/Azure AD uses some custom claims
20
- const email = payload.email as string | undefined || payload.preferred_username as string | undefined;
20
+ const email = (payload.email as string | undefined) || (payload.preferred_username as string | undefined);
21
21
  const fullName = payload.name as string | undefined;
22
22
  const firstName = payload.given_name as string | undefined;
23
23
  const lastName = payload.family_name as string | undefined;
@@ -28,7 +28,7 @@ export class MSALProvider extends BaseAuthProvider {
28
28
  firstName: firstName || fullName?.split(' ')[0],
29
29
  lastName: lastName || fullName?.split(' ')[1] || fullName?.split(' ')[0],
30
30
  fullName,
31
- preferredUsername
31
+ preferredUsername,
32
32
  };
33
33
  }
34
34
 
@@ -39,7 +39,7 @@ export class MSALProvider extends BaseAuthProvider {
39
39
  const baseValid = super.validateConfig();
40
40
  const hasClientId = !!this.config.clientId;
41
41
  const hasTenantId = !!this.config.tenantId;
42
-
42
+
43
43
  return baseValid && hasClientId && hasTenantId;
44
44
  }
45
- }
45
+ }
@@ -1,9 +1,8 @@
1
1
  import { JwtPayload } from 'jsonwebtoken';
2
2
  import { RegisterClass } from '@memberjunction/global';
3
- import { AuthProviderConfig, AuthUserInfo } from '@memberjunction/core';
3
+ import { AuthProviderConfig, AuthUserInfo } from '@memberjunction/global';
4
4
  import { BaseAuthProvider } from '../BaseAuthProvider.js';
5
5
 
6
-
7
6
  /**
8
7
  * Okta authentication provider implementation
9
8
  */
@@ -18,18 +17,18 @@ export class OktaProvider extends BaseAuthProvider {
18
17
  */
19
18
  extractUserInfo(payload: JwtPayload): AuthUserInfo {
20
19
  // Okta uses standard OIDC claims plus some custom ones
21
- const email = payload.email as string | undefined || payload.preferred_username as string | undefined;
20
+ const email = (payload.email as string | undefined) || (payload.preferred_username as string | undefined);
22
21
  const fullName = payload.name as string | undefined;
23
22
  const firstName = payload.given_name as string | undefined;
24
23
  const lastName = payload.family_name as string | undefined;
25
- const preferredUsername = payload.preferred_username as string | undefined || email;
24
+ const preferredUsername = (payload.preferred_username as string | undefined) || email;
26
25
 
27
26
  return {
28
27
  email,
29
28
  firstName: firstName || fullName?.split(' ')[0],
30
29
  lastName: lastName || fullName?.split(' ')[1] || fullName?.split(' ')[0],
31
30
  fullName,
32
- preferredUsername
31
+ preferredUsername,
33
32
  };
34
33
  }
35
34
 
@@ -40,7 +39,7 @@ export class OktaProvider extends BaseAuthProvider {
40
39
  const baseValid = super.validateConfig();
41
40
  const hasClientId = !!this.config.clientId;
42
41
  const hasDomain = !!this.config.domain;
43
-
42
+
44
43
  return baseValid && hasClientId && hasDomain;
45
44
  }
46
- }
45
+ }
package/src/config.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  import { cosmiconfigSync } from 'cosmiconfig';
3
- import { LogError, LogStatus } from '@memberjunction/core';
3
+ import { LogError, LogStatus } from '@memberjunction/global';
4
4
 
5
5
  const explorer = cosmiconfigSync('mj', { searchStrategy: 'global' });
6
6
 
@@ -22,14 +22,17 @@ const databaseSettingsInfoSchema = z.object({
22
22
  metadataCacheRefreshInterval: z.number(),
23
23
  dbReadOnlyUsername: z.string().optional(),
24
24
  dbReadOnlyPassword: z.string().optional(),
25
- connectionPool: z.object({
26
- max: z.number().optional().default(50),
27
- min: z.number().optional().default(5),
28
- idleTimeoutMillis: z.number().optional().default(30000),
29
- acquireTimeoutMillis: z.number().optional().default(30000),
30
- }).optional().default({}),
25
+ connectionPool: z
26
+ .object({
27
+ max: z.number().optional().default(50),
28
+ min: z.number().optional().default(5),
29
+ idleTimeoutMillis: z.number().optional().default(30000),
30
+ acquireTimeoutMillis: z.number().optional().default(30000),
31
+ })
32
+ .optional()
33
+ .default({}),
31
34
  });
32
-
35
+
33
36
  const viewingSystemInfoSchema = z.object({
34
37
  enableSmartFilters: z.boolean().optional(),
35
38
  });
@@ -44,28 +47,25 @@ const restApiOptionsSchema = z.object({
44
47
 
45
48
  /**
46
49
  * Returns a new Zod object that accepts boolean, string, or number values and transforms them to boolean.
47
- * @returns
50
+ * @returns
48
51
  */
49
52
  const zodBooleanWithTransforms = () => {
50
53
  return z
51
- .union([z.boolean(), z.string(), z.number()])
52
- .optional()
53
- .default(false)
54
- .transform((v) => {
55
- if (typeof v === 'string') {
56
- return v === '1' || v.toLowerCase() === 'true';
57
- }
58
- else if (typeof v === 'number') {
59
- return v === 1;
60
- }
61
- else if (typeof v === 'boolean') {
62
- return v;
63
- }
64
- else {
65
- return false;
66
- }
67
- })
68
- }
54
+ .union([z.boolean(), z.string(), z.number()])
55
+ .optional()
56
+ .default(false)
57
+ .transform((v) => {
58
+ if (typeof v === 'string') {
59
+ return v === '1' || v.toLowerCase() === 'true';
60
+ } else if (typeof v === 'number') {
61
+ return v === 1;
62
+ } else if (typeof v === 'boolean') {
63
+ return v;
64
+ } else {
65
+ return false;
66
+ }
67
+ });
68
+ };
69
69
 
70
70
  const askSkipInfoSchema = z.object({
71
71
  url: z.string().optional(), // Base URL for Skip API
@@ -103,32 +103,38 @@ const sqlLoggingSchema = z.object({
103
103
  sessionTimeout: z.number().optional().default(3600000), // 1 hour
104
104
  });
105
105
 
106
- const authProviderSchema = z.object({
107
- name: z.string(),
108
- type: z.string(),
109
- issuer: z.string(),
110
- audience: z.string(),
111
- jwksUri: z.string(),
112
- clientId: z.string().optional(),
113
- clientSecret: z.string().optional(),
114
- tenantId: z.string().optional(),
115
- domain: z.string().optional(),
116
- }).passthrough(); // Allow additional provider-specific fields
117
-
118
- const componentRegistrySchema = z.object({
119
- id: z.string().optional(),
120
- name: z.string().optional(),
121
- apiKey: z.string().optional(),
122
- cache: z.boolean().optional().default(true),
123
- timeout: z.number().optional(),
124
- retryPolicy: z.object({
125
- maxRetries: z.number().optional(),
126
- initialDelay: z.number().optional(),
127
- maxDelay: z.number().optional(),
128
- backoffMultiplier: z.number().optional(),
129
- }).optional(),
130
- headers: z.record(z.string()).optional(),
131
- }).passthrough(); // Allow additional fields
106
+ const authProviderSchema = z
107
+ .object({
108
+ name: z.string(),
109
+ type: z.string(),
110
+ issuer: z.string(),
111
+ audience: z.string(),
112
+ jwksUri: z.string(),
113
+ clientId: z.string().optional(),
114
+ clientSecret: z.string().optional(),
115
+ tenantId: z.string().optional(),
116
+ domain: z.string().optional(),
117
+ })
118
+ .passthrough(); // Allow additional provider-specific fields
119
+
120
+ const componentRegistrySchema = z
121
+ .object({
122
+ id: z.string().optional(),
123
+ name: z.string().optional(),
124
+ apiKey: z.string().optional(),
125
+ cache: z.boolean().optional().default(true),
126
+ timeout: z.number().optional(),
127
+ retryPolicy: z
128
+ .object({
129
+ maxRetries: z.number().optional(),
130
+ initialDelay: z.number().optional(),
131
+ maxDelay: z.number().optional(),
132
+ backoffMultiplier: z.number().optional(),
133
+ })
134
+ .optional(),
135
+ headers: z.record(z.string()).optional(),
136
+ })
137
+ .passthrough(); // Allow additional fields
132
138
 
133
139
  const scheduledJobsSchema = z.object({
134
140
  enabled: z.boolean().optional().default(false),
@@ -151,7 +157,10 @@ const configInfoSchema = z.object({
151
157
 
152
158
  apiKey: z.string().optional(),
153
159
  baseUrl: z.string().default('http://localhost'),
154
- publicUrl: z.string().optional().default(process.env.MJAPI_PUBLIC_URL || ''), // Public URL for callbacks (e.g., ngrok URL when developing)
160
+ publicUrl: z
161
+ .string()
162
+ .optional()
163
+ .default(process.env.MJAPI_PUBLIC_URL || ''), // Public URL for callbacks (e.g., ngrok URL when developing)
155
164
 
156
165
  dbHost: z.string().default('localhost'),
157
166
  dbDatabase: z.string(),
package/src/context.ts CHANGED
@@ -5,22 +5,29 @@ import 'reflect-metadata';
5
5
  import { Subject, firstValueFrom } from 'rxjs';
6
6
  import { AuthenticationError, AuthorizationError } from 'type-graphql';
7
7
  import sql from 'mssql';
8
- import { getSigningKeys, getSystemUser, getValidationOptions, verifyUserRecord, extractUserInfoFromPayload, TokenExpiredError } from './auth/index.js';
8
+ import {
9
+ getSigningKeys,
10
+ getSystemUser,
11
+ getValidationOptions,
12
+ verifyUserRecord,
13
+ extractUserInfoFromPayload,
14
+ TokenExpiredError,
15
+ } from './auth/index.js';
9
16
  import { authCache } from './cache.js';
10
17
  import { userEmailMap, apiKey, mj_core_schema } from './config.js';
11
18
  import { DataSourceInfo, UserPayload } from './types.js';
12
19
  import { GetReadOnlyDataSource, GetReadWriteDataSource } from './util.js';
13
20
  import { v4 as uuidv4 } from 'uuid';
14
21
  import e from 'express';
15
- import { DatabaseProviderBase } from '@memberjunction/core';
22
+ import { DatabaseProviderBase } from '@memberjunction/global';
16
23
  import { SQLServerDataProvider, SQLServerProviderConfigData } from '@memberjunction/sqlserver-dataprovider';
17
24
  import { AuthProviderFactory } from './auth/AuthProviderFactory.js';
18
- import { Metadata } from '@memberjunction/core';
25
+ import { Metadata } from '@memberjunction/global';
19
26
 
20
27
  const verifyAsync = async (issuer: string, token: string): Promise<jwt.JwtPayload> =>
21
28
  new Promise((resolve, reject) => {
22
29
  const options = getValidationOptions(issuer);
23
-
30
+
24
31
  if (!options) {
25
32
  reject(new Error(`No validation options found for issuer ${issuer}`));
26
33
  return;
@@ -46,7 +53,7 @@ export const getUserPayload = async (
46
53
  sessionId = 'default',
47
54
  dataSources: DataSourceInfo[],
48
55
  requestDomain?: string,
49
- requestApiKey?: string
56
+ requestApiKey?: string
50
57
  ): Promise<UserPayload> => {
51
58
  try {
52
59
  const readOnlyDataSource = GetReadOnlyDataSource(dataSources, { allowFallbackToReadWrite: true });
@@ -105,14 +112,8 @@ export const getUserPayload = async (
105
112
  // Use provider to extract user information
106
113
  const userInfo = extractUserInfoFromPayload(payload);
107
114
  const email = userInfo.email ? ((userEmailMap ?? {})[userInfo.email] ?? userInfo.email) : userInfo.preferredUsername;
108
-
109
- const userRecord = await verifyUserRecord(
110
- email,
111
- userInfo.firstName,
112
- userInfo.lastName,
113
- requestDomain,
114
- readWriteDataSource
115
- );
115
+
116
+ const userRecord = await verifyUserRecord(email, userInfo.firstName, userInfo.lastName, requestDomain, readWriteDataSource);
116
117
 
117
118
  if (!userRecord) {
118
119
  console.error(`User ${email} not found`);
@@ -133,7 +134,15 @@ export const getUserPayload = async (
133
134
  };
134
135
 
135
136
  export const contextFunction =
136
- ({ setupComplete$, dataSource, dataSources }: { setupComplete$: Subject<unknown>; dataSource: sql.ConnectionPool, dataSources: DataSourceInfo[] }) =>
137
+ ({
138
+ setupComplete$,
139
+ dataSource,
140
+ dataSources,
141
+ }: {
142
+ setupComplete$: Subject<unknown>;
143
+ dataSource: sql.ConnectionPool;
144
+ dataSources: DataSourceInfo[];
145
+ }) =>
137
146
  async ({ req }: { req: IncomingMessage }) => {
138
147
  await firstValueFrom(setupComplete$); // wait for setup to complete before processing the request
139
148
 
@@ -143,7 +152,7 @@ export const contextFunction =
143
152
  const sessionId = sessionIdRaw ? sessionIdRaw.toString() : '';
144
153
  const bearerToken = req.headers.authorization ?? '';
145
154
  const apiKey = String(req.headers['x-mj-api-key']);
146
-
155
+
147
156
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
148
157
  const reqAny = req as any;
149
158
  const operationName: string | undefined = reqAny.body?.operationName;
@@ -156,11 +165,13 @@ export const contextFunction =
156
165
  sessionId,
157
166
  dataSources,
158
167
  requestDomain?.hostname ? requestDomain.hostname : undefined,
159
- apiKey
168
+ apiKey
160
169
  );
161
170
 
162
- if (Metadata.Provider.Entities.length === 0 ) {
163
- console.warn('WARNING: No entities found in global/shared metadata, this can often be due to the use of **global** Metadata/RunView/DB Providers in a multi-user environment. Check your code to make sure you are using the providers passed to you in AppContext by MJServer and not calling new Metadata() new RunView() new RunQuery() and similar patterns as those are unstable at times in multi-user server environments!!!');
171
+ if (Metadata.Provider.Entities.length === 0) {
172
+ console.warn(
173
+ 'WARNING: No entities found in global/shared metadata, this can often be due to the use of **global** Metadata/RunView/DB Providers in a multi-user environment. Check your code to make sure you are using the providers passed to you in AppContext by MJServer and not calling new Metadata() new RunView() new RunQuery() and similar patterns as those are unstable at times in multi-user server environments!!!'
174
+ );
164
175
  }
165
176
 
166
177
  // now create a new instance of SQLServerDataProvider for each request
@@ -176,28 +187,29 @@ export const contextFunction =
176
187
  const rConfig = new SQLServerProviderConfigData(readOnlyDataSource, mj_core_schema, 0, undefined, undefined, false);
177
188
  await rp.Config(rConfig);
178
189
  }
179
- }
180
- catch (e) {
190
+ } catch (e) {
181
191
  // no read only data source available, so rp will remain null, this is OK!
182
192
  }
183
193
 
184
- const providers = [{
185
- provider: p,
186
- type: 'Read-Write' as 'Read-Write' | 'Read-Only'
187
- }];
194
+ const providers = [
195
+ {
196
+ provider: p,
197
+ type: 'Read-Write' as 'Read-Write' | 'Read-Only',
198
+ },
199
+ ];
188
200
  if (rp) {
189
201
  providers.push({
190
202
  provider: rp,
191
- type: 'Read-Only' as 'Read-Write' | 'Read-Only'
203
+ type: 'Read-Only' as 'Read-Write' | 'Read-Only',
192
204
  });
193
205
  }
194
206
 
195
- const contextResult = {
196
- dataSource,
197
- dataSources,
207
+ const contextResult = {
208
+ dataSource,
209
+ dataSources,
198
210
  userPayload: userPayload,
199
211
  providers,
200
212
  };
201
-
213
+
202
214
  return contextResult;
203
- };
215
+ };
@@ -1,5 +1,5 @@
1
1
  import { RegisterClass } from '@memberjunction/global';
2
- import { BaseEntity, EntityDeleteOptions, EntitySaveOptions } from '@memberjunction/core';
2
+ import { BaseEntity, EntityDeleteOptions, EntitySaveOptions } from '@memberjunction/global';
3
3
  import { EntityPermissionEntity } from '@memberjunction/core-entities';
4
4
  import axios from 'axios';
5
5
  import { ___codeGenAPIPort, ___codeGenAPISubmissionDelay, ___codeGenAPIURL } from '../config.js';
@@ -7,7 +7,7 @@ import { ___codeGenAPIPort, ___codeGenAPISubmissionDelay, ___codeGenAPIURL } fro
7
7
  /**
8
8
  * Server-side only class that extends the entity permissions object to watch for changes to entity permissions, build a queue of entities that have been changed, and then from time to time, submit
9
9
  * them to an API server that will execute the underlying permission changes at the database level.
10
- *
10
+ *
11
11
  * This class is within the memberjunction/server package because it is closely coupled to other aspects of what
12
12
  * happens in the server. That's why it is not in the core-entities-server package.
13
13
  */
@@ -104,4 +104,4 @@ export class EntityPermissionsEntity_Server extends EntityPermissionEntity {
104
104
  }
105
105
  }
106
106
 
107
- export function LoadEntityPermissionsServerSubClass() {}
107
+ export function LoadEntityPermissionsServerSubClass() {}