over-zero 0.0.0 → 0.0.1

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 (193) 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/createZeroServer.cjs +131 -0
  12. package/dist/cjs/createZeroServer.js +108 -0
  13. package/dist/cjs/createZeroServer.js.map +6 -0
  14. package/dist/cjs/createZeroServer.native.js +107 -0
  15. package/dist/cjs/createZeroServer.native.js.map +6 -0
  16. package/dist/cjs/helpers/context.js.map +1 -1
  17. package/dist/cjs/helpers/context.native.js.map +1 -1
  18. package/dist/cjs/helpers/createMutators.cjs +11 -11
  19. package/dist/cjs/helpers/createMutators.js +9 -7
  20. package/dist/cjs/helpers/createMutators.js.map +1 -1
  21. package/dist/cjs/helpers/createMutators.native.js +8 -6
  22. package/dist/cjs/helpers/createMutators.native.js.map +1 -1
  23. package/dist/cjs/helpers/ensureLoggedIn.cjs +1 -1
  24. package/dist/cjs/helpers/ensureLoggedIn.js +1 -1
  25. package/dist/cjs/helpers/ensureLoggedIn.js.map +1 -1
  26. package/dist/cjs/helpers/ensureLoggedIn.native.js +1 -1
  27. package/dist/cjs/helpers/ensureLoggedIn.native.js.map +1 -1
  28. package/dist/cjs/helpers/getAuthData.cjs +0 -36
  29. package/dist/cjs/helpers/getAuthData.js +0 -28
  30. package/dist/cjs/helpers/getAuthData.js.map +2 -2
  31. package/dist/cjs/helpers/getAuthData.native.js +0 -31
  32. package/dist/cjs/helpers/getAuthData.native.js.map +2 -2
  33. package/dist/cjs/helpers/useAuthData.cjs +0 -32
  34. package/dist/cjs/helpers/useAuthData.js +0 -24
  35. package/dist/cjs/helpers/useAuthData.js.map +2 -2
  36. package/dist/cjs/helpers/useAuthData.native.js +0 -31
  37. package/dist/cjs/helpers/useAuthData.native.js.map +2 -2
  38. package/dist/cjs/helpers/useZeroDebug.cjs +68 -0
  39. package/dist/cjs/helpers/useZeroDebug.js +49 -0
  40. package/dist/cjs/helpers/useZeroDebug.js.map +6 -0
  41. package/dist/cjs/helpers/useZeroDebug.native.js +66 -0
  42. package/dist/cjs/helpers/useZeroDebug.native.js.map +6 -0
  43. package/dist/cjs/helpers/zeroEmitter.cjs +2 -2
  44. package/dist/cjs/helpers/zeroEmitter.js +2 -2
  45. package/dist/cjs/helpers/zeroEmitter.native.js +1 -1
  46. package/dist/cjs/helpers/zeroEmitter.native.js.map +1 -1
  47. package/dist/cjs/index.cjs +3 -1
  48. package/dist/cjs/index.js +2 -0
  49. package/dist/cjs/index.js.map +1 -1
  50. package/dist/cjs/index.native.js +4 -0
  51. package/dist/cjs/index.native.js.map +1 -1
  52. package/dist/cjs/mutations.cjs +50 -0
  53. package/dist/cjs/mutations.js +43 -0
  54. package/dist/cjs/mutations.js.map +6 -0
  55. package/dist/cjs/mutations.native.js +50 -0
  56. package/dist/cjs/mutations.native.js.map +6 -0
  57. package/dist/cjs/server.cjs +18 -0
  58. package/dist/cjs/server.js +15 -0
  59. package/dist/cjs/server.js.map +6 -0
  60. package/dist/cjs/server.native.js +20 -0
  61. package/dist/cjs/server.native.js.map +6 -0
  62. package/dist/cjs/where.cjs +33 -0
  63. package/dist/cjs/where.js +28 -0
  64. package/dist/cjs/where.js.map +6 -0
  65. package/dist/cjs/where.native.js +34 -0
  66. package/dist/cjs/where.native.js.map +6 -0
  67. package/dist/esm/createPermissions.js +48 -47
  68. package/dist/esm/createPermissions.js.map +2 -2
  69. package/dist/esm/createPermissions.mjs +41 -55
  70. package/dist/esm/createPermissions.mjs.map +1 -1
  71. package/dist/esm/createPermissions.native.js +55 -69
  72. package/dist/esm/createPermissions.native.js.map +1 -1
  73. package/dist/esm/createZero.js +99 -0
  74. package/dist/esm/createZero.js.map +6 -0
  75. package/dist/esm/createZero.mjs +105 -0
  76. package/dist/esm/createZero.mjs.map +1 -0
  77. package/dist/esm/createZero.native.js +119 -0
  78. package/dist/esm/createZero.native.js.map +1 -0
  79. package/dist/esm/createZeroServer.js +90 -0
  80. package/dist/esm/createZeroServer.js.map +6 -0
  81. package/dist/esm/createZeroServer.mjs +97 -0
  82. package/dist/esm/createZeroServer.mjs.map +1 -0
  83. package/dist/esm/createZeroServer.native.js +104 -0
  84. package/dist/esm/createZeroServer.native.js.map +1 -0
  85. package/dist/esm/helpers/context.js.map +1 -1
  86. package/dist/esm/helpers/context.mjs.map +1 -1
  87. package/dist/esm/helpers/context.native.js.map +1 -1
  88. package/dist/esm/helpers/createMutators.js +6 -7
  89. package/dist/esm/helpers/createMutators.js.map +1 -1
  90. package/dist/esm/helpers/createMutators.mjs +7 -7
  91. package/dist/esm/helpers/createMutators.mjs.map +1 -1
  92. package/dist/esm/helpers/createMutators.native.js +9 -7
  93. package/dist/esm/helpers/createMutators.native.js.map +1 -1
  94. package/dist/esm/helpers/ensureLoggedIn.js +1 -1
  95. package/dist/esm/helpers/ensureLoggedIn.js.map +1 -1
  96. package/dist/esm/helpers/ensureLoggedIn.mjs +1 -1
  97. package/dist/esm/helpers/ensureLoggedIn.mjs.map +1 -1
  98. package/dist/esm/helpers/ensureLoggedIn.native.js +1 -1
  99. package/dist/esm/helpers/ensureLoggedIn.native.js.map +1 -1
  100. package/dist/esm/helpers/getAuthData.js +0 -12
  101. package/dist/esm/helpers/getAuthData.js.map +2 -2
  102. package/dist/esm/helpers/getAuthData.mjs +1 -12
  103. package/dist/esm/helpers/getAuthData.mjs.map +1 -1
  104. package/dist/esm/helpers/getAuthData.native.js +1 -12
  105. package/dist/esm/helpers/getAuthData.native.js.map +1 -1
  106. package/dist/esm/helpers/useAuthData.js +0 -10
  107. package/dist/esm/helpers/useAuthData.js.map +2 -2
  108. package/dist/esm/helpers/useAuthData.mjs +1 -8
  109. package/dist/esm/helpers/useAuthData.mjs.map +1 -1
  110. package/dist/esm/helpers/useAuthData.native.js +1 -12
  111. package/dist/esm/helpers/useAuthData.native.js.map +1 -1
  112. package/dist/esm/helpers/useZeroDebug.js +35 -0
  113. package/dist/esm/helpers/useZeroDebug.js.map +6 -0
  114. package/dist/esm/helpers/useZeroDebug.mjs +45 -0
  115. package/dist/esm/helpers/useZeroDebug.mjs.map +1 -0
  116. package/dist/esm/helpers/useZeroDebug.native.js +53 -0
  117. package/dist/esm/helpers/useZeroDebug.native.js.map +1 -0
  118. package/dist/esm/helpers/zeroEmitter.js +1 -1
  119. package/dist/esm/helpers/zeroEmitter.mjs +1 -1
  120. package/dist/esm/helpers/zeroEmitter.native.js +1 -1
  121. package/dist/esm/index.js +2 -0
  122. package/dist/esm/index.js.map +1 -1
  123. package/dist/esm/index.mjs +3 -1
  124. package/dist/esm/index.mjs.map +1 -1
  125. package/dist/esm/index.native.js +3 -1
  126. package/dist/esm/index.native.js.map +1 -1
  127. package/dist/esm/mutations.js +27 -0
  128. package/dist/esm/mutations.js.map +6 -0
  129. package/dist/esm/mutations.mjs +27 -0
  130. package/dist/esm/mutations.mjs.map +1 -0
  131. package/dist/esm/mutations.native.js +29 -0
  132. package/dist/esm/mutations.native.js.map +1 -0
  133. package/dist/esm/server.js +2 -0
  134. package/dist/esm/server.js.map +6 -0
  135. package/dist/esm/server.mjs +2 -0
  136. package/dist/esm/server.mjs.map +1 -0
  137. package/dist/esm/server.native.js +2 -0
  138. package/dist/esm/server.native.js.map +1 -0
  139. package/dist/esm/where.js +12 -0
  140. package/dist/esm/where.js.map +6 -0
  141. package/dist/esm/where.mjs +9 -0
  142. package/dist/esm/where.mjs.map +1 -0
  143. package/dist/esm/where.native.js +9 -0
  144. package/dist/esm/where.native.js.map +1 -0
  145. package/package.json +12 -6
  146. package/src/createPermissions.ts +17 -77
  147. package/src/{createZeroClient.tsx → createZero.tsx} +25 -17
  148. package/src/createZeroServer.ts +43 -43
  149. package/src/helpers/createMutators.ts +19 -29
  150. package/src/helpers/ensureLoggedIn.ts +2 -1
  151. package/src/helpers/prettyFormatZeroQuery.ts +1 -1
  152. package/src/helpers/useZeroDebug.ts +1 -0
  153. package/src/index.ts +2 -6
  154. package/src/mutations.ts +20 -7
  155. package/src/server.ts +1 -0
  156. package/src/types.ts +74 -7
  157. package/src/where.ts +28 -0
  158. package/src/helpers/clearZeroDatabase.ts +0 -68
  159. package/src/helpers/getAuthData.tsx +0 -12
  160. package/src/helpers/useAuthData.ts +0 -13
  161. package/src/helpers/zeroEmitter.ts +0 -5
  162. package/types/createMutations.d.ts +0 -20
  163. package/types/createMutations.d.ts.map +0 -1
  164. package/types/createPermissions.d.ts +0 -37
  165. package/types/createPermissions.d.ts.map +0 -1
  166. package/types/createZeroClient.d.ts +0 -45
  167. package/types/createZeroClient.d.ts.map +0 -1
  168. package/types/createZeroServer.d.ts +0 -61
  169. package/types/createZeroServer.d.ts.map +0 -1
  170. package/types/helpers/batchQuery.d.ts +0 -7
  171. package/types/helpers/batchQuery.d.ts.map +0 -1
  172. package/types/helpers/clearZeroDatabase.d.ts +0 -2
  173. package/types/helpers/clearZeroDatabase.d.ts.map +0 -1
  174. package/types/helpers/context.d.ts +0 -5
  175. package/types/helpers/context.d.ts.map +0 -1
  176. package/types/helpers/createMutators.d.ts +0 -16
  177. package/types/helpers/createMutators.d.ts.map +0 -1
  178. package/types/helpers/ensureLoggedIn.d.ts +0 -2
  179. package/types/helpers/ensureLoggedIn.d.ts.map +0 -1
  180. package/types/helpers/getAuthData.d.ts +0 -1
  181. package/types/helpers/getAuthData.d.ts.map +0 -1
  182. package/types/helpers/prettyFormatZeroQuery.d.ts +0 -3
  183. package/types/helpers/prettyFormatZeroQuery.d.ts.map +0 -1
  184. package/types/helpers/useAuthData.d.ts +0 -1
  185. package/types/helpers/useAuthData.d.ts.map +0 -1
  186. package/types/helpers/useZeroDebug.d.ts +0 -3
  187. package/types/helpers/useZeroDebug.d.ts.map +0 -1
  188. package/types/helpers/zeroEmitter.d.ts +0 -2
  189. package/types/helpers/zeroEmitter.d.ts.map +0 -1
  190. package/types/index.d.ts +0 -9
  191. package/types/index.d.ts.map +0 -1
  192. package/types/types.d.ts +0 -21
  193. package/types/types.d.ts.map +0 -1
@@ -1,17 +1,14 @@
1
- import { createLocalStorage, ensure, EnsureError } from "@vxrn/helpers";
1
+ import { ANYONE_CAN, definePermissions } from "@rocicorp/zero";
2
+ import { ensure, EnsureError, objectEntries } from "@vxrn/helpers";
3
+ import { runWithContext } from "./helpers/context";
2
4
  import { prettyFormatZeroQuery } from "./helpers/prettyFormatZeroQuery";
3
- function createPermissions(schema, getContext) {
4
- runEnvironmentSafetyCheck();
5
- const permissionCache = createLocalStorage("permissions-cache", {
6
- storageLimit: 24
7
- });
8
- function where(a, b) {
9
- return b && WhereTableNameMap.set(b, a), b || a;
10
- }
11
- const WhereTableNameMap = /* @__PURE__ */ new WeakMap();
12
- function getWhereTableName(where2) {
13
- return WhereTableNameMap.get(where2);
14
- }
5
+ import { getWhereTableName } from "./where";
6
+ function createPermissions({
7
+ environment,
8
+ schema,
9
+ models,
10
+ getContext
11
+ }) {
15
12
  const fallbackActions = {
16
13
  select: "read",
17
14
  insert: "write",
@@ -23,7 +20,10 @@ function createPermissions(schema, getContext) {
23
20
  const tableName = getWhereTableName(permissionWhere);
24
21
  if (!tableName)
25
22
  throw new Error("Must use PermissionWhere for buildPermissionQuery");
26
- const primaryKeys = schema.tables[tableName].primaryKey, permissionQueryBuilder = permissionWhere(eb, authData), fallbackAction = fallbackActions[action], permissionCondition = permissionQueryBuilder[action] || (fallbackAction ? permissionQueryBuilder[fallbackAction] : void 0);
23
+ const tableSchema = schema.tables[tableName];
24
+ if (!tableSchema)
25
+ throw new Error("No schema?");
26
+ const primaryKeys = tableSchema.primaryKey, permissionQueryBuilder = permissionWhere(eb, authData), fallbackAction = fallbackActions[action], permissionCondition = permissionQueryBuilder[action] || (fallbackAction ? permissionQueryBuilder[fallbackAction] : void 0);
27
27
  if (permissionCondition == null)
28
28
  throw new Error(`No permission defined for ${action} (or ${fallbackAction})`);
29
29
  if (permissionCondition === !0)
@@ -37,26 +37,26 @@ function createPermissions(schema, getContext) {
37
37
  }
38
38
  return eb.and(permissionCondition, ...primaryKeyWheres);
39
39
  }
40
- async function can(where2, action, obj) {
41
- const ctx = getContext(), tableName = getWhereTableName(where2);
40
+ async function can(where, action, obj) {
41
+ const ctx = getContext(), tableName = getWhereTableName(where);
42
42
  if (!tableName)
43
43
  throw new Error("Must use where('table') style where to pass to can()");
44
- process.env.VITE_ENVIRONMENT === "ssr" && (await ensurePermission(
44
+ environment === "server" && (await ensurePermission(
45
45
  ctx.tx,
46
46
  ctx.authData,
47
47
  tableName,
48
- where2,
48
+ where,
49
49
  action,
50
50
  obj
51
51
  ), ctx.didCanPermissionsRun = !0);
52
52
  }
53
- async function ensurePermission(tx, authData, tableName, where2, actionIn, obj) {
53
+ async function ensurePermission(tx, authData, tableName, where, actionIn, obj) {
54
54
  if (authData?.role === "admin")
55
55
  return;
56
56
  const action = String(actionIn), name = `${tableName}.${action}`, queryBase = tx.query[tableName];
57
57
  let query = null;
58
58
  try {
59
- query = queryBase.where((eb) => buildPermissionQuery(authData, eb, where2, action, obj)).one(), ensure(await query);
59
+ query = queryBase.where((eb) => buildPermissionQuery(authData, eb, where, action, obj)).one(), ensure(await query);
60
60
  } catch (err) {
61
61
  const errorTitle = `${name} with auth id: ${authData?.id}`;
62
62
  if (err instanceof EnsureError) {
@@ -68,38 +68,39 @@ function createPermissions(schema, getContext) {
68
68
  ${err}`);
69
69
  }
70
70
  }
71
- function usePermission(table, action, objOrId, enabled = typeof objOrId < "u", debug = !1) {
72
- 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 = (() => {
73
- let baseQuery = zero.query[table].one();
74
- return enabled ? baseQuery.where((eb) => buildPermissionQuery(authData, eb, permission, action, objOrId)) : baseQuery;
75
- })(), [data, status] = useQuery(query, {
76
- enabled: !!(enabled && authData && objOrId)
77
- });
78
- debug && console.info(
79
- "usePermission()",
80
- { data, status, action, authData, permission },
81
- prettyFormatZeroQuery(query)
71
+ const readPermissions = definePermissions(schema, async () => {
72
+ const permissionsEntries = await Promise.all(
73
+ objectEntries(models).map(async ([key, model]) => await runWithContext(
74
+ {
75
+ authData: { id: "", role: void 0, email: "" }
76
+ },
77
+ () => [
78
+ key,
79
+ {
80
+ row: {
81
+ select: [
82
+ (authData, eb) => {
83
+ const out = model.permissions(eb, authData).read;
84
+ return out === !0 ? eb.and() : out === !1 ? eb.cmpLit(!0, "=", !1) : out;
85
+ }
86
+ ],
87
+ // we have permissions on these through our model system with custom mutators:
88
+ insert: ANYONE_CAN,
89
+ update: ANYONE_CAN,
90
+ delete: ANYONE_CAN
91
+ }
92
+ }
93
+ ]
94
+ ))
82
95
  );
83
- const allowed = !!data;
84
- return objOrId ? allowed : !1;
85
- }
96
+ return Object.fromEntries(permissionsEntries);
97
+ });
86
98
  return {
87
- where,
88
99
  can,
89
- usePermission
100
+ buildPermissionQuery,
101
+ readPermissions
90
102
  };
91
103
  }
92
- function runEnvironmentSafetyCheck() {
93
- typeof document < "u" || typeof navigator < "u" && navigator.product === "ReactNative" || process.env.VITE_ENVIRONMENT !== "ssr" && console.error(`\u274C\u274C\u274C\u274C
94
-
95
- ERROR: VITE_ENVIRONMENT is not set to "ssr" on server, which means permissions checks won't run when they should
96
- This is makes Zero entirely insecure and needs to be fixed immediately.
97
-
98
- This is likely a One framework issue, unless the user Vite config is overwriting the value.
99
- One automatically sets this value.
100
-
101
- `);
102
- }
103
104
  export {
104
105
  createPermissions
105
106
  };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/createPermissions.ts"],
4
- "mappings": "AAQA,SAAS,oBAAoB,QAAQ,mBAAmB;AAGxD,SAAS,6BAA6B;AAE/B,SAAS,kBACd,QACA,YACA;AACA,4BAA0B;AAO1B,QAAM,kBAAkB,mBAAoC,qBAAqB;AAAA,IAC/E,cAAc;AAAA,EAChB,CAAC;AAoBD,WAAS,MACP,GACA,GACS;AACT,WAAI,KACF,kBAAkB,IAAI,GAAG,CAAU,GAE7B,KAAK;AAAA,EACf;AAIA,QAAM,oBAAoB,oBAAI,QAA0B;AAExD,WAAS,kBAAkBA,QAAc;AACvC,WAAO,kBAAkB,IAAIA,MAAK;AAAA,EACpC;AAqBA,QAAM,kBAA0C;AAAA,IAC9C,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AAEA,WAAS,qBAIP,UACA,IACA,iBACA,QAEA,SACA;AACA,UAAM,YAAY,kBAAkB,eAAe;AAEnD,QAAI,CAAC;AACH,YAAM,IAAI,MAAM,mDAAmD;AAIrE,UAAM,cADc,OAAO,OAAO,SAAS,EACX,YAC1B,yBAAyB,gBAAgB,IAAI,QAAQ,GACrD,iBAAiB,gBAAgB,MAAM,GAEvC,sBACJ,uBAAuB,MAAM,MAC5B,iBAAiB,uBAAuB,cAAc,IAAI;AAE7D,QAAI,uBAAuB;AACzB,YAAM,IAAI,MAAM,6BAA6B,MAAM,QAAQ,cAAc,GAAG;AAG9E,QAAI,wBAAwB;AAC1B,aAAO,GAAG,OAAO,IAAM,KAAK,EAAI;AAGlC,QAAI,wBAAwB;AAC1B,aAAO,GAAG,OAAO,IAAM,KAAK,EAAK;AAGnC,UAAM,mBAAgC,CAAC;AAEvC,eAAW,OAAO,aAAa;AAC7B,YAAM,QAAQ,OAAO,WAAY,WAAW,UAAU,QAAQ,GAAG;AACjE,uBAAiB,KAAK,GAAG,IAAI,KAAY,KAAK,CAAC;AAAA,IACjD;AAEA,WAAO,GAAG,IAAI,qBAAqB,GAAG,gBAAgB;AAAA,EACxD;AAEA,iBAAe,IAGbA,QAAe,QAAgB,KAAU;AACzC,UAAM,MAAM,WAAW,GACjB,YAAY,kBAAkBA,MAAK;AACzC,QAAI,CAAC;AACH,YAAM,IAAI,MAAM,sDAAsD;AAIxE,IAAI,QAAQ,IAAI,qBAAqB,UACnC,MAAM;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ;AAAA,MACAA;AAAA,MACA;AAAA,MACA;AAAA,IACF,GACA,IAAI,uBAAuB;AAAA,EAE/B;AAIA,iBAAe,iBAIb,IACA,UACA,WACAA,QACA,UACA,KACe;AACf,QAAI,UAAU,SAAS;AAErB;AAGF,UAAM,SAAS,OAAO,QAAQ,GACxB,OAAO,GAAG,SAAS,IAAI,MAAM,IAC7B,YAAY,GAAG,MAAM,SAAS;AACpC,QAAI,QAAqC;AAEzC,QAAI;AACF,cAAQ,UACL,MAAM,CAAC,OACC,qBAAqB,UAAU,IAAIA,QAAO,QAAQ,GAAG,CAC7D,EACA,IAAI,GAEP,OAAO,MAAM,KAAK;AAAA,IACpB,SAAS,KAAK;AACZ,YAAM,aAAa,GAAG,IAAI,kBAAkB,UAAU,EAAE;AAExD,UAAI,eAAe,aAAa;AAC9B,YAAI,MAAM,uCAAgC,UAAU;AACpD,cAAI,QAAQ,IAAI,aAAa,iBAAiB,UAC5C,OAAO;AAAA,GAAM,sBAAsB,KAAK,CAAC,KAErC,IAAI,MAAM,GAAG;AAAA,MACrB;AAEA,YAAM,IAAI,MAAM,4BAA4B,UAAU;AAAA,EAAK,GAAG,EAAE;AAAA,IAClE;AAAA,EACF;AAEA,WAAS,cAIP,OACA,QACA,SACA,UAAU,OAAO,UAAY,KAC7B,QAAQ,IACQ;AAEhB,UAAM,UAAU,GAAG,KAAK,GAAG,MAAM,IAC3B,MAAM,GAAG,OAAO,GAAG,OAAO,WAAY,WAAW,UAAU,KAAK,UAAU,OAAO,CAAC,IAClF,WAAW,gBAAgB,IAAI,GAAG,KAAK,gBAAgB,IAAI,OAAO,GAClE,WAAW,YAAY,GACvB,aAAa,iBAAiB,KAAK,GAEnC,SAAS,MAAM;AACnB,UAAI,YAAY,KAAK,MAAM,KAAK,EAAE,IAAI;AAEtC,aAAK,UAIE,UAAU,MAAM,CAAC,OACf,qBAAqB,UAAU,IAAI,YAAY,QAAQ,OAAc,CAC7E,IALQ;AAAA,IAMX,GAAG,GAEG,CAAC,MAAM,MAAM,IAAI,SAAS,OAAO;AAAA,MACrC,SAAS,GAAQ,WAAW,YAAY;AAAA,IAC1C,CAAC;AAED,IAAI,SACF,QAAQ;AAAA,MACN;AAAA,MACA,EAAE,MAAM,QAAQ,QAAQ,UAAU,WAAW;AAAA,MAC7C,sBAAsB,KAAK;AAAA,IAC7B;AAKF,UAAM,UAAU,EAFD;AAIf,WAAK,UAIE,UAHE;AAAA,EAIX;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAIA,SAAS,4BAA4B;AACnC,EAAI,OAAO,WAAa,OAEb,OAAO,YAAc,OAAe,UAAU,YAAY,iBAI/D,QAAQ,IAAI,qBAAqB,SACnC,QAAQ,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAQX;AAGT;",
5
- "names": ["where"]
4
+ "mappings": "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",
5
+ "names": []
6
6
  }
@@ -1,17 +1,14 @@
1
- import { createLocalStorage, ensure, EnsureError } from "@vxrn/helpers";
1
+ import { ANYONE_CAN, definePermissions } from "@rocicorp/zero";
2
+ import { ensure, EnsureError, objectEntries } from "@vxrn/helpers";
3
+ import { runWithContext } from "./helpers/context.mjs";
2
4
  import { prettyFormatZeroQuery } from "./helpers/prettyFormatZeroQuery.mjs";
3
- function createPermissions(schema, getContext) {
4
- runEnvironmentSafetyCheck();
5
- const permissionCache = createLocalStorage("permissions-cache", {
6
- storageLimit: 24
7
- });
8
- function where(a, b) {
9
- return b && WhereTableNameMap.set(b, a), b || a;
10
- }
11
- const WhereTableNameMap = /* @__PURE__ */new WeakMap();
12
- function getWhereTableName(where2) {
13
- return WhereTableNameMap.get(where2);
14
- }
5
+ import { getWhereTableName } from "./where.mjs";
6
+ function createPermissions({
7
+ environment,
8
+ schema,
9
+ models,
10
+ getContext
11
+ }) {
15
12
  const fallbackActions = {
16
13
  select: "read",
17
14
  insert: "write",
@@ -22,7 +19,9 @@ function createPermissions(schema, getContext) {
22
19
  function buildPermissionQuery(authData, eb, permissionWhere, action, objOrId) {
23
20
  const tableName = getWhereTableName(permissionWhere);
24
21
  if (!tableName) throw new Error("Must use PermissionWhere for buildPermissionQuery");
25
- const primaryKeys = schema.tables[tableName].primaryKey,
22
+ const tableSchema = schema.tables[tableName];
23
+ if (!tableSchema) throw new Error("No schema?");
24
+ const primaryKeys = tableSchema.primaryKey,
26
25
  permissionQueryBuilder = permissionWhere(eb, authData),
27
26
  fallbackAction = fallbackActions[action],
28
27
  permissionCondition = permissionQueryBuilder[action] || (fallbackAction ? permissionQueryBuilder[fallbackAction] : void 0);
@@ -36,20 +35,20 @@ function createPermissions(schema, getContext) {
36
35
  }
37
36
  return eb.and(permissionCondition, ...primaryKeyWheres);
38
37
  }
39
- async function can(where2, action, obj) {
38
+ async function can(where, action, obj) {
40
39
  const ctx = getContext(),
41
- tableName = getWhereTableName(where2);
40
+ tableName = getWhereTableName(where);
42
41
  if (!tableName) throw new Error("Must use where('table') style where to pass to can()");
43
- process.env.VITE_ENVIRONMENT === "ssr" && (await ensurePermission(ctx.tx, ctx.authData, tableName, where2, action, obj), ctx.didCanPermissionsRun = !0);
42
+ environment === "server" && (await ensurePermission(ctx.tx, ctx.authData, tableName, where, action, obj), ctx.didCanPermissionsRun = !0);
44
43
  }
45
- async function ensurePermission(tx, authData, tableName, where2, actionIn, obj) {
44
+ async function ensurePermission(tx, authData, tableName, where, actionIn, obj) {
46
45
  if (authData?.role === "admin") return;
47
46
  const action = String(actionIn),
48
47
  name = `${tableName}.${action}`,
49
48
  queryBase = tx.query[tableName];
50
49
  let query = null;
51
50
  try {
52
- query = queryBase.where(eb => buildPermissionQuery(authData, eb, where2, action, obj)).one(), ensure(await query);
51
+ query = queryBase.where(eb => buildPermissionQuery(authData, eb, where, action, obj)).one(), ensure(await query);
53
52
  } catch (err) {
54
53
  const errorTitle = `${name} with auth id: ${authData?.id}`;
55
54
  if (err instanceof EnsureError) {
@@ -61,45 +60,32 @@ function createPermissions(schema, getContext) {
61
60
  ${err}`);
62
61
  }
63
62
  }
64
- function usePermission(table, action, objOrId, enabled = typeof objOrId < "u", debug = !1) {
65
- const keyBase = `${table}${action}`,
66
- key = `${keyBase}${typeof objOrId == "string" ? objOrId : JSON.stringify(objOrId)}`,
67
- cacheVal = permissionCache.get(key) ?? permissionCache.get(keyBase),
68
- authData = useAuthData(),
69
- permission = modelPermissions[table],
70
- query = (() => {
71
- let baseQuery = zero.query[table].one();
72
- return enabled ? baseQuery.where(eb => buildPermissionQuery(authData, eb, permission, action, objOrId)) : baseQuery;
73
- })(),
74
- [data, status] = useQuery(query, {
75
- enabled: !!(enabled && authData && objOrId)
76
- });
77
- debug && console.info("usePermission()", {
78
- data,
79
- status,
80
- action,
81
- authData,
82
- permission
83
- }, prettyFormatZeroQuery(query));
84
- const allowed = !!data;
85
- return objOrId ? allowed : !1;
86
- }
63
+ const readPermissions = definePermissions(schema, async () => {
64
+ const permissionsEntries = await Promise.all(objectEntries(models).map(async ([key, model]) => await runWithContext({
65
+ authData: {
66
+ id: "",
67
+ role: void 0,
68
+ email: ""
69
+ }
70
+ }, () => [key, {
71
+ row: {
72
+ select: [(authData, eb) => {
73
+ const out = model.permissions(eb, authData).read;
74
+ return out === !0 ? eb.and() : out === !1 ? eb.cmpLit(!0, "=", !1) : out;
75
+ }],
76
+ // we have permissions on these through our model system with custom mutators:
77
+ insert: ANYONE_CAN,
78
+ update: ANYONE_CAN,
79
+ delete: ANYONE_CAN
80
+ }
81
+ }])));
82
+ return Object.fromEntries(permissionsEntries);
83
+ });
87
84
  return {
88
- where,
89
85
  can,
90
- usePermission
86
+ buildPermissionQuery,
87
+ readPermissions
91
88
  };
92
89
  }
93
- function runEnvironmentSafetyCheck() {
94
- typeof document < "u" || typeof navigator < "u" && navigator.product === "ReactNative" || process.env.VITE_ENVIRONMENT !== "ssr" && console.error(`\u274C\u274C\u274C\u274C
95
-
96
- ERROR: VITE_ENVIRONMENT is not set to "ssr" on server, which means permissions checks won't run when they should
97
- This is makes Zero entirely insecure and needs to be fixed immediately.
98
-
99
- This is likely a One framework issue, unless the user Vite config is overwriting the value.
100
- One automatically sets this value.
101
-
102
- `);
103
- }
104
90
  export { createPermissions };
105
91
  //# sourceMappingURL=createPermissions.mjs.map
@@ -1 +1 @@
1
- {"version":3,"names":["createLocalStorage","ensure","EnsureError","prettyFormatZeroQuery","createPermissions","schema","getContext","runEnvironmentSafetyCheck","permissionCache","storageLimit","where","a","b","WhereTableNameMap","set","WeakMap","getWhereTableName","where2","get","fallbackActions","select","insert","update","upsert","delete","buildPermissionQuery","authData","eb","permissionWhere","action","objOrId","tableName","Error","primaryKeys","tables","primaryKey","permissionQueryBuilder","fallbackAction","permissionCondition","cmpLit","primaryKeyWheres","key","value","push","cmp","and","can","obj","ctx","process","env","VITE_ENVIRONMENT","ensurePermission","tx","didCanPermissionsRun","actionIn","role","String","name","queryBase","query","one","err","errorTitle","id","msg","NODE_ENV","usePermission","table","enabled","debug","keyBase","JSON","stringify","cacheVal","useAuthData","permission","modelPermissions","baseQuery","zero","data","status","useQuery","console","info","allowed","document","navigator","product","error"],"sources":["../../src/createPermissions.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["ANYONE_CAN","definePermissions","ensure","EnsureError","objectEntries","runWithContext","prettyFormatZeroQuery","getWhereTableName","createPermissions","environment","schema","models","getContext","fallbackActions","select","insert","update","upsert","delete","buildPermissionQuery","authData","eb","permissionWhere","action","objOrId","tableName","Error","tableSchema","tables","primaryKeys","primaryKey","permissionQueryBuilder","fallbackAction","permissionCondition","cmpLit","primaryKeyWheres","key","value","push","cmp","and","can","where","obj","ctx","ensurePermission","tx","didCanPermissionsRun","actionIn","role","String","name","queryBase","query","one","err","errorTitle","id","msg","process","env","NODE_ENV","readPermissions","permissionsEntries","Promise","all","map","model","email","row","out","permissions","read","Object","fromEntries"],"sources":["../../src/createPermissions.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1,29 +1,28 @@
1
- import { createLocalStorage, ensure, EnsureError } from "@vxrn/helpers";
1
+ import { ANYONE_CAN, definePermissions } from "@rocicorp/zero";
2
+ import { ensure, EnsureError, objectEntries } from "@vxrn/helpers";
3
+ import { runWithContext } from "./helpers/context.native.js";
2
4
  import { prettyFormatZeroQuery } from "./helpers/prettyFormatZeroQuery.native.js";
3
- function createPermissions(schema, getContext) {
4
- runEnvironmentSafetyCheck();
5
- var permissionCache = createLocalStorage("permissions-cache", {
6
- storageLimit: 24
7
- });
8
- function where(a, b) {
9
- return b && WhereTableNameMap.set(b, a), b || a;
10
- }
11
- var WhereTableNameMap = /* @__PURE__ */new WeakMap();
12
- function getWhereTableName(where2) {
13
- return WhereTableNameMap.get(where2);
14
- }
15
- var fallbackActions = {
16
- select: "read",
17
- insert: "write",
18
- update: "write",
19
- upsert: "write",
20
- delete: "write"
21
- };
5
+ import { getWhereTableName } from "./where.native.js";
6
+ function createPermissions(param) {
7
+ var {
8
+ environment,
9
+ schema,
10
+ models,
11
+ getContext
12
+ } = param,
13
+ fallbackActions = {
14
+ select: "read",
15
+ insert: "write",
16
+ update: "write",
17
+ upsert: "write",
18
+ delete: "write"
19
+ };
22
20
  function buildPermissionQuery(authData, eb, permissionWhere, action, objOrId) {
23
21
  var tableName = getWhereTableName(permissionWhere);
24
22
  if (!tableName) throw new Error("Must use PermissionWhere for buildPermissionQuery");
25
- var tableSchema = schema.tables[tableName],
26
- primaryKeys = tableSchema.primaryKey,
23
+ var tableSchema = schema.tables[tableName];
24
+ if (!tableSchema) throw new Error("No schema?");
25
+ var primaryKeys = tableSchema.primaryKey,
27
26
  permissionQueryBuilder = permissionWhere(eb, authData),
28
27
  fallbackAction = fallbackActions[action],
29
28
  permissionCondition = permissionQueryBuilder[action] || (fallbackAction ? permissionQueryBuilder[fallbackAction] : void 0);
@@ -51,13 +50,13 @@ function createPermissions(schema, getContext) {
51
50
  }
52
51
  return eb.and(permissionCondition, ...primaryKeyWheres);
53
52
  }
54
- async function can(where2, action, obj) {
53
+ async function can(where, action, obj) {
55
54
  var ctx = getContext(),
56
- tableName = getWhereTableName(where2);
55
+ tableName = getWhereTableName(where);
57
56
  if (!tableName) throw new Error("Must use where('table') style where to pass to can()");
58
- process.env.VITE_ENVIRONMENT === "ssr" && (await ensurePermission(ctx.tx, ctx.authData, tableName, where2, action, obj), ctx.didCanPermissionsRun = !0);
57
+ environment === "server" && (await ensurePermission(ctx.tx, ctx.authData, tableName, where, action, obj), ctx.didCanPermissionsRun = !0);
59
58
  }
60
- async function ensurePermission(tx, authData, tableName, where2, actionIn, obj) {
59
+ async function ensurePermission(tx, authData, tableName, where, actionIn, obj) {
61
60
  if (authData?.role !== "admin") {
62
61
  var action = String(actionIn),
63
62
  name = `${tableName}.${action}`,
@@ -65,7 +64,7 @@ function createPermissions(schema, getContext) {
65
64
  query = null;
66
65
  try {
67
66
  query = queryBase.where(function (eb) {
68
- return buildPermissionQuery(authData, eb, where2, action, obj);
67
+ return buildPermissionQuery(authData, eb, where, action, obj);
69
68
  }).one(), ensure(await query);
70
69
  } catch (err) {
71
70
  var errorTitle = `${name} with auth id: ${authData?.id}`;
@@ -79,51 +78,38 @@ ${err}`);
79
78
  }
80
79
  }
81
80
  }
82
- function usePermission(table, action, objOrId) {
83
- var enabled = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : typeof objOrId < "u",
84
- debug = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : !1,
85
- keyBase = `${table}${action}`,
86
- key = `${keyBase}${typeof objOrId == "string" ? objOrId : JSON.stringify(objOrId)}`,
87
- _permissionCache_get,
88
- cacheVal = (_permissionCache_get = permissionCache.get(key)) !== null && _permissionCache_get !== void 0 ? _permissionCache_get : permissionCache.get(keyBase),
89
- authData = useAuthData(),
90
- permission = modelPermissions[table],
91
- query = function () {
92
- var baseQuery = zero.query[table].one();
93
- return enabled ? baseQuery.where(function (eb) {
94
- return buildPermissionQuery(authData, eb, permission, action, objOrId);
95
- }) : baseQuery;
96
- }(),
97
- [data, status] = useQuery(query, {
98
- enabled: !!(enabled && authData && objOrId)
99
- });
100
- debug && console.info("usePermission()", {
101
- data,
102
- status,
103
- action,
104
- authData,
105
- permission
106
- }, prettyFormatZeroQuery(query));
107
- var result = data,
108
- allowed = !!result;
109
- return objOrId ? allowed : !1;
110
- }
81
+ var readPermissions = definePermissions(schema, async function () {
82
+ var permissionsEntries = await Promise.all(objectEntries(models).map(async function (param2) {
83
+ var [key, model] = param2;
84
+ return await runWithContext({
85
+ authData: {
86
+ id: "",
87
+ role: void 0,
88
+ email: ""
89
+ }
90
+ }, function () {
91
+ return [key, {
92
+ row: {
93
+ select: [function (authData, eb) {
94
+ var out = model.permissions(eb, authData).read;
95
+ return out === !0 ? eb.and() : out === !1 ? eb.cmpLit(!0, "=", !1) : out;
96
+ }],
97
+ // we have permissions on these through our model system with custom mutators:
98
+ insert: ANYONE_CAN,
99
+ update: ANYONE_CAN,
100
+ delete: ANYONE_CAN
101
+ }
102
+ }];
103
+ });
104
+ })),
105
+ permissions = Object.fromEntries(permissionsEntries);
106
+ return permissions;
107
+ });
111
108
  return {
112
- where,
113
109
  can,
114
- usePermission
110
+ buildPermissionQuery,
111
+ readPermissions
115
112
  };
116
113
  }
117
- function runEnvironmentSafetyCheck() {
118
- typeof document < "u" || typeof navigator < "u" && navigator.product === "ReactNative" || process.env.VITE_ENVIRONMENT !== "ssr" && console.error(`\u274C\u274C\u274C\u274C
119
-
120
- ERROR: VITE_ENVIRONMENT is not set to "ssr" on server, which means permissions checks won't run when they should
121
- This is makes Zero entirely insecure and needs to be fixed immediately.
122
-
123
- This is likely a One framework issue, unless the user Vite config is overwriting the value.
124
- One automatically sets this value.
125
-
126
- `);
127
- }
128
114
  export { createPermissions };
129
115
  //# sourceMappingURL=createPermissions.native.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createLocalStorage","ensure","EnsureError","prettyFormatZeroQuery","createPermissions","schema","getContext","runEnvironmentSafetyCheck","permissionCache","storageLimit","where","a","b","WhereTableNameMap","set","WeakMap","getWhereTableName","where2","get","fallbackActions","select","insert","update","upsert","delete","buildPermissionQuery","authData","eb","permissionWhere","action","objOrId","tableName","Error","tableSchema","tables","primaryKeys","primaryKey","permissionQueryBuilder","fallbackAction","permissionCondition","cmpLit","primaryKeyWheres","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","key","value","push","cmp","err","return","and","can","obj","ctx","process","env","VITE_ENVIRONMENT","ensurePermission","tx","didCanPermissionsRun","actionIn","role","String","name","queryBase","query","one","errorTitle","id","msg","NODE_ENV","usePermission","table","enabled","arguments","length","debug","keyBase","JSON","stringify","_permissionCache_get","cacheVal","useAuthData","permission","modelPermissions","baseQuery","zero","data","status","useQuery","console","info","result","allowed","document","navigator","product","error"],"sources":["../../src/createPermissions.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["ANYONE_CAN","definePermissions","ensure","EnsureError","objectEntries","runWithContext","prettyFormatZeroQuery","getWhereTableName","createPermissions","param","environment","schema","models","getContext","fallbackActions","select","insert","update","upsert","delete","buildPermissionQuery","authData","eb","permissionWhere","action","objOrId","tableName","Error","tableSchema","tables","primaryKeys","primaryKey","permissionQueryBuilder","fallbackAction","permissionCondition","cmpLit","primaryKeyWheres","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","key","value","push","cmp","err","return","and","can","where","obj","ctx","ensurePermission","tx","didCanPermissionsRun","actionIn","role","String","name","queryBase","query","one","errorTitle","id","msg","process","env","NODE_ENV","readPermissions","permissionsEntries","Promise","all","map","param2","model","email","row","out","permissions","read","Object","fromEntries"],"sources":["../../src/createPermissions.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}