@snowtop/ent 0.1.0-alpha160-test7 → 0.1.0-alpha160

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 (317) hide show
  1. package/core/query/shared_assoc_test.d.ts +2 -0
  2. package/core/query/shared_assoc_test.js +804 -0
  3. package/core/query/shared_test.d.ts +21 -0
  4. package/core/query/shared_test.js +736 -0
  5. package/graphql/query/shared_assoc_test.d.ts +1 -0
  6. package/graphql/query/shared_assoc_test.js +203 -0
  7. package/package.json +8 -53
  8. package/dist/package.json +0 -64
  9. package/src/action/action.ts +0 -330
  10. package/src/action/executor.ts +0 -453
  11. package/src/action/experimental_action.ts +0 -277
  12. package/src/action/index.ts +0 -31
  13. package/src/action/operations.ts +0 -967
  14. package/src/action/orchestrator.ts +0 -1527
  15. package/src/action/privacy.ts +0 -37
  16. package/src/action/relative_value.ts +0 -242
  17. package/src/action/transaction.ts +0 -38
  18. package/src/auth/auth.ts +0 -77
  19. package/src/auth/index.ts +0 -8
  20. package/src/core/base.ts +0 -367
  21. package/src/core/clause.ts +0 -1065
  22. package/src/core/config.ts +0 -219
  23. package/src/core/const.ts +0 -5
  24. package/src/core/context.ts +0 -135
  25. package/src/core/convert.ts +0 -106
  26. package/src/core/date.ts +0 -23
  27. package/src/core/db.ts +0 -498
  28. package/src/core/ent.ts +0 -1740
  29. package/src/core/global_schema.ts +0 -49
  30. package/src/core/loaders/assoc_count_loader.ts +0 -99
  31. package/src/core/loaders/assoc_edge_loader.ts +0 -250
  32. package/src/core/loaders/index.ts +0 -12
  33. package/src/core/loaders/loader.ts +0 -66
  34. package/src/core/loaders/object_loader.ts +0 -489
  35. package/src/core/loaders/query_loader.ts +0 -314
  36. package/src/core/loaders/raw_count_loader.ts +0 -175
  37. package/src/core/logger.ts +0 -49
  38. package/src/core/privacy.ts +0 -660
  39. package/src/core/query/assoc_query.ts +0 -240
  40. package/src/core/query/custom_clause_query.ts +0 -174
  41. package/src/core/query/custom_query.ts +0 -302
  42. package/src/core/query/index.ts +0 -9
  43. package/src/core/query/query.ts +0 -674
  44. package/src/core/query_impl.ts +0 -32
  45. package/src/core/viewer.ts +0 -52
  46. package/src/ent.code-workspace +0 -73
  47. package/src/graphql/builtins/connection.ts +0 -25
  48. package/src/graphql/builtins/edge.ts +0 -16
  49. package/src/graphql/builtins/node.ts +0 -12
  50. package/src/graphql/graphql.ts +0 -891
  51. package/src/graphql/graphql_field_helpers.ts +0 -221
  52. package/src/graphql/index.ts +0 -42
  53. package/src/graphql/mutations/union.ts +0 -39
  54. package/src/graphql/node_resolver.ts +0 -122
  55. package/src/graphql/query/connection_type.ts +0 -113
  56. package/src/graphql/query/edge_connection.ts +0 -171
  57. package/src/graphql/query/page_info.ts +0 -34
  58. package/src/graphql/query/shared_edge_connection.ts +0 -287
  59. package/src/graphql/scalars/orderby_direction.ts +0 -13
  60. package/src/graphql/scalars/time.ts +0 -38
  61. package/src/imports/dataz/example1/_auth.ts +0 -51
  62. package/src/imports/dataz/example1/_viewer.ts +0 -35
  63. package/src/imports/index.ts +0 -213
  64. package/src/index.ts +0 -145
  65. package/src/parse_schema/parse.ts +0 -585
  66. package/src/schema/base_schema.ts +0 -224
  67. package/src/schema/field.ts +0 -1087
  68. package/src/schema/index.ts +0 -53
  69. package/src/schema/json_field.ts +0 -94
  70. package/src/schema/schema.ts +0 -1028
  71. package/src/schema/struct_field.ts +0 -234
  72. package/src/schema/union_field.ts +0 -105
  73. package/src/scripts/custom_compiler.ts +0 -331
  74. package/src/scripts/custom_graphql.ts +0 -550
  75. package/src/scripts/migrate_v0.1.ts +0 -41
  76. package/src/scripts/move_types.ts +0 -131
  77. package/src/scripts/read_schema.ts +0 -67
  78. package/src/setupPackage.js +0 -42
  79. package/src/testutils/action/complex_schemas.ts +0 -517
  80. package/src/testutils/builder.ts +0 -422
  81. package/src/testutils/context/test_context.ts +0 -25
  82. package/src/testutils/db/fixture.ts +0 -32
  83. package/src/testutils/db/temp_db.ts +0 -941
  84. package/src/testutils/db/value.ts +0 -294
  85. package/src/testutils/db_mock.ts +0 -351
  86. package/src/testutils/db_time_zone.ts +0 -40
  87. package/src/testutils/ent-graphql-tests/index.ts +0 -653
  88. package/src/testutils/fake_comms.ts +0 -50
  89. package/src/testutils/fake_data/const.ts +0 -64
  90. package/src/testutils/fake_data/events_query.ts +0 -145
  91. package/src/testutils/fake_data/fake_contact.ts +0 -150
  92. package/src/testutils/fake_data/fake_event.ts +0 -150
  93. package/src/testutils/fake_data/fake_tag.ts +0 -139
  94. package/src/testutils/fake_data/fake_user.ts +0 -232
  95. package/src/testutils/fake_data/index.ts +0 -1
  96. package/src/testutils/fake_data/internal.ts +0 -8
  97. package/src/testutils/fake_data/tag_query.ts +0 -56
  98. package/src/testutils/fake_data/test_helpers.ts +0 -388
  99. package/src/testutils/fake_data/user_query.ts +0 -524
  100. package/src/testutils/fake_log.ts +0 -52
  101. package/src/testutils/mock_date.ts +0 -10
  102. package/src/testutils/mock_log.ts +0 -39
  103. package/src/testutils/parse_sql.ts +0 -685
  104. package/src/testutils/test_edge_global_schema.ts +0 -49
  105. package/src/testutils/write.ts +0 -70
  106. package/src/tsc/ast.ts +0 -351
  107. package/src/tsc/compilerOptions.ts +0 -85
  108. package/src/tsc/move_generated.ts +0 -191
  109. package/src/tsc/transform.ts +0 -226
  110. package/src/tsc/transform_action.ts +0 -224
  111. package/src/tsc/transform_ent.ts +0 -66
  112. package/src/tsc/transform_schema.ts +0 -546
  113. package/tsconfig.json +0 -20
  114. /package/{dist/action → action}/action.d.ts +0 -0
  115. /package/{dist/action → action}/action.js +0 -0
  116. /package/{dist/action → action}/executor.d.ts +0 -0
  117. /package/{dist/action → action}/executor.js +0 -0
  118. /package/{dist/action → action}/experimental_action.d.ts +0 -0
  119. /package/{dist/action → action}/experimental_action.js +0 -0
  120. /package/{dist/action → action}/index.d.ts +0 -0
  121. /package/{dist/action → action}/index.js +0 -0
  122. /package/{dist/action → action}/operations.d.ts +0 -0
  123. /package/{dist/action → action}/operations.js +0 -0
  124. /package/{dist/action → action}/orchestrator.d.ts +0 -0
  125. /package/{dist/action → action}/orchestrator.js +0 -0
  126. /package/{dist/action → action}/privacy.d.ts +0 -0
  127. /package/{dist/action → action}/privacy.js +0 -0
  128. /package/{dist/action → action}/relative_value.d.ts +0 -0
  129. /package/{dist/action → action}/relative_value.js +0 -0
  130. /package/{dist/action → action}/transaction.d.ts +0 -0
  131. /package/{dist/action → action}/transaction.js +0 -0
  132. /package/{dist/auth → auth}/auth.d.ts +0 -0
  133. /package/{dist/auth → auth}/auth.js +0 -0
  134. /package/{dist/auth → auth}/index.d.ts +0 -0
  135. /package/{dist/auth → auth}/index.js +0 -0
  136. /package/{dist/core → core}/base.d.ts +0 -0
  137. /package/{dist/core → core}/base.js +0 -0
  138. /package/{dist/core → core}/clause.d.ts +0 -0
  139. /package/{dist/core → core}/clause.js +0 -0
  140. /package/{dist/core → core}/config.d.ts +0 -0
  141. /package/{dist/core → core}/config.js +0 -0
  142. /package/{dist/core → core}/const.d.ts +0 -0
  143. /package/{dist/core → core}/const.js +0 -0
  144. /package/{dist/core → core}/context.d.ts +0 -0
  145. /package/{dist/core → core}/context.js +0 -0
  146. /package/{dist/core → core}/convert.d.ts +0 -0
  147. /package/{dist/core → core}/convert.js +0 -0
  148. /package/{dist/core → core}/date.d.ts +0 -0
  149. /package/{dist/core → core}/date.js +0 -0
  150. /package/{dist/core → core}/db.d.ts +0 -0
  151. /package/{dist/core → core}/db.js +0 -0
  152. /package/{dist/core → core}/ent.d.ts +0 -0
  153. /package/{dist/core → core}/ent.js +0 -0
  154. /package/{dist/core → core}/global_schema.d.ts +0 -0
  155. /package/{dist/core → core}/global_schema.js +0 -0
  156. /package/{dist/core → core}/loaders/assoc_count_loader.d.ts +0 -0
  157. /package/{dist/core → core}/loaders/assoc_count_loader.js +0 -0
  158. /package/{dist/core → core}/loaders/assoc_edge_loader.d.ts +0 -0
  159. /package/{dist/core → core}/loaders/assoc_edge_loader.js +0 -0
  160. /package/{dist/core → core}/loaders/index.d.ts +0 -0
  161. /package/{dist/core → core}/loaders/index.js +0 -0
  162. /package/{dist/core → core}/loaders/loader.d.ts +0 -0
  163. /package/{dist/core → core}/loaders/loader.js +0 -0
  164. /package/{dist/core → core}/loaders/object_loader.d.ts +0 -0
  165. /package/{dist/core → core}/loaders/object_loader.js +0 -0
  166. /package/{dist/core → core}/loaders/query_loader.d.ts +0 -0
  167. /package/{dist/core → core}/loaders/query_loader.js +0 -0
  168. /package/{dist/core → core}/loaders/raw_count_loader.d.ts +0 -0
  169. /package/{dist/core → core}/loaders/raw_count_loader.js +0 -0
  170. /package/{dist/core → core}/logger.d.ts +0 -0
  171. /package/{dist/core → core}/logger.js +0 -0
  172. /package/{dist/core → core}/privacy.d.ts +0 -0
  173. /package/{dist/core → core}/privacy.js +0 -0
  174. /package/{dist/core → core}/query/assoc_query.d.ts +0 -0
  175. /package/{dist/core → core}/query/assoc_query.js +0 -0
  176. /package/{dist/core → core}/query/custom_clause_query.d.ts +0 -0
  177. /package/{dist/core → core}/query/custom_clause_query.js +0 -0
  178. /package/{dist/core → core}/query/custom_query.d.ts +0 -0
  179. /package/{dist/core → core}/query/custom_query.js +0 -0
  180. /package/{dist/core → core}/query/index.d.ts +0 -0
  181. /package/{dist/core → core}/query/index.js +0 -0
  182. /package/{dist/core → core}/query/query.d.ts +0 -0
  183. /package/{dist/core → core}/query/query.js +0 -0
  184. /package/{dist/core → core}/query_impl.d.ts +0 -0
  185. /package/{dist/core → core}/query_impl.js +0 -0
  186. /package/{dist/core → core}/viewer.d.ts +0 -0
  187. /package/{dist/core → core}/viewer.js +0 -0
  188. /package/{dist/graphql → graphql}/builtins/connection.d.ts +0 -0
  189. /package/{dist/graphql → graphql}/builtins/connection.js +0 -0
  190. /package/{dist/graphql → graphql}/builtins/edge.d.ts +0 -0
  191. /package/{dist/graphql → graphql}/builtins/edge.js +0 -0
  192. /package/{dist/graphql → graphql}/builtins/node.d.ts +0 -0
  193. /package/{dist/graphql → graphql}/builtins/node.js +0 -0
  194. /package/{dist/graphql → graphql}/graphql.d.ts +0 -0
  195. /package/{dist/graphql → graphql}/graphql.js +0 -0
  196. /package/{dist/graphql → graphql}/graphql_field_helpers.d.ts +0 -0
  197. /package/{dist/graphql → graphql}/graphql_field_helpers.js +0 -0
  198. /package/{dist/graphql → graphql}/index.d.ts +0 -0
  199. /package/{dist/graphql → graphql}/index.js +0 -0
  200. /package/{dist/graphql → graphql}/mutations/union.d.ts +0 -0
  201. /package/{dist/graphql → graphql}/mutations/union.js +0 -0
  202. /package/{dist/graphql → graphql}/node_resolver.d.ts +0 -0
  203. /package/{dist/graphql → graphql}/node_resolver.js +0 -0
  204. /package/{dist/graphql → graphql}/query/connection_type.d.ts +0 -0
  205. /package/{dist/graphql → graphql}/query/connection_type.js +0 -0
  206. /package/{dist/graphql → graphql}/query/edge_connection.d.ts +0 -0
  207. /package/{dist/graphql → graphql}/query/edge_connection.js +0 -0
  208. /package/{dist/graphql → graphql}/query/page_info.d.ts +0 -0
  209. /package/{dist/graphql → graphql}/query/page_info.js +0 -0
  210. /package/{dist/graphql → graphql}/query/shared_edge_connection.d.ts +0 -0
  211. /package/{dist/graphql → graphql}/query/shared_edge_connection.js +0 -0
  212. /package/{dist/graphql → graphql}/scalars/orderby_direction.d.ts +0 -0
  213. /package/{dist/graphql → graphql}/scalars/orderby_direction.js +0 -0
  214. /package/{dist/graphql → graphql}/scalars/time.d.ts +0 -0
  215. /package/{dist/graphql → graphql}/scalars/time.js +0 -0
  216. /package/{dist/imports → imports}/dataz/example1/_auth.d.ts +0 -0
  217. /package/{dist/imports → imports}/dataz/example1/_auth.js +0 -0
  218. /package/{dist/imports → imports}/dataz/example1/_viewer.d.ts +0 -0
  219. /package/{dist/imports → imports}/dataz/example1/_viewer.js +0 -0
  220. /package/{dist/imports → imports}/index.d.ts +0 -0
  221. /package/{dist/imports → imports}/index.js +0 -0
  222. /package/{dist/index.d.ts → index.d.ts} +0 -0
  223. /package/{dist/index.js → index.js} +0 -0
  224. /package/{dist/parse_schema → parse_schema}/parse.d.ts +0 -0
  225. /package/{dist/parse_schema → parse_schema}/parse.js +0 -0
  226. /package/{dist/schema → schema}/base_schema.d.ts +0 -0
  227. /package/{dist/schema → schema}/base_schema.js +0 -0
  228. /package/{dist/schema → schema}/field.d.ts +0 -0
  229. /package/{dist/schema → schema}/field.js +0 -0
  230. /package/{dist/schema → schema}/index.d.ts +0 -0
  231. /package/{dist/schema → schema}/index.js +0 -0
  232. /package/{dist/schema → schema}/json_field.d.ts +0 -0
  233. /package/{dist/schema → schema}/json_field.js +0 -0
  234. /package/{dist/schema → schema}/schema.d.ts +0 -0
  235. /package/{dist/schema → schema}/schema.js +0 -0
  236. /package/{dist/schema → schema}/struct_field.d.ts +0 -0
  237. /package/{dist/schema → schema}/struct_field.js +0 -0
  238. /package/{dist/schema → schema}/union_field.d.ts +0 -0
  239. /package/{dist/schema → schema}/union_field.js +0 -0
  240. /package/{dist/scripts → scripts}/custom_compiler.d.ts +0 -0
  241. /package/{dist/scripts → scripts}/custom_compiler.js +0 -0
  242. /package/{dist/scripts → scripts}/custom_graphql.d.ts +0 -0
  243. /package/{dist/scripts → scripts}/custom_graphql.js +0 -0
  244. /package/{dist/scripts → scripts}/migrate_v0.1.d.ts +0 -0
  245. /package/{dist/scripts → scripts}/migrate_v0.1.js +0 -0
  246. /package/{dist/scripts → scripts}/move_types.d.ts +0 -0
  247. /package/{dist/scripts → scripts}/move_types.js +0 -0
  248. /package/{dist/scripts → scripts}/read_schema.d.ts +0 -0
  249. /package/{dist/scripts → scripts}/read_schema.js +0 -0
  250. /package/{dist/testutils → testutils}/action/complex_schemas.d.ts +0 -0
  251. /package/{dist/testutils → testutils}/action/complex_schemas.js +0 -0
  252. /package/{dist/testutils → testutils}/builder.d.ts +0 -0
  253. /package/{dist/testutils → testutils}/builder.js +0 -0
  254. /package/{dist/testutils → testutils}/context/test_context.d.ts +0 -0
  255. /package/{dist/testutils → testutils}/context/test_context.js +0 -0
  256. /package/{dist/testutils → testutils}/db/fixture.d.ts +0 -0
  257. /package/{dist/testutils → testutils}/db/fixture.js +0 -0
  258. /package/{dist/testutils → testutils}/db/temp_db.d.ts +0 -0
  259. /package/{dist/testutils → testutils}/db/temp_db.js +0 -0
  260. /package/{dist/testutils → testutils}/db/value.d.ts +0 -0
  261. /package/{dist/testutils → testutils}/db/value.js +0 -0
  262. /package/{dist/testutils → testutils}/db_mock.d.ts +0 -0
  263. /package/{dist/testutils → testutils}/db_mock.js +0 -0
  264. /package/{dist/testutils → testutils}/db_time_zone.d.ts +0 -0
  265. /package/{dist/testutils → testutils}/db_time_zone.js +0 -0
  266. /package/{dist/testutils → testutils}/ent-graphql-tests/index.d.ts +0 -0
  267. /package/{dist/testutils → testutils}/ent-graphql-tests/index.js +0 -0
  268. /package/{dist/testutils → testutils}/fake_comms.d.ts +0 -0
  269. /package/{dist/testutils → testutils}/fake_comms.js +0 -0
  270. /package/{dist/testutils → testutils}/fake_data/const.d.ts +0 -0
  271. /package/{dist/testutils → testutils}/fake_data/const.js +0 -0
  272. /package/{dist/testutils → testutils}/fake_data/events_query.d.ts +0 -0
  273. /package/{dist/testutils → testutils}/fake_data/events_query.js +0 -0
  274. /package/{dist/testutils → testutils}/fake_data/fake_contact.d.ts +0 -0
  275. /package/{dist/testutils → testutils}/fake_data/fake_contact.js +0 -0
  276. /package/{dist/testutils → testutils}/fake_data/fake_event.d.ts +0 -0
  277. /package/{dist/testutils → testutils}/fake_data/fake_event.js +0 -0
  278. /package/{dist/testutils → testutils}/fake_data/fake_tag.d.ts +0 -0
  279. /package/{dist/testutils → testutils}/fake_data/fake_tag.js +0 -0
  280. /package/{dist/testutils → testutils}/fake_data/fake_user.d.ts +0 -0
  281. /package/{dist/testutils → testutils}/fake_data/fake_user.js +0 -0
  282. /package/{dist/testutils → testutils}/fake_data/index.d.ts +0 -0
  283. /package/{dist/testutils → testutils}/fake_data/index.js +0 -0
  284. /package/{dist/testutils → testutils}/fake_data/internal.d.ts +0 -0
  285. /package/{dist/testutils → testutils}/fake_data/internal.js +0 -0
  286. /package/{dist/testutils → testutils}/fake_data/tag_query.d.ts +0 -0
  287. /package/{dist/testutils → testutils}/fake_data/tag_query.js +0 -0
  288. /package/{dist/testutils → testutils}/fake_data/test_helpers.d.ts +0 -0
  289. /package/{dist/testutils → testutils}/fake_data/test_helpers.js +0 -0
  290. /package/{dist/testutils → testutils}/fake_data/user_query.d.ts +0 -0
  291. /package/{dist/testutils → testutils}/fake_data/user_query.js +0 -0
  292. /package/{dist/testutils → testutils}/fake_log.d.ts +0 -0
  293. /package/{dist/testutils → testutils}/fake_log.js +0 -0
  294. /package/{dist/testutils → testutils}/mock_date.d.ts +0 -0
  295. /package/{dist/testutils → testutils}/mock_date.js +0 -0
  296. /package/{dist/testutils → testutils}/mock_log.d.ts +0 -0
  297. /package/{dist/testutils → testutils}/mock_log.js +0 -0
  298. /package/{dist/testutils → testutils}/parse_sql.d.ts +0 -0
  299. /package/{dist/testutils → testutils}/parse_sql.js +0 -0
  300. /package/{dist/testutils → testutils}/test_edge_global_schema.d.ts +0 -0
  301. /package/{dist/testutils → testutils}/test_edge_global_schema.js +0 -0
  302. /package/{dist/testutils → testutils}/write.d.ts +0 -0
  303. /package/{dist/testutils → testutils}/write.js +0 -0
  304. /package/{dist/tsc → tsc}/ast.d.ts +0 -0
  305. /package/{dist/tsc → tsc}/ast.js +0 -0
  306. /package/{dist/tsc → tsc}/compilerOptions.d.ts +0 -0
  307. /package/{dist/tsc → tsc}/compilerOptions.js +0 -0
  308. /package/{dist/tsc → tsc}/move_generated.d.ts +0 -0
  309. /package/{dist/tsc → tsc}/move_generated.js +0 -0
  310. /package/{dist/tsc → tsc}/transform.d.ts +0 -0
  311. /package/{dist/tsc → tsc}/transform.js +0 -0
  312. /package/{dist/tsc → tsc}/transform_action.d.ts +0 -0
  313. /package/{dist/tsc → tsc}/transform_action.js +0 -0
  314. /package/{dist/tsc → tsc}/transform_ent.d.ts +0 -0
  315. /package/{dist/tsc → tsc}/transform_ent.js +0 -0
  316. /package/{dist/tsc → tsc}/transform_schema.d.ts +0 -0
  317. /package/{dist/tsc → tsc}/transform_schema.js +0 -0
@@ -1,660 +0,0 @@
1
- import { isPromise } from "util/types";
2
- import {
3
- Allow,
4
- Context,
5
- Deny,
6
- Ent,
7
- ID,
8
- LoadEntOptions,
9
- PrivacyError,
10
- PrivacyPolicy,
11
- PrivacyPolicyRule,
12
- PrivacyResult,
13
- Skip,
14
- Viewer,
15
- EdgeQueryableDataOptionsConfigureLoader,
16
- } from "./base";
17
- import { AssocEdge, loadEdgeForID2, loadEnt } from "./ent";
18
-
19
- // copied from ./base
20
- enum privacyResult {
21
- // using http status codes similar to golang for the lols
22
- Allow = 200,
23
- Deny = 401,
24
- Skip = 307,
25
- }
26
-
27
- export class EntPrivacyError extends Error implements PrivacyError {
28
- privacyPolicy: PrivacyPolicy;
29
- privacyRule: PrivacyPolicyRule;
30
- ent?: Ent;
31
-
32
- constructor(
33
- privacyPolicy: PrivacyPolicy,
34
- rule: PrivacyPolicyRule,
35
- ent?: Ent,
36
- ) {
37
- let msg = `ent ${ent?.id} is not visible for privacy reasons`;
38
-
39
- if (typeof ent === "object") {
40
- ent.constructor.name;
41
- msg = `ent ${ent?.id} of type ${ent.constructor.name} is not visible for privacy reasons`;
42
- }
43
- super(msg);
44
- this.privacyPolicy = privacyPolicy;
45
- this.privacyRule = rule;
46
- this.ent = ent;
47
- }
48
- }
49
-
50
- class EntInvalidPrivacyPolicyError extends Error implements PrivacyError {
51
- privacyPolicy: PrivacyPolicy;
52
- ent?: Ent;
53
-
54
- constructor(privacyPolicy: PrivacyPolicy, ent?: Ent) {
55
- let msg = `ent ${ent?.id} is not visible because privacy policy is not properly configured`;
56
-
57
- if (typeof ent === "object") {
58
- ent.constructor.name;
59
- msg = `ent ${ent?.id} of type ${ent.constructor.name} is not visible because privacy policy is not properly configured`;
60
- }
61
- super(msg);
62
- this.privacyPolicy = privacyPolicy;
63
- this.ent = ent;
64
- }
65
- }
66
-
67
- export const AlwaysAllowRule = {
68
- async apply(_v: Viewer, _ent?: Ent): Promise<PrivacyResult> {
69
- return Allow();
70
- },
71
- };
72
-
73
- export const AlwaysDenyRule = {
74
- async apply(_v: Viewer, _ent?: Ent): Promise<PrivacyResult> {
75
- return Deny();
76
- },
77
- };
78
-
79
- export const DenyIfLoggedOutRule = {
80
- async apply(v: Viewer, _ent?: Ent): Promise<PrivacyResult> {
81
- if (v.viewerID === null || v.viewerID == undefined) {
82
- return Deny();
83
- }
84
- return Skip();
85
- },
86
- };
87
-
88
- export const DenyIfLoggedInRule = {
89
- async apply(v: Viewer, _ent?: Ent): Promise<PrivacyResult> {
90
- if (v.viewerID === null || v.viewerID == undefined) {
91
- return Skip();
92
- }
93
- return Deny();
94
- },
95
- };
96
-
97
- export const AllowIfHasIdentity = {
98
- async apply(v: Viewer, _ent?: Ent): Promise<PrivacyResult> {
99
- if (v.viewerID === null || v.viewerID == undefined) {
100
- return Skip();
101
- }
102
- return Allow();
103
- },
104
- };
105
-
106
- export const AllowIfViewerRule = {
107
- async apply(v: Viewer, ent?: Ent): Promise<PrivacyResult> {
108
- if (v.viewerID && v.viewerID === ent?.id) {
109
- return Allow();
110
- }
111
- return Skip();
112
- },
113
- };
114
-
115
- export class AllowIfViewerEqualsRule {
116
- constructor(private id: any) {}
117
-
118
- async apply(v: Viewer, _ent?: Ent): Promise<PrivacyResult> {
119
- return v.viewerID === this.id ? Allow() : Skip();
120
- }
121
- }
122
-
123
- export class DenyIfViewerEqualsRule {
124
- constructor(private id: ID) {}
125
-
126
- async apply(v: Viewer, _ent?: Ent): Promise<PrivacyResult> {
127
- return v.viewerID === this.id ? Deny() : Skip();
128
- }
129
- }
130
-
131
- interface FuncRule {
132
- (v: Viewer, ent?: Ent): boolean | Promise<boolean>;
133
- }
134
-
135
- export class AllowIfFuncRule implements PrivacyPolicyRule {
136
- constructor(private fn: FuncRule) {}
137
-
138
- async apply(v: Viewer, ent?: Ent): Promise<PrivacyResult> {
139
- let result = this.fn(v, ent);
140
- if (isPromise(result)) {
141
- result = await result;
142
- }
143
- if (result) {
144
- return Allow();
145
- }
146
- return Skip();
147
- }
148
- }
149
-
150
- export class DenyIfFuncRule implements PrivacyPolicyRule {
151
- constructor(private fn: FuncRule) {}
152
-
153
- async apply(v: Viewer, ent?: Ent): Promise<PrivacyResult> {
154
- let result = this.fn(v, ent);
155
- if (isPromise(result)) {
156
- result = await result;
157
- }
158
- if (result) {
159
- return Deny();
160
- }
161
- return Skip();
162
- }
163
- }
164
-
165
- /**
166
- * @deprecated use AllowIfViewerIsEntPropertyRule
167
- */
168
- export class AllowIfViewerIsRule implements PrivacyPolicyRule {
169
- constructor(private property: string) {}
170
-
171
- async apply(v: Viewer, ent?: Ent): Promise<PrivacyResult> {
172
- let result: undefined;
173
- if (ent) {
174
- result = ent[this.property];
175
- }
176
- if (result === v.viewerID) {
177
- return Allow();
178
- }
179
- return Skip();
180
- }
181
- }
182
-
183
- export class AllowIfViewerIsEntPropertyRule<T extends Ent>
184
- implements PrivacyPolicyRule
185
- {
186
- constructor(private property: keyof T) {}
187
-
188
- async apply(v: Viewer, ent?: T): Promise<PrivacyResult> {
189
- const result: any = ent && ent[this.property];
190
- if (result === v.viewerID) {
191
- return Allow();
192
- }
193
- return Skip();
194
- }
195
- }
196
-
197
- export class AllowIfEntPropertyIsRule<T extends Ent>
198
- implements PrivacyPolicyRule
199
- {
200
- constructor(private property: keyof T, private val: any) {}
201
-
202
- async apply(v: Viewer, ent?: T): Promise<PrivacyResult> {
203
- const result: any = ent && ent[this.property];
204
- if (result === this.val) {
205
- return Allow();
206
- }
207
- return Skip();
208
- }
209
- }
210
-
211
- export class DenyIfEntPropertyIsRule<T extends Ent>
212
- implements PrivacyPolicyRule
213
- {
214
- constructor(private property: keyof T, private val: any) {}
215
-
216
- async apply(v: Viewer, ent?: T): Promise<PrivacyResult> {
217
- const result: any = ent && ent[this.property];
218
- if (result === this.val) {
219
- return Deny();
220
- }
221
- return Skip();
222
- }
223
- }
224
-
225
- export class AllowIfEntIsVisibleRule<
226
- TEnt extends Ent<TViewer>,
227
- TViewer extends Viewer,
228
- > implements PrivacyPolicyRule
229
- {
230
- constructor(private id: ID, private options: LoadEntOptions<TEnt, TViewer>) {}
231
-
232
- async apply(v: TViewer, _ent?: Ent): Promise<PrivacyResult> {
233
- const visible = await loadEnt(v, this.id, this.options);
234
- if (visible === null) {
235
- return Skip();
236
- }
237
- return Allow();
238
- }
239
- }
240
-
241
- export class AllowIfEntIsNotVisibleRule<
242
- TEnt extends Ent<TViewer>,
243
- TViewer extends Viewer,
244
- > implements PrivacyPolicyRule
245
- {
246
- constructor(private id: ID, private options: LoadEntOptions<TEnt, TViewer>) {}
247
-
248
- async apply(v: TViewer, _ent?: Ent): Promise<PrivacyResult> {
249
- const visible = await loadEnt(v, this.id, this.options);
250
- if (visible === null) {
251
- return Allow();
252
- }
253
- return Skip();
254
- }
255
- }
256
-
257
- export class AllowIfEntIsVisiblePolicy<
258
- TEnt extends Ent<TViewer>,
259
- TViewer extends Viewer,
260
- > implements PrivacyPolicy<TEnt, TViewer>
261
- {
262
- constructor(private id: ID, private options: LoadEntOptions<TEnt, TViewer>) {}
263
-
264
- rules = [new AllowIfEntIsVisibleRule(this.id, this.options), AlwaysDenyRule];
265
- }
266
-
267
- export class DenyIfEntIsVisiblePolicy<
268
- TEnt extends Ent<TViewer>,
269
- TViewer extends Viewer,
270
- > implements PrivacyPolicy<TEnt, TViewer>
271
- {
272
- constructor(private id: ID, private options: LoadEntOptions<TEnt, TViewer>) {}
273
-
274
- rules = [new DenyIfEntIsVisibleRule(this.id, this.options), AlwaysAllowRule];
275
- }
276
-
277
- export class DenyIfEntIsVisibleRule<
278
- TEnt extends Ent<TViewer>,
279
- TViewer extends Viewer,
280
- > implements PrivacyPolicyRule<TEnt, TViewer>
281
- {
282
- constructor(private id: ID, private options: LoadEntOptions<TEnt, TViewer>) {}
283
-
284
- async apply(v: TViewer, _ent?: Ent): Promise<PrivacyResult> {
285
- const visible = await loadEnt(v, this.id, this.options);
286
- if (visible === null) {
287
- return Skip();
288
- }
289
- return Deny();
290
- }
291
- }
292
-
293
- export class DenyIfEntIsNotVisibleRule<
294
- TEnt extends Ent<TViewer>,
295
- TViewer extends Viewer,
296
- > implements PrivacyPolicyRule
297
- {
298
- constructor(private id: ID, private options: LoadEntOptions<TEnt, TViewer>) {}
299
-
300
- async apply(v: TViewer, _ent?: Ent): Promise<PrivacyResult> {
301
- const visible = await loadEnt(v, this.id, this.options);
302
- if (visible === null) {
303
- return Deny();
304
- }
305
- return Skip();
306
- }
307
- }
308
-
309
- async function allowIfEdgeExistsRule(
310
- id1: ID | null | undefined,
311
- id2: ID | null | undefined,
312
- edgeType: string,
313
- context?: Context,
314
- options?: EdgeQueryableDataOptionsConfigureLoader,
315
- ): Promise<PrivacyResult> {
316
- if (id1 && id2) {
317
- const edge = await loadEdgeForID2({
318
- id1,
319
- edgeType,
320
- id2,
321
- context,
322
- ctr: AssocEdge,
323
- queryOptions: options,
324
- });
325
- if (edge) {
326
- return Allow();
327
- }
328
- }
329
- return Skip();
330
- }
331
-
332
- export class AllowIfEdgeExistsRule implements PrivacyPolicyRule {
333
- constructor(
334
- private id1: ID,
335
- private id2: ID,
336
- private edgeType: string,
337
- private options?: EdgeQueryableDataOptionsConfigureLoader,
338
- ) {}
339
-
340
- async apply(v: Viewer, _ent?: Ent): Promise<PrivacyResult> {
341
- return allowIfEdgeExistsRule(
342
- this.id1,
343
- this.id2,
344
- this.edgeType,
345
- v.context,
346
- this.options,
347
- );
348
- }
349
- }
350
-
351
- export class AllowIfViewerInboundEdgeExistsRule implements PrivacyPolicyRule {
352
- constructor(
353
- private edgeType: string,
354
- private options?: EdgeQueryableDataOptionsConfigureLoader,
355
- ) {}
356
-
357
- async apply(v: Viewer, ent?: Ent): Promise<PrivacyResult> {
358
- return allowIfEdgeExistsRule(
359
- v.viewerID,
360
- ent?.id,
361
- this.edgeType,
362
- v.context,
363
- this.options,
364
- );
365
- }
366
- }
367
-
368
- export class AllowIfViewerOutboundEdgeExistsRule implements PrivacyPolicyRule {
369
- constructor(
370
- private edgeType: string,
371
- private options?: EdgeQueryableDataOptionsConfigureLoader,
372
- ) {}
373
-
374
- async apply(v: Viewer, ent?: Ent): Promise<PrivacyResult> {
375
- return allowIfEdgeExistsRule(
376
- ent?.id,
377
- v.viewerID,
378
- this.edgeType,
379
- v.context,
380
- this.options,
381
- );
382
- }
383
- }
384
-
385
- async function denyIfEdgeExistsRule(
386
- id1: ID | null | undefined,
387
- id2: ID | null | undefined,
388
- edgeType: string,
389
- context?: Context,
390
- options?: EdgeQueryableDataOptionsConfigureLoader,
391
- ): Promise<PrivacyResult> {
392
- // edge doesn't exist if no viewer
393
- if (id1 && id2) {
394
- const edge = await loadEdgeForID2({
395
- id1,
396
- edgeType,
397
- id2,
398
- context,
399
- ctr: AssocEdge,
400
- queryOptions: options,
401
- });
402
- if (edge) {
403
- return Deny();
404
- }
405
- }
406
- return Skip();
407
- }
408
-
409
- async function denyIfEdgeDoesNotExistRule(
410
- id1: ID | null | undefined,
411
- id2: ID | null | undefined,
412
- edgeType: string,
413
- context?: Context,
414
- options?: EdgeQueryableDataOptionsConfigureLoader,
415
- ): Promise<PrivacyResult> {
416
- // edge doesn't exist if no viewer
417
- if (!id1 || !id2) {
418
- return Deny();
419
- }
420
- const edge = await loadEdgeForID2({
421
- id1,
422
- edgeType,
423
- id2,
424
- context,
425
- ctr: AssocEdge,
426
- queryOptions: options,
427
- });
428
- if (!edge) {
429
- return Deny();
430
- }
431
- return Skip();
432
- }
433
-
434
- export class DenyIfEdgeExistsRule implements PrivacyPolicyRule {
435
- constructor(
436
- private id1: ID,
437
- private id2: ID,
438
- private edgeType: string,
439
- private options?: EdgeQueryableDataOptionsConfigureLoader,
440
- ) {}
441
-
442
- async apply(v: Viewer, _ent?: Ent): Promise<PrivacyResult> {
443
- return denyIfEdgeExistsRule(
444
- this.id1,
445
- this.id2,
446
- this.edgeType,
447
- v.context,
448
- this.options,
449
- );
450
- }
451
- }
452
-
453
- export class DenyIfViewerInboundEdgeExistsRule implements PrivacyPolicyRule {
454
- constructor(
455
- private edgeType: string,
456
- private options?: EdgeQueryableDataOptionsConfigureLoader,
457
- ) {}
458
-
459
- async apply(v: Viewer, ent?: Ent): Promise<PrivacyResult> {
460
- return denyIfEdgeExistsRule(
461
- v.viewerID,
462
- ent?.id,
463
- this.edgeType,
464
- v.context,
465
- this.options,
466
- );
467
- }
468
- }
469
-
470
- export class DenyIfViewerOutboundEdgeExistsRule implements PrivacyPolicyRule {
471
- constructor(
472
- private edgeType: string,
473
- private options?: EdgeQueryableDataOptionsConfigureLoader,
474
- ) {}
475
-
476
- async apply(v: Viewer, ent?: Ent): Promise<PrivacyResult> {
477
- return denyIfEdgeExistsRule(
478
- ent?.id,
479
- v.viewerID,
480
- this.edgeType,
481
- v.context,
482
- this.options,
483
- );
484
- }
485
- }
486
-
487
- export class DenyIfEdgeDoesNotExistRule implements PrivacyPolicyRule {
488
- constructor(
489
- private id1: ID,
490
- private id2: ID,
491
- private edgeType: string,
492
- private options?: EdgeQueryableDataOptionsConfigureLoader,
493
- ) {}
494
-
495
- async apply(v: Viewer, _ent?: Ent): Promise<PrivacyResult> {
496
- return denyIfEdgeDoesNotExistRule(
497
- this.id1,
498
- this.id2,
499
- this.edgeType,
500
- v.context,
501
- this.options,
502
- );
503
- }
504
- }
505
-
506
- export class DenyIfViewerInboundEdgeDoesNotExistRule
507
- implements PrivacyPolicyRule
508
- {
509
- constructor(
510
- private edgeType: string,
511
- private options?: EdgeQueryableDataOptionsConfigureLoader,
512
- ) {}
513
-
514
- async apply(v: Viewer, ent?: Ent): Promise<PrivacyResult> {
515
- return denyIfEdgeDoesNotExistRule(
516
- v.viewerID,
517
- ent?.id,
518
- this.edgeType,
519
- v.context,
520
- this.options,
521
- );
522
- }
523
- }
524
-
525
- export class DenyIfViewerOutboundEdgeDoesNotExistRule
526
- implements PrivacyPolicyRule
527
- {
528
- constructor(
529
- private edgeType: string,
530
- private options?: EdgeQueryableDataOptionsConfigureLoader,
531
- ) {}
532
-
533
- async apply(v: Viewer, ent?: Ent): Promise<PrivacyResult> {
534
- return denyIfEdgeDoesNotExistRule(
535
- ent?.id,
536
- v.viewerID,
537
- this.edgeType,
538
- v.context,
539
- this.options,
540
- );
541
- }
542
- }
543
-
544
- // need a Deny version of this too
545
- export class AllowIfConditionAppliesRule implements PrivacyPolicyRule {
546
- constructor(private fn: FuncRule, private rule: PrivacyPolicyRule) {}
547
-
548
- async apply(v: Viewer, ent?: Ent): Promise<PrivacyResult> {
549
- const result = await this.fn(v, ent);
550
- if (!result) {
551
- return Skip();
552
- }
553
- const r = await this.rule.apply(v, ent);
554
- return r.result === privacyResult.Allow ? Allow() : Skip();
555
- }
556
- }
557
-
558
- interface DelayedFuncRule {
559
- (v: Viewer, ent?: Ent):
560
- | null
561
- | PrivacyPolicyRule
562
- | Promise<PrivacyPolicyRule | null>;
563
- }
564
-
565
- // use this when there's a computation needed to get the rule and then the privacy is applied on said rule
566
- export class DelayedResultRule implements PrivacyPolicyRule {
567
- constructor(private fn: DelayedFuncRule) {}
568
-
569
- async apply(v: Viewer, ent?: Ent): Promise<PrivacyResult> {
570
- let rule = this.fn(v, ent);
571
- if (isPromise(rule)) {
572
- rule = await rule;
573
- }
574
- if (!rule) {
575
- return Skip();
576
- }
577
-
578
- return rule.apply(v, ent);
579
- }
580
- }
581
-
582
- // TODO different variants
583
- export class AllowIfSubPolicyAllowsRule implements PrivacyPolicyRule {
584
- constructor(private policy: PrivacyPolicy) {}
585
-
586
- async apply(v: Viewer, ent?: Ent): Promise<PrivacyResult> {
587
- const result = await applyPrivacyPolicy(v, this.policy, ent);
588
- if (result) {
589
- return Allow();
590
- }
591
- return Skip();
592
- }
593
- }
594
-
595
- export async function applyPrivacyPolicy(
596
- v: Viewer,
597
- policy: PrivacyPolicy,
598
- ent: Ent | undefined,
599
- ): Promise<boolean> {
600
- const err = await applyPrivacyPolicyImpl(v, policy, ent);
601
- return err === null;
602
- }
603
-
604
- export async function applyPrivacyPolicyX(
605
- v: Viewer,
606
- policy: PrivacyPolicy,
607
- ent: Ent | undefined,
608
- throwErr?: () => Error,
609
- ): Promise<boolean> {
610
- const err = await applyPrivacyPolicyImpl(v, policy, ent, throwErr);
611
- if (err !== null) {
612
- throw err;
613
- }
614
- return true;
615
- }
616
-
617
- // this will throw an exception if fails or return error | null?
618
- export async function applyPrivacyPolicyImpl(
619
- v: Viewer,
620
- policy: PrivacyPolicy,
621
- ent: Ent | undefined,
622
- throwErr?: () => Error,
623
- ): Promise<Error | null> {
624
- for (const rule of policy.rules) {
625
- const res = await rule.apply(v, ent);
626
- if (res.result == privacyResult.Allow) {
627
- return null;
628
- } else if (res.result == privacyResult.Deny) {
629
- // specific error throw that
630
- if (res.error) {
631
- return res.error;
632
- }
633
- if (res.getError) {
634
- return res.getError(policy, rule, ent);
635
- }
636
- if (throwErr) {
637
- return throwErr();
638
- }
639
- return new EntPrivacyError(policy, rule, ent);
640
- }
641
- }
642
-
643
- return new EntInvalidPrivacyPolicyError(policy, ent);
644
- }
645
-
646
- export const AlwaysAllowPrivacyPolicy: PrivacyPolicy = {
647
- rules: [AlwaysAllowRule],
648
- };
649
-
650
- export const AlwaysDenyPrivacyPolicy: PrivacyPolicy = {
651
- rules: [AlwaysDenyRule],
652
- };
653
-
654
- export const AllowIfViewerPrivacyPolicy: PrivacyPolicy = {
655
- rules: [AllowIfViewerRule, AlwaysDenyRule],
656
- };
657
-
658
- export const AllowIfViewerHasIdentityPrivacyPolicy: PrivacyPolicy = {
659
- rules: [AllowIfHasIdentity, AlwaysDenyRule],
660
- };