over-zero 0.0.0
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.
- package/dist/cjs/build/readPermissions.cjs +51 -0
- package/dist/cjs/build/readPermissions.js +48 -0
- package/dist/cjs/build/readPermissions.js.map +6 -0
- package/dist/cjs/build/readPermissions.native.js +56 -0
- package/dist/cjs/build/readPermissions.native.js.map +6 -0
- package/dist/cjs/build/schema.cjs +28 -0
- package/dist/cjs/build/schema.js +22 -0
- package/dist/cjs/build/schema.js.map +6 -0
- package/dist/cjs/build/schema.native.js +28 -0
- package/dist/cjs/build/schema.native.js.map +6 -0
- package/dist/cjs/createClient.cjs +89 -0
- package/dist/cjs/createClient.js +76 -0
- package/dist/cjs/createClient.js.map +6 -0
- package/dist/cjs/createClient.native.js +81 -0
- package/dist/cjs/createClient.native.js.map +6 -0
- package/dist/cjs/createMutations.cjs +50 -0
- package/dist/cjs/createMutations.js +43 -0
- package/dist/cjs/createMutations.js.map +6 -0
- package/dist/cjs/createMutations.native.js +50 -0
- package/dist/cjs/createMutations.native.js.map +6 -0
- package/dist/cjs/createPermissions.cjs +128 -0
- package/dist/cjs/createPermissions.js +121 -0
- package/dist/cjs/createPermissions.js.map +6 -0
- package/dist/cjs/createPermissions.native.js +135 -0
- package/dist/cjs/createPermissions.native.js.map +6 -0
- package/dist/cjs/createServer.cjs +92 -0
- package/dist/cjs/createServer.js +71 -0
- package/dist/cjs/createServer.js.map +6 -0
- package/dist/cjs/createServer.native.js +75 -0
- package/dist/cjs/createServer.native.js.map +6 -0
- package/dist/cjs/helpers/batchQuery.cjs +49 -0
- package/dist/cjs/helpers/batchQuery.js +38 -0
- package/dist/cjs/helpers/batchQuery.js.map +6 -0
- package/dist/cjs/helpers/batchQuery.native.js +42 -0
- package/dist/cjs/helpers/batchQuery.native.js.map +6 -0
- package/dist/cjs/helpers/clearZeroDatabase.cjs +57 -0
- package/dist/cjs/helpers/clearZeroDatabase.js +57 -0
- package/dist/cjs/helpers/clearZeroDatabase.js.map +6 -0
- package/dist/cjs/helpers/clearZeroDatabase.native.js +71 -0
- package/dist/cjs/helpers/clearZeroDatabase.native.js.map +6 -0
- package/dist/cjs/helpers/context.cjs +40 -0
- package/dist/cjs/helpers/context.js +36 -0
- package/dist/cjs/helpers/context.js.map +6 -0
- package/dist/cjs/helpers/context.native.js +42 -0
- package/dist/cjs/helpers/context.native.js.map +6 -0
- package/dist/cjs/helpers/createMutators.cjs +87 -0
- package/dist/cjs/helpers/createMutators.js +81 -0
- package/dist/cjs/helpers/createMutators.js.map +6 -0
- package/dist/cjs/helpers/createMutators.native.js +116 -0
- package/dist/cjs/helpers/createMutators.native.js.map +6 -0
- package/dist/cjs/helpers/ensureLoggedIn.cjs +33 -0
- package/dist/cjs/helpers/ensureLoggedIn.js +25 -0
- package/dist/cjs/helpers/ensureLoggedIn.js.map +6 -0
- package/dist/cjs/helpers/ensureLoggedIn.native.js +29 -0
- package/dist/cjs/helpers/ensureLoggedIn.native.js.map +6 -0
- package/dist/cjs/helpers/getAuthData.cjs +36 -0
- package/dist/cjs/helpers/getAuthData.js +29 -0
- package/dist/cjs/helpers/getAuthData.js.map +6 -0
- package/dist/cjs/helpers/getAuthData.native.js +33 -0
- package/dist/cjs/helpers/getAuthData.native.js.map +6 -0
- package/dist/cjs/helpers/prettyFormatZeroQuery.cjs +107 -0
- package/dist/cjs/helpers/prettyFormatZeroQuery.js +92 -0
- package/dist/cjs/helpers/prettyFormatZeroQuery.js.map +6 -0
- package/dist/cjs/helpers/prettyFormatZeroQuery.native.js +99 -0
- package/dist/cjs/helpers/prettyFormatZeroQuery.native.js.map +6 -0
- package/dist/cjs/helpers/setupZeroClientGlobalEffects.cjs +40 -0
- package/dist/cjs/helpers/setupZeroClientGlobalEffects.js +36 -0
- package/dist/cjs/helpers/setupZeroClientGlobalEffects.js.map +6 -0
- package/dist/cjs/helpers/setupZeroClientGlobalEffects.native.js +36 -0
- package/dist/cjs/helpers/setupZeroClientGlobalEffects.native.js.map +6 -0
- package/dist/cjs/helpers/useAuthData.cjs +32 -0
- package/dist/cjs/helpers/useAuthData.js +25 -0
- package/dist/cjs/helpers/useAuthData.js.map +6 -0
- package/dist/cjs/helpers/useAuthData.native.js +33 -0
- package/dist/cjs/helpers/useAuthData.native.js.map +6 -0
- package/dist/cjs/helpers/useZDB.cjs +70 -0
- package/dist/cjs/helpers/useZDB.js +51 -0
- package/dist/cjs/helpers/useZDB.js.map +6 -0
- package/dist/cjs/helpers/useZDB.native.js +68 -0
- package/dist/cjs/helpers/useZDB.native.js.map +6 -0
- package/dist/cjs/helpers/zeroEmitter.cjs +27 -0
- package/dist/cjs/helpers/zeroEmitter.js +22 -0
- package/dist/cjs/helpers/zeroEmitter.js.map +6 -0
- package/dist/cjs/helpers/zeroEmitter.native.js +26 -0
- package/dist/cjs/helpers/zeroEmitter.native.js.map +6 -0
- package/dist/cjs/index.cjs +23 -0
- package/dist/cjs/index.js +20 -0
- package/dist/cjs/index.js.map +6 -0
- package/dist/cjs/index.native.js +30 -0
- package/dist/cjs/index.native.js.map +6 -0
- package/dist/cjs/types.cjs +16 -0
- package/dist/cjs/types.js +14 -0
- package/dist/cjs/types.js.map +6 -0
- package/dist/cjs/types.native.js +15 -0
- package/dist/cjs/types.native.js.map +6 -0
- package/dist/esm/build/readPermissions.js +36 -0
- package/dist/esm/build/readPermissions.js.map +6 -0
- package/dist/esm/build/readPermissions.mjs +28 -0
- package/dist/esm/build/readPermissions.mjs.map +1 -0
- package/dist/esm/build/readPermissions.native.js +34 -0
- package/dist/esm/build/readPermissions.native.js.map +1 -0
- package/dist/esm/build/schema.js +7 -0
- package/dist/esm/build/schema.js.map +6 -0
- package/dist/esm/build/schema.mjs +4 -0
- package/dist/esm/build/schema.mjs.map +1 -0
- package/dist/esm/build/schema.native.js +4 -0
- package/dist/esm/build/schema.native.js.map +1 -0
- package/dist/esm/createClient.js +68 -0
- package/dist/esm/createClient.js.map +6 -0
- package/dist/esm/createClient.mjs +66 -0
- package/dist/esm/createClient.mjs.map +1 -0
- package/dist/esm/createClient.native.js +74 -0
- package/dist/esm/createClient.native.js.map +1 -0
- package/dist/esm/createMutations.js +27 -0
- package/dist/esm/createMutations.js.map +6 -0
- package/dist/esm/createMutations.mjs +27 -0
- package/dist/esm/createMutations.mjs.map +1 -0
- package/dist/esm/createMutations.native.js +29 -0
- package/dist/esm/createMutations.native.js.map +1 -0
- package/dist/esm/createPermissions.js +106 -0
- package/dist/esm/createPermissions.js.map +6 -0
- package/dist/esm/createPermissions.mjs +105 -0
- package/dist/esm/createPermissions.mjs.map +1 -0
- package/dist/esm/createPermissions.native.js +129 -0
- package/dist/esm/createPermissions.native.js.map +1 -0
- package/dist/esm/createServer.js +54 -0
- package/dist/esm/createServer.js.map +6 -0
- package/dist/esm/createServer.mjs +58 -0
- package/dist/esm/createServer.mjs.map +1 -0
- package/dist/esm/createServer.native.js +61 -0
- package/dist/esm/createServer.native.js.map +1 -0
- package/dist/esm/helpers/batchQuery.js +22 -0
- package/dist/esm/helpers/batchQuery.js.map +6 -0
- package/dist/esm/helpers/batchQuery.mjs +26 -0
- package/dist/esm/helpers/batchQuery.mjs.map +1 -0
- package/dist/esm/helpers/batchQuery.native.js +23 -0
- package/dist/esm/helpers/batchQuery.native.js.map +1 -0
- package/dist/esm/helpers/clearZeroDatabase.js +42 -0
- package/dist/esm/helpers/clearZeroDatabase.js.map +6 -0
- package/dist/esm/helpers/clearZeroDatabase.mjs +34 -0
- package/dist/esm/helpers/clearZeroDatabase.mjs.map +1 -0
- package/dist/esm/helpers/clearZeroDatabase.native.js +50 -0
- package/dist/esm/helpers/clearZeroDatabase.native.js.map +1 -0
- package/dist/esm/helpers/context.js +20 -0
- package/dist/esm/helpers/context.js.map +6 -0
- package/dist/esm/helpers/context.mjs +15 -0
- package/dist/esm/helpers/context.mjs.map +1 -0
- package/dist/esm/helpers/context.native.js +15 -0
- package/dist/esm/helpers/context.native.js.map +1 -0
- package/dist/esm/helpers/createMutators.js +69 -0
- package/dist/esm/helpers/createMutators.js.map +6 -0
- package/dist/esm/helpers/createMutators.mjs +64 -0
- package/dist/esm/helpers/createMutators.mjs.map +1 -0
- package/dist/esm/helpers/createMutators.native.js +101 -0
- package/dist/esm/helpers/createMutators.native.js.map +1 -0
- package/dist/esm/helpers/ensureLoggedIn.js +10 -0
- package/dist/esm/helpers/ensureLoggedIn.js.map +6 -0
- package/dist/esm/helpers/ensureLoggedIn.mjs +10 -0
- package/dist/esm/helpers/ensureLoggedIn.mjs.map +1 -0
- package/dist/esm/helpers/ensureLoggedIn.native.js +10 -0
- package/dist/esm/helpers/ensureLoggedIn.native.js.map +1 -0
- package/dist/esm/helpers/getAuthData.js +13 -0
- package/dist/esm/helpers/getAuthData.js.map +6 -0
- package/dist/esm/helpers/getAuthData.mjs +13 -0
- package/dist/esm/helpers/getAuthData.mjs.map +1 -0
- package/dist/esm/helpers/getAuthData.native.js +13 -0
- package/dist/esm/helpers/getAuthData.native.js.map +1 -0
- package/dist/esm/helpers/prettyFormatZeroQuery.js +76 -0
- package/dist/esm/helpers/prettyFormatZeroQuery.js.map +6 -0
- package/dist/esm/helpers/prettyFormatZeroQuery.mjs +84 -0
- package/dist/esm/helpers/prettyFormatZeroQuery.mjs.map +1 -0
- package/dist/esm/helpers/prettyFormatZeroQuery.native.js +93 -0
- package/dist/esm/helpers/prettyFormatZeroQuery.native.js.map +1 -0
- package/dist/esm/helpers/setupZeroClientGlobalEffects.js +40 -0
- package/dist/esm/helpers/setupZeroClientGlobalEffects.js.map +6 -0
- package/dist/esm/helpers/setupZeroClientGlobalEffects.mjs +41 -0
- package/dist/esm/helpers/setupZeroClientGlobalEffects.mjs.map +1 -0
- package/dist/esm/helpers/setupZeroClientGlobalEffects.native.js +41 -0
- package/dist/esm/helpers/setupZeroClientGlobalEffects.native.js.map +1 -0
- package/dist/esm/helpers/useAuthData.js +11 -0
- package/dist/esm/helpers/useAuthData.js.map +6 -0
- package/dist/esm/helpers/useAuthData.mjs +9 -0
- package/dist/esm/helpers/useAuthData.mjs.map +1 -0
- package/dist/esm/helpers/useAuthData.native.js +13 -0
- package/dist/esm/helpers/useAuthData.native.js.map +1 -0
- package/dist/esm/helpers/useZDB.js +38 -0
- package/dist/esm/helpers/useZDB.js.map +6 -0
- package/dist/esm/helpers/useZDB.mjs +47 -0
- package/dist/esm/helpers/useZDB.mjs.map +1 -0
- package/dist/esm/helpers/useZDB.native.js +55 -0
- package/dist/esm/helpers/useZDB.native.js.map +1 -0
- package/dist/esm/helpers/zeroEmitter.js +6 -0
- package/dist/esm/helpers/zeroEmitter.js.map +6 -0
- package/dist/esm/helpers/zeroEmitter.mjs +4 -0
- package/dist/esm/helpers/zeroEmitter.mjs.map +1 -0
- package/dist/esm/helpers/zeroEmitter.native.js +4 -0
- package/dist/esm/helpers/zeroEmitter.native.js.map +1 -0
- package/dist/esm/index.js +7 -0
- package/dist/esm/index.js.map +6 -0
- package/dist/esm/index.mjs +7 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/esm/index.native.js +7 -0
- package/dist/esm/index.native.js.map +1 -0
- package/dist/esm/types.js +1 -0
- package/dist/esm/types.js.map +6 -0
- package/dist/esm/types.mjs +2 -0
- package/dist/esm/types.mjs.map +1 -0
- package/dist/esm/types.native.js +2 -0
- package/dist/esm/types.native.js.map +1 -0
- package/package.json +51 -0
- package/readme.md +16 -0
- package/src/createPermissions.ts +281 -0
- package/src/createZeroClient.tsx +191 -0
- package/src/createZeroServer.ts +153 -0
- package/src/helpers/batchQuery.ts +45 -0
- package/src/helpers/clearZeroDatabase.ts +68 -0
- package/src/helpers/context.ts +28 -0
- package/src/helpers/createMutators.ts +139 -0
- package/src/helpers/ensureLoggedIn.ts +8 -0
- package/src/helpers/getAuthData.tsx +12 -0
- package/src/helpers/prettyFormatZeroQuery.ts +167 -0
- package/src/helpers/useAuthData.ts +13 -0
- package/src/helpers/useZeroDebug.ts +104 -0
- package/src/helpers/zeroEmitter.ts +5 -0
- package/src/index.ts +15 -0
- package/src/mutations.ts +121 -0
- package/src/types.ts +49 -0
- package/types/createMutations.d.ts +20 -0
- package/types/createMutations.d.ts.map +1 -0
- package/types/createPermissions.d.ts +37 -0
- package/types/createPermissions.d.ts.map +1 -0
- package/types/createZeroClient.d.ts +45 -0
- package/types/createZeroClient.d.ts.map +1 -0
- package/types/createZeroServer.d.ts +61 -0
- package/types/createZeroServer.d.ts.map +1 -0
- package/types/helpers/batchQuery.d.ts +7 -0
- package/types/helpers/batchQuery.d.ts.map +1 -0
- package/types/helpers/clearZeroDatabase.d.ts +2 -0
- package/types/helpers/clearZeroDatabase.d.ts.map +1 -0
- package/types/helpers/context.d.ts +5 -0
- package/types/helpers/context.d.ts.map +1 -0
- package/types/helpers/createMutators.d.ts +16 -0
- package/types/helpers/createMutators.d.ts.map +1 -0
- package/types/helpers/ensureLoggedIn.d.ts +2 -0
- package/types/helpers/ensureLoggedIn.d.ts.map +1 -0
- package/types/helpers/getAuthData.d.ts +1 -0
- package/types/helpers/getAuthData.d.ts.map +1 -0
- package/types/helpers/prettyFormatZeroQuery.d.ts +3 -0
- package/types/helpers/prettyFormatZeroQuery.d.ts.map +1 -0
- package/types/helpers/useAuthData.d.ts +1 -0
- package/types/helpers/useAuthData.d.ts.map +1 -0
- package/types/helpers/useZeroDebug.d.ts +3 -0
- package/types/helpers/useZeroDebug.d.ts.map +1 -0
- package/types/helpers/zeroEmitter.d.ts +2 -0
- package/types/helpers/zeroEmitter.d.ts.map +1 -0
- package/types/index.d.ts +9 -0
- package/types/index.d.ts.map +1 -0
- package/types/types.d.ts +21 -0
- package/types/types.d.ts.map +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useZero","ZeroProvider","useQuery","zeroUseQuery","mapObject","useMemo","createPermissions","context","createMutators","useZDB","zeroEmitter","jsx","jsxs","createZero","schema","models","disable","modelPermissions","val","permissions","modelMutators","mutate","permissionsHelpers","latestZeroInstance","zero","Proxy","get","_","key","Reflect","query","options","type","out","process","env","NODE_ENV","ProvideZero","children","authData","props","mutators","environment","kvStore","onError","error","console","emit","message","SetZeroInstance","zero2"],"sources":["../../src/createClient.tsx"],"sourcesContent":[null],"mappings":"AACA,SAASA,OAAA,EAASC,YAAA,EAAcC,QAAA,IAAYC,YAAA,QAAoB;AAChE,SAASC,SAAA,QAAiB;AAC1B,SAASC,OAAA,QAA+B;AACxC,SAASC,iBAAA,QAAyB;AAClC,SAASC,OAAA,QAAe;AACxB,SAASC,cAAA,QAAsB;AAC/B,SAASC,MAAA,QAAc;AACvB,SAASC,WAAA,QAAmB;AA2EtB,SAaEC,GAAA,EAbFC,IAAA;AAzEC,SAASC,WAA6B;EAC3CC,MAAA;EACAC,MAAA;EACAC;AACF,GAIG;EAGD,MAAMC,gBAAA,GAAmBb,SAAA,CAAUW,MAAA,EAASG,GAAA,IAAQA,GAAA,CAAIC,WAAW;IAI7DC,aAAA,GAAgBhB,SAAA,CAAUW,MAAA,EAASG,GAAA,IAAQA,GAAA,CAAIG,MAAM;IAIrDC,kBAAA,GAAqBhB,iBAAA,CAAgCQ,MAAA,EAAQP,OAAO;EAS1E,IAAIgB,kBAAA,GAA0C;EAI9C,MAAMC,IAAA,GAAqB,IAAIC,KAAA,CAAM,CAAC,GAAY;MAChDC,IAAIC,CAAA,EAAGC,GAAA,EAAK;QACV,OAAOC,OAAA,CAAQH,GAAA,CAAIH,kBAAA,EAAqBK,GAAA,EAAKL,kBAAkB;MACjE;IACF,CAAC;IAEKrB,QAAA,GAAgCA,CAAC4B,KAAA,EAAOC,OAAA,KAAY;MACxD,IAAIf,OAAA,EACF,OAAO,CAAC,MAAM;QAAEgB,IAAA,EAAM;MAAU,CAAC;MAGnC,MAAMC,GAAA,GAAM9B,YAAA,CAAa2B,KAAA,EAAOC,OAAO;MAEvC,OAAIG,OAAA,CAAQC,GAAA,CAAIC,QAAA,KAAa,iBAE3B3B,MAAA,CAAOqB,KAAA,EAAOC,OAAA,EAASE,GAAG,GAGrBA,GAAA;IACT;IAEMI,WAAA,GAAcA,CAAC;MACnBC,QAAA;MACAC,QAAA;MACA,GAAGC;IACL,MAGM;MACJ,MAAMC,QAAA,GAAWpC,OAAA,CAAQ,MAChBG,cAAA,CAAe;QACpBkC,WAAA,EAAa;QACbH;MACF,CAAC,GACA,CAACA,QAAQ,CAAC;MAEb,OAAIvB,OAAA,GACKsB,QAAA,GAIP,eAAA1B,IAAA,CAACX,YAAA;QACCa,MAAA;QACA6B,OAAA,EAAS;QACTC,OAAA,EAAUC,KAAA,IAAU;UAClBC,OAAA,CAAQD,KAAA,CAAM,eAAeA,KAAK,GAClCnC,WAAA,CAAYqC,IAAA,CAAK;YACff,IAAA,EAAM;YACNgB,OAAA,EAASH;UACX,CAAC;QACH;QACAJ,QAAA;QACC,GAAGD,KAAA;QAEJF,QAAA,kBAAA3B,GAAA,CAACsC,eAAA,IAAgB,GAChBX,QAAA;MAAA,CACH;IAEJ;IAEMW,eAAA,GAAkBA,CAAA,KAAM;MAC5B,MAAMC,KAAA,GAAOlD,OAAA,CAAqB;MAQlC,OAAIkD,KAAA,KAAS3B,kBAAA,KACXA,kBAAA,GAAqB2B,KAAA,GAGhB;IACT;EAEA,OAAO;IACLb,WAAA;IACAnC,QAAA;IACAsB,IAAA;IACA,GAAGF;EACL;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useZero, ZeroProvider, useQuery as zeroUseQuery } from "@rocicorp/zero/react";
|
|
3
|
+
import { mapObject } from "@vxrn/helpers";
|
|
4
|
+
import { useMemo } from "react";
|
|
5
|
+
import { createPermissions } from "./createPermissions.native.js";
|
|
6
|
+
import { context } from "./helpers/context.native.js";
|
|
7
|
+
import { createMutators } from "./helpers/createMutators.native.js";
|
|
8
|
+
import { useZDB } from "./helpers/useZDB.native.js";
|
|
9
|
+
import { zeroEmitter } from "./helpers/zeroEmitter.native.js";
|
|
10
|
+
function createZero(param) {
|
|
11
|
+
var {
|
|
12
|
+
schema,
|
|
13
|
+
models,
|
|
14
|
+
disable
|
|
15
|
+
} = param,
|
|
16
|
+
modelPermissions = mapObject(models, function (val) {
|
|
17
|
+
return val.permissions;
|
|
18
|
+
}),
|
|
19
|
+
modelMutators = mapObject(models, function (val) {
|
|
20
|
+
return val.mutate;
|
|
21
|
+
}),
|
|
22
|
+
permissionsHelpers = createPermissions(schema, context),
|
|
23
|
+
latestZeroInstance = null,
|
|
24
|
+
zero = new Proxy({}, {
|
|
25
|
+
get(_, key) {
|
|
26
|
+
return Reflect.get(latestZeroInstance, key, latestZeroInstance);
|
|
27
|
+
}
|
|
28
|
+
}),
|
|
29
|
+
useQuery = function (query, options) {
|
|
30
|
+
if (disable) return [null, {
|
|
31
|
+
type: "unknown"
|
|
32
|
+
}];
|
|
33
|
+
var out = zeroUseQuery(query, options);
|
|
34
|
+
return process.env.NODE_ENV === "development" && useZDB(query, options, out), out;
|
|
35
|
+
},
|
|
36
|
+
ProvideZero = function (param2) {
|
|
37
|
+
var {
|
|
38
|
+
children,
|
|
39
|
+
authData,
|
|
40
|
+
...props
|
|
41
|
+
} = param2,
|
|
42
|
+
mutators = useMemo(function () {
|
|
43
|
+
return createMutators({
|
|
44
|
+
environment: "client",
|
|
45
|
+
authData
|
|
46
|
+
});
|
|
47
|
+
}, [authData]);
|
|
48
|
+
return disable ? children : /* @__PURE__ */_jsxs(ZeroProvider, {
|
|
49
|
+
schema,
|
|
50
|
+
kvStore: "mem",
|
|
51
|
+
onError: function (error) {
|
|
52
|
+
console.error("Zero Error:", error), zeroEmitter.emit({
|
|
53
|
+
type: "error",
|
|
54
|
+
message: error
|
|
55
|
+
});
|
|
56
|
+
},
|
|
57
|
+
mutators,
|
|
58
|
+
...props,
|
|
59
|
+
children: [/* @__PURE__ */_jsx(SetZeroInstance, {}), children]
|
|
60
|
+
});
|
|
61
|
+
},
|
|
62
|
+
SetZeroInstance = function () {
|
|
63
|
+
var zero2 = useZero();
|
|
64
|
+
return zero2 !== latestZeroInstance && (latestZeroInstance = zero2), null;
|
|
65
|
+
};
|
|
66
|
+
return {
|
|
67
|
+
ProvideZero,
|
|
68
|
+
useQuery,
|
|
69
|
+
zero,
|
|
70
|
+
...permissionsHelpers
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
export { createZero };
|
|
74
|
+
//# sourceMappingURL=createClient.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["jsx","_jsx","jsxs","_jsxs","useZero","ZeroProvider","useQuery","zeroUseQuery","mapObject","useMemo","createPermissions","context","createMutators","useZDB","zeroEmitter","createZero","param","schema","models","disable","modelPermissions","val","permissions","modelMutators","mutate","permissionsHelpers","latestZeroInstance","zero","Proxy","get","_","key","Reflect","query","options","type","out","process","env","NODE_ENV","ProvideZero","param2","children","authData","props","mutators","environment","kvStore","onError","error","console","emit","message","SetZeroInstance","zero2"],"sources":["../../src/createClient.tsx"],"sourcesContent":[null],"mappings":"AACA,SAASA,GAAA,IAAAC,IAAS,EAAAC,IAAA,IAAAC,KAAc,2BAAY;AAC5C,SAASC,OAAA,EAAAC,YAAiB,EAAAC,QAAA,IAAAC,YAAA;AAC1B,SAASC,SAAA,QAA+B;AACxC,SAASC,OAAA;AACT,SAASC,iBAAe;AACxB,SAASC,OAAA,qCAAsB;AAC/B,SAASC,cAAc;AACvB,SAASC,MAAA,oCAAmB;AA2EtB,SAaEC,WAbF;AAzEC,SAASC,WAA6BC,KAAA;EAC3C;MAAAC,MAAA;MAAAC,MAAA;MAAAC;IAAA,IAAAH,KAAA;IAAAI,gBAAA,GAAAZ,SAAA,CAAAU,MAAA,YAAAG,GAAA;MACA,OAAAA,GAAA,CAAAC,WAAA;IACA;IAAAC,aAAA,GAAAf,SAAA,CAAAU,MAAA,YAAAG,GAAA;MAKC,OAAAA,GAAA,CAAAG,MAAA;IAGD;IAAAC,kBAAM,GAAmBf,iBAAU,CAAQO,MAAC,EAAAN,OAAY;IAAAe,kBAIlD,OAAgB;IAAAC,IAAA,OAAUC,KAAQ,CAAC;MAazCC,GAAIA,CAAAC,CAAA,EAAAC,GAAA;QAIJ,OAAMC,OAAyB,CAAAH,GAAA,CAAMH,kBAAa,EAAAK,GAAA,EAAAL,kBAAA;MAChD;IACE;IAAApB,QAAO,YAAAA,CAAY2B,KAAA,EAAAC,OAAA;MACrB,IAAAf,OAAA,EAGI,QACA,MACF;QAGIgB,IAAA,EAAM;MAEZ,EAQI;MACJ,IAAAC,GAAA,GAAA7B,YAAA,CAAA0B,KAAA,EAAAC,OAAA;MACA,OAAAG,OAAA,CAAAC,GAAA,CAAAC,QAAA,sBAAA1B,MAAA,CAAAoB,KAAA,EAAAC,OAAA,EAAAE,GAAA,GAAAA,GAAA;IAAA;IACAI,WAAG,YAAAA,CAAAC,MAAA;MACL,IAGM;UAAAC,QAAA;UAAAC,QAAA;UAAA,GAAAC;QAAA,IAAAH,MAAA;QAAAI,QAAA,GAAApC,OAAA;UACJ,OAAMG,cAAW;YAEbkC,WAAa;YACbH;UACD,EACA;QAEH,IAKGA,QAAA;MAAA,OACCxB,OAAA,GAAAuB,QAAA,kBAAAvC,KAAA,CAAAE,YAAA;QAAAY,MACA;QAAS8B,OACT,OAAU;QACRC,OAAA,WAAAA,CAAcC,KAAA;UACGC,OACf,CAAAD,KAAM,gBAAAA,KAAA,GAAAnC,WAAA,CAAAqC,IAAA;YAAAhB,IACN,SAAS;YACXiB,OAAC,EAAAH;UACH;QAAA;QACAJ,QACI;QAAA,GAEJD,KAAA;QAAAF,QAAA,GAAiB,eAChBzC,IAAA,CAAAoD,eAAA,OAAAX,QAAA;MACH;IAEJ;IAEMW,eAAA,GAAkB,SAAAA,CAAA,EAAM;MAC5B,IAAAC,KAAM,GAAAlD,OAAO;MAQb,OAAIkD,KAAA,KAAS5B,kBAAA,KACXA,kBAAA,GAAqB4B,KAAA,GAGhB;IACT;EAEA,OAAO;IACLd,WAAA;IACAlC,QAAA;IACAqB,IAAA;IACA,GAAGF;EACL;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
function mutations(table, permissions, mutations2) {
|
|
2
|
+
if (permissions) {
|
|
3
|
+
const tableName = table.schema.name, createCRUDMutation = (action) => async (ctx, obj) => {
|
|
4
|
+
const runServerPermissionCheck = async () => {
|
|
5
|
+
ctx.didCanPermissionsRun || process.env.VITE_ENVIRONMENT === "ssr" && await ctx.can(permissions, action, obj);
|
|
6
|
+
};
|
|
7
|
+
action === "delete" && await runServerPermissionCheck();
|
|
8
|
+
const existing = mutations2?.[action];
|
|
9
|
+
existing ? await existing(ctx, obj) : await ctx.tx.mutate[tableName][action](obj), action !== "delete" && await runServerPermissionCheck();
|
|
10
|
+
}, crudMutations = {
|
|
11
|
+
insert: createCRUDMutation("insert"),
|
|
12
|
+
update: createCRUDMutation("update"),
|
|
13
|
+
delete: createCRUDMutation("delete"),
|
|
14
|
+
upsert: createCRUDMutation("upsert")
|
|
15
|
+
};
|
|
16
|
+
return {
|
|
17
|
+
...mutations2,
|
|
18
|
+
// overwrite regular mutations but call them if they are defined by user
|
|
19
|
+
...crudMutations
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
return table;
|
|
23
|
+
}
|
|
24
|
+
export {
|
|
25
|
+
mutations
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=createMutations.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/createMutations.ts"],
|
|
4
|
+
"mappings": "AAgEO,SAAS,UAGd,OAA0B,aAAqBA,YAAkC;AACjF,MAAI,aAAa;AACf,UAAM,YAAa,MAAgB,OAAO,MAEpC,qBAAqB,CAAC,WACnB,OAAO,KAAqB,QAAa;AAG9C,YAAM,2BAA2B,YAAY;AAC3C,QAAI,IAAI,wBAMJ,QAAQ,IAAI,qBAAqB,SACnC,MAAM,IAAI,IAAI,aAAa,QAAQ,GAAG;AAAA,MAE1C;AAEA,MAAI,WAAW,YACb,MAAM,yBAAyB;AAIjC,YAAM,WAAWA,aAAY,MAAM;AAEnC,MAAI,WACF,MAAM,SAAS,KAAK,GAAG,IAEvB,MAAM,IAAI,GAAG,OAAO,SAAS,EAAE,MAAM,EAAE,GAAG,GAGxC,WAAW,YACb,MAAM,yBAAyB;AAAA,IAEnC,GAGI,gBAAoC;AAAA,MACxC,QAAQ,mBAAmB,QAAQ;AAAA,MACnC,QAAQ,mBAAmB,QAAQ;AAAA,MACnC,QAAQ,mBAAmB,QAAQ;AAAA,MACnC,QAAQ,mBAAmB,QAAQ;AAAA,IACrC;AAEA,WAAO;AAAA,MACL,GAAGA;AAAA;AAAA,MAEH,GAAG;AAAA,IACL;AAAA,EACF;AAGA,SAAO;AACT;",
|
|
5
|
+
"names": ["mutations"]
|
|
6
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
function mutations(table, permissions, mutations2) {
|
|
2
|
+
if (permissions) {
|
|
3
|
+
const tableName = table.schema.name,
|
|
4
|
+
createCRUDMutation = action => async (ctx, obj) => {
|
|
5
|
+
const runServerPermissionCheck = async () => {
|
|
6
|
+
ctx.didCanPermissionsRun || process.env.VITE_ENVIRONMENT === "ssr" && (await ctx.can(permissions, action, obj));
|
|
7
|
+
};
|
|
8
|
+
action === "delete" && (await runServerPermissionCheck());
|
|
9
|
+
const existing = mutations2?.[action];
|
|
10
|
+
existing ? await existing(ctx, obj) : await ctx.tx.mutate[tableName][action](obj), action !== "delete" && (await runServerPermissionCheck());
|
|
11
|
+
},
|
|
12
|
+
crudMutations = {
|
|
13
|
+
insert: createCRUDMutation("insert"),
|
|
14
|
+
update: createCRUDMutation("update"),
|
|
15
|
+
delete: createCRUDMutation("delete"),
|
|
16
|
+
upsert: createCRUDMutation("upsert")
|
|
17
|
+
};
|
|
18
|
+
return {
|
|
19
|
+
...mutations2,
|
|
20
|
+
// overwrite regular mutations but call them if they are defined by user
|
|
21
|
+
...crudMutations
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
return table;
|
|
25
|
+
}
|
|
26
|
+
export { mutations };
|
|
27
|
+
//# sourceMappingURL=createMutations.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["mutations","table","permissions","mutations2","tableName","schema","name","createCRUDMutation","action","ctx","obj","runServerPermissionCheck","didCanPermissionsRun","process","env","VITE_ENVIRONMENT","can","existing","tx","mutate","crudMutations","insert","update","delete","upsert"],"sources":["../../src/createMutations.ts"],"sourcesContent":[null],"mappings":"AAgEO,SAASA,UAGdC,KAAA,EAA0BC,WAAA,EAAqBC,UAAA,EAAkC;EACjF,IAAID,WAAA,EAAa;IACf,MAAME,SAAA,GAAaH,KAAA,CAAgBI,MAAA,CAAOC,IAAA;MAEpCC,kBAAA,GAAsBC,MAAA,IACnB,OAAOC,GAAA,EAAqBC,GAAA,KAAa;QAG9C,MAAMC,wBAAA,GAA2B,MAAAA,CAAA,KAAY;UACvCF,GAAA,CAAIG,oBAAA,IAMJC,OAAA,CAAQC,GAAA,CAAIC,gBAAA,KAAqB,UACnC,MAAMN,GAAA,CAAIO,GAAA,CAAId,WAAA,EAAaM,MAAA,EAAQE,GAAG;QAE1C;QAEIF,MAAA,KAAW,aACb,MAAMG,wBAAA,CAAyB;QAIjC,MAAMM,QAAA,GAAWd,UAAA,GAAYK,MAAM;QAE/BS,QAAA,GACF,MAAMA,QAAA,CAASR,GAAA,EAAKC,GAAG,IAEvB,MAAMD,GAAA,CAAIS,EAAA,CAAGC,MAAA,CAAOf,SAAS,EAAEI,MAAM,EAAEE,GAAG,GAGxCF,MAAA,KAAW,aACb,MAAMG,wBAAA,CAAyB;MAEnC;MAGIS,aAAA,GAAoC;QACxCC,MAAA,EAAQd,kBAAA,CAAmB,QAAQ;QACnCe,MAAA,EAAQf,kBAAA,CAAmB,QAAQ;QACnCgB,MAAA,EAAQhB,kBAAA,CAAmB,QAAQ;QACnCiB,MAAA,EAAQjB,kBAAA,CAAmB,QAAQ;MACrC;IAEA,OAAO;MACL,GAAGJ,UAAA;MAAA;MAEH,GAAGiB;IACL;EACF;EAGA,OAAOnB,KAAA;AACT","ignoreList":[]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
function mutations(table, permissions, mutations2) {
|
|
2
|
+
if (permissions) {
|
|
3
|
+
var tableName = table.schema.name,
|
|
4
|
+
createCRUDMutation = function (action) {
|
|
5
|
+
return async function (ctx, obj) {
|
|
6
|
+
var runServerPermissionCheck = async function () {
|
|
7
|
+
ctx.didCanPermissionsRun || process.env.VITE_ENVIRONMENT === "ssr" && (await ctx.can(permissions, action, obj));
|
|
8
|
+
};
|
|
9
|
+
action === "delete" && (await runServerPermissionCheck());
|
|
10
|
+
var existing = mutations2?.[action];
|
|
11
|
+
existing ? await existing(ctx, obj) : await ctx.tx.mutate[tableName][action](obj), action !== "delete" && (await runServerPermissionCheck());
|
|
12
|
+
};
|
|
13
|
+
},
|
|
14
|
+
crudMutations = {
|
|
15
|
+
insert: createCRUDMutation("insert"),
|
|
16
|
+
update: createCRUDMutation("update"),
|
|
17
|
+
delete: createCRUDMutation("delete"),
|
|
18
|
+
upsert: createCRUDMutation("upsert")
|
|
19
|
+
};
|
|
20
|
+
return {
|
|
21
|
+
...mutations2,
|
|
22
|
+
// overwrite regular mutations but call them if they are defined by user
|
|
23
|
+
...crudMutations
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
return table;
|
|
27
|
+
}
|
|
28
|
+
export { mutations };
|
|
29
|
+
//# sourceMappingURL=createMutations.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["mutations","table","permissions","mutations2","tableName","schema","name","createCRUDMutation","action","ctx","obj","runServerPermissionCheck","didCanPermissionsRun","process","env","VITE_ENVIRONMENT","can","existing","tx","mutate","crudMutations","insert","update","delete","upsert"],"sources":["../../src/createMutations.ts"],"sourcesContent":[null],"mappings":"AAgEO,SAASA,UAGdC,KAAA,EAA0BC,WAAA,EAAqBC,UAAA,EAAkC;EACjF,IAAID,WAAA,EAAa;IACf,IAAAE,SAAM,GAAAH,KAAa,CAAAI,MAAgB,CAAAC,IAAO;MAAAC,kBAEpC,YAAAA,CAAsBC,MACnB;QAGL,OAAM,gBAAAC,GAAA,EAAAC,GAAA;UACA,IAAIC,wBAMJ,kBAAAA,CAAA,EAAY;YAGlBF,GAAA,CAAAG,oBAAA,IAAAC,OAAA,CAAAC,GAAA,CAAAC,gBAAA,qBAAAN,GAAA,CAAAO,GAAA,CAAAd,WAAA,EAAAM,MAAA,EAAAE,GAAA;UAEI;UAKJF,MAAM,aAAW,WAAYG,wBAAM;UAE/B,IAAAM,QACF,GAAMd,UAAS,GAAAK,MAAQ;UAWvBS,QAAA,SAAoCA,QAAA,CAAAR,GAAA,EAAAC,GAAA,UAAAD,GAAA,CAAAS,EAAA,CAAAC,MAAA,CAAAf,SAAA,EAAAI,MAAA,EAAAE,GAAA,GAAAF,MAAA,wBAAAG,wBAAA;QACxC;MAAmC;MACnCS,aAAQ;QACRC,MAAA,EAAQd,kBAAA,CAAmB,QAAQ;QACnCe,MAAA,EAAQf,kBAAA,CAAmB,QAAQ;QACrCgB,MAAA,EAAAhB,kBAAA;QAEAiB,MAAO,EAAAjB,kBAAA;MAAA;IACF;MAEH,GAAGJ,UAAA;MACL;MACF,GAAAiB;IAGA;EACF","ignoreList":[]}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { createLocalStorage, ensure, EnsureError } from "@vxrn/helpers";
|
|
2
|
+
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
|
+
}
|
|
15
|
+
const fallbackActions = {
|
|
16
|
+
select: "read",
|
|
17
|
+
insert: "write",
|
|
18
|
+
update: "write",
|
|
19
|
+
upsert: "write",
|
|
20
|
+
delete: "write"
|
|
21
|
+
};
|
|
22
|
+
function buildPermissionQuery(authData, eb, permissionWhere, action, objOrId) {
|
|
23
|
+
const tableName = getWhereTableName(permissionWhere);
|
|
24
|
+
if (!tableName)
|
|
25
|
+
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);
|
|
27
|
+
if (permissionCondition == null)
|
|
28
|
+
throw new Error(`No permission defined for ${action} (or ${fallbackAction})`);
|
|
29
|
+
if (permissionCondition === !0)
|
|
30
|
+
return eb.cmpLit(!0, "=", !0);
|
|
31
|
+
if (permissionCondition === !1)
|
|
32
|
+
return eb.cmpLit(!0, "=", !1);
|
|
33
|
+
const primaryKeyWheres = [];
|
|
34
|
+
for (const key of primaryKeys) {
|
|
35
|
+
const value = typeof objOrId == "string" ? objOrId : objOrId[key];
|
|
36
|
+
primaryKeyWheres.push(eb.cmp(key, value));
|
|
37
|
+
}
|
|
38
|
+
return eb.and(permissionCondition, ...primaryKeyWheres);
|
|
39
|
+
}
|
|
40
|
+
async function can(where2, action, obj) {
|
|
41
|
+
const ctx = getContext(), tableName = getWhereTableName(where2);
|
|
42
|
+
if (!tableName)
|
|
43
|
+
throw new Error("Must use where('table') style where to pass to can()");
|
|
44
|
+
process.env.VITE_ENVIRONMENT === "ssr" && (await ensurePermission(
|
|
45
|
+
ctx.tx,
|
|
46
|
+
ctx.authData,
|
|
47
|
+
tableName,
|
|
48
|
+
where2,
|
|
49
|
+
action,
|
|
50
|
+
obj
|
|
51
|
+
), ctx.didCanPermissionsRun = !0);
|
|
52
|
+
}
|
|
53
|
+
async function ensurePermission(tx, authData, tableName, where2, actionIn, obj) {
|
|
54
|
+
if (authData?.role === "admin")
|
|
55
|
+
return;
|
|
56
|
+
const action = String(actionIn), name = `${tableName}.${action}`, queryBase = tx.query[tableName];
|
|
57
|
+
let query = null;
|
|
58
|
+
try {
|
|
59
|
+
query = queryBase.where((eb) => buildPermissionQuery(authData, eb, where2, action, obj)).one(), ensure(await query);
|
|
60
|
+
} catch (err) {
|
|
61
|
+
const errorTitle = `${name} with auth id: ${authData?.id}`;
|
|
62
|
+
if (err instanceof EnsureError) {
|
|
63
|
+
let msg = `[permission] \u{1F6AB} Not Allowed: ${errorTitle}`;
|
|
64
|
+
throw process.env.NODE_ENV === "development" && query && (msg += `
|
|
65
|
+
${prettyFormatZeroQuery(query)}`), new Error(msg);
|
|
66
|
+
}
|
|
67
|
+
throw new Error(`Error running permission ${errorTitle}
|
|
68
|
+
${err}`);
|
|
69
|
+
}
|
|
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)
|
|
82
|
+
);
|
|
83
|
+
const allowed = !!data;
|
|
84
|
+
return objOrId ? allowed : !1;
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
where,
|
|
88
|
+
can,
|
|
89
|
+
usePermission
|
|
90
|
+
};
|
|
91
|
+
}
|
|
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
|
+
export {
|
|
104
|
+
createPermissions
|
|
105
|
+
};
|
|
106
|
+
//# sourceMappingURL=createPermissions.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/createPermissions.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["where"]
|
|
6
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { createLocalStorage, ensure, EnsureError } from "@vxrn/helpers";
|
|
2
|
+
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
|
+
}
|
|
15
|
+
const fallbackActions = {
|
|
16
|
+
select: "read",
|
|
17
|
+
insert: "write",
|
|
18
|
+
update: "write",
|
|
19
|
+
upsert: "write",
|
|
20
|
+
delete: "write"
|
|
21
|
+
};
|
|
22
|
+
function buildPermissionQuery(authData, eb, permissionWhere, action, objOrId) {
|
|
23
|
+
const tableName = getWhereTableName(permissionWhere);
|
|
24
|
+
if (!tableName) throw new Error("Must use PermissionWhere for buildPermissionQuery");
|
|
25
|
+
const primaryKeys = schema.tables[tableName].primaryKey,
|
|
26
|
+
permissionQueryBuilder = permissionWhere(eb, authData),
|
|
27
|
+
fallbackAction = fallbackActions[action],
|
|
28
|
+
permissionCondition = permissionQueryBuilder[action] || (fallbackAction ? permissionQueryBuilder[fallbackAction] : void 0);
|
|
29
|
+
if (permissionCondition == null) throw new Error(`No permission defined for ${action} (or ${fallbackAction})`);
|
|
30
|
+
if (permissionCondition === !0) return eb.cmpLit(!0, "=", !0);
|
|
31
|
+
if (permissionCondition === !1) return eb.cmpLit(!0, "=", !1);
|
|
32
|
+
const primaryKeyWheres = [];
|
|
33
|
+
for (const key of primaryKeys) {
|
|
34
|
+
const value = typeof objOrId == "string" ? objOrId : objOrId[key];
|
|
35
|
+
primaryKeyWheres.push(eb.cmp(key, value));
|
|
36
|
+
}
|
|
37
|
+
return eb.and(permissionCondition, ...primaryKeyWheres);
|
|
38
|
+
}
|
|
39
|
+
async function can(where2, action, obj) {
|
|
40
|
+
const ctx = getContext(),
|
|
41
|
+
tableName = getWhereTableName(where2);
|
|
42
|
+
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);
|
|
44
|
+
}
|
|
45
|
+
async function ensurePermission(tx, authData, tableName, where2, actionIn, obj) {
|
|
46
|
+
if (authData?.role === "admin") return;
|
|
47
|
+
const action = String(actionIn),
|
|
48
|
+
name = `${tableName}.${action}`,
|
|
49
|
+
queryBase = tx.query[tableName];
|
|
50
|
+
let query = null;
|
|
51
|
+
try {
|
|
52
|
+
query = queryBase.where(eb => buildPermissionQuery(authData, eb, where2, action, obj)).one(), ensure(await query);
|
|
53
|
+
} catch (err) {
|
|
54
|
+
const errorTitle = `${name} with auth id: ${authData?.id}`;
|
|
55
|
+
if (err instanceof EnsureError) {
|
|
56
|
+
let msg = `[permission] \u{1F6AB} Not Allowed: ${errorTitle}`;
|
|
57
|
+
throw process.env.NODE_ENV === "development" && query && (msg += `
|
|
58
|
+
${prettyFormatZeroQuery(query)}`), new Error(msg);
|
|
59
|
+
}
|
|
60
|
+
throw new Error(`Error running permission ${errorTitle}
|
|
61
|
+
${err}`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
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
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
where,
|
|
89
|
+
can,
|
|
90
|
+
usePermission
|
|
91
|
+
};
|
|
92
|
+
}
|
|
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
|
+
export { createPermissions };
|
|
105
|
+
//# sourceMappingURL=createPermissions.mjs.map
|
|
@@ -0,0 +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":[]}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { createLocalStorage, ensure, EnsureError } from "@vxrn/helpers";
|
|
2
|
+
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
|
+
};
|
|
22
|
+
function buildPermissionQuery(authData, eb, permissionWhere, action, objOrId) {
|
|
23
|
+
var tableName = getWhereTableName(permissionWhere);
|
|
24
|
+
if (!tableName) throw new Error("Must use PermissionWhere for buildPermissionQuery");
|
|
25
|
+
var tableSchema = schema.tables[tableName],
|
|
26
|
+
primaryKeys = tableSchema.primaryKey,
|
|
27
|
+
permissionQueryBuilder = permissionWhere(eb, authData),
|
|
28
|
+
fallbackAction = fallbackActions[action],
|
|
29
|
+
permissionCondition = permissionQueryBuilder[action] || (fallbackAction ? permissionQueryBuilder[fallbackAction] : void 0);
|
|
30
|
+
if (permissionCondition == null) throw new Error(`No permission defined for ${action} (or ${fallbackAction})`);
|
|
31
|
+
if (permissionCondition === !0) return eb.cmpLit(!0, "=", !0);
|
|
32
|
+
if (permissionCondition === !1) return eb.cmpLit(!0, "=", !1);
|
|
33
|
+
var primaryKeyWheres = [],
|
|
34
|
+
_iteratorNormalCompletion = !0,
|
|
35
|
+
_didIteratorError = !1,
|
|
36
|
+
_iteratorError = void 0;
|
|
37
|
+
try {
|
|
38
|
+
for (var _iterator = primaryKeys[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
|
|
39
|
+
var key = _step.value,
|
|
40
|
+
value = typeof objOrId == "string" ? objOrId : objOrId[key];
|
|
41
|
+
primaryKeyWheres.push(eb.cmp(key, value));
|
|
42
|
+
}
|
|
43
|
+
} catch (err) {
|
|
44
|
+
_didIteratorError = !0, _iteratorError = err;
|
|
45
|
+
} finally {
|
|
46
|
+
try {
|
|
47
|
+
!_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
|
|
48
|
+
} finally {
|
|
49
|
+
if (_didIteratorError) throw _iteratorError;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return eb.and(permissionCondition, ...primaryKeyWheres);
|
|
53
|
+
}
|
|
54
|
+
async function can(where2, action, obj) {
|
|
55
|
+
var ctx = getContext(),
|
|
56
|
+
tableName = getWhereTableName(where2);
|
|
57
|
+
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);
|
|
59
|
+
}
|
|
60
|
+
async function ensurePermission(tx, authData, tableName, where2, actionIn, obj) {
|
|
61
|
+
if (authData?.role !== "admin") {
|
|
62
|
+
var action = String(actionIn),
|
|
63
|
+
name = `${tableName}.${action}`,
|
|
64
|
+
queryBase = tx.query[tableName],
|
|
65
|
+
query = null;
|
|
66
|
+
try {
|
|
67
|
+
query = queryBase.where(function (eb) {
|
|
68
|
+
return buildPermissionQuery(authData, eb, where2, action, obj);
|
|
69
|
+
}).one(), ensure(await query);
|
|
70
|
+
} catch (err) {
|
|
71
|
+
var errorTitle = `${name} with auth id: ${authData?.id}`;
|
|
72
|
+
if (err instanceof EnsureError) {
|
|
73
|
+
var msg = `[permission] \u{1F6AB} Not Allowed: ${errorTitle}`;
|
|
74
|
+
throw process.env.NODE_ENV === "development" && query && (msg += `
|
|
75
|
+
${prettyFormatZeroQuery(query)}`), new Error(msg);
|
|
76
|
+
}
|
|
77
|
+
throw new Error(`Error running permission ${errorTitle}
|
|
78
|
+
${err}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
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
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
where,
|
|
113
|
+
can,
|
|
114
|
+
usePermission
|
|
115
|
+
};
|
|
116
|
+
}
|
|
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
|
+
export { createPermissions };
|
|
129
|
+
//# sourceMappingURL=createPermissions.native.js.map
|
|
@@ -0,0 +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":[]}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { PostgresJSConnection } from "@rocicorp/zero/pg";
|
|
2
|
+
import { ZQLDatabase } from "@rocicorp/zero/server";
|
|
3
|
+
import postgres from "postgres";
|
|
4
|
+
import { context, isInZeroMutation } from "src/context";
|
|
5
|
+
import { createMutators } from "~/data/helpers/createMutators";
|
|
6
|
+
import { schema } from "~/data/schema";
|
|
7
|
+
import { createServerActions } from "~/data/server/createServerActions";
|
|
8
|
+
import { assertString } from "@vxrn/helpers";
|
|
9
|
+
function createServer({ actions }) {
|
|
10
|
+
const dbString = assertString(process.env.ZERO_UPSTREAM_DB), zeroServerDatabase = new ZQLDatabase(
|
|
11
|
+
new PostgresJSConnection(postgres(dbString)),
|
|
12
|
+
schema
|
|
13
|
+
), serverMutate = async (run, authData) => {
|
|
14
|
+
const asyncTasks = [], mutators = createMutators({
|
|
15
|
+
environment: "server",
|
|
16
|
+
asyncTasks,
|
|
17
|
+
authData: {
|
|
18
|
+
id: "",
|
|
19
|
+
email: "admin@start.chat",
|
|
20
|
+
role: "admin",
|
|
21
|
+
...authData
|
|
22
|
+
},
|
|
23
|
+
createServerActions
|
|
24
|
+
});
|
|
25
|
+
await serverTransaction(async (tx) => {
|
|
26
|
+
await run(tx, mutators);
|
|
27
|
+
}), await Promise.all(asyncTasks.map((t) => t()));
|
|
28
|
+
}, serverQuery = serverTransaction, dummyTransactionInput = {
|
|
29
|
+
clientGroupID: "unused",
|
|
30
|
+
clientID: "unused",
|
|
31
|
+
mutationID: 42,
|
|
32
|
+
upstreamSchema: "unused"
|
|
33
|
+
};
|
|
34
|
+
async function serverTransaction(query) {
|
|
35
|
+
try {
|
|
36
|
+
if (isInZeroMutation()) {
|
|
37
|
+
const { tx } = context();
|
|
38
|
+
return await query(tx);
|
|
39
|
+
}
|
|
40
|
+
return await zeroServerDatabase.transaction(query, dummyTransactionInput);
|
|
41
|
+
} catch (err) {
|
|
42
|
+
throw console.error(`Error running serverTransaction(): ${err}`), err;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
serverTransaction,
|
|
47
|
+
serverMutate,
|
|
48
|
+
serverQuery
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export {
|
|
52
|
+
createServer
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=createServer.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/createServer.ts"],
|
|
4
|
+
"mappings": "AACA,SAAS,4BAA4B;AACrC,SAAS,mBAAmB;AAC5B,OAAO,cAAc;AACrB,SAAS,SAAS,wBAAwB;AAE1C,SAAwB,sBAAsB;AAC9C,SAAS,cAAc;AACvB,SAAS,2BAA2B;AAEpC,SAAS,oBAAoB;AAEtB,SAAS,aAAa,EAAE,QAAQ,GAAqB;AAC1D,QAAM,WAAW,aAAa,QAAQ,IAAI,gBAAgB,GAEpD,qBAAqB,IAAI;AAAA,IAC7B,IAAI,qBAAqB,SAAS,QAAQ,CAAC;AAAA,IAC3C;AAAA,EACF,GAEM,eAAe,OACnB,KACA,aACG;AACH,UAAM,aAAyC,CAAC,GAE1C,WAAW,eAAe;AAAA,MAC9B,aAAa;AAAA,MACb;AAAA,MACA,UAAU;AAAA,QACR,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,GAAG;AAAA,MACL;AAAA,MACA;AAAA,IACF,CAAC;AAED,UAAM,kBAAkB,OAAO,OAAO;AACpC,YAAM,IAAI,IAAI,QAAQ;AAAA,IACxB,CAAC,GAED,MAAM,QAAQ,IAAI,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAAA,EAC9C,GAIM,cAAc,mBAGd,wBAAkD;AAAA,IACtD,eAAe;AAAA,IACf,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,gBAAgB;AAAA,EAClB;AAEA,iBAAe,kBAGb,OAA6B;AAC7B,QAAI;AACF,UAAI,iBAAiB,GAAG;AACtB,cAAM,EAAE,GAAG,IAAI,QAAQ;AACvB,eAAO,MAAM,MAAM,EAAE;AAAA,MACvB;AACA,aAAQ,MAAM,mBAAmB,YAAY,OAAO,qBAAqB;AAAA,IAC3E,SAAS,KAAK;AACZ,oBAAQ,MAAM,sCAAsC,GAAG,EAAE,GACnD;AAAA,IACR;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|