@memberjunction/server 2.1.2 → 2.1.4

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,196 @@
1
+ import { z } from 'zod';
2
+ export declare const nodeEnv: string;
3
+ export declare const dbHost: string;
4
+ export declare const dbPort: number;
5
+ export declare const dbUsername: string;
6
+ export declare const dbPassword: string;
7
+ export declare const dbDatabase: string;
8
+ export declare const dbInstanceName: string;
9
+ export declare const dbTrustServerCertificate: boolean;
10
+ export declare const graphqlPort: number;
11
+ export declare const ___codeGenAPIURL: string;
12
+ export declare const ___codeGenAPIPort: number;
13
+ export declare const ___codeGenAPISubmissionDelay: number;
14
+ export declare const graphqlRootPath: string;
15
+ export declare const webClientID: string;
16
+ export declare const tenantID: string;
17
+ export declare const enableIntrospection: boolean;
18
+ export declare const websiteRunFromPackage: number;
19
+ export declare const userEmailMap: Record<string, string>;
20
+ export declare const ___skipAPIurl: string;
21
+ export declare const ___skipAPIOrgId: string;
22
+ export declare const auth0Domain: string;
23
+ export declare const auth0WebClientID: string;
24
+ export declare const auth0ClientSecret: string;
25
+ export declare const mj_core_schema: string;
26
+ export declare const configFile: string;
27
+ declare const userHandlingInfoSchema: z.ZodObject<{
28
+ autoCreateNewUsers: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
29
+ newUserLimitedToAuthorizedDomains: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
30
+ newUserAuthorizedDomains: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
31
+ newUserRoles: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
32
+ updateCacheWhenNotFound: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
33
+ updateCacheWhenNotFoundDelay: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
34
+ contextUserForNewUserCreation: z.ZodDefault<z.ZodOptional<z.ZodString>>;
35
+ }, "strip", z.ZodTypeAny, {
36
+ autoCreateNewUsers?: boolean;
37
+ newUserLimitedToAuthorizedDomains?: boolean;
38
+ newUserAuthorizedDomains?: string[];
39
+ newUserRoles?: string[];
40
+ updateCacheWhenNotFound?: boolean;
41
+ updateCacheWhenNotFoundDelay?: number;
42
+ contextUserForNewUserCreation?: string;
43
+ }, {
44
+ autoCreateNewUsers?: boolean;
45
+ newUserLimitedToAuthorizedDomains?: boolean;
46
+ newUserAuthorizedDomains?: string[];
47
+ newUserRoles?: string[];
48
+ updateCacheWhenNotFound?: boolean;
49
+ updateCacheWhenNotFoundDelay?: number;
50
+ contextUserForNewUserCreation?: string;
51
+ }>;
52
+ declare const databaseSettingsInfoSchema: z.ZodObject<{
53
+ connectionTimeout: z.ZodNumber;
54
+ requestTimeout: z.ZodNumber;
55
+ metadataCacheRefreshInterval: z.ZodNumber;
56
+ }, "strip", z.ZodTypeAny, {
57
+ connectionTimeout?: number;
58
+ requestTimeout?: number;
59
+ metadataCacheRefreshInterval?: number;
60
+ }, {
61
+ connectionTimeout?: number;
62
+ requestTimeout?: number;
63
+ metadataCacheRefreshInterval?: number;
64
+ }>;
65
+ declare const viewingSystemInfoSchema: z.ZodObject<{
66
+ enableSmartFilters: z.ZodOptional<z.ZodBoolean>;
67
+ }, "strip", z.ZodTypeAny, {
68
+ enableSmartFilters?: boolean;
69
+ }, {
70
+ enableSmartFilters?: boolean;
71
+ }>;
72
+ declare const configInfoSchema: z.ZodObject<{
73
+ userHandling: z.ZodObject<{
74
+ autoCreateNewUsers: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
75
+ newUserLimitedToAuthorizedDomains: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
76
+ newUserAuthorizedDomains: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
77
+ newUserRoles: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
78
+ updateCacheWhenNotFound: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
79
+ updateCacheWhenNotFoundDelay: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
80
+ contextUserForNewUserCreation: z.ZodDefault<z.ZodOptional<z.ZodString>>;
81
+ }, "strip", z.ZodTypeAny, {
82
+ autoCreateNewUsers?: boolean;
83
+ newUserLimitedToAuthorizedDomains?: boolean;
84
+ newUserAuthorizedDomains?: string[];
85
+ newUserRoles?: string[];
86
+ updateCacheWhenNotFound?: boolean;
87
+ updateCacheWhenNotFoundDelay?: number;
88
+ contextUserForNewUserCreation?: string;
89
+ }, {
90
+ autoCreateNewUsers?: boolean;
91
+ newUserLimitedToAuthorizedDomains?: boolean;
92
+ newUserAuthorizedDomains?: string[];
93
+ newUserRoles?: string[];
94
+ updateCacheWhenNotFound?: boolean;
95
+ updateCacheWhenNotFoundDelay?: number;
96
+ contextUserForNewUserCreation?: string;
97
+ }>;
98
+ databaseSettings: z.ZodObject<{
99
+ connectionTimeout: z.ZodNumber;
100
+ requestTimeout: z.ZodNumber;
101
+ metadataCacheRefreshInterval: z.ZodNumber;
102
+ }, "strip", z.ZodTypeAny, {
103
+ connectionTimeout?: number;
104
+ requestTimeout?: number;
105
+ metadataCacheRefreshInterval?: number;
106
+ }, {
107
+ connectionTimeout?: number;
108
+ requestTimeout?: number;
109
+ metadataCacheRefreshInterval?: number;
110
+ }>;
111
+ viewingSystem: z.ZodOptional<z.ZodObject<{
112
+ enableSmartFilters: z.ZodOptional<z.ZodBoolean>;
113
+ }, "strip", z.ZodTypeAny, {
114
+ enableSmartFilters?: boolean;
115
+ }, {
116
+ enableSmartFilters?: boolean;
117
+ }>>;
118
+ askSkip: z.ZodOptional<z.ZodObject<{
119
+ organizationInfo: z.ZodOptional<z.ZodString>;
120
+ }, "strip", z.ZodTypeAny, {
121
+ organizationInfo?: string;
122
+ }, {
123
+ organizationInfo?: string;
124
+ }>>;
125
+ }, "strip", z.ZodTypeAny, {
126
+ userHandling?: {
127
+ autoCreateNewUsers?: boolean;
128
+ newUserLimitedToAuthorizedDomains?: boolean;
129
+ newUserAuthorizedDomains?: string[];
130
+ newUserRoles?: string[];
131
+ updateCacheWhenNotFound?: boolean;
132
+ updateCacheWhenNotFoundDelay?: number;
133
+ contextUserForNewUserCreation?: string;
134
+ };
135
+ databaseSettings?: {
136
+ connectionTimeout?: number;
137
+ requestTimeout?: number;
138
+ metadataCacheRefreshInterval?: number;
139
+ };
140
+ viewingSystem?: {
141
+ enableSmartFilters?: boolean;
142
+ };
143
+ askSkip?: {
144
+ organizationInfo?: string;
145
+ };
146
+ }, {
147
+ userHandling?: {
148
+ autoCreateNewUsers?: boolean;
149
+ newUserLimitedToAuthorizedDomains?: boolean;
150
+ newUserAuthorizedDomains?: string[];
151
+ newUserRoles?: string[];
152
+ updateCacheWhenNotFound?: boolean;
153
+ updateCacheWhenNotFoundDelay?: number;
154
+ contextUserForNewUserCreation?: string;
155
+ };
156
+ databaseSettings?: {
157
+ connectionTimeout?: number;
158
+ requestTimeout?: number;
159
+ metadataCacheRefreshInterval?: number;
160
+ };
161
+ viewingSystem?: {
162
+ enableSmartFilters?: boolean;
163
+ };
164
+ askSkip?: {
165
+ organizationInfo?: string;
166
+ };
167
+ }>;
168
+ export type UserHandlingInfo = z.infer<typeof userHandlingInfoSchema>;
169
+ export type DatabaseSettingsInfo = z.infer<typeof databaseSettingsInfoSchema>;
170
+ export type ViewingSystemSettingsInfo = z.infer<typeof viewingSystemInfoSchema>;
171
+ export type ConfigInfo = z.infer<typeof configInfoSchema>;
172
+ export declare const configInfo: ConfigInfo;
173
+ export declare function loadConfig(): {
174
+ userHandling?: {
175
+ autoCreateNewUsers?: boolean;
176
+ newUserLimitedToAuthorizedDomains?: boolean;
177
+ newUserAuthorizedDomains?: string[];
178
+ newUserRoles?: string[];
179
+ updateCacheWhenNotFound?: boolean;
180
+ updateCacheWhenNotFoundDelay?: number;
181
+ contextUserForNewUserCreation?: string;
182
+ };
183
+ databaseSettings?: {
184
+ connectionTimeout?: number;
185
+ requestTimeout?: number;
186
+ metadataCacheRefreshInterval?: number;
187
+ };
188
+ viewingSystem?: {
189
+ enableSmartFilters?: boolean;
190
+ };
191
+ askSkip?: {
192
+ organizationInfo?: string;
193
+ };
194
+ };
195
+ export {};
196
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,OAAO,QAAiC,CAAC;AAEtD,eAAO,MAAM,MAAM,QAA2C,CAAC;AAC/D,eAAO,MAAM,MAAM,QAAoD,CAAC;AACxE,eAAO,MAAM,UAAU,QAA+C,CAAC;AACvE,eAAO,MAAM,UAAU,QAA+C,CAAC;AACvE,eAAO,MAAM,UAAU,QAA+C,CAAC;AACvE,eAAO,MAAM,cAAc,QAAyC,CAAC;AACrE,eAAO,MAAM,wBAAwB,SAAkD,CAAC;AAExF,eAAO,MAAM,WAAW,QAAiD,CAAC;AAE1E,eAAO,MAAM,gBAAgB,QAAwC,CAAC;AACtE,eAAO,MAAM,iBAAiB,QAA6D,CAAC;AAC5F,eAAO,MAAM,4BAA4B,QAAwE,CAAC;AAElH,eAAO,MAAM,eAAe,QAA+C,CAAC;AAE5E,eAAO,MAAM,WAAW,QAAsC,CAAC;AAC/D,eAAO,MAAM,QAAQ,QAAkC,CAAC;AAExD,eAAO,MAAM,mBAAmB,SAA4D,CAAC;AAC7F,eAAO,MAAM,qBAAqB,QAAsD,CAAC;AACzF,eAAO,MAAM,YAAY,wBAAmF,CAAC;AAE7G,eAAO,MAAM,aAAa,QAAyC,CAAC;AACpE,eAAO,MAAM,eAAe,QAAiD,CAAC;AAE9E,eAAO,MAAM,WAAW,QAAqC,CAAC;AAC9D,eAAO,MAAM,gBAAgB,QAAwC,CAAC;AACtE,eAAO,MAAM,iBAAiB,QAA4C,CAAC;AAE3E,eAAO,MAAM,cAAc,QAAuC,CAAC;AAEnE,eAAO,MAAM,UAAU,QAAoC,CAAC;AAE5D,QAAA,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;EAQ1B,CAAC;AAEH,QAAA,MAAM,0BAA0B;;;;;;;;;;;;EAI9B,CAAC;AAEH,QAAA,MAAM,uBAAuB;;;;;;EAE3B,CAAC;AAMH,QAAA,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKpB,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC9E,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAChF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,UAAU,EAAE,UAAyB,CAAC;AAEnD,wBAAgB,UAAU;;;;;;;;;;;;;;;;;;;;;EASzB"}
@@ -2,9 +2,7 @@ import env from 'env-var';
2
2
  import fs from 'fs';
3
3
  import path from 'path';
4
4
  import { z } from 'zod';
5
-
6
5
  export const nodeEnv = env.get('NODE_ENV').asString();
7
-
8
6
  export const dbHost = env.get('DB_HOST').required().asString();
9
7
  export const dbPort = env.get('DB_PORT').default('1433').asPortNumber();
10
8
  export const dbUsername = env.get('DB_USERNAME').required().asString();
@@ -12,78 +10,56 @@ export const dbPassword = env.get('DB_PASSWORD').required().asString();
12
10
  export const dbDatabase = env.get('DB_DATABASE').required().asString();
13
11
  export const dbInstanceName = env.get('DB_INSTANCE_NAME').asString();
14
12
  export const dbTrustServerCertificate = env.get('DB_TRUST_SERVER_CERTIFICATE').asBool();
15
-
16
13
  export const graphqlPort = env.get('PORT').default('4000').asPortNumber();
17
-
18
14
  export const ___codeGenAPIURL = env.get('CODEGEN_API_URL').asString();
19
15
  export const ___codeGenAPIPort = env.get('CODEGEN_API_PORT').default('3999').asPortNumber();
20
16
  export const ___codeGenAPISubmissionDelay = env.get('CODEGEN_API_SUBMISSION_DELAY').default(5000).asIntPositive();
21
-
22
17
  export const graphqlRootPath = env.get('ROOT_PATH').default('/').asString();
23
-
24
18
  export const webClientID = env.get('WEB_CLIENT_ID').asString();
25
19
  export const tenantID = env.get('TENANT_ID').asString();
26
-
27
20
  export const enableIntrospection = env.get('ENABLE_INTROSPECTION').default('false').asBool();
28
21
  export const websiteRunFromPackage = env.get('WEBSITE_RUN_FROM_PACKAGE').asIntPositive();
29
- export const userEmailMap = env.get('USER_EMAIL_MAP').default('{}').asJsonObject() as Record<string, string>;
30
-
22
+ export const userEmailMap = env.get('USER_EMAIL_MAP').default('{}').asJsonObject();
31
23
  export const ___skipAPIurl = env.get('ASK_SKIP_API_URL').asString();
32
24
  export const ___skipAPIOrgId = env.get('ASK_SKIP_ORGANIZATION_ID').asString();
33
-
34
25
  export const auth0Domain = env.get('AUTH0_DOMAIN').asString();
35
26
  export const auth0WebClientID = env.get('AUTH0_CLIENT_ID').asString();
36
27
  export const auth0ClientSecret = env.get('AUTH0_CLIENT_SECRET').asString();
37
-
38
28
  export const mj_core_schema = env.get('MJ_CORE_SCHEMA').asString();
39
-
40
29
  export const configFile = env.get('CONFIG_FILE').asString();
41
-
42
30
  const userHandlingInfoSchema = z.object({
43
- autoCreateNewUsers: z.boolean().optional().default(false),
44
- newUserLimitedToAuthorizedDomains: z.boolean().optional().default(false),
45
- newUserAuthorizedDomains: z.array(z.string()).optional().default([]),
46
- newUserRoles: z.array(z.string()).optional().default([]),
47
- updateCacheWhenNotFound: z.boolean().optional().default(false),
48
- updateCacheWhenNotFoundDelay: z.number().optional().default(30000),
49
- contextUserForNewUserCreation: z.string().optional().default(''),
31
+ autoCreateNewUsers: z.boolean().optional().default(false),
32
+ newUserLimitedToAuthorizedDomains: z.boolean().optional().default(false),
33
+ newUserAuthorizedDomains: z.array(z.string()).optional().default([]),
34
+ newUserRoles: z.array(z.string()).optional().default([]),
35
+ updateCacheWhenNotFound: z.boolean().optional().default(false),
36
+ updateCacheWhenNotFoundDelay: z.number().optional().default(30000),
37
+ contextUserForNewUserCreation: z.string().optional().default(''),
50
38
  });
51
-
52
39
  const databaseSettingsInfoSchema = z.object({
53
- connectionTimeout: z.number(),
54
- requestTimeout: z.number(),
55
- metadataCacheRefreshInterval: z.number(),
40
+ connectionTimeout: z.number(),
41
+ requestTimeout: z.number(),
42
+ metadataCacheRefreshInterval: z.number(),
56
43
  });
57
-
58
44
  const viewingSystemInfoSchema = z.object({
59
- enableSmartFilters: z.boolean().optional(),
45
+ enableSmartFilters: z.boolean().optional(),
60
46
  });
61
-
62
47
  const askSkipInfoSchema = z.object({
63
- organizationInfo: z.string().optional(),
48
+ organizationInfo: z.string().optional(),
64
49
  });
65
-
66
50
  const configInfoSchema = z.object({
67
- userHandling: userHandlingInfoSchema,
68
- databaseSettings: databaseSettingsInfoSchema,
69
- viewingSystem: viewingSystemInfoSchema.optional(),
70
- askSkip: askSkipInfoSchema.optional(),
51
+ userHandling: userHandlingInfoSchema,
52
+ databaseSettings: databaseSettingsInfoSchema,
53
+ viewingSystem: viewingSystemInfoSchema.optional(),
54
+ askSkip: askSkipInfoSchema.optional(),
71
55
  });
72
-
73
- export type UserHandlingInfo = z.infer<typeof userHandlingInfoSchema>;
74
- export type DatabaseSettingsInfo = z.infer<typeof databaseSettingsInfoSchema>;
75
- export type ViewingSystemSettingsInfo = z.infer<typeof viewingSystemInfoSchema>;
76
- export type ConfigInfo = z.infer<typeof configInfoSchema>;
77
-
78
- export const configInfo: ConfigInfo = loadConfig();
79
-
56
+ export const configInfo = loadConfig();
80
57
  export function loadConfig() {
81
- const configPath = configFile ?? path.resolve('config.json');
82
-
83
- if (!fs.existsSync(configPath)) {
84
- throw new Error(`Config file ${configPath} does not exist.`);
85
- }
86
-
87
- const configData = fs.readFileSync(configPath, 'utf-8');
88
- return configInfoSchema.parse(JSON.parse(configData));
58
+ const configPath = configFile ?? path.resolve('config.json');
59
+ if (!fs.existsSync(configPath)) {
60
+ throw new Error(`Config file ${configPath} does not exist.`);
61
+ }
62
+ const configData = fs.readFileSync(configPath, 'utf-8');
63
+ return configInfoSchema.parse(JSON.parse(configData));
89
64
  }
65
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /// <reference types="node" />
2
+ import { IncomingMessage } from 'http';
3
+ import 'reflect-metadata';
4
+ import { Subject } from 'rxjs';
5
+ import { DataSource } from 'typeorm';
6
+ import { UserPayload } from './types';
7
+ export declare const getUserPayload: (bearerToken: string, sessionId: string, dataSource: DataSource, requestDomain?: string) => Promise<UserPayload>;
8
+ export declare const contextFunction: ({ setupComplete$, dataSource }: {
9
+ setupComplete$: Subject<unknown>;
10
+ dataSource: DataSource;
11
+ }) => ({ req }: {
12
+ req: IncomingMessage;
13
+ }) => Promise<{
14
+ dataSource: DataSource;
15
+ userPayload: UserPayload;
16
+ }>;
17
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAGvC,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAkB,MAAM,MAAM,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAIrC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAkBtC,eAAO,MAAM,cAAc,gBACZ,MAAM,iCAEP,UAAU,kBACN,MAAM,KACrB,QAAQ,WAAW,CAmDrB,CAAC;AAEF,eAAO,MAAM,eAAe,mCACO;IAAE,cAAc,EAAE,QAAQ,OAAO,CAAC,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAE,eAC7E;IAAE,GAAG,EAAE,eAAe,CAAA;CAAE;;;EAsBvC,CAAC"}
@@ -0,0 +1,84 @@
1
+ import * as url from 'url';
2
+ import { default as jwt } from 'jsonwebtoken';
3
+ import 'reflect-metadata';
4
+ import { firstValueFrom } from 'rxjs';
5
+ import { AuthenticationError, AuthorizationError } from 'type-graphql';
6
+ import { getSigningKeys, validationOptions, verifyUserRecord } from './auth';
7
+ import { authCache } from './cache';
8
+ import { userEmailMap } from './config';
9
+ import { TokenExpiredError } from './auth';
10
+ const verifyAsync = async (issuer, options, token) => new Promise((resolve, reject) => {
11
+ jwt.verify(token, getSigningKeys(issuer), options, (err, jwt) => {
12
+ if (jwt && typeof jwt !== 'string' && !err) {
13
+ const payload = jwt.payload ?? jwt;
14
+ console.log(`Valid token: ${payload.name} (${payload.email ? payload.email : payload.preferred_username})`);
15
+ resolve(payload);
16
+ }
17
+ else {
18
+ console.warn('Invalid token');
19
+ reject(err);
20
+ }
21
+ });
22
+ });
23
+ export const getUserPayload = async (bearerToken, sessionId = 'default', dataSource, requestDomain) => {
24
+ try {
25
+ const token = bearerToken.replace('Bearer ', '');
26
+ if (!token) {
27
+ console.warn('No token to validate');
28
+ throw new AuthenticationError('Missing token');
29
+ }
30
+ const payload = jwt.decode(token);
31
+ if (!payload || typeof payload === 'string') {
32
+ throw new AuthenticationError('Invalid token payload');
33
+ }
34
+ const expiryDate = new Date((payload.exp ?? 0) * 1000);
35
+ if (expiryDate.getTime() <= Date.now()) {
36
+ throw new TokenExpiredError(expiryDate);
37
+ }
38
+ if (!authCache.has(token)) {
39
+ const issuer = payload.iss;
40
+ if (!issuer) {
41
+ console.warn('No issuer claim on token');
42
+ throw new AuthenticationError('Missing issuer claim on token');
43
+ }
44
+ await verifyAsync(issuer, validationOptions[issuer], token);
45
+ authCache.set(token, true);
46
+ }
47
+ const email = payload?.email ? userEmailMap[payload?.email] ?? payload?.email : payload?.preferred_username;
48
+ const fullName = payload?.name;
49
+ const firstName = payload?.given_name || fullName?.split(' ')[0];
50
+ const lastName = payload?.family_name || fullName?.split(' ')[1] || fullName?.split(' ')[0];
51
+ const userRecord = await verifyUserRecord(email, firstName, lastName, requestDomain, dataSource);
52
+ if (!userRecord) {
53
+ console.error(`User ${email} not found`);
54
+ throw new AuthorizationError();
55
+ }
56
+ else if (!userRecord.IsActive) {
57
+ console.error(`User ${email} found but inactive`);
58
+ throw new AuthorizationError();
59
+ }
60
+ return { userRecord, email, sessionId };
61
+ }
62
+ catch (e) {
63
+ console.error(e);
64
+ if (e instanceof TokenExpiredError) {
65
+ throw e;
66
+ }
67
+ else
68
+ return {};
69
+ }
70
+ };
71
+ export const contextFunction = ({ setupComplete$, dataSource }) => async ({ req }) => {
72
+ await firstValueFrom(setupComplete$);
73
+ const sessionIdRaw = req.headers['x-session-id'];
74
+ const requestDomain = url.parse(req.headers.origin || '');
75
+ const sessionId = sessionIdRaw ? sessionIdRaw.toString() : '';
76
+ const bearerToken = req.headers.authorization ?? '';
77
+ const userPayload = await getUserPayload(bearerToken, sessionId, dataSource, requestDomain?.hostname ? requestDomain.hostname : undefined);
78
+ const operationName = req.body?.operationName;
79
+ if (operationName !== 'IntrospectionQuery') {
80
+ console.log({ operationName });
81
+ }
82
+ return { dataSource, userPayload };
83
+ };
84
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { DirectiveBuilder } from '../types';
2
+ export declare function Public(): PropertyDecorator & MethodDecorator & ClassDecorator;
3
+ export declare const publicDirective: DirectiveBuilder;
4
+ //# sourceMappingURL=Public.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Public.d.ts","sourceRoot":"","sources":["../../src/directives/Public.ts"],"names":[],"mappings":"AAGA,OAAO,EAAc,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAIxD,wBAAgB,MAAM,IAAI,iBAAiB,GAAG,eAAe,GAAG,cAAc,CAAC;AAM/E,eAAO,MAAM,eAAe,EAAE,gBA4B7B,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { MapperKind, getDirective, mapSchema } from '@graphql-tools/utils';
2
+ import { defaultFieldResolver } from 'graphql';
3
+ import { AuthorizationError, Directive } from 'type-graphql';
4
+ const DIRECTIVE_NAME = 'Public';
5
+ export function Public() {
6
+ return (targetOrPrototype, propertyKey, descriptor) => Directive(`@${DIRECTIVE_NAME}`)(targetOrPrototype, propertyKey, descriptor);
7
+ }
8
+ export const publicDirective = {
9
+ typeDefs: `directive @${DIRECTIVE_NAME} on FIELD_DEFINITION`,
10
+ transformer: (schema) => {
11
+ const fieldMapper = (fieldConfig) => {
12
+ const directive = getDirective(schema, fieldConfig, DIRECTIVE_NAME)?.[0];
13
+ if (directive) {
14
+ return fieldConfig;
15
+ }
16
+ else {
17
+ const { resolve = defaultFieldResolver } = fieldConfig;
18
+ const directiveResolver = async (source, args, context, info) => {
19
+ if (!context?.userPayload?.userRecord?.IsActive) {
20
+ throw new AuthorizationError();
21
+ }
22
+ return await resolve(source, args, context, info);
23
+ };
24
+ return { ...fieldConfig, resolve: directiveResolver };
25
+ }
26
+ };
27
+ return mapSchema(schema, { [MapperKind.OBJECT_FIELD]: fieldMapper });
28
+ },
29
+ };
30
+ //# sourceMappingURL=Public.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Public.js","sourceRoot":"","sources":["../../src/directives/Public.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAwB,oBAAoB,EAAE,MAAM,SAAS,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG7D,MAAM,cAAc,GAAG,QAAQ,CAAC;AAGhC,MAAM,UAAU,MAAM;IACpB,OAAO,CAAC,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,CACpD,SAAS,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAqB;IAC/C,QAAQ,EAAE,cAAc,cAAc,sBAAsB;IAC5D,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE;QACtB,MAAM,WAAW,GAAgB,CAAC,WAAW,EAAE,EAAE;YAC/C,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACzE,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,WAAW,CAAC;YACrB,CAAC;iBAAM,CAAC;gBAEN,MAAM,EAAE,OAAO,GAAG,oBAAoB,EAAE,GAAG,WAAW,CAAC;gBACvD,MAAM,iBAAiB,GAA8C,KAAK,EACxE,MAAM,EACN,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,EAAE;oBAEF,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;wBAChD,MAAM,IAAI,kBAAkB,EAAE,CAAC;oBACjC,CAAC;oBACD,OAAO,MAAM,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;gBACpD,CAAC,CAAC;gBAEF,OAAO,EAAE,GAAG,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;YACxD,CAAC;QACH,CAAC,CAAC;QACF,OAAO,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IACvE,CAAC;CACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './Public';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/directives/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './Public';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/directives/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { DuplicateRunEntity } from "@memberjunction/core-entities";
2
+ export declare class DuplicateRunEntity_Server extends DuplicateRunEntity {
3
+ Save(): Promise<boolean>;
4
+ }
5
+ export declare function LoadDuplicateRunEntityServerSubClass(): void;
6
+ //# sourceMappingURL=DuplicateRunEntity.server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DuplicateRunEntity.server.d.ts","sourceRoot":"","sources":["../../src/entitySubclasses/DuplicateRunEntity.server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGnE,qBACa,yBAA0B,SAAQ,kBAAkB;IAChD,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;CAiBxC;AAED,wBAAgB,oCAAoC,SAEnD"}
@@ -0,0 +1,33 @@
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
+ };
7
+ import { BaseEntity, PotentialDuplicateRequest } from "@memberjunction/core";
8
+ import { RegisterClass } from "@memberjunction/global";
9
+ import { DuplicateRunEntity } from "@memberjunction/core-entities";
10
+ import { DuplicateRecordDetector } from "@memberjunction/ai-vector-dupe";
11
+ let DuplicateRunEntity_Server = class DuplicateRunEntity_Server extends DuplicateRunEntity {
12
+ async Save() {
13
+ const saveResult = await super.Save();
14
+ if (saveResult && this.EndedAt === null) {
15
+ const duplicateRecordDetector = new DuplicateRecordDetector();
16
+ let request = new PotentialDuplicateRequest();
17
+ request.EntityID = this.EntityID;
18
+ request.ListID = this.SourceListID;
19
+ request.Options = {
20
+ DuplicateRunID: this.ID,
21
+ };
22
+ const response = await duplicateRecordDetector.getDuplicateRecords(request, this.ContextCurrentUser);
23
+ }
24
+ return saveResult;
25
+ }
26
+ };
27
+ DuplicateRunEntity_Server = __decorate([
28
+ RegisterClass(BaseEntity, 'Duplicate Runs', 3)
29
+ ], DuplicateRunEntity_Server);
30
+ export { DuplicateRunEntity_Server };
31
+ export function LoadDuplicateRunEntityServerSubClass() {
32
+ }
33
+ //# sourceMappingURL=DuplicateRunEntity.server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DuplicateRunEntity.server.js","sourceRoot":"","sources":["../../src/entitySubclasses/DuplicateRunEntity.server.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAGlE,IAAM,yBAAyB,GAA/B,MAAM,yBAA0B,SAAQ,kBAAkB;IACtD,KAAK,CAAC,IAAI;QACb,MAAM,UAAU,GAAY,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QAC/C,IAAI,UAAU,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAEtC,MAAM,uBAAuB,GAA4B,IAAI,uBAAuB,EAAE,CAAC;YACvF,IAAI,OAAO,GAA8B,IAAI,yBAAyB,EAAE,CAAC;YACzE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YACjC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;YACnC,OAAO,CAAC,OAAO,GAAG;gBACd,cAAc,EAAE,IAAI,CAAC,EAAE;aAC1B,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,uBAAuB,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACzG,CAAC;QAED,OAAO,UAAU,CAAC;IACtB,CAAC;CACJ,CAAA;AAlBY,yBAAyB;IADrC,aAAa,CAAC,UAAU,EAAE,gBAAgB,EAAE,CAAC,CAAC;GAClC,yBAAyB,CAkBrC;;AAED,MAAM,UAAU,oCAAoC;AAEpD,CAAC"}
@@ -0,0 +1,23 @@
1
+ /// <reference types="node" />
2
+ import { EntitySaveOptions } from "@memberjunction/core";
3
+ import { EntityPermissionEntity } from '@memberjunction/core-entities';
4
+ export declare class EntityPermissionsEntity_Server extends EntityPermissionEntity {
5
+ protected static _entityIDQueue: string[];
6
+ protected static _lastModifiedTime: Date | null;
7
+ protected static _submissionTimer: NodeJS.Timeout | null;
8
+ protected static _submissionDelay: number;
9
+ protected static _baseURL: string;
10
+ protected static _port: number;
11
+ protected static _apiEndpoint: string;
12
+ protected static getSubmissionURL(): string;
13
+ static get EntityIDQueue(): string[];
14
+ static ClearQueue(): void;
15
+ static AddToQueue(entityID: string): void;
16
+ protected static CheckStartSubmissionTimer(): void;
17
+ protected static StartSubmissionTimer(): void;
18
+ protected static SubmitQueue(): Promise<void>;
19
+ Save(options?: EntitySaveOptions): Promise<boolean>;
20
+ Delete(): Promise<boolean>;
21
+ }
22
+ export declare function LoadEntityPermissionsServerSubClass(): void;
23
+ //# sourceMappingURL=entityPermissions.server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entityPermissions.server.d.ts","sourceRoot":"","sources":["../../src/entitySubclasses/entityPermissions.server.ts"],"names":[],"mappings":";AACA,OAAO,EAAc,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AAQtE,qBACa,8BAA+B,SAAQ,sBAAsB;IACtE,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,CAAM;IAC/C,SAAS,CAAC,MAAM,CAAC,iBAAiB,EAAE,IAAI,GAAG,IAAI,CAAQ;IACvD,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAQ;IAChE,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAgC;IACzE,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAoB;IACrD,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAqB;IACnD,SAAS,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAA6B;IAGlE,SAAS,CAAC,MAAM,CAAC,gBAAgB,IAAI,MAAM;IAI3C,WAAkB,aAAa,IAAI,MAAM,EAAE,CAE1C;WAEa,UAAU,IAAI,IAAI;WAIlB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAOhD,SAAS,CAAC,MAAM,CAAC,yBAAyB,IAAI,IAAI;IAWlD,SAAS,CAAC,MAAM,CAAC,oBAAoB,IAAI,IAAI;qBAMtB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAgC1C,IAAI,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ7C,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;CAS5C;AAED,wBAAgB,mCAAmC,SAElD"}