@memberjunction/server 2.1.2 → 2.1.3

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 (202) hide show
  1. package/dist/apolloServer/TransactionPlugin.d.ts +4 -0
  2. package/dist/apolloServer/TransactionPlugin.d.ts.map +1 -0
  3. package/dist/apolloServer/TransactionPlugin.js +46 -0
  4. package/dist/apolloServer/TransactionPlugin.js.map +1 -0
  5. package/dist/apolloServer/index.d.ts +11 -0
  6. package/dist/apolloServer/index.d.ts.map +1 -0
  7. package/dist/apolloServer/index.js +25 -0
  8. package/dist/apolloServer/index.js.map +1 -0
  9. package/dist/auth/exampleNewUserSubClass.d.ts +6 -0
  10. package/dist/auth/exampleNewUserSubClass.d.ts.map +1 -0
  11. package/dist/auth/exampleNewUserSubClass.js +49 -0
  12. package/dist/auth/exampleNewUserSubClass.js.map +1 -0
  13. package/dist/auth/index.d.ts +30 -0
  14. package/dist/auth/index.d.ts.map +1 -0
  15. package/dist/auth/index.js +121 -0
  16. package/dist/auth/index.js.map +1 -0
  17. package/dist/auth/newUsers.d.ts +5 -0
  18. package/dist/auth/newUsers.d.ts.map +1 -0
  19. package/{src/auth/newUsers.ts → dist/auth/newUsers.js} +20 -14
  20. package/dist/auth/newUsers.js.map +1 -0
  21. package/dist/auth/tokenExpiredError.d.ts +5 -0
  22. package/dist/auth/tokenExpiredError.d.ts.map +1 -0
  23. package/dist/auth/tokenExpiredError.js +12 -0
  24. package/dist/auth/tokenExpiredError.js.map +1 -0
  25. package/dist/cache.d.ts +3 -0
  26. package/dist/cache.d.ts.map +1 -0
  27. package/{src/cache.ts → dist/cache.js} +4 -6
  28. package/dist/cache.js.map +1 -0
  29. package/dist/config.d.ts +196 -0
  30. package/dist/config.d.ts.map +1 -0
  31. package/{src/config.ts → dist/config.js} +25 -49
  32. package/dist/config.js.map +1 -0
  33. package/dist/context.d.ts +17 -0
  34. package/dist/context.d.ts.map +1 -0
  35. package/dist/context.js +84 -0
  36. package/dist/context.js.map +1 -0
  37. package/dist/directives/Public.d.ts +4 -0
  38. package/dist/directives/Public.d.ts.map +1 -0
  39. package/dist/directives/Public.js +30 -0
  40. package/dist/directives/Public.js.map +1 -0
  41. package/dist/directives/index.d.ts +2 -0
  42. package/dist/directives/index.d.ts.map +1 -0
  43. package/dist/directives/index.js +2 -0
  44. package/dist/directives/index.js.map +1 -0
  45. package/dist/entitySubclasses/DuplicateRunEntity.server.d.ts +6 -0
  46. package/dist/entitySubclasses/DuplicateRunEntity.server.d.ts.map +1 -0
  47. package/dist/entitySubclasses/DuplicateRunEntity.server.js +33 -0
  48. package/dist/entitySubclasses/DuplicateRunEntity.server.js.map +1 -0
  49. package/dist/entitySubclasses/entityPermissions.server.d.ts +23 -0
  50. package/dist/entitySubclasses/entityPermissions.server.d.ts.map +1 -0
  51. package/dist/entitySubclasses/entityPermissions.server.js +93 -0
  52. package/dist/entitySubclasses/entityPermissions.server.js.map +1 -0
  53. package/dist/entitySubclasses/userViewEntity.server.d.ts +13 -0
  54. package/dist/entitySubclasses/userViewEntity.server.d.ts.map +1 -0
  55. package/dist/entitySubclasses/userViewEntity.server.js +161 -0
  56. package/dist/entitySubclasses/userViewEntity.server.js.map +1 -0
  57. package/dist/generated/generated.d.ts +6679 -0
  58. package/dist/generated/generated.d.ts.map +1 -0
  59. package/dist/generated/generated.js +40786 -0
  60. package/dist/generated/generated.js.map +1 -0
  61. package/dist/generic/DeleteOptionsInput.d.ts +5 -0
  62. package/dist/generic/DeleteOptionsInput.d.ts.map +1 -0
  63. package/dist/generic/DeleteOptionsInput.js +27 -0
  64. package/dist/generic/DeleteOptionsInput.js.map +1 -0
  65. package/dist/generic/KeyInputOutputTypes.d.ts +16 -0
  66. package/dist/generic/KeyInputOutputTypes.d.ts.map +1 -0
  67. package/dist/generic/KeyInputOutputTypes.js +65 -0
  68. package/dist/generic/KeyInputOutputTypes.js.map +1 -0
  69. package/dist/generic/KeyValuePairInput.d.ts +5 -0
  70. package/dist/generic/KeyValuePairInput.d.ts.map +1 -0
  71. package/dist/generic/KeyValuePairInput.js +27 -0
  72. package/dist/generic/KeyValuePairInput.js.map +1 -0
  73. package/dist/generic/PushStatusResolver.d.ts +14 -0
  74. package/dist/generic/PushStatusResolver.d.ts.map +1 -0
  75. package/dist/generic/PushStatusResolver.js +58 -0
  76. package/dist/generic/PushStatusResolver.js.map +1 -0
  77. package/dist/generic/ResolverBase.d.ts +39 -0
  78. package/dist/generic/ResolverBase.d.ts.map +1 -0
  79. package/dist/generic/ResolverBase.js +573 -0
  80. package/dist/generic/ResolverBase.js.map +1 -0
  81. package/dist/generic/RunViewResolver.d.ts +123 -0
  82. package/dist/generic/RunViewResolver.d.ts.map +1 -0
  83. package/dist/generic/RunViewResolver.js +728 -0
  84. package/dist/generic/RunViewResolver.js.map +1 -0
  85. package/dist/index.d.ts +26 -0
  86. package/dist/index.d.ts.map +1 -0
  87. package/dist/index.js +108 -0
  88. package/dist/index.js.map +1 -0
  89. package/dist/orm.d.ts +4 -0
  90. package/dist/orm.d.ts.map +1 -0
  91. package/dist/orm.js +32 -0
  92. package/dist/orm.js.map +1 -0
  93. package/dist/resolvers/AskSkipResolver.d.ts +54 -0
  94. package/dist/resolvers/AskSkipResolver.d.ts.map +1 -0
  95. package/dist/resolvers/AskSkipResolver.js +805 -0
  96. package/dist/resolvers/AskSkipResolver.js.map +1 -0
  97. package/dist/resolvers/ColorResolver.d.ts +23 -0
  98. package/dist/resolvers/ColorResolver.d.ts.map +1 -0
  99. package/dist/resolvers/ColorResolver.js +97 -0
  100. package/dist/resolvers/ColorResolver.js.map +1 -0
  101. package/dist/resolvers/DatasetResolver.d.ts +42 -0
  102. package/dist/resolvers/DatasetResolver.d.ts.map +1 -0
  103. package/dist/resolvers/DatasetResolver.js +179 -0
  104. package/dist/resolvers/DatasetResolver.js.map +1 -0
  105. package/dist/resolvers/EntityCommunicationsResolver.d.ts +50 -0
  106. package/dist/resolvers/EntityCommunicationsResolver.d.ts.map +1 -0
  107. package/dist/resolvers/EntityCommunicationsResolver.js +280 -0
  108. package/dist/resolvers/EntityCommunicationsResolver.js.map +1 -0
  109. package/dist/resolvers/EntityRecordNameResolver.d.ts +21 -0
  110. package/dist/resolvers/EntityRecordNameResolver.d.ts.map +1 -0
  111. package/dist/resolvers/EntityRecordNameResolver.js +117 -0
  112. package/dist/resolvers/EntityRecordNameResolver.js.map +1 -0
  113. package/dist/resolvers/EntityResolver.d.ts +6 -0
  114. package/dist/resolvers/EntityResolver.d.ts.map +1 -0
  115. package/dist/resolvers/EntityResolver.js +57 -0
  116. package/dist/resolvers/EntityResolver.js.map +1 -0
  117. package/dist/resolvers/FileCategoryResolver.d.ts +6 -0
  118. package/dist/resolvers/FileCategoryResolver.d.ts.map +1 -0
  119. package/dist/resolvers/FileCategoryResolver.js +61 -0
  120. package/dist/resolvers/FileCategoryResolver.js.map +1 -0
  121. package/dist/resolvers/FileResolver.d.ts +24 -0
  122. package/dist/resolvers/FileResolver.d.ts.map +1 -0
  123. package/dist/resolvers/FileResolver.js +166 -0
  124. package/dist/resolvers/FileResolver.js.map +1 -0
  125. package/dist/resolvers/MergeRecordsResolver.d.ts +59 -0
  126. package/dist/resolvers/MergeRecordsResolver.d.ts.map +1 -0
  127. package/dist/resolvers/MergeRecordsResolver.js +282 -0
  128. package/dist/resolvers/MergeRecordsResolver.js.map +1 -0
  129. package/dist/resolvers/PotentialDuplicateRecordResolver.d.ts +29 -0
  130. package/dist/resolvers/PotentialDuplicateRecordResolver.d.ts.map +1 -0
  131. package/dist/resolvers/PotentialDuplicateRecordResolver.js +125 -0
  132. package/dist/resolvers/PotentialDuplicateRecordResolver.js.map +1 -0
  133. package/dist/resolvers/QueryResolver.d.ts +13 -0
  134. package/dist/resolvers/QueryResolver.d.ts.map +1 -0
  135. package/dist/resolvers/QueryResolver.js +77 -0
  136. package/dist/resolvers/QueryResolver.js.map +1 -0
  137. package/dist/resolvers/ReportResolver.d.ts +20 -0
  138. package/dist/resolvers/ReportResolver.d.ts.map +1 -0
  139. package/dist/resolvers/ReportResolver.js +182 -0
  140. package/dist/resolvers/ReportResolver.js.map +1 -0
  141. package/dist/resolvers/UserFavoriteResolver.d.ts +42 -0
  142. package/dist/resolvers/UserFavoriteResolver.d.ts.map +1 -0
  143. package/dist/resolvers/UserFavoriteResolver.js +230 -0
  144. package/dist/resolvers/UserFavoriteResolver.js.map +1 -0
  145. package/dist/resolvers/UserResolver.d.ts +10 -0
  146. package/dist/resolvers/UserResolver.d.ts.map +1 -0
  147. package/dist/resolvers/UserResolver.js +71 -0
  148. package/dist/resolvers/UserResolver.js.map +1 -0
  149. package/dist/resolvers/UserViewResolver.d.ts +13 -0
  150. package/dist/resolvers/UserViewResolver.d.ts.map +1 -0
  151. package/dist/resolvers/UserViewResolver.js +99 -0
  152. package/dist/resolvers/UserViewResolver.js.map +1 -0
  153. package/dist/types.d.ts +37 -0
  154. package/dist/types.d.ts.map +1 -0
  155. package/dist/types.js +2 -0
  156. package/dist/types.js.map +1 -0
  157. package/dist/util.d.ts +4 -0
  158. package/dist/util.d.ts.map +1 -0
  159. package/dist/util.js +85 -0
  160. package/dist/util.js.map +1 -0
  161. package/package.json +25 -21
  162. package/CHANGELOG.json +0 -3389
  163. package/CHANGELOG.md +0 -739
  164. package/src/apolloServer/TransactionPlugin.ts +0 -57
  165. package/src/apolloServer/index.ts +0 -33
  166. package/src/auth/exampleNewUserSubClass.ts +0 -74
  167. package/src/auth/index.ts +0 -151
  168. package/src/auth/tokenExpiredError.ts +0 -12
  169. package/src/context.ts +0 -111
  170. package/src/directives/Public.ts +0 -42
  171. package/src/directives/index.ts +0 -1
  172. package/src/entitySubclasses/DuplicateRunEntity.server.ts +0 -29
  173. package/src/entitySubclasses/entityPermissions.server.ts +0 -111
  174. package/src/entitySubclasses/userViewEntity.server.ts +0 -187
  175. package/src/generated/generated.ts +0 -25369
  176. package/src/generic/DeleteOptionsInput.ts +0 -13
  177. package/src/generic/KeyInputOutputTypes.ts +0 -35
  178. package/src/generic/KeyValuePairInput.ts +0 -14
  179. package/src/generic/PushStatusResolver.ts +0 -40
  180. package/src/generic/ResolverBase.ts +0 -767
  181. package/src/generic/RunViewResolver.ts +0 -582
  182. package/src/index.ts +0 -161
  183. package/src/orm.ts +0 -36
  184. package/src/resolvers/AskSkipResolver.ts +0 -926
  185. package/src/resolvers/ColorResolver.ts +0 -61
  186. package/src/resolvers/DatasetResolver.ts +0 -115
  187. package/src/resolvers/EntityCommunicationsResolver.ts +0 -216
  188. package/src/resolvers/EntityRecordNameResolver.ts +0 -78
  189. package/src/resolvers/EntityResolver.ts +0 -37
  190. package/src/resolvers/FileCategoryResolver.ts +0 -62
  191. package/src/resolvers/FileResolver.ts +0 -147
  192. package/src/resolvers/MergeRecordsResolver.ts +0 -182
  193. package/src/resolvers/PotentialDuplicateRecordResolver.ts +0 -91
  194. package/src/resolvers/QueryResolver.ts +0 -42
  195. package/src/resolvers/ReportResolver.ts +0 -147
  196. package/src/resolvers/UserFavoriteResolver.ts +0 -166
  197. package/src/resolvers/UserResolver.ts +0 -33
  198. package/src/resolvers/UserViewResolver.ts +0 -64
  199. package/src/types.ts +0 -40
  200. package/src/util.ts +0 -106
  201. package/tsconfig.json +0 -30
  202. package/typedoc.json +0 -4
@@ -0,0 +1,4 @@
1
+ import { ApolloServerPlugin } from '@apollo/server';
2
+ import { AppContext } from '../types';
3
+ export declare const TransactionPlugin: ApolloServerPlugin<AppContext>;
4
+ //# sourceMappingURL=TransactionPlugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TransactionPlugin.d.ts","sourceRoot":"","sources":["../../src/apolloServer/TransactionPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAgF,MAAM,gBAAgB,CAAC;AAElI,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,eAAO,MAAM,iBAAiB,EAAE,kBAAkB,CAAC,UAAU,CAoD5D,CAAC"}
@@ -0,0 +1,46 @@
1
+ export const TransactionPlugin = {
2
+ async requestDidStart(requestContext) {
3
+ const start = Date.now();
4
+ const query = requestContext.request.query || '';
5
+ const isMutation = /^\s*mutation\b/i.test(query);
6
+ if (!isMutation) {
7
+ return null;
8
+ }
9
+ const dataSource = requestContext.contextValue.dataSource;
10
+ const queryRunner = dataSource.createQueryRunner();
11
+ requestContext.contextValue.queryRunner = queryRunner;
12
+ console.log('Starting transaction wrapper, time spent: ', Date.now() - start, 'ms ');
13
+ await queryRunner.startTransaction();
14
+ return {
15
+ didEncounterErrors: async (requestContext) => {
16
+ console.log('Error in transaction wrapper: ' + requestContext.errors, 'time spent: ', Date.now() - start, 'ms');
17
+ },
18
+ executionDidStart: async () => {
19
+ return {
20
+ executionDidEnd: async (err) => {
21
+ try {
22
+ if (err) {
23
+ console.log('Error in transaction, rolling back, time spent: ', Date.now() - start, 'ms ');
24
+ console.error('Rolling back transaction', err);
25
+ await queryRunner.rollbackTransaction();
26
+ }
27
+ else {
28
+ console.log('Committing transaction, time spent: ', Date.now() - start, 'ms ');
29
+ await queryRunner.commitTransaction();
30
+ }
31
+ }
32
+ catch (execErr) {
33
+ console.log('Execution Error, time spent: ', Date.now() - start, 'ms ');
34
+ console.error(execErr);
35
+ }
36
+ finally {
37
+ await queryRunner.release();
38
+ console.log('Transaction complete, time spent: ', Date.now() - start, 'ms ');
39
+ }
40
+ },
41
+ };
42
+ },
43
+ };
44
+ },
45
+ };
46
+ //# sourceMappingURL=TransactionPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TransactionPlugin.js","sourceRoot":"","sources":["../../src/apolloServer/TransactionPlugin.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,iBAAiB,GAAmC;IAC/D,KAAK,CAAC,eAAe,CAAC,cAAc;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QACjD,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEjD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC;QAKD,MAAM,UAAU,GAAe,cAAc,CAAC,YAAY,CAAC,UAAU,CAAC;QACtE,MAAM,WAAW,GAAG,UAAU,CAAC,iBAAiB,EAAE,CAAC;QAEnD,cAAc,CAAC,YAAY,CAAC,WAAW,GAAG,WAAW,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,4CAA4C,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC;QACrF,MAAM,WAAW,CAAC,gBAAgB,EAAE,CAAC;QAErC,OAAO;YACL,kBAAkB,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE;gBAC3C,OAAO,CAAC,GAAG,CAAC,gCAAgC,GAAG,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC;YAClH,CAAC;YACD,iBAAiB,EAAE,KAAK,IAAI,EAAE;gBAC5B,OAAO;oBACL,eAAe,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;wBAC7B,IAAI,CAAC;4BACH,IAAI,GAAG,EAAE,CAAC;gCACR,OAAO,CAAC,GAAG,CACT,kDAAkD,EAClD,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAClB,KAAK,CACN,CAAC;gCACF,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;gCAC/C,MAAM,WAAW,CAAC,mBAAmB,EAAE,CAAC;4BAC1C,CAAC;iCAAM,CAAC;gCACN,OAAO,CAAC,GAAG,CAAC,sCAAsC,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC;gCAC/E,MAAM,WAAW,CAAC,iBAAiB,EAAE,CAAC;4BACxC,CAAC;wBACH,CAAC;wBAAC,OAAO,OAAO,EAAE,CAAC;4BACjB,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC;4BACxE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;wBACzB,CAAC;gCAAS,CAAC;4BACT,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;4BAC5B,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC;wBAC/E,CAAC;oBACH,CAAC;iBACF,CAAC;YACJ,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,11 @@
1
+ /// <reference types="node" />
2
+ import { ApolloServer, ApolloServerOptions } from '@apollo/server';
3
+ import { Disposable } from 'graphql-ws';
4
+ import { Server } from 'http';
5
+ import { AppContext } from '../types';
6
+ declare const buildApolloServer: (configOverride: ApolloServerOptions<AppContext>, { httpServer, serverCleanup }: {
7
+ httpServer: Server;
8
+ serverCleanup: Disposable;
9
+ }) => ApolloServer<AppContext>;
10
+ export default buildApolloServer;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/apolloServer/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAEnE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGtC,QAAA,MAAM,iBAAiB,mBACL,oBAAoB,UAAU,CAAC,iCAChB;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,UAAU,CAAA;CAAE,6BAoB9E,CAAC;AAEL,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { ApolloServer } from '@apollo/server';
2
+ import { ApolloServerPluginDrainHttpServer } from '@apollo/server/plugin/drainHttpServer';
3
+ import { enableIntrospection } from '../config';
4
+ import { TransactionPlugin } from './TransactionPlugin';
5
+ const buildApolloServer = (configOverride, { httpServer, serverCleanup }) => new ApolloServer({
6
+ csrfPrevention: true,
7
+ cache: 'bounded',
8
+ plugins: [
9
+ ApolloServerPluginDrainHttpServer({ httpServer }),
10
+ TransactionPlugin,
11
+ {
12
+ async serverWillStart() {
13
+ return {
14
+ async drainServer() {
15
+ await serverCleanup.dispose();
16
+ },
17
+ };
18
+ },
19
+ },
20
+ ],
21
+ introspection: enableIntrospection,
22
+ ...configOverride,
23
+ });
24
+ export default buildApolloServer;
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/apolloServer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAuB,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,iCAAiC,EAAE,MAAM,uCAAuC,CAAC;AAG1F,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,iBAAiB,GAAG,CACxB,cAA+C,EAC/C,EAAE,UAAU,EAAE,aAAa,EAAqD,EAChF,EAAE,CACF,IAAI,YAAY,CAAC;IACf,cAAc,EAAE,IAAI;IACpB,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE;QACP,iCAAiC,CAAC,EAAE,UAAU,EAAE,CAAC;QACjD,iBAAiB;QACjB;YACE,KAAK,CAAC,eAAe;gBACnB,OAAO;oBACL,KAAK,CAAC,WAAW;wBACf,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC;oBAChC,CAAC;iBACF,CAAC;YACJ,CAAC;SACF;KACF;IACD,aAAa,EAAE,mBAAmB;IAClC,GAAG,cAAc;CAClB,CAAC,CAAC;AAEL,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { NewUserBase } from "./newUsers";
2
+ export declare class ExampleNewUserSubClass extends NewUserBase {
3
+ createNewUser(firstName: string, lastName: string, email: string): Promise<import("@memberjunction/core-entities").UserEntity>;
4
+ }
5
+ export declare function LoadExampleNewUserSubClass(): void;
6
+ //# sourceMappingURL=exampleNewUserSubClass.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exampleNewUserSubClass.d.ts","sourceRoot":"","sources":["../../src/auth/exampleNewUserSubClass.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAYzC,qBAAa,sBAAuB,SAAQ,WAAW;IAC7B,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;CAsDzF;AAED,wBAAgB,0BAA0B,SAEzC"}
@@ -0,0 +1,49 @@
1
+ import { Metadata, RunView, LogError } from "@memberjunction/core";
2
+ import { NewUserBase } from "./newUsers";
3
+ import { UserCache } from "@memberjunction/sqlserver-dataprovider";
4
+ import { configInfo } from "../config";
5
+ export class ExampleNewUserSubClass extends NewUserBase {
6
+ async createNewUser(firstName, lastName, email) {
7
+ try {
8
+ const md = new Metadata();
9
+ const contextUser = UserCache.Instance.Users.find(u => u.Email.trim().toLowerCase() === configInfo?.userHandling?.contextUserForNewUserCreation?.trim().toLowerCase());
10
+ if (!contextUser) {
11
+ 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.`);
12
+ return undefined;
13
+ }
14
+ const pEntity = md.Entities.find(e => e.Name === 'Persons');
15
+ if (!pEntity) {
16
+ LogError('Failed to find Persons entity');
17
+ return undefined;
18
+ }
19
+ let personId;
20
+ const rv = new RunView();
21
+ const viewResults = await rv.RunView({
22
+ EntityName: 'Persons',
23
+ ExtraFilter: `Email = '${email}'`
24
+ }, contextUser);
25
+ if (viewResults && viewResults.Success && Array.isArray(viewResults.Results) && viewResults.Results.length > 0) {
26
+ const row = viewResults.Results[0];
27
+ personId = row['ID'];
28
+ }
29
+ if (!personId) {
30
+ const p = await md.GetEntityObject('Persons', contextUser);
31
+ p.NewRecord();
32
+ if (await p.Save()) {
33
+ personId = p.FirstPrimaryKey.Value;
34
+ }
35
+ else {
36
+ LogError(`Failed to create new person ${firstName} ${lastName} ${email}`);
37
+ }
38
+ }
39
+ return super.createNewUser(firstName, lastName, email, 'Other', pEntity?.ID, personId);
40
+ }
41
+ catch (e) {
42
+ LogError(`Error creating new user ${email} ${e}`);
43
+ return undefined;
44
+ }
45
+ }
46
+ }
47
+ export function LoadExampleNewUserSubClass() {
48
+ }
49
+ //# sourceMappingURL=exampleNewUserSubClass.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exampleNewUserSubClass.js","sourceRoot":"","sources":["../../src/auth/exampleNewUserSubClass.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAUvC,MAAM,OAAO,sBAAuB,SAAQ,WAAW;IACnC,KAAK,CAAC,aAAa,CAAC,SAAiB,EAAE,QAAgB,EAAE,KAAa;QAClF,IAAI,CAAC;YACD,MAAM,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC1B,MAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,UAAU,EAAE,YAAY,EAAE,6BAA6B,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAA;YACtK,IAAG,CAAC,WAAW,EAAE,CAAC;gBACd,QAAQ,CAAC,+BAA+B,UAAU,EAAE,YAAY,EAAE,6BAA6B,2JAA2J,CAAC,CAAC;gBAC5P,OAAO,SAAS,CAAC;YACrB,CAAC;YAED,MAAM,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;YAC5D,IAAI,CAAC,OAAO,EAAE,CAAC;gBACX,QAAQ,CAAC,+BAA+B,CAAC,CAAC;gBAC1C,OAAO,SAAS,CAAC;YACrB,CAAC;YAED,IAAI,QAAQ,CAAC;YAEb,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;YACzB,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC;gBACjC,UAAU,EAAE,SAAS;gBACrB,WAAW,EAAE,YAAY,KAAK,GAAG;aACpC,EAAE,WAAW,CAAC,CAAA;YAEf,IAAI,WAAW,IAAI,WAAW,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAE7G,MAAM,GAAG,GAAI,WAAW,CAAC,OAA4B,CAAC,CAAC,CAAC,CAAC;gBACzD,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;YAED,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAEZ,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;gBAC3D,CAAC,CAAC,SAAS,EAAE,CAAC;gBAMd,IAAI,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;oBACjB,QAAQ,GAAG,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC;gBACvC,CAAC;qBACI,CAAC;oBACF,QAAQ,CAAC,+BAA+B,SAAS,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC,CAAA;gBAC7E,CAAC;YACL,CAAC;YAGD,OAAO,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC3F,CAAC;QACD,OAAO,CAAC,EAAE,CAAC;YACP,QAAQ,CAAC,2BAA2B,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;YAClD,OAAO,SAAS,CAAC;QACrB,CAAC;IACL,CAAC;CACJ;AAED,MAAM,UAAU,0BAA0B;AAE1C,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { JwtHeader, SigningKeyCallback } from 'jsonwebtoken';
2
+ import { DataSource } from 'typeorm';
3
+ import { UserInfo } from '@memberjunction/core';
4
+ export * from './tokenExpiredError';
5
+ export declare const validationOptions: {
6
+ [x: string]: {
7
+ audience: string;
8
+ jwksUri: string;
9
+ };
10
+ };
11
+ export declare class UserPayload {
12
+ aio?: string;
13
+ aud?: string;
14
+ exp?: number;
15
+ iat?: number;
16
+ iss?: string;
17
+ name?: string;
18
+ nbf?: number;
19
+ nonce?: string;
20
+ oid?: string;
21
+ preferred_username?: string;
22
+ rh?: string;
23
+ sub?: string;
24
+ tid?: string;
25
+ uti?: string;
26
+ ver?: string;
27
+ }
28
+ export declare const getSigningKeys: (issuer: string) => (header: JwtHeader, cb: SigningKeyCallback) => void;
29
+ export declare const verifyUserRecord: (email?: string, firstName?: string, lastName?: string, requestDomain?: string, dataSource?: DataSource, attemptCacheUpdateIfNeeded?: boolean) => Promise<UserInfo | undefined>;
30
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAI7D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAY,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAI1D,cAAc,qBAAqB,CAAC;AAiBpC,eAAO,MAAM,iBAAiB;;;;;CAS7B,CAAC;AAEF,qBAAa,WAAW;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CAEd;AAED,eAAO,MAAM,cAAc,WAAY,MAAM,cAAc,SAAS,MAAM,kBAAkB,SAsB3F,CAAC;AAEF,eAAO,MAAM,gBAAgB,WAAkB,MAAM,cAAc,MAAM,aAAa,MAAM,kBAAkB,MAAM,eAAe,UAAU,+BAA8B,OAAO,KAAU,QAAQ,QAAQ,GAAG,SAAS,CAsEvN,CAAC"}
@@ -0,0 +1,121 @@
1
+ import jwksClient from 'jwks-rsa';
2
+ import { auth0Domain, auth0WebClientID, configInfo, tenantID, webClientID } from '../config';
3
+ import { UserCache } from '@memberjunction/sqlserver-dataprovider';
4
+ import { Metadata, UserInfo } from '@memberjunction/core';
5
+ import { NewUserBase } from './newUsers';
6
+ import { MJGlobal } from '@memberjunction/global';
7
+ export * from './tokenExpiredError';
8
+ const missingAzureConfig = !tenantID || !webClientID;
9
+ const missingAuth0Config = !auth0Domain || !auth0WebClientID;
10
+ class MissingAuthError extends Error {
11
+ constructor() {
12
+ super('Could not find authentication configuration for either MSAL or Auth0 in the server environment variables.');
13
+ this.name = 'MissingAuthError';
14
+ }
15
+ }
16
+ const issuers = {
17
+ azure: `https://login.microsoftonline.com/${tenantID}/v2.0`,
18
+ auth0: `https://${auth0Domain}/`,
19
+ };
20
+ export const validationOptions = {
21
+ [issuers.auth0]: {
22
+ audience: auth0WebClientID,
23
+ jwksUri: `https://${auth0Domain}/.well-known/jwks.json`,
24
+ },
25
+ [issuers.azure]: {
26
+ audience: webClientID,
27
+ jwksUri: `https://login.microsoftonline.com/${tenantID}/discovery/v2.0/keys`,
28
+ },
29
+ };
30
+ export class UserPayload {
31
+ aio;
32
+ aud;
33
+ exp;
34
+ iat;
35
+ iss;
36
+ name;
37
+ nbf;
38
+ nonce;
39
+ oid;
40
+ preferred_username;
41
+ rh;
42
+ sub;
43
+ tid;
44
+ uti;
45
+ ver;
46
+ }
47
+ export const getSigningKeys = (issuer) => (header, cb) => {
48
+ if (!validationOptions[issuer]) {
49
+ throw new Error(`No validation options found for issuer ${issuer}`);
50
+ }
51
+ const jwksUri = validationOptions[issuer].jwksUri;
52
+ if (missingAuth0Config && missingAzureConfig) {
53
+ throw new MissingAuthError();
54
+ }
55
+ if (missingAuth0Config) {
56
+ console.warn('Auth0 configuration not found in environment variables');
57
+ }
58
+ if (missingAzureConfig) {
59
+ console.warn('MSAL configuration not found in environment variables');
60
+ }
61
+ jwksClient({ jwksUri })
62
+ .getSigningKey(header.kid)
63
+ .then((key) => {
64
+ cb(null, 'publicKey' in key ? key.publicKey : key.rsaPublicKey);
65
+ })
66
+ .catch((err) => console.error(err));
67
+ };
68
+ export const verifyUserRecord = async (email, firstName, lastName, requestDomain, dataSource, attemptCacheUpdateIfNeeded = true) => {
69
+ if (!email)
70
+ return undefined;
71
+ let user = UserCache.Instance.Users.find((u) => {
72
+ if (!u.Email || u.Email.trim() === '') {
73
+ console.error(`SYSTEM METADATA ISSUE: User ${u.ID} has no email address`);
74
+ return false;
75
+ }
76
+ else
77
+ return u.Email.toLowerCase().trim() === email.toLowerCase().trim();
78
+ });
79
+ if (!user) {
80
+ if (configInfo.userHandling.autoCreateNewUsers && firstName && lastName && (requestDomain || configInfo.userHandling.newUserLimitedToAuthorizedDomains === false)) {
81
+ let passesDomainCheck = configInfo.userHandling.newUserLimitedToAuthorizedDomains === false;
82
+ if (!passesDomainCheck && requestDomain) {
83
+ passesDomainCheck = configInfo.userHandling.newUserAuthorizedDomains.some((pattern) => {
84
+ const regex = new RegExp('^' + pattern.toLowerCase().trim().replace(/\./g, '\\.').replace(/\*/g, '.*') + '$');
85
+ return regex.test(requestDomain?.toLowerCase().trim());
86
+ });
87
+ }
88
+ if (passesDomainCheck) {
89
+ console.warn(`User ${email} not found in cache. Attempting to create a new user...`);
90
+ const newUserCreator = MJGlobal.Instance.ClassFactory.CreateInstance(NewUserBase);
91
+ const newUser = await newUserCreator.createNewUser(firstName, lastName, email);
92
+ if (newUser) {
93
+ const initData = newUser.GetAll();
94
+ initData.UserRoles = configInfo.userHandling.newUserRoles.map((role) => { return { UserID: initData.ID, RoleName: role }; });
95
+ user = new UserInfo(Metadata.Provider, initData);
96
+ UserCache.Instance.Users.push(user);
97
+ console.warn(` >>> New user ${email} created successfully!`);
98
+ }
99
+ }
100
+ else {
101
+ console.warn(`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.`);
102
+ }
103
+ }
104
+ if (!user && configInfo.userHandling.updateCacheWhenNotFound && dataSource && attemptCacheUpdateIfNeeded) {
105
+ console.warn(`User ${email} not found in cache. Updating cache in attempt to find the user...`);
106
+ const startTime = Date.now();
107
+ await UserCache.Instance.Refresh(dataSource);
108
+ const endTime = Date.now();
109
+ const elapsed = endTime - startTime;
110
+ const delay = configInfo.userHandling.updateCacheWhenNotFoundDelay ? (configInfo.userHandling.updateCacheWhenNotFoundDelay < 30000 ? configInfo.userHandling.updateCacheWhenNotFoundDelay : 30000) : 0;
111
+ if (elapsed < delay)
112
+ await new Promise(resolve => setTimeout(resolve, delay - elapsed));
113
+ const finalTime = Date.now();
114
+ const finalElapsed = finalTime - startTime;
115
+ console.log(` 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()`);
116
+ return verifyUserRecord(email, firstName, lastName, requestDomain, dataSource, false);
117
+ }
118
+ }
119
+ return user;
120
+ };
121
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { UserEntity } from "@memberjunction/core-entities";
2
+ export declare class NewUserBase {
3
+ createNewUser(firstName: string, lastName: string, email: string, linkedRecordType?: string, linkedEntityId?: string, linkedEntityRecordId?: string): Promise<UserEntity>;
4
+ }
5
+ //# sourceMappingURL=newUsers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"newUsers.d.ts","sourceRoot":"","sources":["../../src/auth/newUsers.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAkB,MAAM,+BAA+B,CAAC;AAE3E,qBACa,WAAW;IACP,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,GAAE,MAAe,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,oBAAoB,CAAC,EAAE,MAAM;CAiD3K"}
@@ -1,20 +1,23 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
1
7
  import { LogError, Metadata } from "@memberjunction/core";
2
8
  import { RegisterClass } from "@memberjunction/global";
3
9
  import { UserCache } from "@memberjunction/sqlserver-dataprovider";
4
10
  import { configInfo } from "../config";
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) {
11
+ let NewUserBase = class NewUserBase {
12
+ async createNewUser(firstName, lastName, email, linkedRecordType = 'None', linkedEntityId, linkedEntityRecordId) {
10
13
  try {
11
14
  const md = new Metadata();
12
- const contextUser = UserCache.Instance.Users.find(u => u.Email.trim().toLowerCase() === configInfo?.userHandling?.contextUserForNewUserCreation?.trim().toLowerCase())
15
+ const contextUser = UserCache.Instance.Users.find(u => u.Email.trim().toLowerCase() === configInfo?.userHandling?.contextUserForNewUserCreation?.trim().toLowerCase());
13
16
  if (!contextUser) {
14
17
  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
18
  return undefined;
16
19
  }
17
- const u = <UserEntity>await md.GetEntityObject('Users', contextUser) // To-Do - change this to be a different defined user for the user creation process
20
+ const u = await md.GetEntityObject('Users', contextUser);
18
21
  u.NewRecord();
19
22
  u.Name = email;
20
23
  u.IsActive = true;
@@ -27,15 +30,13 @@ export class NewUserBase {
27
30
  u.LinkedEntityID = linkedEntityId;
28
31
  if (linkedEntityRecordId)
29
32
  u.LinkedEntityRecordID = linkedEntityRecordId;
30
-
31
33
  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;
34
+ const ur = await md.GetEntityObject('User Roles', contextUser);
35
+ let bSuccess = true;
35
36
  for (const role of configInfo.userHandling.newUserRoles) {
36
37
  ur.NewRecord();
37
38
  ur.UserID = u.ID;
38
- const roleID = md.Roles.find(r => r.Name === role)?.ID;
39
+ const roleID = md.Roles.find(r => r.Name === role)?.ID;
39
40
  ur.RoleID = roleID;
40
41
  bSuccess = bSuccess && await ur.Save();
41
42
  }
@@ -48,11 +49,16 @@ export class NewUserBase {
48
49
  LogError(`Failed to create new user ${firstName} ${lastName} ${email}`);
49
50
  return undefined;
50
51
  }
51
- return u;
52
+ return u;
52
53
  }
53
54
  catch (e) {
54
55
  LogError(e);
55
56
  return undefined;
56
57
  }
57
58
  }
58
- }
59
+ };
60
+ NewUserBase = __decorate([
61
+ RegisterClass(NewUserBase)
62
+ ], NewUserBase);
63
+ export { NewUserBase };
64
+ //# sourceMappingURL=newUsers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"newUsers.js","sourceRoot":"","sources":["../../src/auth/newUsers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { GraphQLError } from 'graphql';
2
+ export declare class TokenExpiredError extends GraphQLError {
3
+ constructor(expiryDate: Date, message?: string);
4
+ }
5
+ //# sourceMappingURL=tokenExpiredError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenExpiredError.d.ts","sourceRoot":"","sources":["../../src/auth/tokenExpiredError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,qBAAa,iBAAkB,SAAQ,YAAY;gBACrC,UAAU,EAAE,IAAI,EAAE,OAAO,SAA+D;CAQrG"}
@@ -0,0 +1,12 @@
1
+ import { GraphQLError } from 'graphql';
2
+ export class TokenExpiredError extends GraphQLError {
3
+ constructor(expiryDate, message = 'The provided token has expired. Please authenticate again.') {
4
+ super(message, {
5
+ extensions: {
6
+ code: 'JWT_EXPIRED',
7
+ expiryDate: expiryDate.toISOString(),
8
+ },
9
+ });
10
+ }
11
+ }
12
+ //# sourceMappingURL=tokenExpiredError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenExpiredError.js","sourceRoot":"","sources":["../../src/auth/tokenExpiredError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,MAAM,OAAO,iBAAkB,SAAQ,YAAY;IACjD,YAAY,UAAgB,EAAE,OAAO,GAAG,4DAA4D;QAClG,KAAK,CAAC,OAAO,EAAE;YACb,UAAU,EAAE;gBACV,IAAI,EAAE,aAAa;gBACnB,UAAU,EAAE,UAAU,CAAC,WAAW,EAAE;aACrC;SACF,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,3 @@
1
+ import { LRUCache } from 'lru-cache';
2
+ export declare const authCache: LRUCache<{}, {}, unknown>;
3
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAIrC,eAAO,MAAM,SAAS,2BAIpB,CAAC"}
@@ -1,10 +1,8 @@
1
1
  import { LRUCache } from 'lru-cache';
2
-
3
2
  const oneHourMs = 60 * 60 * 1000;
4
-
5
3
  export const authCache = new LRUCache({
6
- max: 50000,
7
- ttl: oneHourMs,
8
- ttlAutopurge: false,
4
+ max: 50000,
5
+ ttl: oneHourMs,
6
+ ttlAutopurge: false,
9
7
  });
10
-
8
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,MAAM,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEjC,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,QAAQ,CAAC;IACpC,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,SAAS;IACd,YAAY,EAAE,KAAK;CACpB,CAAC,CAAC"}