@lodashventure/medusa-media-manager 0.1.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 (25) hide show
  1. package/.medusa/server/src/admin/index.js +1376 -0
  2. package/.medusa/server/src/admin/index.mjs +1377 -0
  3. package/.medusa/server/src/api/admin/media/assets/[id]/route.js +50 -0
  4. package/.medusa/server/src/api/admin/media/assets/[id]/url/route.js +24 -0
  5. package/.medusa/server/src/api/admin/media/assets/route.js +53 -0
  6. package/.medusa/server/src/api/admin/media/assets/upload/route.js +67 -0
  7. package/.medusa/server/src/api/middlewares.js +53 -0
  8. package/.medusa/server/src/index.js +46 -0
  9. package/.medusa/server/src/modules/media-manager/index.js +13 -0
  10. package/.medusa/server/src/modules/media-manager/migrations/Migration20251104115419.js +83 -0
  11. package/.medusa/server/src/modules/media-manager/migrations/Migration20251104160000.js +15 -0
  12. package/.medusa/server/src/modules/media-manager/models/index.js +14 -0
  13. package/.medusa/server/src/modules/media-manager/models/media-models.js +201 -0
  14. package/.medusa/server/src/modules/media-manager/service.js +778 -0
  15. package/.medusa/server/src/providers/index.js +23 -0
  16. package/.medusa/server/src/providers/storage/azure.js +100 -0
  17. package/.medusa/server/src/providers/storage/factory.js +32 -0
  18. package/.medusa/server/src/providers/storage/gcs.js +91 -0
  19. package/.medusa/server/src/providers/storage/local.js +73 -0
  20. package/.medusa/server/src/providers/storage/s3.js +96 -0
  21. package/.medusa/server/src/providers/storage/types.js +3 -0
  22. package/.medusa/server/src/types/index.js +3 -0
  23. package/.medusa/server/src/workflows/index.js +4 -0
  24. package/README.md +85 -0
  25. package/package.json +82 -0
@@ -0,0 +1,201 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MediaAssetAuditView = exports.MediaActivityLog = exports.MediaAssetVersion = exports.MediaAssetRelation = exports.MediaAssetTag = exports.MediaVariant = exports.MediaAsset = exports.MediaTag = exports.MediaFolder = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ exports.MediaFolder = utils_1.model
6
+ .define("media_folder", {
7
+ id: utils_1.model.id().primaryKey(),
8
+ name: utils_1.model.text(),
9
+ parent: utils_1.model
10
+ .belongsTo(() => exports.MediaFolder, {
11
+ mappedBy: "children",
12
+ })
13
+ .nullable(),
14
+ children: utils_1.model.hasMany(() => exports.MediaFolder, {
15
+ mappedBy: "parent",
16
+ }),
17
+ assets: utils_1.model.hasMany(() => exports.MediaAsset, {
18
+ mappedBy: "folder",
19
+ }),
20
+ })
21
+ .indexes([
22
+ {
23
+ on: ["name", "parent_id"],
24
+ unique: true,
25
+ },
26
+ ]);
27
+ exports.MediaTag = utils_1.model
28
+ .define("media_tag", {
29
+ id: utils_1.model.id().primaryKey(),
30
+ name: utils_1.model.text().unique(),
31
+ color: utils_1.model.text().nullable(),
32
+ assets: utils_1.model.hasMany(() => exports.MediaAssetTag, {
33
+ mappedBy: "tag",
34
+ }),
35
+ })
36
+ .indexes([
37
+ {
38
+ on: ["name"],
39
+ unique: true,
40
+ },
41
+ ]);
42
+ exports.MediaAsset = utils_1.model
43
+ .define("media_asset", {
44
+ id: utils_1.model.id().primaryKey(),
45
+ storage_key: utils_1.model.text().unique(),
46
+ original_filename: utils_1.model.text(),
47
+ mime: utils_1.model.text(),
48
+ type: utils_1.model.enum(["image", "video", "document", "svg"]).default("image"),
49
+ size_bytes: utils_1.model.number(),
50
+ width: utils_1.model.number().nullable(),
51
+ height: utils_1.model.number().nullable(),
52
+ duration_ms: utils_1.model.number().nullable(),
53
+ checksum_sha256: utils_1.model.text().unique(),
54
+ visibility: utils_1.model.enum(["public", "private"]).default("public"),
55
+ status: utils_1.model.enum(["draft", "published", "archived"]).default("draft"),
56
+ focal_x: utils_1.model.float().nullable(),
57
+ focal_y: utils_1.model.float().nullable(),
58
+ title: utils_1.model.json().nullable(),
59
+ alt_text: utils_1.model.json().nullable(),
60
+ caption: utils_1.model.json().nullable(),
61
+ exif: utils_1.model.json().nullable(),
62
+ custom: utils_1.model.json().nullable(),
63
+ metadata: utils_1.model.json().nullable(),
64
+ version: utils_1.model.number().default(1),
65
+ folder: utils_1.model
66
+ .belongsTo(() => exports.MediaFolder, {
67
+ mappedBy: "assets",
68
+ })
69
+ .nullable(),
70
+ variants: utils_1.model.hasMany(() => exports.MediaVariant, {
71
+ mappedBy: "asset",
72
+ }),
73
+ tag_links: utils_1.model.hasMany(() => exports.MediaAssetTag, {
74
+ mappedBy: "asset",
75
+ }),
76
+ relations: utils_1.model.hasMany(() => exports.MediaAssetRelation, {
77
+ mappedBy: "asset",
78
+ }),
79
+ versions: utils_1.model.hasMany(() => exports.MediaAssetVersion, {
80
+ mappedBy: "asset",
81
+ }),
82
+ activities: utils_1.model.hasMany(() => exports.MediaActivityLog, {
83
+ mappedBy: "asset",
84
+ }),
85
+ created_by: utils_1.model.text().nullable(),
86
+ updated_by: utils_1.model.text().nullable(),
87
+ uploaded_at: utils_1.model.dateTime().nullable(),
88
+ processing_state: utils_1.model
89
+ .enum(["pending", "processing", "processed", "failed"])
90
+ .default("pending"),
91
+ processing_error: utils_1.model.text().nullable(),
92
+ })
93
+ .indexes([
94
+ {
95
+ on: ["type"],
96
+ },
97
+ {
98
+ on: ["folder_id"],
99
+ },
100
+ {
101
+ on: ["created_at"],
102
+ },
103
+ {
104
+ on: ["visibility", "status"],
105
+ },
106
+ ]);
107
+ exports.MediaVariant = utils_1.model
108
+ .define("media_variant", {
109
+ id: utils_1.model.id().primaryKey(),
110
+ asset: utils_1.model.belongsTo(() => exports.MediaAsset, {
111
+ mappedBy: "variants",
112
+ }),
113
+ preset: utils_1.model.text(),
114
+ format: utils_1.model.text(),
115
+ width: utils_1.model.number().nullable(),
116
+ height: utils_1.model.number().nullable(),
117
+ size_bytes: utils_1.model.number().nullable(),
118
+ storage_key: utils_1.model.text().nullable(),
119
+ checksum_sha256: utils_1.model.text().nullable(),
120
+ generated_at: utils_1.model.dateTime().nullable(),
121
+ status: utils_1.model
122
+ .enum(["pending", "processing", "generated", "failed"])
123
+ .default("pending"),
124
+ error: utils_1.model.text().nullable(),
125
+ })
126
+ .indexes([
127
+ {
128
+ on: ["asset_id", "preset", "format"],
129
+ unique: true,
130
+ },
131
+ ]);
132
+ exports.MediaAssetTag = utils_1.model
133
+ .define("media_asset_tag", {
134
+ id: utils_1.model.id().primaryKey(),
135
+ asset: utils_1.model.belongsTo(() => exports.MediaAsset, {
136
+ mappedBy: "tag_links",
137
+ }),
138
+ tag: utils_1.model.belongsTo(() => exports.MediaTag, {
139
+ mappedBy: "assets",
140
+ }),
141
+ })
142
+ .indexes([
143
+ {
144
+ on: ["asset_id", "tag_id"],
145
+ unique: true,
146
+ },
147
+ ]);
148
+ exports.MediaAssetRelation = utils_1.model
149
+ .define("media_asset_relation", {
150
+ id: utils_1.model.id().primaryKey(),
151
+ asset: utils_1.model.belongsTo(() => exports.MediaAsset, {
152
+ mappedBy: "relations",
153
+ }),
154
+ entity_type: utils_1.model.text(),
155
+ entity_id: utils_1.model.text(),
156
+ relation_role: utils_1.model.text().default("primary"),
157
+ })
158
+ .indexes([
159
+ {
160
+ on: ["entity_type", "entity_id"],
161
+ },
162
+ {
163
+ on: ["asset_id", "entity_type", "entity_id", "relation_role"],
164
+ unique: true,
165
+ },
166
+ ]);
167
+ exports.MediaAssetVersion = utils_1.model
168
+ .define("media_asset_version", {
169
+ id: utils_1.model.id().primaryKey(),
170
+ asset: utils_1.model.belongsTo(() => exports.MediaAsset, {
171
+ mappedBy: "versions",
172
+ }),
173
+ version: utils_1.model.number(),
174
+ storage_key: utils_1.model.text(),
175
+ mime: utils_1.model.text(),
176
+ size_bytes: utils_1.model.number(),
177
+ checksum_sha256: utils_1.model.text(),
178
+ metadata: utils_1.model.json().nullable(),
179
+ })
180
+ .indexes([
181
+ {
182
+ on: ["asset_id", "version"],
183
+ unique: true,
184
+ },
185
+ ]);
186
+ exports.MediaActivityLog = utils_1.model.define("media_activity_log", {
187
+ id: utils_1.model.id().primaryKey(),
188
+ asset: utils_1.model.belongsTo(() => exports.MediaAsset, {
189
+ mappedBy: "activities",
190
+ }),
191
+ actor_id: utils_1.model.text().nullable(),
192
+ action: utils_1.model.text(),
193
+ metadata: utils_1.model.json().nullable(),
194
+ });
195
+ exports.MediaAssetAuditView = utils_1.model.define("media_asset_audit_view", {
196
+ id: utils_1.model.id().primaryKey(),
197
+ asset_id: utils_1.model.text(),
198
+ usage_count: utils_1.model.number(),
199
+ last_used_at: utils_1.model.dateTime().nullable(),
200
+ });
201
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWEtbW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvbWVkaWEtbWFuYWdlci9tb2RlbHMvbWVkaWEtbW9kZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUFrRDtBQUVyQyxRQUFBLFdBQVcsR0FBRyxhQUFLO0tBQzdCLE1BQU0sQ0FBQyxjQUFjLEVBQUU7SUFDdEIsRUFBRSxFQUFFLGFBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUU7SUFDM0IsSUFBSSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDbEIsTUFBTSxFQUFFLGFBQUs7U0FDVixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsbUJBQVcsRUFBRTtRQUM1QixRQUFRLEVBQUUsVUFBVTtLQUNyQixDQUFDO1NBQ0QsUUFBUSxFQUFFO0lBQ2IsUUFBUSxFQUFFLGFBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsbUJBQVcsRUFBRTtRQUN6QyxRQUFRLEVBQUUsUUFBUTtLQUNuQixDQUFDO0lBQ0YsTUFBTSxFQUFFLGFBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsa0JBQVUsRUFBRTtRQUN0QyxRQUFRLEVBQUUsUUFBUTtLQUNuQixDQUFDO0NBQ0gsQ0FBQztLQUNELE9BQU8sQ0FBQztJQUNQO1FBQ0UsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQztRQUN6QixNQUFNLEVBQUUsSUFBSTtLQUNiO0NBQ0YsQ0FBQyxDQUFDO0FBRVEsUUFBQSxRQUFRLEdBQUcsYUFBSztLQUMxQixNQUFNLENBQUMsV0FBVyxFQUFFO0lBQ25CLEVBQUUsRUFBRSxhQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFO0lBQzNCLElBQUksRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFO0lBQzNCLEtBQUssRUFBRSxhQUFLLENBQUMsSUFB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