medusa-plugin-barcodes 0.1.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 (27) hide show
  1. package/.medusa/server/medusa-config.d.ts +1 -0
  2. package/.medusa/server/medusa-config.js +23 -0
  3. package/.medusa/server/src/admin/index.js +22 -0
  4. package/.medusa/server/src/admin/index.mjs +23 -0
  5. package/.medusa/server/src/api/admin/barcode-generator/route.d.ts +4 -0
  6. package/.medusa/server/src/api/admin/barcode-generator/route.js +43 -0
  7. package/.medusa/server/src/api/admin/barcodes/[id]/render/route.d.ts +1 -0
  8. package/.medusa/server/src/api/admin/barcodes/[id]/render/route.js +3 -0
  9. package/.medusa/server/src/api/admin/barcodes/[id]/route.d.ts +5 -0
  10. package/.medusa/server/src/api/admin/barcodes/[id]/route.js +40 -0
  11. package/.medusa/server/src/api/admin/barcodes/route.d.ts +5 -0
  12. package/.medusa/server/src/api/admin/barcodes/route.js +39 -0
  13. package/.medusa/server/src/api/middlewares.d.ts +2 -0
  14. package/.medusa/server/src/api/middlewares.js +53 -0
  15. package/.medusa/server/src/api/validators.d.ts +103 -0
  16. package/.medusa/server/src/api/validators.js +39 -0
  17. package/.medusa/server/src/modules/barcode/index.d.ts +22 -0
  18. package/.medusa/server/src/modules/barcode/index.js +25 -0
  19. package/.medusa/server/src/modules/barcode/migrations/Migration20260409171736.d.ts +5 -0
  20. package/.medusa/server/src/modules/barcode/migrations/Migration20260409171736.js +15 -0
  21. package/.medusa/server/src/modules/barcode/models/barcode.d.ts +5 -0
  22. package/.medusa/server/src/modules/barcode/models/barcode.js +12 -0
  23. package/.medusa/server/src/modules/barcode/service.d.ts +15 -0
  24. package/.medusa/server/src/modules/barcode/service.js +50 -0
  25. package/LICENSE +21 -0
  26. package/README.md +48 -0
  27. package/package.json +86 -0
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("@medusajs/framework/utils");
4
+ (0, utils_1.loadEnv)(process.env.NODE_ENV || 'development', process.cwd());
5
+ module.exports = (0, utils_1.defineConfig)({
6
+ projectConfig: {
7
+ redisUrl: process.env.REDIS_URL,
8
+ databaseUrl: process.env.DATABASE_URL,
9
+ http: {
10
+ storeCors: process.env.STORE_CORS || 'http://localhost:5173',
11
+ adminCors: process.env.ADMIN_CORS || 'http://localhost:5173,http://localhost:9000',
12
+ authCors: process.env.AUTH_CORS || 'http://localhost:5173,http://localhost:9000',
13
+ jwtSecret: process.env.JWT_SECRET || 'supersecret',
14
+ cookieSecret: process.env.COOKIE_SECRET || 'supersecret'
15
+ }
16
+ },
17
+ modules: [
18
+ {
19
+ resolve: './src/modules/barcode'
20
+ }
21
+ ]
22
+ });
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkdXNhLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL21lZHVzYS1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxREFBaUU7QUFFakUsSUFBQSxlQUFPLEVBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksYUFBYSxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFBO0FBRTdELE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBQSxvQkFBWSxFQUFDO0lBQzdCLGFBQWEsRUFBRTtRQUNkLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVM7UUFDL0IsV0FBVyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWTtRQUNyQyxJQUFJLEVBQUU7WUFDTCxTQUFTLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksdUJBQXVCO1lBQzVELFNBQVMsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSw2Q0FBNkM7WUFDbEYsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxJQUFJLDZDQUE2QztZQUNoRixTQUFTLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksYUFBYTtZQUNsRCxZQUFZLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLElBQUksYUFBYTtTQUN4RDtLQUNEO0lBQ0QsT0FBTyxFQUFFO1FBQ1I7WUFDQyxPQUFPLEVBQUUsdUJBQXVCO1NBQ2hDO0tBQ0Q7Q0FDRCxDQUFDLENBQUEifQ==
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ const widgetModule = { widgets: [] };
3
+ const routeModule = {
4
+ routes: []
5
+ };
6
+ const menuItemModule = {
7
+ menuItems: []
8
+ };
9
+ const formModule = { customFields: {} };
10
+ const displayModule = {
11
+ displays: {}
12
+ };
13
+ const i18nModule = { resources: {} };
14
+ const plugin = {
15
+ widgetModule,
16
+ routeModule,
17
+ menuItemModule,
18
+ formModule,
19
+ displayModule,
20
+ i18nModule
21
+ };
22
+ module.exports = plugin;
@@ -0,0 +1,23 @@
1
+ const widgetModule = { widgets: [] };
2
+ const routeModule = {
3
+ routes: []
4
+ };
5
+ const menuItemModule = {
6
+ menuItems: []
7
+ };
8
+ const formModule = { customFields: {} };
9
+ const displayModule = {
10
+ displays: {}
11
+ };
12
+ const i18nModule = { resources: {} };
13
+ const plugin = {
14
+ widgetModule,
15
+ routeModule,
16
+ menuItemModule,
17
+ formModule,
18
+ displayModule,
19
+ i18nModule
20
+ };
21
+ export {
22
+ plugin as default
23
+ };
@@ -0,0 +1,4 @@
1
+ import { AuthenticatedMedusaRequest, MedusaResponse } from '@medusajs/framework/http';
2
+ import { AdminRenderBarcodeType } from '../../validators';
3
+ export declare const GET: (req: AuthenticatedMedusaRequest<AdminRenderBarcodeType>, res: MedusaResponse) => Promise<void>;
4
+ export declare const POST: (req: AuthenticatedMedusaRequest<AdminRenderBarcodeType>, res: MedusaResponse) => Promise<void>;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.POST = exports.GET = void 0;
4
+ const barcode_1 = require("../../../modules/barcode");
5
+ const GET = async (req, res) => {
6
+ let options = req.validatedQuery;
7
+ console.log(options);
8
+ const barcodeService = req.scope.resolve(barcode_1.BARCODE_MODULE);
9
+ // for testing, override options
10
+ let gtin = options.gtin || '00850023754028';
11
+ let serial = options.serial || '20007';
12
+ let text = '(01)' + gtin + '(21)' + serial;
13
+ const buffer = await barcodeService.render({
14
+ bcid: options.bcid || 'gs1datamatrix', // Barcode type
15
+ text: options.text || text, // Barcode value
16
+ height: options.height ? parseInt(options.height) : 40, // Barcode height, in mm
17
+ width: options.width ? parseInt(options.width) : 40, // Barcode width, in mm
18
+ parsefnc: options.parsefnc || true
19
+ });
20
+ res.setHeader('Content-Type', 'image/png');
21
+ res.send(buffer);
22
+ };
23
+ exports.GET = GET;
24
+ const POST = async (req, res) => {
25
+ let options = req.body;
26
+ console.log(options);
27
+ const barcodeService = req.scope.resolve(barcode_1.BARCODE_MODULE);
28
+ // for testing, override options
29
+ let gtin = options.gtin || '00850023754028';
30
+ let serial = options.serial || '20007';
31
+ let text = '(01)' + gtin + '(21)' + serial; // (01)00850023754028(21)20007
32
+ const buffer = await barcodeService.render({
33
+ bcid: options.bcid || 'gs1datamatrix', // Barcode type
34
+ text: options.text || text, // Barcode value
35
+ height: options.height || 40, // Barcode height, in mm
36
+ width: options.width || 40,
37
+ parsefnc: options.parsefnc || true
38
+ });
39
+ res.setHeader('Content-Type', 'image/png');
40
+ res.send(buffer);
41
+ };
42
+ exports.POST = POST;
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2JhcmNvZGUtZ2VuZXJhdG9yL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLHNEQUF5RDtBQUdsRCxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQ3ZCLEdBQXVELEVBQ3ZELEdBQW1CLEVBQ2xCLEVBQUU7SUFDSCxJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUMsY0FBYyxDQUFBO0lBQ2hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUE7SUFFcEIsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsd0JBQWMsQ0FBbUIsQ0FBQTtJQUUxRSxnQ0FBZ0M7SUFDaEMsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxnQkFBZ0IsQ0FBQTtJQUMzQyxJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQTtJQUN0QyxJQUFJLElBQUksR0FBRyxNQUFNLEdBQUcsSUFBSSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUE7SUFFMUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxjQUFjLENBQUMsTUFBTSxDQUFDO1FBQzFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxJQUFJLGVBQWUsRUFBRSxlQUFlO1FBQ3RELElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRSxnQkFBZ0I7UUFDNUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsd0JBQXdCO1FBQzFGLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsdUJBQXVCO1FBQ3RGLFFBQVEsRUFBRyxPQUFPLENBQUMsUUFBb0IsSUFBSSxJQUFJO0tBQ3hDLENBQUMsQ0FBQTtJQUVULEdBQUcsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBQzFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDakIsQ0FBQyxDQUFBO0FBeEJZLFFBQUEsR0FBRyxPQXdCZjtBQUVNLE1BQU0sSUFBSSxHQUFHLEtBQUssRUFDeEIsR0FBdUQsRUFDdkQsR0FBbUIsRUFDbEIsRUFBRTtJQUNILElBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUE7SUFDdEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUVwQixNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyx3QkFBYyxDQUFtQixDQUFBO0lBRTFFLGdDQUFnQztJQUNoQyxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLGdCQUFnQixDQUFBO0lBQzNDLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFBO0lBQ3RDLElBQUksSUFBSSxHQUFHLE1BQU0sR0FBRyxJQUFJLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQSxDQUFDLDhCQUE4QjtJQUV6RSxNQUFNLE1BQU0sR0FBRyxNQUFNLGNBQWMsQ0FBQyxNQUFNLENBQUM7UUFDMUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLElBQUksZUFBZSxFQUFFLGVBQWU7UUFDdEQsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFLGdCQUFnQjtRQUM1QyxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsd0JBQXdCO1FBQ3RELEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDMUIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLElBQUksSUFBSTtLQUMzQixDQUFDLENBQUE7SUFFVCxHQUFHLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUMxQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ2pCLENBQUMsQ0FBQTtBQXhCWSxRQUFBLElBQUksUUF3QmhCIn0=
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2JhcmNvZGVzL1tpZF0vcmVuZGVyL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
@@ -0,0 +1,5 @@
1
+ import { AuthenticatedMedusaRequest, MedusaResponse } from '@medusajs/framework/http';
2
+ import { AdminGetBarcodeType, AdminUpdateBarcodeType } from '../../../validators';
3
+ export declare const GET: (req: AuthenticatedMedusaRequest<AdminGetBarcodeType>, res: MedusaResponse) => Promise<void>;
4
+ export declare const POST: (req: AuthenticatedMedusaRequest<AdminUpdateBarcodeType>, res: MedusaResponse) => Promise<void>;
5
+ export declare const DELETE: (req: AuthenticatedMedusaRequest, res: MedusaResponse) => Promise<void>;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DELETE = exports.POST = exports.GET = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const barcode_1 = require("../../../../modules/barcode");
6
+ const GET = async (req, res) => {
7
+ const { id } = req.params;
8
+ const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
9
+ const { data: [barcode] } = await query.graph({
10
+ entity: 'barcode',
11
+ fields: req.queryConfig.fields,
12
+ filters: { id }
13
+ });
14
+ res.json({ barcode });
15
+ };
16
+ exports.GET = GET;
17
+ const POST = async (req, res) => {
18
+ const { id } = req.params;
19
+ const barcodeService = req.scope.resolve(barcode_1.BARCODE_MODULE);
20
+ const barcode = await barcodeService.updateBarcodes({
21
+ id,
22
+ ...req.validatedBody
23
+ });
24
+ res.json({ barcode });
25
+ };
26
+ exports.POST = POST;
27
+ const DELETE = async (req, res) => {
28
+ const { id } = req.params;
29
+ const barcodeService = req.scope.resolve(barcode_1.BARCODE_MODULE);
30
+ await barcodeService.deleteBarcodes([id]);
31
+ const link = req.scope.resolve(utils_1.ContainerRegistrationKeys.LINK);
32
+ await link.delete({
33
+ [barcode_1.BARCODE_MODULE]: {
34
+ barcode_id: id
35
+ }
36
+ });
37
+ res.json({ deleted: id });
38
+ };
39
+ exports.DELETE = DELETE;
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2JhcmNvZGVzL1tpZF0vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EscURBQXFFO0FBRXJFLHlEQUE0RDtBQUdyRCxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQ3ZCLEdBQW9ELEVBQ3BELEdBQW1CLEVBQ2xCLEVBQUU7SUFDSCxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQTtJQUN6QixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNoRSxNQUFNLEVBQ0wsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQ2YsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDckIsTUFBTSxFQUFFLFNBQVM7UUFDakIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTTtRQUM5QixPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUU7S0FDZixDQUFDLENBQUE7SUFDRixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtBQUN0QixDQUFDLENBQUE7QUFkWSxRQUFBLEdBQUcsT0FjZjtBQUVNLE1BQU0sSUFBSSxHQUFHLEtBQUssRUFDeEIsR0FBdUQsRUFDdkQsR0FBbUIsRUFDbEIsRUFBRTtJQUNILE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFBO0lBQ3pCLE1BQU0sY0FBYyxHQUFtQixHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyx3QkFBYyxDQUFDLENBQUE7SUFDeEUsTUFBTSxPQUFPLEdBQUcsTUFBTSxjQUFjLENBQUMsY0FBYyxDQUFDO1FBQ25ELEVBQUU7UUFDRixHQUFHLEdBQUcsQ0FBQyxhQUFhO0tBQ3BCLENBQUMsQ0FBQTtJQUNGLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0FBQ3RCLENBQUMsQ0FBQTtBQVhZLFFBQUEsSUFBSSxRQVdoQjtBQUVNLE1BQU0sTUFBTSxHQUFHLEtBQUssRUFBRSxHQUErQixFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUNwRixNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQTtJQUN6QixNQUFNLGNBQWMsR0FBbUIsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsd0JBQWMsQ0FBQyxDQUFBO0lBQ3hFLE1BQU0sY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDekMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDOUQsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ2pCLENBQUMsd0JBQWMsQ0FBQyxFQUFFO1lBQ2pCLFVBQVUsRUFBRSxFQUFFO1NBQ2Q7S0FDRCxDQUFDLENBQUE7SUFDRixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUE7QUFDMUIsQ0FBQyxDQUFBO0FBWFksUUFBQSxNQUFNLFVBV2xCIn0=
@@ -0,0 +1,5 @@
1
+ import { AuthenticatedMedusaRequest, MedusaResponse } from '@medusajs/framework/http';
2
+ import { AdminCreateBarcodeType, AdminDeleteBarcodesType, AdminGetBarcodesType } from '../../validators';
3
+ export declare const GET: (req: AuthenticatedMedusaRequest<AdminGetBarcodesType>, res: MedusaResponse) => Promise<void>;
4
+ export declare const POST: (req: AuthenticatedMedusaRequest<AdminCreateBarcodeType>, res: MedusaResponse) => Promise<void>;
5
+ export declare const DELETE: (req: AuthenticatedMedusaRequest<AdminDeleteBarcodesType>, res: MedusaResponse) => Promise<void>;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DELETE = exports.POST = exports.GET = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const barcode_1 = require("../../../modules/barcode");
6
+ const GET = async (req, res) => {
7
+ const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
8
+ const { data: barcodes, metadata } = await query.graph({
9
+ entity: 'barcode',
10
+ ...req.queryConfig
11
+ });
12
+ res.json({
13
+ barcodes,
14
+ count: metadata?.count,
15
+ limit: metadata?.take,
16
+ offset: metadata?.skip
17
+ });
18
+ };
19
+ exports.GET = GET;
20
+ const POST = async (req, res) => {
21
+ const barcodeService = req.scope.resolve(barcode_1.BARCODE_MODULE);
22
+ const barcode = await barcodeService.createBarcodes(req.validatedBody);
23
+ res.json({ barcode: barcode });
24
+ };
25
+ exports.POST = POST;
26
+ const DELETE = async (req, res) => {
27
+ const { ids } = req.validatedBody;
28
+ const barcodeService = req.scope.resolve(barcode_1.BARCODE_MODULE);
29
+ await barcodeService.deleteBarcodes(ids);
30
+ const link = req.scope.resolve(utils_1.ContainerRegistrationKeys.LINK);
31
+ await link.delete({
32
+ [barcode_1.BARCODE_MODULE]: {
33
+ barcode_id: ids
34
+ }
35
+ });
36
+ res.json({ deleted: ids });
37
+ };
38
+ exports.DELETE = DELETE;
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2JhcmNvZGVzL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFEQUFxRTtBQU1yRSxzREFBeUQ7QUFHbEQsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUN2QixHQUFxRCxFQUNyRCxHQUFtQixFQUNsQixFQUFFO0lBQ0gsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDaEUsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3RELE1BQU0sRUFBRSxTQUFTO1FBQ2pCLEdBQUcsR0FBRyxDQUFDLFdBQVc7S0FDbEIsQ0FBQyxDQUFBO0lBQ0YsR0FBRyxDQUFDLElBQUksQ0FBQztRQUNSLFFBQVE7UUFDUixLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUs7UUFDdEIsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJO1FBQ3JCLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSTtLQUN0QixDQUFDLENBQUE7QUFDSCxDQUFDLENBQUE7QUFmWSxRQUFBLEdBQUcsT0FlZjtBQUVNLE1BQU0sSUFBSSxHQUFHLEtBQUssRUFDeEIsR0FBdUQsRUFDdkQsR0FBbUIsRUFDbEIsRUFBRTtJQUNILE1BQU0sY0FBYyxHQUFtQixHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyx3QkFBYyxDQUFDLENBQUE7SUFDeEUsTUFBTSxPQUFPLEdBQUcsTUFBTSxjQUFjLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUN0RSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7QUFDL0IsQ0FBQyxDQUFBO0FBUFksUUFBQSxJQUFJLFFBT2hCO0FBRU0sTUFBTSxNQUFNLEdBQUcsS0FBSyxFQUMxQixHQUF3RCxFQUN4RCxHQUFtQixFQUNsQixFQUFFO0lBQ0gsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUE7SUFDakMsTUFBTSxjQUFjLEdBQW1CLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLHdCQUFjLENBQUMsQ0FBQTtJQUN4RSxNQUFNLGNBQWMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDeEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDOUQsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ2pCLENBQUMsd0JBQWMsQ0FBQyxFQUFFO1lBQ2pCLFVBQVUsRUFBRSxHQUFHO1NBQ2Y7S0FDRCxDQUFDLENBQUE7SUFDRixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUE7QUFDM0IsQ0FBQyxDQUFBO0FBZFksUUFBQSxNQUFNLFVBY2xCIn0=
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@medusajs/framework/http").MiddlewaresConfig;
2
+ export default _default;
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const http_1 = require("@medusajs/framework/http");
4
+ const validators_1 = require("./validators");
5
+ exports.default = (0, http_1.defineMiddlewares)([
6
+ {
7
+ matcher: '/admin/barcodes',
8
+ method: ['GET'],
9
+ middlewares: [
10
+ (0, http_1.validateAndTransformQuery)(validators_1.AdminGetBarcodes, {
11
+ defaults: ['id', 'inventory_item_id', 'code', 'type', 'metadata', 'created_at', 'updated_at'],
12
+ isList: true,
13
+ defaultLimit: 20
14
+ })
15
+ ]
16
+ },
17
+ {
18
+ matcher: '/admin/barcodes',
19
+ method: ['POST'],
20
+ middlewares: [(0, http_1.validateAndTransformBody)(validators_1.AdminCreateBarcode)]
21
+ },
22
+ {
23
+ matcher: '/admin/barcodes',
24
+ method: ['DELETE'],
25
+ middlewares: [(0, http_1.validateAndTransformBody)(validators_1.AdminDeleteBarcodes)]
26
+ },
27
+ {
28
+ matcher: '/admin/barcodes/:id',
29
+ method: ['GET'],
30
+ middlewares: [
31
+ (0, http_1.validateAndTransformQuery)(validators_1.AdminGetBarcode, {
32
+ defaults: ['id', 'inventory_item_id', 'code', 'type', 'metadata', 'created_at', 'updated_at'],
33
+ isList: false
34
+ })
35
+ ]
36
+ },
37
+ {
38
+ matcher: '/admin/barcodes/:id',
39
+ method: ['POST'],
40
+ middlewares: [(0, http_1.validateAndTransformBody)(validators_1.AdminUpdateBarcode)]
41
+ },
42
+ {
43
+ matcher: '/admin/barcode-generator',
44
+ method: ['GET'],
45
+ middlewares: [(0, http_1.validateAndTransformQuery)(validators_1.AdminRenderBarcode, {})]
46
+ },
47
+ {
48
+ matcher: '/admin/barcode-generator',
49
+ method: ['POST'],
50
+ middlewares: [(0, http_1.validateAndTransformBody)(validators_1.AdminRenderBarcode)]
51
+ }
52
+ ]);
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbURBQWlIO0FBQ2pILDZDQU9xQjtBQUVyQixrQkFBZSxJQUFBLHdCQUFpQixFQUFDO0lBQ2hDO1FBQ0MsT0FBTyxFQUFFLGlCQUFpQjtRQUMxQixNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFDZixXQUFXLEVBQUU7WUFDWixJQUFBLGdDQUF5QixFQUFDLDZCQUFnQixFQUFFO2dCQUMzQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBQztnQkFDN0YsTUFBTSxFQUFFLElBQUk7Z0JBQ1osWUFBWSxFQUFFLEVBQUU7YUFDaEIsQ0FBQztTQUNGO0tBQ0Q7SUFDRDtRQUNDLE9BQU8sRUFBRSxpQkFBaUI7UUFDMUIsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ2hCLFdBQVcsRUFBRSxDQUFDLElBQUEsK0JBQXdCLEVBQUMsK0JBQWtCLENBQUMsQ0FBQztLQUMzRDtJQUNEO1FBQ0MsT0FBTyxFQUFFLGlCQUFpQjtRQUMxQixNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUM7UUFDbEIsV0FBVyxFQUFFLENBQUMsSUFBQSwrQkFBd0IsRUFBQyxnQ0FBbUIsQ0FBQyxDQUFDO0tBQzVEO0lBQ0Q7UUFDQyxPQUFPLEVBQUUscUJBQXFCO1FBQzlCLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQztRQUNmLFdBQVcsRUFBRTtZQUNaLElBQUEsZ0NBQXlCLEVBQUMsNEJBQWUsRUFBRTtnQkFDMUMsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxZQUFZLENBQUM7Z0JBQzdGLE1BQU0sRUFBRSxLQUFLO2FBQ2IsQ0FBQztTQUNGO0tBQ0Q7SUFDRDtRQUNDLE9BQU8sRUFBRSxxQkFBcUI7UUFDOUIsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ2hCLFdBQVcsRUFBRSxDQUFDLElBQUEsK0JBQXdCLEVBQUMsK0JBQWtCLENBQUMsQ0FBQztLQUMzRDtJQUNEO1FBQ0MsT0FBTyxFQUFFLDBCQUEwQjtRQUNuQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFDZixXQUFXLEVBQUUsQ0FBQyxJQUFBLGdDQUF5QixFQUFDLCtCQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQ2hFO0lBQ0Q7UUFDQyxPQUFPLEVBQUUsMEJBQTBCO1FBQ25DLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUNoQixXQUFXLEVBQUUsQ0FBQyxJQUFBLCtCQUF3QixFQUFDLCtCQUFrQixDQUFDLENBQUM7S0FDM0Q7Q0FDRCxDQUFDLENBQUEifQ==
@@ -0,0 +1,103 @@
1
+ import { z } from '@medusajs/framework/zod';
2
+ export declare const AdminGetBarcode: z.ZodObject<{
3
+ fields: z.ZodOptional<z.ZodString>;
4
+ } & {
5
+ offset: z.ZodEffects<z.ZodDefault<z.ZodOptional<z.ZodNumber>>, number, unknown>;
6
+ limit: z.ZodEffects<z.ZodDefault<z.ZodOptional<z.ZodNumber>>, number, unknown>;
7
+ order: z.ZodOptional<z.ZodString> | z.ZodDefault<z.ZodOptional<z.ZodString>>;
8
+ with_deleted: z.ZodEffects<z.ZodOptional<z.ZodBoolean>, boolean | undefined, unknown>;
9
+ }, "strip", z.ZodTypeAny, {
10
+ offset: number;
11
+ limit: number;
12
+ order?: string | undefined;
13
+ fields?: string | undefined;
14
+ with_deleted?: boolean | undefined;
15
+ }, {
16
+ order?: string | undefined;
17
+ fields?: string | undefined;
18
+ offset?: unknown;
19
+ limit?: unknown;
20
+ with_deleted?: unknown;
21
+ }>;
22
+ export type AdminGetBarcodeType = z.infer<typeof AdminGetBarcode>;
23
+ export declare const AdminGetBarcodes: z.ZodObject<{
24
+ fields: z.ZodOptional<z.ZodString>;
25
+ } & {
26
+ offset: z.ZodEffects<z.ZodDefault<z.ZodOptional<z.ZodNumber>>, number, unknown>;
27
+ limit: z.ZodEffects<z.ZodDefault<z.ZodOptional<z.ZodNumber>>, number, unknown>;
28
+ order: z.ZodOptional<z.ZodString> | z.ZodDefault<z.ZodOptional<z.ZodString>>;
29
+ with_deleted: z.ZodEffects<z.ZodOptional<z.ZodBoolean>, boolean | undefined, unknown>;
30
+ } & {
31
+ q: z.ZodOptional<z.ZodString>;
32
+ }, "strip", z.ZodTypeAny, {
33
+ limit: number;
34
+ offset: number;
35
+ q?: string | undefined;
36
+ fields?: string | undefined;
37
+ order?: string | undefined;
38
+ with_deleted?: boolean | undefined;
39
+ }, {
40
+ limit?: unknown;
41
+ offset?: unknown;
42
+ q?: string | undefined;
43
+ fields?: string | undefined;
44
+ order?: string | undefined;
45
+ with_deleted?: unknown;
46
+ }>;
47
+ export type AdminGetBarcodesType = z.infer<typeof AdminGetBarcodes>;
48
+ export declare const AdminCreateBarcode: z.ZodObject<{
49
+ url: z.ZodString;
50
+ metadata: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
51
+ }, "strip", z.ZodTypeAny, {
52
+ url: string;
53
+ metadata?: Record<string, unknown> | null | undefined;
54
+ }, {
55
+ url: string;
56
+ metadata?: Record<string, unknown> | null | undefined;
57
+ }>;
58
+ export type AdminCreateBarcodeType = z.infer<typeof AdminCreateBarcode>;
59
+ export declare const AdminDeleteBarcodes: z.ZodObject<{
60
+ ids: z.ZodArray<z.ZodString, "many">;
61
+ }, "strip", z.ZodTypeAny, {
62
+ ids: string[];
63
+ }, {
64
+ ids: string[];
65
+ }>;
66
+ export type AdminDeleteBarcodesType = z.infer<typeof AdminDeleteBarcodes>;
67
+ export declare const AdminUpdateBarcode: z.ZodObject<{
68
+ url: z.ZodOptional<z.ZodString>;
69
+ metadata: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
70
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
71
+ url: z.ZodOptional<z.ZodString>;
72
+ metadata: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
73
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
74
+ url: z.ZodOptional<z.ZodString>;
75
+ metadata: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
76
+ }, z.ZodTypeAny, "passthrough">>;
77
+ export type AdminUpdateBarcodeType = z.infer<typeof AdminUpdateBarcode>;
78
+ export declare const AdminRenderBarcode: z.ZodObject<{
79
+ bcid: z.ZodOptional<z.ZodString>;
80
+ text: z.ZodOptional<z.ZodString>;
81
+ gtin: z.ZodOptional<z.ZodString>;
82
+ serial: z.ZodOptional<z.ZodString>;
83
+ height: z.ZodEffects<z.ZodOptional<z.ZodNumber>, number | undefined, unknown>;
84
+ width: z.ZodEffects<z.ZodOptional<z.ZodNumber>, number | undefined, unknown>;
85
+ parsefnc: z.ZodEffects<z.ZodOptional<z.ZodBoolean>, boolean | undefined, unknown>;
86
+ }, "strip", z.ZodTypeAny, {
87
+ bcid?: string | undefined;
88
+ text?: string | undefined;
89
+ gtin?: string | undefined;
90
+ serial?: string | undefined;
91
+ height?: number | undefined;
92
+ width?: number | undefined;
93
+ parsefnc?: boolean | undefined;
94
+ }, {
95
+ bcid?: string | undefined;
96
+ text?: string | undefined;
97
+ gtin?: string | undefined;
98
+ serial?: string | undefined;
99
+ height?: unknown;
100
+ width?: unknown;
101
+ parsefnc?: unknown;
102
+ }>;
103
+ export type AdminRenderBarcodeType = z.infer<typeof AdminRenderBarcode>;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AdminRenderBarcode = exports.AdminUpdateBarcode = exports.AdminDeleteBarcodes = exports.AdminCreateBarcode = exports.AdminGetBarcodes = exports.AdminGetBarcode = void 0;
4
+ const zod_1 = require("@medusajs/framework/zod");
5
+ const validators_1 = require("@medusajs/medusa/api/utils/validators");
6
+ exports.AdminGetBarcode = (0, validators_1.createFindParams)();
7
+ exports.AdminGetBarcodes = (0, validators_1.createFindParams)({
8
+ limit: 15,
9
+ offset: 0
10
+ }).extend({
11
+ q: zod_1.z.string().optional()
12
+ });
13
+ exports.AdminCreateBarcode = zod_1.z.object({
14
+ url: zod_1.z.string(),
15
+ metadata: zod_1.z.record(zod_1.z.unknown()).nullable().optional()
16
+ });
17
+ exports.AdminDeleteBarcodes = zod_1.z.object({
18
+ ids: zod_1.z.array(zod_1.z.string()).min(1, 'At least one ID is required')
19
+ });
20
+ exports.AdminUpdateBarcode = zod_1.z
21
+ .object({
22
+ url: zod_1.z.string().optional(),
23
+ metadata: zod_1.z.record(zod_1.z.unknown()).nullable().optional()
24
+ })
25
+ .passthrough();
26
+ exports.AdminRenderBarcode = zod_1.z.object({
27
+ bcid: zod_1.z.string().optional(), // Barcode type
28
+ text: zod_1.z.string().optional(), // Barcode value
29
+ gtin: zod_1.z.string().optional(),
30
+ serial: zod_1.z.string().optional(),
31
+ height: zod_1.z.preprocess(val => (val === '' || val == null ? undefined : val), zod_1.z.coerce.number().int().optional()), // Barcode height, in mm
32
+ width: zod_1.z.preprocess(val => {
33
+ return val && typeof val === 'string' ? parseInt(val) : val;
34
+ }, zod_1.z.number().optional()), // Barcode width, in mm
35
+ parsefnc: zod_1.z.preprocess(val => {
36
+ return val && typeof val === 'string' ? Boolean(val) : val;
37
+ }, zod_1.z.boolean().optional()) // Whether to parse the barcode value as a function code (e.g., for GS1 barcodes)
38
+ });
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcGkvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpREFBMkM7QUFDM0Msc0VBQXdFO0FBRTNELFFBQUEsZUFBZSxHQUFHLElBQUEsNkJBQWdCLEdBQUUsQ0FBQTtBQUdwQyxRQUFBLGdCQUFnQixHQUFHLElBQUEsNkJBQWdCLEVBQUM7SUFDaEQsS0FBSyxFQUFFLEVBQUU7SUFDVCxNQUFNLEVBQUUsQ0FBQztDQUNULENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDVCxDQUFDLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUN4QixDQUFDLENBQUE7QUFHVyxRQUFBLGtCQUFrQixHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDMUMsR0FBRyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7SUFDZixRQUFRLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDckQsQ0FBQyxDQUFBO0FBR1csUUFBQSxtQkFBbUIsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQzNDLEdBQUcsRUFBRSxPQUFDLENBQUMsS0FBSyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsNkJBQTZCLENBQUM7Q0FDOUQsQ0FBQyxDQUFBO0FBR1csUUFBQSxrQkFBa0IsR0FBRyxPQUFDO0tBQ2pDLE1BQU0sQ0FBQztJQUNQLEdBQUcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzFCLFFBQVEsRUFBRSxPQUFDLENBQUMsTUFBTSxDQUFDLE9BQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUNyRCxDQUFDO0tBQ0QsV0FBVyxFQUFFLENBQUE7QUFHRixRQUFBLGtCQUFrQixHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDMUMsSUFBSSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxlQUFlO0lBQzVDLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsZ0JBQWdCO0lBQzdDLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzNCLE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzdCLE1BQU0sRUFBRSxPQUFDLENBQUMsVUFBVSxDQUNuQixHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUNwRCxPQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUNsQyxFQUFFLHdCQUF3QjtJQUMzQixLQUFLLEVBQUUsT0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN6QixPQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFBO0lBQzVELENBQUMsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSx1QkFBdUI7SUFDbEQsUUFBUSxFQUFFLE9BQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDNUIsT0FBTyxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQTtJQUMzRCxDQUFDLEVBQUUsT0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsaUZBQWlGO0NBQzVHLENBQUMsQ0FBQSJ9
@@ -0,0 +1,22 @@
1
+ import { BarcodeService } from './service';
2
+ export declare const BARCODE_MODULE = "barcode";
3
+ declare const _default: import("@medusajs/types").ModuleExports<typeof BarcodeService> & {
4
+ linkable: {
5
+ readonly barcode: {
6
+ id: {
7
+ serviceName: "barcode";
8
+ field: "barcode";
9
+ linkable: "barcode_id";
10
+ primaryKey: "id";
11
+ };
12
+ toJSON: () => {
13
+ serviceName: "barcode";
14
+ field: "barcode";
15
+ linkable: "barcode_id";
16
+ primaryKey: "id";
17
+ };
18
+ };
19
+ };
20
+ };
21
+ export default _default;
22
+ export * from './service';
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.BARCODE_MODULE = void 0;
18
+ const utils_1 = require("@medusajs/framework/utils");
19
+ const service_1 = require("./service");
20
+ exports.BARCODE_MODULE = 'barcode';
21
+ exports.default = (0, utils_1.Module)(exports.BARCODE_MODULE, {
22
+ service: service_1.BarcodeService
23
+ });
24
+ __exportStar(require("./service"), exports);
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9iYXJjb2RlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEscURBQWtEO0FBQ2xELHVDQUEwQztBQUU3QixRQUFBLGNBQWMsR0FBRyxTQUFTLENBQUE7QUFFdkMsa0JBQWUsSUFBQSxjQUFNLEVBQUMsc0JBQWMsRUFBRTtJQUNyQyxPQUFPLEVBQUUsd0JBQWM7Q0FDdkIsQ0FBQyxDQUFBO0FBRUYsNENBQXlCIn0=
@@ -0,0 +1,5 @@
1
+ import { Migration } from "@medusajs/framework/mikro-orm/migrations";
2
+ export declare class Migration20260409171736 extends Migration {
3
+ up(): Promise<void>;
4
+ down(): Promise<void>;
5
+ }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20260409171736 = void 0;
4
+ const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
5
+ class Migration20260409171736 extends migrations_1.Migration {
6
+ async up() {
7
+ this.addSql(`create table if not exists "barcode" ("id" text not null, "url" text not null, "metadata" jsonb null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "barcode_pkey" primary key ("id"));`);
8
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_barcode_deleted_at" ON "barcode" ("deleted_at") WHERE deleted_at IS NULL;`);
9
+ }
10
+ async down() {
11
+ this.addSql(`drop table if exists "barcode" cascade;`);
12
+ }
13
+ }
14
+ exports.Migration20260409171736 = Migration20260409171736;
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjA0MDkxNzE3MzYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9iYXJjb2RlL21pZ3JhdGlvbnMvTWlncmF0aW9uMjAyNjA0MDkxNzE3MzYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUVBQXFFO0FBRXJFLE1BQWEsdUJBQXdCLFNBQVEsc0JBQVM7SUFFM0MsS0FBSyxDQUFDLEVBQUU7UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLHVSQUF1UixDQUFDLENBQUM7UUFDclMsSUFBSSxDQUFDLE1BQU0sQ0FBQywyR0FBMkcsQ0FBQyxDQUFDO0lBQzNILENBQUM7SUFFUSxLQUFLLENBQUMsSUFBSTtRQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLHlDQUF5QyxDQUFDLENBQUM7SUFDekQsQ0FBQztDQUVGO0FBWEQsMERBV0MifQ==
@@ -0,0 +1,5 @@
1
+ export declare const Barcode: import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
2
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
3
+ url: import("@medusajs/framework/utils").TextProperty;
4
+ metadata: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
5
+ }>, "barcode">;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Barcode = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ // store one barcode per inventory item, which can be used for scanning items during fulfillment or receiving
6
+ // learn how to use the file service to attach images of the barcode for scanning in the future
7
+ exports.Barcode = utils_1.model.define('barcode', {
8
+ id: utils_1.model.id().primaryKey(),
9
+ url: utils_1.model.text(),
10
+ metadata: utils_1.model.json().nullable()
11
+ });
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyY29kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2JhcmNvZGUvbW9kZWxzL2JhcmNvZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQWlEO0FBRWpELDZHQUE2RztBQUM3RywrRkFBK0Y7QUFFbEYsUUFBQSxPQUFPLEdBQUcsYUFBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUU7SUFDOUMsRUFBRSxFQUFFLGFBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUU7SUFDM0IsR0FBRyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDakIsUUFBUSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDakMsQ0FBQyxDQUFBIn0=
@@ -0,0 +1,15 @@
1
+ import { InferTypeOf } from '@medusajs/framework/types';
2
+ import * as bwipjs from '@bwip-js/node';
3
+ import { Barcode } from './models/barcode';
4
+ export type Barcode = InferTypeOf<typeof Barcode>;
5
+ declare const BarcodeService_base: import("@medusajs/framework/utils").MedusaServiceReturnType<import("@medusajs/framework/utils").ModelConfigurationsToConfigTemplate<{
6
+ readonly Barcode: import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
7
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
8
+ url: import("@medusajs/framework/utils").TextProperty;
9
+ metadata: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
10
+ }>, "barcode">;
11
+ }>>;
12
+ export declare class BarcodeService extends BarcodeService_base {
13
+ render(options: bwipjs.RenderOptions): Promise<Buffer>;
14
+ }
15
+ export {};
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.BarcodeService = void 0;
37
+ const utils_1 = require("@medusajs/framework/utils");
38
+ const bwipjs = __importStar(require("@bwip-js/node"));
39
+ const barcode_1 = require("./models/barcode");
40
+ class BarcodeService extends (0, utils_1.MedusaService)({
41
+ Barcode: barcode_1.Barcode
42
+ }) {
43
+ async render(options) {
44
+ // remove undefined options
45
+ Object.keys(options).forEach(key => options[key] === undefined && delete options[key]);
46
+ return await bwipjs.toBuffer(options);
47
+ }
48
+ }
49
+ exports.BarcodeService = BarcodeService;
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2JhcmNvZGUvc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxxREFBeUQ7QUFDekQsc0RBQXVDO0FBQ3ZDLDhDQUEwQztBQUkxQyxNQUFhLGNBQWUsU0FBUSxJQUFBLHFCQUFhLEVBQUM7SUFDakQsT0FBTyxFQUFQLGlCQUFPO0NBQ1AsQ0FBQztJQUNELEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBNkI7UUFDekMsMkJBQTJCO1FBQzNCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsSUFBSSxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBQ3RGLE9BQU8sTUFBTSxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3RDLENBQUM7Q0FDRDtBQVJELHdDQVFDIn0=
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2026 Lacey Pevey
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,48 @@
1
+ # medusa-plugin-barcodes
2
+
3
+ Barcode generation and management plugin for Medusa v2. Generate and store barcodes for inventory items with GS1 DataMatrix support.
4
+
5
+ [Documentation](https://pevey.com/medusa-plugin-barcodes)
6
+
7
+ If you are not familiar with Medusa, you can learn more on [the project web site](https://www.medusajs.com/).
8
+
9
+ ## Features
10
+
11
+ - Barcode CRUD with URL and metadata storage
12
+ - On-the-fly barcode image generation (PNG) via admin API
13
+ - GS1 DataMatrix support with GTIN and serial number encoding
14
+ - Configurable barcode type, dimensions, and rendering options
15
+ - Powered by bwip-js for high-quality barcode rendering
16
+
17
+ ## Installation
18
+
19
+ Inside your medusa backend root folder:
20
+
21
+ ```bash
22
+ yarn add medusa-plugin-barcodes
23
+ ```
24
+
25
+ Replace "yarn add" with the correct command for your package manager if you are using (for example) npm, pnpm, or bun.
26
+
27
+ ## Configuration
28
+
29
+ Enable in your `medusa-config.ts` file. Example:
30
+
31
+ ```ts
32
+ module.exports = defineConfig({
33
+ //... other config
34
+ plugins: [
35
+ {
36
+ resolve: 'medusa-plugin-barcodes',
37
+ options: {}
38
+ }
39
+ // ... other plugins
40
+ ]
41
+ })
42
+ ```
43
+
44
+ ## Usage
45
+
46
+ - Manage barcodes via the admin API at `/admin/barcodes`.
47
+ - Generate barcode images via `GET /admin/barcode-generator` with query parameters.
48
+ - Supported parameters: `bcid` (barcode type), `text`, `gtin`, `serial`, `height`, `width`.
package/package.json ADDED
@@ -0,0 +1,86 @@
1
+ {
2
+ "name": "medusa-plugin-barcodes",
3
+ "version": "0.1.0",
4
+ "description": "Barcode generation and management plugin for Medusa v2",
5
+ "author": "Lacey Pevey",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/pevey/medusa-plugins"
10
+ },
11
+ "homepage": "https://pevey.com/medusa-plugin-barcodes",
12
+ "files": [
13
+ ".medusa/server"
14
+ ],
15
+ "exports": {
16
+ "./package.json": "./package.json",
17
+ "./.medusa/server/src/modules/*": {
18
+ "types": "./.medusa/server/src/modules/*/index.d.ts",
19
+ "default": "./.medusa/server/src/modules/*/index.js"
20
+ },
21
+ "./modules/*": {
22
+ "types": "./.medusa/server/src/modules/*/index.d.ts",
23
+ "default": "./.medusa/server/src/modules/*/index.js"
24
+ },
25
+ "./providers/*": {
26
+ "types": "./.medusa/server/src/providers/*/index.d.ts",
27
+ "default": "./.medusa/server/src/providers/*/index.js"
28
+ },
29
+ "./*": {
30
+ "types": "./.medusa/server/src/*.d.ts",
31
+ "default": "./.medusa/server/src/*.js"
32
+ },
33
+ ".": {
34
+ "types": "./.medusa/server/src/modules/barcode/index.d.ts",
35
+ "default": "./.medusa/server/src/modules/barcode/index.js"
36
+ }
37
+ },
38
+ "keywords": [
39
+ "medusa-v2",
40
+ "medusa",
41
+ "barcodes",
42
+ "barcode generator",
43
+ "inventory",
44
+ "GS1"
45
+ ],
46
+ "dependencies": {
47
+ "@bwip-js/node": "^4.5.1"
48
+ },
49
+ "scripts": {
50
+ "build": "medusa plugin:build",
51
+ "clean:snapshots": "find . -name '.snapshot-*.json' -path '*/migrations/*' -delete",
52
+ "dev": "medusa plugin:develop",
53
+ "prepublishOnly": "medusa plugin:build",
54
+ "test:unit": "TEST_TYPE=unit NODE_OPTIONS=--experimental-vm-modules jest --silent --runInBand --detectOpenHandles --forceExit --passWithNoTests",
55
+ "test:integration:http": "TEST_TYPE=integration:http NODE_OPTIONS=--experimental-vm-modules jest --silent=false --runInBand --detectOpenHandles --forceExit"
56
+ },
57
+ "devDependencies": {
58
+ "@medusajs/admin-sdk": "2.13.6",
59
+ "@medusajs/cli": "2.13.6",
60
+ "@medusajs/framework": "2.13.6",
61
+ "@medusajs/icons": "2.13.6",
62
+ "@medusajs/ui": "4.0.25",
63
+ "@swc/core": "^1.7.28",
64
+ "@swc/jest": "^0.2.39",
65
+ "@types/jest": "^30.0.0",
66
+ "@types/node": "^20.0.0",
67
+ "@types/react": "^18.3.2",
68
+ "@types/react-dom": "^18.2.25",
69
+ "jest": "^29.7.0",
70
+ "prop-types": "^15.8.1",
71
+ "react": "^18.2.0",
72
+ "react-dom": "^18.2.0",
73
+ "ts-node": "^10.9.2",
74
+ "typescript": "^5.6.2",
75
+ "vite": "^5.2.11",
76
+ "yalc": "^1.0.0-pre.53"
77
+ },
78
+ "peerDependencies": {
79
+ "@medusajs/framework": "2.13.6",
80
+ "@medusajs/js-sdk": "2.13.6",
81
+ "@medusajs/medusa": "2.13.6"
82
+ },
83
+ "engines": {
84
+ "node": ">=20"
85
+ }
86
+ }