@gorgo/medusa-integration 0.0.3 → 0.0.5

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 (75) hide show
  1. package/.medusa/server/src/admin/index.js +546 -119
  2. package/.medusa/server/src/admin/index.mjs +549 -122
  3. package/.medusa/server/src/api/admin/integrations/[provider_id]/route.js +7 -2
  4. package/.medusa/server/src/api/admin/integrations/__tests__/helpers.unit.spec.d.ts +1 -0
  5. package/.medusa/server/src/api/admin/integrations/__tests__/helpers.unit.spec.js +30 -0
  6. package/.medusa/server/src/api/admin/integrations/_helpers.d.ts +3 -3
  7. package/.medusa/server/src/api/admin/integrations/_helpers.js +8 -8
  8. package/.medusa/server/src/api/admin/integrations/catalog/route.d.ts +3 -0
  9. package/.medusa/server/src/api/admin/integrations/catalog/route.js +10 -0
  10. package/.medusa/server/src/api/admin/integrations/middlewares.js +16 -1
  11. package/.medusa/server/src/api/admin/integrations/route.js +17 -3
  12. package/.medusa/server/src/api/admin/integrations/validators.d.ts +7 -0
  13. package/.medusa/server/src/api/admin/integrations/validators.js +8 -2
  14. package/.medusa/server/src/index.d.ts +1 -1
  15. package/.medusa/server/src/jobs/__tests__/test-integration-connections.unit.spec.d.ts +1 -0
  16. package/.medusa/server/src/jobs/__tests__/test-integration-connections.unit.spec.js +27 -0
  17. package/.medusa/server/src/jobs/test-integration-connections.d.ts +7 -0
  18. package/.medusa/server/src/jobs/test-integration-connections.js +21 -8
  19. package/.medusa/server/src/lib/__tests__/catalog-fallback.unit.spec.d.ts +1 -0
  20. package/.medusa/server/src/lib/__tests__/catalog-fallback.unit.spec.js +37 -0
  21. package/.medusa/server/src/lib/__tests__/catalog.unit.spec.d.ts +1 -0
  22. package/.medusa/server/src/lib/__tests__/catalog.unit.spec.js +71 -0
  23. package/.medusa/server/src/lib/catalog.d.ts +9 -0
  24. package/.medusa/server/src/lib/catalog.generated.d.ts +2 -0
  25. package/.medusa/server/src/lib/catalog.generated.js +88 -0
  26. package/.medusa/server/src/lib/catalog.js +55 -0
  27. package/.medusa/server/src/modules/integration/descriptor/__tests__/build-zod.unit.spec.js +43 -1
  28. package/.medusa/server/src/modules/integration/descriptor/__tests__/define.unit.spec.js +3 -3
  29. package/.medusa/server/src/modules/integration/descriptor/__tests__/introspect.unit.spec.js +3 -3
  30. package/.medusa/server/src/modules/integration/descriptor/__tests__/section-write.unit.spec.d.ts +1 -0
  31. package/.medusa/server/src/modules/integration/descriptor/__tests__/section-write.unit.spec.js +64 -0
  32. package/.medusa/server/src/modules/integration/descriptor/__tests__/validate.unit.spec.js +28 -2
  33. package/.medusa/server/src/modules/integration/descriptor/build-zod.js +7 -1
  34. package/.medusa/server/src/modules/integration/descriptor/define.d.ts +5 -5
  35. package/.medusa/server/src/modules/integration/descriptor/define.js +1 -1
  36. package/.medusa/server/src/modules/integration/descriptor/introspect.js +2 -2
  37. package/.medusa/server/src/modules/integration/descriptor/meta.d.ts +1 -1
  38. package/.medusa/server/src/modules/integration/descriptor/section-write.d.ts +10 -0
  39. package/.medusa/server/src/modules/integration/descriptor/section-write.js +24 -0
  40. package/.medusa/server/src/modules/integration/loaders/__tests__/package-meta.unit.spec.d.ts +1 -0
  41. package/.medusa/server/src/modules/integration/loaders/__tests__/package-meta.unit.spec.js +63 -0
  42. package/.medusa/server/src/modules/integration/loaders/load-providers.js +10 -38
  43. package/.medusa/server/src/modules/integration/loaders/package-meta.d.ts +22 -0
  44. package/.medusa/server/src/modules/integration/loaders/package-meta.js +45 -0
  45. package/.medusa/server/src/modules/integration/loaders/resolve-package-meta.d.ts +8 -0
  46. package/.medusa/server/src/modules/integration/loaders/resolve-package-meta.js +59 -0
  47. package/.medusa/server/src/modules/integration/migrations/Migration20260720130920.d.ts +5 -0
  48. package/.medusa/server/src/modules/integration/migrations/Migration20260720130920.js +18 -0
  49. package/.medusa/server/src/modules/integration/migrations/Migration20260724101525.d.ts +5 -0
  50. package/.medusa/server/src/modules/integration/migrations/Migration20260724101525.js +16 -0
  51. package/.medusa/server/src/modules/integration/models/integration.d.ts +9 -5
  52. package/.medusa/server/src/modules/integration/models/integration.js +3 -3
  53. package/.medusa/server/src/modules/integration/services/__tests__/integration-module.unit.spec.d.ts +1 -0
  54. package/.medusa/server/src/modules/integration/services/__tests__/integration-module.unit.spec.js +344 -0
  55. package/.medusa/server/src/modules/integration/services/__tests__/integration-provider.unit.spec.js +2 -2
  56. package/.medusa/server/src/modules/integration/services/integration-module.d.ts +48 -11
  57. package/.medusa/server/src/modules/integration/services/integration-module.js +56 -6
  58. package/.medusa/server/src/modules/integration/types/index.d.ts +11 -0
  59. package/.medusa/server/src/modules/integration/types/index.js +4 -2
  60. package/.medusa/server/src/modules/integration/utils/integration.d.ts +11 -7
  61. package/.medusa/server/src/modules/integration/utils/integration.js +12 -8
  62. package/.medusa/server/src/subscribers/__tests__/invalidate-options-cache.unit.spec.d.ts +1 -0
  63. package/.medusa/server/src/subscribers/__tests__/invalidate-options-cache.unit.spec.js +53 -0
  64. package/.medusa/server/src/types/http/integration/admin/entities.d.ts +39 -4
  65. package/.medusa/server/src/types/http/integration/admin/responses.d.ts +17 -2
  66. package/.medusa/server/src/types/integration/common.d.ts +3 -3
  67. package/.medusa/server/src/workflows/integration/steps/apply-integration-section.d.ts +1 -1
  68. package/.medusa/server/src/workflows/integration/steps/apply-integration-section.js +13 -20
  69. package/.medusa/server/src/workflows/integration/steps/set-integration-enabled.d.ts +1 -1
  70. package/.medusa/server/src/workflows/integration/steps/upsert-integration-record.d.ts +2 -2
  71. package/.medusa/server/src/workflows/integration/workflows/set-integration-enabled.d.ts +1 -1
  72. package/.medusa/server/src/workflows/integration/workflows/upsert-integration.js +2 -2
  73. package/README.md +41 -2
  74. package/README.ru.md +85 -0
  75. package/package.json +7 -3
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const globals_1 = require("@jest/globals");
4
+ const package_meta_1 = require("../package-meta");
5
+ (0, globals_1.describe)("authorFromScope", () => {
6
+ (0, globals_1.it)("capitalizes the npm scope", () => {
7
+ (0, globals_1.expect)((0, package_meta_1.authorFromScope)("@gorgo/medusa-payment-tkassa")).toBe("Gorgo");
8
+ });
9
+ (0, globals_1.it)("returns null for unscoped or blank names", () => {
10
+ (0, globals_1.expect)((0, package_meta_1.authorFromScope)("medusa-plugin")).toBeNull();
11
+ (0, globals_1.expect)((0, package_meta_1.authorFromScope)(null)).toBeNull();
12
+ });
13
+ });
14
+ (0, globals_1.describe)("parsePackageMeta", () => {
15
+ (0, globals_1.it)("reads name + version", () => {
16
+ const m = (0, package_meta_1.parsePackageMeta)({ name: "@gorgo/x", version: "1.2.3" });
17
+ (0, globals_1.expect)(m.name).toBe("@gorgo/x");
18
+ (0, globals_1.expect)(m.version).toBe("1.2.3");
19
+ });
20
+ (0, globals_1.it)("parses a string author with a URL and derives nothing extra", () => {
21
+ const m = (0, package_meta_1.parsePackageMeta)({ name: "@gorgo/x", version: "1.0.0", author: "Gorgo <hi@gorgo.dev> (https://gorgo.dev)" });
22
+ (0, globals_1.expect)(m.author).toBe("Gorgo");
23
+ (0, globals_1.expect)(m.authorUrl).toBe("https://gorgo.dev");
24
+ });
25
+ (0, globals_1.it)("parses an object author", () => {
26
+ const m = (0, package_meta_1.parsePackageMeta)({ name: "@gorgo/x", version: "1.0.0", author: { name: "Gorgo", url: "https://gorgo.dev" } });
27
+ (0, globals_1.expect)(m.author).toBe("Gorgo");
28
+ (0, globals_1.expect)(m.authorUrl).toBe("https://gorgo.dev");
29
+ });
30
+ (0, globals_1.it)("falls back to scope-derived author and homepage URL when author is absent", () => {
31
+ const m = (0, package_meta_1.parsePackageMeta)({ name: "@gorgo/x", version: "1.0.0", homepage: "https://gorgo.dev/x" });
32
+ (0, globals_1.expect)(m.author).toBe("Gorgo");
33
+ (0, globals_1.expect)(m.authorUrl).toBe("https://gorgo.dev/x");
34
+ });
35
+ (0, globals_1.it)("yields nulls when nothing is resolvable", () => {
36
+ const m = (0, package_meta_1.parsePackageMeta)({ name: "plain", version: "1.0.0" });
37
+ (0, globals_1.expect)(m.author).toBeNull();
38
+ (0, globals_1.expect)(m.authorUrl).toBeNull();
39
+ });
40
+ (0, globals_1.it)("does not throw on a non-string author.name and falls back to scope-derived author", () => {
41
+ const m = (0, package_meta_1.parsePackageMeta)({ name: "@gorgo/x", version: "1.0.0", author: { name: 123 } });
42
+ (0, globals_1.expect)(m.author).toBe("Gorgo");
43
+ });
44
+ (0, globals_1.it)("does not throw on a non-string homepage and yields a null authorUrl", () => {
45
+ const m = (0, package_meta_1.parsePackageMeta)({ name: "plain", version: "1.0.0", homepage: { url: "https://gorgo.dev" } });
46
+ (0, globals_1.expect)(m.authorUrl).toBeNull();
47
+ });
48
+ (0, globals_1.it)("uses the object author's name with no url, falling back to homepage for authorUrl", () => {
49
+ const m = (0, package_meta_1.parsePackageMeta)({
50
+ name: "@gorgo/x",
51
+ version: "1.0.0",
52
+ author: { name: "Gorgo" },
53
+ homepage: "https://gorgo.dev/x",
54
+ });
55
+ (0, globals_1.expect)(m.author).toBe("Gorgo");
56
+ (0, globals_1.expect)(m.authorUrl).toBe("https://gorgo.dev/x");
57
+ });
58
+ (0, globals_1.it)("falls back to scope-derived author on an empty-string author", () => {
59
+ const m = (0, package_meta_1.parsePackageMeta)({ name: "@gorgo/x", version: "1.0.0", author: "" });
60
+ (0, globals_1.expect)(m.author).toBe("Gorgo");
61
+ });
62
+ });
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS1tZXRhLnVuaXQuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2ludGVncmF0aW9uL2xvYWRlcnMvX190ZXN0c19fL3BhY2thZ2UtbWV0YS51bml0LnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyQ0FBb0Q7QUFDcEQsa0RBQW1FO0FBRW5FLElBQUEsa0JBQVEsRUFBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUU7SUFDL0IsSUFBQSxZQUFFLEVBQUMsMkJBQTJCLEVBQUUsR0FBRyxFQUFFO1FBQ25DLElBQUEsZ0JBQU0sRUFBQyxJQUFBLDhCQUFlLEVBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUN2RSxDQUFDLENBQUMsQ0FBQTtJQUNGLElBQUEsWUFBRSxFQUFDLDBDQUEwQyxFQUFFLEdBQUcsRUFBRTtRQUNsRCxJQUFBLGdCQUFNLEVBQUMsSUFBQSw4QkFBZSxFQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUE7UUFDbkQsSUFBQSxnQkFBTSxFQUFDLElBQUEsOEJBQWUsRUFBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQzFDLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUE7QUFFRixJQUFBLGtCQUFRLEVBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFO0lBQ2hDLElBQUEsWUFBRSxFQUFDLHNCQUFzQixFQUFFLEdBQUcsRUFBRTtRQUM5QixNQUFNLENBQUMsR0FBRyxJQUFBLCtCQUFnQixFQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtRQUNsRSxJQUFBLGdCQUFNLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUMvQixJQUFB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
@@ -3,12 +3,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- const node_path_1 = __importDefault(require("node:path"));
7
6
  const awilix_1 = require("@medusajs/framework/awilix");
8
7
  const modules_sdk_1 = require("@medusajs/framework/modules-sdk");
9
8
  const telemetry_1 = require("@gorgo/telemetry");
10
9
  const types_1 = require("../types");
11
10
  const integration_provider_1 = __importDefault(require("../services/integration-provider"));
11
+ const resolve_package_meta_1 = require("./resolve-package-meta");
12
12
  /**
13
13
  * Registers each integration-provider class into the module container under
14
14
  * `int_<identifier>[_<id>]`, mirroring how the payment/fulfillment modules load
@@ -28,47 +28,17 @@ const registrationFn = async (klass, container, pluginOptions) => {
28
28
  });
29
29
  container.registerAdd(types_1.IntegrationProviderRegistrationKey, (0, awilix_1.asValue)(key));
30
30
  };
31
- const trackStarted = async (container, providers) => {
31
+ const trackStarted = async (container, packageMeta) => {
32
32
  try {
33
33
  const telemetry = (0, telemetry_1.createTelemetryClient)({ packageDir: __dirname });
34
- // Map each provider's static identifier → its npm package (name/version), resolved from the
35
- // `resolve` specifier. identifier↔package is 1:1, so this keys the lookup below no matter
36
- // how many instances share the same class.
37
- const pkgByIdentifier = new Map();
38
- for (const entry of providers) {
39
- const spec = entry.resolve;
40
- if (!spec)
41
- continue;
42
- try {
43
- const pkg = await (0, telemetry_1.findPackageJson)(node_path_1.default.dirname(require.resolve(spec)));
44
- if (!pkg)
45
- continue;
46
- const mod = require(spec);
47
- const services = (mod?.default ?? mod)?.services ?? [];
48
- for (const svc of services) {
49
- if (svc?.identifier)
50
- pkgByIdentifier.set(svc.identifier, pkg);
51
- }
52
- }
53
- catch {
54
- // a single unresolvable provider must not sink the whole event
55
- }
56
- }
57
- let machineId = "";
58
- try {
59
- machineId = (0, telemetry_1.getMachineId)();
60
- }
61
- catch {
62
- // hash without a salt rather than dropping the event
63
- }
64
34
  const providerService = new integration_provider_1.default(container.cradle);
65
35
  const list = providerService.listRegistrations().map((r) => {
66
- const pkg = pkgByIdentifier.get(r.identifier);
36
+ const meta = packageMeta[r.identifier];
67
37
  return {
68
- module: r.provider.descriptor.module,
38
+ category: r.provider.descriptor.category,
69
39
  id: r.identifier,
70
- package_name: pkg?.name ?? null,
71
- package_version: pkg?.version ?? null,
40
+ package_name: meta?.name ?? null,
41
+ package_version: meta?.version ?? null,
72
42
  };
73
43
  });
74
44
  telemetry.track("plugin.started", { providers: list, provider_count: list.length });
@@ -78,8 +48,10 @@ const trackStarted = async (container, providers) => {
78
48
  }
79
49
  };
80
50
  exports.default = async ({ container, options, }) => {
51
+ const packageMeta = (0, resolve_package_meta_1.resolvePackageMetaByIdentifier)(options?.providers ?? []);
81
52
  container.register({
82
53
  [types_1.INTEGRATION_OPTIONS_KEY]: (0, awilix_1.asValue)(options ?? {}),
54
+ [types_1.INTEGRATION_PACKAGE_META_KEY]: (0, awilix_1.asValue)(packageMeta),
83
55
  });
84
56
  await (0, modules_sdk_1.moduleProviderLoader)({
85
57
  container,
@@ -87,6 +59,6 @@ exports.default = async ({ container, options, }) => {
87
59
  registerServiceFn: registrationFn,
88
60
  });
89
61
  // Providers are now registered — announce them (guarded; never throws).
90
- await trackStarted(container, options?.providers ?? []);
62
+ await trackStarted(container, packageMeta);
91
63
  };
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC1wcm92aWRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9pbnRlZ3JhdGlvbi9sb2FkZXJzL2xvYWQtcHJvdmlkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsMERBQTRCO0FBQzVCLHVEQUEwRTtBQUMxRSxpRUFBc0U7QUFNdEUsZ0RBQXVGO0FBQ3ZGLG9DQUlpQjtBQUNqQiw0RkFBeUU7QUFFekU7Ozs7OztHQU1HO0FBQ0gsTUFBTSxjQUFjLEdBQUcsS0FBSyxFQUMxQixLQUFVLEVBQ1YsU0FBYyxFQUNkLGFBQWlFLEVBQ2pFLEVBQUU7SUFDRixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQTtJQUMzQyxNQUFNLEdBQUcsR0FBRyxHQUFHLDZDQUFxQyxHQUFHLEtBQUssQ0FBQyxVQUFVLEdBQ3JFLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDbEMsRUFBRSxDQUFBO0lBRUYsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUNqQixtRkFBbUY7UUFDbkYsdUZBQXVGO1FBQ3ZGLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBQSxtQkFBVSxFQUFDLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRTtZQUN2RixRQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsSUFBSSxpQkFBUSxDQUFDLFNBQVM7U0FDaEQsQ0FBQztLQUNILENBQUMsQ0FBQTtJQUVGLFNBQVMsQ0FBQyxXQUFXLENBQUMsMENBQWtDLEVBQUUsSUFBQSxnQkFBTyxFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7QUFDekUsQ0FBQyxDQUFBO0FBU0QsTUFBTSxZQUFZLEdBQUcsS0FBSyxFQUFFLFNBQWMsRUFBRSxTQUEyQixFQUFpQixF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
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC1wcm92aWRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9pbnRlZ3JhdGlvbi9sb2FkZXJzL2xvYWQtcHJvdmlkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsdURBQTBFO0FBQzFFLGlFQUFzRTtBQU10RSxnREFBc0U7QUFDdEUsb0NBTWlCO0FBQ2pCLDRGQUF5RTtBQUN6RSxpRUFBdUU7QUFFdkU7Ozs7OztHQU1HO0FBQ0gsTUFBTSxjQUFjLEdBQUcsS0FBSyxFQUMxQixLQUFVLEVBQ1YsU0FBYyxFQUNkLGFBQWlFLEVBQ2pFLEVBQUU7SUFDRixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQTtJQUMzQyxNQUFNLEdBQUcsR0FBRyxHQUFHLDZDQUFxQyxHQUFHLEtBQUssQ0FBQyxVQUFVLEdBQ3JFLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDbEMsRUFBRSxDQUFBO0lBRUYsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUNqQixtRkFBbUY7UUFDbkYsdUZBQXVGO1FBQ3ZGLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBQSxtQkFBVSxFQUFDLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRTtZQUN2RixRQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsSUFBSSxpQkFBUSxDQUFDLFNBQVM7U0FDaEQsQ0FBQztLQUNILENBQUMsQ0FBQTtJQUVGLFNBQVMsQ0FBQyxXQUFXLENBQUMsMENBQWtDLEVBQUUsSUFBQSxnQkFBTyxFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7QUFDekUsQ0FBQyxDQUFBO0FBU0QsTUFBTSxZQUFZLEdBQUcsS0FBSyxFQUFFLFNBQWMsRUFBRSxXQUEyQixFQUFpQixFQUFFO0lBQ3hGLElBQUksQ0FBQztRQUNILE1BQU0sU0FBUyxHQUFHLElBQUEsaUNBQXFCLEVBQUMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQTtRQUVsRSxNQUFNLGVBQWUsR0FBRyxJQUFJLDhCQUEwQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN4RSxNQUFNLElBQUksR0FBd0IsZUFBZSxDQUFDLGlCQUFpQixFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDOUUsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQTtZQUN0QyxPQUFPO2dCQUNMLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxRQUFRO2dCQUN4QyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFVBQVU7Z0JBQ2hCLFlBQVksRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUk7Z0JBQ2hDLGVBQWUsRUFBRSxJQUFJLEVBQUUsT0FBTyxJQUFJLElBQUk7YUFDdkMsQ0FBQTtRQUNILENBQUMsQ0FBQyxDQUFBO1FBRUYsU0FBUyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFBO0lBQ3JGLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCw2QkFBNkI7SUFDL0IsQ0FBQztBQUNILENBQUMsQ0FBQTtBQUVELGtCQUFlLEtBQUssRUFBRSxFQUNwQixTQUFTLEVBQ1QsT0FBTyxHQU1SLEVBQWlCLEVBQUU7SUFDbEIsTUFBTSxXQUFXLEdBQUcsSUFBQSxxREFBOEIsRUFBQyxPQUFPLEVBQUUsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBRTVFLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFDakIsQ0FBQywrQkFBdUIsQ0FBQyxFQUFFLElBQUEsZ0JBQU8sRUFBQyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ2pELENBQUMsb0NBQTRCLENBQUMsRUFBRSxJQUFBLGdCQUFPLEVBQUMsV0FBVyxDQUFDO0tBQ3JELENBQUMsQ0FBQTtJQUVGLE1BQU0sSUFBQSxrQ0FBb0IsRUFBQztRQUN6QixTQUFTO1FBQ1QsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLElBQUksRUFBRTtRQUNuQyxpQkFBaUIsRUFBRSxjQUFjO0tBQ2xDLENBQUMsQ0FBQTtJQUVGLHdFQUF3RTtJQUN4RSxNQUFNLFlBQVksQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUE7QUFDNUMsQ0FBQyxDQUFBIn0=
@@ -0,0 +1,22 @@
1
+ import type { PackageMeta } from "../types";
2
+ type RawPkg = {
3
+ name?: string;
4
+ version?: string;
5
+ author?: string | {
6
+ name?: string;
7
+ url?: string;
8
+ };
9
+ homepage?: string;
10
+ };
11
+ /**
12
+ * Derive a human author name from an npm scope: "@gorgo/medusa-payment-tkassa" → "Gorgo".
13
+ * Returns null for unscoped/blank names.
14
+ */
15
+ export declare function authorFromScope(name: string | null | undefined): string | null;
16
+ /**
17
+ * Normalize a raw package.json into the fields the admin list needs. `author` may be a string
18
+ * ("Name <email> (url)") or an object ({ name, url }); when absent, the name is derived from the
19
+ * npm scope. `authorUrl` comes from the author's url, else `homepage`.
20
+ */
21
+ export declare function parsePackageMeta(pkg: RawPkg): PackageMeta;
22
+ export {};
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.authorFromScope = authorFromScope;
4
+ exports.parsePackageMeta = parsePackageMeta;
5
+ /** Capitalize the first character ("gorgo" → "Gorgo"). */
6
+ const cap = (s) => (s ? s[0].toUpperCase() + s.slice(1) : s);
7
+ /** Narrow to string, else undefined — guards against non-string JSON-valid shapes. */
8
+ const str = (v) => (typeof v === "string" ? v : undefined);
9
+ /**
10
+ * Derive a human author name from an npm scope: "@gorgo/medusa-payment-tkassa" → "Gorgo".
11
+ * Returns null for unscoped/blank names.
12
+ */
13
+ function authorFromScope(name) {
14
+ if (!name)
15
+ return null;
16
+ const m = /^@([^/]+)\//.exec(name);
17
+ return m ? cap(m[1]) : null;
18
+ }
19
+ /**
20
+ * Normalize a raw package.json into the fields the admin list needs. `author` may be a string
21
+ * ("Name <email> (url)") or an object ({ name, url }); when absent, the name is derived from the
22
+ * npm scope. `authorUrl` comes from the author's url, else `homepage`.
23
+ */
24
+ function parsePackageMeta(pkg) {
25
+ const name = str(pkg.name) ?? null;
26
+ const version = str(pkg.version) ?? null;
27
+ let author = null;
28
+ let authorUrl = null;
29
+ if (typeof pkg.author === "string") {
30
+ author = pkg.author.split(/[<(]/)[0].trim() || null;
31
+ const url = /\(([^)]+)\)/.exec(pkg.author)?.[1];
32
+ if (url)
33
+ authorUrl = url.trim();
34
+ }
35
+ else if (pkg.author && typeof pkg.author === "object") {
36
+ author = str(pkg.author.name)?.trim() || null;
37
+ authorUrl = str(pkg.author.url)?.trim() || null;
38
+ }
39
+ if (!author)
40
+ author = authorFromScope(name);
41
+ if (!authorUrl)
42
+ authorUrl = str(pkg.homepage)?.trim() || null;
43
+ return { name, version, author, authorUrl };
44
+ }
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS1tZXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvaW50ZWdyYXRpb24vbG9hZGVycy9wYWNrYWdlLW1ldGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFtQkEsMENBSUM7QUFPRCw0Q0FvQkM7QUF6Q0QsMERBQTBEO0FBQzFELE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBUyxFQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBRTVFLHNGQUFzRjtBQUN0RixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQVUsRUFBc0IsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0FBRXZGOzs7R0FHRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxJQUErQjtJQUM3RCxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sSUFBSSxDQUFBO0lBQ3RCLE1BQU0sQ0FBQyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDbEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO0FBQzdCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQUMsR0FBVztJQUMxQyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQTtJQUNsQyxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQTtJQUV4QyxJQUFJLE1BQU0sR0FBa0IsSUFBSSxDQUFBO0lBQ2hDLElBQUksU0FBUyxHQUFrQixJQUFJLENBQUE7SUFFbkMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDbkMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQTtRQUNuRCxNQUFNLEdBQUcsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQy9DLElBQUksR0FBRztZQUFFLFNBQVMsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDakMsQ0FBQztTQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxPQUFPLEdBQUcsQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDeEQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQTtRQUM3QyxTQUFTLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFBO0lBQ2pELENBQUM7SUFFRCxJQUFJLENBQUMsTUFBTTtRQUFFLE1BQU0sR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDM0MsSUFBSSxDQUFDLFNBQVM7UUFBRSxTQUFTLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUE7SUFFN0QsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFBO0FBQzdDLENBQUMifQ==
@@ -0,0 +1,8 @@
1
+ import type { ModuleProvider } from "@medusajs/framework/types";
2
+ import type { PackageMetaMap } from "../types";
3
+ /**
4
+ * Resolve npm-package metadata (version/author/url) per provider `identifier` from each
5
+ * registration's `resolve` specifier. identifier↔package is 1:1, so one lookup keys every
6
+ * instance sharing the class. Best-effort: an unresolvable provider is skipped, never thrown.
7
+ */
8
+ export declare function resolvePackageMetaByIdentifier(providers: ModuleProvider[]): PackageMetaMap;
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.resolvePackageMetaByIdentifier = resolvePackageMetaByIdentifier;
7
+ const node_path_1 = __importDefault(require("node:path"));
8
+ const node_fs_1 = require("node:fs");
9
+ const package_meta_1 = require("./package-meta");
10
+ /** Walk up from `startDir` to the nearest package.json that has name + version. */
11
+ function readNearestPackageJson(startDir) {
12
+ let dir = node_path_1.default.resolve(startDir);
13
+ // eslint-disable-next-line no-constant-condition
14
+ while (true) {
15
+ try {
16
+ const raw = (0, node_fs_1.readFileSync)(node_path_1.default.join(dir, "package.json"), "utf-8");
17
+ const pkg = JSON.parse(raw);
18
+ if (pkg?.name && pkg?.version)
19
+ return pkg;
20
+ }
21
+ catch {
22
+ // keep walking up
23
+ }
24
+ const parent = node_path_1.default.dirname(dir);
25
+ if (parent === dir)
26
+ return null;
27
+ dir = parent;
28
+ }
29
+ }
30
+ /**
31
+ * Resolve npm-package metadata (version/author/url) per provider `identifier` from each
32
+ * registration's `resolve` specifier. identifier↔package is 1:1, so one lookup keys every
33
+ * instance sharing the class. Best-effort: an unresolvable provider is skipped, never thrown.
34
+ */
35
+ function resolvePackageMetaByIdentifier(providers) {
36
+ const out = {};
37
+ for (const entry of providers) {
38
+ const spec = entry.resolve;
39
+ if (!spec)
40
+ continue;
41
+ try {
42
+ const pkgJson = readNearestPackageJson(node_path_1.default.dirname(require.resolve(spec)));
43
+ if (!pkgJson)
44
+ continue;
45
+ const meta = (0, package_meta_1.parsePackageMeta)(pkgJson);
46
+ const mod = require(spec);
47
+ const services = (mod?.default ?? mod)?.services ?? [];
48
+ for (const svc of services) {
49
+ if (svc?.identifier)
50
+ out[svc.identifier] = meta;
51
+ }
52
+ }
53
+ catch {
54
+ // a single unresolvable provider must not sink the whole map
55
+ }
56
+ }
57
+ return out;
58
+ }
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS1wYWNrYWdlLW1ldGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9pbnRlZ3JhdGlvbi9sb2FkZXJzL3Jlc29sdmUtcGFja2FnZS1tZXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBNkJBLHdFQW1CQztBQWhERCwwREFBNEI7QUFDNUIscUNBQXNDO0FBRXRDLGlEQUFpRDtBQUdqRCxtRkFBbUY7QUFDbkYsU0FBUyxzQkFBc0IsQ0FBQyxRQUFnQjtJQUM5QyxJQUFJLEdBQUcsR0FBRyxtQkFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNoQyxpREFBaUQ7SUFDakQsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUNaLElBQUksQ0FBQztZQUNILE1BQU0sR0FBRyxHQUFHLElBQUEsc0JBQVksRUFBQyxtQkFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDakUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUMzQixJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLE9BQU87Z0JBQUUsT0FBTyxHQUFHLENBQUE7UUFDM0MsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLGtCQUFrQjtRQUNwQixDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsbUJBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDaEMsSUFBSSxNQUFNLEtBQUssR0FBRztZQUFFLE9BQU8sSUFBSSxDQUFBO1FBQy9CLEdBQUcsR0FBRyxNQUFNLENBQUE7SUFDZCxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQiw4QkFBOEIsQ0FBQyxTQUEyQjtJQUN4RSxNQUFNLEdBQUcsR0FBbUIsRUFBRSxDQUFBO0lBQzlCLEtBQUssTUFBTSxLQUFLLElBQUksU0FBUyxFQUFFLENBQUM7UUFDOUIsTUFBTSxJQUFJLEdBQUksS0FBOEIsQ0FBQyxPQUFPLENBQUE7UUFDcEQsSUFBSSxDQUFDLElBQUk7WUFBRSxTQUFRO1FBQ25CLElBQUksQ0FBQztZQUNILE1BQU0sT0FBTyxHQUFHLHNCQUFzQixDQUFDLG1CQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQzNFLElBQUksQ0FBQyxPQUFPO2dCQUFFLFNBQVE7WUFDdEIsTUFBTSxJQUFJLEdBQUcsSUFBQSwrQkFBZ0IsRUFBQyxPQUFjLENBQUMsQ0FBQTtZQUM3QyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDekIsTUFBTSxRQUFRLEdBQW1DLENBQUMsR0FBRyxFQUFFLE9BQU8sSUFBSSxHQUFHLENBQUMsRUFBRSxRQUFRLElBQUksRUFBRSxDQUFBO1lBQ3RGLEtBQUssTUFBTSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQzNCLElBQUksR0FBRyxFQUFFLFVBQVU7b0JBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUE7WUFDakQsQ0FBQztRQUNILENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCw2REFBNkQ7UUFDL0QsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQTtBQUNaLENBQUMifQ==
@@ -0,0 +1,5 @@
1
+ import { Migration } from "@medusajs/framework/mikro-orm/migrations";
2
+ export declare class Migration20260720130920 extends Migration {
3
+ up(): Promise<void>;
4
+ down(): Promise<void>;
5
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20260720130920 = void 0;
4
+ const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
5
+ class Migration20260720130920 extends migrations_1.Migration {
6
+ async up() {
7
+ this.addSql(`drop index if exists "IDX_integration_module";`);
8
+ this.addSql(`alter table if exists "integration" rename column "module" to "category";`);
9
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_integration_category" ON "integration" ("category") WHERE deleted_at IS NULL;`);
10
+ }
11
+ async down() {
12
+ this.addSql(`drop index if exists "IDX_integration_category";`);
13
+ this.addSql(`alter table if exists "integration" rename column "category" to "module";`);
14
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_integration_module" ON "integration" ("module") WHERE deleted_at IS NULL;`);
15
+ }
16
+ }
17
+ exports.Migration20260720130920 = Migration20260720130920;
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjA3MjAxMzA5MjAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9pbnRlZ3JhdGlvbi9taWdyYXRpb25zL01pZ3JhdGlvbjIwMjYwNzIwMTMwOTIwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlFQUFxRTtBQUVyRSxNQUFhLHVCQUF3QixTQUFRLHNCQUFTO0lBRTNDLEtBQUssQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO1FBRTlELElBQUksQ0FBQyxNQUFNLENBQUMsMkVBQTJFLENBQUMsQ0FBQztRQUN6RixJQUFJLENBQUMsTUFBTSxDQUFDLCtHQUErRyxDQUFDLENBQUM7SUFDL0gsQ0FBQztJQUVRLEtBQUssQ0FBQyxJQUFJO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsa0RBQWtELENBQUMsQ0FBQztRQUVoRSxJQUFJLENBQUMsTUFBTSxDQUFDLDJFQUEyRSxDQUFDLENBQUM7UUFDekYsSUFBSSxDQUFDLE1BQU0sQ0FBQywyR0FBMkcsQ0FBQyxDQUFDO0lBQzNILENBQUM7Q0FFRjtBQWhCRCwwREFnQkMifQ==
@@ -0,0 +1,5 @@
1
+ import { Migration } from "@medusajs/framework/mikro-orm/migrations";
2
+ export declare class Migration20260724101525 extends Migration {
3
+ up(): Promise<void>;
4
+ down(): Promise<void>;
5
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20260724101525 = void 0;
4
+ const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
5
+ class Migration20260724101525 extends migrations_1.Migration {
6
+ async up() {
7
+ this.addSql(`alter table if exists "integration" drop constraint if exists "integration_category_check";`);
8
+ this.addSql(`alter table if exists "integration" add constraint "integration_category_check" check("category" in ('payment', 'notification', 'fulfillment', 'search', 'content', 'analytics', 'authentication', 'erp', 'crm', 'pim', 'marketplace', 'feed', 'file_providers', 'other'));`);
9
+ }
10
+ async down() {
11
+ this.addSql(`alter table if exists "integration" drop constraint if exists "integration_category_check";`);
12
+ this.addSql(`alter table if exists "integration" add constraint "integration_category_check" check("category" in ('payment', 'fulfillment', 'marketplace', 'crm', 'erp', 'pim', 'notification', 'feed', 'tax', 'other'));`);
13
+ }
14
+ }
15
+ exports.Migration20260724101525 = Migration20260724101525;
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjA3MjQxMDE1MjUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9pbnRlZ3JhdGlvbi9taWdyYXRpb25zL01pZ3JhdGlvbjIwMjYwNzI0MTAxNTI1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlFQUFxRTtBQUVyRSxNQUFhLHVCQUF3QixTQUFRLHNCQUFTO0lBRTNDLEtBQUssQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyw2RkFBNkYsQ0FBQyxDQUFDO1FBRTNHLElBQUksQ0FBQyxNQUFNLENBQUMsNlFBQTZRLENBQUMsQ0FBQztJQUM3UixDQUFDO0lBRVEsS0FBSyxDQUFDLElBQUk7UUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyw2RkFBNkYsQ0FBQyxDQUFDO1FBRTNHLElBQUksQ0FBQyxNQUFNLENBQUMsOE1BQThNLENBQUMsQ0FBQztJQUM5TixDQUFDO0NBRUY7QUFkRCwwREFjQyJ9
@@ -1,15 +1,19 @@
1
1
  declare const Integration: import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
2
2
  id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
3
- module: import("@medusajs/framework/utils").EnumProperty<{
3
+ category: import("@medusajs/framework/utils").EnumProperty<{
4
4
  readonly PAYMENT: "payment";
5
+ readonly NOTIFICATION: "notification";
5
6
  readonly FULFILLMENT: "fulfillment";
6
- readonly MARKETPLACE: "marketplace";
7
- readonly CRM: "crm";
7
+ readonly SEARCH: "search";
8
+ readonly CONTENT: "content";
9
+ readonly ANALYTICS: "analytics";
10
+ readonly AUTHENTICATION: "authentication";
8
11
  readonly ERP: "erp";
12
+ readonly CRM: "crm";
9
13
  readonly PIM: "pim";
10
- readonly NOTIFICATION: "notification";
14
+ readonly MARKETPLACE: "marketplace";
11
15
  readonly FEED: "feed";
12
- readonly TAX: "tax";
16
+ readonly FILE_PROVIDERS: "file_providers";
13
17
  readonly OTHER: "other";
14
18
  }>;
15
19
  provider_id: import("@medusajs/framework/utils").TextProperty;
@@ -5,7 +5,7 @@ const integration_1 = require("../utils/integration");
5
5
  const Integration = utils_1.model.define("integration", {
6
6
  id: utils_1.model.id({ prefix: "int" }).primaryKey(),
7
7
  // Plugin identity
8
- module: utils_1.model.enum(integration_1.IntegrationModule),
8
+ category: utils_1.model.enum(integration_1.IntegrationCategory),
9
9
  provider_id: utils_1.model.text(),
10
10
  title: utils_1.model.text().nullable(),
11
11
  // Integration options (non-secret settings)
@@ -16,7 +16,7 @@ const Integration = utils_1.model.define("integration", {
16
16
  })
17
17
  .indexes([
18
18
  { on: ["provider_id"], unique: true },
19
- { on: ["module"] },
19
+ { on: ["category"] },
20
20
  ]);
21
21
  exports.default = Integration;
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWdyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9pbnRlZ3JhdGlvbi9tb2RlbHMvaW50ZWdyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxREFBaUQ7QUFDakQsc0RBQStFO0FBRS9FLE1BQU0sV0FBVyxHQUFHLGFBQUssQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFO0lBQzlDLEVBQUUsRUFBRSxhQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFO0lBRTVDLGtCQUFrQjtJQUNsQixNQUFNLEVBQUUsYUFBSyxDQUFDLElBQUksQ0FBQywrQkFBaUIsQ0FBQztJQUNyQyxXQUFXLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRTtJQUN6QixLQUFLLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUU5Qiw0Q0FBNEM7SUFDNUMsT0FBTyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO0lBRWpDLFdBQVc7SUFDWCxVQUFVLEVBQUUsYUFBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDekMsZ0JBQWdCLEVBQUUsYUFBSyxDQUFDLElBQUksQ0FBQyxtQ0FBcUIsQ0FBQyxDQUFDLFFBQVEsRUFBRTtDQUMvRCxDQUFDO0tBQ0QsT0FBTyxDQUFDO0lBQ1AsRUFBRSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO0lBQ3JDLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUU7Q0FDbkIsQ0FBQyxDQUFBO0FBRUYsa0JBQWUsV0FBVyxDQUFBIn0=
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWdyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9pbnRlZ3JhdGlvbi9tb2RlbHMvaW50ZWdyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxREFBaUQ7QUFDakQsc0RBQWlGO0FBRWpGLE1BQU0sV0FBVyxHQUFHLGFBQUssQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFO0lBQzlDLEVBQUUsRUFBRSxhQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFO0lBRTVDLGtCQUFrQjtJQUNsQixRQUFRLEVBQUUsYUFBSyxDQUFDLElBQUksQ0FBQyxpQ0FBbUIsQ0FBQztJQUN6QyxXQUFXLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRTtJQUN6QixLQUFLLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUU5Qiw0Q0FBNEM7SUFDNUMsT0FBTyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO0lBRWpDLFdBQVc7SUFDWCxVQUFVLEVBQUUsYUFBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDekMsZ0JBQWdCLEVBQUUsYUFBSyxDQUFDLElBQUksQ0FBQyxtQ0FBcUIsQ0FBQyxDQUFDLFFBQVEsRUFBRTtDQUMvRCxDQUFDO0tBQ0QsT0FBTyxDQUFDO0lBQ1AsRUFBRSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO0lBQ3JDLEVBQUUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUU7Q0FDckIsQ0FBQyxDQUFBO0FBRUYsa0JBQWUsV0FBVyxDQUFBIn0=