@mano8/astro-media-m8 0.1.0-alpha.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 (188) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +203 -0
  3. package/dist/src/integration.d.ts +57 -0
  4. package/dist/src/integration.d.ts.map +1 -0
  5. package/dist/src/integration.js +87 -0
  6. package/dist/src/integration.js.map +1 -0
  7. package/dist/src/lib/csp.d.ts +27 -0
  8. package/dist/src/lib/csp.d.ts.map +1 -0
  9. package/dist/src/lib/csp.js +54 -0
  10. package/dist/src/lib/csp.js.map +1 -0
  11. package/dist/src/middleware.d.ts +4 -0
  12. package/dist/src/middleware.d.ts.map +1 -0
  13. package/dist/src/middleware.js +24 -0
  14. package/dist/src/middleware.js.map +1 -0
  15. package/dist/src/runtime/api/admin.d.ts +22 -0
  16. package/dist/src/runtime/api/admin.d.ts.map +1 -0
  17. package/dist/src/runtime/api/admin.js +115 -0
  18. package/dist/src/runtime/api/admin.js.map +1 -0
  19. package/dist/src/runtime/api/categories.d.ts +12 -0
  20. package/dist/src/runtime/api/categories.d.ts.map +1 -0
  21. package/dist/src/runtime/api/categories.js +56 -0
  22. package/dist/src/runtime/api/categories.js.map +1 -0
  23. package/dist/src/runtime/api/dashboard.d.ts +5 -0
  24. package/dist/src/runtime/api/dashboard.d.ts.map +1 -0
  25. package/dist/src/runtime/api/dashboard.js +22 -0
  26. package/dist/src/runtime/api/dashboard.js.map +1 -0
  27. package/dist/src/runtime/api/index.d.ts +72 -0
  28. package/dist/src/runtime/api/index.d.ts.map +1 -0
  29. package/dist/src/runtime/api/index.js +74 -0
  30. package/dist/src/runtime/api/index.js.map +1 -0
  31. package/dist/src/runtime/api/internal.server.d.ts +19 -0
  32. package/dist/src/runtime/api/internal.server.d.ts.map +1 -0
  33. package/dist/src/runtime/api/internal.server.js +64 -0
  34. package/dist/src/runtime/api/internal.server.js.map +1 -0
  35. package/dist/src/runtime/api/objects.d.ts +7 -0
  36. package/dist/src/runtime/api/objects.d.ts.map +1 -0
  37. package/dist/src/runtime/api/objects.js +71 -0
  38. package/dist/src/runtime/api/objects.js.map +1 -0
  39. package/dist/src/runtime/api/presets.d.ts +6 -0
  40. package/dist/src/runtime/api/presets.d.ts.map +1 -0
  41. package/dist/src/runtime/api/presets.js +31 -0
  42. package/dist/src/runtime/api/presets.js.map +1 -0
  43. package/dist/src/runtime/api/shares.d.ts +10 -0
  44. package/dist/src/runtime/api/shares.d.ts.map +1 -0
  45. package/dist/src/runtime/api/shares.js +38 -0
  46. package/dist/src/runtime/api/shares.js.map +1 -0
  47. package/dist/src/runtime/api/uploads.d.ts +5 -0
  48. package/dist/src/runtime/api/uploads.d.ts.map +1 -0
  49. package/dist/src/runtime/api/uploads.js +28 -0
  50. package/dist/src/runtime/api/uploads.js.map +1 -0
  51. package/dist/src/runtime/api/variants.d.ts +18 -0
  52. package/dist/src/runtime/api/variants.d.ts.map +1 -0
  53. package/dist/src/runtime/api/variants.js +61 -0
  54. package/dist/src/runtime/api/variants.js.map +1 -0
  55. package/dist/src/runtime/authAdapter.d.ts +48 -0
  56. package/dist/src/runtime/authAdapter.d.ts.map +1 -0
  57. package/dist/src/runtime/authAdapter.js +62 -0
  58. package/dist/src/runtime/authAdapter.js.map +1 -0
  59. package/dist/src/runtime/client.d.ts +24 -0
  60. package/dist/src/runtime/client.d.ts.map +1 -0
  61. package/dist/src/runtime/client.js +87 -0
  62. package/dist/src/runtime/client.js.map +1 -0
  63. package/dist/src/runtime/compatibility.d.ts +32 -0
  64. package/dist/src/runtime/compatibility.d.ts.map +1 -0
  65. package/dist/src/runtime/compatibility.js +101 -0
  66. package/dist/src/runtime/compatibility.js.map +1 -0
  67. package/dist/src/runtime/config.d.ts +27 -0
  68. package/dist/src/runtime/config.d.ts.map +1 -0
  69. package/dist/src/runtime/config.js +32 -0
  70. package/dist/src/runtime/config.js.map +1 -0
  71. package/dist/src/runtime/errors.d.ts +23 -0
  72. package/dist/src/runtime/errors.d.ts.map +1 -0
  73. package/dist/src/runtime/errors.js +50 -0
  74. package/dist/src/runtime/errors.js.map +1 -0
  75. package/dist/src/runtime/hooks/index.d.ts +8 -0
  76. package/dist/src/runtime/hooks/index.d.ts.map +1 -0
  77. package/dist/src/runtime/hooks/index.js +8 -0
  78. package/dist/src/runtime/hooks/index.js.map +1 -0
  79. package/dist/src/runtime/hooks/useDownloadUrl.d.ts +12 -0
  80. package/dist/src/runtime/hooks/useDownloadUrl.d.ts.map +1 -0
  81. package/dist/src/runtime/hooks/useDownloadUrl.js +40 -0
  82. package/dist/src/runtime/hooks/useDownloadUrl.js.map +1 -0
  83. package/dist/src/runtime/hooks/useMediaAdmin.d.ts +30 -0
  84. package/dist/src/runtime/hooks/useMediaAdmin.d.ts.map +1 -0
  85. package/dist/src/runtime/hooks/useMediaAdmin.js +145 -0
  86. package/dist/src/runtime/hooks/useMediaAdmin.js.map +1 -0
  87. package/dist/src/runtime/hooks/useMediaObject.d.ts +17 -0
  88. package/dist/src/runtime/hooks/useMediaObject.d.ts.map +1 -0
  89. package/dist/src/runtime/hooks/useMediaObject.js +62 -0
  90. package/dist/src/runtime/hooks/useMediaObject.js.map +1 -0
  91. package/dist/src/runtime/hooks/useMediaObjects.d.ts +12 -0
  92. package/dist/src/runtime/hooks/useMediaObjects.d.ts.map +1 -0
  93. package/dist/src/runtime/hooks/useMediaObjects.js +76 -0
  94. package/dist/src/runtime/hooks/useMediaObjects.js.map +1 -0
  95. package/dist/src/runtime/hooks/useMediaPresets.d.ts +24 -0
  96. package/dist/src/runtime/hooks/useMediaPresets.d.ts.map +1 -0
  97. package/dist/src/runtime/hooks/useMediaPresets.js +55 -0
  98. package/dist/src/runtime/hooks/useMediaPresets.js.map +1 -0
  99. package/dist/src/runtime/hooks/useMediaUpload.d.ts +11 -0
  100. package/dist/src/runtime/hooks/useMediaUpload.d.ts.map +1 -0
  101. package/dist/src/runtime/hooks/useMediaUpload.js +34 -0
  102. package/dist/src/runtime/hooks/useMediaUpload.js.map +1 -0
  103. package/dist/src/runtime/hooks/useMediaVariants.d.ts +18 -0
  104. package/dist/src/runtime/hooks/useMediaVariants.d.ts.map +1 -0
  105. package/dist/src/runtime/hooks/useMediaVariants.js +78 -0
  106. package/dist/src/runtime/hooks/useMediaVariants.js.map +1 -0
  107. package/dist/src/runtime/listParams.d.ts +27 -0
  108. package/dist/src/runtime/listParams.d.ts.map +1 -0
  109. package/dist/src/runtime/listParams.js +66 -0
  110. package/dist/src/runtime/listParams.js.map +1 -0
  111. package/dist/src/runtime/queryKeys.d.ts +18 -0
  112. package/dist/src/runtime/queryKeys.d.ts.map +1 -0
  113. package/dist/src/runtime/queryKeys.js +23 -0
  114. package/dist/src/runtime/queryKeys.js.map +1 -0
  115. package/dist/src/runtime/react/AdminMediaPanel.d.ts +2 -0
  116. package/dist/src/runtime/react/AdminMediaPanel.d.ts.map +1 -0
  117. package/dist/src/runtime/react/AdminMediaPanel.js +14 -0
  118. package/dist/src/runtime/react/AdminMediaPanel.js.map +1 -0
  119. package/dist/src/runtime/react/MediaLibrary.d.ts +6 -0
  120. package/dist/src/runtime/react/MediaLibrary.d.ts.map +1 -0
  121. package/dist/src/runtime/react/MediaLibrary.js +138 -0
  122. package/dist/src/runtime/react/MediaLibrary.js.map +1 -0
  123. package/dist/src/runtime/react/MediaProvider.d.ts +18 -0
  124. package/dist/src/runtime/react/MediaProvider.d.ts.map +1 -0
  125. package/dist/src/runtime/react/MediaProvider.js +79 -0
  126. package/dist/src/runtime/react/MediaProvider.js.map +1 -0
  127. package/dist/src/runtime/react/MediaQueryProvider.d.ts +8 -0
  128. package/dist/src/runtime/react/MediaQueryProvider.d.ts.map +1 -0
  129. package/dist/src/runtime/react/MediaQueryProvider.js +11 -0
  130. package/dist/src/runtime/react/MediaQueryProvider.js.map +1 -0
  131. package/dist/src/runtime/react/MediaUploadDropzone.d.ts +8 -0
  132. package/dist/src/runtime/react/MediaUploadDropzone.d.ts.map +1 -0
  133. package/dist/src/runtime/react/MediaUploadDropzone.js +34 -0
  134. package/dist/src/runtime/react/MediaUploadDropzone.js.map +1 -0
  135. package/dist/src/runtime/react/ObjectDetail.d.ts +5 -0
  136. package/dist/src/runtime/react/ObjectDetail.d.ts.map +1 -0
  137. package/dist/src/runtime/react/ObjectDetail.js +34 -0
  138. package/dist/src/runtime/react/ObjectDetail.js.map +1 -0
  139. package/dist/src/runtime/react/PresetEditor.d.ts +3 -0
  140. package/dist/src/runtime/react/PresetEditor.d.ts.map +1 -0
  141. package/dist/src/runtime/react/PresetEditor.js +36 -0
  142. package/dist/src/runtime/react/PresetEditor.js.map +1 -0
  143. package/dist/src/runtime/react/RequireSuperuser.d.ts +7 -0
  144. package/dist/src/runtime/react/RequireSuperuser.d.ts.map +1 -0
  145. package/dist/src/runtime/react/RequireSuperuser.js +10 -0
  146. package/dist/src/runtime/react/RequireSuperuser.js.map +1 -0
  147. package/dist/src/runtime/react/VariantPicker.d.ts +5 -0
  148. package/dist/src/runtime/react/VariantPicker.d.ts.map +1 -0
  149. package/dist/src/runtime/react/VariantPicker.js +28 -0
  150. package/dist/src/runtime/react/VariantPicker.js.map +1 -0
  151. package/dist/src/runtime/react/default-ui/index.d.ts +25 -0
  152. package/dist/src/runtime/react/default-ui/index.d.ts.map +1 -0
  153. package/dist/src/runtime/react/default-ui/index.js +33 -0
  154. package/dist/src/runtime/react/default-ui/index.js.map +1 -0
  155. package/dist/src/runtime/react/index.d.ts +10 -0
  156. package/dist/src/runtime/react/index.d.ts.map +1 -0
  157. package/dist/src/runtime/react/index.js +10 -0
  158. package/dist/src/runtime/react/index.js.map +1 -0
  159. package/dist/src/runtime/routes.d.ts +19 -0
  160. package/dist/src/runtime/routes.d.ts.map +1 -0
  161. package/dist/src/runtime/routes.js +35 -0
  162. package/dist/src/runtime/routes.js.map +1 -0
  163. package/dist/src/runtime/schemas.d.ts +812 -0
  164. package/dist/src/runtime/schemas.d.ts.map +1 -0
  165. package/dist/src/runtime/schemas.js +427 -0
  166. package/dist/src/runtime/schemas.js.map +1 -0
  167. package/dist/src/runtime/upload/index.d.ts +2 -0
  168. package/dist/src/runtime/upload/index.d.ts.map +1 -0
  169. package/dist/src/runtime/upload/index.js +2 -0
  170. package/dist/src/runtime/upload/index.js.map +1 -0
  171. package/dist/src/runtime/upload/uploadController.d.ts +71 -0
  172. package/dist/src/runtime/upload/uploadController.d.ts.map +1 -0
  173. package/dist/src/runtime/upload/uploadController.js +217 -0
  174. package/dist/src/runtime/upload/uploadController.js.map +1 -0
  175. package/package.json +97 -0
  176. package/registry/r/admin-media-dashboard.json +23 -0
  177. package/registry/r/data-table.json +23 -0
  178. package/registry/r/media-dashboard-overview.json +26 -0
  179. package/registry/r/media-maintenance-panel.json +23 -0
  180. package/registry/r/media-storage-chart.json +21 -0
  181. package/registry/r/registry.json +37 -0
  182. package/registry.json +92 -0
  183. package/src/routes/admin/media.astro +12 -0
  184. package/src/routes/library.astro +12 -0
  185. package/src/routes/object/[id].astro +14 -0
  186. package/src/routes/presets.astro +12 -0
  187. package/src/routes/upload.astro +12 -0
  188. package/src/scaffold/styles/media.css +208 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/middleware.ts"],"names":[],"mappings":"AAAA,KAAK,cAAc,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;AAczD,wBAAgB,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAW/F"}
@@ -0,0 +1,24 @@
1
+ function withCsp(response, policy) {
2
+ const headers = new Headers(response.headers);
3
+ if (!headers.has("Content-Security-Policy")) {
4
+ headers.set("Content-Security-Policy", policy);
5
+ }
6
+ return new Response(response.body, {
7
+ status: response.status,
8
+ statusText: response.statusText,
9
+ headers,
10
+ });
11
+ }
12
+ export function onRequest(_context, next) {
13
+ // Policy is injected by vite.define in the integration setup; read as a runtime env var in tests.
14
+ const policy = import.meta.env.PUBLIC_FA_MEDIA_CSP_POLICY;
15
+ if (!policy) {
16
+ return next();
17
+ }
18
+ const result = next();
19
+ if (result instanceof Promise) {
20
+ return result.then(r => withCsp(r, policy));
21
+ }
22
+ return withCsp(result, policy);
23
+ }
24
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/middleware.ts"],"names":[],"mappings":"AAEA,SAAS,OAAO,CAAC,QAAkB,EAAE,MAAc;IACjD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,EAAE,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE;QACjC,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,OAAO;KACR,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,QAAiB,EAAE,IAAoB;IAC/D,kGAAkG;IAClG,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC;IAC1D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,EAAE,CAAC;IACtB,IAAI,MAAM,YAAY,OAAO,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { type HardPurgeResponse, type OrphanReport, type PurgeStaleResponse, type QuotaUpdateRequest, type StaleUploadsResponse, type StorageStatsResponse, type StorageUsagePublic, type SubscriptionCreateRequest, type SubscriptionListResponse, type SubscriptionPublic } from "../schemas.js";
2
+ /**
3
+ * Superuser-only operations. Every wrapper sets `admin: true` so the client
4
+ * can short-circuit with a `ForbiddenError` before the request when the auth
5
+ * adapter already knows the user is not a superuser.
6
+ */
7
+ export declare function getStorageStats(): Promise<StorageStatsResponse>;
8
+ export declare function getStaleUploads(): Promise<StaleUploadsResponse>;
9
+ export declare function purgeStaleUploads(): Promise<PurgeStaleResponse>;
10
+ export declare function getQuota(ownerUserId: string, tenantId?: string): Promise<StorageUsagePublic>;
11
+ export declare function setQuota(ownerUserId: string, body: QuotaUpdateRequest, tenantId?: string): Promise<StorageUsagePublic>;
12
+ export declare function getOrphans(): Promise<OrphanReport>;
13
+ /**
14
+ * Reconcile orphans. Defaults to a dry-run; pass `confirm: true` only behind an
15
+ * explicit operator confirmation — it deletes storage-orphan bytes.
16
+ */
17
+ export declare function repairOrphans(confirm?: boolean): Promise<OrphanReport>;
18
+ export declare function purgeExpired(): Promise<HardPurgeResponse>;
19
+ export declare function createSubscription(body: SubscriptionCreateRequest): Promise<SubscriptionPublic>;
20
+ export declare function listSubscriptions(): Promise<SubscriptionListResponse>;
21
+ export declare function deleteSubscription(subscriptionId: string): Promise<void>;
22
+ //# sourceMappingURL=admin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../../../src/runtime/api/admin.ts"],"names":[],"mappings":"AACA,OAAO,EASL,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EACxB,MAAM,eAAe,CAAC;AAEvB;;;;GAIG;AAEH,wBAAgB,eAAe,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAQ/D;AAED,wBAAgB,eAAe,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAQ/D;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAQ/D;AAED,wBAAgB,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAS5F;AAED,wBAAgB,QAAQ,CACtB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,kBAAkB,EACxB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,kBAAkB,CAAC,CAU7B;AAED,wBAAgB,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC,CAQlD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,UAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CASpE;AAED,wBAAgB,YAAY,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAQzD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAS/F;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAAC,wBAAwB,CAAC,CAQrE;AAED,wBAAgB,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOxE"}
@@ -0,0 +1,115 @@
1
+ import { request } from "../client.js";
2
+ import { HardPurgeResponseSchema, OrphanReportSchema, PurgeStaleResponseSchema, StaleUploadsResponseSchema, StorageStatsResponseSchema, StorageUsagePublicSchema, SubscriptionListResponseSchema, SubscriptionPublicSchema } from "../schemas.js";
3
+ /**
4
+ * Superuser-only operations. Every wrapper sets `admin: true` so the client
5
+ * can short-circuit with a `ForbiddenError` before the request when the auth
6
+ * adapter already knows the user is not a superuser.
7
+ */
8
+ export function getStorageStats() {
9
+ return request({
10
+ method: "GET",
11
+ path: "/admin/storage/stats",
12
+ schema: StorageStatsResponseSchema,
13
+ auth: true,
14
+ admin: true
15
+ });
16
+ }
17
+ export function getStaleUploads() {
18
+ return request({
19
+ method: "GET",
20
+ path: "/admin/uploads/stale",
21
+ schema: StaleUploadsResponseSchema,
22
+ auth: true,
23
+ admin: true
24
+ });
25
+ }
26
+ export function purgeStaleUploads() {
27
+ return request({
28
+ method: "POST",
29
+ path: "/admin/uploads/purge-stale",
30
+ schema: PurgeStaleResponseSchema,
31
+ auth: true,
32
+ admin: true
33
+ });
34
+ }
35
+ export function getQuota(ownerUserId, tenantId) {
36
+ return request({
37
+ method: "GET",
38
+ path: `/admin/quotas/${encodeURIComponent(ownerUserId)}`,
39
+ query: { tenant_id: tenantId },
40
+ schema: StorageUsagePublicSchema,
41
+ auth: true,
42
+ admin: true
43
+ });
44
+ }
45
+ export function setQuota(ownerUserId, body, tenantId) {
46
+ return request({
47
+ method: "PUT",
48
+ path: `/admin/quotas/${encodeURIComponent(ownerUserId)}`,
49
+ query: { tenant_id: tenantId },
50
+ body,
51
+ schema: StorageUsagePublicSchema,
52
+ auth: true,
53
+ admin: true
54
+ });
55
+ }
56
+ export function getOrphans() {
57
+ return request({
58
+ method: "GET",
59
+ path: "/admin/maintenance/orphans",
60
+ schema: OrphanReportSchema,
61
+ auth: true,
62
+ admin: true
63
+ });
64
+ }
65
+ /**
66
+ * Reconcile orphans. Defaults to a dry-run; pass `confirm: true` only behind an
67
+ * explicit operator confirmation — it deletes storage-orphan bytes.
68
+ */
69
+ export function repairOrphans(confirm = false) {
70
+ return request({
71
+ method: "POST",
72
+ path: "/admin/maintenance/orphans/repair",
73
+ query: { confirm },
74
+ schema: OrphanReportSchema,
75
+ auth: true,
76
+ admin: true
77
+ });
78
+ }
79
+ export function purgeExpired() {
80
+ return request({
81
+ method: "POST",
82
+ path: "/admin/maintenance/purge-expired",
83
+ schema: HardPurgeResponseSchema,
84
+ auth: true,
85
+ admin: true
86
+ });
87
+ }
88
+ export function createSubscription(body) {
89
+ return request({
90
+ method: "POST",
91
+ path: "/admin/subscriptions",
92
+ body,
93
+ schema: SubscriptionPublicSchema,
94
+ auth: true,
95
+ admin: true
96
+ });
97
+ }
98
+ export function listSubscriptions() {
99
+ return request({
100
+ method: "GET",
101
+ path: "/admin/subscriptions",
102
+ schema: SubscriptionListResponseSchema,
103
+ auth: true,
104
+ admin: true
105
+ });
106
+ }
107
+ export function deleteSubscription(subscriptionId) {
108
+ return request({
109
+ method: "DELETE",
110
+ path: `/admin/subscriptions/${encodeURIComponent(subscriptionId)}`,
111
+ auth: true,
112
+ admin: true
113
+ });
114
+ }
115
+ //# sourceMappingURL=admin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.js","sourceRoot":"","sources":["../../../../src/runtime/api/admin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { type CategoriesPublic, type CategoryCreate, type CategoryUpdate, type ResponseMessage, type ResponseModelBase, type ResponseModelOrMessage } from "../schemas.js";
2
+ /**
3
+ * Legacy category CRUD. These routes live under `legacyBase` (no `/v1`) and use
4
+ * the older `{success, ...}` envelope shape. Kept for completeness; the object
5
+ * API uses enum categories, so this is an auxiliary surface.
6
+ */
7
+ export declare function listCategories(skip?: number, limit?: number): Promise<CategoriesPublic>;
8
+ export declare function getCategory(itemId: number): Promise<ResponseModelOrMessage>;
9
+ export declare function createCategory(body: CategoryCreate): Promise<ResponseModelBase>;
10
+ export declare function updateCategory(itemId: number, body: CategoryUpdate): Promise<ResponseModelBase>;
11
+ export declare function deleteCategory(itemId: number): Promise<ResponseMessage>;
12
+ //# sourceMappingURL=categories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"categories.d.ts","sourceRoot":"","sources":["../../../../src/runtime/api/categories.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC5B,MAAM,eAAe,CAAC;AAEvB;;;;GAIG;AAEH,wBAAgB,cAAc,CAAC,IAAI,SAAI,EAAE,KAAK,SAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAS/E;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAQ3E;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAS/E;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAS/F;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAQvE"}
@@ -0,0 +1,56 @@
1
+ import { request } from "../client.js";
2
+ import { CategoriesPublicSchema, ResponseMessageSchema, ResponseModelBaseSchema, ResponseModelOrMessageSchema } from "../schemas.js";
3
+ /**
4
+ * Legacy category CRUD. These routes live under `legacyBase` (no `/v1`) and use
5
+ * the older `{success, ...}` envelope shape. Kept for completeness; the object
6
+ * API uses enum categories, so this is an auxiliary surface.
7
+ */
8
+ export function listCategories(skip = 0, limit = 100) {
9
+ return request({
10
+ method: "GET",
11
+ base: "legacy",
12
+ path: "/category/",
13
+ query: { skip, limit },
14
+ schema: CategoriesPublicSchema,
15
+ auth: true
16
+ });
17
+ }
18
+ export function getCategory(itemId) {
19
+ return request({
20
+ method: "GET",
21
+ base: "legacy",
22
+ path: `/category/get/${encodeURIComponent(itemId)}/`,
23
+ schema: ResponseModelOrMessageSchema,
24
+ auth: true
25
+ });
26
+ }
27
+ export function createCategory(body) {
28
+ return request({
29
+ method: "POST",
30
+ base: "legacy",
31
+ path: "/category/add/",
32
+ body,
33
+ schema: ResponseModelBaseSchema,
34
+ auth: true
35
+ });
36
+ }
37
+ export function updateCategory(itemId, body) {
38
+ return request({
39
+ method: "PUT",
40
+ base: "legacy",
41
+ path: `/category/edit/${encodeURIComponent(itemId)}/`,
42
+ body,
43
+ schema: ResponseModelBaseSchema,
44
+ auth: true
45
+ });
46
+ }
47
+ export function deleteCategory(itemId) {
48
+ return request({
49
+ method: "DELETE",
50
+ base: "legacy",
51
+ path: `/category/delete/${encodeURIComponent(itemId)}/`,
52
+ schema: ResponseMessageSchema,
53
+ auth: true
54
+ });
55
+ }
56
+ //# sourceMappingURL=categories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"categories.js","sourceRoot":"","sources":["../../../../src/runtime/api/categories.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,4BAA4B,EAO7B,MAAM,eAAe,CAAC;AAEvB;;;;GAIG;AAEH,MAAM,UAAU,cAAc,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG;IAClD,OAAO,OAAO,CAAC;QACb,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;QACtB,MAAM,EAAE,sBAAsB;QAC9B,IAAI,EAAE,IAAI;KACX,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,OAAO,OAAO,CAAC;QACb,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,iBAAiB,kBAAkB,CAAC,MAAM,CAAC,GAAG;QACpD,MAAM,EAAE,4BAA4B;QACpC,IAAI,EAAE,IAAI;KACX,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAoB;IACjD,OAAO,OAAO,CAAC;QACb,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,gBAAgB;QACtB,IAAI;QACJ,MAAM,EAAE,uBAAuB;QAC/B,IAAI,EAAE,IAAI;KACX,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,IAAoB;IACjE,OAAO,OAAO,CAAC;QACb,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,kBAAkB,kBAAkB,CAAC,MAAM,CAAC,GAAG;QACrD,IAAI;QACJ,MAAM,EAAE,uBAAuB;QAC/B,IAAI,EAAE,IAAI;KACX,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,OAAO,OAAO,CAAC;QACb,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,oBAAoB,kBAAkB,CAAC,MAAM,CAAC,GAAG;QACvD,MAAM,EAAE,qBAAqB;QAC7B,IAAI,EAAE,IAAI;KACX,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { type UsersActivity } from "../schemas.js";
2
+ /** Dashboard activity. These routes live under `legacyBase` (no `/v1`). */
3
+ export declare function getActivityAll(): Promise<UsersActivity>;
4
+ export declare function getActivityCurrent(): Promise<UsersActivity>;
5
+ //# sourceMappingURL=dashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../../src/runtime/api/dashboard.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAExE,2EAA2E;AAE3E,wBAAgB,cAAc,IAAI,OAAO,CAAC,aAAa,CAAC,CAQvD;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAAC,aAAa,CAAC,CAQ3D"}
@@ -0,0 +1,22 @@
1
+ import { request } from "../client.js";
2
+ import { UsersActivitySchema } from "../schemas.js";
3
+ /** Dashboard activity. These routes live under `legacyBase` (no `/v1`). */
4
+ export function getActivityAll() {
5
+ return request({
6
+ method: "GET",
7
+ base: "legacy",
8
+ path: "/dashboard/users/activity/",
9
+ schema: UsersActivitySchema,
10
+ auth: true
11
+ });
12
+ }
13
+ export function getActivityCurrent() {
14
+ return request({
15
+ method: "GET",
16
+ base: "legacy",
17
+ path: "/dashboard/users/activity/current/",
18
+ schema: UsersActivitySchema,
19
+ auth: true
20
+ });
21
+ }
22
+ //# sourceMappingURL=dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../../../src/runtime/api/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAsB,MAAM,eAAe,CAAC;AAExE,2EAA2E;AAE3E,MAAM,UAAU,cAAc;IAC5B,OAAO,OAAO,CAAC;QACb,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,4BAA4B;QAClC,MAAM,EAAE,mBAAmB;QAC3B,IAAI,EAAE,IAAI;KACX,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,OAAO,CAAC;QACb,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,oCAAoC;QAC1C,MAAM,EAAE,mBAAmB;QAC3B,IAAI,EAAE,IAAI;KACX,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,72 @@
1
+ import * as uploadsApi from "./uploads.js";
2
+ import * as objectsApi from "./objects.js";
3
+ import * as variantsApi from "./variants.js";
4
+ import * as presetsApi from "./presets.js";
5
+ import * as sharesApi from "./shares.js";
6
+ import * as categoriesApi from "./categories.js";
7
+ import * as dashboardApi from "./dashboard.js";
8
+ import * as adminApi from "./admin.js";
9
+ export * from "./uploads.js";
10
+ export * from "./objects.js";
11
+ export * from "./variants.js";
12
+ export * from "./presets.js";
13
+ export * from "./shares.js";
14
+ export * from "./categories.js";
15
+ export * from "./dashboard.js";
16
+ export * from "./admin.js";
17
+ export declare const uploads: {
18
+ readonly initiate: typeof uploadsApi.initiateUpload;
19
+ readonly complete: typeof uploadsApi.completeUpload;
20
+ readonly abort: typeof uploadsApi.abortUpload;
21
+ };
22
+ export declare const objects: {
23
+ readonly list: typeof objectsApi.listObjects;
24
+ readonly get: typeof objectsApi.getObject;
25
+ readonly downloadUrl: typeof objectsApi.getDownloadUrl;
26
+ readonly update: typeof objectsApi.updateObject;
27
+ readonly delete: typeof objectsApi.deleteObject;
28
+ };
29
+ export declare const variants: {
30
+ readonly generate: typeof variantsApi.generateVariants;
31
+ readonly list: typeof variantsApi.listVariants;
32
+ readonly getJob: typeof variantsApi.getVariantJob;
33
+ readonly delete: typeof variantsApi.deleteVariant;
34
+ readonly waitForJob: typeof variantsApi.waitForVariantJob;
35
+ };
36
+ export declare const presets: {
37
+ readonly list: typeof presetsApi.listPresets;
38
+ readonly create: typeof presetsApi.createPreset;
39
+ readonly update: typeof presetsApi.updatePreset;
40
+ readonly delete: typeof presetsApi.deletePreset;
41
+ };
42
+ export declare const shares: {
43
+ readonly create: typeof sharesApi.createShare;
44
+ readonly list: typeof sharesApi.listShares;
45
+ readonly revoke: typeof sharesApi.revokeShare;
46
+ readonly resolve: typeof sharesApi.resolveShare;
47
+ };
48
+ export declare const categories: {
49
+ readonly list: typeof categoriesApi.listCategories;
50
+ readonly get: typeof categoriesApi.getCategory;
51
+ readonly create: typeof categoriesApi.createCategory;
52
+ readonly update: typeof categoriesApi.updateCategory;
53
+ readonly delete: typeof categoriesApi.deleteCategory;
54
+ };
55
+ export declare const dashboard: {
56
+ readonly activityAll: typeof dashboardApi.getActivityAll;
57
+ readonly activityCurrent: typeof dashboardApi.getActivityCurrent;
58
+ };
59
+ export declare const admin: {
60
+ readonly storageStats: typeof adminApi.getStorageStats;
61
+ readonly staleUploads: typeof adminApi.getStaleUploads;
62
+ readonly purgeStaleUploads: typeof adminApi.purgeStaleUploads;
63
+ readonly getQuota: typeof adminApi.getQuota;
64
+ readonly setQuota: typeof adminApi.setQuota;
65
+ readonly orphans: typeof adminApi.getOrphans;
66
+ readonly repairOrphans: typeof adminApi.repairOrphans;
67
+ readonly purgeExpired: typeof adminApi.purgeExpired;
68
+ readonly createSubscription: typeof adminApi.createSubscription;
69
+ readonly listSubscriptions: typeof adminApi.listSubscriptions;
70
+ readonly deleteSubscription: typeof adminApi.deleteSubscription;
71
+ };
72
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/runtime/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,WAAW,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,aAAa,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,YAAY,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AAGvC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAG3B,eAAO,MAAM,OAAO;;;;CAIV,CAAC;AAEX,eAAO,MAAM,OAAO;;;;;;CAMV,CAAC;AAEX,eAAO,MAAM,QAAQ;;;;;;CAMX,CAAC;AAEX,eAAO,MAAM,OAAO;;;;;CAKV,CAAC;AAEX,eAAO,MAAM,MAAM;;;;;CAKT,CAAC;AAEX,eAAO,MAAM,UAAU;;;;;;CAMb,CAAC;AAEX,eAAO,MAAM,SAAS;;;CAGZ,CAAC;AAEX,eAAO,MAAM,KAAK;;;;;;;;;;;;CAYR,CAAC"}
@@ -0,0 +1,74 @@
1
+ import * as uploadsApi from "./uploads.js";
2
+ import * as objectsApi from "./objects.js";
3
+ import * as variantsApi from "./variants.js";
4
+ import * as presetsApi from "./presets.js";
5
+ import * as sharesApi from "./shares.js";
6
+ import * as categoriesApi from "./categories.js";
7
+ import * as dashboardApi from "./dashboard.js";
8
+ import * as adminApi from "./admin.js";
9
+ // Flat named exports (tree-shakeable direct imports).
10
+ export * from "./uploads.js";
11
+ export * from "./objects.js";
12
+ export * from "./variants.js";
13
+ export * from "./presets.js";
14
+ export * from "./shares.js";
15
+ export * from "./categories.js";
16
+ export * from "./dashboard.js";
17
+ export * from "./admin.js";
18
+ // Grouped namespaces (`uploads.initiate`, `objects.list`, ...).
19
+ export const uploads = {
20
+ initiate: uploadsApi.initiateUpload,
21
+ complete: uploadsApi.completeUpload,
22
+ abort: uploadsApi.abortUpload
23
+ };
24
+ export const objects = {
25
+ list: objectsApi.listObjects,
26
+ get: objectsApi.getObject,
27
+ downloadUrl: objectsApi.getDownloadUrl,
28
+ update: objectsApi.updateObject,
29
+ delete: objectsApi.deleteObject
30
+ };
31
+ export const variants = {
32
+ generate: variantsApi.generateVariants,
33
+ list: variantsApi.listVariants,
34
+ getJob: variantsApi.getVariantJob,
35
+ delete: variantsApi.deleteVariant,
36
+ waitForJob: variantsApi.waitForVariantJob
37
+ };
38
+ export const presets = {
39
+ list: presetsApi.listPresets,
40
+ create: presetsApi.createPreset,
41
+ update: presetsApi.updatePreset,
42
+ delete: presetsApi.deletePreset
43
+ };
44
+ export const shares = {
45
+ create: sharesApi.createShare,
46
+ list: sharesApi.listShares,
47
+ revoke: sharesApi.revokeShare,
48
+ resolve: sharesApi.resolveShare
49
+ };
50
+ export const categories = {
51
+ list: categoriesApi.listCategories,
52
+ get: categoriesApi.getCategory,
53
+ create: categoriesApi.createCategory,
54
+ update: categoriesApi.updateCategory,
55
+ delete: categoriesApi.deleteCategory
56
+ };
57
+ export const dashboard = {
58
+ activityAll: dashboardApi.getActivityAll,
59
+ activityCurrent: dashboardApi.getActivityCurrent
60
+ };
61
+ export const admin = {
62
+ storageStats: adminApi.getStorageStats,
63
+ staleUploads: adminApi.getStaleUploads,
64
+ purgeStaleUploads: adminApi.purgeStaleUploads,
65
+ getQuota: adminApi.getQuota,
66
+ setQuota: adminApi.setQuota,
67
+ orphans: adminApi.getOrphans,
68
+ repairOrphans: adminApi.repairOrphans,
69
+ purgeExpired: adminApi.purgeExpired,
70
+ createSubscription: adminApi.createSubscription,
71
+ listSubscriptions: adminApi.listSubscriptions,
72
+ deleteSubscription: adminApi.deleteSubscription
73
+ };
74
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/runtime/api/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { type MediaObjectPublic, type ScanResultRequest, type VariantJobPublic, type VariantJobUpdate, type VariantPublic, type VariantRegisterRequest } from "../schemas.js";
2
+ export type InternalClientOptions = {
3
+ /** Env var holding the shared service token. Default MEDIA_INTERNAL_SERVICE_TOKEN. */
4
+ serviceTokenEnv?: string;
5
+ /** Explicit token override (e.g. injected by a secret manager). */
6
+ token?: string;
7
+ };
8
+ export type InternalMediaClient = {
9
+ applyScanResult(objectId: string, body: ScanResultRequest): Promise<MediaObjectPublic>;
10
+ registerVariant(objectId: string, body: VariantRegisterRequest): Promise<VariantPublic>;
11
+ updateVariantJob(jobId: string, body: VariantJobUpdate): Promise<VariantJobPublic>;
12
+ };
13
+ /**
14
+ * Build a server-only client for the service-to-service internal callbacks.
15
+ * The shared service token is attached directly (never via the user auth
16
+ * adapter) and refresh is disabled, since there is no user session to renew.
17
+ */
18
+ export declare function createInternalMediaClient(options?: InternalClientOptions): InternalMediaClient;
19
+ //# sourceMappingURL=internal.server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.server.d.ts","sourceRoot":"","sources":["../../../../src/runtime/api/internal.server.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAC5B,MAAM,eAAe,CAAC;AA0BvB,MAAM,MAAM,qBAAqB,GAAG;IAClC,sFAAsF;IACtF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACvF,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACxF,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACpF,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,GAAE,qBAA0B,GAAG,mBAAmB,CAqClG"}
@@ -0,0 +1,64 @@
1
+ import { request } from "../client.js";
2
+ import { MediaObjectPublicSchema, ScanResultRequestSchema, VariantJobPublicSchema, VariantPublicSchema } from "../schemas.js";
3
+ const DEFAULT_TOKEN_ENV = "MEDIA_INTERNAL_SERVICE_TOKEN";
4
+ /**
5
+ * Fail fast if this module is ever pulled into a browser bundle. The internal
6
+ * routes are authenticated with a shared service token that must never leave
7
+ * the server.
8
+ */
9
+ function assertServerOnly() {
10
+ if (typeof window !== "undefined") {
11
+ throw new Error("@fa-m8/astro-media-m8/internal-server must only be imported on the server");
12
+ }
13
+ }
14
+ function resolveServiceToken(envVar) {
15
+ const env = globalThis.process?.env;
16
+ const token = env?.[envVar];
17
+ if (!token) {
18
+ throw new Error(`Missing service token: set ${envVar} in the server environment`);
19
+ }
20
+ return token;
21
+ }
22
+ /**
23
+ * Build a server-only client for the service-to-service internal callbacks.
24
+ * The shared service token is attached directly (never via the user auth
25
+ * adapter) and refresh is disabled, since there is no user session to renew.
26
+ */
27
+ export function createInternalMediaClient(options = {}) {
28
+ assertServerOnly();
29
+ const token = options.token ?? resolveServiceToken(options.serviceTokenEnv ?? DEFAULT_TOKEN_ENV);
30
+ const headers = { Authorization: `Bearer ${token}` };
31
+ return {
32
+ applyScanResult(objectId, body) {
33
+ return request({
34
+ method: "POST",
35
+ path: `/internal/objects/${encodeURIComponent(objectId)}/scan-result`,
36
+ body: ScanResultRequestSchema.parse(body),
37
+ schema: MediaObjectPublicSchema,
38
+ headers,
39
+ skipRefresh: true
40
+ });
41
+ },
42
+ registerVariant(objectId, body) {
43
+ return request({
44
+ method: "POST",
45
+ path: `/internal/objects/${encodeURIComponent(objectId)}/variants`,
46
+ body,
47
+ schema: VariantPublicSchema,
48
+ headers,
49
+ skipRefresh: true
50
+ });
51
+ },
52
+ updateVariantJob(jobId, body) {
53
+ return request({
54
+ method: "PATCH",
55
+ path: `/internal/variant-jobs/${encodeURIComponent(jobId)}`,
56
+ body,
57
+ schema: VariantJobPublicSchema,
58
+ headers,
59
+ skipRefresh: true
60
+ });
61
+ }
62
+ };
63
+ }
64
+ //# sourceMappingURL=internal.server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.server.js","sourceRoot":"","sources":["../../../../src/runtime/api/internal.server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,EAOpB,MAAM,eAAe,CAAC;AAEvB,MAAM,iBAAiB,GAAG,8BAA8B,CAAC;AAEzD;;;;GAIG;AACH,SAAS,gBAAgB;IACvB,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CACb,2EAA2E,CAC5E,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAc;IACzC,MAAM,GAAG,GAAI,UAAyE,CAAC,OAAO,EAAE,GAAG,CAAC;IACpG,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;IAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,4BAA4B,CAAC,CAAC;IACpF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAeD;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,UAAiC,EAAE;IAC3E,gBAAgB,EAAE,CAAC;IACnB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,mBAAmB,CAAC,OAAO,CAAC,eAAe,IAAI,iBAAiB,CAAC,CAAC;IACjG,MAAM,OAAO,GAAG,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,CAAC;IAErD,OAAO;QACL,eAAe,CAAC,QAAQ,EAAE,IAAI;YAC5B,OAAO,OAAO,CAAC;gBACb,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,qBAAqB,kBAAkB,CAAC,QAAQ,CAAC,cAAc;gBACrE,IAAI,EAAE,uBAAuB,CAAC,KAAK,CAAC,IAAI,CAAC;gBACzC,MAAM,EAAE,uBAAuB;gBAC/B,OAAO;gBACP,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;QACD,eAAe,CAAC,QAAQ,EAAE,IAAI;YAC5B,OAAO,OAAO,CAAC;gBACb,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,qBAAqB,kBAAkB,CAAC,QAAQ,CAAC,WAAW;gBAClE,IAAI;gBACJ,MAAM,EAAE,mBAAmB;gBAC3B,OAAO;gBACP,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;QACD,gBAAgB,CAAC,KAAK,EAAE,IAAI;YAC1B,OAAO,OAAO,CAAC;gBACb,MAAM,EAAE,OAAO;gBACf,IAAI,EAAE,0BAA0B,kBAAkB,CAAC,KAAK,CAAC,EAAE;gBAC3D,IAAI;gBACJ,MAAM,EAAE,sBAAsB;gBAC9B,OAAO;gBACP,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { type DownloadUrlResponse, type MediaObjectPublic, type MediaObjectUpdate, type ObjectListParams, type ObjectListResponse } from "../schemas.js";
2
+ export declare function listObjects(params?: ObjectListParams): Promise<ObjectListResponse>;
3
+ export declare function getObject(objectId: string): Promise<MediaObjectPublic>;
4
+ export declare function getDownloadUrl(objectId: string): Promise<DownloadUrlResponse>;
5
+ export declare function updateObject(objectId: string, body: MediaObjectUpdate): Promise<MediaObjectPublic>;
6
+ export declare function deleteObject(objectId: string): Promise<void>;
7
+ //# sourceMappingURL=objects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"objects.d.ts","sourceRoot":"","sources":["../../../../src/runtime/api/objects.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACxB,MAAM,eAAe,CAAC;AAkBvB,wBAAsB,WAAW,CAAC,MAAM,GAAE,gBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAsB5F;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAOtE;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAO7E;AAED,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,iBAAiB,CAAC,CAQ5B;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM5D"}
@@ -0,0 +1,71 @@
1
+ import { request } from "../client.js";
2
+ import { ApiError } from "../errors.js";
3
+ import { DownloadUrlResponseSchema, MediaObjectPublicSchema, ObjectListResponseSchema } from "../schemas.js";
4
+ const LEGACY_SORT_FALLBACKS = {
5
+ original_filename: "created_at",
6
+ category: "created_at",
7
+ status: "created_at"
8
+ };
9
+ function legacySortFallback(params) {
10
+ return params.sort_by === undefined ? undefined : LEGACY_SORT_FALLBACKS[params.sort_by];
11
+ }
12
+ function shouldRetryLegacySort(error, fallback) {
13
+ return error instanceof ApiError && error.status === 422 && fallback !== undefined;
14
+ }
15
+ export async function listObjects(params = {}) {
16
+ const options = {
17
+ method: "GET",
18
+ path: "/objects",
19
+ query: { ...params },
20
+ schema: ObjectListResponseSchema,
21
+ auth: true
22
+ };
23
+ try {
24
+ return await request(options);
25
+ }
26
+ catch (error) {
27
+ const fallback = legacySortFallback(params);
28
+ if (!shouldRetryLegacySort(error, fallback))
29
+ throw error;
30
+ return request({
31
+ ...options,
32
+ query: {
33
+ ...params,
34
+ sort_by: fallback
35
+ }
36
+ });
37
+ }
38
+ }
39
+ export function getObject(objectId) {
40
+ return request({
41
+ method: "GET",
42
+ path: `/objects/${encodeURIComponent(objectId)}`,
43
+ schema: MediaObjectPublicSchema,
44
+ auth: true
45
+ });
46
+ }
47
+ export function getDownloadUrl(objectId) {
48
+ return request({
49
+ method: "GET",
50
+ path: `/objects/${encodeURIComponent(objectId)}/download-url`,
51
+ schema: DownloadUrlResponseSchema,
52
+ auth: true
53
+ });
54
+ }
55
+ export function updateObject(objectId, body) {
56
+ return request({
57
+ method: "PATCH",
58
+ path: `/objects/${encodeURIComponent(objectId)}`,
59
+ body,
60
+ schema: MediaObjectPublicSchema,
61
+ auth: true
62
+ });
63
+ }
64
+ export function deleteObject(objectId) {
65
+ return request({
66
+ method: "DELETE",
67
+ path: `/objects/${encodeURIComponent(objectId)}`,
68
+ auth: true
69
+ });
70
+ }
71
+ //# sourceMappingURL=objects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"objects.js","sourceRoot":"","sources":["../../../../src/runtime/api/objects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,EAMzB,MAAM,eAAe,CAAC;AAIvB,MAAM,qBAAqB,GAA0C;IACnE,iBAAiB,EAAE,YAAY;IAC/B,QAAQ,EAAE,YAAY;IACtB,MAAM,EAAE,YAAY;CACrB,CAAC;AAEF,SAAS,kBAAkB,CAAC,MAAwB;IAClD,OAAO,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,qBAAqB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC1F,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAc,EAAE,QAAiD;IAC9F,OAAO,KAAK,YAAY,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,KAAK,SAAS,CAAC;AACrF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,SAA2B,EAAE;IAC7D,MAAM,OAAO,GAAG;QACd,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,EAAE,GAAG,MAAM,EAAE;QACpB,MAAM,EAAE,wBAAwB;QAChC,IAAI,EAAE,IAAI;KACF,CAAC;IAEX,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC;YAAE,MAAM,KAAK,CAAC;QACzD,OAAO,OAAO,CAAC;YACb,GAAG,OAAO;YACV,KAAK,EAAE;gBACL,GAAG,MAAM;gBACT,OAAO,EAAE,QAAQ;aAClB;SACF,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,QAAgB;IACxC,OAAO,OAAO,CAAC;QACb,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,YAAY,kBAAkB,CAAC,QAAQ,CAAC,EAAE;QAChD,MAAM,EAAE,uBAAuB;QAC/B,IAAI,EAAE,IAAI;KACX,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,OAAO,OAAO,CAAC;QACb,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,YAAY,kBAAkB,CAAC,QAAQ,CAAC,eAAe;QAC7D,MAAM,EAAE,yBAAyB;QACjC,IAAI,EAAE,IAAI;KACX,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,QAAgB,EAChB,IAAuB;IAEvB,OAAO,OAAO,CAAC;QACb,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,YAAY,kBAAkB,CAAC,QAAQ,CAAC,EAAE;QAChD,IAAI;QACJ,MAAM,EAAE,uBAAuB;QAC/B,IAAI,EAAE,IAAI;KACX,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,OAAO,OAAO,CAAC;QACb,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,YAAY,kBAAkB,CAAC,QAAQ,CAAC,EAAE;QAChD,IAAI,EAAE,IAAI;KACX,CAAC,CAAC;AACL,CAAC"}