@gorgo/medusa-integration 0.0.1

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 (133) hide show
  1. package/.medusa/server/src/admin/index.js +2259 -0
  2. package/.medusa/server/src/admin/index.mjs +2257 -0
  3. package/.medusa/server/src/api/admin/integrations/[provider_id]/enable/route.d.ts +5 -0
  4. package/.medusa/server/src/api/admin/integrations/[provider_id]/enable/route.js +17 -0
  5. package/.medusa/server/src/api/admin/integrations/[provider_id]/route.d.ts +7 -0
  6. package/.medusa/server/src/api/admin/integrations/[provider_id]/route.js +46 -0
  7. package/.medusa/server/src/api/admin/integrations/[provider_id]/test-connection/route.d.ts +3 -0
  8. package/.medusa/server/src/api/admin/integrations/[provider_id]/test-connection/route.js +16 -0
  9. package/.medusa/server/src/api/admin/integrations/_helpers.d.ts +16 -0
  10. package/.medusa/server/src/api/admin/integrations/_helpers.js +52 -0
  11. package/.medusa/server/src/api/admin/integrations/middlewares.d.ts +2 -0
  12. package/.medusa/server/src/api/admin/integrations/middlewares.js +21 -0
  13. package/.medusa/server/src/api/admin/integrations/route.d.ts +3 -0
  14. package/.medusa/server/src/api/admin/integrations/route.js +11 -0
  15. package/.medusa/server/src/api/admin/integrations/validators.d.ts +11 -0
  16. package/.medusa/server/src/api/admin/integrations/validators.js +15 -0
  17. package/.medusa/server/src/api/middlewares.d.ts +2 -0
  18. package/.medusa/server/src/api/middlewares.js +10 -0
  19. package/.medusa/server/src/index.d.ts +10 -0
  20. package/.medusa/server/src/index.js +22 -0
  21. package/.medusa/server/src/jobs/test-integration-connections.d.ts +16 -0
  22. package/.medusa/server/src/jobs/test-integration-connections.js +53 -0
  23. package/.medusa/server/src/modules/integration/descriptor/__tests__/build-zod.unit.spec.d.ts +1 -0
  24. package/.medusa/server/src/modules/integration/descriptor/__tests__/build-zod.unit.spec.js +64 -0
  25. package/.medusa/server/src/modules/integration/descriptor/__tests__/define.unit.spec.d.ts +1 -0
  26. package/.medusa/server/src/modules/integration/descriptor/__tests__/define.unit.spec.js +41 -0
  27. package/.medusa/server/src/modules/integration/descriptor/__tests__/introspect.unit.spec.d.ts +1 -0
  28. package/.medusa/server/src/modules/integration/descriptor/__tests__/introspect.unit.spec.js +93 -0
  29. package/.medusa/server/src/modules/integration/descriptor/__tests__/validate.unit.spec.d.ts +1 -0
  30. package/.medusa/server/src/modules/integration/descriptor/__tests__/validate.unit.spec.js +64 -0
  31. package/.medusa/server/src/modules/integration/descriptor/build-zod.d.ts +8 -0
  32. package/.medusa/server/src/modules/integration/descriptor/build-zod.js +82 -0
  33. package/.medusa/server/src/modules/integration/descriptor/define.d.ts +74 -0
  34. package/.medusa/server/src/modules/integration/descriptor/define.js +31 -0
  35. package/.medusa/server/src/modules/integration/descriptor/index.d.ts +5 -0
  36. package/.medusa/server/src/modules/integration/descriptor/index.js +22 -0
  37. package/.medusa/server/src/modules/integration/descriptor/introspect.d.ts +5 -0
  38. package/.medusa/server/src/modules/integration/descriptor/introspect.js +67 -0
  39. package/.medusa/server/src/modules/integration/descriptor/meta.d.ts +7 -0
  40. package/.medusa/server/src/modules/integration/descriptor/meta.js +3 -0
  41. package/.medusa/server/src/modules/integration/descriptor/option.d.ts +104 -0
  42. package/.medusa/server/src/modules/integration/descriptor/option.js +3 -0
  43. package/.medusa/server/src/modules/integration/descriptor/validate.d.ts +29 -0
  44. package/.medusa/server/src/modules/integration/descriptor/validate.js +69 -0
  45. package/.medusa/server/src/modules/integration/index.d.ts +22 -0
  46. package/.medusa/server/src/modules/integration/index.js +15 -0
  47. package/.medusa/server/src/modules/integration/loaders/index.d.ts +1 -0
  48. package/.medusa/server/src/modules/integration/loaders/index.js +9 -0
  49. package/.medusa/server/src/modules/integration/loaders/load-providers.d.ts +5 -0
  50. package/.medusa/server/src/modules/integration/loaders/load-providers.js +35 -0
  51. package/.medusa/server/src/modules/integration/migrations/Migration20260610215533.d.ts +5 -0
  52. package/.medusa/server/src/modules/integration/migrations/Migration20260610215533.js +18 -0
  53. package/.medusa/server/src/modules/integration/migrations/Migration20260618154037.d.ts +5 -0
  54. package/.medusa/server/src/modules/integration/migrations/Migration20260618154037.js +27 -0
  55. package/.medusa/server/src/modules/integration/migrations/Migration20260622120502.d.ts +5 -0
  56. package/.medusa/server/src/modules/integration/migrations/Migration20260622120502.js +14 -0
  57. package/.medusa/server/src/modules/integration/migrations/Migration20260701095518.d.ts +5 -0
  58. package/.medusa/server/src/modules/integration/migrations/Migration20260701095518.js +14 -0
  59. package/.medusa/server/src/modules/integration/migrations/Migration20260708072033.d.ts +5 -0
  60. package/.medusa/server/src/modules/integration/migrations/Migration20260708072033.js +14 -0
  61. package/.medusa/server/src/modules/integration/models/integration.d.ts +13 -0
  62. package/.medusa/server/src/modules/integration/models/integration.js +27 -0
  63. package/.medusa/server/src/modules/integration/services/__tests__/crypto.unit.spec.d.ts +1 -0
  64. package/.medusa/server/src/modules/integration/services/__tests__/crypto.unit.spec.js +33 -0
  65. package/.medusa/server/src/modules/integration/services/__tests__/integration-provider.unit.spec.d.ts +1 -0
  66. package/.medusa/server/src/modules/integration/services/__tests__/integration-provider.unit.spec.js +77 -0
  67. package/.medusa/server/src/modules/integration/services/__tests__/secrets.unit.spec.d.ts +1 -0
  68. package/.medusa/server/src/modules/integration/services/__tests__/secrets.unit.spec.js +33 -0
  69. package/.medusa/server/src/modules/integration/services/crypto.d.ts +10 -0
  70. package/.medusa/server/src/modules/integration/services/crypto.js +41 -0
  71. package/.medusa/server/src/modules/integration/services/index.d.ts +3 -0
  72. package/.medusa/server/src/modules/integration/services/index.js +11 -0
  73. package/.medusa/server/src/modules/integration/services/integration-module.d.ts +113 -0
  74. package/.medusa/server/src/modules/integration/services/integration-module.js +219 -0
  75. package/.medusa/server/src/modules/integration/services/integration-provider.d.ts +49 -0
  76. package/.medusa/server/src/modules/integration/services/integration-provider.js +76 -0
  77. package/.medusa/server/src/modules/integration/services/secrets.d.ts +11 -0
  78. package/.medusa/server/src/modules/integration/services/secrets.js +31 -0
  79. package/.medusa/server/src/modules/integration/types/index.d.ts +13 -0
  80. package/.medusa/server/src/modules/integration/types/index.js +10 -0
  81. package/.medusa/server/src/modules/integration/utils/abstract-integration-provider.d.ts +39 -0
  82. package/.medusa/server/src/modules/integration/utils/abstract-integration-provider.js +42 -0
  83. package/.medusa/server/src/modules/integration/utils/index.d.ts +1 -0
  84. package/.medusa/server/src/modules/integration/utils/index.js +6 -0
  85. package/.medusa/server/src/subscribers/invalidate-options-cache.d.ts +5 -0
  86. package/.medusa/server/src/subscribers/invalidate-options-cache.js +13 -0
  87. package/.medusa/server/src/types/bundles.d.ts +1 -0
  88. package/.medusa/server/src/types/bundles.js +38 -0
  89. package/.medusa/server/src/types/http/index.d.ts +1 -0
  90. package/.medusa/server/src/types/http/index.js +18 -0
  91. package/.medusa/server/src/types/http/integration/admin/entities.d.ts +32 -0
  92. package/.medusa/server/src/types/http/integration/admin/entities.js +3 -0
  93. package/.medusa/server/src/types/http/integration/admin/index.d.ts +2 -0
  94. package/.medusa/server/src/types/http/integration/admin/index.js +19 -0
  95. package/.medusa/server/src/types/http/integration/admin/responses.d.ts +19 -0
  96. package/.medusa/server/src/types/http/integration/admin/responses.js +3 -0
  97. package/.medusa/server/src/types/http/integration/index.d.ts +1 -0
  98. package/.medusa/server/src/types/http/integration/index.js +18 -0
  99. package/.medusa/server/src/types/index.d.ts +3 -0
  100. package/.medusa/server/src/types/index.js +20 -0
  101. package/.medusa/server/src/types/integration/common.d.ts +70 -0
  102. package/.medusa/server/src/types/integration/common.js +3 -0
  103. package/.medusa/server/src/types/integration/index.d.ts +1 -0
  104. package/.medusa/server/src/types/integration/index.js +18 -0
  105. package/.medusa/server/src/workflows/integration/index.d.ts +2 -0
  106. package/.medusa/server/src/workflows/integration/index.js +19 -0
  107. package/.medusa/server/src/workflows/integration/steps/apply-integration-section.d.ts +22 -0
  108. package/.medusa/server/src/workflows/integration/steps/apply-integration-section.js +70 -0
  109. package/.medusa/server/src/workflows/integration/steps/delete-integration-record.d.ts +6 -0
  110. package/.medusa/server/src/workflows/integration/steps/delete-integration-record.js +16 -0
  111. package/.medusa/server/src/workflows/integration/steps/emit-integration-event.d.ts +5 -0
  112. package/.medusa/server/src/workflows/integration/steps/emit-integration-event.js +11 -0
  113. package/.medusa/server/src/workflows/integration/steps/index.d.ts +6 -0
  114. package/.medusa/server/src/workflows/integration/steps/index.js +16 -0
  115. package/.medusa/server/src/workflows/integration/steps/run-test-connection.d.ts +4 -0
  116. package/.medusa/server/src/workflows/integration/steps/run-test-connection.js +20 -0
  117. package/.medusa/server/src/workflows/integration/steps/set-integration-enabled.d.ts +19 -0
  118. package/.medusa/server/src/workflows/integration/steps/set-integration-enabled.js +27 -0
  119. package/.medusa/server/src/workflows/integration/steps/upsert-integration-record.d.ts +9 -0
  120. package/.medusa/server/src/workflows/integration/steps/upsert-integration-record.js +18 -0
  121. package/.medusa/server/src/workflows/integration/workflows/delete-integration.d.ts +7 -0
  122. package/.medusa/server/src/workflows/integration/workflows/delete-integration.js +18 -0
  123. package/.medusa/server/src/workflows/integration/workflows/index.d.ts +4 -0
  124. package/.medusa/server/src/workflows/integration/workflows/index.js +12 -0
  125. package/.medusa/server/src/workflows/integration/workflows/set-integration-enabled.d.ts +20 -0
  126. package/.medusa/server/src/workflows/integration/workflows/set-integration-enabled.js +20 -0
  127. package/.medusa/server/src/workflows/integration/workflows/test-integration-connection.d.ts +5 -0
  128. package/.medusa/server/src/workflows/integration/workflows/test-integration-connection.js +21 -0
  129. package/.medusa/server/src/workflows/integration/workflows/upsert-integration.d.ts +8 -0
  130. package/.medusa/server/src/workflows/integration/workflows/upsert-integration.js +30 -0
  131. package/LICENSE +21 -0
  132. package/README.md +46 -0
  133. package/package.json +79 -0
@@ -0,0 +1,5 @@
1
+ import { AuthenticatedMedusaRequest, MedusaResponse } from "@medusajs/framework/http";
2
+ import type { AdminSetIntegrationEnabledType } from "../../validators";
3
+ import type { AdminIntegrationUpsertResponse } from "../../../../../types";
4
+ /** Enable or disable a configured integration (toggles `is_enabled`). */
5
+ export declare const POST: (req: AuthenticatedMedusaRequest<AdminSetIntegrationEnabledType>, res: MedusaResponse<AdminIntegrationUpsertResponse>) => Promise<void>;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.POST = void 0;
4
+ const integration_1 = require("../../../../../workflows/integration");
5
+ const _helpers_1 = require("../../_helpers");
6
+ /** Enable or disable a configured integration (toggles `is_enabled`). */
7
+ const POST = async (req, res) => {
8
+ const svc = (0, _helpers_1.service)(req);
9
+ const provider_id = req.params.provider_id;
10
+ (0, _helpers_1.requireProvider)(svc, provider_id);
11
+ const { result } = await (0, integration_1.setIntegrationEnabledWorkflow)(req.scope).run({
12
+ input: { provider_id, is_enabled: req.validatedBody.is_enabled },
13
+ });
14
+ res.json({ integration: (0, _helpers_1.maskedView)(result, svc.getSecretKeys(provider_id)) });
15
+ };
16
+ exports.POST = POST;
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2ludGVncmF0aW9ucy9bcHJvdmlkZXJfaWRdL2VuYWJsZS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxzRUFBb0Y7QUFDcEYsNkNBQXFFO0FBSXJFLHlFQUF5RTtBQUNsRSxNQUFNLElBQUksR0FBRyxLQUFLLEVBQ3ZCLEdBQStELEVBQy9ELEdBQW1ELEVBQ25ELEVBQUU7SUFDRixNQUFNLEdBQUcsR0FBRyxJQUFBLGtCQUFPLEVBQUMsR0FBRyxDQUFDLENBQUE7SUFDeEIsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUE7SUFDMUMsSUFBQSwwQkFBZSxFQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUVqQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFBLDJDQUE2QixFQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDcEUsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRTtLQUNqRSxDQUFDLENBQUE7SUFDRixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUEscUJBQVUsRUFBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtBQUMvRSxDQUFDLENBQUE7QUFaWSxRQUFBLElBQUksUUFZaEIifQ==
@@ -0,0 +1,7 @@
1
+ import { AuthenticatedMedusaRequest, MedusaResponse } from "@medusajs/framework/http";
2
+ import type { AdminUpsertIntegrationType } from "../validators";
3
+ import type { AdminIntegrationResponse, AdminIntegrationUpsertResponse, AdminIntegrationDeleteResponse } from "../../../../types";
4
+ /** Descriptor (UI schema) + current masked record + completeness for one declared instance. */
5
+ export declare const GET: (req: AuthenticatedMedusaRequest, res: MedusaResponse<AdminIntegrationResponse>) => Promise<void>;
6
+ export declare const POST: (req: AuthenticatedMedusaRequest<AdminUpsertIntegrationType>, res: MedusaResponse<AdminIntegrationUpsertResponse>) => Promise<void>;
7
+ export declare const DELETE: (req: AuthenticatedMedusaRequest, res: MedusaResponse<AdminIntegrationDeleteResponse>) => Promise<void>;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DELETE = exports.POST = exports.GET = void 0;
4
+ const integration_1 = require("../../../../workflows/integration");
5
+ const _helpers_1 = require("../_helpers");
6
+ /** Descriptor (UI schema) + current masked record + completeness for one declared instance. */
7
+ const GET = async (req, res) => {
8
+ const svc = (0, _helpers_1.service)(req);
9
+ const provider_id = req.params.provider_id;
10
+ (0, _helpers_1.requireProvider)(svc, provider_id);
11
+ const descriptor = svc.getProviderUiDescriptor(provider_id);
12
+ const record = await svc.findByProviderId(provider_id);
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 });
15
+ };
16
+ exports.GET = GET;
17
+ const POST = async (req, res) => {
18
+ const svc = (0, _helpers_1.service)(req);
19
+ const provider_id = req.params.provider_id;
20
+ (0, _helpers_1.requireProvider)(svc, provider_id);
21
+ // Only the submitted option ids are validated (inside the workflow step) — a built-in
22
+ // section sends its section's ids, a widget may send option ids with no section_id — with
23
+ // a readable, field-prefixed message on failure. The config as a whole may remain a
24
+ // partial draft; full validation happens lazily at resolve time.
25
+ const { result } = await (0, integration_1.upsertIntegrationWorkflow)(req.scope).run({
26
+ input: {
27
+ provider_id,
28
+ section_id: req.validatedBody.section_id,
29
+ title: req.validatedBody.title,
30
+ values: req.validatedBody.values,
31
+ },
32
+ });
33
+ res.json({ integration: (0, _helpers_1.maskedView)(result, svc.getSecretKeys(provider_id)) });
34
+ };
35
+ exports.POST = POST;
36
+ const DELETE = async (req, res) => {
37
+ const svc = (0, _helpers_1.service)(req);
38
+ const provider_id = req.params.provider_id;
39
+ (0, _helpers_1.requireProvider)(svc, provider_id);
40
+ await (0, integration_1.deleteIntegrationWorkflow)(req.scope).run({
41
+ input: { provider_id },
42
+ });
43
+ res.json({ id: provider_id, object: "integration", deleted: true });
44
+ };
45
+ exports.DELETE = DELETE;
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2ludGVncmF0aW9ucy9bcHJvdmlkZXJfaWRdL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLG1FQUF3RztBQUN4RywwQ0FBa0U7QUFRbEUsK0ZBQStGO0FBQ3hGLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFDdEIsR0FBK0IsRUFDL0IsR0FBNkMsRUFDN0MsRUFBRTtJQUNGLE1BQU0sR0FBRyxHQUFHLElBQUEsa0JBQU8sRUFBQyxHQUFHLENBQUMsQ0FBQTtJQUN4QixNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQTtJQUMxQyxJQUFBLDBCQUFlLEVBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBQ2pDLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUMzRCxNQUFNLE1BQU0sR0FBRyxNQUFNLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUN0RCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQTtJQUMzRCxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUEscUJBQVUsRUFBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQTtBQUN4SCxDQUFDLENBQUE7QUFYWSxRQUFBLEdBQUcsT0FXZjtBQUVNLE1BQU0sSUFBSSxHQUFHLEtBQUssRUFDdkIsR0FBMkQsRUFDM0QsR0FBbUQsRUFDbkQsRUFBRTtJQUNGLE1BQU0sR0FBRyxHQUFHLElBQUEsa0JBQU8sRUFBQyxHQUFHLENBQUMsQ0FBQTtJQUN4QixNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQTtJQUMxQyxJQUFBLDBCQUFlLEVBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBRWpDLHNGQUFzRjtJQUN0RiwwRkFBMEY7SUFDMUYsb0ZBQW9GO0lBQ3BGLGlFQUFpRTtJQUNqRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFBLHVDQUF5QixFQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDaEUsS0FBSyxFQUFFO1lBQ0wsV0FBVztZQUNYLFVBQVUsRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLFVBQVU7WUFDeEMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsS0FBSztZQUM5QixNQUFNLEVBQUUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxNQUFNO1NBQ2pDO0tBQ0YsQ0FBQyxDQUFBO0lBQ0YsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFBLHFCQUFVLEVBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUE7QUFDL0UsQ0FBQyxDQUFBO0FBckJZLFFBQUEsSUFBSSxRQXFCaEI7QUFFTSxNQUFNLE1BQU0sR0FBRyxLQUFLLEVBQ3pCLEdBQStCLEVBQy9CLEdBQW1ELEVBQ25ELEVBQUU7SUFDRixNQUFNLEdBQUcsR0FBRyxJQUFBLGtCQUFPLEVBQUMsR0FBRyxDQUFDLENBQUE7SUFDeEIsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUE7SUFDMUMsSUFBQSwwQkFBZSxFQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUNqQyxNQUFNLElBQUEsdUNBQXlCLEVBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUM3QyxLQUFLLEVBQUUsRUFBRSxXQUFXLEVBQUU7S0FDdkIsQ0FBQyxDQUFBO0lBQ0YsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtBQUNyRSxDQUFDLENBQUE7QUFYWSxRQUFBLE1BQU0sVUFXbEIifQ==
@@ -0,0 +1,3 @@
1
+ import { AuthenticatedMedusaRequest, MedusaResponse } from "@medusajs/framework/http";
2
+ import type { AdminIntegrationTestResponse } from "../../../../../types";
3
+ export declare const POST: (req: AuthenticatedMedusaRequest, res: MedusaResponse<AdminIntegrationTestResponse>) => Promise<void>;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.POST = void 0;
4
+ const integration_1 = require("../../../../../workflows/integration");
5
+ const _helpers_1 = require("../../_helpers");
6
+ const POST = async (req, res) => {
7
+ const svc = (0, _helpers_1.service)(req);
8
+ const provider_id = req.params.provider_id;
9
+ (0, _helpers_1.requireProvider)(svc, provider_id);
10
+ const { result } = await (0, integration_1.testIntegrationConnectionWorkflow)(req.scope).run({
11
+ input: { provider_id },
12
+ });
13
+ res.json(result);
14
+ };
15
+ exports.POST = POST;
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2ludGVncmF0aW9ucy9bcHJvdmlkZXJfaWRdL3Rlc3QtY29ubmVjdGlvbi9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxzRUFBd0Y7QUFDeEYsNkNBQXlEO0FBR2xELE1BQU0sSUFBSSxHQUFHLEtBQUssRUFDdkIsR0FBK0IsRUFDL0IsR0FBaUQsRUFDakQsRUFBRTtJQUNGLE1BQU0sR0FBRyxHQUFHLElBQUEsa0JBQU8sRUFBQyxHQUFHLENBQUMsQ0FBQTtJQUN4QixNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQTtJQUMxQyxJQUFBLDBCQUFlLEVBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBQ2pDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUEsK0NBQWlDLEVBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUN4RSxLQUFLLEVBQUUsRUFBRSxXQUFXLEVBQUU7S0FDdkIsQ0FBQyxDQUFBO0lBQ0YsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUNsQixDQUFDLENBQUE7QUFYWSxRQUFBLElBQUksUUFXaEIifQ==
@@ -0,0 +1,16 @@
1
+ import { MedusaRequest } from "@medusajs/framework/http";
2
+ import type IntegrationModuleService from "../../../modules/integration/services/integration-module";
3
+ import type { MaskedIntegration } from "../../../types";
4
+ export declare function service(req: MedusaRequest): IntegrationModuleService;
5
+ /**
6
+ * Assert that a `:provider_id` URL param (the registration key `int_<id>[_<instance>]`,
7
+ * which is also the stored `provider_id`) is a declared registration. 404 otherwise.
8
+ */
9
+ export declare function requireProvider(svc: IntegrationModuleService, providerId: string): void;
10
+ /**
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.
15
+ */
16
+ export declare function maskedView(record: any, secretKeys: string[]): MaskedIntegration;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.service = service;
4
+ exports.requireProvider = requireProvider;
5
+ exports.maskedView = maskedView;
6
+ const utils_1 = require("@medusajs/framework/utils");
7
+ const integration_1 = require("../../../modules/integration");
8
+ function service(req) {
9
+ return req.scope.resolve(integration_1.INTEGRATION_MODULE);
10
+ }
11
+ /**
12
+ * Assert that a `:provider_id` URL param (the registration key `int_<id>[_<instance>]`,
13
+ * which is also the stored `provider_id`) is a declared registration. 404 otherwise.
14
+ */
15
+ function requireProvider(svc, providerId) {
16
+ if (!svc.hasProviderId(providerId)) {
17
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Unknown integration "${providerId}"`);
18
+ }
19
+ }
20
+ /**
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.
25
+ */
26
+ function maskedView(record, secretKeys) {
27
+ const secret = new Set(secretKeys);
28
+ const stored = (record.options ?? {});
29
+ const values = {};
30
+ let has_secrets = false;
31
+ for (const [k, v] of Object.entries(stored)) {
32
+ if (secret.has(k)) {
33
+ if (v != null && v !== "")
34
+ has_secrets = true;
35
+ continue;
36
+ }
37
+ values[k] = v;
38
+ }
39
+ return {
40
+ id: record.id,
41
+ provider_id: record.provider_id,
42
+ module: record.module,
43
+ title: record.title ?? null,
44
+ is_enabled: record.is_enabled,
45
+ has_secrets,
46
+ last_test_at: record.last_test_at ?? null,
47
+ last_test_status: record.last_test_status ?? null,
48
+ last_test_message: record.last_test_message ?? null,
49
+ values,
50
+ };
51
+ }
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2hlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2ludGVncmF0aW9ucy9faGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU1BLDBCQUVDO0FBTUQsMENBSUM7QUFRRCxnQ0F3QkM7QUFqREQscURBQXVEO0FBQ3ZELDhEQUFpRTtBQUlqRSxTQUFnQixPQUFPLENBQUMsR0FBa0I7SUFDeEMsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxnQ0FBa0IsQ0FBQyxDQUFBO0FBQzlDLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixlQUFlLENBQUMsR0FBNkIsRUFBRSxVQUFrQjtJQUMvRSxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxtQkFBVyxDQUFDLG1CQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSx3QkFBd0IsVUFBVSxHQUFHLENBQUMsQ0FBQTtJQUMzRixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsVUFBVSxDQUFDLE1BQVcsRUFBRSxVQUFvQjtJQUMxRCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUNsQyxNQUFNLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUE0QixDQUFBO0lBQ2hFLE1BQU0sTUFBTSxHQUE0QixFQUFFLENBQUE7SUFDMUMsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFBO0lBQ3ZCLEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDNUMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUFFLFdBQVcsR0FBRyxJQUFJLENBQUE7WUFDN0MsU0FBUTtRQUNWLENBQUM7UUFDRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2YsQ0FBQztJQUNELE9BQU87UUFDTCxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUU7UUFDYixXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVc7UUFDL0IsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1FBQ3JCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxJQUFJLElBQUk7UUFDM0IsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1FBQzdCLFdBQVc7UUFDWCxZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVksSUFBSSxJQUFJO1FBQ3pDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJO1FBQ2pELGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxpQkFBaUIsSUFBSSxJQUFJO1FBQ25ELE1BQU07S0FDUCxDQUFBO0FBQ0gsQ0FBQyJ9
@@ -0,0 +1,2 @@
1
+ import { MiddlewareRoute } from "@medusajs/framework/http";
2
+ export declare const adminIntegrationRoutesMiddlewares: MiddlewareRoute[];
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.adminIntegrationRoutesMiddlewares = void 0;
4
+ const http_1 = require("@medusajs/framework/http");
5
+ const validators_1 = require("./validators");
6
+ exports.adminIntegrationRoutesMiddlewares = [
7
+ {
8
+ methods: ["POST"],
9
+ matcher: "/admin/integrations/:provider_id",
10
+ // `as any` flattens a TS2589 (excessively deep instantiation) that zod-4 schema types
11
+ // trigger against validateAndTransformBody's generic. Runtime validation is unchanged;
12
+ // `req.validatedBody` is typed explicitly in the route via AdminUpsertIntegrationType.
13
+ middlewares: [(0, http_1.validateAndTransformBody)(validators_1.AdminUpsertIntegration)],
14
+ },
15
+ {
16
+ methods: ["POST"],
17
+ matcher: "/admin/integrations/:provider_id/enable",
18
+ middlewares: [(0, http_1.validateAndTransformBody)(validators_1.AdminSetIntegrationEnabled)],
19
+ },
20
+ ];
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2ludGVncmF0aW9ucy9taWRkbGV3YXJlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFBb0Y7QUFDcEYsNkNBQWlGO0FBRXBFLFFBQUEsaUNBQWlDLEdBQXNCO0lBQ2xFO1FBQ0UsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ2pCLE9BQU8sRUFBRSxrQ0FBa0M7UUFDM0Msc0ZBQXNGO1FBQ3RGLHVGQUF1RjtRQUN2Rix1RkFBdUY7UUFDdkYsV0FBVyxFQUFFLENBQUMsSUFBQSwrQkFBd0IsRUFBQyxtQ0FBNkIsQ0FBQyxDQUFDO0tBQ3ZFO0lBQ0Q7UUFDRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDakIsT0FBTyxFQUFFLHlDQUF5QztRQUNsRCxXQUFXLEVBQUUsQ0FBQyxJQUFBLCtCQUF3QixFQUFDLHVDQUFpQyxDQUFDLENBQUM7S0FDM0U7Q0FDRixDQUFBIn0=
@@ -0,0 +1,3 @@
1
+ import { AuthenticatedMedusaRequest, MedusaResponse } from "@medusajs/framework/http";
2
+ import type { AdminIntegrationListResponse } from "../../../types";
3
+ export declare const GET: (req: AuthenticatedMedusaRequest, res: MedusaResponse<AdminIntegrationListResponse>) => Promise<void>;
@@ -0,0 +1,11 @@
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
+ const integrations = await svc.listIntegrationsOverview();
8
+ res.json({ integrations });
9
+ };
10
+ exports.GET = GET;
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2ludGVncmF0aW9ucy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSx5Q0FBb0M7QUFHN0IsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUN0QixHQUErQixFQUMvQixHQUFpRCxFQUNqRCxFQUFFO0lBQ0YsTUFBTSxHQUFHLEdBQUcsSUFBQSxrQkFBTyxFQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3hCLE1BQU0sWUFBWSxHQUFHLE1BQU0sR0FBRyxDQUFDLHdCQUF3QixFQUFFLENBQUE7SUFDekQsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUE7QUFDNUIsQ0FBQyxDQUFBO0FBUFksUUFBQSxHQUFHLE9BT2YifQ==
@@ -0,0 +1,11 @@
1
+ import { z } from "@medusajs/deps/zod";
2
+ export type AdminUpsertIntegrationType = z.infer<typeof AdminUpsertIntegration>;
3
+ export declare const AdminUpsertIntegration: z.ZodObject<{
4
+ title: z.ZodOptional<z.ZodString>;
5
+ section_id: z.ZodOptional<z.ZodString>;
6
+ values: z.ZodRecord<z.ZodString, z.ZodUnknown>;
7
+ }, z.core.$strip>;
8
+ export type AdminSetIntegrationEnabledType = z.infer<typeof AdminSetIntegrationEnabled>;
9
+ export declare const AdminSetIntegrationEnabled: z.ZodObject<{
10
+ is_enabled: z.ZodBoolean;
11
+ }, z.core.$strip>;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AdminSetIntegrationEnabled = exports.AdminUpsertIntegration = void 0;
4
+ const zod_1 = require("@medusajs/deps/zod");
5
+ exports.AdminUpsertIntegration = zod_1.z.object({
6
+ title: zod_1.z.string().optional(),
7
+ // Which descriptor section these values belong to. Omitted by widgets, which submit
8
+ // their own option ids directly — the server then validates exactly the submitted keys.
9
+ section_id: zod_1.z.string().optional(),
10
+ values: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()),
11
+ });
12
+ exports.AdminSetIntegrationEnabled = zod_1.z.object({
13
+ is_enabled: zod_1.z.boolean(),
14
+ });
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvYWRtaW4vaW50ZWdyYXRpb25zL3ZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNENBQXNDO0FBR3pCLFFBQUEsc0JBQXNCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM3QyxLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QixvRkFBb0Y7SUFDcEYsd0ZBQXdGO0lBQ3hGLFVBQVUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2pDLE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7Q0FDMUMsQ0FBQyxDQUFBO0FBR1csUUFBQSwwQkFBMEIsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2pELFVBQVUsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFO0NBQ3hCLENBQUMsQ0FBQSJ9
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@medusajs/framework").MiddlewaresConfig;
2
+ export default _default;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const framework_1 = require("@medusajs/framework");
4
+ const middlewares_1 = require("./admin/integrations/middlewares");
5
+ exports.default = (0, framework_1.defineMiddlewares)({
6
+ routes: [
7
+ ...middlewares_1.adminIntegrationRoutesMiddlewares
8
+ ]
9
+ });
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbURBQXVEO0FBQ3ZELGtFQUFvRjtBQUVwRixrQkFBZSxJQUFBLDZCQUFpQixFQUFDO0lBQy9CLE1BQU0sRUFBRTtRQUNOLEdBQUcsK0NBQWlDO0tBQ3JDO0NBQ0YsQ0FBQyxDQUFBIn0=
@@ -0,0 +1,10 @@
1
+ export { defineIntegration, z } from "./modules/integration/descriptor/define";
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";
4
+ export type { FieldControl, I18nKey } from "./modules/integration/descriptor/meta";
5
+ export { collectValidationIssues, isDescriptorComplete } from "./modules/integration/descriptor/validate";
6
+ export type { IntegrationSectionData } from "./types";
7
+ export { INTEGRATION_MODULE } from "./modules/integration";
8
+ export { default as IntegrationModuleService } from "./modules/integration/services/integration-module";
9
+ export type { ResolvedOptions } from "./modules/integration/services/integration-module";
10
+ export type { IntegrationModuleOptions } from "./modules/integration/types";
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.IntegrationModuleService = exports.INTEGRATION_MODULE = exports.isDescriptorComplete = exports.collectValidationIssues = exports.AbstractIntegrationProvider = exports.z = exports.defineIntegration = void 0;
7
+ // ── For integration-provider authors ─────────────────────────────────────────
8
+ var define_1 = require("./modules/integration/descriptor/define");
9
+ Object.defineProperty(exports, "defineIntegration", { enumerable: true, get: function () { return define_1.defineIntegration; } });
10
+ Object.defineProperty(exports, "z", { enumerable: true, get: function () { return define_1.z; } });
11
+ var abstract_integration_provider_1 = require("./modules/integration/utils/abstract-integration-provider");
12
+ Object.defineProperty(exports, "AbstractIntegrationProvider", { enumerable: true, get: function () { return abstract_integration_provider_1.AbstractIntegrationProvider; } });
13
+ // The "validate my descriptor" API — for provider authors and their unit tests.
14
+ var validate_1 = require("./modules/integration/descriptor/validate");
15
+ Object.defineProperty(exports, "collectValidationIssues", { enumerable: true, get: function () { return validate_1.collectValidationIssues; } });
16
+ Object.defineProperty(exports, "isDescriptorComplete", { enumerable: true, get: function () { return validate_1.isDescriptorComplete; } });
17
+ // ── For consumers of the integration module ──────────────────────────────────
18
+ var integration_1 = require("./modules/integration");
19
+ Object.defineProperty(exports, "INTEGRATION_MODULE", { enumerable: true, get: function () { return integration_1.INTEGRATION_MODULE; } });
20
+ var integration_module_1 = require("./modules/integration/services/integration-module");
21
+ Object.defineProperty(exports, "IntegrationModuleService", { enumerable: true, get: function () { return __importDefault(integration_module_1).default; } });
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsZ0ZBQWdGO0FBQ2hGLGtFQUE4RTtBQUFyRSwyR0FBQSxpQkFBaUIsT0FBQTtBQUFFLDJGQUFBLENBQUMsT0FBQTtBQUM3QiwyR0FBdUc7QUFBOUYsNElBQUEsMkJBQTJCLE9BQUE7QUFZcEMsZ0ZBQWdGO0FBQ2hGLHNFQUF5RztBQUFoRyxtSEFBQSx1QkFBdUIsT0FBQTtBQUFFLGdIQUFBLG9CQUFvQixPQUFBO0FBSXRELGdGQUFnRjtBQUNoRixxREFBMEQ7QUFBakQsaUhBQUEsa0JBQWtCLE9BQUE7QUFDM0Isd0ZBQXVHO0FBQTlGLCtJQUFBLE9BQU8sT0FBNEIifQ==
@@ -0,0 +1,16 @@
1
+ import type { MedusaContainer } from "@medusajs/framework/types";
2
+ /**
3
+ * Daily health check: run the connection test for every configured & enabled integration
4
+ * that exposes one. Each test runs through `testIntegrationConnectionWorkflow`, which
5
+ * persists `last_test_*` on the record and emits `integration.tested`.
6
+ *
7
+ * Disabled or not-yet-configured registrations are skipped (their settings don't resolve,
8
+ * so a test would report a misleading "Not configured" failure), as are providers without
9
+ * a `testConnection`. Failures are isolated per provider and nothing is thrown at the top
10
+ * level, so one bad integration never aborts the rest and the job retries next schedule.
11
+ */
12
+ export default function testIntegrationConnectionsJob(container: MedusaContainer): Promise<void>;
13
+ export declare const config: {
14
+ name: string;
15
+ schedule: string;
16
+ };
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.default = testIntegrationConnectionsJob;
5
+ const integration_1 = require("../modules/integration");
6
+ const integration_2 = require("../workflows/integration");
7
+ /**
8
+ * Daily health check: run the connection test for every configured & enabled integration
9
+ * that exposes one. Each test runs through `testIntegrationConnectionWorkflow`, which
10
+ * persists `last_test_*` on the record and emits `integration.tested`.
11
+ *
12
+ * Disabled or not-yet-configured registrations are skipped (their settings don't resolve,
13
+ * so a test would report a misleading "Not configured" failure), as are providers without
14
+ * a `testConnection`. Failures are isolated per provider and nothing is thrown at the top
15
+ * level, so one bad integration never aborts the rest and the job retries next schedule.
16
+ */
17
+ async function testIntegrationConnectionsJob(container) {
18
+ const logger = container.resolve("logger");
19
+ 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);
22
+ if (targets.length === 0) {
23
+ logger.info("[integration] connection-test job: no configured integrations to test");
24
+ return;
25
+ }
26
+ logger.info(`[integration] connection-test job: testing ${targets.length} integration(s)`);
27
+ const counts = { ok: 0, fail: 0, skipped: 0, errored: 0 };
28
+ for (const target of targets) {
29
+ try {
30
+ const { result } = await (0, integration_2.testIntegrationConnectionWorkflow)(container).run({
31
+ input: { provider_id: target.provider_id },
32
+ });
33
+ counts[result.status]++;
34
+ const line = `[integration] ${target.provider_id} → ${result.status}${result.message ? `: ${result.message}` : ""}`;
35
+ if (result.status === "fail")
36
+ logger.warn(line);
37
+ else
38
+ logger.info(line);
39
+ }
40
+ catch (e) {
41
+ counts.errored++;
42
+ logger.error(`[integration] ${target.provider_id} test errored: ${e?.message ?? e}`);
43
+ }
44
+ }
45
+ logger.info(`[integration] connection-test job done — ok: ${counts.ok}, fail: ${counts.fail}, ` +
46
+ `skipped: ${counts.skipped}, errored: ${counts.errored}`);
47
+ }
48
+ exports.config = {
49
+ name: "test-integration-connections-daily",
50
+ // Once a day, off-peak (03:00). Cron: minute hour day-of-month month day-of-week.
51
+ schedule: "0 3 * * *",
52
+ };
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1pbnRlZ3JhdGlvbi1jb25uZWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9qb2JzL3Rlc3QtaW50ZWdyYXRpb24tY29ubmVjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBZUEsZ0RBdUNDO0FBckRELHdEQUEyRDtBQUUzRCwwREFBNEU7QUFFNUU7Ozs7Ozs7OztHQVNHO0FBQ1ksS0FBSyxVQUFVLDZCQUE2QixDQUFDLFNBQTBCO0lBQ3BGLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQVMsUUFBUSxDQUFDLENBQUE7SUFDbEQsTUFBTSxPQUFPLEdBQTZCLFNBQVMsQ0FBQyxPQUFPLENBQUMsZ0NBQWtCLENBQUMsQ0FBQTtJQUUvRSxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxDQUFBO0lBQ3pELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQzdCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLG1CQUFtQixDQUNoRSxDQUFBO0lBRUQsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUVBQXVFLENBQUMsQ0FBQTtRQUNwRixPQUFNO0lBQ1IsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsOENBQThDLE9BQU8sQ0FBQyxNQUFNLGlCQUFpQixDQUFDLENBQUE7SUFFMUYsTUFBTSxNQUFNLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUE7SUFFekQsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUM7WUFDSCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFBLCtDQUFpQyxFQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztnQkFDeEUsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUU7YUFDM0MsQ0FBQyxDQUFBO1lBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFBO1lBQ3ZCLE1BQU0sSUFBSSxHQUFHLGlCQUFpQixNQUFNLENBQUMsV0FBVyxNQUFNLE1BQU0sQ0FBQyxNQUFNLEdBQ2pFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUMzQyxFQUFFLENBQUE7WUFDRixJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssTUFBTTtnQkFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBOztnQkFDMUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN4QixDQUFDO1FBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztZQUNoQixNQUFNLENBQUMsT0FBTyxFQUFFLENBQUE7WUFDaEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsTUFBTSxDQUFDLFdBQVcsa0JBQWtCLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUN0RixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFJLENBQ1QsZ0RBQWdELE1BQU0sQ0FBQyxFQUFFLFdBQVcsTUFBTSxDQUFDLElBQUksSUFBSTtRQUNqRixZQUFZLE1BQU0sQ0FBQyxPQUFPLGNBQWMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUMzRCxDQUFBO0FBQ0gsQ0FBQztBQUVZLFFBQUEsTUFBTSxHQUFHO0lBQ3BCLElBQUksRUFBRSxvQ0FBb0M7SUFDMUMsa0ZBQWtGO0lBQ2xGLFFBQVEsRUFBRSxXQUFXO0NBQ3RCLENBQUEifQ==
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const globals_1 = require("@jest/globals");
4
+ const build_zod_1 = require("../build-zod");
5
+ (0, globals_1.describe)("optionToZod", () => {
6
+ (0, globals_1.it)("string required rejects undefined and empty (minLength 1)", () => {
7
+ const s = (0, build_zod_1.optionToZod)({ type: "string", required: true, minLength: 1, label: "l" });
8
+ (0, globals_1.expect)(s.safeParse(undefined).success).toBe(false);
9
+ (0, globals_1.expect)(s.safeParse("").success).toBe(false);
10
+ (0, globals_1.expect)(s.safeParse("x").success).toBe(true);
11
+ });
12
+ (0, globals_1.it)("optional string accepts undefined", () => {
13
+ (0, globals_1.expect)((0, build_zod_1.optionToZod)({ type: "string", label: "l" }).safeParse(undefined).success).toBe(true);
14
+ });
15
+ (0, globals_1.it)("url type validates URLs", () => {
16
+ const u = (0, build_zod_1.optionToZod)({ type: "url", label: "l" });
17
+ (0, globals_1.expect)(u.safeParse("nope").success).toBe(false);
18
+ (0, globals_1.expect)(u.safeParse("https://x.io").success).toBe(true);
19
+ (0, globals_1.expect)(u.safeParse("http://x.io").success).toBe(true);
20
+ });
21
+ (0, globals_1.it)("url type restricts the scheme via protocols", () => {
22
+ const https = (0, build_zod_1.optionToZod)({ type: "url", protocols: ["https"], label: "l" });
23
+ (0, globals_1.expect)(https.safeParse("https://x.io").success).toBe(true);
24
+ (0, globals_1.expect)(https.safeParse("http://x.io").success).toBe(false);
25
+ });
26
+ (0, globals_1.it)("email type validates emails", () => {
27
+ const e = (0, build_zod_1.optionToZod)({ type: "email", label: "l" });
28
+ (0, globals_1.expect)(e.safeParse("a@b.co").success).toBe(true);
29
+ (0, globals_1.expect)(e.safeParse("a@b").success).toBe(false);
30
+ });
31
+ (0, globals_1.it)("uuid type validates UUIDs", () => {
32
+ const u = (0, build_zod_1.optionToZod)({ type: "uuid", label: "l" });
33
+ (0, globals_1.expect)(u.safeParse("not-a-uuid").success).toBe(false);
34
+ (0, globals_1.expect)(u.safeParse("550e8400-e29b-41d4-a716-446655440000").success).toBe(true);
35
+ });
36
+ (0, globals_1.it)("boolean with default fills undefined", () => {
37
+ const r = (0, build_zod_1.optionToZod)({ type: "boolean", default: true, label: "l" }).safeParse(undefined);
38
+ (0, globals_1.expect)(r.success && r.data).toBe(true);
39
+ });
40
+ (0, globals_1.it)("enum rejects out-of-set values", () => {
41
+ const s = (0, build_zod_1.optionToZod)({ type: "enum", values: ["a", "b"], label: "l" });
42
+ (0, globals_1.expect)(s.safeParse("a").success).toBe(true);
43
+ (0, globals_1.expect)(s.safeParse("c").success).toBe(false);
44
+ });
45
+ (0, globals_1.it)("number honors int/min/max/positive/nonnegative/multipleOf", () => {
46
+ (0, globals_1.expect)((0, build_zod_1.optionToZod)({ type: "number", int: true, label: "l" }).safeParse(2.5).success).toBe(false);
47
+ (0, globals_1.expect)((0, build_zod_1.optionToZod)({ type: "number", min: 1, max: 10, label: "l" }).safeParse(0).success).toBe(false);
48
+ (0, globals_1.expect)((0, build_zod_1.optionToZod)({ type: "number", positive: true, label: "l" }).safeParse(0).success).toBe(false);
49
+ (0, globals_1.expect)((0, build_zod_1.optionToZod)({ type: "number", nonnegative: true, label: "l" }).safeParse(-1).success).toBe(false);
50
+ (0, globals_1.expect)((0, build_zod_1.optionToZod)({ type: "number", nonnegative: true, label: "l" }).safeParse(0).success).toBe(true);
51
+ (0, globals_1.expect)((0, build_zod_1.optionToZod)({ type: "number", multipleOf: 5, label: "l" }).safeParse(7).success).toBe(false);
52
+ (0, globals_1.expect)((0, build_zod_1.optionToZod)({ type: "number", multipleOf: 5, label: "l" }).safeParse(10).success).toBe(true);
53
+ });
54
+ (0, globals_1.it)("json accepts arbitrary values; required rejects undefined; default fills", () => {
55
+ const opt = (0, build_zod_1.optionToZod)({ type: "json", label: "l" });
56
+ (0, globals_1.expect)(opt.safeParse({ a: 1 }).success).toBe(true);
57
+ (0, globals_1.expect)(opt.safeParse([1, 2]).success).toBe(true);
58
+ (0, globals_1.expect)(opt.safeParse(undefined).success).toBe(true); // optional
59
+ (0, globals_1.expect)((0, build_zod_1.optionToZod)({ type: "json", required: true, label: "l" }).safeParse(undefined).success).toBe(false);
60
+ const d = (0, build_zod_1.optionToZod)({ type: "json", default: [], label: "l" }).safeParse(undefined);
61
+ (0, globals_1.expect)(d.success && d.data).toEqual([]);
62
+ });
63
+ });
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtem9kLnVuaXQuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2ludGVncmF0aW9uL2Rlc2NyaXB0b3IvX190ZXN0c19fL2J1aWxkLXpvZC51bml0LnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyQ0FBb0Q7QUFDcEQsNENBQTBDO0FBRTFDLElBQUEsa0JBQVEsRUFBQyxhQUFhLEVBQUUsR0FBRyxFQUFFO0lBQzNCLElBQUEsWUFBRSxFQUFDLDJEQUEyRCxFQUFFLEdBQUcsRUFBRTtRQUNuRSxNQUFNLENBQUMsR0FBRyxJQUFBLHVCQUFXLEVBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQTtRQUNuRixJQUFBLGdCQUFNLEVBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDbEQsSUFBQSxnQkFBTSxFQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzNDLElBQUEsZ0JBQU0sRUFBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUM3QyxDQUFDLENBQUMsQ0FBQTtJQUVGLElBQUEsWUFBRSxFQUFDLG1DQUFtQyxFQUFFLEdBQUcsRUFBRTtRQUMzQyxJQUFBLGdCQUFNLEVBQUMsSUFBQSx1QkFBVyxFQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENB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QkFBTSxFQUFDLElBQUEsdUJBQVcsRUFBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3BHLElBQUEsZ0JBQU0sRUFBQyxJQUFBLHVCQUFXLEVBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3hHLElBQUEsZ0JBQU0sRUFBQyxJQUFBLHVCQUFXLEVBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN0RyxJQUFBLGdCQUFNLEVBQUMsSUFBQSx1QkFBVyxFQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDbkcsSUFBQSxnQkFBTSxFQUFDLElBQUEsdUJBQVcsRUFBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3JHLENBQUMsQ0FBQyxDQUFBO0lBRUYsSUFBQSxZQUFFLEVBQUMsMEVBQTBFLEVBQUUsR0FBRyxFQUFFO1FBQ2xGLE1BQU0sR0FBRyxHQUFHLElBQUEsdUJBQVcsRUFBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUE7UUFDckQsSUFBQSxnQkFBTSxFQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDbEQsSUFBQSxnQkFBTSxFQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDaEQsSUFBQSxnQkFBTSxFQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBLENBQUMsV0FBVztRQUMvRCxJQUFBLGdCQUFNLEVBQUMsSUFBQSx1QkFBVyxFQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDMUcsTUFBTSxDQUFDLEdBQUcsSUFBQSx1QkFBVyxFQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUNyRixJQUFBLGdCQUFNLEVBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ3pDLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEifQ==
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const globals_1 = require("@jest/globals");
4
+ const define_1 = require("../define");
5
+ (0, globals_1.describe)("defineIntegration", () => {
6
+ const d = (0, define_1.defineIntegration)({
7
+ module: "payment",
8
+ displayName: "demo.name",
9
+ options: {
10
+ terminalKey: { type: "string", required: true, minLength: 1, label: "l" },
11
+ capture: { type: "boolean", default: true, label: "l" },
12
+ ffd: { type: "enum", values: ["1.2", "1.05"], label: "l" },
13
+ },
14
+ sections: [
15
+ { id: "creds", title: "t", options: ["terminalKey"] },
16
+ { id: "behavior", title: "t", options: ["capture", "ffd"] },
17
+ ],
18
+ });
19
+ (0, globals_1.it)("composes an optionsSchema from every option, applying defaults", () => {
20
+ const r = d.optionsSchema.safeParse({ terminalKey: "x" });
21
+ (0, globals_1.expect)(r.success).toBe(true);
22
+ if (r.success)
23
+ (0, globals_1.expect)(r.data.capture).toBe(true);
24
+ });
25
+ (0, globals_1.it)("optionsSchema strips unknown keys", () => {
26
+ const r = d.optionsSchema.safeParse({ terminalKey: "x", bogus: 1 });
27
+ (0, globals_1.expect)(r.success && "bogus" in r.data).toBe(false);
28
+ });
29
+ (0, globals_1.it)("keeps the options catalog on the descriptor", () => {
30
+ (0, globals_1.expect)(Object.keys(d.options)).toEqual(["terminalKey", "capture", "ffd"]);
31
+ });
32
+ (0, globals_1.it)("throws when a section references an unknown option id", () => {
33
+ (0, globals_1.expect)(() => (0, define_1.defineIntegration)({
34
+ module: "payment",
35
+ displayName: "demo.name",
36
+ options: { a: { type: "string", label: "l" } },
37
+ sections: [{ id: "s", title: "t", options: ["a", "missing"] }],
38
+ })).toThrow(/missing/);
39
+ });
40
+ });
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5lLnVuaXQuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2ludGVncmF0aW9uL2Rlc2NyaXB0b3IvX190ZXN0c19fL2RlZmluZS51bml0LnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyQ0FBb0Q7QUFDcEQsc0NBQTZDO0FBRTdDLElBQUEsa0JBQVEsRUFBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUU7SUFDakMsTUFBTSxDQUFDLEdBQUcsSUFBQSwwQkFBaUIsRUFBQztRQUMxQixNQUFNLEVBQUUsU0FBUztRQUNqQixXQUFXLEVBQUUsV0FBVztRQUN4QixPQUFPLEVBQUU7WUFDUCxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO1lBQ3pFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO1lBQ3ZELEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7U0FDM0Q7UUFDRCxRQUFRLEVBQUU7WUFDUixFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUNyRCxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEVBQUU7U0FDNUQ7S0FDRixDQUFDLENBQUE7SUFFRixJQUFBLFlBQUUsRUFBQyxnRUFBZ0UsRUFBRSxHQUFHLEVBQUU7UUFDeEUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQTtRQUN6RCxJQUFBLGdCQUFNLEVBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM1QixJQUFJLENBQUMsQ0FBQyxPQUFPO1lBQUUsSUFBQSxnQkFBTSxFQUFFLENBQUMsQ0FBQyxJQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQzNELENBQUMsQ0FBQyxDQUFBO0lBRUYsSUFBQSxZQUFFLEVBQUMsbUNBQW1DLEVBQUUsR0FBRyxFQUFFO1FBQzNDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNuRSxJQUFBLGdCQUFNLEVBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxPQUFPLElBQUssQ0FBQyxDQUFDLElBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM3RCxDQUFDLENBQUMsQ0FBQTtJQUVGLElBQUEsWUFBRSxFQUFDLDZDQUE2QyxFQUFFLEdBQUcsRUFBRTtRQUNyRCxJQUFBLGdCQUFNLEVBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFhLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDM0UsQ0FBQyxDQUFDLENBQUE7SUFFRixJQUFBLFlBQUUsRUFBQyx1REFBdUQsRUFBRSxHQUFHLEVBQUU7UUFDL0QsSUFBQSxnQkFBTSxFQUFDLEdBQUcsRUFBRSxDQUNWLElBQUEsMEJBQWlCLEVBQUM7WUFDaEIsTUFBTSxFQUFFLFNBQVM7WUFDakIsV0FBVyxFQUFFLFdBQVc7WUFDeEIsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDOUMsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUM7U0FDL0QsQ0FBQyxDQUNILENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3RCLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEifQ==