on-zero 0.6.11 → 0.6.13

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 (131) hide show
  1. package/dist/cjs/createZeroSQLiteServer.cjs +319 -0
  2. package/dist/cjs/createZeroSQLiteServer.native.js +440 -0
  3. package/dist/cjs/createZeroSQLiteServer.native.js.map +1 -0
  4. package/dist/cjs/createZeroSQLiteServer.test.cjs +429 -0
  5. package/dist/cjs/createZeroSQLiteServer.test.native.js +466 -0
  6. package/dist/cjs/createZeroSQLiteServer.test.native.js.map +1 -0
  7. package/dist/cjs/createZeroServer.cjs +20 -234
  8. package/dist/cjs/createZeroServer.native.js +24 -250
  9. package/dist/cjs/createZeroServer.native.js.map +1 -1
  10. package/dist/cjs/createZeroServer.test.cjs +35 -1
  11. package/dist/cjs/createZeroServer.test.native.js +38 -1
  12. package/dist/cjs/createZeroServer.test.native.js.map +1 -1
  13. package/dist/cjs/createZeroServerCore.cjs +362 -0
  14. package/dist/cjs/createZeroServerCore.native.js +389 -0
  15. package/dist/cjs/createZeroServerCore.native.js.map +1 -0
  16. package/dist/cjs/generate-lite.cjs +1 -0
  17. package/dist/cjs/generate-lite.native.js +1 -0
  18. package/dist/cjs/generate-lite.native.js.map +1 -1
  19. package/dist/cjs/generate-lite.test.cjs +5 -1
  20. package/dist/cjs/generate-lite.test.native.js +5 -1
  21. package/dist/cjs/generate-lite.test.native.js.map +1 -1
  22. package/dist/cjs/generate.cjs +20 -11
  23. package/dist/cjs/generate.native.js +29 -21
  24. package/dist/cjs/generate.native.js.map +1 -1
  25. package/dist/cjs/generate.test.cjs +110 -0
  26. package/dist/cjs/generate.test.native.js +110 -0
  27. package/dist/cjs/generate.test.native.js.map +1 -1
  28. package/dist/cjs/httpPull/transport.test.cjs +44 -0
  29. package/dist/cjs/httpPull/transport.test.native.js +53 -0
  30. package/dist/cjs/httpPull/transport.test.native.js.map +1 -1
  31. package/dist/cjs/httpPullTransport.cjs +4 -1
  32. package/dist/cjs/httpPullTransport.native.js +5 -2
  33. package/dist/cjs/httpPullTransport.native.js.map +1 -1
  34. package/dist/cjs/server.cjs +2 -1
  35. package/dist/cjs/syncHost.cjs +164 -0
  36. package/dist/cjs/syncHost.native.js +371 -0
  37. package/dist/cjs/syncHost.native.js.map +1 -0
  38. package/dist/cjs/syncHost.test.cjs +229 -0
  39. package/dist/cjs/syncHost.test.native.js +278 -0
  40. package/dist/cjs/syncHost.test.native.js.map +1 -0
  41. package/dist/esm/createZeroSQLiteServer.mjs +293 -0
  42. package/dist/esm/createZeroSQLiteServer.mjs.map +1 -0
  43. package/dist/esm/createZeroSQLiteServer.native.js +411 -0
  44. package/dist/esm/createZeroSQLiteServer.native.js.map +1 -0
  45. package/dist/esm/createZeroSQLiteServer.test.mjs +430 -0
  46. package/dist/esm/createZeroSQLiteServer.test.mjs.map +1 -0
  47. package/dist/esm/createZeroSQLiteServer.test.native.js +464 -0
  48. package/dist/esm/createZeroSQLiteServer.test.native.js.map +1 -0
  49. package/dist/esm/createZeroServer.mjs +17 -231
  50. package/dist/esm/createZeroServer.mjs.map +1 -1
  51. package/dist/esm/createZeroServer.native.js +21 -247
  52. package/dist/esm/createZeroServer.native.js.map +1 -1
  53. package/dist/esm/createZeroServer.test.mjs +35 -1
  54. package/dist/esm/createZeroServer.test.mjs.map +1 -1
  55. package/dist/esm/createZeroServer.test.native.js +38 -1
  56. package/dist/esm/createZeroServer.test.native.js.map +1 -1
  57. package/dist/esm/createZeroServerCore.mjs +336 -0
  58. package/dist/esm/createZeroServerCore.mjs.map +1 -0
  59. package/dist/esm/createZeroServerCore.native.js +360 -0
  60. package/dist/esm/createZeroServerCore.native.js.map +1 -0
  61. package/dist/esm/generate-lite.mjs +1 -0
  62. package/dist/esm/generate-lite.mjs.map +1 -1
  63. package/dist/esm/generate-lite.native.js +1 -0
  64. package/dist/esm/generate-lite.native.js.map +1 -1
  65. package/dist/esm/generate-lite.test.mjs +5 -1
  66. package/dist/esm/generate-lite.test.mjs.map +1 -1
  67. package/dist/esm/generate-lite.test.native.js +5 -1
  68. package/dist/esm/generate-lite.test.native.js.map +1 -1
  69. package/dist/esm/generate.mjs +20 -11
  70. package/dist/esm/generate.mjs.map +1 -1
  71. package/dist/esm/generate.native.js +29 -21
  72. package/dist/esm/generate.native.js.map +1 -1
  73. package/dist/esm/generate.test.mjs +87 -1
  74. package/dist/esm/generate.test.mjs.map +1 -1
  75. package/dist/esm/generate.test.native.js +87 -1
  76. package/dist/esm/generate.test.native.js.map +1 -1
  77. package/dist/esm/httpPull/transport.test.mjs +44 -0
  78. package/dist/esm/httpPull/transport.test.mjs.map +1 -1
  79. package/dist/esm/httpPull/transport.test.native.js +53 -0
  80. package/dist/esm/httpPull/transport.test.native.js.map +1 -1
  81. package/dist/esm/httpPullTransport.mjs +4 -1
  82. package/dist/esm/httpPullTransport.mjs.map +1 -1
  83. package/dist/esm/httpPullTransport.native.js +5 -2
  84. package/dist/esm/httpPullTransport.native.js.map +1 -1
  85. package/dist/esm/server.mjs +1 -0
  86. package/dist/esm/server.mjs.map +1 -1
  87. package/dist/esm/syncHost.mjs +138 -0
  88. package/dist/esm/syncHost.mjs.map +1 -0
  89. package/dist/esm/syncHost.native.js +342 -0
  90. package/dist/esm/syncHost.native.js.map +1 -0
  91. package/dist/esm/syncHost.test.mjs +206 -0
  92. package/dist/esm/syncHost.test.mjs.map +1 -0
  93. package/dist/esm/syncHost.test.native.js +252 -0
  94. package/dist/esm/syncHost.test.native.js.map +1 -0
  95. package/package.json +19 -3
  96. package/readme.md +26 -0
  97. package/src/createZeroSQLiteServer.test.ts +461 -0
  98. package/src/createZeroSQLiteServer.ts +523 -0
  99. package/src/createZeroServer.test.ts +39 -1
  100. package/src/createZeroServer.ts +35 -428
  101. package/src/createZeroServerCore.ts +557 -0
  102. package/src/generate-lite.test.ts +4 -0
  103. package/src/generate-lite.ts +1 -0
  104. package/src/generate.test.ts +87 -1
  105. package/src/generate.ts +29 -20
  106. package/src/httpPull/transport.test.ts +47 -0
  107. package/src/httpPullTransport.ts +15 -1
  108. package/src/server.ts +1 -0
  109. package/src/syncHost.test.ts +216 -0
  110. package/src/syncHost.ts +255 -0
  111. package/test-fixtures/server-return-types.ts +50 -0
  112. package/test-fixtures/tsconfig.json +13 -0
  113. package/types/createZeroSQLiteServer.d.ts +37 -0
  114. package/types/createZeroSQLiteServer.d.ts.map +1 -0
  115. package/types/createZeroSQLiteServer.test.d.ts +2 -0
  116. package/types/createZeroSQLiteServer.test.d.ts.map +1 -0
  117. package/types/createZeroServer.d.ts +11 -293
  118. package/types/createZeroServer.d.ts.map +1 -1
  119. package/types/createZeroServerCore.d.ts +310 -0
  120. package/types/createZeroServerCore.d.ts.map +1 -0
  121. package/types/generate-lite.d.ts.map +1 -1
  122. package/types/generate.d.ts +2 -1
  123. package/types/generate.d.ts.map +1 -1
  124. package/types/httpPullTransport.d.ts +2 -0
  125. package/types/httpPullTransport.d.ts.map +1 -1
  126. package/types/server.d.ts +1 -0
  127. package/types/server.d.ts.map +1 -1
  128. package/types/syncHost.d.ts +51 -0
  129. package/types/syncHost.d.ts.map +1 -0
  130. package/types/syncHost.test.d.ts +2 -0
  131. package/types/syncHost.test.d.ts.map +1 -0
@@ -1,265 +1,51 @@
1
- import { mustGetQuery } from "@rocicorp/zero";
2
- import { PushProcessor } from "@rocicorp/zero/pg";
3
- import { handleQueryRequest as zeroHandleQueryRequest } from "@rocicorp/zero/server";
4
1
  import { zeroNodePg } from "@rocicorp/zero/server/adapters/pg";
5
2
  import { assertString } from "@take-out/helpers";
6
3
  import { Pool } from "pg";
7
- import { createPermissions } from "./createPermissions.mjs";
8
- import { createMutators } from "./helpers/createMutators.mjs";
9
- import { getScopedAuthData, isInZeroMutation, mutatorContext, runWithAuthScope } from "./helpers/mutatorContext.mjs";
10
- import { runWithQueryContext } from "./helpers/queryContext.mjs";
11
- import { getMutationsPermissions } from "./modelRegistry.mjs";
12
- import { setCustomQueries } from "./run.mjs";
13
- import { getZQL, setEnvironment, setSchema } from "./state.mjs";
14
- import { setEvaluatingPermission } from "./where.mjs";
15
- import { setRunner } from "./zeroRunner.mjs";
4
+ import { createZeroServerCore } from "./createZeroServerCore.mjs";
16
5
  function createZeroServer({
17
- createServerActions,
18
6
  database,
19
7
  pool: externalPool,
20
- schema,
21
- models,
22
- queries,
23
- mutations: mutationValidators,
24
- validateQuery,
25
- validateMutation,
26
- defaultAllowAdminRole = "all",
27
- defaultMutateAuthData = {}
8
+ ...options
28
9
  }) {
29
- setSchema(schema);
30
- setEnvironment("server");
31
10
  let pool;
32
11
  if (externalPool) {
33
12
  pool = externalPool;
34
13
  } else {
35
- const dbString = assertString(database, `createZeroServer "database"`);
14
+ const dbString = assertString(database, 'createZeroServer "database"');
36
15
  const pgPool = new Pool({
37
16
  connectionString: dbString,
38
- // handle self-signed certificates in production
39
17
  ssl: dbString.includes("sslmode=require") ? {
40
18
  rejectUnauthorized: false
41
19
  } : void 0
42
20
  });
43
21
  pgPool.on("error", error => {
44
- console.error(`[on-zero] pool error`, error.message);
22
+ console.error("[on-zero] pool error", error.message);
45
23
  });
46
24
  pgPool.on("connect", client => {
47
25
  client.on("error", error => {
48
- console.error(`[on-zero] client error`, error.message);
26
+ console.error("[on-zero] client error", error.message);
49
27
  });
50
28
  });
51
29
  pool = pgPool;
52
30
  }
53
- const zeroDb = zeroNodePg(schema, pool);
54
- const permissions = createPermissions({
55
- environment: "server",
56
- schema,
57
- adminRoleMode: defaultAllowAdminRole
58
- });
59
- const processor = new PushProcessor(zeroDb);
60
- const handleMutationRequest = async ({
61
- authData,
62
- request,
63
- skipAsyncTasks
64
- }) => {
65
- const asyncTasks = [];
66
- const recoveryRequest = request.clone();
67
- const mutators = createMutators({
68
- asyncTasks,
69
- can: permissions.can,
70
- createServerActions,
71
- environment: "server",
72
- models,
73
- authData,
74
- validateMutation,
75
- mutationValidators
76
- });
77
- const response = await processor.process(mutators, request);
78
- await persistAlreadyProcessedMutationResults(pool, recoveryRequest, response);
79
- if (!skipAsyncTasks && asyncTasks.length) {
80
- Promise.all(asyncTasks.map(task => runWithAuthScope(authData, task))).catch(err => {
81
- console.error(`[push] async tasks failed`, err);
82
- });
83
- }
84
- return {
85
- response,
86
- asyncTasks
87
- };
88
- };
89
- const handleQueryRequest = async ({
90
- authData,
91
- request
92
- }) => {
93
- if (!queries) {
94
- throw new Error("No queries registered with createZeroServer. Pass the syncedQueries registry to createZeroServer via the queries option.");
95
- }
96
- const handler = (name, args) => {
97
- if (name.startsWith("permission.")) {
98
- const table = name.slice("permission.".length);
99
- const {
100
- objOrId
101
- } = args;
102
- const perm = getMutationsPermissions(table);
103
- if (!perm) {
104
- throw new Error(`[permission] no permission defined for table: ${table}`);
105
- }
106
- setEvaluatingPermission(true);
107
- try {
108
- return getZQL()[table].where(eb => {
109
- return permissions.buildPermissionQuery(authData, eb, perm, objOrId, table);
110
- }).one();
111
- } finally {
112
- setEvaluatingPermission(false);
113
- }
114
- }
115
- if (validateQuery) {
116
- validateQuery({
117
- authData,
118
- queryName: name,
119
- params: args
120
- });
121
- }
122
- const query2 = mustGetQuery(queries, name);
123
- return query2.fn({
124
- args,
125
- ctx: authData
126
- });
127
- };
128
- const userID = typeof authData?.id === "string" ? authData.id : void 0;
129
- const response = await runWithQueryContext({
130
- authData: authData || {}
131
- }, () => userID === void 0 ? zeroHandleQueryRequest(handler, schema, request) : zeroHandleQueryRequest({
132
- handler,
133
- schema,
134
- request,
135
- userID
136
- }));
137
- return {
138
- response
139
- };
140
- };
141
- async function runMutate(modelName, mutatorName, mutatorArg, options) {
142
- let authData = options?.authData;
143
- if (!authData) {
144
- const scoped = getScopedAuthData();
145
- if (scoped) {
146
- authData = scoped;
147
- }
148
- }
149
- const asyncTasks = [];
150
- const mutators = createMutators({
151
- models,
152
- environment: "server",
153
- asyncTasks,
154
- authData: {
155
- ...defaultMutateAuthData,
156
- ...authData
157
- },
158
- createServerActions,
159
- can: permissions.can,
160
- validateMutation,
161
- mutationValidators
162
- });
163
- const modelMutators = mutators[modelName];
164
- const mutator = modelMutators[mutatorName];
165
- await transaction(async tx => {
166
- await mutator(tx, mutatorArg);
167
- });
168
- if (asyncTasks.length) {
169
- const resolvedAuth = authData ?? null;
170
- const promise = Promise.all(asyncTasks.map(t => runWithAuthScope(resolvedAuth, t)));
171
- if (options?.awaitEffects) {
172
- await promise;
173
- } else {
174
- promise.catch(err => {
175
- console.error(`[mutate] async tasks failed`, err);
176
- });
177
- }
178
- }
179
- }
180
- const mutate = new Proxy({}, {
181
- get(_, modelName) {
182
- return new Proxy({}, {
183
- get(_2, mutatorName) {
184
- return (arg, options) => runMutate(modelName, mutatorName, arg, options);
185
- }
186
- });
187
- }
188
- });
189
- async function transaction(query2) {
190
- try {
191
- if (isInZeroMutation()) {
192
- const {
193
- tx
194
- } = mutatorContext();
195
- return await query2(tx);
196
- }
197
- const output = await zeroDb.transaction(query2, dummyTransactionInput);
198
- return output;
199
- } catch (err) {
200
- if (err?.name !== "PermissionError") {
201
- console.error(`Error running transaction(): ${err}`);
202
- }
203
- throw err;
204
- }
205
- }
206
- function query(cb, authData) {
207
- const run = () => transaction(async tx => {
208
- return tx.run(cb(getZQL()));
209
- });
210
- if (authData !== void 0) {
211
- return runWithQueryContext({
212
- authData
213
- }, run);
214
- }
215
- return run();
216
- }
217
- if (queries) {
218
- setCustomQueries(queries);
219
- }
220
- setRunner(queryObj => {
221
- return transaction(async tx => {
222
- return tx.run(queryObj);
223
- });
224
- });
225
- const dummyTransactionInput = {
226
- clientGroupID: "unused",
227
- clientID: "unused",
228
- mutationID: 42,
229
- upstreamSchema: "unused"
230
- };
231
- return {
232
- handleMutationRequest,
233
- handleQueryRequest,
234
- transaction,
235
- mutate,
236
- query
237
- };
238
- }
239
- function alreadyProcessedMutations(response) {
240
- if (!response || typeof response !== "object") return [];
241
- const mutations = response.mutations;
242
- if (!Array.isArray(mutations)) return [];
243
- return mutations.filter(mutation => {
244
- if (!mutation || typeof mutation !== "object") return false;
245
- const id = mutation.id;
246
- const result = mutation.result;
247
- return !!id && typeof id === "object" && typeof id.clientID === "string" && typeof id.id === "number" && !!result && typeof result === "object" && result.error === "alreadyProcessed";
31
+ const databaseProvider = zeroNodePg(options.schema, pool);
32
+ return createZeroServerCore({
33
+ ...options,
34
+ createDatabase: () => databaseProvider,
35
+ persistAlreadyProcessed: args => persistAlreadyProcessedMutationResults(pool, args)
248
36
  });
249
37
  }
250
- async function persistAlreadyProcessedMutationResults(pool, request, response) {
251
- const mutations = alreadyProcessedMutations(response);
252
- if (mutations.length === 0) return;
253
- const schema = new URL(request.url).searchParams.get("schema");
254
- if (!schema) return;
255
- const body = await request.json();
256
- if (typeof body.clientGroupID !== "string") return;
257
- const table = `${quotePgIdentifier(schema)}."mutations"`;
38
+ async function persistAlreadyProcessedMutationResults(pool, {
39
+ clientGroupID,
40
+ mutations,
41
+ upstreamSchema
42
+ }) {
43
+ const table = `${quotePgIdentifier(upstreamSchema)}."mutations"`;
258
44
  const values = mutations.map((_, index) => {
259
45
  const offset = index * 4;
260
46
  return `($${offset + 1}, $${offset + 2}, $${offset + 3}, $${offset + 4}::json)`;
261
47
  }).join(", ");
262
- const params = mutations.flatMap(mutation => [body.clientGroupID, mutation.id.clientID, mutation.id.id, JSON.stringify(mutation.result)]);
48
+ const params = mutations.flatMap(mutation => [clientGroupID, mutation.id.clientID, mutation.id.id, JSON.stringify(mutation.result)]);
263
49
  await pool.query(`INSERT INTO ${table} ("clientGroupID", "clientID", "mutationID", "result")
264
50
  VALUES ${values}
265
51
  ON CONFLICT ("clientGroupID", "clientID", "mutationID") DO NOTHING`, params);
@@ -1 +1 @@
1
- {"version":3,"names":["mustGetQuery","PushProcessor","handleQueryRequest","zeroHandleQueryRequest","zeroNodePg","assertString","Pool","createPermissions","createMutators","getScopedAuthData","isInZeroMutation","mutatorContext","runWithAuthScope","runWithQueryContext","getMutationsPermissions","setCustomQueries","getZQL","setEnvironment","setSchema","setEvaluatingPermission","setRunner","createZeroServer","createServerActions","database","pool","externalPool","schema","models","queries","mutations","mutationValidators","validateQuery","validateMutation","defaultAllowAdminRole","defaultMutateAuthData","dbString","pgPool","connectionString","ssl","includes","rejectUnauthorized","on","error","console","message","client","zeroDb","permissions","environment","adminRoleMode","processor","handleMutationRequest","authData","request","skipAsyncTasks","asyncTasks","recoveryRequest","clone","mutators","can","response","process","persistAlreadyProcessedMutationResults","length","Promise","all","map","task","catch","err","Error","handler","name","args","startsWith","table","slice","objOrId","perm","where","eb","buildPermissionQuery","one","queryName","params","query2","fn","ctx","userID","id","runMutate","modelName","mutatorName","mutatorArg","options","scoped","modelMutators","mutator","transaction","tx","resolvedAuth","promise","t","awaitEffects","mutate","Proxy","get","_","_2","arg","output","dummyTransactionInput","query","cb","run","queryObj","clientGroupID","clientID","mutationID","upstreamSchema","alreadyProcessedMutations","Array","isArray","filter","mutation","result","URL","url","searchParams","body","json","quotePgIdentifier","values","index","offset","join","flatMap","JSON","stringify","value","replaceAll"],"sources":["../../src/createZeroServer.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,YAAA,QAAoB;AAC7B,SAASC,aAAA,QAAqB;AAC9B,SAASC,kBAAA,IAAsBC,sBAAA,QAA8B;AAC7D,SAASC,UAAA,QAA0C;AACnD,SAASC,YAAA,QAAoB;AAC7B,SAASC,IAAA,QAAY;AAErB,SAASC,iBAAA,QAAyB;AAClC,SAASC,cAAA,QAAsB;AAC/B,SACEC,iBAAA,EACAC,gBAAA,EACAC,cAAA,EACAC,gBAAA,QACK;AACP,SAASC,mBAAA,QAA2B;AACpC,SAASC,uBAAA,QAA+B;AACxC,SAASC,gBAAA,QAAwB;AACjC,SAASC,MAAA,EAAQC,cAAA,EAAgBC,SAAA,QAAiB;AAClD,SAASC,uBAAA,QAA+B;AACxC,SAASC,SAAA,QAAiB;AAoEnB,SAASC,iBAId;EACAC,mBAAA;EACAC,QAAA;EACAC,IAAA,EAAMC,YAAA;EACNC,MAAA;EACAC,MAAA;EACAC,OAAA;EACAC,SAAA,EAAWC,kBAAA;EACXC,aAAA;EACAC,gBAAA;EACAC,qBAAA,GAAwB;EACxBC,qBAAA,GAAwB,CAAC;AAC3B,GA4CG;EACDhB,SAAA,CAAUQ,MAAM;EAChBT,cAAA,CAAe,QAAQ;EAEvB,IAAIO,IAAA;EACJ,IAAIC,YAAA,EAAc;IAChBD,IAAA,GAAOC,YAAA;EACT,OAAO;IACL,MAAMU,QAAA,GAAW9B,YAAA,CAAakB,QAAA,EAAU,6BAA6B;IACrE,MAAMa,MAAA,GAAS,IAAI9B,IAAA,CAAK;MACtB+B,gBAAA,EAAkBF,QAAA;MAAA;MAElBG,GAAA,EAAKH,QAAA,CAASI,QAAA,CAAS,iBAAiB,IACpC;QAAEC,kBAAA,EAAoB;MAAM,IAC5B;IACN,CAAC;IACDJ,MAAA,CAAOK,EAAA,CAAG,SAAUC,KAAA,IAAU;MAC5BC,OAAA,CAAQD,KAAA,CAAM,wBAAwBA,KAAA,CAAME,OAAO;IACrD,CAAC;IACDR,MAAA,CAAOK,EAAA,CAAG,WAAYI,MAAA,IAAW;MAC/BA,MAAA,CAAOJ,EAAA,CAAG,SAAUC,KAAA,IAAU;QAC5BC,OAAA,CAAQD,KAAA,CAAM,0BAA0BA,KAAA,CAAME,OAAO;MACvD,CAAC;IACH,CAAC;IACDpB,IAAA,GAAOY,MAAA;EACT;EAEA,MAAMU,MAAA,GAAS1C,UAAA,CAAWsB,MAAA,EAAQF,IAAI;EAEtC,MAAMuB,WAAA,GAAcxC,iBAAA,CAA0B;IAC5CyC,WAAA,EAAa;IACbtB,MAAA;IACAuB,aAAA,EAAehB;EACjB,CAAC;EAED,MAAMiB,SAAA,GAAY,IAAIjD,aAAA,CAAc6C,MAAM;EAE1C,MAAMK,qBAAA,GAAwB,MAAAA,CAAO;IACnCC,QAAA;IACAC,OAAA;IACAC;EACF,MAIM;IAEJ,MAAMC,UAAA,GAA4B,EAAC;IACnC,MAAMC,eAAA,GAAkBH,OAAA,CAAQI,KAAA,CAAM;IAEtC,MAAMC,QAAA,GAAWlD,cAAA,CAAe;MAC9B+C,UAAA;MACAI,GAAA,EAAKZ,WAAA,CAAYY,GAAA;MACjBrC,mBAAA;MACA0B,WAAA,EAAa;MACbrB,MAAA;MACAyB,QAAA;MACApB,gBAAA;MACAF;IACF,CAAC;IAGD,MAAM8B,QAAA,GAAW,MAAMV,SAAA,CAAUW,OAAA,CAAQH,QAAA,EAAUL,OAAO;IAC1D,MAAMS,sCAAA,CAAuCtC,IAAA,EAAMgC,eAAA,EAAiBI,QAAQ;IAG5E,IAAI,CAACN,cAAA,IAAkBC,UAAA,CAAWQ,MAAA,EAAQ;MACxCC,OAAA,CAAQC,GAAA,CAAIV,UAAA,CAAWW,GAAA,CAAKC,IAAA,IAASvD,gBAAA,CAAiBwC,QAAA,EAAUe,IAAI,CAAC,CAAC,EAAEC,KAAA,CACrEC,GAAA,IAAiB;QAChB1B,OAAA,CAAQD,KAAA,CAAM,6BAA6B2B,GAAG;MAChD,CACF;IACF;IAEA,OAAO;MACLT,QAAA;MACAL;IACF;EACF;EAEA,MAAMrD,kBAAA,GAAqB,MAAAA,CAAO;IAChCkD,QAAA;IACAC;EACF,MAGM;IACJ,IAAI,CAACzB,OAAA,EAAS;MACZ,MAAM,IAAI0C,KAAA,CACR,0HAEF;IACF;IAEA,MAAMC,OAAA,GAAUA,CAACC,IAAA,EAAcC,IAAA,KAAkB;MAE/C,IAAID,IAAA,CAAKE,UAAA,CAAW,aAAa,GAAG;QAClC,MAAMC,KAAA,GAAQH,IAAA,CAAKI,KAAA,CAAM,cAAcb,MAAM;QAC7C,MAAM;UAAEc;QAAQ,IAAIJ,IAAA;QAGpB,MAAMK,IAAA,GAAOhE,uBAAA,CAAwB6D,KAAK;QAC1C,IAAI,CAACG,IAAA,EAAM;UACT,MAAM,IAAIR,KAAA,CAAM,iDAAiDK,KAAK,EAAE;QAC1E;QAGAxD,uBAAA,CAAwB,IAAI;QAC5B,IAAI;UACF,OAAQH,MAAA,CAAO,EAAU2D,KAAK,EAC3BI,KAAA,CAAOC,EAAA,IAAY;YAClB,OAAOjC,WAAA,CAAYkC,oBAAA,CAAqB7B,QAAA,EAAU4B,EAAA,EAAIF,IAAA,EAAMD,OAAA,EAASF,KAAK;UAC5E,CAAC,EACAO,GAAA,CAAI;QACT,UAAE;UACA/D,uBAAA,CAAwB,KAAK;QAC/B;MACF;MAGA,IAAIY,aAAA,EAAe;QACjBA,aAAA,CAAc;UAAEqB,QAAA;UAAU+B,SAAA,EAAWX,IAAA;UAAMY,MAAA,EAAQX;QAAK,CAAC;MAC3D;MAEA,MAAMY,MAAA,GAASrF,YAAA,CAAqB4B,OAAA,EAAS4C,IAAI;MACjD,OAAOa,MAAA,CAAMC,EAAA,CAAG;QAAEb,IAAA;QAAMc,GAAA,EAAKnC;MAAS,CAAC;IACzC;IAWA,MAAMoC,MAAA,GAAS,OAAOpC,QAAA,EAAUqC,EAAA,KAAO,WAAWrC,QAAA,CAASqC,EAAA,GAAK;IAEhE,MAAM7B,QAAA,GAAW,MAAM/C,mBAAA,CACrB;MAAEuC,QAAA,EAAUA,QAAA,IAAa,CAAC;IAAe,GACzC,MACEoC,MAAA,KAAW,SACPrF,sBAAA,CAAuBoE,OAAA,EAAS7C,MAAA,EAAQ2B,OAAO,IAC/ClD,sBAAA,CAAuB;MAAEoE,OAAA;MAAS7C,MAAA;MAAQ2B,OAAA;MAASmC;IAAO,CAAC,CACnE;IAEA,OAAO;MACL5B;IACF;EACF;EAEA,eAAe8B,UACbC,SAAA,EACAC,WAAA,EACAC,UAAA,EACAC,OAAA,EACA;IACA,IAAI1C,QAAA,GAAW0C,OAAA,EAAS1C,QAAA;IAGxB,IAAI,CAACA,QAAA,EAAU;MACb,MAAM2C,MAAA,GAAStF,iBAAA,CAAkB;MACjC,IAAIsF,MAAA,EAAQ;QACV3C,QAAA,GAAW2C,MAAA;MACb;IACF;IAEA,MAAMxC,UAAA,GAAyC,EAAC;IAEhD,MAAMG,QAAA,GAAWlD,cAAA,CAAe;MAC9BmB,MAAA;MACAqB,WAAA,EAAa;MACbO,UAAA;MACAH,QAAA,EAAU;QACR,GAAGlB,qBAAA;QACH,GAAGkB;MACL;MACA9B,mBAAA;MACAqC,GAAA,EAAKZ,WAAA,CAAYY,GAAA;MACjB3B,gBAAA;MACAF;IACF,CAAC;IAED,MAAMkE,aAAA,GAAgBtC,QAAA,CAASiC,SAAkC;IAIjE,MAAMM,OAAA,GAAUD,aAAA,CAAcJ,WAAW;IAEzC,MAAMM,WAAA,CAAY,MAAOC,EAAA,IAAO;MAC9B,MAAMF,OAAA,CAAQE,EAAA,EAAIN,UAAU;IAC9B,CAAC;IAED,IAAItC,UAAA,CAAWQ,MAAA,EAAQ;MACrB,MAAMqC,YAAA,GAAehD,QAAA,IAAY;MACjC,MAAMiD,OAAA,GAAUrC,OAAA,CAAQC,GAAA,CACtBV,UAAA,CAAWW,GAAA,CAAKoC,CAAA,IAAM1F,gBAAA,CAAiBwF,YAAA,EAAcE,CAAC,CAAC,CACzD;MACA,IAAIR,OAAA,EAASS,YAAA,EAAc;QACzB,MAAMF,OAAA;MACR,OAAO;QACLA,OAAA,CAAQjC,KAAA,CAAOC,GAAA,IAAiB;UAC9B1B,OAAA,CAAQD,KAAA,CAAM,+BAA+B2B,GAAG;QAClD,CAAC;MACH;IACF;EACF;EAGA,MAAMmC,MAAA,GAAS,IAAIC,KAAA,CAAM,CAAC,GAA2B;IACnDC,IAAIC,CAAA,EAAGhB,SAAA,EAAmB;MACxB,OAAO,IAAIc,KAAA,CACT,CAAC,GACD;QACEC,IAAIE,EAAA,EAAGhB,WAAA,EAAqB;UAC1B,OAAO,CAACiB,GAAA,EAAcf,OAAA,KACpBJ,SAAA,CAAUC,SAAA,EAAWC,WAAA,EAAaiB,GAAA,EAAKf,OAAO;QAClD;MACF,CACF;IACF;EACF,CAAC;EAED,eAAeI,YAGbb,MAAA,EAA6B;IAC7B,IAAI;MACF,IAAI3E,gBAAA,CAAiB,GAAG;QACtB,MAAM;UAAEyF;QAAG,IAAIxF,cAAA,CAAe;QAC9B,OAAO,MAAM0E,MAAA,CAAMc,EAAE;MACvB;MAEA,MAAMW,MAAA,GAAS,MAAMhE,MAAA,CAAOoD,WAAA,CAAYb,MAAA,EAAO0B,qBAAqB;MACpE,OAAOD,MAAA;IACT,SAASzC,GAAA,EAAK;MACZ,IAAKA,GAAA,EAAaG,IAAA,KAAS,mBAAmB;QAC5C7B,OAAA,CAAQD,KAAA,CAAM,gCAAgC2B,GAAG,EAAE;MACrD;MACA,MAAMA,GAAA;IACR;EACF;EAEA,SAAS2C,MACPC,EAAA,EACA7D,QAAA,EAC2B;IAC3B,MAAM8D,GAAA,GAAMA,CAAA,KACVhB,WAAA,CAAY,MAAOC,EAAA,IAAO;MACxB,OAAOA,EAAA,CAAGe,GAAA,CAAID,EAAA,CAAGjG,MAAA,CAAO,CAAC,CAAC;IAC5B,CAAC;IAEH,IAAIoC,QAAA,KAAa,QAAW;MAC1B,OAAOvC,mBAAA,CAAoB;QAAEuC;MAAS,GAAG8D,GAAG;IAC9C;IACA,OAAOA,GAAA,CAAI;EACb;EAGA,IAAItF,OAAA,EAAS;IACXb,gBAAA,CAAiBa,OAAO;EAC1B;EAGAR,SAAA,CAAW+F,QAAA,IAAa;IACtB,OAAOjB,WAAA,CAAY,MAAOC,EAAA,IAAO;MAC/B,OAAOA,EAAA,CAAGe,GAAA,CAAIC,QAAQ;IACxB,CAAC;EACH,CAAC;EAGD,MAAMJ,qBAAA,GAAkD;IACtDK,aAAA,EAAe;IACfC,QAAA,EAAU;IACVC,UAAA,EAAY;IACZC,cAAA,EAAgB;EAClB;EAEA,OAAO;IACLpE,qBAAA;IACAjD,kBAAA;IACAgG,WAAA;IACAM,MAAA;IACAQ;EACF;AACF;AAEA,SAASQ,0BAA0B5D,QAAA,EAA+C;EAChF,IAAI,CAACA,QAAA,IAAY,OAAOA,QAAA,KAAa,UAAU,OAAO,EAAC;EACvD,MAAM/B,SAAA,GAAa+B,QAAA,CAAqC/B,SAAA;EACxD,IAAI,CAAC4F,KAAA,CAAMC,OAAA,CAAQ7F,SAAS,GAAG,OAAO,EAAC;EAEvC,OAAOA,SAAA,CAAU8F,MAAA,CAAQC,QAAA,IAAmD;IAC1E,IAAI,CAACA,QAAA,IAAY,OAAOA,QAAA,KAAa,UAAU,OAAO;IACtD,MAAMnC,EAAA,GAAMmC,QAAA,CAA8BnC,EAAA;IAC1C,MAAMoC,MAAA,GAAUD,QAAA,CAAkCC,MAAA;IAClD,OACE,CAAC,CAACpC,EAAA,IACF,OAAOA,EAAA,KAAO,YACd,OAAQA,EAAA,CAA8B4B,QAAA,KAAa,YACnD,OAAQ5B,EAAA,CAAwBA,EAAA,KAAO,YACvC,CAAC,CAACoC,MAAA,IACF,OAAOA,MAAA,KAAW,YACjBA,MAAA,CAA+BnF,KAAA,KAAU;EAE9C,CAAC;AACH;AAEA,eAAeoB,uCACbtC,IAAA,EACA6B,OAAA,EACAO,QAAA,EACA;EACA,MAAM/B,SAAA,GAAY2F,yBAAA,CAA0B5D,QAAQ;EACpD,IAAI/B,SAAA,CAAUkC,MAAA,KAAW,GAAG;EAE5B,MAAMrC,MAAA,GAAS,IAAIoG,GAAA,CAAIzE,OAAA,CAAQ0E,GAAG,EAAEC,YAAA,CAAatB,GAAA,CAAI,QAAQ;EAC7D,IAAI,CAAChF,MAAA,EAAQ;EAEb,MAAMuG,IAAA,GAAQ,MAAM5E,OAAA,CAAQ6E,IAAA,CAAK;EACjC,IAAI,OAAOD,IAAA,CAAKb,aAAA,KAAkB,UAAU;EAE5C,MAAMzC,KAAA,GAAQ,GAAGwD,iBAAA,CAAkBzG,MAAM,CAAC;EAC1C,MAAM0G,MAAA,GAASvG,SAAA,CACZqC,GAAA,CAAI,CAACyC,CAAA,EAAG0B,KAAA,KAAU;IACjB,MAAMC,MAAA,GAASD,KAAA,GAAQ;IACvB,OAAO,KAAKC,MAAA,GAAS,CAAC,MAAMA,MAAA,GAAS,CAAC,MAAMA,MAAA,GAAS,CAAC,MAAMA,MAAA,GAAS,CAAC;EACxE,CAAC,EACAC,IAAA,CAAK,IAAI;EACZ,MAAMnD,MAAA,GAASvD,SAAA,CAAU2G,OAAA,CAASZ,QAAA,IAAa,CAC7CK,IAAA,CAAKb,aAAA,EACLQ,QAAA,CAASnC,EAAA,CAAG4B,QAAA,EACZO,QAAA,CAASnC,EAAA,CAAGA,EAAA,EACZgD,IAAA,CAAKC,SAAA,CAAUd,QAAA,CAASC,MAAM,EAC/B;EAED,MAAMrG,IAAA,CAAKwF,KAAA,CACT,eAAerC,KAAK;AAAA,cACVyD,MAAM;AAAA,0EAEhBhD,MACF;AACF;AAEA,SAAS+C,kBAAkBQ,KAAA,EAAe;EACxC,OAAO,IAAIA,KAAA,CAAMC,UAAA,CAAW,KAAK,IAAI,CAAC;AACxC","ignoreList":[]}
1
+ {"version":3,"names":["zeroNodePg","assertString","Pool","createZeroServerCore","createZeroServer","database","pool","externalPool","options","dbString","pgPool","connectionString","ssl","includes","rejectUnauthorized","on","error","console","message","client","databaseProvider","schema","createDatabase","persistAlreadyProcessed","args","persistAlreadyProcessedMutationResults","clientGroupID","mutations","upstreamSchema","table","quotePgIdentifier","values","map","_","index","offset","join","params","flatMap","mutation","id","clientID","JSON","stringify","result","query","value","replaceAll"],"sources":["../../src/createZeroServer.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,UAAA,QAAkB;AAC3B,SAASC,YAAA,QAAoB;AAC7B,SAASC,IAAA,QAAY;AAErB,SAASC,oBAAA,QAA4B;AAmB9B,SAASC,iBAId;EACAC,QAAA;EACAC,IAAA,EAAMC,YAAA;EACN,GAAGC;AACL,GAW8C;EAC5C,IAAIF,IAAA;EACJ,IAAIC,YAAA,EAAc;IAChBD,IAAA,GAAOC,YAAA;EACT,OAAO;IACL,MAAME,QAAA,GAAWR,YAAA,CAAaI,QAAA,EAAU,6BAA6B;IACrE,MAAMK,MAAA,GAAS,IAAIR,IAAA,CAAK;MACtBS,gBAAA,EAAkBF,QAAA;MAClBG,GAAA,EAAKH,QAAA,CAASI,QAAA,CAAS,iBAAiB,IACpC;QAAEC,kBAAA,EAAoB;MAAM,IAC5B;IACN,CAAC;IACDJ,MAAA,CAAOK,EAAA,CAAG,SAAUC,KAAA,IAAU;MAC5BC,OAAA,CAAQD,KAAA,CAAM,wBAAwBA,KAAA,CAAME,OAAO;IACrD,CAAC;IACDR,MAAA,CAAOK,EAAA,CAAG,WAAYI,MAAA,IAAW;MAC/BA,MAAA,CAAOJ,EAAA,CAAG,SAAUC,KAAA,IAAU;QAC5BC,OAAA,CAAQD,KAAA,CAAM,0BAA0BA,KAAA,CAAME,OAAO;MACvD,CAAC;IACH,CAAC;IACDZ,IAAA,GAAOI,MAAA;EACT;EAEA,MAAMU,gBAAA,GAAmBpB,UAAA,CAAWQ,OAAA,CAAQa,MAAA,EAAQf,IAAI;EAExD,OAAOH,oBAAA,CAAqB;IAC1B,GAAGK,OAAA;IACHc,cAAA,EAAgBA,CAAA,KAAMF,gBAAA;IACtBG,uBAAA,EAA0BC,IAAA,IAASC,sCAAA,CAAuCnB,IAAA,EAAMkB,IAAI;EACtF,CAAC;AACH;AAEA,eAAeC,uCACbnB,IAAA,EACA;EAAEoB,aAAA;EAAeC,SAAA;EAAWC;AAAe,GAC3C;EACA,MAAMC,KAAA,GAAQ,GAAGC,iBAAA,CAAkBF,cAAc,CAAC;EAClD,MAAMG,MAAA,GAASJ,SAAA,CACZK,GAAA,CAAI,CAACC,CAAA,EAAGC,KAAA,KAAU;IACjB,MAAMC,MAAA,GAASD,KAAA,GAAQ;IACvB,OAAO,KAAKC,MAAA,GAAS,CAAC,MAAMA,MAAA,GAAS,CAAC,MAAMA,MAAA,GAAS,CAAC,MAAMA,MAAA,GAAS,CAAC;EACxE,CAAC,EACAC,IAAA,CAAK,IAAI;EACZ,MAAMC,MAAA,GAASV,SAAA,CAAUW,OAAA,CAASC,QAAA,IAAa,CAC7Cb,aAAA,EACAa,QAAA,CAASC,EAAA,CAAGC,QAAA,EACZF,QAAA,CAASC,EAAA,CAAGA,EAAA,EACZE,IAAA,CAAKC,SAAA,CAAUJ,QAAA,CAASK,MAAM,EAC/B;EAED,MAAMtC,IAAA,CAAKuC,KAAA,CACT,eAAehB,KAAK;AAAA,cACVE,MAAM;AAAA,0EAEhBM,MACF;AACF;AAEA,SAASP,kBAAkBgB,KAAA,EAAe;EACxC,OAAO,IAAIA,KAAA,CAAMC,UAAA,CAAW,KAAK,IAAI,CAAC;AACxC","ignoreList":[]}
@@ -1,284 +1,58 @@
1
- import { mustGetQuery } from "@rocicorp/zero";
2
- import { PushProcessor } from "@rocicorp/zero/pg";
3
- import { handleQueryRequest as zeroHandleQueryRequest } from "@rocicorp/zero/server";
4
1
  import { zeroNodePg } from "@rocicorp/zero/server/adapters/pg";
5
2
  import { assertString } from "@take-out/helpers";
6
3
  import { Pool } from "pg";
7
- import { createPermissions } from "./createPermissions.native.js";
8
- import { createMutators } from "./helpers/createMutators.native.js";
9
- import { getScopedAuthData, isInZeroMutation, mutatorContext, runWithAuthScope } from "./helpers/mutatorContext.native.js";
10
- import { runWithQueryContext } from "./helpers/queryContext.native.js";
11
- import { getMutationsPermissions } from "./modelRegistry.native.js";
12
- import { setCustomQueries } from "./run.native.js";
13
- import { getZQL, setEnvironment, setSchema } from "./state.native.js";
14
- import { setEvaluatingPermission } from "./where.native.js";
15
- import { setRunner } from "./zeroRunner.native.js";
16
- function _type_of(obj) {
17
- "@swc/helpers - typeof";
18
-
19
- return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
20
- }
4
+ import { createZeroServerCore } from "./createZeroServerCore.native.js";
21
5
  function createZeroServer(param) {
22
6
  var {
23
- createServerActions,
24
7
  database,
25
8
  pool: externalPool,
26
- schema,
27
- models,
28
- queries,
29
- mutations: mutationValidators,
30
- validateQuery,
31
- validateMutation,
32
- defaultAllowAdminRole = "all",
33
- defaultMutateAuthData = {}
9
+ ...options
34
10
  } = param;
35
- setSchema(schema);
36
- setEnvironment("server");
37
11
  var pool;
38
12
  if (externalPool) {
39
13
  pool = externalPool;
40
14
  } else {
41
- var dbString = assertString(database, `createZeroServer "database"`);
15
+ var dbString = assertString(database, 'createZeroServer "database"');
42
16
  var pgPool = new Pool({
43
17
  connectionString: dbString,
44
- // handle self-signed certificates in production
45
18
  ssl: dbString.includes("sslmode=require") ? {
46
19
  rejectUnauthorized: false
47
20
  } : void 0
48
21
  });
49
22
  pgPool.on("error", function (error) {
50
- console.error(`[on-zero] pool error`, error.message);
23
+ console.error("[on-zero] pool error", error.message);
51
24
  });
52
25
  pgPool.on("connect", function (client) {
53
26
  client.on("error", function (error) {
54
- console.error(`[on-zero] client error`, error.message);
27
+ console.error("[on-zero] client error", error.message);
55
28
  });
56
29
  });
57
30
  pool = pgPool;
58
31
  }
59
- var zeroDb = zeroNodePg(schema, pool);
60
- var permissions = createPermissions({
61
- environment: "server",
62
- schema,
63
- adminRoleMode: defaultAllowAdminRole
64
- });
65
- var processor = new PushProcessor(zeroDb);
66
- var handleMutationRequest = async function (param2) {
67
- var {
68
- authData,
69
- request,
70
- skipAsyncTasks
71
- } = param2;
72
- var asyncTasks = [];
73
- var recoveryRequest = request.clone();
74
- var mutators = createMutators({
75
- asyncTasks,
76
- can: permissions.can,
77
- createServerActions,
78
- environment: "server",
79
- models,
80
- authData,
81
- validateMutation,
82
- mutationValidators
83
- });
84
- var response = await processor.process(mutators, request);
85
- await persistAlreadyProcessedMutationResults(pool, recoveryRequest, response);
86
- if (!skipAsyncTasks && asyncTasks.length) {
87
- Promise.all(asyncTasks.map(function (task) {
88
- return runWithAuthScope(authData, task);
89
- })).catch(function (err) {
90
- console.error(`[push] async tasks failed`, err);
91
- });
92
- }
93
- return {
94
- response,
95
- asyncTasks
96
- };
97
- };
98
- var handleQueryRequest = async function (param2) {
99
- var {
100
- authData,
101
- request
102
- } = param2;
103
- if (!queries) {
104
- throw new Error("No queries registered with createZeroServer. Pass the syncedQueries registry to createZeroServer via the queries option.");
105
- }
106
- var handler = function (name, args) {
107
- if (name.startsWith("permission.")) {
108
- var table = name.slice("permission.".length);
109
- var {
110
- objOrId
111
- } = args;
112
- var perm = getMutationsPermissions(table);
113
- if (!perm) {
114
- throw new Error(`[permission] no permission defined for table: ${table}`);
115
- }
116
- setEvaluatingPermission(true);
117
- try {
118
- return getZQL()[table].where(function (eb) {
119
- return permissions.buildPermissionQuery(authData, eb, perm, objOrId, table);
120
- }).one();
121
- } finally {
122
- setEvaluatingPermission(false);
123
- }
124
- }
125
- if (validateQuery) {
126
- validateQuery({
127
- authData,
128
- queryName: name,
129
- params: args
130
- });
131
- }
132
- var _$query = mustGetQuery(queries, name);
133
- return _$query.fn({
134
- args,
135
- ctx: authData
136
- });
137
- };
138
- var userID = typeof (authData === null || authData === void 0 ? void 0 : authData.id) === "string" ? authData.id : void 0;
139
- var response = await runWithQueryContext({
140
- authData: authData || {}
141
- }, function () {
142
- return userID === void 0 ? zeroHandleQueryRequest(handler, schema, request) : zeroHandleQueryRequest({
143
- handler,
144
- schema,
145
- request,
146
- userID
147
- });
148
- });
149
- return {
150
- response
151
- };
152
- };
153
- async function runMutate(modelName, mutatorName, mutatorArg, options) {
154
- var authData = options === null || options === void 0 ? void 0 : options.authData;
155
- if (!authData) {
156
- var scoped = getScopedAuthData();
157
- if (scoped) {
158
- authData = scoped;
159
- }
160
- }
161
- var asyncTasks = [];
162
- var mutators = createMutators({
163
- models,
164
- environment: "server",
165
- asyncTasks,
166
- authData: {
167
- ...defaultMutateAuthData,
168
- ...authData
169
- },
170
- createServerActions,
171
- can: permissions.can,
172
- validateMutation,
173
- mutationValidators
174
- });
175
- var modelMutators = mutators[modelName];
176
- var mutator = modelMutators[mutatorName];
177
- await transaction(async function (tx) {
178
- await mutator(tx, mutatorArg);
179
- });
180
- if (asyncTasks.length) {
181
- var resolvedAuth = authData !== null && authData !== void 0 ? authData : null;
182
- var promise = Promise.all(asyncTasks.map(function (t) {
183
- return runWithAuthScope(resolvedAuth, t);
184
- }));
185
- if (options === null || options === void 0 ? void 0 : options.awaitEffects) {
186
- await promise;
187
- } else {
188
- promise.catch(function (err) {
189
- console.error(`[mutate] async tasks failed`, err);
190
- });
191
- }
192
- }
193
- }
194
- var mutate = new Proxy({}, {
195
- get(_, modelName) {
196
- return new Proxy({}, {
197
- get(_2, mutatorName) {
198
- return function (arg, options) {
199
- return runMutate(modelName, mutatorName, arg, options);
200
- };
201
- }
202
- });
32
+ var databaseProvider = zeroNodePg(options.schema, pool);
33
+ return createZeroServerCore({
34
+ ...options,
35
+ createDatabase: function () {
36
+ return databaseProvider;
37
+ },
38
+ persistAlreadyProcessed: function (args) {
39
+ return persistAlreadyProcessedMutationResults(pool, args);
203
40
  }
204
41
  });
205
- async function transaction(query2) {
206
- try {
207
- if (isInZeroMutation()) {
208
- var {
209
- tx
210
- } = mutatorContext();
211
- return await query2(tx);
212
- }
213
- var output = await zeroDb.transaction(query2, dummyTransactionInput);
214
- return output;
215
- } catch (err) {
216
- if ((err === null || err === void 0 ? void 0 : err.name) !== "PermissionError") {
217
- console.error(`Error running transaction(): ${err}`);
218
- }
219
- throw err;
220
- }
221
- }
222
- function query(cb, authData) {
223
- var run = function () {
224
- return transaction(async function (tx) {
225
- return tx.run(cb(getZQL()));
226
- });
227
- };
228
- if (authData !== void 0) {
229
- return runWithQueryContext({
230
- authData
231
- }, run);
232
- }
233
- return run();
234
- }
235
- if (queries) {
236
- setCustomQueries(queries);
237
- }
238
- setRunner(function (queryObj) {
239
- return transaction(async function (tx) {
240
- return tx.run(queryObj);
241
- });
242
- });
243
- var dummyTransactionInput = {
244
- clientGroupID: "unused",
245
- clientID: "unused",
246
- mutationID: 42,
247
- upstreamSchema: "unused"
248
- };
249
- return {
250
- handleMutationRequest,
251
- handleQueryRequest,
252
- transaction,
253
- mutate,
254
- query
255
- };
256
- }
257
- function alreadyProcessedMutations(response) {
258
- if (!response || (typeof response === "undefined" ? "undefined" : _type_of(response)) !== "object") return [];
259
- var mutations = response.mutations;
260
- if (!Array.isArray(mutations)) return [];
261
- return mutations.filter(function (mutation) {
262
- if (!mutation || (typeof mutation === "undefined" ? "undefined" : _type_of(mutation)) !== "object") return false;
263
- var id = mutation.id;
264
- var result = mutation.result;
265
- return !!id && (typeof id === "undefined" ? "undefined" : _type_of(id)) === "object" && typeof id.clientID === "string" && typeof id.id === "number" && !!result && (typeof result === "undefined" ? "undefined" : _type_of(result)) === "object" && result.error === "alreadyProcessed";
266
- });
267
42
  }
268
- async function persistAlreadyProcessedMutationResults(pool, request, response) {
269
- var mutations = alreadyProcessedMutations(response);
270
- if (mutations.length === 0) return;
271
- var schema = new URL(request.url).searchParams.get("schema");
272
- if (!schema) return;
273
- var body = await request.json();
274
- if (typeof body.clientGroupID !== "string") return;
275
- var table = `${quotePgIdentifier(schema)}."mutations"`;
43
+ async function persistAlreadyProcessedMutationResults(pool, param) {
44
+ var {
45
+ clientGroupID,
46
+ mutations,
47
+ upstreamSchema
48
+ } = param;
49
+ var table = `${quotePgIdentifier(upstreamSchema)}."mutations"`;
276
50
  var values = mutations.map(function (_, index) {
277
51
  var offset = index * 4;
278
52
  return `($${offset + 1}, $${offset + 2}, $${offset + 3}, $${offset + 4}::json)`;
279
53
  }).join(", ");
280
54
  var params = mutations.flatMap(function (mutation) {
281
- return [body.clientGroupID, mutation.id.clientID, mutation.id.id, JSON.stringify(mutation.result)];
55
+ return [clientGroupID, mutation.id.clientID, mutation.id.id, JSON.stringify(mutation.result)];
282
56
  });
283
57
  await pool.query(`INSERT INTO ${table} ("clientGroupID", "clientID", "mutationID", "result")
284
58
  VALUES ${values}
@@ -1 +1 @@
1
- {"version":3,"names":["mustGetQuery","PushProcessor","handleQueryRequest","zeroHandleQueryRequest","zeroNodePg","assertString","Pool","createPermissions","createMutators","getScopedAuthData","isInZeroMutation","mutatorContext","runWithAuthScope","runWithQueryContext","getMutationsPermissions","setCustomQueries","getZQL","setEnvironment","setSchema","setEvaluatingPermission","setRunner","_type_of","obj","Symbol","constructor","createZeroServer","param","createServerActions","database","pool","externalPool","schema","models","queries","mutations","mutationValidators","validateQuery","validateMutation","defaultAllowAdminRole","defaultMutateAuthData","dbString","pgPool","connectionString","ssl","includes","rejectUnauthorized","on","error","console","message","client","zeroDb","permissions","environment","adminRoleMode","processor","handleMutationRequest","param2","authData","request","skipAsyncTasks","asyncTasks","recoveryRequest","clone","mutators","can","response","process","persistAlreadyProcessedMutationResults","length","Promise","all","map","task","catch","err","Error","handler","name","args","startsWith","table","slice","objOrId","perm","where","eb","buildPermissionQuery","one","queryName","params","_$query","fn","ctx","userID","id","runMutate","modelName","mutatorName","mutatorArg","options","scoped","modelMutators","mutator","transaction","tx","resolvedAuth","promise","t","awaitEffects","mutate","Proxy","get","_","_2","arg","query2","output","dummyTransactionInput","query","cb","run","queryObj","clientGroupID","clientID","mutationID","upstreamSchema","alreadyProcessedMutations","Array","isArray","filter","mutation","result","URL","url","searchParams","body","json","quotePgIdentifier","values","index","offset","join","flatMap","JSON","stringify","value","replaceAll"],"sources":["../../src/createZeroServer.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["zeroNodePg","assertString","Pool","createZeroServerCore","createZeroServer","param","database","pool","externalPool","options","dbString","pgPool","connectionString","ssl","includes","rejectUnauthorized","on","error","console","message","client","databaseProvider","schema","createDatabase","persistAlreadyProcessed","args","persistAlreadyProcessedMutationResults","clientGroupID","mutations","upstreamSchema","table","quotePgIdentifier","values","map","_","index","offset","join","params","flatMap","mutation","id","clientID","JSON","stringify","result","query"],"sources":["../../src/createZeroServer.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,UAAA,QAAkB;AAC3B,SAASC,YAAA,QAAoB;AAC7B,SAASC,IAAA,QAAY;AAErB,SAASC,oBAAA,QAA4B;AAmB9B,SAASC,iBAIdC,KAAA;EACA;IAAAC,QAAA;IAAAC,IAAA,EAAAC,YAAA;IAAA,GAAAC;EAAA,IAAAJ,KAAA;EACA,IAAAE,IAAM;EACN,IAAGC,YAAA;IAYyCD,IAAA,GAAAC,YAAA;EAC5C,OAAI;IACJ,IAAIE,QAAA,GAAAT,YAAc,CAAAK,QAAA;IAChB,IAAAK,MAAO,OAAAT,IAAA;MACTU,gBAAO,EAAAF,QAAA;MACLG,GAAA,EAAMH,QAAA,CAAAI,QAAW,kBAAuB;QACxCC,kBAAmB,EAAK;MACtB;IAAkB,EAClB;IAGFJ,MAAC,CAAAK,EAAA,oBAAAC,KAAA;MACDC,OAAO,CAAGD,KAAA,uBAAoB,EAAAA,KAAA,CAAAE,OAAA;IAC5B;IACFR,MAAC,CAAAK,EAAA,sBAAAI,MAAA;MACDA,MAAO,CAAAJ,EAAG,UAAW,UAACC,KAAW;QAC/BC,OAAO,CAAGD,KAAA,yBAAoB,EAAAA,KAAA,CAAAE,OAAA;MAC5B;IAAqD,EACvD;IACFZ,IAAC,GAAAI,MAAA;EACD;EACF,IAAAU,gBAAA,GAAArB,UAAA,CAAAS,OAAA,CAAAa,MAAA,EAAAf,IAAA;EAEA,OAAMJ,oBAAmB;IAEzB,GAAAM,OAAO;IACLc,cAAG,WAAAA,CAAA;MACH,OAAAF,gBAAsB;IACtB;IACDG,uBAAA,WAAAA,CAAAC,IAAA;MACH,OAAAC,sCAAA,CAAAnB,IAAA,EAAAkB,IAAA;IAEA;EAIE;AACA;AAEI,eAAMC,sCAAiBA,CAAAnB,IAAA,EAAAF,KAAA;EACvB;IAAAsB,aAAY;IAAAC,SAAgB;IAAAC;EAAgB,IAAAxB,KAAU;EACxD,IACCyB,KAAK,GAAI,GAAAC,iBAAA,CAAAF,cAAA;EACZ,IAAAG,MAAM,GAAAJ,SAAS,CAAAK,GAAU,WAASC,CAAA,EAAAC,KAAA;IAChC,IAAAC,MAAA,GAAAD,KAAA;IACA,YAAYC,MAAA,UAAAA,MAAA,UAAAA,MAAA,UAAAA,MAAA;EAAA,EACZ,CAAAC,IAAA,KAAS;EAAG,IACZC,MAAK,GAAAV,SAAU,CAAAW,OAAS,WAAMC,QAAA;IAC/B,QAEDb,aAAW,EACTa,QAAA,CAAAC,EAAA,CAAAC,QAAoB,EAAAF,QACV,CAAAC,EAAA,CAAAA,EAAM,EAAAE,IAAA,CAAAC,SAAA,CAAAJ,QAAA,CAAAK,MAAA,EAEhB;EACF;EACF,MAAAtC,IAAA,CAAAuC,KAAA,gBAAAhB,KAAA;AAEA,cAASE,MAAA;AACP,wEAAsC,EAAAM,MAAA;AACxC","ignoreList":[]}