@gorgo/medusa-integration 0.0.4 → 0.0.6

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 (56) hide show
  1. package/.medusa/server/src/admin/index.js +519 -106
  2. package/.medusa/server/src/admin/index.mjs +522 -109
  3. package/.medusa/server/src/api/admin/integrations/[provider_id]/route.js +7 -2
  4. package/.medusa/server/src/api/admin/integrations/catalog/route.d.ts +3 -0
  5. package/.medusa/server/src/api/admin/integrations/catalog/route.js +10 -0
  6. package/.medusa/server/src/api/admin/integrations/middlewares.js +16 -1
  7. package/.medusa/server/src/api/admin/integrations/route.js +17 -3
  8. package/.medusa/server/src/api/admin/integrations/validators.d.ts +7 -0
  9. package/.medusa/server/src/api/admin/integrations/validators.js +8 -2
  10. package/.medusa/server/src/index.d.ts +4 -0
  11. package/.medusa/server/src/index.js +10 -4
  12. package/.medusa/server/src/jobs/test-integration-connections.js +3 -3
  13. package/.medusa/server/src/lib/__tests__/catalog-fallback.unit.spec.d.ts +1 -0
  14. package/.medusa/server/src/lib/__tests__/catalog-fallback.unit.spec.js +37 -0
  15. package/.medusa/server/src/lib/__tests__/catalog.unit.spec.d.ts +1 -0
  16. package/.medusa/server/src/lib/__tests__/catalog.unit.spec.js +71 -0
  17. package/.medusa/server/src/lib/__tests__/resolve-integration-options.unit.spec.d.ts +1 -0
  18. package/.medusa/server/src/lib/__tests__/resolve-integration-options.unit.spec.js +29 -0
  19. package/.medusa/server/src/lib/catalog.d.ts +9 -0
  20. package/.medusa/server/src/lib/catalog.generated.d.ts +2 -0
  21. package/.medusa/server/src/lib/catalog.generated.js +88 -0
  22. package/.medusa/server/src/lib/catalog.js +55 -0
  23. package/.medusa/server/src/lib/resolve-integration-options.d.ts +23 -0
  24. package/.medusa/server/src/lib/resolve-integration-options.js +23 -0
  25. package/.medusa/server/src/modules/integration/loaders/__tests__/package-meta.unit.spec.d.ts +1 -0
  26. package/.medusa/server/src/modules/integration/loaders/__tests__/package-meta.unit.spec.js +63 -0
  27. package/.medusa/server/src/modules/integration/loaders/load-providers.js +9 -37
  28. package/.medusa/server/src/modules/integration/loaders/package-meta.d.ts +22 -0
  29. package/.medusa/server/src/modules/integration/loaders/package-meta.js +45 -0
  30. package/.medusa/server/src/modules/integration/loaders/resolve-package-meta.d.ts +8 -0
  31. package/.medusa/server/src/modules/integration/loaders/resolve-package-meta.js +59 -0
  32. package/.medusa/server/src/modules/integration/migrations/Migration20260724101525.d.ts +5 -0
  33. package/.medusa/server/src/modules/integration/migrations/Migration20260724101525.js +16 -0
  34. package/.medusa/server/src/modules/integration/models/integration.d.ts +8 -4
  35. package/.medusa/server/src/modules/integration/services/__tests__/integration-module.unit.spec.js +107 -3
  36. package/.medusa/server/src/modules/integration/services/integration-module.d.ts +46 -9
  37. package/.medusa/server/src/modules/integration/services/integration-module.js +54 -4
  38. package/.medusa/server/src/modules/integration/types/index.d.ts +11 -0
  39. package/.medusa/server/src/modules/integration/types/index.js +4 -2
  40. package/.medusa/server/src/modules/integration/utils/integration.d.ts +8 -4
  41. package/.medusa/server/src/modules/integration/utils/integration.js +9 -5
  42. package/.medusa/server/src/types/http/integration/admin/entities.d.ts +34 -0
  43. package/.medusa/server/src/types/http/integration/admin/responses.d.ts +17 -2
  44. package/.medusa/server/src/workflows/integration/steps/get-resolved-integration-options.d.ts +6 -0
  45. package/.medusa/server/src/workflows/integration/steps/get-resolved-integration-options.js +12 -0
  46. package/.medusa/server/src/workflows/integration/steps/index.d.ts +2 -0
  47. package/.medusa/server/src/workflows/integration/steps/index.js +5 -2
  48. package/.medusa/server/src/workflows/integration/steps/set-integration-enabled.d.ts +1 -1
  49. package/.medusa/server/src/workflows/integration/workflows/get-resolved-integration-options.d.ts +6 -0
  50. package/.medusa/server/src/workflows/integration/workflows/get-resolved-integration-options.js +8 -0
  51. package/.medusa/server/src/workflows/integration/workflows/index.d.ts +2 -0
  52. package/.medusa/server/src/workflows/integration/workflows/index.js +4 -2
  53. package/.medusa/server/src/workflows/integration/workflows/set-integration-enabled.d.ts +1 -1
  54. package/README.md +5 -5
  55. package/README.ru.md +5 -5
  56. package/package.json +7 -3
@@ -2,12 +2,14 @@ import { Logger } from "@medusajs/framework/types";
2
2
  import IntegrationProviderService from "./integration-provider";
3
3
  import type { IntegrationDescriptor, TestConnectionResult } from "../descriptor/define";
4
4
  import { type UiDescriptor } from "../descriptor/introspect";
5
- import { INTEGRATION_OPTIONS_KEY, type IntegrationModuleOptions } from "../types";
6
- import type { IntegrationOverviewItem } from "../../../types";
5
+ import { INTEGRATION_OPTIONS_KEY, INTEGRATION_PACKAGE_META_KEY, type IntegrationModuleOptions, type PackageMetaMap } from "../types";
6
+ import type { IntegrationOverviewItem, CatalogItem } from "../../../types";
7
+ import type { CategoryKind } from "../../../types/integration";
7
8
  type InjectedDependencies = {
8
9
  logger?: Logger;
9
10
  integrationProviderService: IntegrationProviderService;
10
11
  [INTEGRATION_OPTIONS_KEY]?: IntegrationModuleOptions;
12
+ [INTEGRATION_PACKAGE_META_KEY]?: PackageMetaMap;
11
13
  };
12
14
  export type ResolvedOptions = {
13
15
  options: Record<string, unknown>;
@@ -17,19 +19,34 @@ export type ResolvedOptions = {
17
19
  is_enabled: boolean;
18
20
  };
19
21
  };
22
+ export type IntegrationOverviewQuery = {
23
+ q?: string;
24
+ category?: string;
25
+ limit?: number;
26
+ offset?: number;
27
+ };
28
+ export type IntegrationOverviewResult = {
29
+ integrations: IntegrationOverviewItem[];
30
+ count: number;
31
+ categories: CategoryKind[];
32
+ };
20
33
  declare const IntegrationModuleService_base: import("@medusajs/framework/utils").MedusaServiceReturnType<import("@medusajs/framework/utils").ModelConfigurationsToConfigTemplate<{
21
34
  readonly Integration: import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
22
35
  id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
23
36
  category: import("@medusajs/framework/utils").EnumProperty<{
24
37
  readonly PAYMENT: "payment";
38
+ readonly NOTIFICATION: "notification";
25
39
  readonly FULFILLMENT: "fulfillment";
26
- readonly MARKETPLACE: "marketplace";
27
- readonly CRM: "crm";
40
+ readonly SEARCH: "search";
41
+ readonly CONTENT: "content";
42
+ readonly ANALYTICS: "analytics";
43
+ readonly AUTHENTICATION: "authentication";
28
44
  readonly ERP: "erp";
45
+ readonly CRM: "crm";
29
46
  readonly PIM: "pim";
30
- readonly NOTIFICATION: "notification";
47
+ readonly MARKETPLACE: "marketplace";
31
48
  readonly FEED: "feed";
32
- readonly TAX: "tax";
49
+ readonly FILE_PROVIDERS: "file_providers";
33
50
  readonly OTHER: "other";
34
51
  }>;
35
52
  provider_id: import("@medusajs/framework/utils").TextProperty;
@@ -46,6 +63,7 @@ declare const IntegrationModuleService_base: import("@medusajs/framework/utils")
46
63
  export default class IntegrationModuleService extends IntegrationModuleService_base {
47
64
  protected providerService_: IntegrationProviderService;
48
65
  protected options_: IntegrationModuleOptions;
66
+ protected packageMeta_: PackageMetaMap;
49
67
  protected cache_: Map<string, {
50
68
  value: ResolvedOptions | null;
51
69
  expiresAt: number;
@@ -66,7 +84,7 @@ export default class IntegrationModuleService extends IntegrationModuleService_b
66
84
  */
67
85
  findByProviderId(providerId: string): Promise<{
68
86
  id: string;
69
- category: "payment" | "fulfillment" | "marketplace" | "crm" | "erp" | "pim" | "notification" | "feed" | "tax" | "other";
87
+ category: "search" | "payment" | "notification" | "fulfillment" | "content" | "analytics" | "authentication" | "erp" | "crm" | "pim" | "marketplace" | "feed" | "file_providers" | "other";
70
88
  provider_id: string;
71
89
  title: string | null;
72
90
  options: Record<string, unknown>;
@@ -92,14 +110,33 @@ export default class IntegrationModuleService extends IntegrationModuleService_b
92
110
  protected assembleValues(record: any): Record<string, unknown>;
93
111
  /**
94
112
  * Admin overview: every declared instance (registration) merged with its current row
95
- * state. Lets the UI list configurable integrations before any row exists. No secrets.
113
+ * state, then filtered + paginated server-side. `categories` is the UNFILTERED facet so
114
+ * the UI's tab bar stays stable while a tab is active. No secrets.
96
115
  */
97
- listIntegrationsOverview(): Promise<IntegrationOverviewItem[]>;
116
+ listIntegrationsOverview(query?: IntegrationOverviewQuery): Promise<IntegrationOverviewResult>;
98
117
  /**
99
118
  * Run the connection test against the currently-resolved settings.
100
119
  * Delegates to the descriptor's `testConnection` (if it declares one).
101
120
  */
102
121
  runTestConnection(providerId: string): Promise<TestConnectionResult>;
122
+ /** Map a provider identifier to its public package-meta fields (snake_case), or nulls. */
123
+ private mapPackageMeta;
124
+ /**
125
+ * Package metadata (version/author) for one `provider_id` — resolved by the registration's
126
+ * `identifier` from the loader-injected map. Feeds the detail page's identity header.
127
+ * Returns nulls when the provider is unregistered or its package wasn't resolvable.
128
+ */
129
+ getPackageMeta(providerId: string): {
130
+ version: string | null;
131
+ author: string | null;
132
+ author_url: string | null;
133
+ };
134
+ /**
135
+ * The integration catalog (from the live Gorgo catalog API via loadCatalog(), with an offline fallback) merged with local install state: each entry gets
136
+ * `installed`/`provider_id` by matching its `integrationId` to a registered provider's
137
+ * `identifier`. 1c is a plain module (not an integration provider) → always not installed.
138
+ */
139
+ getCatalog(): Promise<CatalogItem[]>;
103
140
  /** The configured passphrase (any non-empty string). Throws if missing. */
104
141
  protected resolveKey(): string;
105
142
  /** The derived 32-byte AES key, computed once from the passphrase. */
@@ -11,6 +11,7 @@ const integration_provider_1 = __importDefault(require("./integration-provider")
11
11
  const introspect_1 = require("../descriptor/introspect");
12
12
  const validate_1 = require("../descriptor/validate");
13
13
  const types_1 = require("../types");
14
+ const catalog_1 = require("../../../lib/catalog");
14
15
  const CACHE_TTL_MS = 60_000;
15
16
  class IntegrationModuleService extends (0, utils_1.MedusaService)({
16
17
  Integration: integration_1.default,
@@ -20,6 +21,7 @@ class IntegrationModuleService extends (0, utils_1.MedusaService)({
20
21
  this.cache_ = new Map();
21
22
  this.providerService_ = deps.integrationProviderService;
22
23
  this.options_ = deps[types_1.INTEGRATION_OPTIONS_KEY] ?? {};
24
+ this.packageMeta_ = deps[types_1.INTEGRATION_PACKAGE_META_KEY] ?? {};
23
25
  }
24
26
  // ── descriptors (sourced from registered integration-providers) ──────────────
25
27
  /** UI descriptors for every registration (one per instance). */
@@ -83,13 +85,14 @@ class IntegrationModuleService extends (0, utils_1.MedusaService)({
83
85
  }
84
86
  /**
85
87
  * Admin overview: every declared instance (registration) merged with its current row
86
- * state. Lets the UI list configurable integrations before any row exists. No secrets.
88
+ * state, then filtered + paginated server-side. `categories` is the UNFILTERED facet so
89
+ * the UI's tab bar stays stable while a tab is active. No secrets.
87
90
  */
88
- async listIntegrationsOverview() {
91
+ async listIntegrationsOverview(query = {}) {
89
92
  const regs = this.providerService_.listRegistrations();
90
93
  const rows = await this.listIntegrations({}, { take: 1000 });
91
94
  const byId = new Map(rows.map((r) => [r.provider_id, r]));
92
- return regs.map((r) => {
95
+ const all = regs.map((r) => {
93
96
  const d = r.provider.descriptor;
94
97
  const row = byId.get(r.key);
95
98
  return {
@@ -98,7 +101,9 @@ class IntegrationModuleService extends (0, utils_1.MedusaService)({
98
101
  instance_id: r.instanceId,
99
102
  category: d.category,
100
103
  display_name: d.displayName,
104
+ description: d.description,
101
105
  icon: d.icon,
106
+ ...this.mapPackageMeta(r.identifier),
102
107
  supports_multiple_instances: d.supportsMultipleInstances ?? false,
103
108
  has_test_connection: typeof d.testConnection === "function",
104
109
  is_configured: !!row,
@@ -107,6 +112,22 @@ class IntegrationModuleService extends (0, utils_1.MedusaService)({
107
112
  last_test_status: row?.last_test_status ?? null,
108
113
  };
109
114
  });
115
+ // Unfiltered facet — distinct categories across every registration (stable tab bar).
116
+ const categories = [...new Set(all.map((i) => i.category))];
117
+ let filtered = all;
118
+ if (query.category)
119
+ filtered = filtered.filter((i) => i.category === query.category);
120
+ const q = query.q?.trim().toLowerCase();
121
+ if (q) {
122
+ filtered = filtered.filter((i) => [i.display_name, i.identifier, i.instance_id, i.description]
123
+ .filter(Boolean)
124
+ .some((s) => String(s).toLowerCase().includes(q)));
125
+ }
126
+ const count = filtered.length;
127
+ const offset = query.offset ?? 0;
128
+ const limit = query.limit ?? filtered.length;
129
+ const integrations = filtered.slice(offset, offset + limit);
130
+ return { integrations, count, categories };
110
131
  }
111
132
  /**
112
133
  * Run the connection test against the currently-resolved settings.
@@ -135,6 +156,35 @@ class IntegrationModuleService extends (0, utils_1.MedusaService)({
135
156
  return { status: "failed", message: e?.message ?? "Test failed" };
136
157
  }
137
158
  }
159
+ /** Map a provider identifier to its public package-meta fields (snake_case), or nulls. */
160
+ mapPackageMeta(identifier) {
161
+ const meta = identifier ? this.packageMeta_[identifier] : undefined;
162
+ return { version: meta?.version ?? null, author: meta?.author ?? null, author_url: meta?.authorUrl ?? null };
163
+ }
164
+ /**
165
+ * Package metadata (version/author) for one `provider_id` — resolved by the registration's
166
+ * `identifier` from the loader-injected map. Feeds the detail page's identity header.
167
+ * Returns nulls when the provider is unregistered or its package wasn't resolvable.
168
+ */
169
+ getPackageMeta(providerId) {
170
+ return this.mapPackageMeta(this.providerService_.getRegistration(providerId)?.identifier);
171
+ }
172
+ /**
173
+ * The integration catalog (from the live Gorgo catalog API via loadCatalog(), with an offline fallback) merged with local install state: each entry gets
174
+ * `installed`/`provider_id` by matching its `integrationId` to a registered provider's
175
+ * `identifier`. 1c is a plain module (not an integration provider) → always not installed.
176
+ */
177
+ async getCatalog() {
178
+ const catalog = await (0, catalog_1.loadCatalog)();
179
+ const { integrations } = await this.listIntegrationsOverview();
180
+ // Keyed by identifier; if one identifier has multiple registered instances, the last wins
181
+ // (catalog "installed" is per-integration, so Settings links to that single provider_id).
182
+ const byId = new Map(integrations.map((i) => [i.identifier, i]));
183
+ return catalog.map((c) => {
184
+ const reg = byId.get(c.integrationId);
185
+ return { ...c, installed: !!reg, provider_id: reg?.provider_id ?? null };
186
+ });
187
+ }
138
188
  // ── encryption ───────────────────────────────────────────────────────────────
139
189
  /** The configured passphrase (any non-empty string). Throws if missing. */
140
190
  resolveKey() {
@@ -214,4 +264,4 @@ class IntegrationModuleService extends (0, utils_1.MedusaService)({
214
264
  }
215
265
  }
216
266
  exports.default = IntegrationModuleService;
217
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWdyYXRpb24tbW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvaW50ZWdyYXRpb24vc2VydmljZXMvaW50ZWdyYXRpb24tbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscURBQXlEO0FBRXpELHdFQUErQztBQUMvQyxxQ0FBb0M7QUFDcEMsdUNBQXNFO0FBQ3RFLGtGQUErRDtBQUUvRCx5REFBb0c7QUFDcEcscURBQTZEO0FBQzdELG9DQUFpRjtBQWNqRixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUE7QUFFM0IsTUFBcUIsd0JBQXlCLFNBQVEsSUFBQSxxQkFBYSxFQUFDO0lBQ2xFLFdBQVcsRUFBWCxxQkFBVztDQUNaLENBQUM7SUFNQSxZQUFZLElBQTBCO1FBQ3BDLEtBQUssQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFBO1FBSlgsV0FBTSxHQUFHLElBQUksR0FBRyxFQUFnRSxDQUFBO1FBS3hGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUE7UUFDdkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsK0JBQXVCLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDckQsQ0FBQztJQUVELGdGQUFnRjtJQUNoRixnRUFBZ0U7SUFDaEUsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUN6RCxJQUFBLGlDQUFvQixFQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQ3ZHLENBQUE7SUFDSCxDQUFDO0lBRUQsaUZBQWlGO0lBQ2pGLHFCQUFxQixDQUFDLFVBQWtCO1FBQ3RD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
267
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWdyYXRpb24tbW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvaW50ZWdyYXRpb24vc2VydmljZXMvaW50ZWdyYXRpb24tbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscURBQXlEO0FBRXpELHdFQUErQztBQUMvQyxxQ0FBb0M7QUFDcEMsdUNBQXNFO0FBQ3RFLGtGQUErRDtBQUUvRCx5REFBb0c7QUFDcEcscURBQTZEO0FBQzdELG9DQUFvSTtBQUNwSSxrREFBa0Q7QUE2QmxELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQTtBQUUzQixNQUFxQix3QkFBeUIsU0FBUSxJQUFBLHFCQUFhLEVBQUM7SUFDbEUsV0FBVyxFQUFYLHFCQUFXO0NBQ1osQ0FBQztJQU9BLFlBQVksSUFBMEI7UUFDcEMsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUE7UUFKWCxXQUFNLEdBQUcsSUFBSSxHQUFHLEVBQWdFLENBQUE7UUFLeEYsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQTtRQUN2RCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQywrQkFBdUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUNuRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxvQ0FBNEIsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUM5RCxDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLGdFQUFnRTtJQUNoRSxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ3pELElBQUEsaUNBQW9CLEVBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMs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
@@ -5,6 +5,17 @@ export declare const IntegrationProviderRegistrationKey = "integration_providers
5
5
  export declare const IntegrationProviderRegistrationPrefix = "int_";
6
6
  /** Container key under which the resolved module options are registered. */
7
7
  export declare const INTEGRATION_OPTIONS_KEY = "integrationModuleOptions";
8
+ /** Container key under which the resolved per-identifier package metadata map is registered. */
9
+ export declare const INTEGRATION_PACKAGE_META_KEY = "integrationPackageMeta";
10
+ /** Resolved npm-package facts for one provider identifier (from its package.json). */
11
+ export type PackageMeta = {
12
+ name: string | null;
13
+ version: string | null;
14
+ author: string | null;
15
+ authorUrl: string | null;
16
+ };
17
+ /** identifier → PackageMeta. Empty when resolution is unavailable. */
18
+ export type PackageMetaMap = Record<string, PackageMeta>;
8
19
  export type IntegrationModuleOptions = {
9
20
  /** Any non-empty secret; SHA-256-derived to a 32-byte AES-256-GCM key. High-entropy recommended (openssl rand -hex 32). */
10
21
  encryptionKey?: string;
@@ -1,10 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.INTEGRATION_OPTIONS_KEY = exports.IntegrationProviderRegistrationPrefix = exports.IntegrationProviderRegistrationKey = void 0;
3
+ exports.INTEGRATION_PACKAGE_META_KEY = exports.INTEGRATION_OPTIONS_KEY = exports.IntegrationProviderRegistrationPrefix = exports.IntegrationProviderRegistrationKey = void 0;
4
4
  /** Awilix list-key under which every registered integration-provider key is collected. */
5
5
  exports.IntegrationProviderRegistrationKey = "integration_providers";
6
6
  /** Prefix for each provider's container registration key: `int_<identifier>[_<id>]`. */
7
7
  exports.IntegrationProviderRegistrationPrefix = "int_";
8
8
  /** Container key under which the resolved module options are registered. */
9
9
  exports.INTEGRATION_OPTIONS_KEY = "integrationModuleOptions";
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9pbnRlZ3JhdGlvbi90eXBlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSwwRkFBMEY7QUFDN0UsUUFBQSxrQ0FBa0MsR0FBRyx1QkFBdUIsQ0FBQTtBQUV6RSx3RkFBd0Y7QUFDM0UsUUFBQSxxQ0FBcUMsR0FBRyxNQUFNLENBQUE7QUFFM0QsNEVBQTRFO0FBQy9ELFFBQUEsdUJBQXVCLEdBQUcsMEJBQTBCLENBQUEifQ==
10
+ /** Container key under which the resolved per-identifier package metadata map is registered. */
11
+ exports.INTEGRATION_PACKAGE_META_KEY = "integrationPackageMeta";
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9pbnRlZ3JhdGlvbi90eXBlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSwwRkFBMEY7QUFDN0UsUUFBQSxrQ0FBa0MsR0FBRyx1QkFBdUIsQ0FBQTtBQUV6RSx3RkFBd0Y7QUFDM0UsUUFBQSxxQ0FBcUMsR0FBRyxNQUFNLENBQUE7QUFFM0QsNEVBQTRFO0FBQy9ELFFBQUEsdUJBQXVCLEdBQUcsMEJBQTBCLENBQUE7QUFFakUsZ0dBQWdHO0FBQ25GLFFBQUEsNEJBQTRCLEdBQUcsd0JBQXdCLENBQUEifQ==
@@ -1,14 +1,18 @@
1
1
  /** Integration category — which Medusa module a provider configures. */
2
2
  export declare const IntegrationCategory: {
3
3
  readonly PAYMENT: "payment";
4
+ readonly NOTIFICATION: "notification";
4
5
  readonly FULFILLMENT: "fulfillment";
5
- readonly MARKETPLACE: "marketplace";
6
- readonly CRM: "crm";
6
+ readonly SEARCH: "search";
7
+ readonly CONTENT: "content";
8
+ readonly ANALYTICS: "analytics";
9
+ readonly AUTHENTICATION: "authentication";
7
10
  readonly ERP: "erp";
11
+ readonly CRM: "crm";
8
12
  readonly PIM: "pim";
9
- readonly NOTIFICATION: "notification";
13
+ readonly MARKETPLACE: "marketplace";
10
14
  readonly FEED: "feed";
11
- readonly TAX: "tax";
15
+ readonly FILE_PROVIDERS: "file_providers";
12
16
  readonly OTHER: "other";
13
17
  };
14
18
  export type CategoryKind = (typeof IntegrationCategory)[keyof typeof IntegrationCategory];
@@ -4,14 +4,18 @@ exports.IntegrationTestStatus = exports.IntegrationCategory = void 0;
4
4
  /** Integration category — which Medusa module a provider configures. */
5
5
  exports.IntegrationCategory = {
6
6
  PAYMENT: "payment",
7
+ NOTIFICATION: "notification",
7
8
  FULFILLMENT: "fulfillment",
8
- MARKETPLACE: "marketplace",
9
- CRM: "crm",
9
+ SEARCH: "search",
10
+ CONTENT: "content",
11
+ ANALYTICS: "analytics",
12
+ AUTHENTICATION: "authentication",
10
13
  ERP: "erp",
14
+ CRM: "crm",
11
15
  PIM: "pim",
12
- NOTIFICATION: "notification",
16
+ MARKETPLACE: "marketplace",
13
17
  FEED: "feed",
14
- TAX: "tax",
18
+ FILE_PROVIDERS: "file_providers",
15
19
  OTHER: "other",
16
20
  };
17
21
  /** Outcome of a provider's connection test. */
@@ -20,4 +24,4 @@ exports.IntegrationTestStatus = {
20
24
  FAILED: "failed",
21
25
  SKIPPED: "skipped",
22
26
  };
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWdyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9pbnRlZ3JhdGlvbi91dGlscy9pbnRlZ3JhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx3RUFBd0U7QUFDM0QsUUFBQSxtQkFBbUIsR0FBRztJQUNqQyxPQUFPLEVBQUUsU0FBUztJQUNsQixXQUFXLEVBQUUsYUFBYTtJQUMxQixXQUFXLEVBQUUsYUFBYTtJQUMxQixHQUFHLEVBQUUsS0FBSztJQUNWLEdBQUcsRUFBRSxLQUFLO0lBQ1YsR0FBRyxFQUFFLEtBQUs7SUFDVixZQUFZLEVBQUUsY0FBYztJQUM1QixJQUFJLEVBQUUsTUFBTTtJQUNaLEdBQUcsRUFBRSxLQUFLO0lBQ1YsS0FBSyxFQUFFLE9BQU87Q0FDTixDQUFBO0FBR1YsK0NBQStDO0FBQ2xDLFFBQUEscUJBQXFCLEdBQUc7SUFDbkMsTUFBTSxFQUFFLFFBQVE7SUFDaEIsTUFBTSxFQUFFLFFBQVE7SUFDaEIsT0FBTyxFQUFFLFNBQVM7Q0FDVixDQUFBIn0=
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWdyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9pbnRlZ3JhdGlvbi91dGlscy9pbnRlZ3JhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx3RUFBd0U7QUFDM0QsUUFBQSxtQkFBbUIsR0FBRztJQUNqQyxPQUFPLEVBQUUsU0FBUztJQUNsQixZQUFZLEVBQUUsY0FBYztJQUM1QixXQUFXLEVBQUUsYUFBYTtJQUMxQixNQUFNLEVBQUUsUUFBUTtJQUNoQixPQUFPLEVBQUUsU0FBUztJQUNsQixTQUFTLEVBQUUsV0FBVztJQUN0QixjQUFjLEVBQUUsZ0JBQWdCO0lBQ2hDLEdBQUcsRUFBRSxLQUFLO0lBQ1YsR0FBRyxFQUFFLEtBQUs7SUFDVixHQUFHLEVBQUUsS0FBSztJQUNWLFdBQVcsRUFBRSxhQUFhO0lBQzFCLElBQUksRUFBRSxNQUFNO0lBQ1osY0FBYyxFQUFFLGdCQUFnQjtJQUNoQyxLQUFLLEVBQUUsT0FBTztDQUNOLENBQUE7QUFHViwrQ0FBK0M7QUFDbEMsUUFBQSxxQkFBcUIsR0FBRztJQUNuQyxNQUFNLEVBQUUsUUFBUTtJQUNoQixNQUFNLEVBQUUsUUFBUTtJQUNoQixPQUFPLEVBQUUsU0FBUztDQUNWLENBQUEifQ==
@@ -6,8 +6,16 @@ export interface IntegrationOverviewItem {
6
6
  instance_id: string | null;
7
7
  category: CategoryKind;
8
8
  display_name: I18nKey;
9
+ /** Descriptor description (i18n key) — shown in the list's Description column. */
10
+ description?: I18nKey;
9
11
  /** Descriptor icon — any `<img src>` string (data URI / URL / `/static` path). */
10
12
  icon?: string;
13
+ /** Plugin package version (from package.json), or null if unresolved. */
14
+ version: string | null;
15
+ /** Plugin author name (package.json author, else npm-scope-derived), or null. */
16
+ author: string | null;
17
+ /** Author link (package.json author.url / homepage), or null. */
18
+ author_url: string | null;
11
19
  supports_multiple_instances: boolean;
12
20
  has_test_connection: boolean;
13
21
  is_configured: boolean;
@@ -28,3 +36,29 @@ export interface MaskedIntegration {
28
36
  last_test_status: TestStatus | null;
29
37
  values: Record<string, unknown>;
30
38
  }
39
+ /** One integration in the Gorgo catalog (from the live Gorgo API, with an offline yml fallback). */
40
+ export interface CatalogIntegration {
41
+ integrationId: string;
42
+ slug: string;
43
+ npm: string;
44
+ category: string;
45
+ author: string;
46
+ authorLocalized: string;
47
+ label: string;
48
+ shortDescription: string;
49
+ repository: string;
50
+ docsUrl: string;
51
+ /** Config to paste into medusa-config (absent for some providers). */
52
+ configSnippet?: string;
53
+ /** Icon URL (relative to the Gorgo host). */
54
+ icon: string;
55
+ stars: number | null;
56
+ downloads: number | null;
57
+ }
58
+ /** A catalog entry merged with local install state. */
59
+ export interface CatalogItem extends CatalogIntegration {
60
+ /** True when a provider with this `integrationId` is registered in this project. */
61
+ installed: boolean;
62
+ /** The registered `provider_id` when installed, else null. */
63
+ provider_id: string | null;
64
+ }
@@ -1,14 +1,26 @@
1
1
  import type { DeleteResponse } from "@medusajs/framework/types";
2
- import type { IntegrationOverviewItem, MaskedIntegration } from "./entities";
3
- import type { TestConnectionResult, UiDescriptor } from "../../../integration";
2
+ import type { CatalogItem, IntegrationOverviewItem, MaskedIntegration } from "./entities";
3
+ import type { CategoryKind, TestConnectionResult, UiDescriptor } from "../../../integration";
4
4
  export interface AdminIntegrationListResponse {
5
5
  integrations: IntegrationOverviewItem[];
6
+ /** Total items after filtering (pagination total). */
7
+ count: number;
8
+ limit: number;
9
+ offset: number;
10
+ /** Distinct categories across ALL registrations (unfiltered) — drives the tab bar. */
11
+ categories: CategoryKind[];
6
12
  }
7
13
  export interface AdminIntegrationResponse {
8
14
  descriptor?: UiDescriptor;
9
15
  integration: MaskedIntegration | null;
10
16
  /** Whether the stored config passes full validation (all required + cross-section rules). */
11
17
  is_complete: boolean;
18
+ /** Plugin package version (from package.json), or null if unresolved. */
19
+ version: string | null;
20
+ /** Plugin author name (package.json author, else npm-scope-derived), or null. */
21
+ author: string | null;
22
+ /** Author link (package.json author.url / homepage), or null. */
23
+ author_url: string | null;
12
24
  }
13
25
  export interface AdminIntegrationUpsertResponse {
14
26
  integration: MaskedIntegration;
@@ -17,3 +29,6 @@ export interface AdminIntegrationDeleteResponse extends DeleteResponse<"integrat
17
29
  }
18
30
  export interface AdminIntegrationTestResponse extends TestConnectionResult {
19
31
  }
32
+ export interface AdminIntegrationCatalogResponse {
33
+ integrations: CatalogItem[];
34
+ }
@@ -0,0 +1,6 @@
1
+ export type GetResolvedIntegrationOptionsStepInput = {
2
+ identifier: string;
3
+ instance_id?: string | null;
4
+ };
5
+ export declare const getResolvedIntegrationOptionsStepId = "get-resolved-integration-options";
6
+ export declare const getResolvedIntegrationOptionsStep: import("@medusajs/framework/workflows-sdk").StepFunction<GetResolvedIntegrationOptionsStepInput, import("../../../modules/integration/services/integration-module").ResolvedOptions | null>;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getResolvedIntegrationOptionsStep = exports.getResolvedIntegrationOptionsStepId = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const integration_1 = require("../../../modules/integration");
6
+ exports.getResolvedIntegrationOptionsStepId = "get-resolved-integration-options";
7
+ exports.getResolvedIntegrationOptionsStep = (0, workflows_sdk_1.createStep)(exports.getResolvedIntegrationOptionsStepId, async (input, { container }) => {
8
+ const service = container.resolve(integration_1.INTEGRATION_MODULE);
9
+ const resolved = await service.getResolvedOptions(input.identifier, input.instance_id);
10
+ return new workflows_sdk_1.StepResponse(resolved);
11
+ });
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXJlc29sdmVkLWludGVncmF0aW9uLW9wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2ludGVncmF0aW9uL3N0ZXBzL2dldC1yZXNvbHZlZC1pbnRlZ3JhdGlvbi1vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUE0RTtBQUM1RSw4REFBaUU7QUFRcEQsUUFBQSxtQ0FBbUMsR0FBRyxrQ0FBa0MsQ0FBQTtBQUV4RSxRQUFBLGlDQUFpQyxHQUFHLElBQUEsMEJBQVUsRUFDekQsMkNBQW1DLEVBQ25DLEtBQUssRUFBRSxLQUE2QyxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUNyRSxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGdDQUFrQixDQUE2QixDQUFBO0lBQ2pGLE1BQU0sUUFBUSxHQUFHLE1BQU0sT0FBTyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQ3RGLE9BQU8sSUFBSSw0QkFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0FBQ25DLENBQUMsQ0FDRixDQUFBIn0=
@@ -4,3 +4,5 @@ export { emitIntegrationEventStep } from "./emit-integration-event";
4
4
  export { runTestConnectionStep } from "./run-test-connection";
5
5
  export { setIntegrationEnabledStep } from "./set-integration-enabled";
6
6
  export { upsertIntegrationRecordStep } from "./upsert-integration-record";
7
+ export { getResolvedIntegrationOptionsStep, getResolvedIntegrationOptionsStepId, } from "./get-resolved-integration-options";
8
+ export type { GetResolvedIntegrationOptionsStepInput } from "./get-resolved-integration-options";
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.upsertIntegrationRecordStep = exports.setIntegrationEnabledStep = exports.runTestConnectionStep = exports.emitIntegrationEventStep = exports.deleteIntegrationRecordStep = exports.applyIntegrationSectionStep = void 0;
3
+ exports.getResolvedIntegrationOptionsStepId = exports.getResolvedIntegrationOptionsStep = exports.upsertIntegrationRecordStep = exports.setIntegrationEnabledStep = exports.runTestConnectionStep = exports.emitIntegrationEventStep = exports.deleteIntegrationRecordStep = exports.applyIntegrationSectionStep = void 0;
4
4
  var apply_integration_section_1 = require("./apply-integration-section");
5
5
  Object.defineProperty(exports, "applyIntegrationSectionStep", { enumerable: true, get: function () { return apply_integration_section_1.applyIntegrationSectionStep; } });
6
6
  var delete_integration_record_1 = require("./delete-integration-record");
@@ -13,4 +13,7 @@ var set_integration_enabled_1 = require("./set-integration-enabled");
13
13
  Object.defineProperty(exports, "setIntegrationEnabledStep", { enumerable: true, get: function () { return set_integration_enabled_1.setIntegrationEnabledStep; } });
14
14
  var upsert_integration_record_1 = require("./upsert-integration-record");
15
15
  Object.defineProperty(exports, "upsertIntegrationRecordStep", { enumerable: true, get: function () { return upsert_integration_record_1.upsertIntegrationRecordStep; } });
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2ludGVncmF0aW9uL3N0ZXBzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlFQUF5RTtBQUFoRSx3SUFBQSwyQkFBMkIsT0FBQTtBQUNwQyx5RUFBeUU7QUFBaEUsd0lBQUEsMkJBQTJCLE9BQUE7QUFDcEMsbUVBQW1FO0FBQTFELGtJQUFBLHdCQUF3QixPQUFBO0FBQ2pDLDZEQUE2RDtBQUFwRCw0SEFBQSxxQkFBcUIsT0FBQTtBQUM5QixxRUFBcUU7QUFBNUQsb0lBQUEseUJBQXlCLE9BQUE7QUFDbEMseUVBQXlFO0FBQWhFLHdJQUFBLDJCQUEyQixPQUFBIn0=
16
+ var get_resolved_integration_options_1 = require("./get-resolved-integration-options");
17
+ Object.defineProperty(exports, "getResolvedIntegrationOptionsStep", { enumerable: true, get: function () { return get_resolved_integration_options_1.getResolvedIntegrationOptionsStep; } });
18
+ Object.defineProperty(exports, "getResolvedIntegrationOptionsStepId", { enumerable: true, get: function () { return get_resolved_integration_options_1.getResolvedIntegrationOptionsStepId; } });
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2ludGVncmF0aW9uL3N0ZXBzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlFQUF5RTtBQUFoRSx3SUFBQSwyQkFBMkIsT0FBQTtBQUNwQyx5RUFBeUU7QUFBaEUsd0lBQUEsMkJBQTJCLE9BQUE7QUFDcEMsbUVBQW1FO0FBQTFELGtJQUFBLHdCQUF3QixPQUFBO0FBQ2pDLDZEQUE2RDtBQUFwRCw0SEFBQSxxQkFBcUIsT0FBQTtBQUM5QixxRUFBcUU7QUFBNUQsb0lBQUEseUJBQXlCLE9BQUE7QUFDbEMseUVBQXlFO0FBQWhFLHdJQUFBLDJCQUEyQixPQUFBO0FBQ3BDLHVGQUcyQztBQUZ6QyxxSkFBQSxpQ0FBaUMsT0FBQTtBQUNqQyx1SkFBQSxtQ0FBbUMsT0FBQSJ9
@@ -4,7 +4,7 @@ export type SetIntegrationEnabledStepInput = {
4
4
  };
5
5
  export declare const setIntegrationEnabledStep: import("@medusajs/framework/workflows-sdk").StepFunction<SetIntegrationEnabledStepInput, {
6
6
  id: string;
7
- category: "payment" | "fulfillment" | "marketplace" | "crm" | "erp" | "pim" | "notification" | "feed" | "tax" | "other";
7
+ category: "search" | "payment" | "notification" | "fulfillment" | "content" | "analytics" | "authentication" | "erp" | "crm" | "pim" | "marketplace" | "feed" | "file_providers" | "other";
8
8
  provider_id: string;
9
9
  title: string | null;
10
10
  options: Record<string, unknown>;
@@ -0,0 +1,6 @@
1
+ export type GetResolvedIntegrationOptionsWorkflowInput = {
2
+ identifier: string;
3
+ instance_id?: string | null;
4
+ };
5
+ export declare const getResolvedIntegrationOptionsWorkflowId = "get-resolved-integration-options";
6
+ export declare const getResolvedIntegrationOptionsWorkflow: import("@medusajs/framework/workflows-sdk").ReturnWorkflow<GetResolvedIntegrationOptionsWorkflowInput, import("../../..").ResolvedOptions | null, []>;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getResolvedIntegrationOptionsWorkflow = exports.getResolvedIntegrationOptionsWorkflowId = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const steps_1 = require("../steps");
6
+ exports.getResolvedIntegrationOptionsWorkflowId = "get-resolved-integration-options";
7
+ exports.getResolvedIntegrationOptionsWorkflow = (0, workflows_sdk_1.createWorkflow)(exports.getResolvedIntegrationOptionsWorkflowId, (input) => new workflows_sdk_1.WorkflowResponse((0, steps_1.getResolvedIntegrationOptionsStep)(input)));
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXJlc29sdmVkLWludGVncmF0aW9uLW9wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2ludGVncmF0aW9uL3dvcmtmbG93cy9nZXQtcmVzb2x2ZWQtaW50ZWdyYXRpb24tb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFBb0Y7QUFDcEYsb0NBQTREO0FBTy9DLFFBQUEsdUNBQXVDLEdBQUcsa0NBQWtDLENBQUE7QUFFNUUsUUFBQSxxQ0FBcUMsR0FBRyxJQUFBLDhCQUFjLEVBQ2pFLCtDQUF1QyxFQUN2QyxDQUFDLEtBQWlELEVBQUUsRUFBRSxDQUNwRCxJQUFJLGdDQUFnQixDQUFDLElBQUEseUNBQWlDLEVBQUMsS0FBSyxDQUFDLENBQUMsQ0FDakUsQ0FBQSJ9
@@ -2,3 +2,5 @@ export { upsertIntegrationWorkflow } from "./upsert-integration";
2
2
  export { deleteIntegrationWorkflow } from "./delete-integration";
3
3
  export { testIntegrationConnectionWorkflow } from "./test-integration-connection";
4
4
  export { setIntegrationEnabledWorkflow } from "./set-integration-enabled";
5
+ export { getResolvedIntegrationOptionsWorkflow } from "./get-resolved-integration-options";
6
+ export type { GetResolvedIntegrationOptionsWorkflowInput } from "./get-resolved-integration-options";
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.setIntegrationEnabledWorkflow = exports.testIntegrationConnectionWorkflow = exports.deleteIntegrationWorkflow = exports.upsertIntegrationWorkflow = void 0;
3
+ exports.getResolvedIntegrationOptionsWorkflow = exports.setIntegrationEnabledWorkflow = exports.testIntegrationConnectionWorkflow = exports.deleteIntegrationWorkflow = exports.upsertIntegrationWorkflow = void 0;
4
4
  var upsert_integration_1 = require("./upsert-integration");
5
5
  Object.defineProperty(exports, "upsertIntegrationWorkflow", { enumerable: true, get: function () { return upsert_integration_1.upsertIntegrationWorkflow; } });
6
6
  var delete_integration_1 = require("./delete-integration");
@@ -9,4 +9,6 @@ var test_integration_connection_1 = require("./test-integration-connection");
9
9
  Object.defineProperty(exports, "testIntegrationConnectionWorkflow", { enumerable: true, get: function () { return test_integration_connection_1.testIntegrationConnectionWorkflow; } });
10
10
  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
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2ludGVncmF0aW9uL3dvcmtmbG93cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyREFBZ0U7QUFBdkQsK0hBQUEseUJBQXlCLE9BQUE7QUFDbEMsMkRBQWdFO0FBQXZELCtIQUFBLHlCQUF5QixPQUFBO0FBQ2xDLDZFQUFpRjtBQUF4RSxnSkFBQSxpQ0FBaUMsT0FBQTtBQUMxQyxxRUFBeUU7QUFBaEUsd0lBQUEsNkJBQTZCLE9BQUEifQ==
12
+ var get_resolved_integration_options_1 = require("./get-resolved-integration-options");
13
+ Object.defineProperty(exports, "getResolvedIntegrationOptionsWorkflow", { enumerable: true, get: function () { return get_resolved_integration_options_1.getResolvedIntegrationOptionsWorkflow; } });
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2ludGVncmF0aW9uL3dvcmtmbG93cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyREFBZ0U7QUFBdkQsK0hBQUEseUJBQXlCLE9BQUE7QUFDbEMsMkRBQWdFO0FBQXZELCtIQUFBLHlCQUF5QixPQUFBO0FBQ2xDLDZFQUFpRjtBQUF4RSxnSkFBQSxpQ0FBaUMsT0FBQTtBQUMxQyxxRUFBeUU7QUFBaEUsd0lBQUEsNkJBQTZCLE9BQUE7QUFDdEMsdUZBQTBGO0FBQWpGLHlKQUFBLHFDQUFxQyxPQUFBIn0=
@@ -5,7 +5,7 @@ export type SetIntegrationEnabledWorkflowInput = {
5
5
  export declare const setIntegrationEnabledWorkflowId = "set-integration-enabled";
6
6
  export declare const setIntegrationEnabledWorkflow: import("@medusajs/framework/workflows-sdk").ReturnWorkflow<SetIntegrationEnabledWorkflowInput, {
7
7
  id: string;
8
- category: "payment" | "fulfillment" | "marketplace" | "crm" | "erp" | "pim" | "notification" | "feed" | "tax" | "other";
8
+ category: "search" | "payment" | "notification" | "fulfillment" | "content" | "analytics" | "authentication" | "erp" | "crm" | "pim" | "marketplace" | "feed" | "file_providers" | "other";
9
9
  provider_id: string;
10
10
  title: string | null;
11
11
  options: Record<string, unknown>;
package/README.md CHANGED
@@ -3,11 +3,11 @@ Integration Module for Medusa
3
3
  </h1>
4
4
 
5
5
  <p align="center">
6
- <a href="https://docs.gorgojs.com/medusa-plugins/integration">Documentation</a>
6
+ <a href="https://docs.gorgojs.com/integrations/integration">Documentation</a>
7
7
  <br/>
8
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, secrets encrypted at rest.
9
9
  <br/>
10
- <a href="https://github.com/gorgojs/medusa-plugins/blob/HEAD/packages/medusa-integration/README.ru.md">Читать README на русском ↗</a>
10
+ <a href="https://github.com/gorgojs/medusa-integrations/blob/HEAD/packages/modules/integration/README.ru.md">Читать README на русском ↗</a>
11
11
  </p>
12
12
 
13
13
  <br/>
@@ -53,9 +53,9 @@ Plugins need settings — API keys, modes, webhooks. Usually these live in `medu
53
53
 
54
54
  | Provider | Category | `resolve` |
55
55
  |---|---|---|
56
- | [T-Kassa](https://docs.gorgojs.com/medusa-plugins/t-kassa) | `payment` | `@gorgo/medusa-payment-tkassa-v2/providers/integration-tkassa` |
56
+ | [T-Kassa](https://docs.gorgojs.com/integrations/t-kassa) | `payment` | `@gorgo/medusa-payment-tkassa-v2/providers/integration-tkassa` |
57
57
 
58
- Any plugin can ship an integration provider — see the [documentation](https://docs.gorgojs.com/medusa-plugins/integration).
58
+ Any plugin can ship an integration provider — see the [documentation](https://docs.gorgojs.com/integrations/integration).
59
59
 
60
60
  ## 💬 Support & Community
61
61
 
@@ -78,7 +78,7 @@ npm install @gorgo/medusa-integration
78
78
 
79
79
  ## Documentation
80
80
 
81
- The complete installation, configuration, and usage guide is available on the [Gorgo documentation website](https://docs.gorgojs.com/medusa-plugins/integration).
81
+ The complete installation, configuration, and usage guide is available on the [Gorgo documentation website](https://docs.gorgojs.com/integrations/integration).
82
82
 
83
83
  ## License
84
84