over-zero 0.0.0 → 0.0.2

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 (204) hide show
  1. package/dist/cjs/createPermissions.cjs +43 -57
  2. package/dist/cjs/createPermissions.js +46 -48
  3. package/dist/cjs/createPermissions.js.map +2 -2
  4. package/dist/cjs/createPermissions.native.js +46 -53
  5. package/dist/cjs/createPermissions.native.js.map +2 -2
  6. package/dist/cjs/createZero.cjs +128 -0
  7. package/dist/cjs/createZero.js +107 -0
  8. package/dist/cjs/createZero.js.map +6 -0
  9. package/dist/cjs/createZero.native.js +115 -0
  10. package/dist/cjs/createZero.native.js.map +6 -0
  11. package/dist/cjs/createZeroClient.cjs +128 -0
  12. package/dist/cjs/createZeroClient.js +103 -0
  13. package/dist/cjs/createZeroClient.js.map +6 -0
  14. package/dist/cjs/createZeroClient.native.js +115 -0
  15. package/dist/cjs/createZeroClient.native.js.map +6 -0
  16. package/dist/cjs/createZeroServer.cjs +131 -0
  17. package/dist/cjs/createZeroServer.js +108 -0
  18. package/dist/cjs/createZeroServer.js.map +6 -0
  19. package/dist/cjs/createZeroServer.native.js +107 -0
  20. package/dist/cjs/createZeroServer.native.js.map +6 -0
  21. package/dist/cjs/helpers/context.js.map +1 -1
  22. package/dist/cjs/helpers/context.native.js.map +1 -1
  23. package/dist/cjs/helpers/createMutators.cjs +11 -11
  24. package/dist/cjs/helpers/createMutators.js +9 -7
  25. package/dist/cjs/helpers/createMutators.js.map +1 -1
  26. package/dist/cjs/helpers/createMutators.native.js +8 -6
  27. package/dist/cjs/helpers/createMutators.native.js.map +1 -1
  28. package/dist/cjs/helpers/ensureLoggedIn.cjs +1 -1
  29. package/dist/cjs/helpers/ensureLoggedIn.js +1 -1
  30. package/dist/cjs/helpers/ensureLoggedIn.js.map +1 -1
  31. package/dist/cjs/helpers/ensureLoggedIn.native.js +1 -1
  32. package/dist/cjs/helpers/ensureLoggedIn.native.js.map +1 -1
  33. package/dist/cjs/helpers/getAuthData.cjs +0 -36
  34. package/dist/cjs/helpers/getAuthData.js +0 -28
  35. package/dist/cjs/helpers/getAuthData.js.map +2 -2
  36. package/dist/cjs/helpers/getAuthData.native.js +0 -31
  37. package/dist/cjs/helpers/getAuthData.native.js.map +2 -2
  38. package/dist/cjs/helpers/useAuthData.cjs +0 -32
  39. package/dist/cjs/helpers/useAuthData.js +0 -24
  40. package/dist/cjs/helpers/useAuthData.js.map +2 -2
  41. package/dist/cjs/helpers/useAuthData.native.js +0 -31
  42. package/dist/cjs/helpers/useAuthData.native.js.map +2 -2
  43. package/dist/cjs/helpers/useZeroDebug.cjs +68 -0
  44. package/dist/cjs/helpers/useZeroDebug.js +49 -0
  45. package/dist/cjs/helpers/useZeroDebug.js.map +6 -0
  46. package/dist/cjs/helpers/useZeroDebug.native.js +66 -0
  47. package/dist/cjs/helpers/useZeroDebug.native.js.map +6 -0
  48. package/dist/cjs/helpers/zeroEmitter.cjs +2 -2
  49. package/dist/cjs/helpers/zeroEmitter.js +2 -2
  50. package/dist/cjs/helpers/zeroEmitter.native.js +1 -1
  51. package/dist/cjs/helpers/zeroEmitter.native.js.map +1 -1
  52. package/dist/cjs/index.cjs +3 -1
  53. package/dist/cjs/index.js +3 -1
  54. package/dist/cjs/index.js.map +1 -1
  55. package/dist/cjs/index.native.js +6 -2
  56. package/dist/cjs/index.native.js.map +1 -1
  57. package/dist/cjs/mutations.cjs +50 -0
  58. package/dist/cjs/mutations.js +43 -0
  59. package/dist/cjs/mutations.js.map +6 -0
  60. package/dist/cjs/mutations.native.js +50 -0
  61. package/dist/cjs/mutations.native.js.map +6 -0
  62. package/dist/cjs/server.cjs +18 -0
  63. package/dist/cjs/server.js +15 -0
  64. package/dist/cjs/server.js.map +6 -0
  65. package/dist/cjs/server.native.js +20 -0
  66. package/dist/cjs/server.native.js.map +6 -0
  67. package/dist/cjs/where.cjs +33 -0
  68. package/dist/cjs/where.js +28 -0
  69. package/dist/cjs/where.js.map +6 -0
  70. package/dist/cjs/where.native.js +34 -0
  71. package/dist/cjs/where.native.js.map +6 -0
  72. package/dist/esm/createPermissions.js +48 -47
  73. package/dist/esm/createPermissions.js.map +2 -2
  74. package/dist/esm/createPermissions.mjs +41 -55
  75. package/dist/esm/createPermissions.mjs.map +1 -1
  76. package/dist/esm/createPermissions.native.js +55 -69
  77. package/dist/esm/createPermissions.native.js.map +1 -1
  78. package/dist/esm/createZero.js +99 -0
  79. package/dist/esm/createZero.js.map +6 -0
  80. package/dist/esm/createZero.mjs +105 -0
  81. package/dist/esm/createZero.mjs.map +1 -0
  82. package/dist/esm/createZero.native.js +119 -0
  83. package/dist/esm/createZero.native.js.map +1 -0
  84. package/dist/esm/createZeroClient.js +95 -0
  85. package/dist/esm/createZeroClient.js.map +6 -0
  86. package/dist/esm/createZeroClient.mjs +105 -0
  87. package/dist/esm/createZeroClient.mjs.map +1 -0
  88. package/dist/esm/createZeroClient.native.js +119 -0
  89. package/dist/esm/createZeroClient.native.js.map +1 -0
  90. package/dist/esm/createZeroServer.js +90 -0
  91. package/dist/esm/createZeroServer.js.map +6 -0
  92. package/dist/esm/createZeroServer.mjs +97 -0
  93. package/dist/esm/createZeroServer.mjs.map +1 -0
  94. package/dist/esm/createZeroServer.native.js +104 -0
  95. package/dist/esm/createZeroServer.native.js.map +1 -0
  96. package/dist/esm/helpers/context.js.map +1 -1
  97. package/dist/esm/helpers/context.mjs.map +1 -1
  98. package/dist/esm/helpers/context.native.js.map +1 -1
  99. package/dist/esm/helpers/createMutators.js +6 -7
  100. package/dist/esm/helpers/createMutators.js.map +1 -1
  101. package/dist/esm/helpers/createMutators.mjs +7 -7
  102. package/dist/esm/helpers/createMutators.mjs.map +1 -1
  103. package/dist/esm/helpers/createMutators.native.js +9 -7
  104. package/dist/esm/helpers/createMutators.native.js.map +1 -1
  105. package/dist/esm/helpers/ensureLoggedIn.js +1 -1
  106. package/dist/esm/helpers/ensureLoggedIn.js.map +1 -1
  107. package/dist/esm/helpers/ensureLoggedIn.mjs +1 -1
  108. package/dist/esm/helpers/ensureLoggedIn.mjs.map +1 -1
  109. package/dist/esm/helpers/ensureLoggedIn.native.js +1 -1
  110. package/dist/esm/helpers/ensureLoggedIn.native.js.map +1 -1
  111. package/dist/esm/helpers/getAuthData.js +0 -12
  112. package/dist/esm/helpers/getAuthData.js.map +2 -2
  113. package/dist/esm/helpers/getAuthData.mjs +1 -12
  114. package/dist/esm/helpers/getAuthData.mjs.map +1 -1
  115. package/dist/esm/helpers/getAuthData.native.js +1 -12
  116. package/dist/esm/helpers/getAuthData.native.js.map +1 -1
  117. package/dist/esm/helpers/useAuthData.js +0 -10
  118. package/dist/esm/helpers/useAuthData.js.map +2 -2
  119. package/dist/esm/helpers/useAuthData.mjs +1 -8
  120. package/dist/esm/helpers/useAuthData.mjs.map +1 -1
  121. package/dist/esm/helpers/useAuthData.native.js +1 -12
  122. package/dist/esm/helpers/useAuthData.native.js.map +1 -1
  123. package/dist/esm/helpers/useZeroDebug.js +35 -0
  124. package/dist/esm/helpers/useZeroDebug.js.map +6 -0
  125. package/dist/esm/helpers/useZeroDebug.mjs +45 -0
  126. package/dist/esm/helpers/useZeroDebug.mjs.map +1 -0
  127. package/dist/esm/helpers/useZeroDebug.native.js +53 -0
  128. package/dist/esm/helpers/useZeroDebug.native.js.map +1 -0
  129. package/dist/esm/helpers/zeroEmitter.js +1 -1
  130. package/dist/esm/helpers/zeroEmitter.mjs +1 -1
  131. package/dist/esm/helpers/zeroEmitter.native.js +1 -1
  132. package/dist/esm/index.js +3 -1
  133. package/dist/esm/index.js.map +1 -1
  134. package/dist/esm/index.mjs +3 -1
  135. package/dist/esm/index.mjs.map +1 -1
  136. package/dist/esm/index.native.js +3 -1
  137. package/dist/esm/index.native.js.map +1 -1
  138. package/dist/esm/mutations.js +27 -0
  139. package/dist/esm/mutations.js.map +6 -0
  140. package/dist/esm/mutations.mjs +27 -0
  141. package/dist/esm/mutations.mjs.map +1 -0
  142. package/dist/esm/mutations.native.js +29 -0
  143. package/dist/esm/mutations.native.js.map +1 -0
  144. package/dist/esm/server.js +2 -0
  145. package/dist/esm/server.js.map +6 -0
  146. package/dist/esm/server.mjs +2 -0
  147. package/dist/esm/server.mjs.map +1 -0
  148. package/dist/esm/server.native.js +2 -0
  149. package/dist/esm/server.native.js.map +1 -0
  150. package/dist/esm/where.js +12 -0
  151. package/dist/esm/where.js.map +6 -0
  152. package/dist/esm/where.mjs +9 -0
  153. package/dist/esm/where.mjs.map +1 -0
  154. package/dist/esm/where.native.js +9 -0
  155. package/dist/esm/where.native.js.map +1 -0
  156. package/package.json +12 -6
  157. package/src/createPermissions.ts +17 -77
  158. package/src/createZeroClient.tsx +29 -26
  159. package/src/createZeroServer.ts +43 -43
  160. package/src/helpers/createMutators.ts +19 -29
  161. package/src/helpers/ensureLoggedIn.ts +2 -1
  162. package/src/helpers/prettyFormatZeroQuery.ts +1 -1
  163. package/src/helpers/useZeroDebug.ts +1 -0
  164. package/src/index.ts +1 -5
  165. package/src/mutations.ts +20 -7
  166. package/src/server.ts +1 -0
  167. package/src/types.ts +74 -7
  168. package/src/where.ts +28 -0
  169. package/src/helpers/clearZeroDatabase.ts +0 -68
  170. package/src/helpers/getAuthData.tsx +0 -12
  171. package/src/helpers/useAuthData.ts +0 -13
  172. package/src/helpers/zeroEmitter.ts +0 -5
  173. package/types/createMutations.d.ts +0 -20
  174. package/types/createMutations.d.ts.map +0 -1
  175. package/types/createPermissions.d.ts +0 -37
  176. package/types/createPermissions.d.ts.map +0 -1
  177. package/types/createZeroClient.d.ts +0 -45
  178. package/types/createZeroClient.d.ts.map +0 -1
  179. package/types/createZeroServer.d.ts +0 -61
  180. package/types/createZeroServer.d.ts.map +0 -1
  181. package/types/helpers/batchQuery.d.ts +0 -7
  182. package/types/helpers/batchQuery.d.ts.map +0 -1
  183. package/types/helpers/clearZeroDatabase.d.ts +0 -2
  184. package/types/helpers/clearZeroDatabase.d.ts.map +0 -1
  185. package/types/helpers/context.d.ts +0 -5
  186. package/types/helpers/context.d.ts.map +0 -1
  187. package/types/helpers/createMutators.d.ts +0 -16
  188. package/types/helpers/createMutators.d.ts.map +0 -1
  189. package/types/helpers/ensureLoggedIn.d.ts +0 -2
  190. package/types/helpers/ensureLoggedIn.d.ts.map +0 -1
  191. package/types/helpers/getAuthData.d.ts +0 -1
  192. package/types/helpers/getAuthData.d.ts.map +0 -1
  193. package/types/helpers/prettyFormatZeroQuery.d.ts +0 -3
  194. package/types/helpers/prettyFormatZeroQuery.d.ts.map +0 -1
  195. package/types/helpers/useAuthData.d.ts +0 -1
  196. package/types/helpers/useAuthData.d.ts.map +0 -1
  197. package/types/helpers/useZeroDebug.d.ts +0 -3
  198. package/types/helpers/useZeroDebug.d.ts.map +0 -1
  199. package/types/helpers/zeroEmitter.d.ts +0 -2
  200. package/types/helpers/zeroEmitter.d.ts.map +0 -1
  201. package/types/index.d.ts +0 -9
  202. package/types/index.d.ts.map +0 -1
  203. package/types/types.d.ts +0 -21
  204. package/types/types.d.ts.map +0 -1
@@ -23,20 +23,17 @@ __export(createPermissions_exports, {
23
23
  createPermissions: () => createPermissions
24
24
  });
25
25
  module.exports = __toCommonJS(createPermissions_exports);
26
- var import_helpers = require("@vxrn/helpers"),
27
- import_prettyFormatZeroQuery = require("./helpers/prettyFormatZeroQuery.cjs");
28
- function createPermissions(schema, getContext) {
29
- runEnvironmentSafetyCheck();
30
- const permissionCache = (0, import_helpers.createLocalStorage)("permissions-cache", {
31
- storageLimit: 24
32
- });
33
- function where(a, b) {
34
- return b && WhereTableNameMap.set(b, a), b || a;
35
- }
36
- const WhereTableNameMap = /* @__PURE__ */new WeakMap();
37
- function getWhereTableName(where2) {
38
- return WhereTableNameMap.get(where2);
39
- }
26
+ var import_zero = require("@rocicorp/zero"),
27
+ import_helpers = require("@vxrn/helpers"),
28
+ import_context = require("./helpers/context.cjs"),
29
+ import_prettyFormatZeroQuery = require("./helpers/prettyFormatZeroQuery.cjs"),
30
+ import_where = require("./where.cjs");
31
+ function createPermissions({
32
+ environment,
33
+ schema,
34
+ models,
35
+ getContext
36
+ }) {
40
37
  const fallbackActions = {
41
38
  select: "read",
42
39
  insert: "write",
@@ -45,9 +42,11 @@ function createPermissions(schema, getContext) {
45
42
  delete: "write"
46
43
  };
47
44
  function buildPermissionQuery(authData, eb, permissionWhere, action, objOrId) {
48
- const tableName = getWhereTableName(permissionWhere);
45
+ const tableName = (0, import_where.getWhereTableName)(permissionWhere);
49
46
  if (!tableName) throw new Error("Must use PermissionWhere for buildPermissionQuery");
50
- const primaryKeys = schema.tables[tableName].primaryKey,
47
+ const tableSchema = schema.tables[tableName];
48
+ if (!tableSchema) throw new Error("No schema?");
49
+ const primaryKeys = tableSchema.primaryKey,
51
50
  permissionQueryBuilder = permissionWhere(eb, authData),
52
51
  fallbackAction = fallbackActions[action],
53
52
  permissionCondition = permissionQueryBuilder[action] || (fallbackAction ? permissionQueryBuilder[fallbackAction] : void 0);
@@ -61,20 +60,20 @@ function createPermissions(schema, getContext) {
61
60
  }
62
61
  return eb.and(permissionCondition, ...primaryKeyWheres);
63
62
  }
64
- async function can(where2, action, obj) {
63
+ async function can(where, action, obj) {
65
64
  const ctx = getContext(),
66
- tableName = getWhereTableName(where2);
65
+ tableName = (0, import_where.getWhereTableName)(where);
67
66
  if (!tableName) throw new Error("Must use where('table') style where to pass to can()");
68
- process.env.VITE_ENVIRONMENT === "ssr" && (await ensurePermission(ctx.tx, ctx.authData, tableName, where2, action, obj), ctx.didCanPermissionsRun = !0);
67
+ environment === "server" && (await ensurePermission(ctx.tx, ctx.authData, tableName, where, action, obj), ctx.didCanPermissionsRun = !0);
69
68
  }
70
- async function ensurePermission(tx, authData, tableName, where2, actionIn, obj) {
69
+ async function ensurePermission(tx, authData, tableName, where, actionIn, obj) {
71
70
  if (authData?.role === "admin") return;
72
71
  const action = String(actionIn),
73
72
  name = `${tableName}.${action}`,
74
73
  queryBase = tx.query[tableName];
75
74
  let query = null;
76
75
  try {
77
- query = queryBase.where(eb => buildPermissionQuery(authData, eb, where2, action, obj)).one(), (0, import_helpers.ensure)(await query);
76
+ query = queryBase.where(eb => buildPermissionQuery(authData, eb, where, action, obj)).one(), (0, import_helpers.ensure)(await query);
78
77
  } catch (err) {
79
78
  const errorTitle = `${name} with auth id: ${authData?.id}`;
80
79
  if (err instanceof import_helpers.EnsureError) {
@@ -86,43 +85,30 @@ function createPermissions(schema, getContext) {
86
85
  ${err}`);
87
86
  }
88
87
  }
89
- function usePermission(table, action, objOrId, enabled = typeof objOrId < "u", debug = !1) {
90
- const keyBase = `${table}${action}`,
91
- key = `${keyBase}${typeof objOrId == "string" ? objOrId : JSON.stringify(objOrId)}`,
92
- cacheVal = permissionCache.get(key) ?? permissionCache.get(keyBase),
93
- authData = useAuthData(),
94
- permission = modelPermissions[table],
95
- query = (() => {
96
- let baseQuery = zero.query[table].one();
97
- return enabled ? baseQuery.where(eb => buildPermissionQuery(authData, eb, permission, action, objOrId)) : baseQuery;
98
- })(),
99
- [data, status] = useQuery(query, {
100
- enabled: !!(enabled && authData && objOrId)
101
- });
102
- debug && console.info("usePermission()", {
103
- data,
104
- status,
105
- action,
106
- authData,
107
- permission
108
- }, (0, import_prettyFormatZeroQuery.prettyFormatZeroQuery)(query));
109
- const allowed = !!data;
110
- return objOrId ? allowed : !1;
111
- }
88
+ const readPermissions = (0, import_zero.definePermissions)(schema, async () => {
89
+ const permissionsEntries = await Promise.all((0, import_helpers.objectEntries)(models).map(async ([key, model]) => await (0, import_context.runWithContext)({
90
+ authData: {
91
+ id: "",
92
+ role: void 0,
93
+ email: ""
94
+ }
95
+ }, () => [key, {
96
+ row: {
97
+ select: [(authData, eb) => {
98
+ const out = model.permissions(eb, authData).read;
99
+ return out === !0 ? eb.and() : out === !1 ? eb.cmpLit(!0, "=", !1) : out;
100
+ }],
101
+ // we have permissions on these through our model system with custom mutators:
102
+ insert: import_zero.ANYONE_CAN,
103
+ update: import_zero.ANYONE_CAN,
104
+ delete: import_zero.ANYONE_CAN
105
+ }
106
+ }])));
107
+ return Object.fromEntries(permissionsEntries);
108
+ });
112
109
  return {
113
- where,
114
110
  can,
115
- usePermission
111
+ buildPermissionQuery,
112
+ readPermissions
116
113
  };
117
- }
118
- function runEnvironmentSafetyCheck() {
119
- typeof document < "u" || typeof navigator < "u" && navigator.product === "ReactNative" || process.env.VITE_ENVIRONMENT !== "ssr" && console.error(`\u274C\u274C\u274C\u274C
120
-
121
- ERROR: VITE_ENVIRONMENT is not set to "ssr" on server, which means permissions checks won't run when they should
122
- This is makes Zero entirely insecure and needs to be fixed immediately.
123
-
124
- This is likely a One framework issue, unless the user Vite config is overwriting the value.
125
- One automatically sets this value.
126
-
127
- `);
128
114
  }
@@ -17,19 +17,13 @@ __export(createPermissions_exports, {
17
17
  createPermissions: () => createPermissions
18
18
  });
19
19
  module.exports = __toCommonJS(createPermissions_exports);
20
- var import_helpers = require("@vxrn/helpers"), import_prettyFormatZeroQuery = require("./helpers/prettyFormatZeroQuery");
21
- function createPermissions(schema, getContext) {
22
- runEnvironmentSafetyCheck();
23
- const permissionCache = (0, import_helpers.createLocalStorage)("permissions-cache", {
24
- storageLimit: 24
25
- });
26
- function where(a, b) {
27
- return b && WhereTableNameMap.set(b, a), b || a;
28
- }
29
- const WhereTableNameMap = /* @__PURE__ */ new WeakMap();
30
- function getWhereTableName(where2) {
31
- return WhereTableNameMap.get(where2);
32
- }
20
+ var import_zero = require("@rocicorp/zero"), import_helpers = require("@vxrn/helpers"), import_context = require("./helpers/context"), import_prettyFormatZeroQuery = require("./helpers/prettyFormatZeroQuery"), import_where = require("./where");
21
+ function createPermissions({
22
+ environment,
23
+ schema,
24
+ models,
25
+ getContext
26
+ }) {
33
27
  const fallbackActions = {
34
28
  select: "read",
35
29
  insert: "write",
@@ -38,10 +32,13 @@ function createPermissions(schema, getContext) {
38
32
  delete: "write"
39
33
  };
40
34
  function buildPermissionQuery(authData, eb, permissionWhere, action, objOrId) {
41
- const tableName = getWhereTableName(permissionWhere);
35
+ const tableName = (0, import_where.getWhereTableName)(permissionWhere);
42
36
  if (!tableName)
43
37
  throw new Error("Must use PermissionWhere for buildPermissionQuery");
44
- const primaryKeys = schema.tables[tableName].primaryKey, permissionQueryBuilder = permissionWhere(eb, authData), fallbackAction = fallbackActions[action], permissionCondition = permissionQueryBuilder[action] || (fallbackAction ? permissionQueryBuilder[fallbackAction] : void 0);
38
+ const tableSchema = schema.tables[tableName];
39
+ if (!tableSchema)
40
+ throw new Error("No schema?");
41
+ const primaryKeys = tableSchema.primaryKey, permissionQueryBuilder = permissionWhere(eb, authData), fallbackAction = fallbackActions[action], permissionCondition = permissionQueryBuilder[action] || (fallbackAction ? permissionQueryBuilder[fallbackAction] : void 0);
45
42
  if (permissionCondition == null)
46
43
  throw new Error(`No permission defined for ${action} (or ${fallbackAction})`);
47
44
  if (permissionCondition === !0)
@@ -55,26 +52,26 @@ function createPermissions(schema, getContext) {
55
52
  }
56
53
  return eb.and(permissionCondition, ...primaryKeyWheres);
57
54
  }
58
- async function can(where2, action, obj) {
59
- const ctx = getContext(), tableName = getWhereTableName(where2);
55
+ async function can(where, action, obj) {
56
+ const ctx = getContext(), tableName = (0, import_where.getWhereTableName)(where);
60
57
  if (!tableName)
61
58
  throw new Error("Must use where('table') style where to pass to can()");
62
- process.env.VITE_ENVIRONMENT === "ssr" && (await ensurePermission(
59
+ environment === "server" && (await ensurePermission(
63
60
  ctx.tx,
64
61
  ctx.authData,
65
62
  tableName,
66
- where2,
63
+ where,
67
64
  action,
68
65
  obj
69
66
  ), ctx.didCanPermissionsRun = !0);
70
67
  }
71
- async function ensurePermission(tx, authData, tableName, where2, actionIn, obj) {
68
+ async function ensurePermission(tx, authData, tableName, where, actionIn, obj) {
72
69
  if (authData?.role === "admin")
73
70
  return;
74
71
  const action = String(actionIn), name = `${tableName}.${action}`, queryBase = tx.query[tableName];
75
72
  let query = null;
76
73
  try {
77
- query = queryBase.where((eb) => buildPermissionQuery(authData, eb, where2, action, obj)).one(), (0, import_helpers.ensure)(await query);
74
+ query = queryBase.where((eb) => buildPermissionQuery(authData, eb, where, action, obj)).one(), (0, import_helpers.ensure)(await query);
78
75
  } catch (err) {
79
76
  const errorTitle = `${name} with auth id: ${authData?.id}`;
80
77
  if (err instanceof import_helpers.EnsureError) {
@@ -86,36 +83,37 @@ function createPermissions(schema, getContext) {
86
83
  ${err}`);
87
84
  }
88
85
  }
89
- function usePermission(table, action, objOrId, enabled = typeof objOrId < "u", debug = !1) {
90
- const keyBase = `${table}${action}`, key = `${keyBase}${typeof objOrId == "string" ? objOrId : JSON.stringify(objOrId)}`, cacheVal = permissionCache.get(key) ?? permissionCache.get(keyBase), authData = useAuthData(), permission = modelPermissions[table], query = (() => {
91
- let baseQuery = zero.query[table].one();
92
- return enabled ? baseQuery.where((eb) => buildPermissionQuery(authData, eb, permission, action, objOrId)) : baseQuery;
93
- })(), [data, status] = useQuery(query, {
94
- enabled: !!(enabled && authData && objOrId)
95
- });
96
- debug && console.info(
97
- "usePermission()",
98
- { data, status, action, authData, permission },
99
- (0, import_prettyFormatZeroQuery.prettyFormatZeroQuery)(query)
86
+ const readPermissions = (0, import_zero.definePermissions)(schema, async () => {
87
+ const permissionsEntries = await Promise.all(
88
+ (0, import_helpers.objectEntries)(models).map(async ([key, model]) => await (0, import_context.runWithContext)(
89
+ {
90
+ authData: { id: "", role: void 0, email: "" }
91
+ },
92
+ () => [
93
+ key,
94
+ {
95
+ row: {
96
+ select: [
97
+ (authData, eb) => {
98
+ const out = model.permissions(eb, authData).read;
99
+ return out === !0 ? eb.and() : out === !1 ? eb.cmpLit(!0, "=", !1) : out;
100
+ }
101
+ ],
102
+ // we have permissions on these through our model system with custom mutators:
103
+ insert: import_zero.ANYONE_CAN,
104
+ update: import_zero.ANYONE_CAN,
105
+ delete: import_zero.ANYONE_CAN
106
+ }
107
+ }
108
+ ]
109
+ ))
100
110
  );
101
- const allowed = !!data;
102
- return objOrId ? allowed : !1;
103
- }
111
+ return Object.fromEntries(permissionsEntries);
112
+ });
104
113
  return {
105
- where,
106
114
  can,
107
- usePermission
115
+ buildPermissionQuery,
116
+ readPermissions
108
117
  };
109
118
  }
110
- function runEnvironmentSafetyCheck() {
111
- typeof document < "u" || typeof navigator < "u" && navigator.product === "ReactNative" || process.env.VITE_ENVIRONMENT !== "ssr" && console.error(`\u274C\u274C\u274C\u274C
112
-
113
- ERROR: VITE_ENVIRONMENT is not set to "ssr" on server, which means permissions checks won't run when they should
114
- This is makes Zero entirely insecure and needs to be fixed immediately.
115
-
116
- This is likely a One framework issue, unless the user Vite config is overwriting the value.
117
- One automatically sets this value.
118
-
119
- `);
120
- }
121
119
  //# sourceMappingURL=createPermissions.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/createPermissions.ts"],
4
- "mappings": "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",
5
- "names": ["where"]
4
+ "mappings": "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",
5
+ "names": []
6
6
  }
@@ -18,20 +18,9 @@ __export(createPermissions_exports, {
18
18
  createPermissions: () => createPermissions
19
19
  });
20
20
  module.exports = __toCommonJS(createPermissions_exports);
21
- var import_helpers = require("@vxrn/helpers"), import_prettyFormatZeroQuery = require("./helpers/prettyFormatZeroQuery");
22
- function createPermissions(schema, getContext) {
23
- runEnvironmentSafetyCheck();
24
- var permissionCache = (0, import_helpers.createLocalStorage)("permissions-cache", {
25
- storageLimit: 24
26
- });
27
- function where(a, b) {
28
- return b && WhereTableNameMap.set(b, a), b || a;
29
- }
30
- var WhereTableNameMap = /* @__PURE__ */ new WeakMap();
31
- function getWhereTableName(where2) {
32
- return WhereTableNameMap.get(where2);
33
- }
34
- var fallbackActions = {
21
+ var import_zero = require("@rocicorp/zero"), import_helpers = require("@vxrn/helpers"), import_context = require("./helpers/context"), import_prettyFormatZeroQuery = require("./helpers/prettyFormatZeroQuery"), import_where = require("./where");
22
+ function createPermissions(param) {
23
+ var { environment, schema, models, getContext } = param, fallbackActions = {
35
24
  select: "read",
36
25
  insert: "write",
37
26
  update: "write",
@@ -39,10 +28,13 @@ function createPermissions(schema, getContext) {
39
28
  delete: "write"
40
29
  };
41
30
  function buildPermissionQuery(authData, eb, permissionWhere, action, objOrId) {
42
- var tableName = getWhereTableName(permissionWhere);
31
+ var tableName = (0, import_where.getWhereTableName)(permissionWhere);
43
32
  if (!tableName)
44
33
  throw new Error("Must use PermissionWhere for buildPermissionQuery");
45
- var tableSchema = schema.tables[tableName], primaryKeys = tableSchema.primaryKey, permissionQueryBuilder = permissionWhere(eb, authData), fallbackAction = fallbackActions[action], permissionCondition = permissionQueryBuilder[action] || (fallbackAction ? permissionQueryBuilder[fallbackAction] : void 0);
34
+ var tableSchema = schema.tables[tableName];
35
+ if (!tableSchema)
36
+ throw new Error("No schema?");
37
+ var primaryKeys = tableSchema.primaryKey, permissionQueryBuilder = permissionWhere(eb, authData), fallbackAction = fallbackActions[action], permissionCondition = permissionQueryBuilder[action] || (fallbackAction ? permissionQueryBuilder[fallbackAction] : void 0);
46
38
  if (permissionCondition == null)
47
39
  throw new Error(`No permission defined for ${action} (or ${fallbackAction})`);
48
40
  if (permissionCondition === !0)
@@ -67,18 +59,18 @@ function createPermissions(schema, getContext) {
67
59
  }
68
60
  return eb.and(permissionCondition, ...primaryKeyWheres);
69
61
  }
70
- async function can(where2, action, obj) {
71
- var ctx = getContext(), tableName = getWhereTableName(where2);
62
+ async function can(where, action, obj) {
63
+ var ctx = getContext(), tableName = (0, import_where.getWhereTableName)(where);
72
64
  if (!tableName)
73
65
  throw new Error("Must use where('table') style where to pass to can()");
74
- process.env.VITE_ENVIRONMENT === "ssr" && (await ensurePermission(ctx.tx, ctx.authData, tableName, where2, action, obj), ctx.didCanPermissionsRun = !0);
66
+ environment === "server" && (await ensurePermission(ctx.tx, ctx.authData, tableName, where, action, obj), ctx.didCanPermissionsRun = !0);
75
67
  }
76
- async function ensurePermission(tx, authData, tableName, where2, actionIn, obj) {
68
+ async function ensurePermission(tx, authData, tableName, where, actionIn, obj) {
77
69
  if ((authData == null ? void 0 : authData.role) !== "admin") {
78
70
  var action = String(actionIn), name = `${tableName}.${action}`, queryBase = tx.query[tableName], query = null;
79
71
  try {
80
72
  query = queryBase.where(function(eb) {
81
- return buildPermissionQuery(authData, eb, where2, action, obj);
73
+ return buildPermissionQuery(authData, eb, where, action, obj);
82
74
  }).one(), (0, import_helpers.ensure)(await query);
83
75
  } catch (err) {
84
76
  var errorTitle = `${name} with auth id: ${authData == null ? void 0 : authData.id}`;
@@ -92,42 +84,43 @@ ${err}`);
92
84
  }
93
85
  }
94
86
  }
95
- function usePermission(table, action, objOrId) {
96
- var enabled = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : typeof objOrId < "u", debug = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : !1, keyBase = `${table}${action}`, key = `${keyBase}${typeof objOrId == "string" ? objOrId : JSON.stringify(objOrId)}`, _permissionCache_get, cacheVal = (_permissionCache_get = permissionCache.get(key)) !== null && _permissionCache_get !== void 0 ? _permissionCache_get : permissionCache.get(keyBase), authData = useAuthData(), permission = modelPermissions[table], query = (function() {
97
- var baseQuery = zero.query[table].one();
98
- return enabled ? baseQuery.where(function(eb) {
99
- return buildPermissionQuery(authData, eb, permission, action, objOrId);
100
- }) : baseQuery;
101
- })(), [data, status] = useQuery(query, {
102
- enabled: !!(enabled && authData && objOrId)
103
- });
104
- debug && console.info("usePermission()", {
105
- data,
106
- status,
107
- action,
108
- authData,
109
- permission
110
- }, (0, import_prettyFormatZeroQuery.prettyFormatZeroQuery)(query));
111
- var result = data, allowed = !!result;
112
- return objOrId ? allowed : !1;
113
- }
87
+ var readPermissions = (0, import_zero.definePermissions)(schema, async function() {
88
+ var permissionsEntries = await Promise.all((0, import_helpers.objectEntries)(models).map(async function(param2) {
89
+ var [key, model] = param2;
90
+ return await (0, import_context.runWithContext)({
91
+ authData: {
92
+ id: "",
93
+ role: void 0,
94
+ email: ""
95
+ }
96
+ }, function() {
97
+ return [
98
+ key,
99
+ {
100
+ row: {
101
+ select: [
102
+ function(authData, eb) {
103
+ var out = model.permissions(eb, authData).read;
104
+ return out === !0 ? eb.and() : out === !1 ? eb.cmpLit(!0, "=", !1) : out;
105
+ }
106
+ ],
107
+ // we have permissions on these through our model system with custom mutators:
108
+ insert: import_zero.ANYONE_CAN,
109
+ update: import_zero.ANYONE_CAN,
110
+ delete: import_zero.ANYONE_CAN
111
+ }
112
+ }
113
+ ];
114
+ });
115
+ })), permissions = Object.fromEntries(permissionsEntries);
116
+ return permissions;
117
+ });
114
118
  return {
115
- where,
116
119
  can,
117
- usePermission
120
+ buildPermissionQuery,
121
+ readPermissions
118
122
  };
119
123
  }
120
- function runEnvironmentSafetyCheck() {
121
- typeof document < "u" || typeof navigator < "u" && navigator.product === "ReactNative" || process.env.VITE_ENVIRONMENT !== "ssr" && console.error(`\u274C\u274C\u274C\u274C
122
-
123
- ERROR: VITE_ENVIRONMENT is not set to "ssr" on server, which means permissions checks won't run when they should
124
- This is makes Zero entirely insecure and needs to be fixed immediately.
125
-
126
- This is likely a One framework issue, unless the user Vite config is overwriting the value.
127
- One automatically sets this value.
128
-
129
- `);
130
- }
131
124
  // Annotate the CommonJS export names for ESM import in node:
132
125
  0 && (module.exports = {
133
126
  createPermissions
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/createPermissions.ts"],
4
- "mappings": "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",
5
- "names": ["where"]
4
+ "mappings": "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",
5
+ "names": ["param"]
6
6
  }
@@ -0,0 +1,128 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all) __defProp(target, name, {
7
+ get: all[name],
8
+ enumerable: !0
9
+ });
10
+ },
11
+ __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from == "object" || typeof from == "function") for (let key of __getOwnPropNames(from)) !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, {
13
+ get: () => from[key],
14
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
15
+ });
16
+ return to;
17
+ };
18
+ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
19
+ value: !0
20
+ }), mod);
21
+ var createZero_exports = {};
22
+ __export(createZero_exports, {
23
+ createZero: () => createZero
24
+ });
25
+ module.exports = __toCommonJS(createZero_exports);
26
+ var import_react = require("@rocicorp/zero/react"),
27
+ import_helpers = require("@vxrn/helpers"),
28
+ import_react2 = require("react"),
29
+ import_createPermissions = require("./createPermissions.cjs"),
30
+ import_context = require("./helpers/context.cjs"),
31
+ import_createMutators = require("./helpers/createMutators.cjs"),
32
+ import_prettyFormatZeroQuery = require("./helpers/prettyFormatZeroQuery.cjs"),
33
+ import_useZeroDebug = require("./helpers/useZeroDebug.cjs"),
34
+ import_jsx_runtime = require("react/jsx-runtime");
35
+ function createZero({
36
+ schema,
37
+ models,
38
+ disable
39
+ }) {
40
+ const modelPermissions = (0, import_helpers.mapObject)(models, val => val.permissions),
41
+ permissionsHelpers = (0, import_createPermissions.createPermissions)({
42
+ schema,
43
+ models,
44
+ getContext: import_context.context,
45
+ environment: "client"
46
+ }),
47
+ permissionCache = (0, import_helpers.createLocalStorage)("permissions-cache", {
48
+ storageLimit: 24
49
+ }),
50
+ zeroEvents = (0, import_helpers.createEmitter)("zero", null),
51
+ AuthDataContext = (0, import_react2.createContext)({}),
52
+ useAuthData = () => (0, import_react2.use)(AuthDataContext);
53
+ function usePermission(table, action, objOrId, enabled = typeof objOrId < "u", debug = !1) {
54
+ const keyBase = `${String(table)}${action}`,
55
+ key = `${keyBase}${typeof objOrId == "string" ? objOrId : JSON.stringify(objOrId)}`,
56
+ cacheVal = permissionCache.get(key) ?? permissionCache.get(keyBase),
57
+ authData = useAuthData(),
58
+ permission = modelPermissions[table],
59
+ query = (() => {
60
+ let baseQuery = zero.query[table].one();
61
+ return enabled ? baseQuery.where(eb => permissionsHelpers.buildPermissionQuery(authData, eb, permission, action, objOrId)) : baseQuery;
62
+ })(),
63
+ [data, status] = useQuery(query, {
64
+ enabled: !!(enabled && authData && objOrId)
65
+ });
66
+ debug && console.info("usePermission()", {
67
+ data,
68
+ status,
69
+ action,
70
+ authData,
71
+ permission
72
+ }, (0, import_prettyFormatZeroQuery.prettyFormatZeroQuery)(query));
73
+ const allowed = !!data;
74
+ return objOrId ? allowed : !1;
75
+ }
76
+ let latestZeroInstance = null;
77
+ const zero = new Proxy({}, {
78
+ get(_, key) {
79
+ return Reflect.get(latestZeroInstance, key, latestZeroInstance);
80
+ }
81
+ }),
82
+ useQuery = (query, options) => {
83
+ if (disable) return [null, {
84
+ type: "unknown"
85
+ }];
86
+ const out = (0, import_react.useQuery)(query, options);
87
+ return process.env.NODE_ENV === "development" && (0, import_useZeroDebug.useZeroDebug)(query, options, out), out;
88
+ },
89
+ ProvideZero = ({
90
+ children,
91
+ authData,
92
+ ...props
93
+ }) => {
94
+ const mutators = (0, import_react2.useMemo)(() => (0, import_createMutators.createMutators)({
95
+ models,
96
+ environment: "client",
97
+ authData,
98
+ can: permissionsHelpers.can
99
+ }), [models, authData]);
100
+ return disable ? children : /* @__PURE__ */(0, import_jsx_runtime.jsx)(AuthDataContext.Provider, {
101
+ value: authData,
102
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_react.ZeroProvider, {
103
+ schema,
104
+ kvStore: "mem",
105
+ onError: error => {
106
+ console.error("Zero Error:", error), zeroEvents.emit({
107
+ type: "error",
108
+ message: error
109
+ });
110
+ },
111
+ mutators,
112
+ ...props,
113
+ children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(SetZeroInstance, {}), children]
114
+ })
115
+ });
116
+ },
117
+ SetZeroInstance = () => {
118
+ const zero2 = (0, import_react.useZero)();
119
+ return zero2 !== latestZeroInstance && (latestZeroInstance = zero2), null;
120
+ };
121
+ return {
122
+ zeroEvents,
123
+ ProvideZero,
124
+ useQuery,
125
+ usePermission,
126
+ zero
127
+ };
128
+ }