@snowtop/ent 0.1.0-alpha160-test6 → 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 +6 -48
  8. package/{dist/scripts → scripts}/custom_compiler.js +0 -0
  9. package/{dist/scripts → scripts}/custom_graphql.js +0 -0
  10. package/dist/package.json +0 -64
  11. package/src/action/action.ts +0 -330
  12. package/src/action/executor.ts +0 -453
  13. package/src/action/experimental_action.ts +0 -277
  14. package/src/action/index.ts +0 -31
  15. package/src/action/operations.ts +0 -967
  16. package/src/action/orchestrator.ts +0 -1527
  17. package/src/action/privacy.ts +0 -37
  18. package/src/action/relative_value.ts +0 -242
  19. package/src/action/transaction.ts +0 -38
  20. package/src/auth/auth.ts +0 -77
  21. package/src/auth/index.ts +0 -8
  22. package/src/core/base.ts +0 -367
  23. package/src/core/clause.ts +0 -1065
  24. package/src/core/config.ts +0 -219
  25. package/src/core/const.ts +0 -5
  26. package/src/core/context.ts +0 -135
  27. package/src/core/convert.ts +0 -106
  28. package/src/core/date.ts +0 -23
  29. package/src/core/db.ts +0 -498
  30. package/src/core/ent.ts +0 -1740
  31. package/src/core/global_schema.ts +0 -49
  32. package/src/core/loaders/assoc_count_loader.ts +0 -99
  33. package/src/core/loaders/assoc_edge_loader.ts +0 -250
  34. package/src/core/loaders/index.ts +0 -12
  35. package/src/core/loaders/loader.ts +0 -66
  36. package/src/core/loaders/object_loader.ts +0 -489
  37. package/src/core/loaders/query_loader.ts +0 -314
  38. package/src/core/loaders/raw_count_loader.ts +0 -175
  39. package/src/core/logger.ts +0 -49
  40. package/src/core/privacy.ts +0 -660
  41. package/src/core/query/assoc_query.ts +0 -240
  42. package/src/core/query/custom_clause_query.ts +0 -174
  43. package/src/core/query/custom_query.ts +0 -302
  44. package/src/core/query/index.ts +0 -9
  45. package/src/core/query/query.ts +0 -674
  46. package/src/core/query_impl.ts +0 -32
  47. package/src/core/viewer.ts +0 -52
  48. package/src/ent.code-workspace +0 -73
  49. package/src/graphql/builtins/connection.ts +0 -25
  50. package/src/graphql/builtins/edge.ts +0 -16
  51. package/src/graphql/builtins/node.ts +0 -12
  52. package/src/graphql/graphql.ts +0 -891
  53. package/src/graphql/graphql_field_helpers.ts +0 -221
  54. package/src/graphql/index.ts +0 -42
  55. package/src/graphql/mutations/union.ts +0 -39
  56. package/src/graphql/node_resolver.ts +0 -122
  57. package/src/graphql/query/connection_type.ts +0 -113
  58. package/src/graphql/query/edge_connection.ts +0 -171
  59. package/src/graphql/query/page_info.ts +0 -34
  60. package/src/graphql/query/shared_edge_connection.ts +0 -287
  61. package/src/graphql/scalars/orderby_direction.ts +0 -13
  62. package/src/graphql/scalars/time.ts +0 -38
  63. package/src/imports/dataz/example1/_auth.ts +0 -51
  64. package/src/imports/dataz/example1/_viewer.ts +0 -35
  65. package/src/imports/index.ts +0 -213
  66. package/src/index.ts +0 -145
  67. package/src/parse_schema/parse.ts +0 -585
  68. package/src/schema/base_schema.ts +0 -224
  69. package/src/schema/field.ts +0 -1087
  70. package/src/schema/index.ts +0 -53
  71. package/src/schema/json_field.ts +0 -94
  72. package/src/schema/schema.ts +0 -1028
  73. package/src/schema/struct_field.ts +0 -234
  74. package/src/schema/union_field.ts +0 -105
  75. package/src/scripts/custom_compiler.ts +0 -331
  76. package/src/scripts/custom_graphql.ts +0 -550
  77. package/src/scripts/migrate_v0.1.ts +0 -41
  78. package/src/scripts/move_types.ts +0 -131
  79. package/src/scripts/read_schema.ts +0 -67
  80. package/src/setupPackage.js +0 -42
  81. package/src/testutils/action/complex_schemas.ts +0 -517
  82. package/src/testutils/builder.ts +0 -422
  83. package/src/testutils/context/test_context.ts +0 -25
  84. package/src/testutils/db/fixture.ts +0 -32
  85. package/src/testutils/db/temp_db.ts +0 -941
  86. package/src/testutils/db/value.ts +0 -294
  87. package/src/testutils/db_mock.ts +0 -351
  88. package/src/testutils/db_time_zone.ts +0 -40
  89. package/src/testutils/ent-graphql-tests/index.ts +0 -653
  90. package/src/testutils/fake_comms.ts +0 -50
  91. package/src/testutils/fake_data/const.ts +0 -64
  92. package/src/testutils/fake_data/events_query.ts +0 -145
  93. package/src/testutils/fake_data/fake_contact.ts +0 -150
  94. package/src/testutils/fake_data/fake_event.ts +0 -150
  95. package/src/testutils/fake_data/fake_tag.ts +0 -139
  96. package/src/testutils/fake_data/fake_user.ts +0 -232
  97. package/src/testutils/fake_data/index.ts +0 -1
  98. package/src/testutils/fake_data/internal.ts +0 -8
  99. package/src/testutils/fake_data/tag_query.ts +0 -56
  100. package/src/testutils/fake_data/test_helpers.ts +0 -388
  101. package/src/testutils/fake_data/user_query.ts +0 -524
  102. package/src/testutils/fake_log.ts +0 -52
  103. package/src/testutils/mock_date.ts +0 -10
  104. package/src/testutils/mock_log.ts +0 -39
  105. package/src/testutils/parse_sql.ts +0 -685
  106. package/src/testutils/test_edge_global_schema.ts +0 -49
  107. package/src/testutils/write.ts +0 -70
  108. package/src/tsc/ast.ts +0 -351
  109. package/src/tsc/compilerOptions.ts +0 -85
  110. package/src/tsc/move_generated.ts +0 -191
  111. package/src/tsc/transform.ts +0 -226
  112. package/src/tsc/transform_action.ts +0 -224
  113. package/src/tsc/transform_ent.ts +0 -66
  114. package/src/tsc/transform_schema.ts +0 -546
  115. package/tsconfig.json +0 -20
  116. /package/{dist/action → action}/action.d.ts +0 -0
  117. /package/{dist/action → action}/action.js +0 -0
  118. /package/{dist/action → action}/executor.d.ts +0 -0
  119. /package/{dist/action → action}/executor.js +0 -0
  120. /package/{dist/action → action}/experimental_action.d.ts +0 -0
  121. /package/{dist/action → action}/experimental_action.js +0 -0
  122. /package/{dist/action → action}/index.d.ts +0 -0
  123. /package/{dist/action → action}/index.js +0 -0
  124. /package/{dist/action → action}/operations.d.ts +0 -0
  125. /package/{dist/action → action}/operations.js +0 -0
  126. /package/{dist/action → action}/orchestrator.d.ts +0 -0
  127. /package/{dist/action → action}/orchestrator.js +0 -0
  128. /package/{dist/action → action}/privacy.d.ts +0 -0
  129. /package/{dist/action → action}/privacy.js +0 -0
  130. /package/{dist/action → action}/relative_value.d.ts +0 -0
  131. /package/{dist/action → action}/relative_value.js +0 -0
  132. /package/{dist/action → action}/transaction.d.ts +0 -0
  133. /package/{dist/action → action}/transaction.js +0 -0
  134. /package/{dist/auth → auth}/auth.d.ts +0 -0
  135. /package/{dist/auth → auth}/auth.js +0 -0
  136. /package/{dist/auth → auth}/index.d.ts +0 -0
  137. /package/{dist/auth → auth}/index.js +0 -0
  138. /package/{dist/core → core}/base.d.ts +0 -0
  139. /package/{dist/core → core}/base.js +0 -0
  140. /package/{dist/core → core}/clause.d.ts +0 -0
  141. /package/{dist/core → core}/clause.js +0 -0
  142. /package/{dist/core → core}/config.d.ts +0 -0
  143. /package/{dist/core → core}/config.js +0 -0
  144. /package/{dist/core → core}/const.d.ts +0 -0
  145. /package/{dist/core → core}/const.js +0 -0
  146. /package/{dist/core → core}/context.d.ts +0 -0
  147. /package/{dist/core → core}/context.js +0 -0
  148. /package/{dist/core → core}/convert.d.ts +0 -0
  149. /package/{dist/core → core}/convert.js +0 -0
  150. /package/{dist/core → core}/date.d.ts +0 -0
  151. /package/{dist/core → core}/date.js +0 -0
  152. /package/{dist/core → core}/db.d.ts +0 -0
  153. /package/{dist/core → core}/db.js +0 -0
  154. /package/{dist/core → core}/ent.d.ts +0 -0
  155. /package/{dist/core → core}/ent.js +0 -0
  156. /package/{dist/core → core}/global_schema.d.ts +0 -0
  157. /package/{dist/core → core}/global_schema.js +0 -0
  158. /package/{dist/core → core}/loaders/assoc_count_loader.d.ts +0 -0
  159. /package/{dist/core → core}/loaders/assoc_count_loader.js +0 -0
  160. /package/{dist/core → core}/loaders/assoc_edge_loader.d.ts +0 -0
  161. /package/{dist/core → core}/loaders/assoc_edge_loader.js +0 -0
  162. /package/{dist/core → core}/loaders/index.d.ts +0 -0
  163. /package/{dist/core → core}/loaders/index.js +0 -0
  164. /package/{dist/core → core}/loaders/loader.d.ts +0 -0
  165. /package/{dist/core → core}/loaders/loader.js +0 -0
  166. /package/{dist/core → core}/loaders/object_loader.d.ts +0 -0
  167. /package/{dist/core → core}/loaders/object_loader.js +0 -0
  168. /package/{dist/core → core}/loaders/query_loader.d.ts +0 -0
  169. /package/{dist/core → core}/loaders/query_loader.js +0 -0
  170. /package/{dist/core → core}/loaders/raw_count_loader.d.ts +0 -0
  171. /package/{dist/core → core}/loaders/raw_count_loader.js +0 -0
  172. /package/{dist/core → core}/logger.d.ts +0 -0
  173. /package/{dist/core → core}/logger.js +0 -0
  174. /package/{dist/core → core}/privacy.d.ts +0 -0
  175. /package/{dist/core → core}/privacy.js +0 -0
  176. /package/{dist/core → core}/query/assoc_query.d.ts +0 -0
  177. /package/{dist/core → core}/query/assoc_query.js +0 -0
  178. /package/{dist/core → core}/query/custom_clause_query.d.ts +0 -0
  179. /package/{dist/core → core}/query/custom_clause_query.js +0 -0
  180. /package/{dist/core → core}/query/custom_query.d.ts +0 -0
  181. /package/{dist/core → core}/query/custom_query.js +0 -0
  182. /package/{dist/core → core}/query/index.d.ts +0 -0
  183. /package/{dist/core → core}/query/index.js +0 -0
  184. /package/{dist/core → core}/query/query.d.ts +0 -0
  185. /package/{dist/core → core}/query/query.js +0 -0
  186. /package/{dist/core → core}/query_impl.d.ts +0 -0
  187. /package/{dist/core → core}/query_impl.js +0 -0
  188. /package/{dist/core → core}/viewer.d.ts +0 -0
  189. /package/{dist/core → core}/viewer.js +0 -0
  190. /package/{dist/graphql → graphql}/builtins/connection.d.ts +0 -0
  191. /package/{dist/graphql → graphql}/builtins/connection.js +0 -0
  192. /package/{dist/graphql → graphql}/builtins/edge.d.ts +0 -0
  193. /package/{dist/graphql → graphql}/builtins/edge.js +0 -0
  194. /package/{dist/graphql → graphql}/builtins/node.d.ts +0 -0
  195. /package/{dist/graphql → graphql}/builtins/node.js +0 -0
  196. /package/{dist/graphql → graphql}/graphql.d.ts +0 -0
  197. /package/{dist/graphql → graphql}/graphql.js +0 -0
  198. /package/{dist/graphql → graphql}/graphql_field_helpers.d.ts +0 -0
  199. /package/{dist/graphql → graphql}/graphql_field_helpers.js +0 -0
  200. /package/{dist/graphql → graphql}/index.d.ts +0 -0
  201. /package/{dist/graphql → graphql}/index.js +0 -0
  202. /package/{dist/graphql → graphql}/mutations/union.d.ts +0 -0
  203. /package/{dist/graphql → graphql}/mutations/union.js +0 -0
  204. /package/{dist/graphql → graphql}/node_resolver.d.ts +0 -0
  205. /package/{dist/graphql → graphql}/node_resolver.js +0 -0
  206. /package/{dist/graphql → graphql}/query/connection_type.d.ts +0 -0
  207. /package/{dist/graphql → graphql}/query/connection_type.js +0 -0
  208. /package/{dist/graphql → graphql}/query/edge_connection.d.ts +0 -0
  209. /package/{dist/graphql → graphql}/query/edge_connection.js +0 -0
  210. /package/{dist/graphql → graphql}/query/page_info.d.ts +0 -0
  211. /package/{dist/graphql → graphql}/query/page_info.js +0 -0
  212. /package/{dist/graphql → graphql}/query/shared_edge_connection.d.ts +0 -0
  213. /package/{dist/graphql → graphql}/query/shared_edge_connection.js +0 -0
  214. /package/{dist/graphql → graphql}/scalars/orderby_direction.d.ts +0 -0
  215. /package/{dist/graphql → graphql}/scalars/orderby_direction.js +0 -0
  216. /package/{dist/graphql → graphql}/scalars/time.d.ts +0 -0
  217. /package/{dist/graphql → graphql}/scalars/time.js +0 -0
  218. /package/{dist/imports → imports}/dataz/example1/_auth.d.ts +0 -0
  219. /package/{dist/imports → imports}/dataz/example1/_auth.js +0 -0
  220. /package/{dist/imports → imports}/dataz/example1/_viewer.d.ts +0 -0
  221. /package/{dist/imports → imports}/dataz/example1/_viewer.js +0 -0
  222. /package/{dist/imports → imports}/index.d.ts +0 -0
  223. /package/{dist/imports → imports}/index.js +0 -0
  224. /package/{dist/index.d.ts → index.d.ts} +0 -0
  225. /package/{dist/index.js → index.js} +0 -0
  226. /package/{dist/parse_schema → parse_schema}/parse.d.ts +0 -0
  227. /package/{dist/parse_schema → parse_schema}/parse.js +0 -0
  228. /package/{dist/schema → schema}/base_schema.d.ts +0 -0
  229. /package/{dist/schema → schema}/base_schema.js +0 -0
  230. /package/{dist/schema → schema}/field.d.ts +0 -0
  231. /package/{dist/schema → schema}/field.js +0 -0
  232. /package/{dist/schema → schema}/index.d.ts +0 -0
  233. /package/{dist/schema → schema}/index.js +0 -0
  234. /package/{dist/schema → schema}/json_field.d.ts +0 -0
  235. /package/{dist/schema → schema}/json_field.js +0 -0
  236. /package/{dist/schema → schema}/schema.d.ts +0 -0
  237. /package/{dist/schema → schema}/schema.js +0 -0
  238. /package/{dist/schema → schema}/struct_field.d.ts +0 -0
  239. /package/{dist/schema → schema}/struct_field.js +0 -0
  240. /package/{dist/schema → schema}/union_field.d.ts +0 -0
  241. /package/{dist/schema → schema}/union_field.js +0 -0
  242. /package/{dist/scripts → scripts}/custom_compiler.d.ts +0 -0
  243. /package/{dist/scripts → scripts}/custom_graphql.d.ts +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
- };