@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
@@ -11,7 +11,12 @@ const GET = async (req, res) => {
11
11
  const descriptor = svc.getProviderUiDescriptor(provider_id);
12
12
  const record = await svc.findByProviderId(provider_id);
13
13
  const is_complete = record ? svc.isComplete(record) : false;
14
- res.json({ descriptor, integration: record ? (0, _helpers_1.maskedView)(record, svc.getSecretKeys(provider_id)) : null, is_complete });
14
+ res.json({
15
+ descriptor,
16
+ integration: record ? (0, _helpers_1.maskedView)(record, svc.getSecretKeys(provider_id)) : null,
17
+ is_complete,
18
+ ...svc.getPackageMeta(provider_id),
19
+ });
15
20
  };
16
21
  exports.GET = GET;
17
22
  const POST = async (req, res) => {
@@ -43,4 +48,4 @@ const DELETE = async (req, res) => {
43
48
  res.json({ id: provider_id, object: "integration", deleted: true });
44
49
  };
45
50
  exports.DELETE = DELETE;
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2ludGVncmF0aW9ucy9bcHJvdmlkZXJfaWRdL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLG1FQUF3RztBQUN4RywwQ0FBa0U7QUFRbEUsK0ZBQStGO0FBQ3hGLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFDdEIsR0FBK0IsRUFDL0IsR0FBNkMsRUFDN0MsRUFBRTtJQUNGLE1BQU0sR0FBRyxHQUFHLElBQUEsa0JBQU8sRUFBQyxHQUFHLENBQUMsQ0FBQTtJQUN4QixNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQTtJQUMxQyxJQUFBLDBCQUFlLEVBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBQ2pDLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUMzRCxNQUFNLE1BQU0sR0FBRyxNQUFNLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUN0RCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQTtJQUMzRCxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUEscUJBQVUsRUFBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQTtBQUN4SCxDQUFDLENBQUE7QUFYWSxRQUFBLEdBQUcsT0FXZjtBQUVNLE1BQU0sSUFBSSxHQUFHLEtBQUssRUFDdkIsR0FBMkQsRUFDM0QsR0FBbUQsRUFDbkQsRUFBRTtJQUNGLE1BQU0sR0FBRyxHQUFHLElBQUEsa0JBQU8sRUFBQyxHQUFHLENBQUMsQ0FBQTtJQUN4QixNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQTtJQUMxQyxJQUFBLDBCQUFlLEVBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBRWpDLHNGQUFzRjtJQUN0RiwwRkFBMEY7SUFDMUYsb0ZBQW9GO0lBQ3BGLGlFQUFpRTtJQUNqRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFBLHVDQUF5QixFQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDaEUsS0FBSyxFQUFFO1lBQ0wsV0FBVztZQUNYLFVBQVUsRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLFVBQVU7WUFDeEMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsS0FBSztZQUM5QixNQUFNLEVBQUUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxNQUFNO1NBQ2pDO0tBQ0YsQ0FBQyxDQUFBO0lBQ0YsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFBLHFCQUFVLEVBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUE7QUFDL0UsQ0FBQyxDQUFBO0FBckJZLFFBQUEsSUFBSSxRQXFCaEI7QUFFTSxNQUFNLE1BQU0sR0FBRyxLQUFLLEVBQ3pCLEdBQStCLEVBQy9CLEdBQW1ELEVBQ25ELEVBQUU7SUFDRixNQUFNLEdBQUcsR0FBRyxJQUFBLGtCQUFPLEVBQUMsR0FBRyxDQUFDLENBQUE7SUFDeEIsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUE7SUFDMUMsSUFBQSwwQkFBZSxFQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUNqQyxNQUFNLElBQUEsdUNBQXlCLEVBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUM3QyxLQUFLLEVBQUUsRUFBRSxXQUFXLEVBQUU7S0FDdkIsQ0FBQyxDQUFBO0lBQ0YsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtBQUNyRSxDQUFDLENBQUE7QUFYWSxRQUFBLE1BQU0sVUFXbEIifQ==
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2ludGVncmF0aW9ucy9bcHJvdmlkZXJfaWRdL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLG1FQUF3RztBQUN4RywwQ0FBa0U7QUFRbEUsK0ZBQStGO0FBQ3hGLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFDdEIsR0FBK0IsRUFDL0IsR0FBNkMsRUFDN0MsRUFBRTtJQUNGLE1BQU0sR0FBRyxHQUFHLElBQUEsa0JBQU8sRUFBQyxHQUFHLENBQUMsQ0FBQTtJQUN4QixNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQTtJQUMxQyxJQUFBLDBCQUFlLEVBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBQ2pDLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUMzRCxNQUFNLE1BQU0sR0FBRyxNQUFNLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUN0RCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQTtJQUMzRCxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ1AsVUFBVTtRQUNWLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUEscUJBQVUsRUFBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO1FBQy9FLFdBQVc7UUFDWCxHQUFHLEdBQUcsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDO0tBQ25DLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQTtBQWhCWSxRQUFBLEdBQUcsT0FnQmY7QUFFTSxNQUFNLElBQUksR0FBRyxLQUFLLEVBQ3ZCLEdBQTJELEVBQzNELEdBQW1ELEVBQ25ELEVBQUU7SUFDRixNQUFNLEdBQUcsR0FBRyxJQUFBLGtCQUFPLEVBQUMsR0FBRyxDQUFDLENBQUE7SUFDeEIsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUE7SUFDMUMsSUFBQSwwQkFBZSxFQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUVqQyxzRkFBc0Y7SUFDdEYsMEZBQTBGO0lBQzFGLG9GQUFvRjtJQUNwRixpRUFBaUU7SUFDakUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sSUFBQSx1Q0FBeUIsRUFBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ2hFLEtBQUssRUFBRTtZQUNMLFdBQVc7WUFDWCxVQUFVLEVBQUUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxVQUFVO1lBQ3hDLEtBQUssRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLEtBQUs7WUFDOUIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsTUFBTTtTQUNqQztLQUNGLENBQUMsQ0FBQTtJQUNGLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBQSxxQkFBVSxFQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0FBQy9FLENBQUMsQ0FBQTtBQXJCWSxRQUFBLElBQUksUUFxQmhCO0FBRU0sTUFBTSxNQUFNLEdBQUcsS0FBSyxFQUN6QixHQUErQixFQUMvQixHQUFtRCxFQUNuRCxFQUFFO0lBQ0YsTUFBTSxHQUFHLEdBQUcsSUFBQSxrQkFBTyxFQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3hCLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFBO0lBQzFDLElBQUEsMEJBQWUsRUFBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUE7SUFDakMsTUFBTSxJQUFBLHVDQUF5QixFQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDN0MsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFO0tBQ3ZCLENBQUMsQ0FBQTtJQUNGLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7QUFDckUsQ0FBQyxDQUFBO0FBWFksUUFBQSxNQUFNLFVBV2xCIn0=
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const globals_1 = require("@jest/globals");
4
+ const _helpers_1 = require("../_helpers");
5
+ const rec = (options) => ({
6
+ id: "int_x",
7
+ provider_id: "int_x",
8
+ category: "payment",
9
+ title: null,
10
+ is_enabled: true,
11
+ last_test_status: null,
12
+ options,
13
+ });
14
+ (0, globals_1.describe)("maskedView", () => {
15
+ (0, globals_1.it)("reports configured secrets per field — only those with a stored value", () => {
16
+ // apiKey has ciphertext, clientSecret is blank → only apiKey counts as configured.
17
+ const v = (0, _helpers_1.maskedView)(rec({ apiKey: "ct", clientSecret: "", terminalKey: "abc" }), ["apiKey", "clientSecret"]);
18
+ (0, globals_1.expect)(v.configured_secrets).toEqual(["apiKey"]);
19
+ });
20
+ (0, globals_1.it)("returns an empty list when no secret is set", () => {
21
+ const v = (0, _helpers_1.maskedView)(rec({ terminalKey: "abc" }), ["apiKey", "clientSecret"]);
22
+ (0, globals_1.expect)(v.configured_secrets).toEqual([]);
23
+ });
24
+ (0, globals_1.it)("never leaks secret ciphertext into values", () => {
25
+ const v = (0, _helpers_1.maskedView)(rec({ apiKey: "ct", terminalKey: "abc" }), ["apiKey"]);
26
+ (0, globals_1.expect)(v.values).toEqual({ terminalKey: "abc" });
27
+ (0, globals_1.expect)(Object.prototype.hasOwnProperty.call(v.values, "apiKey")).toBe(false);
28
+ });
29
+ });
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy51bml0LnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2ludGVncmF0aW9ucy9fX3Rlc3RzX18vaGVscGVycy51bml0LnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyQ0FBb0Q7QUFDcEQsMENBQXdDO0FBRXhDLE1BQU0sR0FBRyxHQUFHLENBQUMsT0FBZ0MsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNqRCxFQUFFLEVBQUUsT0FBTztJQUNYLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFFBQVEsRUFBRSxTQUFTO0lBQ25CLEtBQUssRUFBRSxJQUFJO0lBQ1gsVUFBVSxFQUFFLElBQUk7SUFDaEIsZ0JBQWdCLEVBQUUsSUFBSTtJQUN0QixPQUFPO0NBQ1IsQ0FBQyxDQUFBO0FBRUYsSUFBQSxrQkFBUSxFQUFDLFlBQVksRUFBRSxHQUFHLEVBQUU7SUFDMUIsSUFBQSxZQUFFLEVBQUMsdUVBQXVFLEVBQUUsR0FBRyxFQUFFO1FBQy9FLG1GQUFtRjtRQUNuRixNQUFNLENBQUMsR0FBRyxJQUFBLHFCQUFVLEVBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUE7UUFDN0csSUFBQSxnQkFBTSxFQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7SUFDbEQsQ0FBQyxDQUFDLENBQUE7SUFFRixJQUFBLFlBQUUsRUFBQyw2Q0FBNkMsRUFBRSxHQUFHLEVBQUU7UUFDckQsTUFBTSxDQUFDLEdBQUcsSUFBQSxxQkFBVSxFQUFDLEdBQUcsQ0FBQyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUE7UUFDN0UsSUFBQSxnQkFBTSxFQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUMxQyxDQUFDLENBQUMsQ0FBQTtJQUVGLElBQUEsWUFBRSxFQUFDLDJDQUEyQyxFQUFFLEdBQUcsRUFBRTtRQUNuRCxNQUFNLENBQUMsR0FBRyxJQUFBLHFCQUFVLEVBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7UUFDM0UsSUFBQSxnQkFBTSxFQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQTtRQUNoRCxJQUFBLGdCQUFNLEVBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDOUUsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSJ9
@@ -9,8 +9,8 @@ export declare function service(req: MedusaRequest): IntegrationModuleService;
9
9
  export declare function requireProvider(svc: IntegrationModuleService, providerId: string): void;
10
10
  /**
11
11
  * Build the client-facing view of a record. Secret options live encrypted inside `options`;
12
- * they are stripped here so ciphertext never reaches the browser. `has_secrets` tells the UI
13
- * a secret is stored (so it can render a "leave blank to keep" hint). `values` holds only
14
- * the non-secret options.
12
+ * they are stripped here so ciphertext never reaches the browser. `configured_secrets` lists
13
+ * the secret keys that currently have a stored value (per field), so the UI can render a
14
+ * "leave blank to keep" hint on exactly those fields. `values` holds only the non-secret options.
15
15
  */
16
16
  export declare function maskedView(record: any, secretKeys: string[]): MaskedIntegration;
@@ -19,19 +19,19 @@ function requireProvider(svc, providerId) {
19
19
  }
20
20
  /**
21
21
  * Build the client-facing view of a record. Secret options live encrypted inside `options`;
22
- * they are stripped here so ciphertext never reaches the browser. `has_secrets` tells the UI
23
- * a secret is stored (so it can render a "leave blank to keep" hint). `values` holds only
24
- * the non-secret options.
22
+ * they are stripped here so ciphertext never reaches the browser. `configured_secrets` lists
23
+ * the secret keys that currently have a stored value (per field), so the UI can render a
24
+ * "leave blank to keep" hint on exactly those fields. `values` holds only the non-secret options.
25
25
  */
26
26
  function maskedView(record, secretKeys) {
27
27
  const secret = new Set(secretKeys);
28
28
  const stored = (record.options ?? {});
29
29
  const values = {};
30
- let has_secrets = false;
30
+ const configured_secrets = [];
31
31
  for (const [k, v] of Object.entries(stored)) {
32
32
  if (secret.has(k)) {
33
33
  if (v != null && v !== "")
34
- has_secrets = true;
34
+ configured_secrets.push(k);
35
35
  continue;
36
36
  }
37
37
  values[k] = v;
@@ -39,12 +39,12 @@ function maskedView(record, secretKeys) {
39
39
  return {
40
40
  id: record.id,
41
41
  provider_id: record.provider_id,
42
- module: record.module,
42
+ category: record.category,
43
43
  title: record.title ?? null,
44
44
  is_enabled: record.is_enabled,
45
- has_secrets,
45
+ configured_secrets,
46
46
  last_test_status: record.last_test_status ?? null,
47
47
  values,
48
48
  };
49
49
  }
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2hlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2ludGVncmF0aW9ucy9faGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU1BLDBCQUVDO0FBTUQsMENBSUM7QUFRRCxnQ0FzQkM7QUEvQ0QscURBQXVEO0FBQ3ZELDhEQUFpRTtBQUlqRSxTQUFnQixPQUFPLENBQUMsR0FBa0I7SUFDeEMsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxnQ0FBa0IsQ0FBQyxDQUFBO0FBQzlDLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixlQUFlLENBQUMsR0FBNkIsRUFBRSxVQUFrQjtJQUMvRSxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxtQkFBVyxDQUFDLG1CQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSx3QkFBd0IsVUFBVSxHQUFHLENBQUMsQ0FBQTtJQUMzRixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsVUFBVSxDQUFDLE1BQVcsRUFBRSxVQUFvQjtJQUMxRCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUNsQyxNQUFNLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUE0QixDQUFBO0lBQ2hFLE1BQU0sTUFBTSxHQUE0QixFQUFFLENBQUE7SUFDMUMsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFBO0lBQ3ZCLEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDNUMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUFFLFdBQVcsR0FBRyxJQUFJLENBQUE7WUFDN0MsU0FBUTtRQUNWLENBQUM7UUFDRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2YsQ0FBQztJQUNELE9BQU87UUFDTCxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUU7UUFDYixXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVc7UUFDL0IsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1FBQ3JCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxJQUFJLElBQUk7UUFDM0IsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1FBQzdCLFdBQVc7UUFDWCxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsZ0JBQWdCLElBQUksSUFBSTtRQUNqRCxNQUFNO0tBQ1AsQ0FBQTtBQUNILENBQUMifQ==
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2hlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2ludGVncmF0aW9ucy9faGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU1BLDBCQUVDO0FBTUQsMENBSUM7QUFRRCxnQ0FzQkM7QUEvQ0QscURBQXVEO0FBQ3ZELDhEQUFpRTtBQUlqRSxTQUFnQixPQUFPLENBQUMsR0FBa0I7SUFDeEMsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxnQ0FBa0IsQ0FBQyxDQUFBO0FBQzlDLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixlQUFlLENBQUMsR0FBNkIsRUFBRSxVQUFrQjtJQUMvRSxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxtQkFBVyxDQUFDLG1CQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSx3QkFBd0IsVUFBVSxHQUFHLENBQUMsQ0FBQTtJQUMzRixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsVUFBVSxDQUFDLE1BQVcsRUFBRSxVQUFvQjtJQUMxRCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUNsQyxNQUFNLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUE0QixDQUFBO0lBQ2hFLE1BQU0sTUFBTSxHQUE0QixFQUFFLENBQUE7SUFDMUMsTUFBTSxrQkFBa0IsR0FBYSxFQUFFLENBQUE7SUFDdkMsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUM1QyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ3JELFNBQVE7UUFDVixDQUFDO1FBQ0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNmLENBQUM7SUFDRCxPQUFPO1FBQ0wsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1FBQ2IsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO1FBQy9CLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtRQUN6QixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssSUFBSSxJQUFJO1FBQzNCLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtRQUM3QixrQkFBa0I7UUFDbEIsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixJQUFJLElBQUk7UUFDakQsTUFBTTtLQUNQLENBQUE7QUFDSCxDQUFDIn0=
@@ -0,0 +1,3 @@
1
+ import { AuthenticatedMedusaRequest, MedusaResponse } from "@medusajs/framework/http";
2
+ import type { AdminIntegrationCatalogResponse } from "../../../../types";
3
+ export declare const GET: (req: AuthenticatedMedusaRequest, res: MedusaResponse<AdminIntegrationCatalogResponse>) => Promise<void>;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = void 0;
4
+ const _helpers_1 = require("../_helpers");
5
+ const GET = async (req, res) => {
6
+ const svc = (0, _helpers_1.service)(req);
7
+ res.json({ integrations: await svc.getCatalog() });
8
+ };
9
+ exports.GET = GET;
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2ludGVncmF0aW9ucy9jYXRhbG9nL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDBDQUFxQztBQUc5QixNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQ3RCLEdBQStCLEVBQy9CLEdBQW9ELEVBQ3BELEVBQUU7SUFDRixNQUFNLEdBQUcsR0FBRyxJQUFBLGtCQUFPLEVBQUMsR0FBRyxDQUFDLENBQUE7SUFDeEIsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLFlBQVksRUFBRSxNQUFNLEdBQUcsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUE7QUFDcEQsQ0FBQyxDQUFBO0FBTlksUUFBQSxHQUFHLE9BTWYifQ==
@@ -4,6 +4,21 @@ exports.adminIntegrationRoutesMiddlewares = void 0;
4
4
  const http_1 = require("@medusajs/framework/http");
5
5
  const validators_1 = require("./validators");
6
6
  exports.adminIntegrationRoutesMiddlewares = [
7
+ {
8
+ methods: ["GET"],
9
+ matcher: "/admin/integrations",
10
+ // Minimal queryConfig: this endpoint is an in-memory list, not a remote-query entity —
11
+ // we only need `req.validatedQuery`. `entity`/`defaults` are inert here. `as any` mirrors
12
+ // the existing body-validator cast (zod-4 vs the generic's deep instantiation).
13
+ middlewares: [
14
+ (0, http_1.validateAndTransformQuery)(validators_1.AdminGetIntegrationsParams, {
15
+ entity: "integration",
16
+ isList: true,
17
+ defaults: [],
18
+ defaultLimit: 20,
19
+ }),
20
+ ],
21
+ },
7
22
  {
8
23
  methods: ["POST"],
9
24
  matcher: "/admin/integrations/:provider_id",
@@ -18,4 +33,4 @@ exports.adminIntegrationRoutesMiddlewares = [
18
33
  middlewares: [(0, http_1.validateAndTransformBody)(validators_1.AdminSetIntegrationEnabled)],
19
34
  },
20
35
  ];
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2ludGVncmF0aW9ucy9taWRkbGV3YXJlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFBb0Y7QUFDcEYsNkNBQWlGO0FBRXBFLFFBQUEsaUNBQWlDLEdBQXNCO0lBQ2xFO1FBQ0UsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ2pCLE9BQU8sRUFBRSxrQ0FBa0M7UUFDM0Msc0ZBQXNGO1FBQ3RGLHVGQUF1RjtRQUN2Rix1RkFBdUY7UUFDdkYsV0FBVyxFQUFFLENBQUMsSUFBQSwrQkFBd0IsRUFBQyxtQ0FBNkIsQ0FBQyxDQUFDO0tBQ3ZFO0lBQ0Q7UUFDRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDakIsT0FBTyxFQUFFLHlDQUF5QztRQUNsRCxXQUFXLEVBQUUsQ0FBQyxJQUFBLCtCQUF3QixFQUFDLHVDQUFpQyxDQUFDLENBQUM7S0FDM0U7Q0FDRixDQUFBIn0=
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2ludGVncmF0aW9ucy9taWRkbGV3YXJlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFBK0c7QUFDL0csNkNBQTZHO0FBRWhHLFFBQUEsaUNBQWlDLEdBQXNCO0lBQ2xFO1FBQ0UsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDO1FBQ2hCLE9BQU8sRUFBRSxxQkFBcUI7UUFDOUIsdUZBQXVGO1FBQ3ZGLDBGQUEwRjtRQUMxRixnRkFBZ0Y7UUFDaEYsV0FBVyxFQUFFO1lBQ1gsSUFBQSxnQ0FBeUIsRUFBQyx1Q0FBaUMsRUFBRTtnQkFDM0QsTUFBTSxFQUFFLGFBQWE7Z0JBQ3JCLE1BQU0sRUFBRSxJQUFJO2dCQUNaLFFBQVEsRUFBRSxFQUFFO2dCQUNaLFlBQVksRUFBRSxFQUFFO2FBQ1YsQ0FBQztTQUNWO0tBQ0Y7SUFDRDtRQUNFLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUNqQixPQUFPLEVBQUUsa0NBQWtDO1FBQzNDLHNGQUFzRjtRQUN0Rix1RkFBdUY7UUFDdkYsdUZBQXVGO1FBQ3ZGLFdBQVcsRUFBRSxDQUFDLElBQUEsK0JBQXdCLEVBQUMsbUNBQTZCLENBQUMsQ0FBQztLQUN2RTtJQUNEO1FBQ0UsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ2pCLE9BQU8sRUFBRSx5Q0FBeUM7UUFDbEQsV0FBVyxFQUFFLENBQUMsSUFBQSwrQkFBd0IsRUFBQyx1Q0FBaUMsQ0FBQyxDQUFDO0tBQzNFO0NBQ0YsQ0FBQSJ9
@@ -4,8 +4,22 @@ exports.GET = void 0;
4
4
  const _helpers_1 = require("./_helpers");
5
5
  const GET = async (req, res) => {
6
6
  const svc = (0, _helpers_1.service)(req);
7
- const integrations = await svc.listIntegrationsOverview();
8
- res.json({ integrations });
7
+ const { q, category, limit, offset } = (req.validatedQuery ?? {});
8
+ const resolvedLimit = limit ?? 20;
9
+ const resolvedOffset = offset ?? 0;
10
+ const { integrations, count, categories } = await svc.listIntegrationsOverview({
11
+ q,
12
+ category,
13
+ limit: resolvedLimit,
14
+ offset: resolvedOffset,
15
+ });
16
+ res.json({
17
+ integrations,
18
+ count,
19
+ limit: resolvedLimit,
20
+ offset: resolvedOffset,
21
+ categories,
22
+ });
9
23
  };
10
24
  exports.GET = GET;
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2ludGVncmF0aW9ucy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSx5Q0FBb0M7QUFHN0IsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUN0QixHQUErQixFQUMvQixHQUFpRCxFQUNqRCxFQUFFO0lBQ0YsTUFBTSxHQUFHLEdBQUcsSUFBQSxrQkFBTyxFQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3hCLE1BQU0sWUFBWSxHQUFHLE1BQU0sR0FBRyxDQUFDLHdCQUF3QixFQUFFLENBQUE7SUFDekQsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUE7QUFDNUIsQ0FBQyxDQUFBO0FBUFksUUFBQSxHQUFHLE9BT2YifQ==
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2ludGVncmF0aW9ucy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSx5Q0FBb0M7QUFJN0IsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUN0QixHQUErQixFQUMvQixHQUFpRCxFQUNqRCxFQUFFO0lBQ0YsTUFBTSxHQUFHLEdBQUcsSUFBQSxrQkFBTyxFQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3hCLE1BQU0sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFtQyxDQUFBO0lBQ25HLE1BQU0sYUFBYSxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUE7SUFDakMsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsQ0FBQTtJQUVsQyxNQUFNLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQztRQUM3RSxDQUFDO1FBQ0QsUUFBUTtRQUNSLEtBQUssRUFBRSxhQUFhO1FBQ3BCLE1BQU0sRUFBRSxjQUFjO0tBQ3ZCLENBQUMsQ0FBQTtJQUVGLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDUCxZQUFZO1FBQ1osS0FBSztRQUNMLEtBQUssRUFBRSxhQUFhO1FBQ3BCLE1BQU0sRUFBRSxjQUFjO1FBQ3RCLFVBQVU7S0FDWCxDQUFDLENBQUE7QUFDSixDQUFDLENBQUE7QUF2QlksUUFBQSxHQUFHLE9BdUJmIn0=
@@ -9,3 +9,10 @@ export type AdminSetIntegrationEnabledType = z.infer<typeof AdminSetIntegrationE
9
9
  export declare const AdminSetIntegrationEnabled: z.ZodObject<{
10
10
  is_enabled: z.ZodBoolean;
11
11
  }, z.core.$strip>;
12
+ export type AdminGetIntegrationsParamsType = z.infer<typeof AdminGetIntegrationsParams>;
13
+ export declare const AdminGetIntegrationsParams: z.ZodObject<{
14
+ q: z.ZodOptional<z.ZodString>;
15
+ category: z.ZodOptional<z.ZodString>;
16
+ limit: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
17
+ offset: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
18
+ }, z.core.$strip>;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AdminSetIntegrationEnabled = exports.AdminUpsertIntegration = void 0;
3
+ exports.AdminGetIntegrationsParams = exports.AdminSetIntegrationEnabled = exports.AdminUpsertIntegration = void 0;
4
4
  const zod_1 = require("@medusajs/deps/zod");
5
5
  exports.AdminUpsertIntegration = zod_1.z.object({
6
6
  title: zod_1.z.string().optional(),
@@ -12,4 +12,10 @@ exports.AdminUpsertIntegration = zod_1.z.object({
12
12
  exports.AdminSetIntegrationEnabled = zod_1.z.object({
13
13
  is_enabled: zod_1.z.boolean(),
14
14
  });
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvYWRtaW4vaW50ZWdyYXRpb25zL3ZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNENBQXNDO0FBR3pCLFFBQUEsc0JBQXNCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM3QyxLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QixvRkFBb0Y7SUFDcEYsd0ZBQXdGO0lBQ3hGLFVBQVUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2pDLE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7Q0FDMUMsQ0FBQyxDQUFBO0FBR1csUUFBQSwwQkFBMEIsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2pELFVBQVUsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFO0NBQ3hCLENBQUMsQ0FBQSJ9
15
+ exports.AdminGetIntegrationsParams = zod_1.z.object({
16
+ q: zod_1.z.string().optional(),
17
+ category: zod_1.z.string().optional(),
18
+ limit: zod_1.z.coerce.number().int().min(1).max(1000).optional(),
19
+ offset: zod_1.z.coerce.number().int().min(0).optional(),
20
+ });
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvYWRtaW4vaW50ZWdyYXRpb25zL3ZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNENBQXNDO0FBR3pCLFFBQUEsc0JBQXNCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM3QyxLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QixvRkFBb0Y7SUFDcEYsd0ZBQXdGO0lBQ3hGLFVBQVUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2pDLE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7Q0FDMUMsQ0FBQyxDQUFBO0FBR1csUUFBQSwwQkFBMEIsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2pELFVBQVUsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFO0NBQ3hCLENBQUMsQ0FBQTtBQUdXLFFBQUEsMEJBQTBCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNqRCxDQUFDLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUN4QixRQUFRLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUMvQixLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUMxRCxNQUFNLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0NBQ2xELENBQUMsQ0FBQSJ9
@@ -1,6 +1,6 @@
1
1
  export { defineIntegration, z } from "./modules/integration/descriptor/define";
2
2
  export { AbstractIntegrationProvider } from "./modules/integration/utils/abstract-integration-provider";
3
- export type { IntegrationDescriptor, IntegrationDescriptorInput, ModuleKind, OptionDef, OptionValidateContext, Settings, TestConnectionContext, TestConnectionResult, } from "./modules/integration/descriptor/define";
3
+ export type { IntegrationDescriptor, IntegrationDescriptorInput, CategoryKind, OptionDef, OptionValidateContext, Settings, TestConnectionContext, TestConnectionResult, } from "./modules/integration/descriptor/define";
4
4
  export type { FieldControl, I18nKey } from "./modules/integration/descriptor/meta";
5
5
  export { collectValidationIssues, isDescriptorComplete } from "./modules/integration/descriptor/validate";
6
6
  export type { IntegrationSectionData } from "./types";
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const globals_1 = require("@jest/globals");
4
+ const test_integration_connections_1 = require("../test-integration-connections");
5
+ (0, globals_1.describe)("tallyOutcomes", () => {
6
+ (0, globals_1.it)("counts each status into its own bucket (statuses, not display labels)", () => {
7
+ (0, globals_1.expect)((0, test_integration_connections_1.tallyOutcomes)(["passed", "failed", "passed", "skipped", "errored"])).toEqual({
8
+ passed: 2,
9
+ failed: 1,
10
+ skipped: 1,
11
+ errored: 1,
12
+ });
13
+ });
14
+ (0, globals_1.it)("returns all-zero buckets for no outcomes", () => {
15
+ (0, globals_1.expect)((0, test_integration_connections_1.tallyOutcomes)([])).toEqual({ passed: 0, failed: 0, skipped: 0, errored: 0 });
16
+ });
17
+ });
18
+ (0, globals_1.describe)("formatConnectionTestSummary", () => {
19
+ (0, globals_1.it)("maps passed→ok and failed→fail in the summary line", () => {
20
+ const line = (0, test_integration_connections_1.formatConnectionTestSummary)({ passed: 2, failed: 1, skipped: 3, errored: 0 });
21
+ (0, globals_1.expect)(line).toContain("ok: 2");
22
+ (0, globals_1.expect)(line).toContain("fail: 1");
23
+ (0, globals_1.expect)(line).toContain("skipped: 3");
24
+ (0, globals_1.expect)(line).toContain("errored: 0");
25
+ });
26
+ });
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1pbnRlZ3JhdGlvbi1jb25uZWN0aW9ucy51bml0LnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvam9icy9fX3Rlc3RzX18vdGVzdC1pbnRlZ3JhdGlvbi1jb25uZWN0aW9ucy51bml0LnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyQ0FBb0Q7QUFDcEQsa0ZBQTRGO0FBRTVGLElBQUEsa0JBQVEsRUFBQyxlQUFlLEVBQUUsR0FBRyxFQUFFO0lBQzdCLElBQUEsWUFBRSxFQUFDLHVFQUF1RSxFQUFFLEdBQUcsRUFBRTtRQUMvRSxJQUFBLGdCQUFNLEVBQUMsSUFBQSw0Q0FBYSxFQUFDLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDbEYsTUFBTSxFQUFFLENBQUM7WUFDVCxNQUFNLEVBQUUsQ0FBQztZQUNULE9BQU8sRUFBRSxDQUFDO1lBQ1YsT0FBTyxFQUFFLENBQUM7U0FDWCxDQUFDLENBQUE7SUFDSixDQUFDLENBQUMsQ0FBQTtJQUVGLElBQUEsWUFBRSxFQUFDLDBDQUEwQyxFQUFFLEdBQUcsRUFBRTtRQUNsRCxJQUFBLGdCQUFNLEVBQUMsSUFBQSw0Q0FBYSxFQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDckYsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQTtBQUVGLElBQUEsa0JBQVEsRUFBQyw2QkFBNkIsRUFBRSxHQUFHLEVBQUU7SUFDM0MsSUFBQSxZQUFFLEVBQUMsb0RBQW9ELEVBQUUsR0FBRyxFQUFFO1FBQzVELE1BQU0sSUFBSSxHQUFHLElBQUEsMERBQTJCLEVBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUMxRixJQUFBLGdCQUFNLEVBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQy9CLElBQUEsZ0JBQU0sRUFBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDakMsSUFBQSxnQkFBTSxFQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUNwQyxJQUFBLGdCQUFNLEVBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBQ3RDLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEifQ==
@@ -1,4 +1,11 @@
1
1
  import type { MedusaContainer } from "@medusajs/framework/types";
2
+ /** A per-integration test result: the provider's `passed`/`failed`/`skipped`, or `errored` (threw). */
3
+ export type TestOutcome = "passed" | "failed" | "skipped" | "errored";
4
+ export type OutcomeCounts = Record<TestOutcome, number>;
5
+ /** Tally outcomes into per-status buckets. Buckets are keyed by the status itself — no mapping. */
6
+ export declare function tallyOutcomes(outcomes: Iterable<TestOutcome>): OutcomeCounts;
7
+ /** The end-of-run summary line. `passed`→"ok", `failed`→"fail" for human-readable output. */
8
+ export declare function formatConnectionTestSummary(counts: OutcomeCounts): string;
2
9
  /**
3
10
  * Daily health check: run the connection test for every configured & enabled integration
4
11
  * that exposes one. Each test runs through `testIntegrationConnectionWorkflow`, which
@@ -1,9 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.config = void 0;
4
+ exports.tallyOutcomes = tallyOutcomes;
5
+ exports.formatConnectionTestSummary = formatConnectionTestSummary;
4
6
  exports.default = testIntegrationConnectionsJob;
5
7
  const integration_1 = require("../modules/integration");
6
8
  const integration_2 = require("../workflows/integration");
9
+ /** Tally outcomes into per-status buckets. Buckets are keyed by the status itself — no mapping. */
10
+ function tallyOutcomes(outcomes) {
11
+ const counts = { passed: 0, failed: 0, skipped: 0, errored: 0 };
12
+ for (const o of outcomes)
13
+ counts[o]++;
14
+ return counts;
15
+ }
16
+ /** The end-of-run summary line. `passed`→"ok", `failed`→"fail" for human-readable output. */
17
+ function formatConnectionTestSummary(counts) {
18
+ return (`[integration] connection-test job done — ok: ${counts.passed}, fail: ${counts.failed}, ` +
19
+ `skipped: ${counts.skipped}, errored: ${counts.errored}`);
20
+ }
7
21
  /**
8
22
  * Daily health check: run the connection test for every configured & enabled integration
9
23
  * that exposes one. Each test runs through `testIntegrationConnectionWorkflow`, which
@@ -17,20 +31,20 @@ const integration_2 = require("../workflows/integration");
17
31
  async function testIntegrationConnectionsJob(container) {
18
32
  const logger = container.resolve("logger");
19
33
  const service = container.resolve(integration_1.INTEGRATION_MODULE);
20
- const overview = await service.listIntegrationsOverview();
21
- const targets = overview.filter((i) => i.is_configured && i.is_enabled && i.has_test_connection);
34
+ const { integrations } = await service.listIntegrationsOverview();
35
+ const targets = integrations.filter((i) => i.is_configured && i.is_enabled && i.has_test_connection);
22
36
  if (targets.length === 0) {
23
37
  logger.info("[integration] connection-test job: no configured integrations to test");
24
38
  return;
25
39
  }
26
40
  logger.info(`[integration] connection-test job: testing ${targets.length} integration(s)`);
27
- const counts = { ok: 0, fail: 0, skipped: 0, errored: 0 };
41
+ const outcomes = [];
28
42
  for (const target of targets) {
29
43
  try {
30
44
  const { result } = await (0, integration_2.testIntegrationConnectionWorkflow)(container).run({
31
45
  input: { provider_id: target.provider_id },
32
46
  });
33
- counts[result.status]++;
47
+ outcomes.push(result.status);
34
48
  const line = `[integration] ${target.provider_id} → ${result.status}${result.message ? `: ${result.message}` : ""}`;
35
49
  if (result.status === "failed")
36
50
  logger.warn(line);
@@ -38,16 +52,15 @@ async function testIntegrationConnectionsJob(container) {
38
52
  logger.info(line);
39
53
  }
40
54
  catch (e) {
41
- counts.errored++;
55
+ outcomes.push("errored");
42
56
  logger.error(`[integration] ${target.provider_id} test errored: ${e?.message ?? e}`);
43
57
  }
44
58
  }
45
- logger.info(`[integration] connection-test job done — ok: ${counts.ok}, fail: ${counts.fail}, ` +
46
- `skipped: ${counts.skipped}, errored: ${counts.errored}`);
59
+ logger.info(formatConnectionTestSummary(tallyOutcomes(outcomes)));
47
60
  }
48
61
  exports.config = {
49
62
  name: "test-integration-connections-daily",
50
63
  // Once a day, off-peak (03:00). Cron: minute hour day-of-month month day-of-week.
51
64
  schedule: "0 3 * * *",
52
65
  };
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1pbnRlZ3JhdGlvbi1jb25uZWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9qb2JzL3Rlc3QtaW50ZWdyYXRpb24tY29ubmVjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBZUEsZ0RBdUNDO0FBckRELHdEQUEyRDtBQUUzRCwwREFBNEU7QUFFNUU7Ozs7Ozs7OztHQVNHO0FBQ1ksS0FBSyxVQUFVLDZCQUE2QixDQUFDLFNBQTBCO0lBQ3BGLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQVMsUUFBUSxDQUFDLENBQUE7SUFDbEQsTUFBTSxPQUFPLEdBQTZCLFNBQVMsQ0FBQyxPQUFPLENBQUMsZ0NBQWtCLENBQUMsQ0FBQTtJQUUvRSxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxDQUFBO0lBQ3pELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQzdCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLG1CQUFtQixDQUNoRSxDQUFBO0lBRUQsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUVBQXVFLENBQUMsQ0FBQTtRQUNwRixPQUFNO0lBQ1IsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsOENBQThDLE9BQU8sQ0FBQyxNQUFNLGlCQUFpQixDQUFDLENBQUE7SUFFMUYsTUFBTSxNQUFNLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUE7SUFFekQsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUM7WUFDSCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFBLCtDQUFpQyxFQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztnQkFDeEUsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUU7YUFDM0MsQ0FBQyxDQUFBO1lBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFBO1lBQ3ZCLE1BQU0sSUFBSSxHQUFHLGlCQUFpQixNQUFNLENBQUMsV0FBVyxNQUFNLE1BQU0sQ0FBQyxNQUFNLEdBQ2pFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUMzQyxFQUFFLENBQUE7WUFDRixJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssUUFBUTtnQkFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBOztnQkFDNUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN4QixDQUFDO1FBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztZQUNoQixNQUFNLENBQUMsT0FBTyxFQUFFLENBQUE7WUFDaEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsTUFBTSxDQUFDLFdBQVcsa0JBQWtCLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUN0RixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFJLENBQ1QsZ0RBQWdELE1BQU0sQ0FBQyxFQUFFLFdBQVcsTUFBTSxDQUFDLElBQUksSUFBSTtRQUNqRixZQUFZLE1BQU0sQ0FBQyxPQUFPLGNBQWMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUMzRCxDQUFBO0FBQ0gsQ0FBQztBQUVZLFFBQUEsTUFBTSxHQUFHO0lBQ3BCLElBQUksRUFBRSxvQ0FBb0M7SUFDMUMsa0ZBQWtGO0lBQ2xGLFFBQVEsRUFBRSxXQUFXO0NBQ3RCLENBQUEifQ==
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1pbnRlZ3JhdGlvbi1jb25uZWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9qb2JzL3Rlc3QtaW50ZWdyYXRpb24tY29ubmVjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBVUEsc0NBSUM7QUFHRCxrRUFLQztBQVlELGdEQW9DQztBQXJFRCx3REFBMkQ7QUFFM0QsMERBQTRFO0FBTTVFLG1HQUFtRztBQUNuRyxTQUFnQixhQUFhLENBQUMsUUFBK0I7SUFDM0QsTUFBTSxNQUFNLEdBQWtCLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFBO0lBQzlFLEtBQUssTUFBTSxDQUFDLElBQUksUUFBUTtRQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBQ3JDLE9BQU8sTUFBTSxDQUFBO0FBQ2YsQ0FBQztBQUVELDZGQUE2RjtBQUM3RixTQUFnQiwyQkFBMkIsQ0FBQyxNQUFxQjtJQUMvRCxPQUFPLENBQ0wsZ0RBQWdELE1BQU0sQ0FBQyxNQUFNLFdBQVcsTUFBTSxDQUFDLE1BQU0sSUFBSTtRQUN6RixZQUFZLE1BQU0sQ0FBQyxPQUFPLGNBQWMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUN6RCxDQUFBO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNZLEtBQUssVUFBVSw2QkFBNkIsQ0FBQyxTQUEwQjtJQUNwRixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFTLFFBQVEsQ0FBQyxDQUFBO0lBQ2xELE1BQU0sT0FBTyxHQUE2QixTQUFTLENBQUMsT0FBTyxDQUFDLGdDQUFrQixDQUFDLENBQUE7SUFFL0UsTUFBTSxFQUFFLFlBQVksRUFBRSxHQUFHLE1BQU0sT0FBTyxDQUFDLHdCQUF3QixFQUFFLENBQUE7SUFDakUsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FDakMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsbUJBQW1CLENBQ2hFLENBQUE7SUFFRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekIsTUFBTSxDQUFDLElBQUksQ0FBQyx1RUFBdUUsQ0FBQyxDQUFBO1FBQ3BGLE9BQU07SUFDUixDQUFDO0lBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyw4Q0FBOEMsT0FBTyxDQUFDLE1BQU0saUJBQWlCLENBQUMsQ0FBQTtJQUUxRixNQUFNLFFBQVEsR0FBa0IsRUFBRSxDQUFBO0lBRWxDLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sSUFBQSwrQ0FBaUMsRUFBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBQ3hFLEtBQUssRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFO2FBQzNDLENBQUMsQ0FBQTtZQUNGLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQzVCLE1BQU0sSUFBSSxHQUFHLGlCQUFpQixNQUFNLENBQUMsV0FBVyxNQUFNLE1BQU0sQ0FBQyxNQUFNLEdBQ2pFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUMzQyxFQUFFLENBQUE7WUFDRixJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssUUFBUTtnQkFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBOztnQkFDNUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN4QixDQUFDO1FBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztZQUNoQixRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBQ3hCLE1BQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLE1BQU0sQ0FBQyxXQUFXLGtCQUFrQixDQUFDLEVBQUUsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDdEYsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDbkUsQ0FBQztBQUVZLFFBQUEsTUFBTSxHQUFHO0lBQ3BCLElBQUksRUFBRSxvQ0FBb0M7SUFDMUMsa0ZBQWtGO0lBQ2xGLFFBQVEsRUFBRSxXQUFXO0NBQ3RCLENBQUEifQ==
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const catalog_generated_1 = require("../catalog.generated");
4
+ describe("FALLBACK_CATALOG (generated from integrations.yml)", () => {
5
+ it("contains all five active integrations", () => {
6
+ expect(catalog_generated_1.FALLBACK_CATALOG).toHaveLength(5);
7
+ const ids = catalog_generated_1.FALLBACK_CATALOG.map((c) => c.integrationId).sort();
8
+ expect(ids).toEqual(["1c", "apiship", "robokassa", "tkassa", "yookassa"]);
9
+ });
10
+ it("flattens the 1c entry to the CatalogIntegration shape", () => {
11
+ const oneC = catalog_generated_1.FALLBACK_CATALOG.find((c) => c.integrationId === "1c");
12
+ expect(oneC).toMatchObject({
13
+ slug: "gorgo-medusa-1c",
14
+ npm: "@gorgo/medusa-1c",
15
+ category: "erp",
16
+ author: "gorgo",
17
+ authorLocalized: "Gorgo",
18
+ label: "1C:Enterprise",
19
+ icon: "/api/plugin-icon?slug=gorgo-medusa-1c",
20
+ stars: null,
21
+ downloads: null,
22
+ });
23
+ expect(oneC.configSnippet).toContain("@gorgo/medusa-1c");
24
+ });
25
+ it("every entry is well-formed", () => {
26
+ for (const c of catalog_generated_1.FALLBACK_CATALOG) {
27
+ expect(typeof c.integrationId).toBe("string");
28
+ expect(c.integrationId.length).toBeGreaterThan(0);
29
+ expect(typeof c.label).toBe("string");
30
+ expect(c.label.length).toBeGreaterThan(0);
31
+ expect(c.icon).toBe(`/api/plugin-icon?slug=${c.slug}`);
32
+ expect(c.stars).toBeNull();
33
+ expect(c.downloads).toBeNull();
34
+ }
35
+ });
36
+ });
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy1mYWxsYmFjay51bml0LnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL19fdGVzdHNfXy9jYXRhbG9nLWZhbGxiYWNrLnVuaXQuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDREQUF1RDtBQUV2RCxRQUFRLENBQUMsb0RBQW9ELEVBQUUsR0FBRyxFQUFFO0lBQ2xFLEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSxHQUFHLEVBQUU7UUFDL0MsTUFBTSxDQUFDLG9DQUFnQixDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3hDLE1BQU0sR0FBRyxHQUFHLG9DQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO1FBQy9ELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQTtJQUMzRSxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyx1REFBdUQsRUFBRSxHQUFHLEVBQUU7UUFDL0QsTUFBTSxJQUFJLEdBQUcsb0NBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBRSxDQUFBO1FBQ3BFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUM7WUFDekIsSUFBSSxFQUFFLGlCQUFpQjtZQUN2QixHQUFHLEVBQUUsa0JBQWtCO1lBQ3ZCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsTUFBTSxFQUFFLE9BQU87WUFDZixlQUFlLEVBQUUsT0FBTztZQUN4QixLQUFLLEVBQUUsZUFBZTtZQUN0QixJQUFJLEVBQUUsdUNBQXVDO1lBQzdDLEtBQUssRUFBRSxJQUFJO1lBQ1gsU0FBUyxFQUFFLElBQUk7U0FDaEIsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtJQUMxRCxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7UUFDcEMsS0FBSyxNQUFNLENBQUMsSUFBSSxvQ0FBZ0IsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDN0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ2pELE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDckMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ3pDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtZQUN0RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFBO1lBQzFCLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUE7UUFDaEMsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEifQ==
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const catalog_1 = require("../catalog");
4
+ const catalog_generated_1 = require("../catalog.generated");
5
+ const remoteItem = {
6
+ integrationId: "remote-only",
7
+ slug: "gorgo-remote",
8
+ npm: "@gorgo/remote",
9
+ category: "payment",
10
+ author: "gorgo",
11
+ authorLocalized: "Gorgo",
12
+ label: "Remote Only",
13
+ shortDescription: "from the api",
14
+ repository: "https://example.com",
15
+ docsUrl: "https://example.com/docs",
16
+ icon: "/api/plugin-icon?slug=gorgo-remote",
17
+ stars: 1,
18
+ downloads: null,
19
+ };
20
+ const okResponse = (integrations) => ({
21
+ ok: true,
22
+ status: 200,
23
+ json: async () => ({ integrations }),
24
+ });
25
+ describe("loadCatalog", () => {
26
+ const realFetch = global.fetch;
27
+ beforeEach(() => (0, catalog_1.resetCatalogCacheForTests)());
28
+ afterEach(() => {
29
+ global.fetch = realFetch;
30
+ jest.restoreAllMocks();
31
+ });
32
+ it("returns the remote catalog on success", async () => {
33
+ global.fetch = jest.fn().mockResolvedValue(okResponse([remoteItem]));
34
+ expect(await (0, catalog_1.loadCatalog)()).toEqual([remoteItem]);
35
+ });
36
+ it("caches within the TTL (no second fetch)", async () => {
37
+ const fetchMock = jest.fn().mockResolvedValue(okResponse([remoteItem]));
38
+ global.fetch = fetchMock;
39
+ await (0, catalog_1.loadCatalog)();
40
+ await (0, catalog_1.loadCatalog)();
41
+ expect(fetchMock).toHaveBeenCalledTimes(1);
42
+ });
43
+ it("falls back to FALLBACK_CATALOG when the fetch rejects", async () => {
44
+ global.fetch = jest.fn().mockRejectedValue(new Error("offline"));
45
+ expect(await (0, catalog_1.loadCatalog)()).toBe(catalog_generated_1.FALLBACK_CATALOG);
46
+ });
47
+ it("falls back when the response is not ok", async () => {
48
+ global.fetch = jest
49
+ .fn()
50
+ .mockResolvedValue({ ok: false, status: 500, json: async () => ({}) });
51
+ expect(await (0, catalog_1.loadCatalog)()).toBe(catalog_generated_1.FALLBACK_CATALOG);
52
+ });
53
+ it("falls back when the response shape is invalid", async () => {
54
+ global.fetch = jest.fn().mockResolvedValue(okResponse([{ nope: true }]));
55
+ expect(await (0, catalog_1.loadCatalog)()).toBe(catalog_generated_1.FALLBACK_CATALOG);
56
+ });
57
+ it("serves the last-good cache when a later fetch fails after TTL expiry", async () => {
58
+ const nowSpy = jest.spyOn(Date, "now").mockReturnValue(1_000);
59
+ const fetchMock = jest
60
+ .fn()
61
+ .mockResolvedValueOnce(okResponse([remoteItem]))
62
+ .mockRejectedValue(new Error("offline"));
63
+ global.fetch = fetchMock;
64
+ expect(await (0, catalog_1.loadCatalog)()).toEqual([remoteItem]); // fetch #1 → cached at t=1000
65
+ nowSpy.mockReturnValue(1_000 + 60 * 60 * 1000 + 1); // past the 1h TTL
66
+ const second = await (0, catalog_1.loadCatalog)(); // stale → fetch #2 rejects → last-good, not yml
67
+ expect(second).toEqual([remoteItem]);
68
+ expect(fetchMock).toHaveBeenCalledTimes(2);
69
+ });
70
+ });
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy51bml0LnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL19fdGVzdHNfXy9jYXRhbG9nLnVuaXQuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHdDQUFtRTtBQUNuRSw0REFBdUQ7QUFFdkQsTUFBTSxVQUFVLEdBQUc7SUFDakIsYUFBYSxFQUFFLGFBQWE7SUFDNUIsSUFBSSxFQUFFLGNBQWM7SUFDcEIsR0FBRyxFQUFFLGVBQWU7SUFDcEIsUUFBUSxFQUFFLFNBQVM7SUFDbkIsTUFBTSxFQUFFLE9BQU87SUFDZixlQUFlLEVBQUUsT0FBTztJQUN4QixLQUFLLEVBQUUsYUFBYTtJQUNwQixnQkFBZ0IsRUFBRSxjQUFjO0lBQ2hDLFVBQVUsRUFBRSxxQkFBcUI7SUFDakMsT0FBTyxFQUFFLDBCQUEwQjtJQUNuQyxJQUFJLEVBQUUsb0NBQW9DO0lBQzFDLEtBQUssRUFBRSxDQUFDO0lBQ1IsU0FBUyxFQUFFLElBQUk7Q0FDaEIsQ0FBQTtBQUVELE1BQU0sVUFBVSxHQUFHLENBQUMsWUFBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMzQyxFQUFFLEVBQUUsSUFBSTtJQUNSLE1BQU0sRUFBRSxHQUFHO0lBQ1gsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDO0NBQ3JDLENBQUMsQ0FBQTtBQUVGLFFBQVEsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFO0lBQzNCLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUE7SUFDOUIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUEsbUNBQXlCLEdBQUUsQ0FBQyxDQUFBO0lBQzdDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixNQUFNLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQTtRQUN4QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUE7SUFDeEIsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsdUNBQXVDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDckQsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBUSxDQUFBO1FBQzNFLE1BQU0sQ0FBQyxNQUFNLElBQUEscUJBQVcsR0FBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQTtJQUNuRCxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN2RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3ZFLE1BQU0sQ0FBQyxLQUFLLEdBQUcsU0FBZ0IsQ0FBQTtRQUMvQixNQUFNLElBQUEscUJBQVcsR0FBRSxDQUFBO1FBQ25CLE1BQU0sSUFBQSxxQkFBVyxHQUFFLENBQUE7UUFDbkIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzVDLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLHVEQUF1RCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3JFLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFRLENBQUE7UUFDdkUsTUFBTSxDQUFDLE1BQU0sSUFBQSxxQkFBVyxHQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsb0NBQWdCLENBQUMsQ0FBQTtJQUNwRCxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyx3Q0FBd0MsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN0RCxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUk7YUFDaEIsRUFBRSxFQUFFO2FBQ0osaUJBQWlCLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFRLENBQUE7UUFDL0UsTUFBTSxDQUFDLE1BQU0sSUFBQSxxQkFBVyxHQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsb0NBQWdCLENBQUMsQ0FBQTtJQUNwRCxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQywrQ0FBK0MsRUFBRSxLQUFLLElBQUksRUFBRTtRQUM3RCxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQVEsQ0FBQTtRQUMvRSxNQUFNLENBQUMsTUFBTSxJQUFBLHFCQUFXLEdBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQ0FBZ0IsQ0FBQyxDQUFBO0lBQ3BELENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLHNFQUFzRSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3BGLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUM3RCxNQUFNLFNBQVMsR0FBRyxJQUFJO2FBQ25CLEVBQUUsRUFBRTthQUNKLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7YUFDL0MsaUJBQWlCLENBQUMsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtRQUMxQyxNQUFNLENBQUMsS0FBSyxHQUFHLFNBQWdCLENBQUE7UUFFL0IsTUFBTSxDQUFDLE1BQU0sSUFBQSxxQkFBVyxHQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBLENBQUMsOEJBQThCO1FBRWhGLE1BQU0sQ0FBQyxlQUFlLENBQUMsS0FBSyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFBLENBQUMsa0JBQWtCO1FBQ3JFLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBQSxxQkFBVyxHQUFFLENBQUEsQ0FBQyxnREFBZ0Q7UUFDbkYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7UUFDcEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzVDLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEifQ==
@@ -0,0 +1,9 @@
1
+ import type { CatalogIntegration } from "../types";
2
+ /**
3
+ * The Gorgo integration catalog: the live API when reachable (cached ~1h), otherwise the
4
+ * last-good response, otherwise the yml-derived FALLBACK_CATALOG shipped with the plugin.
5
+ * Never throws.
6
+ */
7
+ export declare function loadCatalog(): Promise<CatalogIntegration[]>;
8
+ /** Test-only: clear the in-memory cache between cases. */
9
+ export declare function resetCatalogCacheForTests(): void;
@@ -0,0 +1,2 @@
1
+ import type { CatalogIntegration } from "../types";
2
+ export declare const FALLBACK_CATALOG: CatalogIntegration[];
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ /* eslint-disable */
3
+ // AUTO-GENERATED from src/lib/integrations.yml by scripts/gen-catalog.mjs.
4
+ // Do not edit by hand — run `node scripts/gen-catalog.mjs` to regenerate.
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.FALLBACK_CATALOG = void 0;
7
+ exports.FALLBACK_CATALOG = [
8
+ {
9
+ "integrationId": "1c",
10
+ "slug": "gorgo-medusa-1c",
11
+ "npm": "@gorgo/medusa-1c",
12
+ "category": "erp",
13
+ "author": "gorgo",
14
+ "authorLocalized": "Gorgo",
15
+ "label": "1C:Enterprise",
16
+ "shortDescription": "Data exchange between Medusa and 1C:Enterprise ERP",
17
+ "repository": "https://github.com/gorgojs/medusa-plugins",
18
+ "docsUrl": "https://docs.gorgojs.com/medusa-plugins/1c-enterprise",
19
+ "configSnippet": "// Registered as a module, not an integration provider:\n{\n resolve: \"@gorgo/medusa-1c\",\n}\n",
20
+ "icon": "/api/plugin-icon?slug=gorgo-medusa-1c",
21
+ "stars": null,
22
+ "downloads": null
23
+ },
24
+ {
25
+ "integrationId": "apiship",
26
+ "slug": "gorgo-medusa-fulfillment-apiship",
27
+ "npm": "@gorgo/medusa-fulfillment-apiship",
28
+ "category": "fulfillment",
29
+ "author": "gorgo",
30
+ "authorLocalized": "Gorgo",
31
+ "label": "ApiShip",
32
+ "shortDescription": "Multi-carrier shipping aggregation via ApiShip",
33
+ "repository": "https://github.com/gorgojs/medusa-plugins",
34
+ "docsUrl": "https://docs.gorgojs.com/medusa-plugins/apiship",
35
+ "icon": "/api/plugin-icon?slug=gorgo-medusa-fulfillment-apiship",
36
+ "stars": null,
37
+ "downloads": null
38
+ },
39
+ {
40
+ "integrationId": "robokassa",
41
+ "slug": "gorgo-medusa-payment-robokassa",
42
+ "npm": "@gorgo/medusa-payment-robokassa",
43
+ "category": "payment",
44
+ "author": "gorgo",
45
+ "authorLocalized": "Gorgo",
46
+ "label": "Robokassa",
47
+ "shortDescription": "Accept payments via Robokassa",
48
+ "repository": "https://github.com/gorgojs/medusa-plugins",
49
+ "docsUrl": "https://docs.gorgojs.com/medusa-plugins/robokassa",
50
+ "configSnippet": "{\n resolve: \"@gorgo/medusa-payment-robokassa\",\n options: {\n // credentials & settings are managed in Admin, not here\n },\n}\n",
51
+ "icon": "/api/plugin-icon?slug=gorgo-medusa-payment-robokassa",
52
+ "stars": null,
53
+ "downloads": null
54
+ },
55
+ {
56
+ "integrationId": "tkassa",
57
+ "slug": "gorgo-medusa-payment-tkassa",
58
+ "npm": "@gorgo/medusa-payment-tkassa",
59
+ "category": "payment",
60
+ "author": "gorgo",
61
+ "authorLocalized": "Gorgo",
62
+ "label": "T-Kassa",
63
+ "shortDescription": "Accept payments via T-Kassa by T-Bank",
64
+ "repository": "https://github.com/gorgojs/medusa-plugins",
65
+ "docsUrl": "https://docs.gorgojs.com/medusa-plugins/t-kassa",
66
+ "configSnippet": "{\n resolve: \"@gorgo/medusa-payment-tkassa\",\n options: {\n // credentials & settings are managed in Admin, not here\n },\n}\n",
67
+ "icon": "/api/plugin-icon?slug=gorgo-medusa-payment-tkassa",
68
+ "stars": null,
69
+ "downloads": null
70
+ },
71
+ {
72
+ "integrationId": "yookassa",
73
+ "slug": "gorgo-medusa-payment-yookassa",
74
+ "npm": "@gorgo/medusa-payment-yookassa",
75
+ "category": "payment",
76
+ "author": "gorgo",
77
+ "authorLocalized": "Gorgo",
78
+ "label": "YooKassa",
79
+ "shortDescription": "Accept payments via YooKassa",
80
+ "repository": "https://github.com/gorgojs/medusa-plugins",
81
+ "docsUrl": "https://docs.gorgojs.com/medusa-plugins/yookassa",
82
+ "configSnippet": "{\n resolve: \"@gorgo/medusa-payment-yookassa\",\n options: {\n // credentials & settings are managed in Admin, not here\n },\n}\n",
83
+ "icon": "/api/plugin-icon?slug=gorgo-medusa-payment-yookassa",
84
+ "stars": null,
85
+ "downloads": null
86
+ }
87
+ ];
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy5nZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NhdGFsb2cuZ2VuZXJhdGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxvQkFBb0I7QUFDcEIsMkVBQTJFO0FBQzNFLDBFQUEwRTs7O0FBSTdELFFBQUEsZ0JBQWdCLEdBQXlCO0lBQ3BEO1FBQ0UsZUFBZSxFQUFFLElBQUk7UUFDckIsTUFBTSxFQUFFLGlCQUFpQjtRQUN6QixLQUFLLEVBQUUsa0JBQWtCO1FBQ3pCLFVBQVUsRUFBRSxLQUFLO1FBQ2pCLFFBQVEsRUFBRSxPQUFPO1FBQ2pCLGlCQUFpQixFQUFFLE9BQU87UUFDMUIsT0FBTyxFQUFFLGVBQWU7UUFDeEIsa0JBQWtCLEVBQUUsb0RBQW9EO1FBQ3hFLFlBQVksRUFBRSwyQ0FBMkM7UUFDekQsU0FBUyxFQUFFLHVEQUF1RDtRQUNsRSxlQUFlLEVBQUUsbUdBQW1HO1FBQ3BILE1BQU0sRUFBRSx1Q0FBdUM7UUFDL0MsT0FBTyxFQUFFLElBQUk7UUFDYixXQUFXLEVBQUUsSUFBSTtLQUNsQjtJQUNEO1FBQ0UsZUFBZSxFQUFFLFNBQVM7UUFDMUIsTUFBTSxFQUFFLGtDQUFrQztRQUMxQyxLQUFLLEVBQUUsbUNBQW1DO1FBQzFDLFVBQVUsRUFBRSxhQUFhO1FBQ3pCLFFBQVEsRUFBRSxPQUFPO1FBQ2pCLGlCQUFpQixFQUFFLE9BQU87UUFDMUIsT0FBTyxFQUFFLFNBQVM7UUFDbEIsa0JBQWtCLEVBQUUsZ0RBQWdEO1FBQ3BFLFlBQVksRUFBRSwyQ0FBMkM7UUFDekQsU0FBUyxFQUFFLGlEQUFpRDtRQUM1RCxNQUFNLEVBQUUsd0RBQXdEO1FBQ2hFLE9BQU8sRUFBRSxJQUFJO1FBQ2IsV0FBVyxFQUFFLElBQUk7S0FDbEI7SUFDRDtRQUNFLGVBQWUsRUFBRSxXQUFXO1FBQzVCLE1BQU0sRUFBRSxnQ0FBZ0M7UUFDeEMsS0FBSyxFQUFFLGlDQUFpQztRQUN4QyxVQUFVLEVBQUUsU0FBUztRQUNyQixRQUFRLEVBQUUsT0FBTztRQUNqQixpQkFBaUIsRUFBRSxPQUFPO1FBQzFCLE9BQU8sRUFBRSxXQUFXO1FBQ3BCLGtCQUFrQixFQUFFLCtCQUErQjtRQUNuRCxZQUFZLEVBQUUsMkNBQTJDO1FBQ3pELFNBQVMsRUFBRSxtREFBbUQ7UUFDOUQsZUFBZSxFQUFFLDJJQUEySTtRQUM1SixNQUFNLEVBQUUsc0RBQXNEO1FBQzlELE9BQU8sRUFBRSxJQUFJO1FBQ2IsV0FBVyxFQUFFLElBQUk7S0FDbEI7SUFDRDtRQUNFLGVBQWUsRUFBRSxRQUFRO1FBQ3pCLE1BQU0sRUFBRSw2QkFBNkI7UUFDckMsS0FBSyxFQUFFLDhCQUE4QjtRQUNyQyxVQUFVLEVBQUUsU0FBUztRQUNyQixRQUFRLEVBQUUsT0FBTztRQUNqQixpQkFBaUIsRUFBRSxPQUFPO1FBQzFCLE9BQU8sRUFBRSxTQUFTO1FBQ2xCLGtCQUFrQixFQUFFLHVDQUF1QztRQUMzRCxZQUFZLEVBQUUsMkNBQTJDO1FBQ3pELFNBQVMsRUFBRSxpREFBaUQ7UUFDNUQsZUFBZSxFQUFFLHdJQUF3STtRQUN6SixNQUFNLEVBQUUsbURBQW1EO1FBQzNELE9BQU8sRUFBRSxJQUFJO1FBQ2IsV0FBVyxFQUFFLElBQUk7S0FDbEI7SUFDRDtRQUNFLGVBQWUsRUFBRSxVQUFVO1FBQzNCLE1BQU0sRUFBRSwrQkFBK0I7UUFDdkMsS0FBSyxFQUFFLGdDQUFnQztRQUN2QyxVQUFVLEVBQUUsU0FBUztRQUNyQixRQUFRLEVBQUUsT0FBTztRQUNqQixpQkFBaUIsRUFBRSxPQUFPO1FBQzFCLE9BQU8sRUFBRSxVQUFVO1FBQ25CLGtCQUFrQixFQUFFLDhCQUE4QjtRQUNsRCxZQUFZLEVBQUUsMkNBQTJDO1FBQ3pELFNBQVMsRUFBRSxrREFBa0Q7UUFDN0QsZUFBZSxFQUFFLDBJQUEwSTtRQUMzSixNQUFNLEVBQUUscURBQXFEO1FBQzdELE9BQU8sRUFBRSxJQUFJO1FBQ2IsV0FBVyxFQUFFLElBQUk7S0FDbEI7Q0FDRixDQUFBIn0=