@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
@@ -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,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
@@ -31,8 +31,8 @@ function formatConnectionTestSummary(counts) {
31
31
  async function testIntegrationConnectionsJob(container) {
32
32
  const logger = container.resolve("logger");
33
33
  const service = container.resolve(integration_1.INTEGRATION_MODULE);
34
- const overview = await service.listIntegrationsOverview();
35
- 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);
36
36
  if (targets.length === 0) {
37
37
  logger.info("[integration] connection-test job: no configured integrations to test");
38
38
  return;
@@ -63,4 +63,4 @@ exports.config = {
63
63
  // Once a day, off-peak (03:00). Cron: minute hour day-of-month month day-of-week.
64
64
  schedule: "0 3 * * *",
65
65
  };
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1pbnRlZ3JhdGlvbi1jb25uZWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9qb2JzL3Rlc3QtaW50ZWdyYXRpb24tY29ubmVjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBVUEsc0NBSUM7QUFHRCxrRUFLQztBQVlELGdEQW9DQztBQXJFRCx3REFBMkQ7QUFFM0QsMERBQTRFO0FBTTVFLG1HQUFtRztBQUNuRyxTQUFnQixhQUFhLENBQUMsUUFBK0I7SUFDM0QsTUFBTSxNQUFNLEdBQWtCLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFBO0lBQzlFLEtBQUssTUFBTSxDQUFDLElBQUksUUFBUTtRQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBQ3JDLE9BQU8sTUFBTSxDQUFBO0FBQ2YsQ0FBQztBQUVELDZGQUE2RjtBQUM3RixTQUFnQiwyQkFBMkIsQ0FBQyxNQUFxQjtJQUMvRCxPQUFPLENBQ0wsZ0RBQWdELE1BQU0sQ0FBQyxNQUFNLFdBQVcsTUFBTSxDQUFDLE1BQU0sSUFBSTtRQUN6RixZQUFZLE1BQU0sQ0FBQyxPQUFPLGNBQWMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUN6RCxDQUFBO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNZLEtBQUssVUFBVSw2QkFBNkIsQ0FBQyxTQUEwQjtJQUNwRixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFTLFFBQVEsQ0FBQyxDQUFBO0lBQ2xELE1BQU0sT0FBTyxHQUE2QixTQUFTLENBQUMsT0FBTyxDQUFDLGdDQUFrQixDQUFDLENBQUE7SUFFL0UsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsd0JBQXdCLEVBQUUsQ0FBQTtJQUN6RCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUM3QixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxtQkFBbUIsQ0FDaEUsQ0FBQTtJQUVELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QixNQUFNLENBQUMsSUFBSSxDQUFDLHVFQUF1RSxDQUFDLENBQUE7UUFDcEYsT0FBTTtJQUNSLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLDhDQUE4QyxPQUFPLENBQUMsTUFBTSxpQkFBaUIsQ0FBQyxDQUFBO0lBRTFGLE1BQU0sUUFBUSxHQUFrQixFQUFFLENBQUE7SUFFbEMsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUM7WUFDSCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFBLCtDQUFpQyxFQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztnQkFDeEUsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUU7YUFDM0MsQ0FBQyxDQUFBO1lBQ0YsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDNUIsTUFBTSxJQUFJLEdBQUcsaUJBQWlCLE1BQU0sQ0FBQyxXQUFXLE1BQU0sTUFBTSxDQUFDLE1BQU0sR0FDakUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQzNDLEVBQUUsQ0FBQTtZQUNGLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxRQUFRO2dCQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7O2dCQUM1QyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3hCLENBQUM7UUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1lBQ2hCLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7WUFDeEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsTUFBTSxDQUFDLFdBQVcsa0JBQWtCLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUN0RixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNuRSxDQUFDO0FBRVksUUFBQSxNQUFNLEdBQUc7SUFDcEIsSUFBSSxFQUFFLG9DQUFvQztJQUMxQyxrRkFBa0Y7SUFDbEYsUUFBUSxFQUFFLFdBQVc7Q0FDdEIsQ0FBQSJ9
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy51bml0LnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL19fdGVzdHNfXy9jYXRhbG9nLnVuaXQuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHdDQUFtRTtBQUNuRSw0REFBdUQ7QUFFdkQsTUFBTSxVQUFVLEdBQUc7SUFDakIsYUFBYSxFQUFFLGFBQWE7SUFDNUIsSUFBSSxFQUFFLGNBQWM7SUFDcEIsR0FBRyxFQUFFLGVBQWU7SUFDcEIsUUFBUSxFQUFFLFNBQVM7SUFDbkIsTUFBTSxFQUFFLE9BQU87SUFDZixlQUFlLEVBQUUsT0FBTztJQUN4QixLQUFLLEVBQUUsYUFBYTtJQUNwQixnQkFBZ0IsRUFBRSxjQUFjO0lBQ2hDLFVBQVUsRUFBRSxxQkFBcUI7SUFDakMsT0FBTyxFQUFFLDBCQUEwQjtJQUNuQyxJQUFJLEVBQUUsb0NBQW9DO0lBQzFDLEtBQUssRUFBRSxDQUFDO0lBQ1IsU0FBUyxFQUFFLElBQUk7Q0FDaEIsQ0FBQTtBQUVELE1BQU0sVUFBVSxHQUFHLENBQUMsWUFBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMzQyxFQUFFLEVBQUUsSUFBSTtJQUNSLE1BQU0sRUFBRSxHQUFHO0lBQ1gsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDO0NBQ3JDLENBQUMsQ0FBQTtBQUVGLFFBQVEsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFO0lBQzNCLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUE7SUFDOUIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUEsbUNBQXlCLEdBQUUsQ0FBQyxDQUFBO0lBQzdDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixNQUFNLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQTtRQUN4QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUE7SUFDeEIsQ0FBQyxDQUFDLENB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
@@ -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=
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadCatalog = loadCatalog;
4
+ exports.resetCatalogCacheForTests = resetCatalogCacheForTests;
5
+ const catalog_generated_1 = require("./catalog.generated");
6
+ const CATALOG_API_URL = "https://gorgojs.com/api/integrations";
7
+ const CACHE_TTL_MS = 60 * 60 * 1000; // 1 hour
8
+ const FETCH_TIMEOUT_MS = 4000;
9
+ let cache = null;
10
+ /** Minimal shape check — enough to reject a malformed API response. */
11
+ const isEntry = (x) => !!x &&
12
+ typeof x.integrationId === "string" &&
13
+ typeof x.slug === "string" &&
14
+ typeof x.label === "string";
15
+ /** Fetch the remote catalog with a hard timeout. Throws on any failure/invalid shape. */
16
+ async function fetchRemoteCatalog() {
17
+ const controller = new AbortController();
18
+ const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
19
+ try {
20
+ const res = await fetch(CATALOG_API_URL, { signal: controller.signal });
21
+ if (!res.ok)
22
+ throw new Error(`catalog api responded ${res.status}`);
23
+ const body = (await res.json());
24
+ const list = body?.integrations;
25
+ if (!Array.isArray(list) || !list.every(isEntry)) {
26
+ throw new Error("catalog api returned an unexpected shape");
27
+ }
28
+ return list;
29
+ }
30
+ finally {
31
+ clearTimeout(timer);
32
+ }
33
+ }
34
+ /**
35
+ * The Gorgo integration catalog: the live API when reachable (cached ~1h), otherwise the
36
+ * last-good response, otherwise the yml-derived FALLBACK_CATALOG shipped with the plugin.
37
+ * Never throws.
38
+ */
39
+ async function loadCatalog() {
40
+ if (cache && Date.now() - cache.at < CACHE_TTL_MS)
41
+ return cache.data;
42
+ try {
43
+ const data = await fetchRemoteCatalog();
44
+ cache = { data, at: Date.now() };
45
+ return data;
46
+ }
47
+ catch {
48
+ return cache?.data ?? catalog_generated_1.FALLBACK_CATALOG;
49
+ }
50
+ }
51
+ /** Test-only: clear the in-memory cache between cases. */
52
+ function resetCatalogCacheForTests() {
53
+ cache = null;
54
+ }
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXdDQSxrQ0FTQztBQUdELDhEQUVDO0FBckRELDJEQUFzRDtBQUV0RCxNQUFNLGVBQWUsR0FBRyxzQ0FBc0MsQ0FBQTtBQUM5RCxNQUFNLFlBQVksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQSxDQUFDLFNBQVM7QUFDN0MsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUE7QUFHN0IsSUFBSSxLQUFLLEdBQXNCLElBQUksQ0FBQTtBQUVuQyx1RUFBdUU7QUFDdkUsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFNLEVBQTJCLEVBQUUsQ0FDbEQsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLENBQUMsQ0FBQyxhQUFhLEtBQUssUUFBUTtJQUNuQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUTtJQUMxQixPQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFBO0FBRTdCLHlGQUF5RjtBQUN6RixLQUFLLFVBQVUsa0JBQWtCO0lBQy9CLE1BQU0sVUFBVSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUE7SUFDeEMsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFBO0lBQ3BFLElBQUksQ0FBQztRQUNILE1BQU0sR0FBRyxHQUFHLE1BQU0sS0FBSyxDQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQTtRQUN2RSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQTtRQUNuRSxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxDQUErQixDQUFBO1FBQzdELE1BQU0sSUFBSSxHQUFHLElBQUksRUFBRSxZQUFZLENBQUE7UUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDakQsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFBO1FBQzdELENBQUM7UUFDRCxPQUFPLElBQTRCLENBQUE7SUFDckMsQ0FBQztZQUFTLENBQUM7UUFDVCxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDckIsQ0FBQztBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLFdBQVc7SUFDL0IsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLEdBQUcsWUFBWTtRQUFFLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQTtJQUNwRSxJQUFJLENBQUM7UUFDSCxNQUFNLElBQUksR0FBRyxNQUFNLGtCQUFrQixFQUFFLENBQUE7UUFDdkMsS0FBSyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQTtRQUNoQyxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssRUFBRSxJQUFJLElBQUksb0NBQWdCLENBQUE7SUFDeEMsQ0FBQztBQUNILENBQUM7QUFFRCwwREFBMEQ7QUFDMUQsU0FBZ0IseUJBQXlCO0lBQ3ZDLEtBQUssR0FBRyxJQUFJLENBQUE7QUFDZCxDQUFDIn0=
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const globals_1 = require("@jest/globals");
4
+ const package_meta_1 = require("../package-meta");
5
+ (0, globals_1.describe)("authorFromScope", () => {
6
+ (0, globals_1.it)("capitalizes the npm scope", () => {
7
+ (0, globals_1.expect)((0, package_meta_1.authorFromScope)("@gorgo/medusa-payment-tkassa")).toBe("Gorgo");
8
+ });
9
+ (0, globals_1.it)("returns null for unscoped or blank names", () => {
10
+ (0, globals_1.expect)((0, package_meta_1.authorFromScope)("medusa-plugin")).toBeNull();
11
+ (0, globals_1.expect)((0, package_meta_1.authorFromScope)(null)).toBeNull();
12
+ });
13
+ });
14
+ (0, globals_1.describe)("parsePackageMeta", () => {
15
+ (0, globals_1.it)("reads name + version", () => {
16
+ const m = (0, package_meta_1.parsePackageMeta)({ name: "@gorgo/x", version: "1.2.3" });
17
+ (0, globals_1.expect)(m.name).toBe("@gorgo/x");
18
+ (0, globals_1.expect)(m.version).toBe("1.2.3");
19
+ });
20
+ (0, globals_1.it)("parses a string author with a URL and derives nothing extra", () => {
21
+ const m = (0, package_meta_1.parsePackageMeta)({ name: "@gorgo/x", version: "1.0.0", author: "Gorgo <hi@gorgo.dev> (https://gorgo.dev)" });
22
+ (0, globals_1.expect)(m.author).toBe("Gorgo");
23
+ (0, globals_1.expect)(m.authorUrl).toBe("https://gorgo.dev");
24
+ });
25
+ (0, globals_1.it)("parses an object author", () => {
26
+ const m = (0, package_meta_1.parsePackageMeta)({ name: "@gorgo/x", version: "1.0.0", author: { name: "Gorgo", url: "https://gorgo.dev" } });
27
+ (0, globals_1.expect)(m.author).toBe("Gorgo");
28
+ (0, globals_1.expect)(m.authorUrl).toBe("https://gorgo.dev");
29
+ });
30
+ (0, globals_1.it)("falls back to scope-derived author and homepage URL when author is absent", () => {
31
+ const m = (0, package_meta_1.parsePackageMeta)({ name: "@gorgo/x", version: "1.0.0", homepage: "https://gorgo.dev/x" });
32
+ (0, globals_1.expect)(m.author).toBe("Gorgo");
33
+ (0, globals_1.expect)(m.authorUrl).toBe("https://gorgo.dev/x");
34
+ });
35
+ (0, globals_1.it)("yields nulls when nothing is resolvable", () => {
36
+ const m = (0, package_meta_1.parsePackageMeta)({ name: "plain", version: "1.0.0" });
37
+ (0, globals_1.expect)(m.author).toBeNull();
38
+ (0, globals_1.expect)(m.authorUrl).toBeNull();
39
+ });
40
+ (0, globals_1.it)("does not throw on a non-string author.name and falls back to scope-derived author", () => {
41
+ const m = (0, package_meta_1.parsePackageMeta)({ name: "@gorgo/x", version: "1.0.0", author: { name: 123 } });
42
+ (0, globals_1.expect)(m.author).toBe("Gorgo");
43
+ });
44
+ (0, globals_1.it)("does not throw on a non-string homepage and yields a null authorUrl", () => {
45
+ const m = (0, package_meta_1.parsePackageMeta)({ name: "plain", version: "1.0.0", homepage: { url: "https://gorgo.dev" } });
46
+ (0, globals_1.expect)(m.authorUrl).toBeNull();
47
+ });
48
+ (0, globals_1.it)("uses the object author's name with no url, falling back to homepage for authorUrl", () => {
49
+ const m = (0, package_meta_1.parsePackageMeta)({
50
+ name: "@gorgo/x",
51
+ version: "1.0.0",
52
+ author: { name: "Gorgo" },
53
+ homepage: "https://gorgo.dev/x",
54
+ });
55
+ (0, globals_1.expect)(m.author).toBe("Gorgo");
56
+ (0, globals_1.expect)(m.authorUrl).toBe("https://gorgo.dev/x");
57
+ });
58
+ (0, globals_1.it)("falls back to scope-derived author on an empty-string author", () => {
59
+ const m = (0, package_meta_1.parsePackageMeta)({ name: "@gorgo/x", version: "1.0.0", author: "" });
60
+ (0, globals_1.expect)(m.author).toBe("Gorgo");
61
+ });
62
+ });
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS1tZXRhLnVuaXQuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2ludGVncmF0aW9uL2xvYWRlcnMvX190ZXN0c19fL3BhY2thZ2UtbWV0YS51bml0LnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyQ0FBb0Q7QUFDcEQsa0RBQW1FO0FBRW5FLElBQUEsa0JBQVEsRUFBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUU7SUFDL0IsSUFBQSxZQUFFLEVBQUMsMkJBQTJCLEVBQUUsR0FBRyxFQUFFO1FBQ25DLElBQUEsZ0JBQU0sRUFBQyxJQUFBLDhCQUFlLEVBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUN2RSxDQUFDLENBQUMsQ0FBQTtJQUNGLElBQUEsWUFBRSxFQUFDLDBDQUEwQyxFQUFFLEdBQUcsRUFBRTtRQUNsRCxJQUFBLGdCQUFNLEVBQUMsSUFBQSw4QkFBZSxFQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUE7UUFDbkQsSUFBQSxnQkFBTSxFQUFDLElBQUEsOEJBQWUsRUFBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQzFDLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUE7QUFFRixJQUFBLGtCQUFRLEVBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFO0lBQ2hDLElBQUEsWUFBRSxFQUFDLHNCQUFzQixFQUFFLEdBQUcsRUFBRTtRQUM5QixNQUFNLENBQUMsR0FBRyxJQUFBLCtCQUFnQixFQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtRQUNsRSxJQUFBLGdCQUFNLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUMvQixJQUFB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