@gorgo/medusa-integration 0.1.1 → 0.1.3

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.
@@ -2188,7 +2188,7 @@ const EditPage = () => {
2188
2188
  IntegrationFieldValue,
2189
2189
  {
2190
2190
  field: f,
2191
- value: (_a = record == null ? void 0 : record.values) == null ? void 0 : _a[f.name],
2191
+ value: ((_a = record == null ? void 0 : record.values) == null ? void 0 : _a[f.name]) ?? f.default,
2192
2192
  secretConfigured: configuredSecrets.has(f.name)
2193
2193
  }
2194
2194
  ) }, f.name);
@@ -2184,7 +2184,7 @@ const EditPage = () => {
2184
2184
  IntegrationFieldValue,
2185
2185
  {
2186
2186
  field: f,
2187
- value: (_a = record == null ? void 0 : record.values) == null ? void 0 : _a[f.name],
2187
+ value: ((_a = record == null ? void 0 : record.values) == null ? void 0 : _a[f.name]) ?? f.default,
2188
2188
  secretConfigured: configuredSecrets.has(f.name)
2189
2189
  }
2190
2190
  ) }, f.name);
@@ -1,7 +1,7 @@
1
1
  import { z } from "@medusajs/deps/zod";
2
2
  export type AdminUpsertIntegrationType = z.infer<typeof AdminUpsertIntegration>;
3
3
  export declare const AdminUpsertIntegration: z.ZodObject<{
4
- title: z.ZodOptional<z.ZodString>;
4
+ title: z.ZodOptional<z.ZodNullable<z.ZodString>>;
5
5
  section_id: z.ZodOptional<z.ZodString>;
6
6
  values: z.ZodRecord<z.ZodString, z.ZodUnknown>;
7
7
  }, z.core.$strip>;
@@ -3,7 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
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
- title: zod_1.z.string().optional(),
6
+ // Omitted → the stored title is kept; explicit `null` → cleared.
7
+ title: zod_1.z.string().nullable().optional(),
7
8
  // Which descriptor section these values belong to. Omitted by widgets, which submit
8
9
  // their own option ids directly — the server then validates exactly the submitted keys.
9
10
  section_id: zod_1.z.string().optional(),
@@ -18,4 +19,4 @@ exports.AdminGetIntegrationsParams = zod_1.z.object({
18
19
  limit: zod_1.z.coerce.number().int().min(1).max(1000).optional(),
19
20
  offset: zod_1.z.coerce.number().int().min(0).optional(),
20
21
  });
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvYWRtaW4vaW50ZWdyYXRpb25zL3ZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNENBQXNDO0FBR3pCLFFBQUEsc0JBQXNCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM3QyxLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QixvRkFBb0Y7SUFDcEYsd0ZBQXdGO0lBQ3hGLFVBQVUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2pDLE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7Q0FDMUMsQ0FBQyxDQUFBO0FBR1csUUFBQSwwQkFBMEIsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2pELFVBQVUsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFO0NBQ3hCLENBQUMsQ0FBQTtBQUdXLFFBQUEsMEJBQTBCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNqRCxDQUFDLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUN4QixRQUFRLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUMvQixLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUMxRCxNQUFNLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0NBQ2xELENBQUMsQ0FBQSJ9
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvYWRtaW4vaW50ZWdyYXRpb25zL3ZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNENBQXNDO0FBR3pCLFFBQUEsc0JBQXNCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM3QyxpRUFBaUU7SUFDakUsS0FBSyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDdkMsb0ZBQW9GO0lBQ3BGLHdGQUF3RjtJQUN4RixVQUFVLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNqQyxNQUFNLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsT0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0NBQzFDLENBQUMsQ0FBQTtBQUdXLFFBQUEsMEJBQTBCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNqRCxVQUFVLEVBQUUsT0FBQyxDQUFDLE9BQU8sRUFBRTtDQUN4QixDQUFDLENBQUE7QUFHVyxRQUFBLDBCQUEwQixHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDakQsQ0FBQyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDeEIsUUFBUSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDL0IsS0FBSyxFQUFFLE9BQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDMUQsTUFBTSxFQUFFLE9BQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtDQUNsRCxDQUFDLENBQUEifQ==
@@ -8,6 +8,10 @@ export { resolveIntegrationOptions } from "./lib/resolve-integration-options";
8
8
  export type { ResolveIntegrationOptionsInput } from "./lib/resolve-integration-options";
9
9
  export { getResolvedIntegrationOptionsWorkflow, getResolvedIntegrationOptionsStep, } from "./workflows/integration";
10
10
  export type { GetResolvedIntegrationOptionsWorkflowInput, GetResolvedIntegrationOptionsStepInput, } from "./workflows/integration";
11
+ export { upsertIntegrationWorkflow } from "./workflows/integration";
12
+ export type { UpsertIntegrationWorkflowInput } from "./workflows/integration";
13
+ export { integrationProviderKey, parseIntegrationProviderKey } from "./modules/integration/utils";
14
+ export type { ParsedIntegrationProviderKey } from "./modules/integration/utils";
11
15
  export { INTEGRATION_MODULE } from "./modules/integration";
12
16
  export { default as IntegrationModuleService } from "./modules/integration/services/integration-module";
13
17
  export type { ResolvedOptions } from "./modules/integration/services/integration-module";
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.IntegrationModuleService = exports.INTEGRATION_MODULE = exports.getResolvedIntegrationOptionsStep = exports.getResolvedIntegrationOptionsWorkflow = exports.resolveIntegrationOptions = exports.isDescriptorComplete = exports.collectValidationIssues = exports.AbstractIntegrationProvider = exports.z = exports.defineIntegration = void 0;
6
+ exports.IntegrationModuleService = exports.INTEGRATION_MODULE = exports.parseIntegrationProviderKey = exports.integrationProviderKey = exports.upsertIntegrationWorkflow = exports.getResolvedIntegrationOptionsStep = exports.getResolvedIntegrationOptionsWorkflow = exports.resolveIntegrationOptions = exports.isDescriptorComplete = exports.collectValidationIssues = exports.AbstractIntegrationProvider = exports.z = exports.defineIntegration = void 0;
7
7
  // ── For integration-provider authors ─────────────────────────────────────────
8
8
  var define_1 = require("./modules/integration/descriptor/define");
9
9
  Object.defineProperty(exports, "defineIntegration", { enumerable: true, get: function () { return define_1.defineIntegration; } });
@@ -20,9 +20,16 @@ Object.defineProperty(exports, "resolveIntegrationOptions", { enumerable: true,
20
20
  var integration_1 = require("./workflows/integration");
21
21
  Object.defineProperty(exports, "getResolvedIntegrationOptionsWorkflow", { enumerable: true, get: function () { return integration_1.getResolvedIntegrationOptionsWorkflow; } });
22
22
  Object.defineProperty(exports, "getResolvedIntegrationOptionsStep", { enumerable: true, get: function () { return integration_1.getResolvedIntegrationOptionsStep; } });
23
+ var integration_2 = require("./workflows/integration");
24
+ Object.defineProperty(exports, "upsertIntegrationWorkflow", { enumerable: true, get: function () { return integration_2.upsertIntegrationWorkflow; } });
25
+ // The `provider_id` convention (`int_<identifier>[_<instanceId>]`) — for providers that
26
+ // receive a provider_id on their own routes and need to build or parse one.
27
+ var utils_1 = require("./modules/integration/utils");
28
+ Object.defineProperty(exports, "integrationProviderKey", { enumerable: true, get: function () { return utils_1.integrationProviderKey; } });
29
+ Object.defineProperty(exports, "parseIntegrationProviderKey", { enumerable: true, get: function () { return utils_1.parseIntegrationProviderKey; } });
23
30
  // ── For consumers of the integration module ──────────────────────────────────
24
- var integration_2 = require("./modules/integration");
25
- Object.defineProperty(exports, "INTEGRATION_MODULE", { enumerable: true, get: function () { return integration_2.INTEGRATION_MODULE; } });
31
+ var integration_3 = require("./modules/integration");
32
+ Object.defineProperty(exports, "INTEGRATION_MODULE", { enumerable: true, get: function () { return integration_3.INTEGRATION_MODULE; } });
26
33
  var integration_module_1 = require("./modules/integration/services/integration-module");
27
34
  Object.defineProperty(exports, "IntegrationModuleService", { enumerable: true, get: function () { return __importDefault(integration_module_1).default; } });
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsZ0ZBQWdGO0FBQ2hGLGtFQUE4RTtBQUFyRSwyR0FBQSxpQkFBaUIsT0FBQTtBQUFFLDJGQUFBLENBQUMsT0FBQTtBQUM3QiwyR0FBdUc7QUFBOUYsNElBQUEsMkJBQTJCLE9BQUE7QUFZcEMsZ0ZBQWdGO0FBQ2hGLHNFQUF5RztBQUFoRyxtSEFBQSx1QkFBdUIsT0FBQTtBQUFFLGdIQUFBLG9CQUFvQixPQUFBO0FBSXRELGtGQUFrRjtBQUNsRixpRkFBNkU7QUFBcEUsd0lBQUEseUJBQXlCLE9BQUE7QUFFbEMsdURBR2dDO0FBRjlCLG9JQUFBLHFDQUFxQyxPQUFBO0FBQ3JDLGdJQUFBLGlDQUFpQyxPQUFBO0FBT25DLGdGQUFnRjtBQUNoRixxREFBMEQ7QUFBakQsaUhBQUEsa0JBQWtCLE9BQUE7QUFDM0Isd0ZBQXVHO0FBQTlGLCtJQUFBLE9BQU8sT0FBNEIifQ==
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsZ0ZBQWdGO0FBQ2hGLGtFQUE4RTtBQUFyRSwyR0FBQSxpQkFBaUIsT0FBQTtBQUFFLDJGQUFBLENBQUMsT0FBQTtBQUM3QiwyR0FBdUc7QUFBOUYsNElBQUEsMkJBQTJCLE9BQUE7QUFZcEMsZ0ZBQWdGO0FBQ2hGLHNFQUF5RztBQUFoRyxtSEFBQSx1QkFBdUIsT0FBQTtBQUFFLGdIQUFBLG9CQUFvQixPQUFBO0FBSXRELGtGQUFrRjtBQUNsRixpRkFBNkU7QUFBcEUsd0lBQUEseUJBQXlCLE9BQUE7QUFFbEMsdURBR2dDO0FBRjlCLG9JQUFBLHFDQUFxQyxPQUFBO0FBQ3JDLGdJQUFBLGlDQUFpQyxPQUFBO0FBT25DLHVEQUFtRTtBQUExRCx3SEFBQSx5QkFBeUIsT0FBQTtBQUdsQyx3RkFBd0Y7QUFDeEYsNEVBQTRFO0FBQzVFLHFEQUFpRztBQUF4RiwrR0FBQSxzQkFBc0IsT0FBQTtBQUFFLG9IQUFBLDJCQUEyQixPQUFBO0FBRzVELGdGQUFnRjtBQUNoRixxREFBMEQ7QUFBakQsaUhBQUEsa0JBQWtCLE9BQUE7QUFDM0Isd0ZBQXVHO0FBQTlGLCtJQUFBLE9BQU8sT0FBNEIifQ==
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const types_1 = require("../types");
4
+ const provider_id_1 = require("../utils/provider-id");
4
5
  /**
5
6
  * Thin registry over the integration-providers registered into the module container by
6
7
  * `loadProviders`. Each registration in `options.providers` is one instance, identified
@@ -17,7 +18,7 @@ class IntegrationProviderService {
17
18
  }
18
19
  /** Build the container key for a `(identifier, instanceId)` pair. */
19
20
  static key(identifier, instanceId) {
20
- return `${types_1.IntegrationProviderRegistrationPrefix}${identifier}${instanceId ? `_${instanceId}` : ""}`;
21
+ return (0, provider_id_1.integrationProviderKey)(identifier, instanceId);
21
22
  }
22
23
  /** All registered provider instances. */
23
24
  listProviders() {
@@ -73,4 +74,4 @@ class IntegrationProviderService {
73
74
  }
74
75
  }
75
76
  exports.default = IntegrationProviderService;
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWdyYXRpb24tcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9pbnRlZ3JhdGlvbi9zZXJ2aWNlcy9pbnRlZ3JhdGlvbi1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLG9DQUFnRTtBQWlCaEU7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBcUIsMEJBQTBCO0lBRzdDLFlBQVksU0FBK0I7UUFDekMsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUE7SUFDaEMsQ0FBQztJQUVELHFFQUFxRTtJQUNyRSxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQWtCLEVBQUUsVUFBMEI7UUFDdkQsT0FBTyxHQUFHLDZDQUFxQyxHQUFHLFVBQVUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFBO0lBQ3JHLENBQUM7SUFFRCx5Q0FBeUM7SUFDekMsYUFBYTtRQUNYLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO2FBQ25DLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyw2Q0FBcUMsQ0FBQyxDQUFDO2FBQ2xFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUErQixDQUFDLENBQUMsQ0FBQTtJQUNwRSxDQUFDO0lBRUQsK0VBQStFO0lBQy9FLGlCQUFpQjtRQUNmLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO2FBQ25DLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyw2Q0FBcUMsQ0FBQyxDQUFDO2FBQ2xFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ1QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUErQixDQUFDLENBQUE7WUFDcEUsT0FBTztnQkFDTCxHQUFHLEVBQUUsQ0FBQztnQkFDTixVQUFVLEVBQUUsUUFBUSxDQUFDLGFBQWEsRUFBRTtnQkFDcEMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxhQUFhLEVBQUU7Z0JBQ3BDLFFBQVE7YUFDVCxDQUFBO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQscURBQXFEO0lBQ3JELGFBQWEsQ0FBQyxHQUFXO1FBQ3ZCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBaUMsQ0FBQyxDQUFBO1FBQ3RFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLE1BQU0sSUFBSSxLQUFLLENBQ2IsNENBQTRDLEdBQUcsc0dBQXNHLENBQ3RKLENBQUE7UUFDSCxDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUE7SUFDakIsQ0FBQztJQUVELGtFQUFrRTtJQUNsRSxnQkFBZ0IsQ0FBQyxVQUFrQixFQUFFLFVBQTBCO1FBQzdELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUE7SUFDbkYsQ0FBQztJQUVELGlGQUFpRjtJQUNqRixXQUFXLENBQUMsVUFBa0IsRUFBRSxVQUEwQjtRQUN4RCxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUN6QiwwQkFBMEIsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBK0IsQ0FDckYsQ0FBQTtJQUNILENBQUM7SUFFRCw2RkFBNkY7SUFDN0YsZUFBZSxDQUFDLEdBQVc7UUFDekIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUE7SUFDNUQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDMUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVU7WUFDeEIsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVO1lBQ3hCLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVTtTQUN6QixDQUFDLENBQUMsQ0FBQTtJQUNMLENBQUM7Q0FDRjtBQTFFRCw2Q0EwRUMifQ==
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWdyYXRpb24tcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9pbnRlZ3JhdGlvbi9zZXJ2aWNlcy9pbnRlZ3JhdGlvbi1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLG9DQUFnRTtBQUNoRSxzREFBNkQ7QUFpQjdEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQXFCLDBCQUEwQjtJQUc3QyxZQUFZLFNBQStCO1FBQ3pDLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFBO0lBQ2hDLENBQUM7SUFFRCxxRUFBcUU7SUFDckUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFrQixFQUFFLFVBQTBCO1FBQ3ZELE9BQU8sSUFBQSxvQ0FBc0IsRUFBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUE7SUFDdkQsQ0FBQztJQUVELHlDQUF5QztJQUN6QyxhQUFhO1FBQ1gsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7YUFDbkMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLDZDQUFxQyxDQUFDLENBQUM7YUFDbEUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQStCLENBQUMsQ0FBQyxDQUFBO0lBQ3BFLENBQUM7SUFFRCwrRUFBK0U7SUFDL0UsaUJBQWlCO1FBQ2YsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7YUFDbkMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLDZDQUFxQyxDQUFDLENBQUM7YUFDbEUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDVCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQStCLENBQUMsQ0FBQTtZQUNwRSxPQUFPO2dCQUNMLEdBQUcsRUFBRSxDQUFDO2dCQUNOLFVBQVUsRUFBRSxRQUFRLENBQUMsYUFBYSxFQUFFO2dCQUNwQyxVQUFVLEVBQUUsUUFBUSxDQUFDLGFBQWEsRUFBRTtnQkFDcEMsUUFBUTthQUNULENBQUE7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxxREFBcUQ7SUFDckQsYUFBYSxDQUFDLEdBQVc7UUFDdkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFpQyxDQUFDLENBQUE7UUFDdEUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsTUFBTSxJQUFJLEtBQUssQ0FDYiw0Q0FBNEMsR0FBRyxzR0FBc0csQ0FDdEosQ0FBQTtRQUNILENBQUM7UUFDRCxPQUFPLFFBQVEsQ0FBQTtJQUNqQixDQUFDO0lBRUQsa0VBQWtFO0lBQ2xFLGdCQUFnQixDQUFDLFVBQWtCLEVBQUUsVUFBMEI7UUFDN0QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQTtJQUNuRixDQUFDO0lBRUQsaUZBQWlGO0lBQ2pGLFdBQVcsQ0FBQyxVQUFrQixFQUFFLFVBQTBCO1FBQ3hELE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQ3pCLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUErQixDQUNyRixDQUFBO0lBQ0gsQ0FBQztJQUVELDZGQUE2RjtJQUM3RixlQUFlLENBQUMsR0FBVztRQUN6QixPQUFPLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQTtJQUM1RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMxQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVTtZQUN4QixVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVU7WUFDeEIsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVO1NBQ3pCLENBQUMsQ0FBQyxDQUFBO0lBQ0wsQ0FBQztDQUNGO0FBMUVELDZDQTBFQyJ9
@@ -0,0 +1,64 @@
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
+ const provider_id_1 = require("../provider-id");
7
+ const integration_provider_1 = __importDefault(require("../../services/integration-provider"));
8
+ describe("integrationProviderKey", () => {
9
+ it("keys the default instance without a suffix", () => {
10
+ expect((0, provider_id_1.integrationProviderKey)("apiship")).toBe("int_apiship");
11
+ expect((0, provider_id_1.integrationProviderKey)("apiship", null)).toBe("int_apiship");
12
+ expect((0, provider_id_1.integrationProviderKey)("apiship", "")).toBe("int_apiship");
13
+ });
14
+ it("appends a named instance", () => {
15
+ expect((0, provider_id_1.integrationProviderKey)("apiship", "apiship-1")).toBe("int_apiship_apiship-1");
16
+ });
17
+ it("is the same key the registry uses", () => {
18
+ expect(integration_provider_1.default.key("apiship", "eu")).toBe((0, provider_id_1.integrationProviderKey)("apiship", "eu"));
19
+ });
20
+ });
21
+ describe("parseIntegrationProviderKey", () => {
22
+ it("recognises the default instance", () => {
23
+ expect((0, provider_id_1.parseIntegrationProviderKey)("int_apiship", "apiship")).toEqual({
24
+ identifier: "apiship",
25
+ instanceId: null,
26
+ });
27
+ });
28
+ it("extracts a named instance", () => {
29
+ expect((0, provider_id_1.parseIntegrationProviderKey)("int_apiship_apiship-1", "apiship")).toEqual({
30
+ identifier: "apiship",
31
+ instanceId: "apiship-1",
32
+ });
33
+ });
34
+ it("keeps underscores inside the instance id", () => {
35
+ expect((0, provider_id_1.parseIntegrationProviderKey)("int_apiship_eu_west", "apiship")).toEqual({
36
+ identifier: "apiship",
37
+ instanceId: "eu_west",
38
+ });
39
+ });
40
+ it("rejects another provider's key", () => {
41
+ expect((0, provider_id_1.parseIntegrationProviderKey)("int_tkassa", "apiship")).toBeNull();
42
+ expect((0, provider_id_1.parseIntegrationProviderKey)("int_tkassa_1", "apiship")).toBeNull();
43
+ // A different identifier that merely starts with the same characters.
44
+ expect((0, provider_id_1.parseIntegrationProviderKey)("int_apishipx", "apiship")).toBeNull();
45
+ });
46
+ it("rejects malformed and empty input", () => {
47
+ expect((0, provider_id_1.parseIntegrationProviderKey)(undefined, "apiship")).toBeNull();
48
+ expect((0, provider_id_1.parseIntegrationProviderKey)(null, "apiship")).toBeNull();
49
+ expect((0, provider_id_1.parseIntegrationProviderKey)("", "apiship")).toBeNull();
50
+ expect((0, provider_id_1.parseIntegrationProviderKey)("apiship", "apiship")).toBeNull();
51
+ // Trailing separator with no instance id.
52
+ expect((0, provider_id_1.parseIntegrationProviderKey)("int_apiship_", "apiship")).toBeNull();
53
+ });
54
+ it("round-trips with integrationProviderKey", () => {
55
+ for (const instanceId of [null, "a", "apiship-1", "eu_west"]) {
56
+ const key = (0, provider_id_1.integrationProviderKey)("apiship", instanceId);
57
+ expect((0, provider_id_1.parseIntegrationProviderKey)(key, "apiship")).toEqual({
58
+ identifier: "apiship",
59
+ instanceId,
60
+ });
61
+ }
62
+ });
63
+ });
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItaWQudW5pdC5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvaW50ZWdyYXRpb24vdXRpbHMvX190ZXN0c19fL3Byb3ZpZGVyLWlkLnVuaXQuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGdEQUFvRjtBQUNwRiwrRkFBNEU7QUFFNUUsUUFBUSxDQUFDLHdCQUF3QixFQUFFLEdBQUcsRUFBRTtJQUN0QyxFQUFFLENBQUMsNENBQTRDLEVBQUUsR0FBRyxFQUFFO1FBQ3BELE1BQU0sQ0FBQyxJQUFBLG9DQUFzQixFQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQzdELE1BQU0sQ0FBQyxJQUFBLG9DQUFzQixFQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUNuRSxNQUFNLENBQUMsSUFBQSxvQ0FBc0IsRUFBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDbkUsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFO1FBQ2xDLE1BQU0sQ0FBQyxJQUFBLG9DQUFzQixFQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFBO0lBQ3RGLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLG1DQUFtQyxFQUFFLEdBQUcsRUFBRTtRQUMzQyxNQUFNLENBQUMsOEJBQTBCLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDMUQsSUFBQSxvQ0FBc0IsRUFBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQ3hDLENBQUE7SUFDSCxDQUFDLENBQUMsQ0FBQTtB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
@@ -1 +1,3 @@
1
1
  export { AbstractIntegrationProvider } from "./abstract-integration-provider";
2
+ export { integrationProviderKey, parseIntegrationProviderKey } from "./provider-id";
3
+ export type { ParsedIntegrationProviderKey } from "./provider-id";
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AbstractIntegrationProvider = void 0;
3
+ exports.parseIntegrationProviderKey = exports.integrationProviderKey = exports.AbstractIntegrationProvider = void 0;
4
4
  var abstract_integration_provider_1 = require("./abstract-integration-provider");
5
5
  Object.defineProperty(exports, "AbstractIntegrationProvider", { enumerable: true, get: function () { return abstract_integration_provider_1.AbstractIntegrationProvider; } });
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9pbnRlZ3JhdGlvbi91dGlscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpRkFBNkU7QUFBcEUsNElBQUEsMkJBQTJCLE9BQUEifQ==
6
+ var provider_id_1 = require("./provider-id");
7
+ Object.defineProperty(exports, "integrationProviderKey", { enumerable: true, get: function () { return provider_id_1.integrationProviderKey; } });
8
+ Object.defineProperty(exports, "parseIntegrationProviderKey", { enumerable: true, get: function () { return provider_id_1.parseIntegrationProviderKey; } });
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9pbnRlZ3JhdGlvbi91dGlscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpRkFBNkU7QUFBcEUsNElBQUEsMkJBQTJCLE9BQUE7QUFDcEMsNkNBQW1GO0FBQTFFLHFIQUFBLHNCQUFzQixPQUFBO0FBQUUsMEhBQUEsMkJBQTJCLE9BQUEifQ==
@@ -0,0 +1,22 @@
1
+ /**
2
+ * The `provider_id` convention, in one place: every registration is keyed
3
+ * `int_<identifier>[_<instanceId>]`, and that key is also the stored `provider_id`.
4
+ *
5
+ * Pure (no container, no db) so provider packages can import it to build/parse the ids they
6
+ * receive on their own routes without re-deriving the format.
7
+ */
8
+ export declare function integrationProviderKey(identifier: string, instanceId?: string | null): string;
9
+ export type ParsedIntegrationProviderKey = {
10
+ identifier: string;
11
+ /** `null` for the default (single) instance. */
12
+ instanceId: string | null;
13
+ };
14
+ /**
15
+ * Inverse of {@link integrationProviderKey} for a KNOWN identifier — the only direction that
16
+ * is unambiguous, since both identifiers and instance ids may contain `_`:
17
+ *
18
+ * parseIntegrationProviderKey("int_apiship_eu", "apiship") → { identifier: "apiship", instanceId: "eu" }
19
+ * parseIntegrationProviderKey("int_apiship", "apiship") → { identifier: "apiship", instanceId: null }
20
+ * parseIntegrationProviderKey("int_tkassa", "apiship") → null
21
+ */
22
+ export declare function parseIntegrationProviderKey(providerId: string | null | undefined, identifier: string): ParsedIntegrationProviderKey | null;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.integrationProviderKey = integrationProviderKey;
4
+ exports.parseIntegrationProviderKey = parseIntegrationProviderKey;
5
+ const types_1 = require("../types");
6
+ /**
7
+ * The `provider_id` convention, in one place: every registration is keyed
8
+ * `int_<identifier>[_<instanceId>]`, and that key is also the stored `provider_id`.
9
+ *
10
+ * Pure (no container, no db) so provider packages can import it to build/parse the ids they
11
+ * receive on their own routes without re-deriving the format.
12
+ */
13
+ function integrationProviderKey(identifier, instanceId) {
14
+ return `${types_1.IntegrationProviderRegistrationPrefix}${identifier}${instanceId ? `_${instanceId}` : ""}`;
15
+ }
16
+ /**
17
+ * Inverse of {@link integrationProviderKey} for a KNOWN identifier — the only direction that
18
+ * is unambiguous, since both identifiers and instance ids may contain `_`:
19
+ *
20
+ * parseIntegrationProviderKey("int_apiship_eu", "apiship") → { identifier: "apiship", instanceId: "eu" }
21
+ * parseIntegrationProviderKey("int_apiship", "apiship") → { identifier: "apiship", instanceId: null }
22
+ * parseIntegrationProviderKey("int_tkassa", "apiship") → null
23
+ */
24
+ function parseIntegrationProviderKey(providerId, identifier) {
25
+ if (!providerId)
26
+ return null;
27
+ const base = integrationProviderKey(identifier);
28
+ if (providerId === base)
29
+ return { identifier, instanceId: null };
30
+ const instancePrefix = `${base}_`;
31
+ if (!providerId.startsWith(instancePrefix))
32
+ return null;
33
+ const instanceId = providerId.slice(instancePrefix.length);
34
+ return instanceId ? { identifier, instanceId } : null;
35
+ }
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItaWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9pbnRlZ3JhdGlvbi91dGlscy9wcm92aWRlci1pZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVNBLHdEQUVDO0FBZ0JELGtFQWNDO0FBekNELG9DQUEwRTtBQUUxRTs7Ozs7O0dBTUc7QUFDSCxTQUFnQixzQkFBc0IsQ0FBQyxVQUFrQixFQUFFLFVBQTBCO0lBQ25GLE9BQU8sR0FBRyw2Q0FBTSxHQUFHLFVBQVUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFBO0FBQ3RFLENBQUM7QUFRRDs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0IsMkJBQTJCLENBQ3pDLFVBQXFDLEVBQ3JDLFVBQWtCO0lBRWxCLElBQUksQ0FBQyxVQUFVO1FBQUUsT0FBTyxJQUFJLENBQUE7SUFFNUIsTUFBTSxJQUFJLEdBQUcsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDL0MsSUFBSSxVQUFVLEtBQUssSUFBSTtRQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFBO0lBRWhFLE1BQU0sY0FBYyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUE7SUFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUE7SUFFdkQsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDMUQsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7QUFDdkQsQ0FBQyJ9
@@ -0,0 +1 @@
1
+ export * from "./integration";
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ // Barrel for the `@gorgo/medusa-integration/workflows` subpath declared in package.json.
18
+ __exportStar(require("./integration"), exports);
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5RkFBeUY7QUFDekYsZ0RBQTZCIn0=
@@ -1,4 +1,5 @@
1
1
  export { upsertIntegrationWorkflow } from "./upsert-integration";
2
+ export type { UpsertIntegrationWorkflowInput } from "./upsert-integration";
2
3
  export { deleteIntegrationWorkflow } from "./delete-integration";
3
4
  export { testIntegrationConnectionWorkflow } from "./test-integration-connection";
4
5
  export { setIntegrationEnabledWorkflow } from "./set-integration-enabled";
@@ -11,4 +11,4 @@ var set_integration_enabled_1 = require("./set-integration-enabled");
11
11
  Object.defineProperty(exports, "setIntegrationEnabledWorkflow", { enumerable: true, get: function () { return set_integration_enabled_1.setIntegrationEnabledWorkflow; } });
12
12
  var get_resolved_integration_options_1 = require("./get-resolved-integration-options");
13
13
  Object.defineProperty(exports, "getResolvedIntegrationOptionsWorkflow", { enumerable: true, get: function () { return get_resolved_integration_options_1.getResolvedIntegrationOptionsWorkflow; } });
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2ludGVncmF0aW9uL3dvcmtmbG93cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyREFBZ0U7QUFBdkQsK0hBQUEseUJBQXlCLE9BQUE7QUFDbEMsMkRBQWdFO0FBQXZELCtIQUFBLHlCQUF5QixPQUFBO0FBQ2xDLDZFQUFpRjtBQUF4RSxnSkFBQSxpQ0FBaUMsT0FBQTtBQUMxQyxxRUFBeUU7QUFBaEUsd0lBQUEsNkJBQTZCLE9BQUE7QUFDdEMsdUZBQTBGO0FBQWpGLHlKQUFBLHFDQUFxQyxPQUFBIn0=
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2ludGVncmF0aW9uL3dvcmtmbG93cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyREFBZ0U7QUFBdkQsK0hBQUEseUJBQXlCLE9BQUE7QUFFbEMsMkRBQWdFO0FBQXZELCtIQUFBLHlCQUF5QixPQUFBO0FBQ2xDLDZFQUFpRjtBQUF4RSxnSkFBQSxpQ0FBaUMsT0FBQTtBQUMxQyxxRUFBeUU7QUFBaEUsd0lBQUEsNkJBQTZCLE9BQUE7QUFDdEMsdUZBQTBGO0FBQWpGLHlKQUFBLHFDQUFxQyxPQUFBIn0=
@@ -12,9 +12,9 @@ exports.upsertIntegrationWorkflow = (0, workflows_sdk_1.createWorkflow)(exports.
12
12
  });
13
13
  const recordInput = (0, workflows_sdk_1.transform)({ input, prepared }, (data) => ({
14
14
  provider_id: data.input.provider_id,
15
- title: data.input.title ?? null,
16
15
  category: data.prepared.category,
17
16
  options: data.prepared.options,
17
+ ...(data.input.title !== undefined ? { title: data.input.title } : {}),
18
18
  }));
19
19
  const record = (0, steps_1.upsertIntegrationRecordStep)(recordInput);
20
20
  (0, steps_1.emitIntegrationEventStep)((0, workflows_sdk_1.transform)({ input }, (d) => ({
@@ -26,4 +26,4 @@ exports.upsertIntegrationWorkflow = (0, workflows_sdk_1.createWorkflow)(exports.
26
26
  })));
27
27
  return new workflows_sdk_1.WorkflowResponse(record);
28
28
  });
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBzZXJ0LWludGVncmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9pbnRlZ3JhdGlvbi93b3JrZmxvd3MvdXBzZXJ0LWludGVncmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUErRjtBQUMvRixvQ0FJaUI7QUFTSixRQUFBLDJCQUEyQixHQUFHLG9CQUFvQixDQUFBO0FBRWxELFFBQUEseUJBQXlCLEdBQUcsSUFBQSw4QkFBYyxFQUNyRCxtQ0FBMkIsRUFDM0IsVUFBVSxLQUFxQztJQUM3QyxNQUFNLFFBQVEsR0FBRyxJQUFBLG1DQUEyQixFQUFDO1FBQzNDLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztRQUM5QixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsSUFBSSxJQUFJO1FBQ3BDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtLQUNyQixDQUFDLENBQUE7SUFFRixNQUFNLFdBQVcsR0FBRyxJQUFBLHlCQUFTLEVBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUQsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVztRQUNuQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSTtRQUMvQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRO1FBQ2hDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU87S0FDL0IsQ0FBQyxDQUFDLENBQUE7SUFFSCxNQUFNLE1BQU0sR0FBRyxJQUFBLG1DQUEyQixFQUFDLFdBQVcsQ0FBQyxDQUFBO0lBRXZELElBQUEsZ0NBQXdCLEVBQ3RCLElBQUEseUJBQVMsRUFBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzNCLElBQUksRUFBRSxxQkFBcUI7UUFDM0IsSUFBSSxFQUFFO1lBQ0osV0FBVyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVztZQUNoQyxNQUFNLEVBQUUsUUFBUTtTQUNqQjtLQUNGLENBQUMsQ0FBQyxDQUNKLENBQUE7SUFFRCxPQUFPLElBQUksZ0NBQWdCLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDckMsQ0FBQyxDQUNGLENBQUEifQ==
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBzZXJ0LWludGVncmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9pbnRlZ3JhdGlvbi93b3JrZmxvd3MvdXBzZXJ0LWludGVncmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUErRjtBQUMvRixvQ0FJaUI7QUFTSixRQUFBLDJCQUEyQixHQUFHLG9CQUFvQixDQUFBO0FBRWxELFFBQUEseUJBQXlCLEdBQUcsSUFBQSw4QkFBYyxFQUNyRCxtQ0FBMkIsRUFDM0IsVUFBVSxLQUFxQztJQUM3QyxNQUFNLFFBQVEsR0FBRyxJQUFBLG1DQUEyQixFQUFDO1FBQzNDLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztRQUM5QixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsSUFBSSxJQUFJO1FBQ3BDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtLQUNyQixDQUFDLENBQUE7SUFFRixNQUFNLFdBQVcsR0FBRyxJQUFBLHlCQUFTLEVBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUQsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVztRQUNuQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRO1FBQ2hDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU87UUFDOUIsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ3ZFLENBQUMsQ0FBQyxDQUFBO0lBRUgsTUFBTSxNQUFNLEdBQUcsSUFBQSxtQ0FBMkIsRUFBQyxXQUFXLENBQUMsQ0FBQTtJQUV2RCxJQUFBLGdDQUF3QixFQUN0QixJQUFBLHlCQUFTLEVBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMzQixJQUFJLEVBQUUscUJBQXFCO1FBQzNCLElBQUksRUFBRTtZQUNKLFdBQVcsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVc7WUFDaEMsTUFBTSxFQUFFLFFBQVE7U0FDakI7S0FDRixDQUFDLENBQUMsQ0FDSixDQUFBO0lBRUQsT0FBTyxJQUFJLGdDQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ3JDLENBQUMsQ0FDRixDQUFBIn0=
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License Copyright (c) 2025 Gorgo
2
+
3
+ Permission is hereby granted, free
4
+ of charge, to any person obtaining a copy of this software and associated
5
+ documentation files (the "Software"), to deal in the Software without
6
+ restriction, including without limitation the rights to use, copy, modify, merge,
7
+ publish, distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to the
9
+ following conditions:
10
+
11
+ The above copyright notice and this permission notice
12
+ (including the next paragraph) shall be included in all copies or substantial
13
+ portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
16
+ ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
18
+ EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
19
+ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,9 @@
1
+ <p align="center">
2
+ <a href="https://docs.gorgojs.com/integrations/integration">
3
+ <img alt="Integration Module logo" src="https://raw.githubusercontent.com/gorgojs/medusa-integrations/refs/heads/main/assets/integration-medusa-logo.svg" width="100">
4
+ </a>
5
+ </p>
6
+
1
7
  <h1 align="center">
2
8
  Integration Module for Medusa
3
9
  </h1>
@@ -5,7 +11,7 @@ Integration Module for Medusa
5
11
  <p align="center">
6
12
  <a href="https://docs.gorgojs.com/integrations/integration">Documentation</a>
7
13
  <br/>
8
- A Medusa module that lets plugins declare their settings and store admins configure them right in the Admin – no <code>medusa-config</code> edits, no redeploys.
14
+ A Medusa module that lets any plugin or provider declare its options and store admins manage them in the Admin – no <code>medusa-config</code> edits, no redeploys.
9
15
  <br/>
10
16
  <a href="https://github.com/gorgojs/medusa-integrations/blob/HEAD/packages/modules/integration/README-ru.md">Читать README на русском ↗</a>
11
17
  </p>
@@ -33,33 +39,77 @@ Integration Module for Medusa
33
39
  </a>
34
40
  </p>
35
41
 
42
+ <p align="center">
43
+ <a href="https://static.gorgojs.com/videos/integration-module/integration-module.mp4">
44
+ <img src="https://static.gorgojs.com/videos/integration-module/integration-module-preview-1776169330.webp" alt="Watch the Integration Module demo video" width="100%" style="border-radius: 8px; max-width: 720px;">
45
+ </a>
46
+ </p>
47
+
48
+ ## What is the Integration Module?
49
+
50
+ The Integration Module lets any plugin declare its options, and store admins configure them as **integrations** right in the Admin – no `medusa-config` edits, no redeploys. It generates the admin CRUD API and validation, so there are no data models, routes, or forms to write.
51
+
52
+ The Integration Module is useful for any Medusa developer building plugins, providers, or custom modules that need configurable settings, such as API keys, credentials, modes, or webhooks, but who'd rather not hand-build settings UI pages, a data layer, and validation for each one.
53
+
36
54
  ## Features
37
55
 
38
- - **No-code configuration in the Admin.** Plugin credentials and settings are managed under Settings → Integrations — no `medusa-config`/env edits and no redeploys.
39
- - **Encrypted secrets at rest.** Fields marked `secret` are encrypted (AES-256-GCM) and never reach the browser.
40
- - **Declarative descriptor** (`defineIntegration`) for plugin authors: options, sections, validation, and a connection test in one place.
41
- - **Rich option types & validation:** `string` / `url` / `email` / `uuid` / `number` / `boolean` / `enum` / `json`, per-option and cross-section rules, conditional visibility, read-only fields, i18n labels, and an icon.
42
- - **Multiple instances** of the same provider (e.g. several accounts).
43
- - **Connection test** from the Admin.
44
- - **Typed runtime resolve:** consumers read a validated, decrypted config; incomplete or disabled configs never resolve, so drafts don't leak into runtime.
45
- - **Custom admin widgets** per provider.
46
- - **Anonymous telemetry.**
56
+ - **Settings management in Admin:** Set in the **Settings → Integrations** section, no `medusa-config`/env edits and no redeploys.
57
+ - **Any plugin, provider, or module:** Works across payment, fulfillment, ERP, notification, content, and other extensions.
58
+ - **Declarative descriptor (`defineIntegration`):** A single description of the options, settings sections, validation, and connection test.
59
+ - **Flexible typing and validation:** Typed fields (`string`, `url`, `email`, `uuid`, `number`, `boolean`, `enum`, `json`) with per-option and cross-section rules, conditional visibility, and read-only fields. At runtime, the plugin gets a typed, decrypted object: incomplete or disabled settings never resolve, so an unfilled draft is never returned.
60
+ - **Encrypted secrets:** Fields marked `secret` are encrypted (AES-256-GCM) and never reach the browser.
61
+ - **Multiple instances:** The same provider can be configured more than once. For example, for several accounts in the same third-party service.
62
+ - **Connection test:** Verify credentials against the third-party service right from the Admin.
63
+ - **Extensible UI:** Sections can be reordered (LayoutComposer). If the generated sections aren't enough, you can implement any UI for your options using custom widgets.
64
+ - **Integration catalog:** Available integrations are shown in the Admin, and any plugin appears there on equal footing with the built-in ones.
65
+
66
+ ## Available Integrations
67
+
68
+ <p>
69
+ <a href="https://www.npmjs.com/package/@gorgo/medusa-fulfillment-apiship">
70
+ <img src="https://raw.githubusercontent.com/gorgojs/medusa-integrations/refs/heads/main/catalog/icons/apiship.svg" width="50" hspace="5" align="left" alt="ApiShip logo"/>
71
+ </a>
72
+ <b>ApiShip</b><br/>
73
+ Fulfillment · <a href="https://www.npmjs.com/package/@gorgo/medusa-fulfillment-apiship">@gorgo/medusa-fulfillment-apiship</a>
74
+ </p>
47
75
 
48
- ## What is the integration module?
76
+ <p>
77
+ <a href="https://www.npmjs.com/package/@gorgo/medusa-payment-tkassa">
78
+ <img src="https://raw.githubusercontent.com/gorgojs/medusa-integrations/refs/heads/main/catalog/icons/tkassa.png" width="50" hspace="5" align="left" alt="T-Kassa logo"/>
79
+ </a>
80
+ <b>T-Kassa by T-Bank</b><br/>
81
+ Payment · <a href="https://www.npmjs.com/package/@gorgo/medusa-payment-tkassa">@gorgo/medusa-payment-tkassa</a>
82
+ </p>
49
83
 
50
- Plugins need settings — API keys, modes, webhooks. Usually these live in `medusa-config`/env, which requires code access and a redeploy for every change, with secrets kept in plain text. This module moves settings into the **Admin and the database**: a store admin fills in a form, secrets are encrypted, and the consuming plugin reads the ready config at runtime. Plugin authors only **describe** the settings form — the module handles the UI, storage, encryption, and validation.
84
+ <p>
85
+ <a href="https://www.npmjs.com/package/@gorgo/medusa-payment-yookassa">
86
+ <img src="https://raw.githubusercontent.com/gorgojs/medusa-integrations/refs/heads/main/catalog/icons/yookassa.svg" width="50" hspace="5" align="left" alt="YooKassa logo"/>
87
+ </a>
88
+ <b>YooKassa</b><br/>
89
+ Payment · <a href="https://www.npmjs.com/package/@gorgo/medusa-payment-yookassa">@gorgo/medusa-payment-yookassa</a>
90
+ </p>
51
91
 
52
- ## Integrated plugins & providers
92
+ <p>
93
+ <a href="https://www.npmjs.com/package/@gorgo/medusa-payment-robokassa">
94
+ <img src="https://raw.githubusercontent.com/gorgojs/medusa-integrations/refs/heads/main/catalog/icons/robokassa.svg" width="50" hspace="5" align="left" alt="Robokassa logo"/>
95
+ </a>
96
+ <b>Robokassa</b><br/>
97
+ Payment · <a href="https://www.npmjs.com/package/@gorgo/medusa-payment-robokassa">@gorgo/medusa-payment-robokassa</a>
98
+ </p>
53
99
 
54
- | Provider | Category | `resolve` |
55
- |---|---|---|
56
- | [T-Kassa](https://docs.gorgojs.com/integrations/t-kassa) | `payment` | `@gorgo/medusa-payment-tkassa-v2/providers/integration-tkassa` |
100
+ <p>
101
+ <a href="https://www.npmjs.com/package/@gorgo/medusa-1c">
102
+ <img src="https://raw.githubusercontent.com/gorgojs/medusa-integrations/refs/heads/main/catalog/icons/1c.svg" width="50" hspace="5" align="left" alt="1C logo"/>
103
+ </a>
104
+ <b>1C:Enterprise</b><br/>
105
+ ERP · <a href="https://www.npmjs.com/package/@gorgo/medusa-1c">@gorgo/medusa-1c</a>
106
+ </p>
57
107
 
58
- Any plugin can ship an integration provider — see the [documentation](https://docs.gorgojs.com/integrations/integration).
108
+ Any plugin can use the Integration Module, see the [documentation](https://docs.gorgojs.com/medusa-modules/integration).
59
109
 
60
110
  ## 💬 Support & Community
61
111
 
62
- Got questions or ideas about the module? Join the Telegram support chat — [@gorgojs_chat](https://t.me/gorgojs_chat)
112
+ Got questions or ideas? Join the Telegram support chat — [@gorgojs_chat](https://t.me/gorgojs_chat)
63
113
 
64
114
  Connect with other Medusa developers on Telegram — [@medusajs_chat](https://t.me/medusajs_chat)
65
115
 
@@ -78,4 +128,8 @@ npm install @gorgo/medusa-integration
78
128
 
79
129
  ## Documentation
80
130
 
81
- The complete installation, configuration, and usage guide is available on the [Gorgo documentation website](https://docs.gorgojs.com/integrations/integration).
131
+ The complete installation, configuration, and usage guide is available on the [Gorgo documentation website](https://docs.gorgojs.com/medusa-modules/integration).
132
+
133
+ ## License
134
+
135
+ Licensed under the [MIT License](LICENSE).
package/package.json CHANGED
@@ -1,11 +1,14 @@
1
1
  {
2
2
  "name": "@gorgo/medusa-integration",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "Integration module for Medusa",
5
5
  "author": {
6
6
  "name": "Gorgo",
7
7
  "url": "https://gorgojs.com"
8
8
  },
9
+ "license": "MIT",
10
+ "homepage": "https://gorgojs.com/medusa-integration-module",
11
+ "bugs": "https://github.com/gorgojs/medusa-integrations/issues",
9
12
  "files": [
10
13
  ".medusa/server"
11
14
  ],
@@ -46,7 +49,7 @@
46
49
  "test:unit": "TEST_TYPE=unit NODE_OPTIONS=--experimental-vm-modules jest --silent --runInBand --forceExit"
47
50
  },
48
51
  "dependencies": {
49
- "@gorgo/telemetry": "^1.3.0"
52
+ "@gorgo/telemetry": "^1.4.0"
50
53
  },
51
54
  "devDependencies": {
52
55
  "@medusajs/admin-sdk": "^2.17.2",