@memberjunction/server 2.1.4 → 2.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 (149) hide show
  1. package/dist/apolloServer/TransactionPlugin.d.ts +1 -1
  2. package/dist/apolloServer/TransactionPlugin.d.ts.map +1 -1
  3. package/dist/apolloServer/TransactionPlugin.js.map +1 -1
  4. package/dist/apolloServer/index.d.ts +1 -1
  5. package/dist/apolloServer/index.d.ts.map +1 -1
  6. package/dist/apolloServer/index.js +2 -2
  7. package/dist/apolloServer/index.js.map +1 -1
  8. package/dist/auth/exampleNewUserSubClass.d.ts +1 -1
  9. package/dist/auth/exampleNewUserSubClass.d.ts.map +1 -1
  10. package/dist/auth/exampleNewUserSubClass.js +7 -7
  11. package/dist/auth/exampleNewUserSubClass.js.map +1 -1
  12. package/dist/auth/index.d.ts +1 -1
  13. package/dist/auth/index.d.ts.map +1 -1
  14. package/dist/auth/index.js +18 -8
  15. package/dist/auth/index.js.map +1 -1
  16. package/dist/auth/newUsers.js +1 -1
  17. package/dist/auth/newUsers.js.map +1 -1
  18. package/dist/context.d.ts +1 -1
  19. package/dist/context.d.ts.map +1 -1
  20. package/dist/context.js +4 -4
  21. package/dist/context.js.map +1 -1
  22. package/dist/directives/Public.d.ts +1 -1
  23. package/dist/directives/Public.d.ts.map +1 -1
  24. package/dist/directives/index.d.ts +1 -1
  25. package/dist/directives/index.d.ts.map +1 -1
  26. package/dist/directives/index.js +1 -1
  27. package/dist/directives/index.js.map +1 -1
  28. package/dist/entitySubclasses/entityPermissions.server.d.ts +1 -1
  29. package/dist/entitySubclasses/entityPermissions.server.d.ts.map +1 -1
  30. package/dist/entitySubclasses/entityPermissions.server.js +5 -6
  31. package/dist/entitySubclasses/entityPermissions.server.js.map +1 -1
  32. package/dist/generated/generated.d.ts +5 -31
  33. package/dist/generated/generated.d.ts.map +1 -1
  34. package/dist/generated/generated.js +33 -189
  35. package/dist/generated/generated.js.map +1 -1
  36. package/dist/generic/ResolverBase.d.ts +3 -3
  37. package/dist/generic/ResolverBase.d.ts.map +1 -1
  38. package/dist/generic/ResolverBase.js +1 -1
  39. package/dist/generic/ResolverBase.js.map +1 -1
  40. package/dist/generic/RunViewResolver.d.ts +2 -2
  41. package/dist/generic/RunViewResolver.d.ts.map +1 -1
  42. package/dist/generic/RunViewResolver.js +1 -1
  43. package/dist/generic/RunViewResolver.js.map +1 -1
  44. package/dist/index.d.ts +21 -21
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +36 -27
  47. package/dist/index.js.map +1 -1
  48. package/dist/orm.js +4 -4
  49. package/dist/orm.js.map +1 -1
  50. package/dist/resolvers/AskSkipResolver.d.ts +3 -3
  51. package/dist/resolvers/AskSkipResolver.d.ts.map +1 -1
  52. package/dist/resolvers/AskSkipResolver.js +57 -55
  53. package/dist/resolvers/AskSkipResolver.js.map +1 -1
  54. package/dist/resolvers/ColorResolver.d.ts +1 -1
  55. package/dist/resolvers/ColorResolver.d.ts.map +1 -1
  56. package/dist/resolvers/ColorResolver.js +1 -1
  57. package/dist/resolvers/ColorResolver.js.map +1 -1
  58. package/dist/resolvers/DatasetResolver.d.ts +1 -1
  59. package/dist/resolvers/DatasetResolver.d.ts.map +1 -1
  60. package/dist/resolvers/EntityCommunicationsResolver.d.ts +2 -2
  61. package/dist/resolvers/EntityCommunicationsResolver.d.ts.map +1 -1
  62. package/dist/resolvers/EntityCommunicationsResolver.js +9 -4
  63. package/dist/resolvers/EntityCommunicationsResolver.js.map +1 -1
  64. package/dist/resolvers/EntityRecordNameResolver.d.ts +2 -2
  65. package/dist/resolvers/EntityRecordNameResolver.d.ts.map +1 -1
  66. package/dist/resolvers/EntityRecordNameResolver.js +2 -2
  67. package/dist/resolvers/EntityRecordNameResolver.js.map +1 -1
  68. package/dist/resolvers/EntityResolver.d.ts +2 -2
  69. package/dist/resolvers/EntityResolver.d.ts.map +1 -1
  70. package/dist/resolvers/EntityResolver.js +1 -1
  71. package/dist/resolvers/EntityResolver.js.map +1 -1
  72. package/dist/resolvers/FileCategoryResolver.d.ts +1 -1
  73. package/dist/resolvers/FileCategoryResolver.d.ts.map +1 -1
  74. package/dist/resolvers/FileCategoryResolver.js +2 -2
  75. package/dist/resolvers/FileCategoryResolver.js.map +1 -1
  76. package/dist/resolvers/FileResolver.d.ts +2 -2
  77. package/dist/resolvers/FileResolver.d.ts.map +1 -1
  78. package/dist/resolvers/FileResolver.js +3 -3
  79. package/dist/resolvers/FileResolver.js.map +1 -1
  80. package/dist/resolvers/MergeRecordsResolver.d.ts +2 -2
  81. package/dist/resolvers/MergeRecordsResolver.d.ts.map +1 -1
  82. package/dist/resolvers/MergeRecordsResolver.js +4 -2
  83. package/dist/resolvers/MergeRecordsResolver.js.map +1 -1
  84. package/dist/resolvers/PotentialDuplicateRecordResolver.d.ts +2 -2
  85. package/dist/resolvers/PotentialDuplicateRecordResolver.d.ts.map +1 -1
  86. package/dist/resolvers/PotentialDuplicateRecordResolver.js +1 -1
  87. package/dist/resolvers/PotentialDuplicateRecordResolver.js.map +1 -1
  88. package/dist/resolvers/QueryResolver.d.ts +1 -1
  89. package/dist/resolvers/QueryResolver.d.ts.map +1 -1
  90. package/dist/resolvers/ReportResolver.d.ts +1 -1
  91. package/dist/resolvers/ReportResolver.d.ts.map +1 -1
  92. package/dist/resolvers/ReportResolver.js +16 -14
  93. package/dist/resolvers/ReportResolver.js.map +1 -1
  94. package/dist/resolvers/UserFavoriteResolver.d.ts +1 -1
  95. package/dist/resolvers/UserFavoriteResolver.d.ts.map +1 -1
  96. package/dist/resolvers/UserFavoriteResolver.js +17 -16
  97. package/dist/resolvers/UserFavoriteResolver.js.map +1 -1
  98. package/dist/resolvers/UserResolver.d.ts +1 -1
  99. package/dist/resolvers/UserResolver.d.ts.map +1 -1
  100. package/dist/resolvers/UserResolver.js +1 -1
  101. package/dist/resolvers/UserResolver.js.map +1 -1
  102. package/dist/resolvers/UserViewResolver.d.ts +1 -1
  103. package/dist/resolvers/UserViewResolver.d.ts.map +1 -1
  104. package/dist/resolvers/UserViewResolver.js +2 -2
  105. package/dist/resolvers/UserViewResolver.js.map +1 -1
  106. package/dist/util.d.ts.map +1 -1
  107. package/dist/util.js +11 -5
  108. package/dist/util.js.map +1 -1
  109. package/package.json +27 -23
  110. package/src/apolloServer/TransactionPlugin.ts +53 -0
  111. package/src/apolloServer/index.ts +33 -0
  112. package/src/auth/exampleNewUserSubClass.ts +79 -0
  113. package/src/auth/index.ts +171 -0
  114. package/src/auth/newUsers.ts +58 -0
  115. package/src/auth/tokenExpiredError.ts +12 -0
  116. package/src/cache.ts +10 -0
  117. package/src/config.ts +89 -0
  118. package/src/context.ts +111 -0
  119. package/src/directives/Public.ts +42 -0
  120. package/src/directives/index.ts +1 -0
  121. package/src/entitySubclasses/DuplicateRunEntity.server.ts +29 -0
  122. package/src/entitySubclasses/entityPermissions.server.ts +104 -0
  123. package/src/entitySubclasses/userViewEntity.server.ts +187 -0
  124. package/src/generated/generated.ts +25265 -0
  125. package/src/generic/DeleteOptionsInput.ts +13 -0
  126. package/src/generic/KeyInputOutputTypes.ts +35 -0
  127. package/src/generic/KeyValuePairInput.ts +14 -0
  128. package/src/generic/PushStatusResolver.ts +40 -0
  129. package/src/generic/ResolverBase.ts +767 -0
  130. package/src/generic/RunViewResolver.ts +579 -0
  131. package/src/index.ts +171 -0
  132. package/src/orm.ts +36 -0
  133. package/src/resolvers/AskSkipResolver.ts +1109 -0
  134. package/src/resolvers/ColorResolver.ts +61 -0
  135. package/src/resolvers/DatasetResolver.ts +115 -0
  136. package/src/resolvers/EntityCommunicationsResolver.ts +221 -0
  137. package/src/resolvers/EntityRecordNameResolver.ts +75 -0
  138. package/src/resolvers/EntityResolver.ts +35 -0
  139. package/src/resolvers/FileCategoryResolver.ts +69 -0
  140. package/src/resolvers/FileResolver.ts +152 -0
  141. package/src/resolvers/MergeRecordsResolver.ts +175 -0
  142. package/src/resolvers/PotentialDuplicateRecordResolver.ts +91 -0
  143. package/src/resolvers/QueryResolver.ts +42 -0
  144. package/src/resolvers/ReportResolver.ts +144 -0
  145. package/src/resolvers/UserFavoriteResolver.ts +176 -0
  146. package/src/resolvers/UserResolver.ts +33 -0
  147. package/src/resolvers/UserViewResolver.ts +64 -0
  148. package/src/types.ts +40 -0
  149. package/src/util.ts +112 -0
@@ -1,5 +1,5 @@
1
1
  import { AppContext } from '@memberjunction/server';
2
- import { UserResolverBase } from '../generated/generated';
2
+ import { UserResolverBase } from '../generated/generated.js';
3
3
  export declare class UserResolver extends UserResolverBase {
4
4
  CurrentUser({ dataSource, userPayload }: AppContext): Promise<any>;
5
5
  UserByID(ID: number, { dataSource }: AppContext): Promise<any>;
@@ -1 +1 @@
1
- {"version":3,"file":"UserResolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/UserResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAkC,MAAM,wBAAwB,CAAC;AACpF,OAAO,EAAS,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,qBACa,YAAa,SAAQ,gBAAgB;IAE1C,WAAW,CAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,UAAU;IAO1D,QAAQ,CAAuB,EAAE,EAAE,MAAM,EAAS,EAAE,UAAU,EAAE,EAAE,UAAU;IAM5E,gBAAgB,CAA+B,UAAU,EAAE,MAAM,EAAS,EAAE,UAAU,EAAE,EAAE,UAAU;IAMpG,WAAW,CAA6B,KAAK,EAAE,MAAM,EAAS,EAAE,UAAU,EAAE,EAAE,UAAU;CAM/F;AACD,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"UserResolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/UserResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAkC,MAAM,wBAAwB,CAAC;AACpF,OAAO,EAAS,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,qBACa,YAAa,SAAQ,gBAAgB;IAE1C,WAAW,CAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,UAAU;IAO1D,QAAQ,CAAuB,EAAE,EAAE,MAAM,EAAS,EAAE,UAAU,EAAE,EAAE,UAAU;IAM5E,gBAAgB,CAA+B,UAAU,EAAE,MAAM,EAAS,EAAE,UAAU,EAAE,EAAE,UAAU;IAMpG,WAAW,CAA6B,KAAK,EAAE,MAAM,EAAS,EAAE,UAAU,EAAE,EAAE,UAAU;CAM/F;AACD,eAAe,YAAY,CAAC"}
@@ -11,7 +11,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
11
  return function (target, key) { decorator(target, key, paramIndex); }
12
12
  };
13
13
  import { Arg, Ctx, Int, Query, Resolver } from '@memberjunction/server';
14
- import { User_, UserResolverBase } from '../generated/generated';
14
+ import { User_, UserResolverBase } from '../generated/generated.js';
15
15
  let UserResolver = class UserResolver extends UserResolverBase {
16
16
  async CurrentUser({ dataSource, userPayload }) {
17
17
  const result = await this.UserByEmail(userPayload.email, { dataSource, userPayload });
@@ -1 +1 @@
1
- {"version":3,"file":"UserResolver.js","sourceRoot":"","sources":["../../src/resolvers/UserResolver.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAc,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG1D,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,gBAAgB;IAE1C,AAAN,KAAK,CAAC,WAAW,CAAQ,EAAE,UAAU,EAAE,WAAW,EAAc;QAC9D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;QACtF,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QACnC,OAAO,MAAM,CAAC;IAChB,CAAC;IAGK,AAAN,KAAK,CAAC,QAAQ,CAAuB,EAAU,EAAS,EAAE,UAAU,EAAc;QAChF,MAAM,MAAM,GAAG,KAAK,CAAC,qBAAqB,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC3F,OAAO,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC;IAGK,AAAN,KAAK,CAAC,gBAAgB,CAA+B,UAAkB,EAAS,EAAE,UAAU,EAAc;QACxG,MAAM,MAAM,GAAG,KAAK,CAAC,qBAAqB,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;QACnG,OAAO,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC;IAGK,AAAN,KAAK,CAAC,WAAW,CAA6B,KAAa,EAAS,EAAE,UAAU,EAAc;QAE5F,MAAM,WAAW,GAAG,KAAK,CAAC;QAC1B,MAAM,SAAS,GAAG,KAAK,CAAC,qBAAqB,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;QAC9G,OAAO,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC3D,CAAC;CACF,CAAA;AAzBO;IADL,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;IACA,WAAA,GAAG,EAAE,CAAA;;;;+CAIvB;AAGK;IADL,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;IACH,WAAA,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;IAAc,WAAA,GAAG,EAAE,CAAA;;;;4CAGtD;AAGK;IADL,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;IACK,WAAA,GAAG,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;IAAsB,WAAA,GAAG,EAAE,CAAA;;;;oDAG9E;AAGK;IADL,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;IACA,WAAA,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAA;IAAiB,WAAA,GAAG,EAAE,CAAA;;;;+CAKlE;AA1BU,YAAY;IADxB,QAAQ,CAAC,KAAK,CAAC;GACH,YAAY,CA2BxB;;AACD,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"UserResolver.js","sourceRoot":"","sources":["../../src/resolvers/UserResolver.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAc,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAG7D,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,gBAAgB;IAE1C,AAAN,KAAK,CAAC,WAAW,CAAQ,EAAE,UAAU,EAAE,WAAW,EAAc;QAC9D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;QACtF,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QACnC,OAAO,MAAM,CAAC;IAChB,CAAC;IAGK,AAAN,KAAK,CAAC,QAAQ,CAAuB,EAAU,EAAS,EAAE,UAAU,EAAc;QAChF,MAAM,MAAM,GAAG,KAAK,CAAC,qBAAqB,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC3F,OAAO,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC;IAGK,AAAN,KAAK,CAAC,gBAAgB,CAA+B,UAAkB,EAAS,EAAE,UAAU,EAAc;QACxG,MAAM,MAAM,GAAG,KAAK,CAAC,qBAAqB,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;QACnG,OAAO,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC;IAGK,AAAN,KAAK,CAAC,WAAW,CAA6B,KAAa,EAAS,EAAE,UAAU,EAAc;QAE5F,MAAM,WAAW,GAAG,KAAK,CAAC;QAC1B,MAAM,SAAS,GAAG,KAAK,CAAC,qBAAqB,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;QAC9G,OAAO,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC3D,CAAC;CACF,CAAA;AAzBO;IADL,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;IACA,WAAA,GAAG,EAAE,CAAA;;;;+CAIvB;AAGK;IADL,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;IACH,WAAA,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;IAAc,WAAA,GAAG,EAAE,CAAA;;;;4CAGtD;AAGK;IADL,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;IACK,WAAA,GAAG,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;IAAsB,WAAA,GAAG,EAAE,CAAA;;;;oDAG9E;AAGK;IADL,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;IACA,WAAA,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAA;IAAiB,WAAA,GAAG,EAAE,CAAA;;;;+CAKlE;AA1BU,YAAY;IADxB,QAAQ,CAAC,KAAK,CAAC;GACH,YAAY,CA2BxB;;AACD,eAAe,YAAY,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { AppContext, UserPayload } from '@memberjunction/server';
2
2
  import { DataSource } from 'typeorm';
3
- import { UserViewResolverBase } from '../generated/generated';
3
+ import { UserViewResolverBase } from '../generated/generated.js';
4
4
  export declare class UserViewResolver extends UserViewResolverBase {
5
5
  UserViewsByUserID(UserID: number, { dataSource }: AppContext): Promise<any>;
6
6
  DefaultViewByUserAndEntity(UserID: number, EntityID: number, { dataSource }: AppContext): Promise<any>;
@@ -1 +1 @@
1
- {"version":3,"file":"UserViewResolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/UserViewResolver.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAkC,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACjG,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAa,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAIzE,qBACa,gBAAiB,SAAQ,oBAAoB;IAElD,iBAAiB,CAA2B,MAAM,EAAE,MAAM,EAAS,EAAE,UAAU,EAAE,EAAE,UAAU;IAK7F,0BAA0B,CACJ,MAAM,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EACrC,EAAE,UAAU,EAAE,EAAE,UAAU;IAM7B,gCAAgC,CAA6B,QAAQ,EAAE,MAAM,EAAS,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,UAAU;cAQnH,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAO7F,8BAA8B,CAA6B,QAAQ,EAAE,MAAM,EAAS,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,UAAU;IAK3H,iBAAiB,CAA0B,EAAE,EAAE,MAAM,EAAS,EAAE,WAAW,EAAE,EAAE,UAAU;CAgBhG;AAED,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"UserViewResolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/UserViewResolver.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAkC,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACjG,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAa,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAI5E,qBACa,gBAAiB,SAAQ,oBAAoB;IAElD,iBAAiB,CAA2B,MAAM,EAAE,MAAM,EAAS,EAAE,UAAU,EAAE,EAAE,UAAU;IAK7F,0BAA0B,CACJ,MAAM,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EACrC,EAAE,UAAU,EAAE,EAAE,UAAU;IAM7B,gCAAgC,CAA6B,QAAQ,EAAE,MAAM,EAAS,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,UAAU;cAQnH,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAO7F,8BAA8B,CAA6B,QAAQ,EAAE,MAAM,EAAS,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,UAAU;IAK3H,iBAAiB,CAA0B,EAAE,EAAE,MAAM,EAAS,EAAE,WAAW,EAAE,EAAE,UAAU;CAgBhG;AAED,eAAe,gBAAgB,CAAC"}
@@ -12,8 +12,8 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
12
  };
13
13
  import { Metadata } from '@memberjunction/core';
14
14
  import { Arg, Ctx, Int, Query, Resolver } from '@memberjunction/server';
15
- import { UserView_, UserViewResolverBase } from '../generated/generated';
16
- import { UserResolver } from './UserResolver';
15
+ import { UserView_, UserViewResolverBase } from '../generated/generated.js';
16
+ import { UserResolver } from './UserResolver.js';
17
17
  let UserViewResolver = class UserViewResolver extends UserViewResolverBase {
18
18
  async UserViewsByUserID(UserID, { dataSource }) {
19
19
  return await this.findBy(dataSource, 'User Views', { UserID });
@@ -1 +1 @@
1
- {"version":3,"file":"UserViewResolver.js","sourceRoot":"","sources":["../../src/resolvers/UserViewResolver.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAc,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAe,MAAM,wBAAwB,CAAC;AAEjG,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAIvC,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,oBAAoB;IAElD,AAAN,KAAK,CAAC,iBAAiB,CAA2B,MAAc,EAAS,EAAE,UAAU,EAAc;QACjG,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACjE,CAAC;IAGK,AAAN,KAAK,CAAC,0BAA0B,CACJ,MAAc,EACZ,QAAgB,EACrC,EAAE,UAAU,EAAc;QAEjC,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5F,CAAC;IAGK,AAAN,KAAK,CAAC,gCAAgC,CAA6B,QAAgB,EAAS,EAAE,UAAU,EAAE,WAAW,EAAc;QACjI,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,YAAY,EAAE;YACjD,MAAM,EAAE,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,WAAW,CAAC;YAC5D,QAAQ;YACR,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;IACL,CAAC;IAES,KAAK,CAAC,gBAAgB,CAAC,UAAsB,EAAE,WAAwB;QAC/E,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;QAC5F,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAGK,AAAN,KAAK,CAAC,8BAA8B,CAA6B,QAAgB,EAAS,EAAE,UAAU,EAAE,WAAW,EAAc;QAC/H,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC3H,CAAC;IAGK,AAAN,KAAK,CAAC,iBAAiB,CAA0B,EAAU,EAAS,EAAE,WAAW,EAAc;QAK7F,MAAM,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAC/C,MAAM,UAAU,GAA2B,MAAM,EAAE,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QACrF,MAAM,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1B,UAAU,CAAC,iBAAiB,EAAE,CAAC;QAC/B,IAAI,MAAM,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;YAC5B,OAAO,UAAU,CAAC,MAAM,EAAE,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;CACF,CAAA;AAlDO;IADL,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IACA,WAAA,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;IAAkB,WAAA,GAAG,EAAE,CAAA;;;;yDAEvE;AAGK;IADL,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IAEtB,WAAA,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;IACxB,WAAA,GAAG,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;IAC1B,WAAA,GAAG,EAAE,CAAA;;;;kEAGP;AAGK;IADL,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IACe,WAAA,GAAG,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;IAAoB,WAAA,GAAG,EAAE,CAAA;;;;wEAM1F;AASK;IADL,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IACa,WAAA,GAAG,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;IAAoB,WAAA,GAAG,EAAE,CAAA;;;;sEAExF;AAGK;IADL,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IACA,WAAA,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAA;IAAc,WAAA,GAAG,EAAE,CAAA;;;;yDAelE;AAnDU,gBAAgB;IAD5B,QAAQ,CAAC,SAAS,CAAC;GACP,gBAAgB,CAoD5B;;AAED,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"UserViewResolver.js","sourceRoot":"","sources":["../../src/resolvers/UserViewResolver.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAQA,KAAK,cAAc,GAAG,CAAC,UAAU,EAAE,GAAG,KAAK,IAAI,CAAC;AAahD,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,EAAE,cAAc,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAoFjL"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AASA,KAAK,cAAc,GAAG,CAAC,UAAU,EAAE,GAAG,KAAK,IAAI,CAAC;AAahD,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,EAAE,cAAc,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAyFjL"}
package/dist/util.js CHANGED
@@ -3,6 +3,7 @@ import { request as httpsRequest } from 'https';
3
3
  import { gzip as gzipCallback, createGunzip } from 'zlib';
4
4
  import { promisify } from 'util';
5
5
  import { URL } from 'url';
6
+ import { z } from 'zod';
6
7
  const gzip = promisify(gzipCallback);
7
8
  export async function sendPostRequest(url, payload, useCompression, headers, streamCallback) {
8
9
  return new Promise(async (resolve, reject) => {
@@ -16,7 +17,8 @@ export async function sendPostRequest(url, payload, useCompression, headers, str
16
17
  headers['Content-Encoding'] = 'gzip';
17
18
  }
18
19
  catch (error) {
19
- console.error(`Error in sendPostRequest while compressing data: ${error && error.message ? error.message : error}`);
20
+ const err = z.object({ message: z.string() }).safeParse(error);
21
+ console.error(`Error in sendPostRequest while compressing data: ${err.success ? err.data.message : error}`);
20
22
  return reject(error);
21
23
  }
22
24
  }
@@ -51,7 +53,8 @@ export async function sendPostRequest(url, payload, useCompression, headers, str
51
53
  streamCallback?.(jsonObject);
52
54
  }
53
55
  catch (e) {
54
- console.warn(`Error in postRequest().stream(data) while parsing JSON object: ${e && e.message ? e.message : e}`);
56
+ const err = z.object({ message: z.string() }).safeParse(e);
57
+ console.warn(`Error in postRequest().stream(data) while parsing JSON object: ${err.success ? err.data.message : e}`);
55
58
  }
56
59
  }
57
60
  });
@@ -63,21 +66,24 @@ export async function sendPostRequest(url, payload, useCompression, headers, str
63
66
  streamCallback?.(jsonObject);
64
67
  }
65
68
  catch (e) {
66
- console.warn(`Error in postRequest().stream(end) while parsing JSON object: ${e && e.message ? e.message : e}`);
69
+ const err = z.object({ message: z.string() }).safeParse(e);
70
+ console.warn(`Error in postRequest().stream(end) while parsing JSON object: ${err.success ? err.data.message : e}`);
67
71
  }
68
72
  }
69
73
  resolve(jsonObjects);
70
74
  });
71
75
  });
72
76
  req.on('error', (e) => {
73
- console.error(`Error in sendPostRequest().req.on(error): ${e && e.message ? e.message : e}`);
77
+ const err = z.object({ message: z.string() }).safeParse(e);
78
+ console.error(`Error in sendPostRequest().req.on(error): ${err.success ? err.data.message : e}`);
74
79
  reject(e);
75
80
  });
76
81
  req.write(data);
77
82
  req.end();
78
83
  }
79
84
  catch (e) {
80
- console.error(`Error in sendPostRequest: ${e && e.message ? e.message : e}`);
85
+ const err = z.object({ message: z.string() }).safeParse(e);
86
+ console.error(`Error in sendPostRequest: ${err.success ? err.data.message : e}`);
81
87
  reject(e);
82
88
  }
83
89
  });
package/dist/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,IAAI,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;AAerC,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAW,EAAE,OAAY,EAAE,cAAuB,EAAE,OAAsC,EAAE,cAA+B;IAC/J,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,IAAI,CAAC;YACH,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5D,IAAI,IAAI,CAAC;YACT,IAAI,cAAc,EAAE,CAAC;gBACnB,IAAI,CAAC;oBACH,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBACxD,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;oBACxB,OAAO,CAAC,kBAAkB,CAAC,GAAG,MAAM,CAAC;gBACvC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,oDAAoD,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;oBACpH,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;YAC9C,CAAC;YAED,MAAM,OAAO,GAAG;gBACd,QAAQ;gBACR,IAAI,EAAE,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChD,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,GAAG,OAAO;iBACX;aACF,CAAC;YAEF,MAAM,OAAO,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC;YACnE,MAAM,WAAW,GAAU,EAAE,CAAC;YAC9B,IAAI,MAAM,GAAG,EAAE,CAAC;YAEhB,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACnC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;gBAC9B,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBAEnF,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;oBAC1B,MAAM,IAAI,KAAK,CAAC;oBAChB,IAAI,QAAQ,CAAC;oBACb,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;wBAChD,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;wBACjD,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;wBACxC,IAAI,CAAC;4BACH,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;4BAC1C,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;4BAC7B,cAAc,EAAE,CAAC,UAAU,CAAC,CAAC;wBAC/B,CAAC;wBAAC,OAAO,CAAC,EAAE,CAAC;4BAEX,OAAO,CAAC,IAAI,CAAC,kEAAkE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACnH,CAAC;oBACH,CAAC;gBACH,CAAC,CAAC,CAAC;gBAEH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;oBAEpB,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;wBAClB,IAAI,CAAC;4BACH,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;4BAC7C,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;4BAC7B,cAAc,EAAE,CAAC,UAAU,CAAC,CAAC;wBAC/B,CAAC;wBAAC,OAAO,CAAC,EAAE,CAAC;4BAEX,OAAO,CAAC,IAAI,CAAC,iEAAiE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAClH,CAAC;oBACH,CAAC;oBACD,OAAO,CAAC,WAAW,CAAC,CAAC;gBACvB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;gBACpB,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;gBAC5F,MAAM,CAAC,CAAC,CAAC,CAAC;YACZ,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChB,GAAG,CAAC,GAAG,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,CAAC,EAAE,CAAC;YACT,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;YAC5E,MAAM,CAAC,CAAC,CAAC,CAAC;QACZ,CAAC;IACH,CAAC,CACA,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@memberjunction/server",
3
- "version": "2.1.4",
3
+ "version": "2.2.0",
4
4
  "description": "MemberJunction: This project provides API access via GraphQL to the common data store.",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./src/index.ts",
@@ -8,8 +8,12 @@
8
8
  "author": "MemberJunction.com",
9
9
  "license": "ISC",
10
10
  "files": [
11
- "/dist"
11
+ "/dist",
12
+ "/src"
12
13
  ],
14
+ "exports": {
15
+ ".": "./dist/index.js"
16
+ },
13
17
  "scripts": {
14
18
  "build": "tsc",
15
19
  "bundle": "tsc -noEmit && pkgroll --sourcemap --minify",
@@ -18,27 +22,27 @@
18
22
  "dependencies": {
19
23
  "@apollo/server": "^4.9.1",
20
24
  "@graphql-tools/utils": "^10.0.1",
21
- "@memberjunction/actions": "2.1.4",
22
- "@memberjunction/ai": "2.1.4",
23
- "@memberjunction/ai-mistral": "2.1.4",
24
- "@memberjunction/ai-openai": "2.1.4",
25
- "@memberjunction/ai-vectors-pinecone": "2.1.4",
26
- "@memberjunction/aiengine": "2.1.4",
27
- "@memberjunction/core": "2.1.4",
28
- "@memberjunction/core-actions": "2.1.4",
29
- "@memberjunction/core-entities": "2.1.4",
30
- "@memberjunction/data-context": "2.1.4",
31
- "@memberjunction/data-context-server": "2.1.4",
32
- "@memberjunction/doc-utils": "2.1.4",
33
- "@memberjunction/entity-communications-server": "2.1.4",
34
- "@memberjunction/external-change-detection": "2.1.4",
35
- "@memberjunction/global": "2.1.4",
36
- "@memberjunction/queue": "2.1.4",
37
- "@memberjunction/skip-types": "2.1.4",
38
- "@memberjunction/sqlserver-dataprovider": "2.1.4",
39
- "@memberjunction/graphql-dataprovider": "2.1.4",
40
- "@memberjunction/storage": "2.1.4",
41
- "@memberjunction/templates": "2.1.4",
25
+ "@memberjunction/actions": "2.2.0",
26
+ "@memberjunction/ai": "2.2.0",
27
+ "@memberjunction/ai-mistral": "2.2.0",
28
+ "@memberjunction/ai-openai": "2.2.0",
29
+ "@memberjunction/ai-vectors-pinecone": "2.2.0",
30
+ "@memberjunction/aiengine": "2.2.0",
31
+ "@memberjunction/core": "2.2.0",
32
+ "@memberjunction/core-actions": "2.2.0",
33
+ "@memberjunction/core-entities": "2.1.6",
34
+ "@memberjunction/data-context": "2.2.0",
35
+ "@memberjunction/data-context-server": "2.2.0",
36
+ "@memberjunction/doc-utils": "2.2.0",
37
+ "@memberjunction/entity-communications-server": "2.2.0",
38
+ "@memberjunction/external-change-detection": "2.2.0",
39
+ "@memberjunction/global": "2.2.0",
40
+ "@memberjunction/queue": "2.2.0",
41
+ "@memberjunction/skip-types": "2.2.0",
42
+ "@memberjunction/sqlserver-dataprovider": "2.2.0",
43
+ "@memberjunction/graphql-dataprovider": "2.2.0",
44
+ "@memberjunction/storage": "2.2.0",
45
+ "@memberjunction/templates": "2.2.0",
42
46
  "@types/cors": "^2.8.13",
43
47
  "@types/jsonwebtoken": "9.0.6",
44
48
  "@types/node": "20.14.2",
@@ -0,0 +1,53 @@
1
+ import { ApolloServerPlugin, GraphQLRequestContextDidEncounterErrors, GraphQLRequestListenerParsingDidEnd } from '@apollo/server';
2
+ import { DataSource } from 'typeorm';
3
+ import { AppContext } from '../types.js';
4
+
5
+ export const TransactionPlugin: ApolloServerPlugin<AppContext> = {
6
+ async requestDidStart(requestContext) {
7
+ const start = Date.now();
8
+ const query = requestContext.request.query || '';
9
+ const isMutation = /^\s*mutation\b/i.test(query);
10
+
11
+ if (!isMutation) {
12
+ return null;
13
+ }
14
+
15
+ // Start transaction, one or more mutations. If it is just one mutation, this trans wrapper isn't really needed
16
+ // but there's no good way to know if it's one or more mutations, so we just start a transaction anyway and it isn't terribly expensive
17
+ // to do so with SQL Server anyway.
18
+ const dataSource: DataSource = requestContext.contextValue.dataSource;
19
+ const queryRunner = dataSource.createQueryRunner();
20
+
21
+ requestContext.contextValue.queryRunner = queryRunner;
22
+ console.log('Starting transaction wrapper, time spent: ', Date.now() - start, 'ms ');
23
+ await queryRunner.startTransaction();
24
+
25
+ return {
26
+ didEncounterErrors: async (requestContext) => {
27
+ console.log('Error in transaction wrapper: ' + requestContext.errors, 'time spent: ', Date.now() - start, 'ms');
28
+ },
29
+ executionDidStart: async () => {
30
+ return {
31
+ executionDidEnd: async (err) => {
32
+ try {
33
+ if (err) {
34
+ console.log('Error in transaction, rolling back, time spent: ', Date.now() - start, 'ms ');
35
+ console.error('Rolling back transaction', err);
36
+ await queryRunner.rollbackTransaction();
37
+ } else {
38
+ console.log('Committing transaction, time spent: ', Date.now() - start, 'ms ');
39
+ await queryRunner.commitTransaction();
40
+ }
41
+ } catch (execErr) {
42
+ console.log('Execution Error, time spent: ', Date.now() - start, 'ms ');
43
+ console.error(execErr);
44
+ } finally {
45
+ await queryRunner.release();
46
+ console.log('Transaction complete, time spent: ', Date.now() - start, 'ms ');
47
+ }
48
+ },
49
+ };
50
+ },
51
+ };
52
+ },
53
+ };
@@ -0,0 +1,33 @@
1
+ import { ApolloServer, ApolloServerOptions } from '@apollo/server';
2
+ import { ApolloServerPluginDrainHttpServer } from '@apollo/server/plugin/drainHttpServer';
3
+ import { Disposable } from 'graphql-ws';
4
+ import { Server } from 'http';
5
+ import { enableIntrospection } from '../config.js';
6
+ import { AppContext } from '../types.js';
7
+ import { TransactionPlugin } from './TransactionPlugin.js';
8
+
9
+ const buildApolloServer = (
10
+ configOverride: ApolloServerOptions<AppContext>,
11
+ { httpServer, serverCleanup }: { httpServer: Server; serverCleanup: Disposable }
12
+ ) =>
13
+ new ApolloServer({
14
+ csrfPrevention: true,
15
+ cache: 'bounded',
16
+ plugins: [
17
+ ApolloServerPluginDrainHttpServer({ httpServer }),
18
+ TransactionPlugin,
19
+ {
20
+ async serverWillStart() {
21
+ return {
22
+ async drainServer() {
23
+ await serverCleanup.dispose();
24
+ },
25
+ };
26
+ },
27
+ },
28
+ ],
29
+ introspection: enableIntrospection,
30
+ ...configOverride,
31
+ });
32
+
33
+ export default buildApolloServer;
@@ -0,0 +1,79 @@
1
+ import { RegisterClass } from '@memberjunction/global';
2
+ import { Metadata, RunView, LogError } from '@memberjunction/core';
3
+ import { NewUserBase } from './newUsers.js';
4
+ import { UserCache } from '@memberjunction/sqlserver-dataprovider';
5
+ import { configInfo } from '../config.js';
6
+
7
+ /**
8
+ * This example class subclasses the @NewUserBase class and overrides the createNewUser method to create a new person record and then call the base class to create the user record. In this example there is an entity
9
+ * called "Persons" that is mapped to the User table in the core MemberJunction schema. You can sub-class the NewUserBase to do whatever behavior you want and pre-process, post-process or entirely override the base
10
+ * class behavior.
11
+ */
12
+ // NOTE: This is commented out becuase it is turned off by default. To make this work, you'd have to do a real implementation below, and then uncomment this decorator
13
+ // so that your class is actually used.
14
+ //@RegisterClass(NewUserBase, undefined, 1) /*by putting 1 into the priority setting, MJGlobal ClassFactory will use this instead of the base class as that registration had no priority*/
15
+ export class ExampleNewUserSubClass extends NewUserBase {
16
+ public override async createNewUser(firstName: string, lastName: string, email: string) {
17
+ try {
18
+ const md = new Metadata();
19
+ const contextUser = UserCache.Instance.Users.find(
20
+ (u) => u.Email.trim().toLowerCase() === configInfo?.userHandling?.contextUserForNewUserCreation?.trim().toLowerCase()
21
+ );
22
+ if (!contextUser) {
23
+ LogError(
24
+ `Failed to load context user ${configInfo?.userHandling?.contextUserForNewUserCreation}, if you've not specified this on your config.json you must do so. This is the user that is contextually used for creating a new user record dynamically.`
25
+ );
26
+ return undefined;
27
+ }
28
+
29
+ const pEntity = md.Entities.find((e) => e.Name === 'Persons'); // look up the entity info for the Persons entity
30
+ if (!pEntity) {
31
+ LogError('Failed to find Persons entity');
32
+ return undefined;
33
+ }
34
+
35
+ let personId;
36
+ // this block of code only executes if we have an entity called Persons
37
+ const rv = new RunView();
38
+ const viewResults = await rv.RunView(
39
+ {
40
+ EntityName: 'Persons',
41
+ ExtraFilter: `Email = '${email}'`,
42
+ },
43
+ contextUser
44
+ );
45
+
46
+ if (viewResults && viewResults.Success && Array.isArray(viewResults.Results) && viewResults.Results.length > 0) {
47
+ // we have a match so use it
48
+ const row = (viewResults.Results as { ID: number }[])[0]; // we know the rows will have an ID number
49
+ personId = row['ID'];
50
+ }
51
+
52
+ if (!personId) {
53
+ // we don't have a match so create a new person record
54
+ const p = await md.GetEntityObject('Persons', contextUser);
55
+ p.NewRecord(); // assumes we have an entity called Persons that has FirstName/LastName/Email fields
56
+ // this code is commented out because we don't have a strongly typed sub-class generatd for this "Persons" entity as it is a demo/hypothetical example
57
+ //p.FirstName = firstName;
58
+ //p.LastName = lastName;
59
+ //p.Email = email;
60
+ //p.Status = 'active';
61
+ if (await p.Save()) {
62
+ personId = p.FirstPrimaryKey.Value; // if we had a strongly typed sub-class above, we could use this code p.ID;
63
+ } else {
64
+ LogError(`Failed to create new person ${firstName} ${lastName} ${email}`);
65
+ }
66
+ }
67
+
68
+ // now call the base class to create the user, and pass in our LinkedRecordType and ID
69
+ return super.createNewUser(firstName, lastName, email, 'Other', pEntity?.ID, personId);
70
+ } catch (e) {
71
+ LogError(`Error creating new user ${email} ${e}`);
72
+ return undefined;
73
+ }
74
+ }
75
+ }
76
+
77
+ export function LoadExampleNewUserSubClass() {
78
+ // do nothing, just having this forces the above class to get registered via its @RegisterClass decorator
79
+ }
@@ -0,0 +1,171 @@
1
+ import { JwtHeader, SigningKeyCallback } from 'jsonwebtoken';
2
+ import jwksClient from 'jwks-rsa';
3
+ import { auth0Domain, auth0WebClientID, configInfo, tenantID, webClientID } from '../config.js';
4
+ import { UserCache } from '@memberjunction/sqlserver-dataprovider';
5
+ import { DataSource } from 'typeorm';
6
+ import { Metadata, UserInfo } from '@memberjunction/core';
7
+ import { NewUserBase } from './newUsers.js';
8
+ import { MJGlobal } from '@memberjunction/global';
9
+
10
+ export { TokenExpiredError } from './tokenExpiredError.js';
11
+
12
+ const missingAzureConfig = !tenantID || !webClientID;
13
+ const missingAuth0Config = !auth0Domain || !auth0WebClientID;
14
+
15
+ class MissingAuthError extends Error {
16
+ constructor() {
17
+ super('Could not find authentication configuration for either MSAL or Auth0 in the server environment variables.');
18
+ this.name = 'MissingAuthError';
19
+ }
20
+ }
21
+
22
+ const issuers = {
23
+ azure: `https://login.microsoftonline.com/${tenantID}/v2.0`,
24
+ auth0: `https://${auth0Domain}/`,
25
+ };
26
+
27
+ export const validationOptions = {
28
+ [issuers.auth0]: {
29
+ audience: auth0WebClientID,
30
+ jwksUri: `https://${auth0Domain}/.well-known/jwks.json`,
31
+ },
32
+ [issuers.azure]: {
33
+ audience: webClientID,
34
+ jwksUri: `https://login.microsoftonline.com/${tenantID}/discovery/v2.0/keys`,
35
+ },
36
+ };
37
+
38
+ export class UserPayload {
39
+ aio?: string;
40
+ aud?: string;
41
+ exp?: number;
42
+ iat?: number;
43
+ iss?: string;
44
+ name?: string;
45
+ nbf?: number;
46
+ nonce?: string;
47
+ oid?: string;
48
+ preferred_username?: string;
49
+ rh?: string;
50
+ sub?: string;
51
+ tid?: string;
52
+ uti?: string;
53
+ ver?: string;
54
+ // what about an array of roles???
55
+ }
56
+
57
+ export const getSigningKeys = (issuer: string) => (header: JwtHeader, cb: SigningKeyCallback) => {
58
+ if (!validationOptions[issuer]) {
59
+ throw new Error(`No validation options found for issuer ${issuer}`);
60
+ }
61
+
62
+ const jwksUri = validationOptions[issuer].jwksUri;
63
+ if (missingAuth0Config && missingAzureConfig) {
64
+ throw new MissingAuthError();
65
+ }
66
+ if (missingAuth0Config) {
67
+ console.warn('Auth0 configuration not found in environment variables');
68
+ }
69
+ if (missingAzureConfig) {
70
+ console.warn('MSAL configuration not found in environment variables');
71
+ }
72
+
73
+ jwksClient({ jwksUri })
74
+ .getSigningKey(header.kid)
75
+ .then((key) => {
76
+ cb(null, 'publicKey' in key ? key.publicKey : key.rsaPublicKey);
77
+ })
78
+ .catch((err) => console.error(err));
79
+ };
80
+
81
+ export const verifyUserRecord = async (
82
+ email?: string,
83
+ firstName?: string,
84
+ lastName?: string,
85
+ requestDomain?: string,
86
+ dataSource?: DataSource,
87
+ attemptCacheUpdateIfNeeded: boolean = true
88
+ ): Promise<UserInfo | undefined> => {
89
+ if (!email) return undefined;
90
+
91
+ let user = UserCache.Instance.Users.find((u) => {
92
+ if (!u.Email || u.Email.trim() === '') {
93
+ // this condition should never occur. If it doesn throw a console error including the user id
94
+ // DB requires non-null but this is just an extra check and we could in theory have a blank string in the DB
95
+ console.error(`SYSTEM METADATA ISSUE: User ${u.ID} has no email address`);
96
+ return false;
97
+ } else return u.Email.toLowerCase().trim() === email.toLowerCase().trim();
98
+ });
99
+
100
+ if (!user) {
101
+ if (
102
+ configInfo.userHandling.autoCreateNewUsers &&
103
+ firstName &&
104
+ lastName &&
105
+ (requestDomain || configInfo.userHandling.newUserLimitedToAuthorizedDomains === false)
106
+ ) {
107
+ // check to see if the domain that we have a request coming in from matches one of the domains in the autoCreateNewUsersDomains setting
108
+ let passesDomainCheck: boolean =
109
+ configInfo.userHandling.newUserLimitedToAuthorizedDomains ===
110
+ false; /*in this first condition, we are set up to NOT care about domain */
111
+ if (!passesDomainCheck && requestDomain) {
112
+ /*in this second condition, we check the domain against authorized domains*/
113
+ passesDomainCheck = configInfo.userHandling.newUserAuthorizedDomains.some((pattern) => {
114
+ // Convert wildcard domain patterns to regular expressions
115
+ const regex = new RegExp('^' + pattern.toLowerCase().trim().replace(/\./g, '\\.').replace(/\*/g, '.*') + '$');
116
+ return regex.test(requestDomain?.toLowerCase().trim());
117
+ });
118
+ }
119
+
120
+ if (passesDomainCheck) {
121
+ // we have a domain from the request that matches one of the domains provided by the configuration, so we will create a new user
122
+ console.warn(`User ${email} not found in cache. Attempting to create a new user...`);
123
+ const newUserCreator: NewUserBase = <NewUserBase>MJGlobal.Instance.ClassFactory.CreateInstance(NewUserBase); // this will create the object that handles creating the new user for us
124
+ const newUser = await newUserCreator.createNewUser(firstName, lastName, email);
125
+ if (newUser) {
126
+ // new user worked! we already have the stuff we need for the cache, so no need to go to the DB now, just create a new UserInfo object and use the return value from the createNewUser method
127
+ // to init it, including passing in the role list for the user.
128
+ const initData: any = newUser.GetAll();
129
+ initData.UserRoles = configInfo.userHandling.newUserRoles.map((role) => {
130
+ return { UserID: initData.ID, RoleName: role };
131
+ });
132
+ user = new UserInfo(Metadata.Provider, initData);
133
+ UserCache.Instance.Users.push(user);
134
+ console.warn(` >>> New user ${email} created successfully!`);
135
+ }
136
+ } else {
137
+ console.warn(
138
+ `User ${email} not found in cache. Request domain '${requestDomain}' does not match any of the domains in the newUserAuthorizedDomains setting. To ignore domain, make sure you set the newUserLimitedToAuthorizedDomains setting to false. In this case we are NOT creating a new user.`
139
+ );
140
+ }
141
+ }
142
+ if (!user && configInfo.userHandling.updateCacheWhenNotFound && dataSource && attemptCacheUpdateIfNeeded) {
143
+ // if we get here that means in the above, if we were attempting to create a new user, it did not work, or it wasn't attempted and we have a config that asks us to auto update the cache
144
+ console.warn(`User ${email} not found in cache. Updating cache in attempt to find the user...`);
145
+
146
+ const startTime: number = Date.now();
147
+ await UserCache.Instance.Refresh(dataSource);
148
+ const endTime: number = Date.now();
149
+ const elapsed: number = endTime - startTime;
150
+
151
+ // if elapsed time is less than the delay setting, wait for the additional time to achieve the full delay
152
+ // the below also makes sure we never go more than a 30 second total delay
153
+ const delay = configInfo.userHandling.updateCacheWhenNotFoundDelay
154
+ ? configInfo.userHandling.updateCacheWhenNotFoundDelay < 30000
155
+ ? configInfo.userHandling.updateCacheWhenNotFoundDelay
156
+ : 30000
157
+ : 0;
158
+ if (elapsed < delay) await new Promise((resolve) => setTimeout(resolve, delay - elapsed));
159
+
160
+ const finalTime: number = Date.now();
161
+ const finalElapsed: number = finalTime - startTime;
162
+
163
+ console.log(
164
+ ` UserCache updated in ${elapsed}ms, total elapsed time of ${finalElapsed}ms including delay of ${delay}ms (if needed). Attempting to find the user again via recursive call to verifyUserRecord()`
165
+ );
166
+ return verifyUserRecord(email, firstName, lastName, requestDomain, dataSource, false); // try one more time but do not update cache next time if not found
167
+ }
168
+ }
169
+
170
+ return user;
171
+ };
@@ -0,0 +1,58 @@
1
+ import { LogError, Metadata } from "@memberjunction/core";
2
+ import { RegisterClass } from "@memberjunction/global";
3
+ import { UserCache } from "@memberjunction/sqlserver-dataprovider";
4
+ import { configInfo } from "../config.js";
5
+ import { UserEntity, UserRoleEntity } from "@memberjunction/core-entities";
6
+
7
+ @RegisterClass(NewUserBase)
8
+ export class NewUserBase {
9
+ public async createNewUser(firstName: string, lastName: string, email: string, linkedRecordType: string = 'None', linkedEntityId?: string, linkedEntityRecordId?: string) {
10
+ try {
11
+ const md = new Metadata();
12
+ const contextUser = UserCache.Instance.Users.find(u => u.Email.trim().toLowerCase() === configInfo?.userHandling?.contextUserForNewUserCreation?.trim().toLowerCase())
13
+ if (!contextUser) {
14
+ LogError(`Failed to load context user ${configInfo?.userHandling?.contextUserForNewUserCreation}, if you've not specified this on your config.json you must do so. This is the user that is contextually used for creating a new user record dynamically.`);
15
+ return undefined;
16
+ }
17
+ const u = <UserEntity>await md.GetEntityObject('Users', contextUser) // To-Do - change this to be a different defined user for the user creation process
18
+ u.NewRecord();
19
+ u.Name = email;
20
+ u.IsActive = true;
21
+ u.FirstName = firstName;
22
+ u.LastName = lastName;
23
+ u.Email = email;
24
+ u.Type = 'User';
25
+ u.LinkedRecordType = linkedRecordType;
26
+ if (linkedEntityId)
27
+ u.LinkedEntityID = linkedEntityId;
28
+ if (linkedEntityRecordId)
29
+ u.LinkedEntityRecordID = linkedEntityRecordId;
30
+
31
+ if (await u.Save()) {
32
+ // user created, now create however many roles we need to create for this user based on the config settings
33
+ const ur = await md.GetEntityObject<UserRoleEntity>('User Roles', contextUser);
34
+ let bSuccess: boolean = true;
35
+ for (const role of configInfo.userHandling.newUserRoles) {
36
+ ur.NewRecord();
37
+ ur.UserID = u.ID;
38
+ const roleID = md.Roles.find(r => r.Name === role)?.ID;
39
+ ur.RoleID = roleID;
40
+ bSuccess = bSuccess && await ur.Save();
41
+ }
42
+ if (!bSuccess) {
43
+ LogError(`Failed to create roles for newly created user ${firstName} ${lastName} ${email}`);
44
+ return undefined;
45
+ }
46
+ }
47
+ else {
48
+ LogError(`Failed to create new user ${firstName} ${lastName} ${email}`);
49
+ return undefined;
50
+ }
51
+ return u;
52
+ }
53
+ catch (e) {
54
+ LogError(e);
55
+ return undefined;
56
+ }
57
+ }
58
+ }