@vertebr/admin 0.4.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/dist/database/connector.d.ts +1 -1
  2. package/dist/database/connector.d.ts.map +1 -1
  3. package/dist/database/connector.js +42 -6
  4. package/dist/database/connector.js.map +1 -1
  5. package/dist/database/index.d.ts +4 -4
  6. package/dist/database/index.d.ts.map +1 -1
  7. package/dist/database/index.js +4 -4
  8. package/dist/database/index.js.map +1 -1
  9. package/dist/database/{firestore.d.ts → providers/firestore.d.ts} +1 -1
  10. package/dist/database/providers/firestore.d.ts.map +1 -0
  11. package/dist/database/providers/firestore.js.map +1 -0
  12. package/dist/database/{memory.d.ts → providers/memory.d.ts} +1 -1
  13. package/dist/database/providers/memory.d.ts.map +1 -0
  14. package/dist/database/providers/memory.js.map +1 -0
  15. package/dist/database/{mongo.d.ts → providers/mongo.d.ts} +1 -1
  16. package/dist/database/providers/mongo.d.ts.map +1 -0
  17. package/dist/database/providers/mongo.js.map +1 -0
  18. package/dist/database/{postgres.d.ts → providers/postgres.d.ts} +1 -1
  19. package/dist/database/providers/postgres.d.ts.map +1 -0
  20. package/dist/database/providers/postgres.js.map +1 -0
  21. package/dist/database/types.d.ts +20 -5
  22. package/dist/database/types.d.ts.map +1 -1
  23. package/dist/index.d.ts +9 -264
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +23 -957
  26. package/dist/index.js.map +1 -1
  27. package/dist/runtime/api/catalog.d.ts +59 -0
  28. package/dist/runtime/api/catalog.d.ts.map +1 -0
  29. package/dist/runtime/api/catalog.js +85 -0
  30. package/dist/runtime/api/catalog.js.map +1 -0
  31. package/dist/runtime/api/configs.d.ts +15 -0
  32. package/dist/runtime/api/configs.d.ts.map +1 -0
  33. package/dist/runtime/api/configs.js +43 -0
  34. package/dist/runtime/api/configs.js.map +1 -0
  35. package/dist/runtime/api/emails.d.ts +85 -0
  36. package/dist/runtime/api/emails.d.ts.map +1 -0
  37. package/dist/runtime/api/emails.js +520 -0
  38. package/dist/runtime/api/emails.js.map +1 -0
  39. package/dist/runtime/api/gallery.d.ts +28 -0
  40. package/dist/runtime/api/gallery.d.ts.map +1 -0
  41. package/dist/runtime/api/gallery.js +91 -0
  42. package/dist/runtime/api/gallery.js.map +1 -0
  43. package/dist/runtime/api/metrics.d.ts +22 -0
  44. package/dist/runtime/api/metrics.d.ts.map +1 -0
  45. package/dist/runtime/api/metrics.js +38 -0
  46. package/dist/runtime/api/metrics.js.map +1 -0
  47. package/dist/runtime/api/public.d.ts +22 -0
  48. package/dist/runtime/api/public.d.ts.map +1 -0
  49. package/dist/runtime/api/public.js +69 -0
  50. package/dist/runtime/api/public.js.map +1 -0
  51. package/dist/runtime/api/request.d.ts +26 -0
  52. package/dist/runtime/api/request.d.ts.map +1 -0
  53. package/dist/runtime/api/request.js +38 -0
  54. package/dist/runtime/api/request.js.map +1 -0
  55. package/dist/runtime/api/resources.d.ts +85 -0
  56. package/dist/runtime/api/resources.d.ts.map +1 -0
  57. package/dist/runtime/api/resources.js +263 -0
  58. package/dist/runtime/api/resources.js.map +1 -0
  59. package/dist/runtime/api/routes.d.ts +8 -0
  60. package/dist/runtime/api/routes.d.ts.map +1 -0
  61. package/dist/runtime/api/routes.js +202 -0
  62. package/dist/runtime/api/routes.js.map +1 -0
  63. package/dist/runtime/api/spa.d.ts +2 -0
  64. package/dist/runtime/api/spa.d.ts.map +1 -0
  65. package/dist/runtime/api/spa.js +34 -0
  66. package/dist/runtime/api/spa.js.map +1 -0
  67. package/dist/runtime/connectors/payments/connector.d.ts +30 -0
  68. package/dist/runtime/connectors/payments/connector.d.ts.map +1 -0
  69. package/dist/runtime/connectors/payments/connector.js +226 -0
  70. package/dist/runtime/connectors/payments/connector.js.map +1 -0
  71. package/dist/runtime/connectors/payments/index.d.ts +4 -0
  72. package/dist/runtime/connectors/payments/index.d.ts.map +1 -0
  73. package/dist/runtime/connectors/payments/index.js +10 -0
  74. package/dist/runtime/connectors/payments/index.js.map +1 -0
  75. package/dist/runtime/connectors/payments/stripe.d.ts +99 -0
  76. package/dist/runtime/connectors/payments/stripe.d.ts.map +1 -0
  77. package/dist/runtime/connectors/payments/stripe.js +189 -0
  78. package/dist/runtime/connectors/payments/stripe.js.map +1 -0
  79. package/dist/runtime/connectors/payments/types.d.ts +67 -0
  80. package/dist/runtime/connectors/payments/types.d.ts.map +1 -0
  81. package/dist/runtime/connectors/payments/types.js +16 -0
  82. package/dist/runtime/connectors/payments/types.js.map +1 -0
  83. package/dist/runtime/connectors/stripe.d.ts +19 -0
  84. package/dist/runtime/connectors/stripe.d.ts.map +1 -0
  85. package/dist/runtime/connectors/stripe.js +26 -0
  86. package/dist/runtime/connectors/stripe.js.map +1 -0
  87. package/dist/runtime/constants.d.ts +5 -0
  88. package/dist/runtime/constants.d.ts.map +1 -0
  89. package/dist/runtime/constants.js +8 -0
  90. package/dist/runtime/constants.js.map +1 -0
  91. package/dist/runtime/createAdmin.d.ts +3 -0
  92. package/dist/runtime/createAdmin.d.ts.map +1 -0
  93. package/dist/runtime/createAdmin.js +152 -0
  94. package/dist/runtime/createAdmin.js.map +1 -0
  95. package/dist/runtime/errors.d.ts +17 -0
  96. package/dist/runtime/errors.d.ts.map +1 -0
  97. package/dist/runtime/errors.js +36 -0
  98. package/dist/runtime/errors.js.map +1 -0
  99. package/dist/runtime/mail.d.ts +23 -0
  100. package/dist/runtime/mail.d.ts.map +1 -0
  101. package/dist/runtime/mail.js +248 -0
  102. package/dist/runtime/mail.js.map +1 -0
  103. package/dist/runtime/services/environment.d.ts +8 -0
  104. package/dist/runtime/services/environment.d.ts.map +1 -0
  105. package/dist/runtime/services/environment.js +78 -0
  106. package/dist/runtime/services/environment.js.map +1 -0
  107. package/dist/runtime/services/registry.d.ts +6 -0
  108. package/dist/runtime/services/registry.d.ts.map +1 -0
  109. package/dist/runtime/services/registry.js +32 -0
  110. package/dist/runtime/services/registry.js.map +1 -0
  111. package/dist/runtime/services/state.d.ts +25 -0
  112. package/dist/runtime/services/state.d.ts.map +1 -0
  113. package/dist/runtime/services/state.js +3 -0
  114. package/dist/runtime/services/state.js.map +1 -0
  115. package/dist/runtime/types/actions.d.ts +15 -0
  116. package/dist/runtime/types/actions.d.ts.map +1 -0
  117. package/dist/runtime/types/actions.js +3 -0
  118. package/dist/runtime/types/actions.js.map +1 -0
  119. package/dist/runtime/types/admin.d.ts +83 -0
  120. package/dist/runtime/types/admin.d.ts.map +1 -0
  121. package/dist/runtime/types/admin.js +3 -0
  122. package/dist/runtime/types/admin.js.map +1 -0
  123. package/dist/runtime/types/auth.d.ts +67 -0
  124. package/dist/runtime/types/auth.d.ts.map +1 -0
  125. package/dist/runtime/types/auth.js +3 -0
  126. package/dist/runtime/types/auth.js.map +1 -0
  127. package/dist/runtime/types/config.d.ts +39 -0
  128. package/dist/runtime/types/config.d.ts.map +1 -0
  129. package/dist/runtime/types/config.js +3 -0
  130. package/dist/runtime/types/config.js.map +1 -0
  131. package/dist/runtime/types/index.d.ts +15 -0
  132. package/dist/runtime/types/index.d.ts.map +1 -0
  133. package/dist/runtime/types/index.js +7 -0
  134. package/dist/runtime/types/index.js.map +1 -0
  135. package/dist/runtime/types/layout.d.ts +29 -0
  136. package/dist/runtime/types/layout.d.ts.map +1 -0
  137. package/dist/runtime/types/layout.js +3 -0
  138. package/dist/runtime/types/layout.js.map +1 -0
  139. package/dist/runtime/types/mail/catalog.d.ts +104 -0
  140. package/dist/runtime/types/mail/catalog.d.ts.map +1 -0
  141. package/dist/runtime/types/mail/catalog.js +3 -0
  142. package/dist/runtime/types/mail/catalog.js.map +1 -0
  143. package/dist/runtime/types/mail/definition.d.ts +68 -0
  144. package/dist/runtime/types/mail/definition.d.ts.map +1 -0
  145. package/dist/runtime/types/mail/definition.js +3 -0
  146. package/dist/runtime/types/mail/definition.js.map +1 -0
  147. package/dist/runtime/types/mail/index.d.ts +4 -0
  148. package/dist/runtime/types/mail/index.d.ts.map +1 -0
  149. package/dist/runtime/types/mail/index.js +3 -0
  150. package/dist/runtime/types/mail/index.js.map +1 -0
  151. package/dist/runtime/types/mail/message.d.ts +45 -0
  152. package/dist/runtime/types/mail/message.d.ts.map +1 -0
  153. package/dist/runtime/types/mail/message.js +3 -0
  154. package/dist/runtime/types/mail/message.js.map +1 -0
  155. package/dist/runtime/types/metrics.d.ts +46 -0
  156. package/dist/runtime/types/metrics.d.ts.map +1 -0
  157. package/dist/runtime/types/metrics.js +3 -0
  158. package/dist/runtime/types/metrics.js.map +1 -0
  159. package/dist/runtime/types/resource.d.ts +41 -0
  160. package/dist/runtime/types/resource.d.ts.map +1 -0
  161. package/dist/runtime/types/resource.js +3 -0
  162. package/dist/runtime/types/resource.js.map +1 -0
  163. package/dist/runtime/utils/auth.d.ts +4 -0
  164. package/dist/runtime/utils/auth.d.ts.map +1 -0
  165. package/dist/runtime/utils/auth.js +29 -0
  166. package/dist/runtime/utils/auth.js.map +1 -0
  167. package/dist/runtime/utils/config.d.ts +4 -0
  168. package/dist/runtime/utils/config.d.ts.map +1 -0
  169. package/dist/runtime/utils/config.js +14 -0
  170. package/dist/runtime/utils/config.js.map +1 -0
  171. package/dist/runtime/utils/http.d.ts +7 -0
  172. package/dist/runtime/utils/http.d.ts.map +1 -0
  173. package/dist/runtime/utils/http.js +61 -0
  174. package/dist/runtime/utils/http.js.map +1 -0
  175. package/dist/runtime/utils/metricsRange.d.ts +34 -0
  176. package/dist/runtime/utils/metricsRange.d.ts.map +1 -0
  177. package/dist/runtime/utils/metricsRange.js +121 -0
  178. package/dist/runtime/utils/metricsRange.js.map +1 -0
  179. package/dist/runtime/utils/sidebar.d.ts +2 -0
  180. package/dist/runtime/utils/sidebar.d.ts.map +1 -0
  181. package/dist/runtime/utils/sidebar.js +8 -0
  182. package/dist/runtime/utils/sidebar.js.map +1 -0
  183. package/dist/runtime/utils/staticDir.d.ts +2 -0
  184. package/dist/runtime/utils/staticDir.d.ts.map +1 -0
  185. package/dist/runtime/utils/staticDir.js +16 -0
  186. package/dist/runtime/utils/staticDir.js.map +1 -0
  187. package/dist/runtime/utils/uploads.d.ts +6 -0
  188. package/dist/runtime/utils/uploads.d.ts.map +1 -0
  189. package/dist/runtime/utils/uploads.js +66 -0
  190. package/dist/runtime/utils/uploads.js.map +1 -0
  191. package/dist/schema.d.ts +6 -0
  192. package/dist/schema.d.ts.map +1 -1
  193. package/package.json +1 -1
  194. package/static/assets/index-DKyVvFeT.js +332 -0
  195. package/static/assets/index-DUwFg1bw.css +1 -0
  196. package/static/index.html +2 -2
  197. package/dist/database/firestore.d.ts.map +0 -1
  198. package/dist/database/firestore.js.map +0 -1
  199. package/dist/database/memory.d.ts.map +0 -1
  200. package/dist/database/memory.js.map +0 -1
  201. package/dist/database/mongo.d.ts.map +0 -1
  202. package/dist/database/mongo.js.map +0 -1
  203. package/dist/database/postgres.d.ts.map +0 -1
  204. package/dist/database/postgres.js.map +0 -1
  205. package/static/assets/index-CZ7lykOe.css +0 -1
  206. package/static/assets/index-DvZiFDex.js +0 -329
  207. /package/dist/database/{firestore.js → providers/firestore.js} +0 -0
  208. /package/dist/database/{memory.js → providers/memory.js} +0 -0
  209. /package/dist/database/{mongo.js → providers/mongo.js} +0 -0
  210. /package/dist/database/{postgres.js → providers/postgres.js} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../../src/runtime/types/mail/catalog.ts"],"names":[],"mappings":""}
@@ -0,0 +1,68 @@
1
+ import type { HandlerContext } from "../../../schema";
2
+ import type { MailCampaign, MailCampaignScheduleInput, MailDiscountOption, MailHistoryEntry, MailHistoryRecordInput, MailLibraryTemplate, MailProductOption } from "./catalog";
3
+ import type { MailMessage, MailSendReceipt, MailSentHandler, MailTemplate } from "./message";
4
+ /**
5
+ * Host-owned outbound mail. Vertebr turns templates into row actions
6
+ * on resources that opt in via `mail`, and exposes an Emails board when
7
+ * `label` / campaigns are configured.
8
+ *
9
+ * @example
10
+ * vertebrAdmin.mail({
11
+ * label: "Emails",
12
+ * group: "Growth",
13
+ * send: (message) => enqueueEmail(message),
14
+ * templates: {
15
+ * sendEmail: {
16
+ * label: "Email",
17
+ * input: { subject: "string", body: "string" },
18
+ * compose: (_row, input) => branded(input),
19
+ * },
20
+ * },
21
+ * });
22
+ */
23
+ export type MailDefinition = {
24
+ /** Sidebar label for the Emails board. @default `"Emails"` */
25
+ label?: string;
26
+ /** Sidebar group. @default `"Growth"` */
27
+ group?: string;
28
+ send: (message: MailMessage, ctx: HandlerContext) => Promise<MailSendReceipt | void> | MailSendReceipt | void;
29
+ /** Row field used when compose omits `to`. @default `"email"` */
30
+ toField?: string;
31
+ prepare?: (message: MailMessage, ctx: HandlerContext) => MailMessage | Promise<MailMessage>;
32
+ templates: Record<string, MailTemplate>;
33
+ /**
34
+ * Optional host-backed schedule store. Without this, the Emails board
35
+ * can still send now (bulk / single) but cannot schedule drops.
36
+ */
37
+ campaigns?: {
38
+ list: (ctx: HandlerContext) => Promise<MailCampaign[]>;
39
+ schedule: (input: MailCampaignScheduleInput, ctx: HandlerContext) => Promise<MailCampaign>;
40
+ cancel?: (id: string, ctx: HandlerContext) => Promise<void>;
41
+ };
42
+ /** Optional send log for the Emails board Activity tab. */
43
+ history?: {
44
+ list: (ctx: HandlerContext) => Promise<MailHistoryEntry[]>;
45
+ record: (entry: MailHistoryRecordInput, ctx: HandlerContext) => Promise<MailHistoryEntry>;
46
+ };
47
+ /** Optional saved template copies (duplicate / edit). */
48
+ library?: {
49
+ list: (ctx: HandlerContext) => Promise<MailLibraryTemplate[]>;
50
+ save: (template: MailLibraryTemplate, ctx: HandlerContext) => Promise<MailLibraryTemplate>;
51
+ remove?: (id: string, ctx: HandlerContext) => Promise<void>;
52
+ };
53
+ /** Optional catalog products for compose (drop / promo emails). */
54
+ products?: (ctx: HandlerContext) => Promise<MailProductOption[]> | MailProductOption[];
55
+ /**
56
+ * Optional discount / coupon options for compose (Stripe promotion codes).
57
+ * Until wired, hosts can leave this empty and accept manual code fields.
58
+ */
59
+ discounts?: (ctx: HandlerContext) => Promise<MailDiscountOption[]> | MailDiscountOption[];
60
+ };
61
+ export type ResourceMailBinding = {
62
+ templates: string[];
63
+ toField?: string;
64
+ onSent?: MailSentHandler;
65
+ };
66
+ /** Opt a resource into host mail templates. */
67
+ export type ResourceMailConfig = string[] | ResourceMailBinding;
68
+ //# sourceMappingURL=definition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../../../src/runtime/types/mail/definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EACV,YAAY,EACZ,yBAAyB,EACzB,kBAAkB,EAClB,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,eAAe,EACf,YAAY,EACb,MAAM,WAAW,CAAC;AAEnB;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CACJ,OAAO,EAAE,WAAW,EACpB,GAAG,EAAE,cAAc,KAChB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,eAAe,GAAG,IAAI,CAAC;IAC9D,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,CACR,OAAO,EAAE,WAAW,EACpB,GAAG,EAAE,cAAc,KAChB,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACxC;;;OAGG;IACH,SAAS,CAAC,EAAE;QACV,IAAI,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QACvD,QAAQ,EAAE,CACR,KAAK,EAAE,yBAAyB,EAChC,GAAG,EAAE,cAAc,KAChB,OAAO,CAAC,YAAY,CAAC,CAAC;QAC3B,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KAC7D,CAAC;IACF,2DAA2D;IAC3D,OAAO,CAAC,EAAE;QACR,IAAI,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC3D,MAAM,EAAE,CACN,KAAK,EAAE,sBAAsB,EAC7B,GAAG,EAAE,cAAc,KAChB,OAAO,CAAC,gBAAgB,CAAC,CAAC;KAChC,CAAC;IACF,yDAAyD;IACzD,OAAO,CAAC,EAAE;QACR,IAAI,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;QAC9D,IAAI,EAAE,CACJ,QAAQ,EAAE,mBAAmB,EAC7B,GAAG,EAAE,cAAc,KAChB,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAClC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KAC7D,CAAC;IACF,mEAAmE;IACnE,QAAQ,CAAC,EAAE,CACT,GAAG,EAAE,cAAc,KAChB,OAAO,CAAC,iBAAiB,EAAE,CAAC,GAAG,iBAAiB,EAAE,CAAC;IACxD;;;OAGG;IACH,SAAS,CAAC,EAAE,CACV,GAAG,EAAE,cAAc,KAChB,OAAO,CAAC,kBAAkB,EAAE,CAAC,GAAG,kBAAkB,EAAE,CAAC;CAC3D,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B,CAAC;AAEF,+CAA+C;AAC/C,MAAM,MAAM,kBAAkB,GAAG,MAAM,EAAE,GAAG,mBAAmB,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition.js","sourceRoot":"","sources":["../../../../src/runtime/types/mail/definition.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export type { MailComposeResult, MailMessage, MailSendReceipt, MailSendResult, MailSentHandler, MailTemplate, } from "./message";
2
+ export type { MailCampaign, MailCampaignAudience, MailCampaignScheduleInput, MailCampaignStatus, MailDiscountOption, MailHistoryEntry, MailHistoryRecordInput, MailLibraryTemplate, MailProductOption, } from "./catalog";
3
+ export type { MailDefinition, ResourceMailBinding, ResourceMailConfig, } from "./definition";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/runtime/types/mail/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,iBAAiB,EACjB,WAAW,EACX,eAAe,EACf,cAAc,EACd,eAAe,EACf,YAAY,GACb,MAAM,WAAW,CAAC;AAEnB,YAAY,EACV,YAAY,EACZ,oBAAoB,EACpB,yBAAyB,EACzB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,WAAW,CAAC;AAEnB,YAAY,EACV,cAAc,EACd,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/runtime/types/mail/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,45 @@
1
+ import type { HandlerContext } from "../../../schema";
2
+ import type { ActionInputField } from "../actions";
3
+ /** Outbound message the host `mail().send` handler receives. */
4
+ export type MailMessage = {
5
+ to: string | string[];
6
+ subject: string;
7
+ text?: string;
8
+ html?: string;
9
+ replyTo?: string;
10
+ template?: string;
11
+ templateData?: Record<string, unknown>;
12
+ };
13
+ /** Compose may omit `to` — Vertebr fills it from the row's email field. */
14
+ export type MailComposeResult = Omit<MailMessage, "to"> & {
15
+ to?: string | string[];
16
+ };
17
+ export type MailSendResult = {
18
+ template: string;
19
+ id?: string;
20
+ message: MailMessage;
21
+ /** Host-provided reference after send (e.g. order confirmation). */
22
+ reference?: string;
23
+ };
24
+ /** Optional fields `mail.send` may return after delivery. */
25
+ export type MailSendReceipt = {
26
+ id?: string;
27
+ /** Final subject if the host rewrote it (tokens, confirmations, …). */
28
+ subject?: string;
29
+ /** Durable reference to store on history (confirmation number, …). */
30
+ reference?: string;
31
+ };
32
+ export type MailSentHandler = (row: Record<string, unknown>, result: MailSendResult, ctx: HandlerContext) => Promise<unknown> | unknown;
33
+ export type MailTemplate = {
34
+ label: string;
35
+ /**
36
+ * Include on the Emails board for bulk / schedule.
37
+ * Row actions still appear when a resource opts in.
38
+ * @default true
39
+ */
40
+ bulk?: boolean;
41
+ /** Form fields — use FieldSchema for enums / labels / optional copy. */
42
+ input?: Record<string, ActionInputField>;
43
+ compose: (row: Record<string, unknown>, input: Record<string, unknown> | undefined, ctx: HandlerContext) => MailComposeResult | Promise<MailComposeResult>;
44
+ };
45
+ //# sourceMappingURL=message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../../../src/runtime/types/mail/message.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,gEAAgE;AAChE,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC,CAAC;AAEF,2EAA2E;AAC3E,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG;IACxD,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,WAAW,CAAC;IACrB,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,6DAA6D;AAC7D,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,CAC5B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,MAAM,EAAE,cAAc,EACtB,GAAG,EAAE,cAAc,KAChB,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;AAEhC,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACzC,OAAO,EAAE,CACP,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC1C,GAAG,EAAE,cAAc,KAChB,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACrD,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.js","sourceRoot":"","sources":["../../../../src/runtime/types/mail/message.ts"],"names":[],"mappings":""}
@@ -0,0 +1,46 @@
1
+ import type { HandlerContext } from "../../schema";
2
+ /** Dashboard KPI card returned by `metrics()`. */
3
+ export type MetricCard = {
4
+ id: string;
5
+ label: string;
6
+ value: string | number;
7
+ hint?: string;
8
+ tone?: "neutral" | "ok" | "warn" | "danger";
9
+ /** Percent change vs the previous window (e.g. 12.5). */
10
+ delta?: number;
11
+ /** Sparkline, oldest first. */
12
+ series?: number[];
13
+ /** Section heading on the overview board. */
14
+ section?: string;
15
+ /** Promote to the top KPI row. */
16
+ featured?: boolean;
17
+ };
18
+ export type MetricChartPoint = {
19
+ label: string;
20
+ value: number;
21
+ };
22
+ export type MetricChart = {
23
+ id: string;
24
+ label: string;
25
+ /** `usd` formats the axis as currency. */
26
+ unit?: "usd" | "count";
27
+ points: MetricChartPoint[];
28
+ /** Previous-period overlay, aligned to `points`. */
29
+ comparePoints?: MetricChartPoint[];
30
+ };
31
+ export type MetricsPayload = {
32
+ metrics: MetricCard[];
33
+ charts?: MetricChart[];
34
+ /** e.g. `"Aug 2 – Aug 15 vs Jul 19 – Aug 1"`. */
35
+ windowLabel?: string;
36
+ /** e.g. `"Previous period"`. */
37
+ compareLabel?: string;
38
+ };
39
+ export type MetricsDefinition = {
40
+ id?: string;
41
+ label?: string;
42
+ /** Sidebar heading. Defaults to `"Analytics"`. */
43
+ group?: string;
44
+ load: (ctx: HandlerContext) => Promise<MetricCard[] | MetricsPayload> | MetricCard[] | MetricsPayload;
45
+ };
46
+ //# sourceMappingURL=metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../src/runtime/types/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,kDAAkD;AAClD,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC5C,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,IAAI,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC;IACvB,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,oDAAoD;IACpD,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CACJ,GAAG,EAAE,cAAc,KAEjB,OAAO,CAAC,UAAU,EAAE,GAAG,cAAc,CAAC,GACtC,UAAU,EAAE,GACZ,cAAc,CAAC;CACpB,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/runtime/types/metrics.ts"],"names":[],"mappings":""}
@@ -0,0 +1,41 @@
1
+ import type { FieldSchema, HandlerContext, ResourceUploadDefinition } from "../../schema";
2
+ import type { CollectionWideAction, ResourceAction } from "./actions";
3
+ import type { ResourceMailConfig } from "./mail";
4
+ export type ResourcePermissions = {
5
+ create?: boolean;
6
+ update?: boolean;
7
+ delete?: boolean;
8
+ };
9
+ export type ResourceDefinition<T = unknown> = {
10
+ id: string;
11
+ label: string;
12
+ schema: Record<string, FieldSchema>;
13
+ list?: (ctx: HandlerContext) => Promise<T[]> | T[];
14
+ get?: (id: string, ctx: HandlerContext) => Promise<T | undefined> | T | undefined;
15
+ create?: (input: Partial<T>, ctx: HandlerContext) => Promise<T> | T;
16
+ update?: (id: string, input: Partial<T>, ctx: HandlerContext) => Promise<T> | T;
17
+ remove?: (id: string, ctx: HandlerContext) => Promise<void> | void;
18
+ actions?: Record<string, ResourceAction<T>>;
19
+ /**
20
+ * Host mail templates to expose as row actions (Email, Promo, …).
21
+ * Requires `admin.mail({ send, templates })`.
22
+ */
23
+ mail?: ResourceMailConfig;
24
+ collectionActions?: Record<string, CollectionWideAction> | ((ctx: HandlerContext) => Record<string, CollectionWideAction> | Promise<Record<string, CollectionWideAction>>);
25
+ /**
26
+ * Field-keyed upload handlers. Keys must match schema fields
27
+ * (typically image URL strings).
28
+ */
29
+ uploads?: Record<string, ResourceUploadDefinition>;
30
+ permissions?: ResourcePermissions;
31
+ resolvePermissions?: (ctx: HandlerContext) => ResourcePermissions | Promise<ResourcePermissions>;
32
+ /**
33
+ * When true, storefront can list this resource via
34
+ * `/api/public/resources/{id}` (no auth). Rows with `active: false`
35
+ * are omitted.
36
+ */
37
+ public?: boolean;
38
+ /** Sidebar heading. Defaults to `"Resources"`. */
39
+ group?: string;
40
+ };
41
+ //# sourceMappingURL=resource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../../../src/runtime/types/resource.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,wBAAwB,EACzB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAEjD,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,kBAAkB,CAAC,CAAC,GAAG,OAAO,IAAI;IAC5C,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACpC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IACnD,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAClF,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACpE,MAAM,CAAC,EAAE,CACP,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,EACjB,GAAG,EAAE,cAAc,KAChB,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACpB,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACnE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C;;;OAGG;IACH,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,iBAAiB,CAAC,EACd,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,GACpC,CAAC,CACC,GAAG,EAAE,cAAc,KAEjB,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,GACpC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC;IACvD;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IACnD,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,kBAAkB,CAAC,EAAE,CACnB,GAAG,EAAE,cAAc,KAChB,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACxD;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=resource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource.js","sourceRoot":"","sources":["../../../src/runtime/types/resource.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import type { AdminEnvironment, EnvironmentAuthPublic } from "../types";
2
+ export declare function publicAuth(env: AdminEnvironment): EnvironmentAuthPublic;
3
+ export declare function claimSatisfied(claims: Record<string, unknown> | undefined, key: string, expected: string): boolean;
4
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/runtime/utils/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,UAAU,CAAC;AAElB,wBAAgB,UAAU,CAAC,GAAG,EAAE,gBAAgB,GAAG,qBAAqB,CAOvE;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC3C,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GACf,OAAO,CAgBT"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.publicAuth = publicAuth;
4
+ exports.claimSatisfied = claimSatisfied;
5
+ function publicAuth(env) {
6
+ return {
7
+ required: Boolean(env.auth?.required),
8
+ ...(env.auth?.claimKey ? { claimKey: env.auth.claimKey } : {}),
9
+ ...(env.auth?.roles?.length ? { roles: [...env.auth.roles] } : {}),
10
+ ...(env.auth?.client ? { client: env.auth.client } : {}),
11
+ };
12
+ }
13
+ function claimSatisfied(claims, key, expected) {
14
+ const value = claims?.[key];
15
+ if (value == null)
16
+ return false;
17
+ if (Array.isArray(value)) {
18
+ return value.map(String).includes(expected);
19
+ }
20
+ if (typeof value === "string") {
21
+ return (value === expected ||
22
+ value
23
+ .split(",")
24
+ .map((part) => part.trim())
25
+ .includes(expected));
26
+ }
27
+ return false;
28
+ }
29
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/runtime/utils/auth.ts"],"names":[],"mappings":";;AAKA,gCAOC;AAED,wCAoBC;AA7BD,SAAgB,UAAU,CAAC,GAAqB;IAC9C,OAAO;QACL,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC;QACrC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACzD,CAAC;AACJ,CAAC;AAED,SAAgB,cAAc,CAC5B,MAA2C,EAC3C,GAAW,EACX,QAAgB;IAEhB,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,KAAK,CAAC;IAChC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,CACL,KAAK,KAAK,QAAQ;YAClB,KAAK;iBACF,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;iBAC1B,QAAQ,CAAC,QAAQ,CAAC,CACtB,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { FieldSchema } from "../../schema";
2
+ import type { ControlDefinition } from "../types";
3
+ export declare function resolveDefaults(schema: Record<string, FieldSchema>, defaults: ControlDefinition["defaults"] | undefined, env: string): Record<string, unknown>;
4
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/runtime/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAElD,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACnC,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,GAAG,SAAS,EACnD,GAAG,EAAE,MAAM,GACV,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUzB"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveDefaults = resolveDefaults;
4
+ function resolveDefaults(schema, defaults, env) {
5
+ const fromSchema = {};
6
+ for (const [key, field] of Object.entries(schema)) {
7
+ if (field.default !== undefined) {
8
+ fromSchema[key] = field.default;
9
+ }
10
+ }
11
+ const fromDef = typeof defaults === "function" ? defaults(env) : (defaults ?? {});
12
+ return { ...fromSchema, ...fromDef };
13
+ }
14
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/runtime/utils/config.ts"],"names":[],"mappings":";;AAGA,0CAcC;AAdD,SAAgB,eAAe,CAC7B,MAAmC,EACnC,QAAmD,EACnD,GAAW;IAEX,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAChC,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;QAClC,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GACX,OAAO,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IACpE,OAAO,EAAE,GAAG,UAAU,EAAE,GAAG,OAAO,EAAE,CAAC;AACvC,CAAC"}
@@ -0,0 +1,7 @@
1
+ type HeaderMap = Record<string, string | string[] | undefined>;
2
+ export declare function headerValue(headers: HeaderMap | undefined, name: string): string | undefined;
3
+ /** Flatten Hapi/Express query values to a string map. */
4
+ export declare function requestQuery(request: unknown): Record<string, string>;
5
+ export declare function contentTypeFor(filePath: string): string;
6
+ export {};
7
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/runtime/utils/http.ts"],"names":[],"mappings":"AAEA,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;AAE/D,wBAAgB,WAAW,CACzB,OAAO,EAAE,SAAS,GAAG,SAAS,EAC9B,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,SAAS,CAKpB;AASD,yDAAyD;AACzD,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASrE;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAoBvD"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.headerValue = headerValue;
7
+ exports.requestQuery = requestQuery;
8
+ exports.contentTypeFor = contentTypeFor;
9
+ const node_path_1 = __importDefault(require("node:path"));
10
+ function headerValue(headers, name) {
11
+ if (!headers)
12
+ return undefined;
13
+ const raw = headers[name] ?? headers[name.toLowerCase()];
14
+ if (Array.isArray(raw))
15
+ return raw[0];
16
+ return typeof raw === "string" ? raw : undefined;
17
+ }
18
+ function queryValue(value) {
19
+ if (typeof value === "string")
20
+ return value;
21
+ if (typeof value === "number" && Number.isFinite(value))
22
+ return String(value);
23
+ if (Array.isArray(value) && value.length > 0)
24
+ return queryValue(value[0]);
25
+ return undefined;
26
+ }
27
+ /** Flatten Hapi/Express query values to a string map. */
28
+ function requestQuery(request) {
29
+ const raw = request.query;
30
+ if (!raw || typeof raw !== "object")
31
+ return {};
32
+ const query = {};
33
+ for (const [key, value] of Object.entries(raw)) {
34
+ const parsed = queryValue(value);
35
+ if (parsed != null)
36
+ query[key] = parsed;
37
+ }
38
+ return query;
39
+ }
40
+ function contentTypeFor(filePath) {
41
+ const ext = node_path_1.default.extname(filePath).toLowerCase();
42
+ switch (ext) {
43
+ case ".html":
44
+ return "text/html; charset=utf-8";
45
+ case ".js":
46
+ return "text/javascript; charset=utf-8";
47
+ case ".css":
48
+ return "text/css; charset=utf-8";
49
+ case ".svg":
50
+ return "image/svg+xml";
51
+ case ".json":
52
+ return "application/json";
53
+ case ".png":
54
+ return "image/png";
55
+ case ".woff2":
56
+ return "font/woff2";
57
+ default:
58
+ return "application/octet-stream";
59
+ }
60
+ }
61
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/runtime/utils/http.ts"],"names":[],"mappings":";;;;;AAIA,kCAQC;AAUD,oCASC;AAED,wCAoBC;AArDD,0DAA6B;AAI7B,SAAgB,WAAW,CACzB,OAA8B,EAC9B,IAAY;IAEZ,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACzD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IACtC,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AACnD,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9E,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,yDAAyD;AACzD,SAAgB,YAAY,CAAC,OAAgB;IAC3C,MAAM,GAAG,GAAI,OAA+C,CAAC,KAAK,CAAC;IACnE,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IAC/C,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,MAAM,IAAI,IAAI;YAAE,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;IAC1C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,cAAc,CAAC,QAAgB;IAC7C,MAAM,GAAG,GAAG,mBAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IACjD,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,OAAO;YACV,OAAO,0BAA0B,CAAC;QACpC,KAAK,KAAK;YACR,OAAO,gCAAgC,CAAC;QAC1C,KAAK,MAAM;YACT,OAAO,yBAAyB,CAAC;QACnC,KAAK,MAAM;YACT,OAAO,eAAe,CAAC;QACzB,KAAK,OAAO;YACV,OAAO,kBAAkB,CAAC;QAC5B,KAAK,MAAM;YACT,OAAO,WAAW,CAAC;QACrB,KAAK,QAAQ;YACX,OAAO,YAAY,CAAC;QACtB;YACE,OAAO,0BAA0B,CAAC;IACtC,CAAC;AACH,CAAC"}
@@ -0,0 +1,34 @@
1
+ export declare const METRICS_RANGES: readonly [{
2
+ readonly id: "7d";
3
+ readonly label: "Last 7 days";
4
+ }, {
5
+ readonly id: "14d";
6
+ readonly label: "Last 14 days";
7
+ }, {
8
+ readonly id: "30d";
9
+ readonly label: "Last 30 days";
10
+ }, {
11
+ readonly id: "this_month";
12
+ readonly label: "This month";
13
+ }, {
14
+ readonly id: "last_month";
15
+ readonly label: "Last month";
16
+ }];
17
+ export type MetricsRangeId = (typeof METRICS_RANGES)[number]["id"];
18
+ export type ResolvedMetricsRange = {
19
+ id: MetricsRangeId;
20
+ label: string;
21
+ currentKeys: string[];
22
+ /** Same length as `currentKeys`; `null` when the prior month has no matching day. */
23
+ previousKeys: Array<string | null>;
24
+ previousStartMs: number;
25
+ windowLabel: string;
26
+ compareLabel: string;
27
+ };
28
+ export declare function parseMetricsRange(raw: unknown): MetricsRangeId;
29
+ export declare function utcDayKey(ms: number): string;
30
+ export declare function keysFrom(startMs: number, count: number): string[];
31
+ /** Same calendar day in another month, or `null` if that month is shorter. */
32
+ export declare function correspondingDay(isoDay: string, deltaMonths: number): string | null;
33
+ export declare function resolveMetricsRange(range: MetricsRangeId, now?: Date): ResolvedMetricsRange;
34
+ //# sourceMappingURL=metricsRange.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metricsRange.d.ts","sourceRoot":"","sources":["../../../src/runtime/utils/metricsRange.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;EAMjB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;AAInE,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,cAAc,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,qFAAqF;IACrF,YAAY,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACnC,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,CAK9D;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAIjE;AA4BD,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAClB,MAAM,GAAG,IAAI,CAYf;AAMD,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,cAAc,EACrB,GAAG,OAAa,GACf,oBAAoB,CAiDtB"}
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.METRICS_RANGES = void 0;
4
+ exports.parseMetricsRange = parseMetricsRange;
5
+ exports.utcDayKey = utcDayKey;
6
+ exports.keysFrom = keysFrom;
7
+ exports.correspondingDay = correspondingDay;
8
+ exports.resolveMetricsRange = resolveMetricsRange;
9
+ const DAY_MS = 86_400_000;
10
+ exports.METRICS_RANGES = [
11
+ { id: "7d", label: "Last 7 days" },
12
+ { id: "14d", label: "Last 14 days" },
13
+ { id: "30d", label: "Last 30 days" },
14
+ { id: "this_month", label: "This month" },
15
+ { id: "last_month", label: "Last month" },
16
+ ];
17
+ const RANGE_IDS = new Set(exports.METRICS_RANGES.map((item) => item.id));
18
+ function parseMetricsRange(raw) {
19
+ if (typeof raw === "string" && RANGE_IDS.has(raw)) {
20
+ return raw;
21
+ }
22
+ return "14d";
23
+ }
24
+ function utcDayKey(ms) {
25
+ return new Date(ms).toISOString().slice(0, 10);
26
+ }
27
+ function keysFrom(startMs, count) {
28
+ return Array.from({ length: Math.max(0, count) }, (_, index) => utcDayKey(startMs + index * DAY_MS));
29
+ }
30
+ function utcMidnight(ms) {
31
+ const date = new Date(ms);
32
+ return Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());
33
+ }
34
+ function daysInMonth(year, monthIndex) {
35
+ return new Date(Date.UTC(year, monthIndex + 1, 0)).getUTCDate();
36
+ }
37
+ function shortDayLabel(isoDay) {
38
+ return new Date(`${isoDay}T00:00:00Z`).toLocaleDateString("en-US", {
39
+ month: "short",
40
+ day: "numeric",
41
+ timeZone: "UTC",
42
+ });
43
+ }
44
+ function shortRange(keys) {
45
+ const first = keys[0];
46
+ const last = keys[keys.length - 1];
47
+ if (!first || !last)
48
+ return "";
49
+ const a = shortDayLabel(first);
50
+ const b = shortDayLabel(last);
51
+ return a === b ? a : `${a} – ${b}`;
52
+ }
53
+ /** Same calendar day in another month, or `null` if that month is shorter. */
54
+ function correspondingDay(isoDay, deltaMonths) {
55
+ const [yearRaw, monthRaw, dayRaw] = isoDay.split("-");
56
+ const year = Number(yearRaw);
57
+ const month = Number(monthRaw) - 1;
58
+ const day = Number(dayRaw);
59
+ if (!Number.isFinite(year) || !Number.isFinite(month) || !Number.isFinite(day)) {
60
+ return null;
61
+ }
62
+ const probe = new Date(Date.UTC(year, month + deltaMonths, 1));
63
+ const last = daysInMonth(probe.getUTCFullYear(), probe.getUTCMonth());
64
+ if (day > last)
65
+ return null;
66
+ return utcDayKey(Date.UTC(probe.getUTCFullYear(), probe.getUTCMonth(), day));
67
+ }
68
+ function rangeLabel(id) {
69
+ return exports.METRICS_RANGES.find((item) => item.id === id)?.label ?? "Last 14 days";
70
+ }
71
+ function resolveMetricsRange(range, now = new Date()) {
72
+ const label = rangeLabel(range);
73
+ const today = utcMidnight(now.getTime());
74
+ const tomorrow = today + DAY_MS;
75
+ let currentKeys;
76
+ let previousKeys;
77
+ let previousStartMs;
78
+ if (range === "7d" || range === "14d" || range === "30d") {
79
+ const days = range === "7d" ? 7 : range === "30d" ? 30 : 14;
80
+ const currentStart = tomorrow - days * DAY_MS;
81
+ currentKeys = keysFrom(currentStart, days);
82
+ previousStartMs = currentStart - days * DAY_MS;
83
+ previousKeys = keysFrom(previousStartMs, days);
84
+ }
85
+ else if (range === "this_month") {
86
+ const year = now.getUTCFullYear();
87
+ const month = now.getUTCMonth();
88
+ const day = now.getUTCDate();
89
+ const currentStart = Date.UTC(year, month, 1);
90
+ currentKeys = keysFrom(currentStart, day);
91
+ previousKeys = currentKeys.map((key) => correspondingDay(key, -1));
92
+ const firstPrev = previousKeys.find((key) => key != null);
93
+ previousStartMs = firstPrev
94
+ ? Date.parse(`${firstPrev}T00:00:00Z`)
95
+ : currentStart - day * DAY_MS;
96
+ }
97
+ else {
98
+ const year = now.getUTCFullYear();
99
+ const month = now.getUTCMonth();
100
+ const currentStart = Date.UTC(year, month - 1, 1);
101
+ const start = new Date(currentStart);
102
+ const count = daysInMonth(start.getUTCFullYear(), start.getUTCMonth());
103
+ currentKeys = keysFrom(currentStart, count);
104
+ previousKeys = currentKeys.map((key) => correspondingDay(key, -1));
105
+ const firstPrev = previousKeys.find((key) => key != null);
106
+ previousStartMs = firstPrev
107
+ ? Date.parse(`${firstPrev}T00:00:00Z`)
108
+ : Date.UTC(year, month - 2, 1);
109
+ }
110
+ const previousLabelKeys = previousKeys.filter((key) => key != null);
111
+ return {
112
+ id: range,
113
+ label,
114
+ currentKeys,
115
+ previousKeys,
116
+ previousStartMs,
117
+ windowLabel: `${shortRange(currentKeys)} vs ${shortRange(previousLabelKeys)}`,
118
+ compareLabel: "Previous period",
119
+ };
120
+ }
121
+ //# sourceMappingURL=metricsRange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metricsRange.js","sourceRoot":"","sources":["../../../src/runtime/utils/metricsRange.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function sidebarGroup(value: string | undefined, fallback: string): string;
2
+ //# sourceMappingURL=sidebar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../src/runtime/utils/sidebar.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,QAAQ,EAAE,MAAM,GACf,MAAM,CAGR"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sidebarGroup = sidebarGroup;
4
+ function sidebarGroup(value, fallback) {
5
+ const trimmed = value?.trim();
6
+ return trimmed || fallback;
7
+ }
8
+ //# sourceMappingURL=sidebar.js.map