@gorgo/medusa-integration 0.0.4 → 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 (42) hide show
  1. package/.medusa/server/src/admin/index.js +519 -106
  2. package/.medusa/server/src/admin/index.mjs +522 -109
  3. package/.medusa/server/src/api/admin/integrations/[provider_id]/route.js +7 -2
  4. package/.medusa/server/src/api/admin/integrations/catalog/route.d.ts +3 -0
  5. package/.medusa/server/src/api/admin/integrations/catalog/route.js +10 -0
  6. package/.medusa/server/src/api/admin/integrations/middlewares.js +16 -1
  7. package/.medusa/server/src/api/admin/integrations/route.js +17 -3
  8. package/.medusa/server/src/api/admin/integrations/validators.d.ts +7 -0
  9. package/.medusa/server/src/api/admin/integrations/validators.js +8 -2
  10. package/.medusa/server/src/jobs/test-integration-connections.js +3 -3
  11. package/.medusa/server/src/lib/__tests__/catalog-fallback.unit.spec.d.ts +1 -0
  12. package/.medusa/server/src/lib/__tests__/catalog-fallback.unit.spec.js +37 -0
  13. package/.medusa/server/src/lib/__tests__/catalog.unit.spec.d.ts +1 -0
  14. package/.medusa/server/src/lib/__tests__/catalog.unit.spec.js +71 -0
  15. package/.medusa/server/src/lib/catalog.d.ts +9 -0
  16. package/.medusa/server/src/lib/catalog.generated.d.ts +2 -0
  17. package/.medusa/server/src/lib/catalog.generated.js +88 -0
  18. package/.medusa/server/src/lib/catalog.js +55 -0
  19. package/.medusa/server/src/modules/integration/loaders/__tests__/package-meta.unit.spec.d.ts +1 -0
  20. package/.medusa/server/src/modules/integration/loaders/__tests__/package-meta.unit.spec.js +63 -0
  21. package/.medusa/server/src/modules/integration/loaders/load-providers.js +9 -37
  22. package/.medusa/server/src/modules/integration/loaders/package-meta.d.ts +22 -0
  23. package/.medusa/server/src/modules/integration/loaders/package-meta.js +45 -0
  24. package/.medusa/server/src/modules/integration/loaders/resolve-package-meta.d.ts +8 -0
  25. package/.medusa/server/src/modules/integration/loaders/resolve-package-meta.js +59 -0
  26. package/.medusa/server/src/modules/integration/migrations/Migration20260724101525.d.ts +5 -0
  27. package/.medusa/server/src/modules/integration/migrations/Migration20260724101525.js +16 -0
  28. package/.medusa/server/src/modules/integration/models/integration.d.ts +8 -4
  29. package/.medusa/server/src/modules/integration/services/__tests__/integration-module.unit.spec.js +107 -3
  30. package/.medusa/server/src/modules/integration/services/integration-module.d.ts +46 -9
  31. package/.medusa/server/src/modules/integration/services/integration-module.js +54 -4
  32. package/.medusa/server/src/modules/integration/types/index.d.ts +11 -0
  33. package/.medusa/server/src/modules/integration/types/index.js +4 -2
  34. package/.medusa/server/src/modules/integration/utils/integration.d.ts +8 -4
  35. package/.medusa/server/src/modules/integration/utils/integration.js +9 -5
  36. package/.medusa/server/src/types/http/integration/admin/entities.d.ts +34 -0
  37. package/.medusa/server/src/types/http/integration/admin/responses.d.ts +17 -2
  38. package/.medusa/server/src/workflows/integration/steps/set-integration-enabled.d.ts +1 -1
  39. package/.medusa/server/src/workflows/integration/workflows/set-integration-enabled.d.ts +1 -1
  40. package/README.md +5 -5
  41. package/README.ru.md +5 -5
  42. package/package.json +7 -3
@@ -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
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 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
@@ -2,14 +2,18 @@ declare const Integration: import("@medusajs/framework/utils").DmlEntity<import(
2
2
  id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
3
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;
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const globals_1 = require("@jest/globals");
7
7
  const integration_module_1 = __importDefault(require("../integration-module"));
8
8
  const define_1 = require("../../descriptor/define");
9
+ const catalog_1 = require("../../../../lib/catalog");
9
10
  // A representative descriptor: one plain required option, one required secret, one defaulted enum.
10
11
  const descriptor = (0, define_1.defineIntegration)({
11
12
  category: "payment",
@@ -45,6 +46,7 @@ function makeService(opts) {
45
46
  const svc = Object.create(integration_module_1.default.prototype);
46
47
  svc.providerService_ = opts?.providerService ?? makeProviderService();
47
48
  svc.options_ = opts?.options ?? { encryptionKey: "unit-test-key" };
49
+ svc.packageMeta_ = opts?.packageMeta ?? {};
48
50
  svc.cache_ = new Map();
49
51
  svc.listIntegrations = globals_1.jest.fn(async (filter = {}) => rows.filter((r) => (filter?.provider_id ? r.provider_id === filter.provider_id : true)));
50
52
  svc.createIntegrations = globals_1.jest.fn(async (data) => {
@@ -214,7 +216,8 @@ function storedRow(svc, values, extra) {
214
216
  (0, globals_1.describe)("IntegrationModuleService — listIntegrationsOverview", () => {
215
217
  (0, globals_1.it)("lists a registered-but-unconfigured provider", async () => {
216
218
  const svc = makeService();
217
- const [item] = await svc.listIntegrationsOverview();
219
+ const { integrations } = await svc.listIntegrationsOverview();
220
+ const [item] = integrations;
218
221
  (0, globals_1.expect)(item).toMatchObject({
219
222
  provider_id: "int_demo",
220
223
  identifier: "demo",
@@ -228,7 +231,8 @@ function storedRow(svc, values, extra) {
228
231
  (0, globals_1.it)("reflects a configured + complete + enabled row", async () => {
229
232
  const svc = makeService();
230
233
  svc._rows.push(storedRow(svc, { apiKey: "pub", secretKey: "shh" }, { is_enabled: true, last_test_status: "passed" }));
231
- const [item] = await svc.listIntegrationsOverview();
234
+ const { integrations } = await svc.listIntegrationsOverview();
235
+ const [item] = integrations;
232
236
  (0, globals_1.expect)(item).toMatchObject({
233
237
  is_configured: true,
234
238
  is_enabled: true,
@@ -236,5 +240,105 @@ function storedRow(svc, values, extra) {
236
240
  last_test_status: "passed",
237
241
  });
238
242
  });
243
+ (0, globals_1.it)("includes package meta (version/author/author_url) and descriptor description", async () => {
244
+ const withDesc = (0, define_1.defineIntegration)({
245
+ category: "payment",
246
+ displayName: "d",
247
+ description: "demo.desc",
248
+ options: { apiKey: { type: "string", label: "l" } },
249
+ sections: [{ id: "s", title: "t", options: ["apiKey"] }],
250
+ });
251
+ const reg = {
252
+ key: "int_demo",
253
+ identifier: "demo",
254
+ instanceId: null,
255
+ provider: { descriptor: withDesc, getIdentifier: () => "demo", getInstanceId: () => null },
256
+ };
257
+ const svc = makeService({
258
+ providerService: makeProviderService([reg]),
259
+ packageMeta: { demo: { name: "@gorgo/demo", version: "1.2.3", author: "Gorgo", authorUrl: "https://gorgo.dev" } },
260
+ });
261
+ const { integrations } = await svc.listIntegrationsOverview();
262
+ (0, globals_1.expect)(integrations[0]).toMatchObject({
263
+ description: "demo.desc",
264
+ version: "1.2.3",
265
+ author: "Gorgo",
266
+ author_url: "https://gorgo.dev",
267
+ });
268
+ });
269
+ (0, globals_1.it)("filters by category and reports the unfiltered categories facet", async () => {
270
+ const pay = { key: "int_pay", identifier: "pay", instanceId: null, provider: { descriptor: { category: "payment", displayName: "p" }, getIdentifier: () => "pay", getInstanceId: () => null } };
271
+ const ful = { key: "int_ful", identifier: "ful", instanceId: null, provider: { descriptor: { category: "fulfillment", displayName: "f" }, getIdentifier: () => "ful", getInstanceId: () => null } };
272
+ const svc = makeService({ providerService: makeProviderService([pay, ful]) });
273
+ const res = await svc.listIntegrationsOverview({ category: "payment" });
274
+ (0, globals_1.expect)(res.integrations.map((i) => i.provider_id)).toEqual(["int_pay"]);
275
+ (0, globals_1.expect)(res.count).toBe(1);
276
+ (0, globals_1.expect)(res.categories.sort()).toEqual(["fulfillment", "payment"]);
277
+ });
278
+ (0, globals_1.it)("filters by q on the identifier", async () => {
279
+ const pay = { key: "int_pay", identifier: "pay", instanceId: null, provider: { descriptor: { category: "payment", displayName: "p" }, getIdentifier: () => "pay", getInstanceId: () => null } };
280
+ const ful = { key: "int_ful", identifier: "ful", instanceId: null, provider: { descriptor: { category: "fulfillment", displayName: "f" }, getIdentifier: () => "ful", getInstanceId: () => null } };
281
+ const svc = makeService({ providerService: makeProviderService([pay, ful]) });
282
+ const res = await svc.listIntegrationsOverview({ q: "FUL" });
283
+ (0, globals_1.expect)(res.integrations.map((i) => i.identifier)).toEqual(["ful"]);
284
+ (0, globals_1.expect)(res.count).toBe(1);
285
+ });
286
+ (0, globals_1.it)("paginates via limit/offset while count reflects the full filtered set", async () => {
287
+ const regs = [1, 2, 3].map((n) => ({
288
+ key: `int_p${n}`, identifier: `p${n}`, instanceId: null,
289
+ provider: { descriptor: { category: "payment", displayName: "p" }, getIdentifier: () => `p${n}`, getInstanceId: () => null },
290
+ }));
291
+ const svc = makeService({ providerService: makeProviderService(regs) });
292
+ const res = await svc.listIntegrationsOverview({ limit: 2, offset: 2 });
293
+ (0, globals_1.expect)(res.count).toBe(3);
294
+ (0, globals_1.expect)(res.integrations).toHaveLength(1);
295
+ (0, globals_1.expect)(res.integrations[0].provider_id).toBe("int_p3");
296
+ });
297
+ });
298
+ (0, globals_1.describe)("IntegrationModuleService — getPackageMeta", () => {
299
+ (0, globals_1.it)("maps the injected package meta for a provider_id (by identifier)", () => {
300
+ const svc = makeService({
301
+ packageMeta: { demo: { name: "@gorgo/demo", version: "1.2.3", author: "Gorgo", authorUrl: "https://gorgo.dev" } },
302
+ });
303
+ (0, globals_1.expect)(svc.getPackageMeta("int_demo")).toEqual({
304
+ version: "1.2.3",
305
+ author: "Gorgo",
306
+ author_url: "https://gorgo.dev",
307
+ });
308
+ });
309
+ (0, globals_1.it)("returns nulls when there is no package meta for the provider", () => {
310
+ const svc = makeService();
311
+ (0, globals_1.expect)(svc.getPackageMeta("int_demo")).toEqual({ version: null, author: null, author_url: null });
312
+ });
313
+ (0, globals_1.it)("returns nulls for an unregistered provider_id", () => {
314
+ const svc = makeService({ providerService: makeProviderService([]) });
315
+ (0, globals_1.expect)(svc.getPackageMeta("int_missing")).toEqual({ version: null, author: null, author_url: null });
316
+ });
317
+ });
318
+ (0, globals_1.describe)("IntegrationModuleService — getCatalog", () => {
319
+ const realFetch = global.fetch;
320
+ (0, globals_1.beforeEach)(() => {
321
+ (0, catalog_1.resetCatalogCacheForTests)();
322
+ global.fetch = globals_1.jest.fn().mockRejectedValue(new Error("offline"));
323
+ });
324
+ (0, globals_1.afterEach)(() => {
325
+ global.fetch = realFetch;
326
+ });
327
+ (0, globals_1.it)("marks a catalog entry installed when a provider with that identifier is registered", async () => {
328
+ const reg = {
329
+ key: "int_tkassa", identifier: "tkassa", instanceId: null,
330
+ provider: { descriptor: { category: "payment", displayName: "T" }, getIdentifier: () => "tkassa", getInstanceId: () => null },
331
+ };
332
+ const svc = makeService({ providerService: makeProviderService([reg]) });
333
+ const catalog = await svc.getCatalog();
334
+ (0, globals_1.expect)(catalog.find((c) => c.integrationId === "tkassa")).toMatchObject({ installed: true, provider_id: "int_tkassa" });
335
+ (0, globals_1.expect)(catalog.find((c) => c.integrationId === "1c")).toMatchObject({ installed: false, provider_id: null });
336
+ });
337
+ (0, globals_1.it)("returns the whole catalog with installed=false when nothing matches", async () => {
338
+ const svc = makeService(); // default registration identifier "demo" — no catalog match
339
+ const catalog = await svc.getCatalog();
340
+ (0, globals_1.expect)(catalog.length).toBeGreaterThanOrEqual(5);
341
+ (0, globals_1.expect)(catalog.every((c) => c.installed === false && c.provider_id === null)).toBe(true);
342
+ });
239
343
  });
240
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWdyYXRpb24tbW9kdWxlLnVuaXQuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2ludGVncmF0aW9uL3NlcnZpY2VzL19fdGVzdHNfXy9pbnRlZ3JhdGlvbi1tb2R1bGUudW5pdC5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMkNBQTBEO0FBQzFELCtFQUE0RDtBQUM1RCxvREFBMkQ7QUFFM0QsbUdBQW1HO0FBQ25HLE1BQU0sVUFBVSxHQUFHLElBQUEsMEJBQWlCLEVBQUM7SUFDbkMsUUFBUSxFQUFFLFNBQVM7SUFDbkIsV0FBVyxFQUFFLEdBQUc7SUFDaEIsT0FBTyxFQUFFO1FBQ1AsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtRQUNwRSxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7UUFDckYsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO0tBQzlFO0lBQ0QsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO0lBQ2pGLGNBQWMsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBaUIsRUFBRSxDQUFDO0NBQzVE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
344
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWdyYXRpb24tbW9kdWxlLnVuaXQuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2ludGVncmF0aW9uL3NlcnZpY2VzL19fdGVzdHNfXy9pbnRlZ3JhdGlvbi1tb2R1bGUudW5pdC5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMkNBQWlGO0FBQ2pGLCtFQUE0RDtBQUM1RCxvREFBMkQ7QUFDM0QscURBQW1FO0FBRW5FLG1HQUFtRztBQUNuRyxNQUFNLFVBQVUsR0FBRyxJQUFBLDBCQUFpQixFQUFDO0lBQ25DLFFBQVEsRUFBRSxTQUFTO0lBQ25CLFdBQVcsRUFBRSxHQUFHO0lBQ2hCLE9BQU8sRUFBRTtRQUNQLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7UUFDcEUsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO1FBQ3JGLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtLQUM5RTtJQUNELFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztJQUNqRixjQUFjLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLFFBQWlCLEVB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