@vertebr/admin 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/dist/api/catalog.d.ts +59 -0
  2. package/dist/api/catalog.d.ts.map +1 -0
  3. package/dist/api/catalog.js +85 -0
  4. package/dist/api/catalog.js.map +1 -0
  5. package/dist/api/configs.d.ts +15 -0
  6. package/dist/api/configs.d.ts.map +1 -0
  7. package/dist/api/configs.js +43 -0
  8. package/dist/api/configs.js.map +1 -0
  9. package/dist/api/emails.d.ts +85 -0
  10. package/dist/api/emails.d.ts.map +1 -0
  11. package/dist/api/emails.js +520 -0
  12. package/dist/api/emails.js.map +1 -0
  13. package/dist/api/gallery.d.ts +28 -0
  14. package/dist/api/gallery.d.ts.map +1 -0
  15. package/dist/api/gallery.js +91 -0
  16. package/dist/api/gallery.js.map +1 -0
  17. package/dist/api/metrics.d.ts +22 -0
  18. package/dist/api/metrics.d.ts.map +1 -0
  19. package/dist/api/metrics.js +38 -0
  20. package/dist/api/metrics.js.map +1 -0
  21. package/dist/api/public.d.ts +22 -0
  22. package/dist/api/public.d.ts.map +1 -0
  23. package/dist/api/public.js +69 -0
  24. package/dist/api/public.js.map +1 -0
  25. package/dist/api/request.d.ts +26 -0
  26. package/dist/api/request.d.ts.map +1 -0
  27. package/dist/api/request.js +38 -0
  28. package/dist/api/request.js.map +1 -0
  29. package/dist/api/resources.d.ts +85 -0
  30. package/dist/api/resources.d.ts.map +1 -0
  31. package/dist/api/resources.js +263 -0
  32. package/dist/api/resources.js.map +1 -0
  33. package/dist/api/routes.d.ts +8 -0
  34. package/dist/api/routes.d.ts.map +1 -0
  35. package/dist/api/routes.js +202 -0
  36. package/dist/api/routes.js.map +1 -0
  37. package/dist/api/spa.d.ts +2 -0
  38. package/dist/api/spa.d.ts.map +1 -0
  39. package/dist/api/spa.js +34 -0
  40. package/dist/api/spa.js.map +1 -0
  41. package/dist/connectors/payments/connector.d.ts +30 -0
  42. package/dist/connectors/payments/connector.d.ts.map +1 -0
  43. package/dist/connectors/payments/connector.js +226 -0
  44. package/dist/connectors/payments/connector.js.map +1 -0
  45. package/dist/connectors/payments/index.d.ts +4 -0
  46. package/dist/connectors/payments/index.d.ts.map +1 -0
  47. package/dist/connectors/payments/index.js +10 -0
  48. package/dist/connectors/payments/index.js.map +1 -0
  49. package/dist/connectors/payments/stripe.d.ts +99 -0
  50. package/dist/connectors/payments/stripe.d.ts.map +1 -0
  51. package/dist/connectors/payments/stripe.js +189 -0
  52. package/dist/connectors/payments/stripe.js.map +1 -0
  53. package/dist/connectors/payments/types.d.ts +67 -0
  54. package/dist/connectors/payments/types.d.ts.map +1 -0
  55. package/dist/connectors/payments/types.js +16 -0
  56. package/dist/connectors/payments/types.js.map +1 -0
  57. package/dist/connectors/stripe.d.ts +19 -0
  58. package/dist/connectors/stripe.d.ts.map +1 -0
  59. package/dist/connectors/stripe.js +26 -0
  60. package/dist/connectors/stripe.js.map +1 -0
  61. package/dist/constants.d.ts +5 -0
  62. package/dist/constants.d.ts.map +1 -0
  63. package/dist/constants.js +8 -0
  64. package/dist/constants.js.map +1 -0
  65. package/dist/createAdmin.d.ts +3 -0
  66. package/dist/createAdmin.d.ts.map +1 -0
  67. package/dist/createAdmin.js +152 -0
  68. package/dist/createAdmin.js.map +1 -0
  69. package/dist/database/connector.d.ts +1 -1
  70. package/dist/database/connector.d.ts.map +1 -1
  71. package/dist/database/connector.js +43 -6
  72. package/dist/database/connector.js.map +1 -1
  73. package/dist/database/types.d.ts +25 -5
  74. package/dist/database/types.d.ts.map +1 -1
  75. package/dist/errors.d.ts +17 -0
  76. package/dist/errors.d.ts.map +1 -0
  77. package/dist/errors.js +36 -0
  78. package/dist/errors.js.map +1 -0
  79. package/dist/index.d.ts +9 -229
  80. package/dist/index.d.ts.map +1 -1
  81. package/dist/index.js +23 -889
  82. package/dist/index.js.map +1 -1
  83. package/dist/mail.d.ts +23 -0
  84. package/dist/mail.d.ts.map +1 -0
  85. package/dist/mail.js +248 -0
  86. package/dist/mail.js.map +1 -0
  87. package/dist/schema.d.ts +8 -0
  88. package/dist/schema.d.ts.map +1 -1
  89. package/dist/services/environment.d.ts +8 -0
  90. package/dist/services/environment.d.ts.map +1 -0
  91. package/dist/services/environment.js +78 -0
  92. package/dist/services/environment.js.map +1 -0
  93. package/dist/services/registry.d.ts +6 -0
  94. package/dist/services/registry.d.ts.map +1 -0
  95. package/dist/services/registry.js +32 -0
  96. package/dist/services/registry.js.map +1 -0
  97. package/dist/services/state.d.ts +25 -0
  98. package/dist/services/state.d.ts.map +1 -0
  99. package/dist/services/state.js +3 -0
  100. package/dist/services/state.js.map +1 -0
  101. package/dist/types/actions.d.ts +15 -0
  102. package/dist/types/actions.d.ts.map +1 -0
  103. package/dist/types/actions.js +3 -0
  104. package/dist/types/actions.js.map +1 -0
  105. package/dist/types/admin.d.ts +83 -0
  106. package/dist/types/admin.d.ts.map +1 -0
  107. package/dist/types/admin.js +3 -0
  108. package/dist/types/admin.js.map +1 -0
  109. package/dist/types/auth.d.ts +67 -0
  110. package/dist/types/auth.d.ts.map +1 -0
  111. package/dist/types/auth.js +3 -0
  112. package/dist/types/auth.js.map +1 -0
  113. package/dist/types/config.d.ts +39 -0
  114. package/dist/types/config.d.ts.map +1 -0
  115. package/dist/types/config.js +3 -0
  116. package/dist/types/config.js.map +1 -0
  117. package/dist/types/index.d.ts +15 -0
  118. package/dist/types/index.d.ts.map +1 -0
  119. package/dist/types/index.js +7 -0
  120. package/dist/types/index.js.map +1 -0
  121. package/dist/types/layout.d.ts +29 -0
  122. package/dist/types/layout.d.ts.map +1 -0
  123. package/dist/types/layout.js +3 -0
  124. package/dist/types/layout.js.map +1 -0
  125. package/dist/types/mail/catalog.d.ts +104 -0
  126. package/dist/types/mail/catalog.d.ts.map +1 -0
  127. package/dist/types/mail/catalog.js +3 -0
  128. package/dist/types/mail/catalog.js.map +1 -0
  129. package/dist/types/mail/definition.d.ts +68 -0
  130. package/dist/types/mail/definition.d.ts.map +1 -0
  131. package/dist/types/mail/definition.js +3 -0
  132. package/dist/types/mail/definition.js.map +1 -0
  133. package/dist/types/mail/index.d.ts +4 -0
  134. package/dist/types/mail/index.d.ts.map +1 -0
  135. package/dist/types/mail/index.js +3 -0
  136. package/dist/types/mail/index.js.map +1 -0
  137. package/dist/types/mail/message.d.ts +45 -0
  138. package/dist/types/mail/message.d.ts.map +1 -0
  139. package/dist/types/mail/message.js +3 -0
  140. package/dist/types/mail/message.js.map +1 -0
  141. package/dist/types/metrics.d.ts +46 -0
  142. package/dist/types/metrics.d.ts.map +1 -0
  143. package/dist/types/metrics.js +3 -0
  144. package/dist/types/metrics.js.map +1 -0
  145. package/dist/types/resource.d.ts +41 -0
  146. package/dist/types/resource.d.ts.map +1 -0
  147. package/dist/types/resource.js +3 -0
  148. package/dist/types/resource.js.map +1 -0
  149. package/dist/utils/auth.d.ts +4 -0
  150. package/dist/utils/auth.d.ts.map +1 -0
  151. package/dist/utils/auth.js +29 -0
  152. package/dist/utils/auth.js.map +1 -0
  153. package/dist/utils/config.d.ts +4 -0
  154. package/dist/utils/config.d.ts.map +1 -0
  155. package/dist/utils/config.js +14 -0
  156. package/dist/utils/config.js.map +1 -0
  157. package/dist/utils/http.d.ts +7 -0
  158. package/dist/utils/http.d.ts.map +1 -0
  159. package/dist/utils/http.js +61 -0
  160. package/dist/utils/http.js.map +1 -0
  161. package/dist/utils/metricsRange.d.ts +34 -0
  162. package/dist/utils/metricsRange.d.ts.map +1 -0
  163. package/dist/utils/metricsRange.js +121 -0
  164. package/dist/utils/metricsRange.js.map +1 -0
  165. package/dist/utils/sidebar.d.ts +2 -0
  166. package/dist/utils/sidebar.d.ts.map +1 -0
  167. package/dist/utils/sidebar.js +8 -0
  168. package/dist/utils/sidebar.js.map +1 -0
  169. package/dist/utils/staticDir.d.ts +2 -0
  170. package/dist/utils/staticDir.d.ts.map +1 -0
  171. package/dist/utils/staticDir.js +16 -0
  172. package/dist/utils/staticDir.js.map +1 -0
  173. package/dist/utils/uploads.d.ts +6 -0
  174. package/dist/utils/uploads.d.ts.map +1 -0
  175. package/dist/utils/uploads.js +66 -0
  176. package/dist/utils/uploads.js.map +1 -0
  177. package/package.json +1 -1
  178. package/static/assets/index-DKyVvFeT.js +332 -0
  179. package/static/assets/index-DUwFg1bw.css +1 -0
  180. package/static/index.html +2 -2
  181. package/static/assets/index-BpfDn_4i.css +0 -1
  182. package/static/assets/index-DAjD2ShU.js +0 -329
@@ -0,0 +1,263 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listResourceHandler = listResourceHandler;
4
+ exports.uploadResourceFileHandler = uploadResourceFileHandler;
5
+ exports.uploadResourceFilesHandler = uploadResourceFilesHandler;
6
+ exports.updateResourceHandler = updateResourceHandler;
7
+ exports.createResourceHandler = createResourceHandler;
8
+ exports.deleteResourceHandler = deleteResourceHandler;
9
+ exports.resourceActionHandler = resourceActionHandler;
10
+ exports.mailPreviewHandler = mailPreviewHandler;
11
+ exports.collectionActionHandler = collectionActionHandler;
12
+ const constants_1 = require("../constants");
13
+ const errors_1 = require("../errors");
14
+ const environment_1 = require("../services/environment");
15
+ const registry_1 = require("../services/registry");
16
+ const uploads_1 = require("../utils/uploads");
17
+ const mail_1 = require("../mail");
18
+ const request_1 = require("./request");
19
+ async function runFieldUpload(resource, field, file, ctx) {
20
+ const def = resource.uploads?.[field];
21
+ if (!def) {
22
+ throw new errors_1.VertebrNotFoundError(`Upload is not configured for field "${field}"`);
23
+ }
24
+ const accept = def.accept?.length ? def.accept : constants_1.DEFAULT_UPLOAD_ACCEPT;
25
+ const maxBytes = def.maxBytes ?? constants_1.DEFAULT_UPLOAD_MAX_BYTES;
26
+ if (file.size > maxBytes) {
27
+ throw new errors_1.VertebrBadRequestError(`File exceeds max size of ${maxBytes} bytes`);
28
+ }
29
+ if (!(0, uploads_1.mimeAllowed)(file.type, accept)) {
30
+ throw new errors_1.VertebrBadRequestError(`File type "${file.type}" is not allowed`);
31
+ }
32
+ const result = await def.upload(file, ctx);
33
+ if (!result?.url || typeof result.url !== "string") {
34
+ throw new errors_1.VertebrBadRequestError("Upload handler did not return a url");
35
+ }
36
+ return { url: result.url, name: result.name ?? file.name };
37
+ }
38
+ async function resolvedPermissions(resource, ctx) {
39
+ if (resource.resolvePermissions) {
40
+ const perms = await resource.resolvePermissions(ctx);
41
+ return {
42
+ create: Boolean(perms.create),
43
+ update: Boolean(perms.update),
44
+ delete: Boolean(perms.delete),
45
+ };
46
+ }
47
+ return {
48
+ create: resource.permissions?.create ?? Boolean(resource.create),
49
+ update: resource.permissions?.update ?? Boolean(resource.update),
50
+ delete: resource.permissions?.delete ?? Boolean(resource.remove),
51
+ };
52
+ }
53
+ function resolvedActions(state, resource) {
54
+ const fromMail = (0, mail_1.mailActionMeta)(state, resource);
55
+ const fromResource = resource.actions
56
+ ? Object.fromEntries(Object.entries(resource.actions).map(([key, action]) => [
57
+ key,
58
+ {
59
+ label: action.label,
60
+ input: (0, mail_1.normalizeActionInput)(action.input),
61
+ },
62
+ ]))
63
+ : {};
64
+ return { ...fromMail, ...fromResource };
65
+ }
66
+ async function loadResourceRow(resource, rowId, ctx) {
67
+ const row = resource.get
68
+ ? await resource.get(rowId, ctx)
69
+ : (await (resource.list?.(ctx) ?? [])).find((item) => String(item.id ?? "") === rowId ||
70
+ String(item.slug ?? "") === rowId ||
71
+ String(item.uid ?? "") === rowId ||
72
+ String(item.email ?? "") === rowId);
73
+ return row;
74
+ }
75
+ async function resolvedCollectionActions(resource, ctx) {
76
+ const raw = resource.collectionActions;
77
+ if (!raw)
78
+ return {};
79
+ const resolved = typeof raw === "function" ? await raw(ctx) : raw;
80
+ return Object.fromEntries(Object.entries(resolved).map(([key, action]) => [
81
+ key,
82
+ { label: action.label, input: (0, mail_1.normalizeActionInput)(action.input) },
83
+ ]));
84
+ }
85
+ async function listResourceHandler(state, request) {
86
+ return (0, environment_1.withEnvContext)(state, request, async (ctx) => {
87
+ const id = (0, request_1.requestParam)(request, "id");
88
+ if (!id) {
89
+ throw new errors_1.VertebrNotFoundError("Missing resource id");
90
+ }
91
+ const resource = (0, registry_1.findResource)(state, id);
92
+ const items = resource.list ? await resource.list(ctx) : [];
93
+ return {
94
+ id: resource.id,
95
+ label: resource.label,
96
+ schema: resource.schema,
97
+ environment: ctx.env,
98
+ permissions: await resolvedPermissions(resource, ctx),
99
+ actions: resolvedActions(state, resource),
100
+ collectionActions: await resolvedCollectionActions(resource, ctx),
101
+ uploads: (0, uploads_1.publicUploads)(resource),
102
+ items,
103
+ };
104
+ });
105
+ }
106
+ async function uploadResourceFileHandler(state, request) {
107
+ return (0, environment_1.withEnvContext)(state, request, async (ctx) => {
108
+ const id = (0, request_1.requestParam)(request, "id");
109
+ const field = (0, request_1.requestParam)(request, "field");
110
+ if (!id || !field) {
111
+ throw new errors_1.VertebrNotFoundError("Missing resource or field");
112
+ }
113
+ const resource = (0, registry_1.findResource)(state, id);
114
+ const file = (0, uploads_1.decodeUploadPayload)((0, request_1.requestPayload)(request));
115
+ const result = await runFieldUpload(resource, field, file, ctx);
116
+ return { ok: true, id, field, environment: ctx.env, ...result };
117
+ });
118
+ }
119
+ async function uploadResourceFilesHandler(state, request) {
120
+ return (0, environment_1.withEnvContext)(state, request, async (ctx) => {
121
+ const id = (0, request_1.requestParam)(request, "id");
122
+ const field = (0, request_1.requestParam)(request, "field");
123
+ if (!id || !field) {
124
+ throw new errors_1.VertebrNotFoundError("Missing resource or field");
125
+ }
126
+ const resource = (0, registry_1.findResource)(state, id);
127
+ const list = (0, request_1.requestFilesPayload)(request);
128
+ if (!list?.length) {
129
+ throw new errors_1.VertebrBadRequestError("Provide files: [] for bulk upload");
130
+ }
131
+ if (list.length > 40) {
132
+ throw new errors_1.VertebrBadRequestError("Bulk upload is limited to 40 files");
133
+ }
134
+ const files = [];
135
+ for (const entry of list) {
136
+ const file = (0, uploads_1.decodeUploadPayload)(entry);
137
+ files.push(await runFieldUpload(resource, field, file, ctx));
138
+ }
139
+ return { ok: true, id, field, environment: ctx.env, files };
140
+ });
141
+ }
142
+ async function updateResourceHandler(state, request) {
143
+ return (0, environment_1.withEnvContext)(state, request, async (ctx) => {
144
+ const id = (0, request_1.requestParam)(request, "id");
145
+ const rowId = (0, request_1.requestParam)(request, "rowId");
146
+ if (!id || !rowId) {
147
+ throw new errors_1.VertebrNotFoundError("Missing resource or row id");
148
+ }
149
+ const resource = (0, registry_1.findResource)(state, id);
150
+ if (!resource.update) {
151
+ throw new errors_1.VertebrNotFoundError(`Resource "${id}" is not updatable`);
152
+ }
153
+ const value = (0, request_1.requestObjectPayload)(request);
154
+ const item = await resource.update(rowId, value, ctx);
155
+ return { ok: true, id, rowId, environment: ctx.env, item };
156
+ });
157
+ }
158
+ async function createResourceHandler(state, request) {
159
+ return (0, environment_1.withEnvContext)(state, request, async (ctx) => {
160
+ const id = (0, request_1.requestParam)(request, "id");
161
+ if (!id) {
162
+ throw new errors_1.VertebrNotFoundError("Missing resource id");
163
+ }
164
+ const resource = (0, registry_1.findResource)(state, id);
165
+ if (!resource.create) {
166
+ throw new errors_1.VertebrNotFoundError(`Resource "${id}" cannot create`);
167
+ }
168
+ const value = (0, request_1.requestObjectPayload)(request);
169
+ const item = await resource.create(value, ctx);
170
+ return { ok: true, id, environment: ctx.env, item };
171
+ });
172
+ }
173
+ async function deleteResourceHandler(state, request) {
174
+ return (0, environment_1.withEnvContext)(state, request, async (ctx) => {
175
+ const id = (0, request_1.requestParam)(request, "id");
176
+ const rowId = (0, request_1.requestParam)(request, "rowId");
177
+ if (!id || !rowId) {
178
+ throw new errors_1.VertebrNotFoundError("Missing resource or row id");
179
+ }
180
+ const resource = (0, registry_1.findResource)(state, id);
181
+ if (!resource.remove) {
182
+ throw new errors_1.VertebrNotFoundError(`Resource "${id}" cannot delete`);
183
+ }
184
+ await resource.remove(rowId, ctx);
185
+ return { ok: true, id, rowId, environment: ctx.env };
186
+ });
187
+ }
188
+ async function resourceActionHandler(state, request) {
189
+ return (0, environment_1.withEnvContext)(state, request, async (ctx) => {
190
+ const id = (0, request_1.requestParam)(request, "id");
191
+ const rowId = (0, request_1.requestParam)(request, "rowId");
192
+ const actionId = (0, request_1.requestParam)(request, "actionId");
193
+ if (!id || !rowId || !actionId) {
194
+ throw new errors_1.VertebrNotFoundError("Missing resource, row, or action id");
195
+ }
196
+ const resource = (0, registry_1.findResource)(state, id);
197
+ const action = resource.actions?.[actionId] ??
198
+ (0, mail_1.mailResourceAction)(state, resource, actionId);
199
+ if (!action) {
200
+ throw new errors_1.VertebrNotFoundError(`Action "${actionId}" not found`);
201
+ }
202
+ const row = await loadResourceRow(resource, rowId, ctx);
203
+ if (!row) {
204
+ throw new errors_1.VertebrNotFoundError(`Row "${rowId}" not found`);
205
+ }
206
+ const input = (0, request_1.requestOptionalObjectPayload)(request);
207
+ const result = await action.run(row, input, ctx);
208
+ return { ok: true, id, rowId, actionId, environment: ctx.env, result };
209
+ });
210
+ }
211
+ async function mailPreviewHandler(state, request) {
212
+ return (0, environment_1.withEnvContext)(state, request, async (ctx) => {
213
+ const id = (0, request_1.requestParam)(request, "id");
214
+ const rowId = (0, request_1.requestParam)(request, "rowId");
215
+ const templateId = (0, request_1.requestParam)(request, "templateId");
216
+ if (!id || !rowId || !templateId) {
217
+ throw new errors_1.VertebrNotFoundError("Missing resource, row, or template");
218
+ }
219
+ const resource = (0, registry_1.findResource)(state, id);
220
+ const binding = (0, mail_1.normalizeMailConfig)(resource.mail);
221
+ const mail = state.mailDef;
222
+ if (!binding || !mail || !binding.templates.includes(templateId)) {
223
+ throw new errors_1.VertebrNotFoundError(`Mail template "${templateId}" not found`);
224
+ }
225
+ const row = await loadResourceRow(resource, rowId, ctx);
226
+ if (!row) {
227
+ throw new errors_1.VertebrNotFoundError(`Row "${rowId}" not found`);
228
+ }
229
+ const input = (0, request_1.requestOptionalObjectPayload)(request);
230
+ const message = await (0, mail_1.composeMailMessage)(mail, binding, templateId, row, input, ctx);
231
+ return {
232
+ ok: true,
233
+ id,
234
+ rowId,
235
+ templateId,
236
+ environment: ctx.env,
237
+ ...(0, mail_1.publicMailPreview)(message),
238
+ };
239
+ });
240
+ }
241
+ async function collectionActionHandler(state, request) {
242
+ return (0, environment_1.withEnvContext)(state, request, async (ctx) => {
243
+ const id = (0, request_1.requestParam)(request, "id");
244
+ const actionId = (0, request_1.requestParam)(request, "actionId");
245
+ if (!id || !actionId) {
246
+ throw new errors_1.VertebrNotFoundError("Missing resource or action id");
247
+ }
248
+ const resource = (0, registry_1.findResource)(state, id);
249
+ const raw = resource.collectionActions;
250
+ if (!raw) {
251
+ throw new errors_1.VertebrNotFoundError(`Action "${actionId}" not found`);
252
+ }
253
+ const actions = typeof raw === "function" ? await raw(ctx) : raw;
254
+ const action = actions[actionId];
255
+ if (!action) {
256
+ throw new errors_1.VertebrNotFoundError(`Action "${actionId}" not found`);
257
+ }
258
+ const input = (0, request_1.requestOptionalObjectPayload)(request);
259
+ const result = await action.run(input, ctx);
260
+ return { ok: true, id, actionId, environment: ctx.env, result };
261
+ });
262
+ }
263
+ //# sourceMappingURL=resources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../src/api/resources.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { AdminState } from "../services/state";
2
+ import type { AdminRoute, HapiCompatibleRoute } from "../types";
3
+ export declare function buildApiRoutes(state: AdminState): AdminRoute[];
4
+ export declare function wrapHapiRoutes(apiRoutes: AdminRoute[], options: {
5
+ basePath: string;
6
+ staticDir?: string;
7
+ }): HapiCompatibleRoute[];
8
+ //# sourceMappingURL=routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/api/routes.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAsChE,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,EAAE,CAgJ9D;AAED,wBAAgB,cAAc,CAC5B,SAAS,EAAE,UAAU,EAAE,EACvB,OAAO,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAChD,mBAAmB,EAAE,CA6CvB"}
@@ -0,0 +1,202 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildApiRoutes = buildApiRoutes;
4
+ exports.wrapHapiRoutes = wrapHapiRoutes;
5
+ const errors_1 = require("../errors");
6
+ const catalog_1 = require("./catalog");
7
+ const configs_1 = require("./configs");
8
+ const gallery_1 = require("./gallery");
9
+ const emails_1 = require("./emails");
10
+ const metrics_1 = require("./metrics");
11
+ const public_1 = require("./public");
12
+ const resources_1 = require("./resources");
13
+ const spa_1 = require("./spa");
14
+ function buildApiRoutes(state) {
15
+ const { apiBase } = state;
16
+ return [
17
+ {
18
+ method: "GET",
19
+ path: `${apiBase}/bootstrap`,
20
+ handler: () => (0, catalog_1.bootstrapHandler)(state),
21
+ },
22
+ {
23
+ method: "GET",
24
+ path: `${apiBase}/public/controls`,
25
+ handler: (request) => (0, public_1.publicControlsHandler)(state, request),
26
+ },
27
+ {
28
+ method: "GET",
29
+ path: `${apiBase}/public/configs/{id}`,
30
+ handler: (request) => (0, public_1.publicConfigHandler)(state, request),
31
+ },
32
+ {
33
+ method: "GET",
34
+ path: `${apiBase}/public/resources/{id}`,
35
+ handler: (request) => (0, public_1.publicResourceHandler)(state, request),
36
+ },
37
+ {
38
+ method: "GET",
39
+ path: `${apiBase}/metrics`,
40
+ handler: (request) => (0, metrics_1.metricsHandler)(state, request),
41
+ },
42
+ {
43
+ method: "GET",
44
+ path: `${apiBase}/gallery`,
45
+ handler: (request) => (0, gallery_1.listGalleryHandler)(state, request),
46
+ },
47
+ {
48
+ method: "GET",
49
+ path: `${apiBase}/emails`,
50
+ handler: (request) => (0, emails_1.emailsBoardHandler)(state, request),
51
+ },
52
+ {
53
+ method: "POST",
54
+ path: `${apiBase}/emails/preview`,
55
+ handler: (request) => (0, emails_1.emailsPreviewHandler)(state, request),
56
+ },
57
+ {
58
+ method: "POST",
59
+ path: `${apiBase}/emails/send`,
60
+ handler: (request) => (0, emails_1.emailsSendHandler)(state, request),
61
+ },
62
+ {
63
+ method: "POST",
64
+ path: `${apiBase}/emails/schedule`,
65
+ handler: (request) => (0, emails_1.emailsScheduleHandler)(state, request),
66
+ },
67
+ {
68
+ method: "DELETE",
69
+ path: `${apiBase}/emails/campaigns/{id}`,
70
+ handler: (request) => (0, emails_1.emailsCancelHandler)(state, request),
71
+ },
72
+ {
73
+ method: "POST",
74
+ path: `${apiBase}/emails/library`,
75
+ handler: (request) => (0, emails_1.emailsLibrarySaveHandler)(state, request),
76
+ },
77
+ {
78
+ method: "DELETE",
79
+ path: `${apiBase}/emails/library/{id}`,
80
+ handler: (request) => (0, emails_1.emailsLibraryDeleteHandler)(state, request),
81
+ },
82
+ {
83
+ method: "POST",
84
+ path: `${apiBase}/gallery/upload`,
85
+ handler: (request) => (0, gallery_1.uploadGalleryFileHandler)(state, request),
86
+ },
87
+ {
88
+ method: "POST",
89
+ path: `${apiBase}/gallery/upload/bulk`,
90
+ handler: (request) => (0, gallery_1.uploadGalleryFilesHandler)(state, request),
91
+ },
92
+ {
93
+ method: "DELETE",
94
+ path: `${apiBase}/gallery/{itemId}`,
95
+ handler: (request) => (0, gallery_1.deleteGalleryItemHandler)(state, request),
96
+ },
97
+ {
98
+ method: "GET",
99
+ path: apiBase,
100
+ handler: (request) => (0, catalog_1.catalogHandler)(state, request),
101
+ },
102
+ {
103
+ method: "GET",
104
+ path: `${apiBase}/resources/{id}`,
105
+ handler: (request) => (0, resources_1.listResourceHandler)(state, request),
106
+ },
107
+ {
108
+ method: "POST",
109
+ path: `${apiBase}/resources/{id}`,
110
+ handler: (request) => (0, resources_1.createResourceHandler)(state, request),
111
+ },
112
+ {
113
+ method: "PUT",
114
+ path: `${apiBase}/resources/{id}/{rowId}`,
115
+ handler: (request) => (0, resources_1.updateResourceHandler)(state, request),
116
+ },
117
+ {
118
+ method: "DELETE",
119
+ path: `${apiBase}/resources/{id}/{rowId}`,
120
+ handler: (request) => (0, resources_1.deleteResourceHandler)(state, request),
121
+ },
122
+ {
123
+ method: "POST",
124
+ path: `${apiBase}/resources/{id}/{rowId}/actions/{actionId}`,
125
+ handler: (request) => (0, resources_1.resourceActionHandler)(state, request),
126
+ },
127
+ {
128
+ method: "POST",
129
+ path: `${apiBase}/resources/{id}/{rowId}/mail/{templateId}/preview`,
130
+ handler: (request) => (0, resources_1.mailPreviewHandler)(state, request),
131
+ },
132
+ {
133
+ method: "POST",
134
+ path: `${apiBase}/resources/{id}/collection-actions/{actionId}`,
135
+ handler: (request) => (0, resources_1.collectionActionHandler)(state, request),
136
+ },
137
+ {
138
+ method: "POST",
139
+ path: `${apiBase}/resources/{id}/uploads/{field}`,
140
+ handler: (request) => (0, resources_1.uploadResourceFileHandler)(state, request),
141
+ },
142
+ {
143
+ method: "POST",
144
+ path: `${apiBase}/resources/{id}/uploads/{field}/bulk`,
145
+ handler: (request) => (0, resources_1.uploadResourceFilesHandler)(state, request),
146
+ },
147
+ {
148
+ method: "GET",
149
+ path: `${apiBase}/configs/{id}`,
150
+ handler: (request) => (0, configs_1.getConfigHandler)(state, request),
151
+ },
152
+ {
153
+ method: "PUT",
154
+ path: `${apiBase}/configs/{id}`,
155
+ handler: (request) => (0, configs_1.setConfigHandler)(state, request),
156
+ },
157
+ ];
158
+ }
159
+ function wrapHapiRoutes(apiRoutes, options) {
160
+ const hapiApiRoutes = apiRoutes.map((route) => ({
161
+ method: route.method,
162
+ path: route.path,
163
+ options: { auth: false },
164
+ handler: async (request, h) => {
165
+ const toolkit = h;
166
+ try {
167
+ return await route.handler(request);
168
+ }
169
+ catch (error) {
170
+ if (error instanceof errors_1.VertebrAuthError ||
171
+ error instanceof errors_1.VertebrNotFoundError ||
172
+ error instanceof errors_1.VertebrEnvError ||
173
+ error instanceof errors_1.VertebrBadRequestError) {
174
+ return toolkit
175
+ .response({ ok: false, error: error.message })
176
+ .code(error.statusCode);
177
+ }
178
+ throw error;
179
+ }
180
+ },
181
+ }));
182
+ if (!options.staticDir) {
183
+ return hapiApiRoutes;
184
+ }
185
+ const spaHandler = (0, spa_1.createSpaHandler)(options.basePath, options.staticDir);
186
+ return [
187
+ ...hapiApiRoutes,
188
+ {
189
+ method: "GET",
190
+ path: options.basePath,
191
+ options: { auth: false },
192
+ handler: spaHandler,
193
+ },
194
+ {
195
+ method: "GET",
196
+ path: `${options.basePath}/{path*}`,
197
+ options: { auth: false },
198
+ handler: spaHandler,
199
+ },
200
+ ];
201
+ }
202
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/api/routes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function createSpaHandler(basePath: string, staticDir: string): (request: unknown, h: unknown) => Promise<unknown>;
2
+ //# sourceMappingURL=spa.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spa.d.ts","sourceRoot":"","sources":["../../src/api/spa.ts"],"names":[],"mappings":"AAKA,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,IACpD,SAAS,OAAO,EAAE,GAAG,OAAO,sBA4B3C"}
@@ -0,0 +1,34 @@
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.createSpaHandler = createSpaHandler;
7
+ const node_fs_1 = __importDefault(require("node:fs"));
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const http_1 = require("../utils/http");
10
+ const request_1 = require("./request");
11
+ function createSpaHandler(basePath, staticDir) {
12
+ return async (request, h) => {
13
+ const toolkit = h;
14
+ const req = (0, request_1.asRequest)(request);
15
+ const reqPath = req.path ?? req.url?.pathname ?? "";
16
+ const relative = reqPath.slice(basePath.length).replace(/^\//, "");
17
+ if (relative === "api" || relative.startsWith("api/")) {
18
+ return toolkit.response({ ok: false, error: "Not found" }).code(404);
19
+ }
20
+ const safeRelative = relative.replace(/\.\./g, "");
21
+ const candidate = node_path_1.default.join(staticDir, safeRelative === "" ? "index.html" : safeRelative);
22
+ const resolved = node_path_1.default.resolve(candidate);
23
+ if (!resolved.startsWith(node_path_1.default.resolve(staticDir))) {
24
+ return toolkit.response({ ok: false, error: "Forbidden" }).code(403);
25
+ }
26
+ let filePath = resolved;
27
+ if (!node_fs_1.default.existsSync(filePath) || node_fs_1.default.statSync(filePath).isDirectory()) {
28
+ filePath = node_path_1.default.join(staticDir, "index.html");
29
+ }
30
+ const body = node_fs_1.default.readFileSync(filePath);
31
+ return toolkit.response(body).type((0, http_1.contentTypeFor)(filePath)).code(200);
32
+ };
33
+ }
34
+ //# sourceMappingURL=spa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spa.js","sourceRoot":"","sources":["../../src/api/spa.ts"],"names":[],"mappings":";;;;;AAKA,4CA6BC;AAlCD,sDAAyB;AACzB,0DAA6B;AAC7B,wCAA+C;AAC/C,uCAAwD;AAExD,SAAgB,gBAAgB,CAAC,QAAgB,EAAE,SAAiB;IAClE,OAAO,KAAK,EAAE,OAAgB,EAAE,CAAU,EAAE,EAAE;QAC5C,MAAM,OAAO,GAAG,CAAgB,CAAC;QACjC,MAAM,GAAG,GAAG,IAAA,mBAAS,EAAC,OAAO,CAAC,CAAC;QAC/B,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,EAAE,QAAQ,IAAI,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAEnE,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACtD,OAAO,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,mBAAI,CAAC,IAAI,CACzB,SAAS,EACT,YAAY,KAAK,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAClD,CAAC;QACF,MAAM,QAAQ,GAAG,mBAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,mBAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YAClD,OAAO,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvE,CAAC;QAED,IAAI,QAAQ,GAAG,QAAQ,CAAC;QACxB,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,iBAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YACpE,QAAQ,GAAG,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,IAAI,GAAG,iBAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACvC,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAA,qBAAc,EAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzE,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { Connector } from "../../types";
2
+ import type { PaymentsProvider } from "./types";
3
+ export type PaymentsPanel = "sessions" | "discounts" | "webhookHealth" | "refunds";
4
+ export type PaymentsConnectorOptions = {
5
+ id?: string;
6
+ provider: PaymentsProvider;
7
+ /**
8
+ * Which admin surfaces to register.
9
+ * `refunds` only adds a row action on sessions (requires `provider.refund`).
10
+ * @default `["sessions"]`
11
+ */
12
+ panels?: PaymentsPanel[];
13
+ /** Sidebar heading. Defaults to `"Payments"`. */
14
+ group?: string;
15
+ /** Max sessions to list. @default `50` */
16
+ sessionLimit?: number;
17
+ };
18
+ /**
19
+ * Provider-agnostic payments admin surface.
20
+ *
21
+ * @example
22
+ * const stripe = stripePaymentsProvider({ client: getStripe() });
23
+ * vertebrAdmin.use(paymentsConnector({
24
+ * provider: stripe,
25
+ * panels: ["sessions", "discounts", "webhookHealth", "refunds"],
26
+ * }));
27
+ * // mail.discounts: (ctx) => toMailDiscountOptions(await stripe.listDiscounts?.(ctx) ?? [])
28
+ */
29
+ export declare function paymentsConnector(options: PaymentsConnectorOptions): Connector;
30
+ //# sourceMappingURL=connector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../../../src/connectors/payments/connector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAsB,MAAM,aAAa,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,MAAM,MAAM,aAAa,GACrB,UAAU,GACV,WAAW,GACX,eAAe,GACf,SAAS,CAAC;AAEd,MAAM,MAAM,wBAAwB,GAAG;IACrC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,gBAAgB,CAAC;IAC3B;;;;OAIG;IACH,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAsOF;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,wBAAwB,GAChC,SAAS,CA2BX"}