@oneclick.dev/cms-core-modules 0.0.83 → 0.0.84

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 (63) hide show
  1. package/dist/{ContentEditor-CxKirDdL.mjs → ContentEditor-DPhhOkx3.mjs} +7068 -5926
  2. package/dist/{ContentEditor-CRFkD4tE.js → ContentEditor-DrxtH_Hq.js} +42 -42
  3. package/dist/{Create-CsqVYhPO.mjs → Create-6uT9HWar.mjs} +35 -35
  4. package/dist/{Create-ip0MnS0o.js → Create-DuZ5nZrX.js} +1 -1
  5. package/dist/{DateFormatter-CvOfaUnU.mjs → DateFormatter-2B0R-DY4.mjs} +204 -400
  6. package/dist/DateFormatter-DbtOLV0L.js +1 -0
  7. package/dist/{Detail-RMXFuSRQ.js → Detail-BZ-iE9vf.js} +1 -1
  8. package/dist/{Detail-B4b_FLDa.mjs → Detail-C1Blq61w.mjs} +90 -90
  9. package/dist/{Detail-BayNaAg9.js → Detail-C8wQiDcv.js} +1 -1
  10. package/dist/{Detail-CbLk1v37.mjs → Detail-CJVMJDP7.mjs} +17 -17
  11. package/dist/{Detail-CnK-qbhE.js → Detail-CPqug27l.js} +1 -1
  12. package/dist/Detail-CjuhjPby.js +1 -0
  13. package/dist/{Detail-U0mgLKt6.mjs → Detail-CtItxMX4.mjs} +62 -63
  14. package/dist/{Detail-CVgWHbMC.mjs → Detail-Dnpnmy4-.mjs} +158 -158
  15. package/dist/{Entries-D7MHylQE.mjs → Entries-BkOPae4R.mjs} +49 -49
  16. package/dist/Entries-CcEW98F5.js +1 -0
  17. package/dist/{NewReservationDialog.vue_vue_type_script_setup_true_lang-CDc8MIq2.mjs → NewReservationDialog.vue_vue_type_script_setup_true_lang-Bc946oSc.mjs} +1 -1
  18. package/dist/{NewReservationDialog.vue_vue_type_script_setup_true_lang-StaNp-3y.js → NewReservationDialog.vue_vue_type_script_setup_true_lang-CqERfyYb.js} +1 -1
  19. package/dist/{Overview-CwCAeBnX.js → Overview-CA8wh_BI.js} +1 -1
  20. package/dist/{Overview-CgViRnNc.mjs → Overview-D4MFwRI_.mjs} +67 -68
  21. package/dist/{Overview-B2bFNGhH.js → Overview-Da0XexiT.js} +1 -1
  22. package/dist/Overview-DeQQ0FY3.js +1 -0
  23. package/dist/{Overview--XpvBbqz.mjs → Overview-DoOASlNz.mjs} +1 -3
  24. package/dist/{Overview-Cczt_dcE.mjs → Overview-gJSvftdE.mjs} +34 -34
  25. package/dist/{ReservationDetailDialog.vue_vue_type_script_setup_true_lang-B7ks5mbf.mjs → ReservationDetailDialog.vue_vue_type_script_setup_true_lang-Cohhnd5x.mjs} +0 -1
  26. package/dist/{ReservationDetailDialog.vue_vue_type_script_setup_true_lang-Vxubki_v.js → ReservationDetailDialog.vue_vue_type_script_setup_true_lang-VWVIxIr6.js} +1 -1
  27. package/dist/{SeoHealth-ZpvB7CS2.mjs → SeoHealth-Bc5chnaa.mjs} +14 -14
  28. package/dist/{SeoHealth-DFZ0LLBH.js → SeoHealth-BkpJ1F2Y.js} +1 -1
  29. package/dist/TableView-BPWAx--G.mjs +5743 -0
  30. package/dist/TableView-D63QrVlK.js +4 -0
  31. package/dist/View-BL70u98U.js +1 -0
  32. package/dist/{View-DDXN0tKD.mjs → View-BO5N911y.mjs} +5 -5
  33. package/dist/{agenda-Cl3s_FIE.mjs → agenda-C5grvzSa.mjs} +166 -169
  34. package/dist/agenda-DXMwVWpN.js +1 -0
  35. package/dist/{availability-B-tRp8hB.mjs → availability-C1NqOFsQ.mjs} +81 -81
  36. package/dist/{availability-BiBbzEIM.js → availability-D_wnfLsH.js} +1 -1
  37. package/dist/cms-core-modules.css +1 -1
  38. package/dist/{exceptions-DQPSFSj7.mjs → exceptions-BIwMhYa4.mjs} +1 -1
  39. package/dist/{exceptions-BA3PsW4n.js → exceptions-Cn7zooEu.js} +1 -1
  40. package/dist/{index-CBC9dWZ9.js → index-C9pSS15N.js} +2 -2
  41. package/dist/{index-YOOlBEZB.mjs → index-MwjeLHPP.mjs} +3 -3
  42. package/dist/index.cjs.js +1 -1
  43. package/dist/index.mjs +22 -22
  44. package/dist/orders-CG1QUCN8.js +1 -0
  45. package/dist/{orders-DZzdsHOW.mjs → orders-CeixEBcU.mjs} +57 -58
  46. package/dist/server-handlers.cjs.js +1 -1
  47. package/dist/server-handlers.mjs +142 -147
  48. package/package.json +2 -2
  49. package/dist/DateFormatter-ls6HfWpS.js +0 -1
  50. package/dist/Detail-BcboL7NF.js +0 -1
  51. package/dist/Entries-BPkZ7Jg5.js +0 -1
  52. package/dist/Overview-B-8TLLjh.js +0 -1
  53. package/dist/TableView-BUPPcHUW.mjs +0 -89505
  54. package/dist/TableView-CksiPsTL.js +0 -586
  55. package/dist/View-DfzaVOzS.js +0 -1
  56. package/dist/agenda-rlFma_wn.js +0 -1
  57. package/dist/floating-ui.dom-B9WYoHj2.js +0 -1
  58. package/dist/floating-ui.dom-fpIfhXTZ.mjs +0 -1291
  59. package/dist/index-DYpruS-A-Cw57iwdY.mjs +0 -4210
  60. package/dist/index-DYpruS-A-DwDXo9Tq.js +0 -88
  61. package/dist/index-YMaY4uuk-BgpTtr73.js +0 -1
  62. package/dist/index-YMaY4uuk-C_xV5K9Z.mjs +0 -1300
  63. package/dist/orders-tP4WdF5q.js +0 -1
@@ -1,9 +1,9 @@
1
- import { createRouter as M, defineEventHandler as y, createError as w, getRouterParam as N, getQuery as D } from "h3";
1
+ import { createRouter as v, defineEventHandler as y, createError as w, getRouterParam as N, getQuery as D } from "h3";
2
2
  import "vue";
3
- function O(f) {
4
- const { initFirebase: R, normalizeTimestamps: A } = f, g = M();
5
- async function u(d) {
6
- const { supabase: c, instanceId: m } = d.context.module, { data: e, error: a } = await c.from("project_modules").select("config").eq("id", m).single();
3
+ function $(f) {
4
+ const { initFirebase: R, normalizeTimestamps: A } = f, g = v();
5
+ async function m(d) {
6
+ const { supabase: c, instanceId: l } = d.context.module, { data: e, error: a } = await c.from("project_modules").select("config").eq("id", l).single();
7
7
  if (a || !e?.config)
8
8
  throw w({ statusCode: 500, statusMessage: "Failed to load module config." });
9
9
  const n = e.config, t = n.project, s = n.productCollection || "products";
@@ -13,8 +13,8 @@ function O(f) {
13
13
  }
14
14
  return g.get("/products", y(async (d) => {
15
15
  try {
16
- const { firebase: c, collection: m } = await u(d);
17
- return (await c.firestore().collection(m).get()).docs.map((a) => A({
16
+ const { firebase: c, collection: l } = await m(d);
17
+ return (await c.firestore().collection(l).get()).docs.map((a) => A({
18
18
  id: a.id,
19
19
  ...a.data()
20
20
  }));
@@ -29,25 +29,25 @@ function O(f) {
29
29
  if (!c)
30
30
  throw w({ statusCode: 400, statusMessage: "Product ID is required." });
31
31
  try {
32
- const { firebase: m, collection: e } = await u(d), a = await m.firestore().collection(e).doc(c).get();
32
+ const { firebase: l, collection: e } = await m(d), a = await l.firestore().collection(e).doc(c).get();
33
33
  if (!a.exists)
34
34
  throw w({ statusCode: 404, statusMessage: "Product not found." });
35
35
  return A({
36
36
  id: a.id,
37
37
  ...a.data()
38
38
  });
39
- } catch (m) {
40
- throw console.error("Products handler — get error:", m), w({
41
- statusCode: m.statusCode || 500,
42
- statusMessage: m.statusMessage || "Failed to get product"
39
+ } catch (l) {
40
+ throw console.error("Products handler — get error:", l), w({
41
+ statusCode: l.statusCode || 500,
42
+ statusMessage: l.statusMessage || "Failed to get product"
43
43
  });
44
44
  }
45
45
  })), g.get("/empty-stock", y(async (d) => {
46
- const m = D(d).category;
46
+ const l = D(d).category;
47
47
  try {
48
- const { firebase: e, collection: a } = await u(d);
48
+ const { firebase: e, collection: a } = await m(d);
49
49
  let n = e.firestore().collection(a).where("stock", "==", 0);
50
- m && (n = n.where("collections", "array-contains", m));
50
+ l && (n = n.where("collections", "array-contains", l));
51
51
  const s = (await n.get()).docs.map((o) => A({
52
52
  id: o.id,
53
53
  ...o.data()
@@ -72,10 +72,10 @@ function O(f) {
72
72
  }
73
73
  })), g.handler;
74
74
  }
75
- function G(f) {
76
- const { initFirebase: R, normalizeTimestamps: A } = f, g = M();
77
- async function u(c) {
78
- const { supabase: m, instanceId: e } = c.context.module, { data: a, error: n } = await m.from("project_modules").select("config").eq("id", e).single();
75
+ function x(f) {
76
+ const { initFirebase: R, normalizeTimestamps: A } = f, g = v();
77
+ async function m(c) {
78
+ const { supabase: l, instanceId: e } = c.context.module, { data: a, error: n } = await l.from("project_modules").select("config").eq("id", e).single();
79
79
  if (n || !a?.config)
80
80
  throw w({ statusCode: 500, statusMessage: "Failed to load module config." });
81
81
  const t = a.config, s = t.project, o = t.reservationsCollection || "bookings_orders", r = t.agendaCollection || "agendas";
@@ -105,9 +105,9 @@ function G(f) {
105
105
  }));
106
106
  }
107
107
  return g.get("/appointments", y(async (c) => {
108
- const m = D(c), e = Math.min(Number(m.quantity) || 20, 100);
108
+ const l = D(c), e = Math.min(Number(l.quantity) || 20, 100);
109
109
  try {
110
- const { firebase: a, reservationsCollection: n } = await u(c), s = (await a.firestore().collection(n).orderBy("createdAt", "desc").limit(e).get()).docs.flatMap(
110
+ const { firebase: a, reservationsCollection: n } = await m(c), s = (await a.firestore().collection(n).orderBy("createdAt", "desc").limit(e).get()).docs.flatMap(
111
111
  (o) => d(A({ id: o.id, ...o.data() }))
112
112
  );
113
113
  return {
@@ -121,16 +121,16 @@ function G(f) {
121
121
  });
122
122
  }
123
123
  })), g.get("/appointments/find", y(async (c) => {
124
- const m = D(c), e = (m.name || "").toLowerCase().trim(), a = (m.email || "").toLowerCase().trim(), n = m.date;
124
+ const l = D(c), e = (l.name || "").toLowerCase().trim(), a = (l.email || "").toLowerCase().trim(), n = l.date;
125
125
  try {
126
- const { firebase: t, reservationsCollection: s } = await u(c);
126
+ const { firebase: t, reservationsCollection: s } = await m(c);
127
127
  let o = t.firestore().collection(s);
128
128
  a && (o = o.where("customerInfo.email", "==", a));
129
129
  let i = (await o.orderBy("createdAt", "desc").limit(200).get()).docs.flatMap(
130
- (l) => d(A({ id: l.id, ...l.data() }))
130
+ (u) => d(A({ id: u.id, ...u.data() }))
131
131
  );
132
- return n && (i = i.filter((l) => l.date === n)), e && (i = i.filter((l) => {
133
- const p = (l.customerInfo?.firstName || "").toLowerCase(), h = (l.customerInfo?.lastName || "").toLowerCase();
132
+ return n && (i = i.filter((u) => u.date === n)), e && (i = i.filter((u) => {
133
+ const p = (u.customerInfo?.firstName || "").toLowerCase(), h = (u.customerInfo?.lastName || "").toLowerCase();
134
134
  return p.includes(e) || h.includes(e) || `${p} ${h}`.includes(e);
135
135
  })), {
136
136
  count: i.length,
@@ -143,13 +143,11 @@ function G(f) {
143
143
  });
144
144
  }
145
145
  })), g.get("/appointments/:appointmentId", y(async (c) => {
146
- const m = N(c, "appointmentId");
147
- if (!m)
146
+ const l = N(c, "appointmentId");
147
+ if (!l)
148
148
  throw w({ statusCode: 400, statusMessage: "Appointment ID is required." });
149
149
  try {
150
- const { firebase: e, reservationsCollection: a } = await u(c);
151
- console.log("Fetching appointment with ID:", m, a);
152
- const n = await e.firestore().collection(a).doc(m).get();
150
+ const { firebase: e, reservationsCollection: a } = await m(c), n = await e.firestore().collection(a).doc(l).get();
153
151
  if (!n.exists)
154
152
  throw w({ statusCode: 404, statusMessage: "Appointment not found." });
155
153
  const t = A({ id: n.id, ...n.data() });
@@ -165,17 +163,17 @@ function G(f) {
165
163
  }
166
164
  })), g.handler;
167
165
  }
168
- const q = "https://analyticsdata.googleapis.com/v1beta", F = [
166
+ const M = "https://analyticsdata.googleapis.com/v1beta", F = [
169
167
  "https://www.googleapis.com/auth/analytics.readonly",
170
168
  "https://www.googleapis.com/auth/webmasters.readonly"
171
169
  ], b = "https://searchconsole.googleapis.com/webmasters/v3";
172
- function x(f) {
173
- const { decrypt: R, getGoogleAccessToken: A } = f, g = M();
174
- async function u(e) {
170
+ function G(f) {
171
+ const { decrypt: R, getGoogleAccessToken: A } = f, g = v();
172
+ async function m(e) {
175
173
  const { supabase: a, instanceId: n } = e.context.module, { data: t, error: s } = await a.from("project_modules").select("config").eq("id", n).single();
176
174
  if (s || !t?.config)
177
175
  throw w({ statusCode: 500, statusMessage: "Failed to load module config." });
178
- const o = t.config, r = o.propertyId, i = o.serviceAccount, l = o.siteUrl || "";
176
+ const o = t.config, r = o.propertyId, i = o.serviceAccount, u = o.siteUrl || "";
179
177
  if (!i)
180
178
  throw w({ statusCode: 400, statusMessage: "No Google Service Account configured for this module." });
181
179
  if (!r)
@@ -183,19 +181,19 @@ function x(f) {
183
181
  const { data: p, error: h } = await a.from("integrations").select("config").eq("id", i).single();
184
182
  let C = p?.config;
185
183
  if (h || !C) {
186
- const { data: v, error: U } = await a.from("agency_integrations").select("config").eq("id", i).single();
187
- if (U || !v?.config)
184
+ const { data: q, error: U } = await a.from("agency_integrations").select("config").eq("id", i).single();
185
+ if (U || !q?.config)
188
186
  throw w({ statusCode: 500, statusMessage: "Failed to load Google Service Account credentials." });
189
- C = v.config;
187
+ C = q.config;
190
188
  }
191
- const S = R(C.clientEmail), k = R(C.privateKey), P = R(C.projectId);
189
+ const k = R(C.clientEmail), P = R(C.privateKey), S = R(C.projectId);
192
190
  return { accessToken: await A(
193
- { clientEmail: S, privateKey: k, projectId: P },
191
+ { clientEmail: k, privateKey: P, projectId: S },
194
192
  F
195
- ), propertyId: r, siteUrl: l };
193
+ ), propertyId: r, siteUrl: u };
196
194
  }
197
195
  async function d(e, a, n) {
198
- const t = await fetch(`${q}/properties/${a}:runReport`, {
196
+ const t = await fetch(`${M}/properties/${a}:runReport`, {
199
197
  method: "POST",
200
198
  headers: {
201
199
  Authorization: `Bearer ${e}`,
@@ -215,7 +213,7 @@ function x(f) {
215
213
  g.get(
216
214
  "/report",
217
215
  y(async (e) => {
218
- const { accessToken: a, propertyId: n } = await u(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = s.match(/^(\d+)daysAgo$/), i = r ? parseInt(r[1], 10) : 30, l = `${i * 2}daysAgo`, p = `${i + 1}daysAgo`, h = [
216
+ const { accessToken: a, propertyId: n } = await m(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = s.match(/^(\d+)daysAgo$/), i = r ? parseInt(r[1], 10) : 30, u = `${i * 2}daysAgo`, p = `${i + 1}daysAgo`, h = [
219
217
  { name: "sessions" },
220
218
  { name: "totalUsers" },
221
219
  { name: "screenPageViews" },
@@ -226,12 +224,12 @@ function x(f) {
226
224
  { name: "sessionsPerUser" },
227
225
  { name: "screenPageViewsPerSession" }
228
226
  ];
229
- let C, S = !0;
227
+ let C, k = !0;
230
228
  try {
231
229
  C = await d(a, n, {
232
230
  dateRanges: [
233
231
  { startDate: s, endDate: o, name: "current" },
234
- { startDate: l, endDate: p, name: "previous" }
232
+ { startDate: u, endDate: p, name: "previous" }
235
233
  ],
236
234
  dimensions: [{ name: "date" }],
237
235
  metrics: h,
@@ -239,7 +237,7 @@ function x(f) {
239
237
  orderBys: [{ dimension: { dimensionName: "date" } }]
240
238
  });
241
239
  } catch {
242
- S = !1, C = await d(a, n, {
240
+ k = !1, C = await d(a, n, {
243
241
  dateRanges: [{ startDate: s, endDate: o }],
244
242
  dimensions: [{ name: "date" }],
245
243
  metrics: h,
@@ -247,13 +245,13 @@ function x(f) {
247
245
  orderBys: [{ dimension: { dimensionName: "date" } }]
248
246
  });
249
247
  }
250
- return V(C, S);
248
+ return V(C, k);
251
249
  })
252
250
  ), g.get(
253
251
  "/realtime",
254
252
  y(async (e) => {
255
- const { accessToken: a, propertyId: n } = await u(e), t = await fetch(
256
- `${q}/properties/${n}:runRealtimeReport`,
253
+ const { accessToken: a, propertyId: n } = await m(e), t = await fetch(
254
+ `${M}/properties/${n}:runRealtimeReport`,
257
255
  {
258
256
  method: "POST",
259
257
  headers: {
@@ -273,7 +271,7 @@ function x(f) {
273
271
  throw w({ statusCode: t.status, statusMessage: i?.error?.message || "Realtime API failed" });
274
272
  }
275
273
  const s = await t.json(), o = (s?.rows || []).reduce(
276
- (i, l) => i + parseInt(l.metricValues?.[0]?.value || "0", 10),
274
+ (i, u) => i + parseInt(u.metricValues?.[0]?.value || "0", 10),
277
275
  0
278
276
  ), r = (s?.rows || []).map((i) => ({
279
277
  page: i.dimensionValues?.[0]?.value || "(not set)",
@@ -284,7 +282,7 @@ function x(f) {
284
282
  ), g.get(
285
283
  "/top-pages",
286
284
  y(async (e) => {
287
- const { accessToken: a, propertyId: n } = await u(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = parseInt(t.limit || "10", 10), i = await d(a, n, {
285
+ const { accessToken: a, propertyId: n } = await m(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = parseInt(t.limit || "10", 10), i = await d(a, n, {
288
286
  dateRanges: [{ startDate: s, endDate: o }],
289
287
  dimensions: [{ name: "pagePath" }],
290
288
  metrics: [
@@ -295,22 +293,22 @@ function x(f) {
295
293
  orderBys: [{ metric: { metricName: "screenPageViews" }, desc: !0 }],
296
294
  limit: r * 2
297
295
  // fetch extra to account for duplicates before aggregation
298
- }), l = I(i, "pagePath"), p = /* @__PURE__ */ new Map();
299
- for (const C of l.rows) {
300
- const S = C.pagePath.toLowerCase().replace(/\/+$/, ""), k = p.get(S);
301
- if (k) {
302
- k.screenPageViews += C.screenPageViews || 0, k.totalUsers += C.totalUsers || 0;
303
- const P = k.screenPageViews;
304
- P > 0 && (k.averageSessionDuration = (k.averageSessionDuration * (P - (C.screenPageViews || 0)) + (C.averageSessionDuration || 0) * (C.screenPageViews || 0)) / P);
296
+ }), u = I(i, "pagePath"), p = /* @__PURE__ */ new Map();
297
+ for (const C of u.rows) {
298
+ const k = C.pagePath.toLowerCase().replace(/\/+$/, ""), P = p.get(k);
299
+ if (P) {
300
+ P.screenPageViews += C.screenPageViews || 0, P.totalUsers += C.totalUsers || 0;
301
+ const S = P.screenPageViews;
302
+ S > 0 && (P.averageSessionDuration = (P.averageSessionDuration * (S - (C.screenPageViews || 0)) + (C.averageSessionDuration || 0) * (C.screenPageViews || 0)) / S);
305
303
  } else
306
- p.set(S, { ...C });
304
+ p.set(k, { ...C });
307
305
  }
308
- return { rows: [...p.values()].sort((C, S) => (S.screenPageViews || 0) - (C.screenPageViews || 0)).slice(0, r), rowCount: l.rowCount };
306
+ return { rows: [...p.values()].sort((C, k) => (k.screenPageViews || 0) - (C.screenPageViews || 0)).slice(0, r), rowCount: u.rowCount };
309
307
  })
310
308
  ), g.get(
311
309
  "/top-sources",
312
310
  y(async (e) => {
313
- const { accessToken: a, propertyId: n } = await u(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = await d(a, n, {
311
+ const { accessToken: a, propertyId: n } = await m(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = await d(a, n, {
314
312
  dateRanges: [{ startDate: s, endDate: o }],
315
313
  dimensions: [{ name: "sessionSource" }],
316
314
  metrics: [
@@ -325,7 +323,7 @@ function x(f) {
325
323
  ), g.get(
326
324
  "/devices",
327
325
  y(async (e) => {
328
- const { accessToken: a, propertyId: n } = await u(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = await d(a, n, {
326
+ const { accessToken: a, propertyId: n } = await m(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = await d(a, n, {
329
327
  dateRanges: [{ startDate: s, endDate: o }],
330
328
  dimensions: [{ name: "deviceCategory" }],
331
329
  metrics: [
@@ -339,7 +337,7 @@ function x(f) {
339
337
  ), g.get(
340
338
  "/countries",
341
339
  y(async (e) => {
342
- const { accessToken: a, propertyId: n } = await u(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = await d(a, n, {
340
+ const { accessToken: a, propertyId: n } = await m(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = await d(a, n, {
343
341
  dateRanges: [{ startDate: s, endDate: o }],
344
342
  dimensions: [{ name: "country" }],
345
343
  metrics: [
@@ -354,7 +352,7 @@ function x(f) {
354
352
  ), g.get(
355
353
  "/acquisition/channels",
356
354
  y(async (e) => {
357
- const { accessToken: a, propertyId: n } = await u(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = await d(a, n, {
355
+ const { accessToken: a, propertyId: n } = await m(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = await d(a, n, {
358
356
  dateRanges: [{ startDate: s, endDate: o }],
359
357
  dimensions: [{ name: "sessionDefaultChannelGroup" }],
360
358
  metrics: [
@@ -374,7 +372,7 @@ function x(f) {
374
372
  ), g.get(
375
373
  "/acquisition/source-medium",
376
374
  y(async (e) => {
377
- const { accessToken: a, propertyId: n } = await u(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = await d(a, n, {
375
+ const { accessToken: a, propertyId: n } = await m(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = await d(a, n, {
378
376
  dateRanges: [{ startDate: s, endDate: o }],
379
377
  dimensions: [{ name: "sessionSourceMedium" }],
380
378
  metrics: [
@@ -393,7 +391,7 @@ function x(f) {
393
391
  ), g.get(
394
392
  "/acquisition/referrals",
395
393
  y(async (e) => {
396
- const { accessToken: a, propertyId: n } = await u(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = await d(a, n, {
394
+ const { accessToken: a, propertyId: n } = await m(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = await d(a, n, {
397
395
  dateRanges: [{ startDate: s, endDate: o }],
398
396
  dimensions: [{ name: "sessionSource" }],
399
397
  dimensionFilter: {
@@ -416,7 +414,7 @@ function x(f) {
416
414
  ), g.get(
417
415
  "/acquisition/campaigns",
418
416
  y(async (e) => {
419
- const { accessToken: a, propertyId: n } = await u(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = await d(a, n, {
417
+ const { accessToken: a, propertyId: n } = await m(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = await d(a, n, {
420
418
  dateRanges: [{ startDate: s, endDate: o }],
421
419
  dimensions: [{ name: "sessionCampaignName" }],
422
420
  dimensionFilter: {
@@ -441,7 +439,7 @@ function x(f) {
441
439
  ), g.get(
442
440
  "/content/all-pages",
443
441
  y(async (e) => {
444
- const { accessToken: a, propertyId: n } = await u(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = parseInt(t.limit || "50", 10), i = await d(a, n, {
442
+ const { accessToken: a, propertyId: n } = await m(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = parseInt(t.limit || "50", 10), i = await d(a, n, {
445
443
  dateRanges: [{ startDate: s, endDate: o }],
446
444
  dimensions: [{ name: "pagePath" }],
447
445
  metrics: [
@@ -461,7 +459,7 @@ function x(f) {
461
459
  ), g.get(
462
460
  "/content/landing-pages",
463
461
  y(async (e) => {
464
- const { accessToken: a, propertyId: n } = await u(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = await d(a, n, {
462
+ const { accessToken: a, propertyId: n } = await m(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = await d(a, n, {
465
463
  dateRanges: [{ startDate: s, endDate: o }],
466
464
  dimensions: [{ name: "landingPagePlusQueryString" }],
467
465
  metrics: [
@@ -480,7 +478,7 @@ function x(f) {
480
478
  ), g.get(
481
479
  "/content/exit-pages",
482
480
  y(async (e) => {
483
- const { accessToken: a, propertyId: n } = await u(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = await d(a, n, {
481
+ const { accessToken: a, propertyId: n } = await m(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = await d(a, n, {
484
482
  dateRanges: [{ startDate: s, endDate: o }],
485
483
  dimensions: [{ name: "pagePath" }],
486
484
  metrics: [
@@ -492,20 +490,18 @@ function x(f) {
492
490
  orderBys: [{ metric: { metricName: "screenPageViews" }, desc: !0 }],
493
491
  limit: 20
494
492
  }), i = I(r, "pagePath");
495
- return i.rows = i.rows.map((l) => ({
496
- ...l,
497
- exitRate: l.bounceRate || 0
493
+ return i.rows = i.rows.map((u) => ({
494
+ ...u,
495
+ exitRate: u.bounceRate || 0
498
496
  })), i;
499
497
  })
500
498
  ), g.get(
501
499
  "/content/search-terms",
502
500
  y(async (e) => {
503
- const { accessToken: a, propertyId: n, siteUrl: t } = await u(e), s = D(e), o = s.startDate || "30daysAgo", r = s.endDate || "today";
501
+ const { accessToken: a, propertyId: n, siteUrl: t } = await m(e), s = D(e), o = s.startDate || "30daysAgo", r = s.endDate || "today";
504
502
  if (t)
505
503
  try {
506
- const p = `${b}/sites/${encodeURIComponent(t)}/searchAnalytics/query`;
507
- console.log("[GA Module] Attempting Search Console query for site:", t);
508
- const h = await fetch(
504
+ const p = `${b}/sites/${encodeURIComponent(t)}/searchAnalytics/query`, h = await fetch(
509
505
  p,
510
506
  {
511
507
  method: "POST",
@@ -522,20 +518,19 @@ function x(f) {
522
518
  }
523
519
  );
524
520
  if (h.ok) {
525
- const S = ((await h.json()).rows || []).map((k) => ({
526
- query: k.keys[0],
527
- clicks: k.clicks,
528
- impressions: k.impressions,
529
- ctr: k.ctr,
530
- position: k.position
521
+ const k = ((await h.json()).rows || []).map((P) => ({
522
+ query: P.keys[0],
523
+ clicks: P.clicks,
524
+ impressions: P.impressions,
525
+ ctr: P.ctr,
526
+ position: P.position
531
527
  }));
532
- if (S.length > 0)
533
- return console.log(`[GA Module] Search Console returned ${S.length} keyword rows`), {
534
- rows: S,
535
- rowCount: S.length,
528
+ if (k.length > 0)
529
+ return {
530
+ rows: k,
531
+ rowCount: k.length,
536
532
  source: "search_console"
537
533
  };
538
- console.log("[GA Module] Search Console returned 0 rows, falling through");
539
534
  } else {
540
535
  const C = await h.text().catch(() => "");
541
536
  console.error(`[GA Module] Search Console API error (${h.status}):`, C);
@@ -622,7 +617,7 @@ function x(f) {
622
617
  ), g.get(
623
618
  "/audience/overview",
624
619
  y(async (e) => {
625
- const { accessToken: a, propertyId: n } = await u(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = await d(a, n, {
620
+ const { accessToken: a, propertyId: n } = await m(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = await d(a, n, {
626
621
  dateRanges: [{ startDate: s, endDate: o }],
627
622
  dimensions: [{ name: "newVsReturning" }],
628
623
  metrics: [
@@ -639,9 +634,9 @@ function x(f) {
639
634
  ), g.get(
640
635
  "/audience/technology",
641
636
  y(async (e) => {
642
- const { accessToken: a, propertyId: n } = await u(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = t.dimension || "browser", l = ["browser", "operatingSystem", "screenResolution"].includes(r) ? r : "browser", p = await d(a, n, {
637
+ const { accessToken: a, propertyId: n } = await m(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = t.dimension || "browser", u = ["browser", "operatingSystem", "screenResolution"].includes(r) ? r : "browser", p = await d(a, n, {
643
638
  dateRanges: [{ startDate: s, endDate: o }],
644
- dimensions: [{ name: l }],
639
+ dimensions: [{ name: u }],
645
640
  metrics: [
646
641
  { name: "totalUsers" },
647
642
  { name: "sessions" },
@@ -650,12 +645,12 @@ function x(f) {
650
645
  orderBys: [{ metric: { metricName: "totalUsers" }, desc: !0 }],
651
646
  limit: 10
652
647
  });
653
- return I(p, l);
648
+ return I(p, u);
654
649
  })
655
650
  ), g.get(
656
651
  "/audience/languages",
657
652
  y(async (e) => {
658
- const { accessToken: a, propertyId: n } = await u(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = await d(a, n, {
653
+ const { accessToken: a, propertyId: n } = await m(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = await d(a, n, {
659
654
  dateRanges: [{ startDate: s, endDate: o }],
660
655
  dimensions: [{ name: "language" }],
661
656
  metrics: [
@@ -670,7 +665,7 @@ function x(f) {
670
665
  ), g.get(
671
666
  "/audience/hours",
672
667
  y(async (e) => {
673
- const { accessToken: a, propertyId: n } = await u(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = await d(a, n, {
668
+ const { accessToken: a, propertyId: n } = await m(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = await d(a, n, {
674
669
  dateRanges: [{ startDate: s, endDate: o }],
675
670
  dimensions: [{ name: "dayOfWeekName" }, { name: "hour" }],
676
671
  metrics: [{ name: "sessions" }],
@@ -686,7 +681,7 @@ function x(f) {
686
681
  ), g.get(
687
682
  "/audience/cities",
688
683
  y(async (e) => {
689
- const { accessToken: a, propertyId: n } = await u(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = await d(a, n, {
684
+ const { accessToken: a, propertyId: n } = await m(e), t = D(e), s = t.startDate || "30daysAgo", o = t.endDate || "today", r = await d(a, n, {
690
685
  dateRanges: [{ startDate: s, endDate: o }],
691
686
  dimensions: [{ name: "city" }, { name: "country" }],
692
687
  metrics: [
@@ -720,7 +715,7 @@ function x(f) {
720
715
  }
721
716
  return e;
722
717
  }
723
- async function m(e, a, n) {
718
+ async function l(e, a, n) {
724
719
  const t = `${b}/sites/${encodeURIComponent(a)}/searchAnalytics/query`, s = await fetch(t, {
725
720
  method: "POST",
726
721
  headers: {
@@ -741,22 +736,22 @@ function x(f) {
741
736
  return g.get(
742
737
  "/seo/keywords",
743
738
  y(async (e) => {
744
- const { accessToken: a, siteUrl: n } = await u(e);
739
+ const { accessToken: a, siteUrl: n } = await m(e);
745
740
  if (!n)
746
741
  throw w({ statusCode: 400, statusMessage: "Search Console Site URL is not configured. Add it in module settings." });
747
- const t = D(e), s = c(t.startDate || "30daysAgo"), o = c(t.endDate || "today"), r = Math.min(parseInt(t.limit) || 50, 100), i = await m(a, n, {
742
+ const t = D(e), s = c(t.startDate || "30daysAgo"), o = c(t.endDate || "today"), r = Math.min(parseInt(t.limit) || 50, 100), i = await l(a, n, {
748
743
  startDate: s,
749
744
  endDate: o,
750
745
  dimensions: ["query"],
751
746
  rowLimit: r
752
747
  });
753
748
  return {
754
- rows: (i.rows || []).map((l) => ({
755
- query: l.keys[0],
756
- clicks: l.clicks,
757
- impressions: l.impressions,
758
- ctr: l.ctr,
759
- position: l.position
749
+ rows: (i.rows || []).map((u) => ({
750
+ query: u.keys[0],
751
+ clicks: u.clicks,
752
+ impressions: u.impressions,
753
+ ctr: u.ctr,
754
+ position: u.position
760
755
  })),
761
756
  rowCount: i.rows?.length || 0
762
757
  };
@@ -764,22 +759,22 @@ function x(f) {
764
759
  ), g.get(
765
760
  "/seo/pages",
766
761
  y(async (e) => {
767
- const { accessToken: a, siteUrl: n } = await u(e);
762
+ const { accessToken: a, siteUrl: n } = await m(e);
768
763
  if (!n)
769
764
  throw w({ statusCode: 400, statusMessage: "Search Console Site URL is not configured." });
770
- const t = D(e), s = c(t.startDate || "30daysAgo"), o = c(t.endDate || "today"), r = Math.min(parseInt(t.limit) || 50, 100), i = await m(a, n, {
765
+ const t = D(e), s = c(t.startDate || "30daysAgo"), o = c(t.endDate || "today"), r = Math.min(parseInt(t.limit) || 50, 100), i = await l(a, n, {
771
766
  startDate: s,
772
767
  endDate: o,
773
768
  dimensions: ["page"],
774
769
  rowLimit: r
775
770
  });
776
771
  return {
777
- rows: (i.rows || []).map((l) => ({
778
- page: l.keys[0],
779
- clicks: l.clicks,
780
- impressions: l.impressions,
781
- ctr: l.ctr,
782
- position: l.position
772
+ rows: (i.rows || []).map((u) => ({
773
+ page: u.keys[0],
774
+ clicks: u.clicks,
775
+ impressions: u.impressions,
776
+ ctr: u.ctr,
777
+ position: u.position
783
778
  })),
784
779
  rowCount: i.rows?.length || 0
785
780
  };
@@ -787,10 +782,10 @@ function x(f) {
787
782
  ), g.get(
788
783
  "/seo/trends",
789
784
  y(async (e) => {
790
- const { accessToken: a, siteUrl: n } = await u(e);
785
+ const { accessToken: a, siteUrl: n } = await m(e);
791
786
  if (!n)
792
787
  throw w({ statusCode: 400, statusMessage: "Search Console Site URL is not configured." });
793
- const t = D(e), s = c(t.startDate || "30daysAgo"), o = c(t.endDate || "today"), i = ((await m(a, n, {
788
+ const t = D(e), s = c(t.startDate || "30daysAgo"), o = c(t.endDate || "today"), i = ((await l(a, n, {
794
789
  startDate: s,
795
790
  endDate: o,
796
791
  dimensions: ["date"],
@@ -801,22 +796,22 @@ function x(f) {
801
796
  impressions: p.impressions,
802
797
  ctr: p.ctr,
803
798
  position: p.position
804
- })).sort((p, h) => p.date.localeCompare(h.date)), l = i.reduce(
799
+ })).sort((p, h) => p.date.localeCompare(h.date)), u = i.reduce(
805
800
  (p, h) => ({
806
801
  clicks: p.clicks + h.clicks,
807
802
  impressions: p.impressions + h.impressions
808
803
  }),
809
804
  { clicks: 0, impressions: 0 }
810
805
  );
811
- return l.ctr = l.impressions > 0 ? l.clicks / l.impressions : 0, l.avgPosition = i.length > 0 ? i.reduce((p, h) => p + h.position, 0) / i.length : 0, { rows: i, totals: l, rowCount: i.length };
806
+ return u.ctr = u.impressions > 0 ? u.clicks / u.impressions : 0, u.avgPosition = i.length > 0 ? i.reduce((p, h) => p + h.position, 0) / i.length : 0, { rows: i, totals: u, rowCount: i.length };
812
807
  })
813
808
  ), g.get(
814
809
  "/seo/query-pages",
815
810
  y(async (e) => {
816
- const { accessToken: a, siteUrl: n } = await u(e);
811
+ const { accessToken: a, siteUrl: n } = await m(e);
817
812
  if (!n)
818
813
  throw w({ statusCode: 400, statusMessage: "Search Console Site URL is not configured." });
819
- const t = D(e), s = c(t.startDate || "30daysAgo"), o = c(t.endDate || "today"), r = await m(a, n, {
814
+ const t = D(e), s = c(t.startDate || "30daysAgo"), o = c(t.endDate || "today"), r = await l(a, n, {
820
815
  startDate: s,
821
816
  endDate: o,
822
817
  dimensions: ["query", "page"],
@@ -837,24 +832,24 @@ function x(f) {
837
832
  ), g.handler;
838
833
  }
839
834
  function V(f, R = !0) {
840
- const A = (f.metricHeaders || []).map((s) => s.name), u = (f.dimensionHeaders || []).map((s) => s.name).indexOf("date"), d = [];
835
+ const A = (f.metricHeaders || []).map((s) => s.name), m = (f.dimensionHeaders || []).map((s) => s.name).indexOf("date"), d = [];
841
836
  (f.rows || []).forEach((s) => {
842
- const o = u >= 0 ? s.dimensionValues[u]?.value : s.dimensionValues[0]?.value;
837
+ const o = m >= 0 ? s.dimensionValues[m]?.value : s.dimensionValues[0]?.value;
843
838
  if (!o || o.length < 8) return;
844
839
  const i = { date: `${o.slice(0, 4)}-${o.slice(4, 6)}-${o.slice(6, 8)}` };
845
- A.forEach((l, p) => {
846
- i[l] = parseFloat(s.metricValues[p]?.value || "0");
840
+ A.forEach((u, p) => {
841
+ i[u] = parseFloat(s.metricValues[p]?.value || "0");
847
842
  }), d.push(i);
848
843
  });
849
- const c = {}, m = {};
844
+ const c = {}, l = {};
850
845
  f.totals && f.totals.length >= 2 ? A.forEach((s, o) => {
851
- c[s] = parseFloat(f.totals[0]?.metricValues?.[o]?.value || "0"), m[s] = parseFloat(f.totals[1]?.metricValues?.[o]?.value || "0");
846
+ c[s] = parseFloat(f.totals[0]?.metricValues?.[o]?.value || "0"), l[s] = parseFloat(f.totals[1]?.metricValues?.[o]?.value || "0");
852
847
  }) : f.totals && f.totals.length === 1 && A.forEach((s, o) => {
853
848
  c[s] = parseFloat(f.totals[0]?.metricValues?.[o]?.value || "0");
854
849
  });
855
850
  const e = {};
856
851
  A.forEach((s) => {
857
- const o = c[s] || 0, r = m[s];
852
+ const o = c[s] || 0, r = l[s];
858
853
  r !== void 0 && r !== 0 ? e[s] = (o - r) / r * 100 : e[s] = null;
859
854
  });
860
855
  const a = /* @__PURE__ */ new Map();
@@ -864,40 +859,40 @@ function V(f, R = !0) {
864
859
  return {
865
860
  rows: t,
866
861
  totals: c,
867
- previousTotals: m,
862
+ previousTotals: l,
868
863
  changes: e,
869
864
  rowCount: t.length
870
865
  };
871
866
  }
872
867
  function I(f, R) {
873
- const A = (f.metricHeaders || []).map((u) => u.name), g = (f.rows || []).map((u) => {
868
+ const A = (f.metricHeaders || []).map((m) => m.name), g = (f.rows || []).map((m) => {
874
869
  const d = {
875
- [R]: u.dimensionValues[0].value
870
+ [R]: m.dimensionValues[0].value
876
871
  };
877
- return A.forEach((c, m) => {
878
- d[c] = parseFloat(u.metricValues[m].value);
872
+ return A.forEach((c, l) => {
873
+ d[c] = parseFloat(m.metricValues[l].value);
879
874
  }), d;
880
875
  });
881
876
  return { rows: g, rowCount: f.rowCount || g.length };
882
877
  }
883
878
  function T(f, R) {
884
- const A = (f.metricHeaders || []).map((u) => u.name), g = (f.rows || []).map((u) => {
879
+ const A = (f.metricHeaders || []).map((m) => m.name), g = (f.rows || []).map((m) => {
885
880
  const d = {};
886
- return R.forEach((c, m) => {
887
- d[c] = u.dimensionValues[m]?.value || "";
888
- }), A.forEach((c, m) => {
889
- d[c] = parseFloat(u.metricValues[m].value);
881
+ return R.forEach((c, l) => {
882
+ d[c] = m.dimensionValues[l]?.value || "";
883
+ }), A.forEach((c, l) => {
884
+ d[c] = parseFloat(m.metricValues[l].value);
890
885
  }), d;
891
886
  });
892
887
  return { rows: g, rowCount: f.rowCount || g.length };
893
888
  }
894
889
  function j(f) {
895
- const { decrypt: R } = f, A = M();
896
- async function g(u) {
897
- const { supabase: d, instanceId: c } = u.context.module, { data: m, error: e } = await d.from("project_modules").select("config").eq("id", c).single();
898
- if (e || !m?.config)
890
+ const { decrypt: R } = f, A = v();
891
+ async function g(m) {
892
+ const { supabase: d, instanceId: c } = m.context.module, { data: l, error: e } = await d.from("project_modules").select("config").eq("id", c).single();
893
+ if (e || !l?.config)
899
894
  throw w({ statusCode: 500, statusMessage: "Failed to load module config." });
900
- const a = m.config, n = a.githubIntegration, t = a.githubRepo, s = a.githubOwner;
895
+ const a = l.config, n = a.githubIntegration, t = a.githubRepo, s = a.githubOwner;
901
896
  if (!n || !t || !s)
902
897
  throw w({ statusCode: 400, statusMessage: "No GitHub integration configured for this module." });
903
898
  const { data: o, error: r } = await d.from("integrations").select("config").eq("id", n).single();
@@ -912,10 +907,10 @@ function j(f) {
912
907
  }
913
908
  return A.post(
914
909
  "/github/deploy",
915
- y(async (u) => {
910
+ y(async (m) => {
916
911
  try {
917
- const { token: d, repo: c, owner: m } = await g(u);
918
- await fetch(`https://api.github.com/repos/${m}/${c}/dispatches`, {
912
+ const { token: d, repo: c, owner: l } = await g(m);
913
+ await fetch(`https://api.github.com/repos/${l}/${c}/dispatches`, {
919
914
  method: "POST",
920
915
  headers: {
921
916
  Authorization: `Bearer ${d}`,
@@ -932,8 +927,8 @@ function j(f) {
932
927
  ), A.handler;
933
928
  }
934
929
  export {
935
- G as appointments,
930
+ x as appointments,
936
931
  j as contentManager,
937
- x as googleAnalytics,
938
- O as products
932
+ G as googleAnalytics,
933
+ $ as products
939
934
  };