@gorgo/medusa-integration 0.0.1 → 0.0.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.
- package/.medusa/server/src/admin/index.js +15 -23
- package/.medusa/server/src/admin/index.mjs +15 -23
- package/.medusa/server/src/api/admin/integrations/_helpers.js +1 -3
- package/.medusa/server/src/jobs/test-integration-connections.js +2 -2
- package/.medusa/server/src/modules/integration/descriptor/__tests__/introspect.unit.spec.js +8 -8
- package/.medusa/server/src/modules/integration/descriptor/__tests__/validate.unit.spec.js +2 -2
- package/.medusa/server/src/modules/integration/descriptor/define.d.ts +9 -3
- package/.medusa/server/src/modules/integration/descriptor/define.js +1 -1
- package/.medusa/server/src/modules/integration/descriptor/introspect.d.ts +1 -1
- package/.medusa/server/src/modules/integration/descriptor/introspect.js +7 -8
- package/.medusa/server/src/modules/integration/loaders/load-providers.js +58 -1
- package/.medusa/server/src/modules/integration/migrations/Migration20260716110756.d.ts +5 -0
- package/.medusa/server/src/modules/integration/migrations/Migration20260716110756.js +16 -0
- package/.medusa/server/src/modules/integration/migrations/Migration20260716132041.d.ts +5 -0
- package/.medusa/server/src/modules/integration/migrations/Migration20260716132041.js +14 -0
- package/.medusa/server/src/modules/integration/models/integration.d.ts +17 -5
- package/.medusa/server/src/modules/integration/models/integration.js +4 -9
- package/.medusa/server/src/modules/integration/services/__tests__/integration-provider.unit.spec.js +19 -18
- package/.medusa/server/src/modules/integration/services/integration-module.d.ts +24 -15
- package/.medusa/server/src/modules/integration/services/integration-module.js +20 -22
- package/.medusa/server/src/modules/integration/services/integration-provider.d.ts +11 -11
- package/.medusa/server/src/modules/integration/services/integration-provider.js +17 -17
- package/.medusa/server/src/modules/integration/utils/abstract-integration-provider.d.ts +8 -11
- package/.medusa/server/src/modules/integration/utils/abstract-integration-provider.js +6 -7
- package/.medusa/server/src/modules/integration/utils/integration.d.ts +21 -0
- package/.medusa/server/src/modules/integration/utils/integration.js +23 -0
- package/.medusa/server/src/types/http/integration/admin/entities.d.ts +2 -5
- package/.medusa/server/src/types/integration/common.d.ts +8 -11
- package/.medusa/server/src/workflows/integration/steps/apply-integration-section.d.ts +0 -1
- package/.medusa/server/src/workflows/integration/steps/apply-integration-section.js +1 -5
- package/.medusa/server/src/workflows/integration/steps/run-test-connection.js +1 -3
- package/.medusa/server/src/workflows/integration/steps/set-integration-enabled.d.ts +1 -4
- package/.medusa/server/src/workflows/integration/steps/upsert-integration-record.d.ts +0 -1
- package/.medusa/server/src/workflows/integration/steps/upsert-integration-record.js +1 -1
- package/.medusa/server/src/workflows/integration/workflows/set-integration-enabled.d.ts +1 -4
- package/.medusa/server/src/workflows/integration/workflows/upsert-integration.js +1 -2
- package/package.json +10 -3
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20260716132041 = void 0;
|
|
4
|
+
const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
|
|
5
|
+
class Migration20260716132041 extends migrations_1.Migration {
|
|
6
|
+
async up() {
|
|
7
|
+
this.addSql(`alter table if exists "integration" drop column if exists "options_version", drop column if exists "last_test_at", drop column if exists "last_test_message";`);
|
|
8
|
+
}
|
|
9
|
+
async down() {
|
|
10
|
+
this.addSql(`alter table if exists "integration" add column if not exists "options_version" integer not null default 1, add column if not exists "last_test_at" timestamptz null, add column if not exists "last_test_message" text null;`);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.Migration20260716132041 = Migration20260716132041;
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjA3MTYxMzIwNDEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9pbnRlZ3JhdGlvbi9taWdyYXRpb25zL01pZ3JhdGlvbjIwMjYwNzE2MTMyMDQxLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlFQUFxRTtBQUVyRSxNQUFhLHVCQUF3QixTQUFRLHNCQUFTO0lBRTNDLEtBQUssQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQywrSkFBK0osQ0FBQyxDQUFDO0lBQy9LLENBQUM7SUFFUSxLQUFLLENBQUMsSUFBSTtRQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLDhOQUE4TixDQUFDLENBQUM7SUFDOU8sQ0FBQztDQUVGO0FBVkQsMERBVUMifQ==
|
|
@@ -1,13 +1,25 @@
|
|
|
1
1
|
declare const Integration: import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
|
|
2
2
|
id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
|
|
3
|
-
module: import("@medusajs/framework/utils").EnumProperty<
|
|
3
|
+
module: import("@medusajs/framework/utils").EnumProperty<{
|
|
4
|
+
readonly PAYMENT: "payment";
|
|
5
|
+
readonly FULFILLMENT: "fulfillment";
|
|
6
|
+
readonly MARKETPLACE: "marketplace";
|
|
7
|
+
readonly CRM: "crm";
|
|
8
|
+
readonly ERP: "erp";
|
|
9
|
+
readonly PIM: "pim";
|
|
10
|
+
readonly NOTIFICATION: "notification";
|
|
11
|
+
readonly FEED: "feed";
|
|
12
|
+
readonly TAX: "tax";
|
|
13
|
+
readonly OTHER: "other";
|
|
14
|
+
}>;
|
|
4
15
|
provider_id: import("@medusajs/framework/utils").TextProperty;
|
|
5
16
|
title: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
6
17
|
options: import("@medusajs/framework/utils").JSONProperty;
|
|
7
|
-
options_version: import("@medusajs/framework/utils").NumberProperty;
|
|
8
18
|
is_enabled: import("@medusajs/framework/utils").BooleanProperty;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
19
|
+
last_test_status: import("@medusajs/framework/utils").NullableModifier<"passed" | "failed" | "skipped", import("@medusajs/framework/utils").EnumProperty<{
|
|
20
|
+
readonly PASSED: "passed";
|
|
21
|
+
readonly FAILED: "failed";
|
|
22
|
+
readonly SKIPPED: "skipped";
|
|
23
|
+
}>>;
|
|
12
24
|
}>, "integration">;
|
|
13
25
|
export default Integration;
|
|
@@ -1,27 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const utils_1 = require("@medusajs/framework/utils");
|
|
4
|
+
const integration_1 = require("../utils/integration");
|
|
4
5
|
const Integration = utils_1.model.define("integration", {
|
|
5
6
|
id: utils_1.model.id({ prefix: "int" }).primaryKey(),
|
|
6
7
|
// Plugin identity
|
|
7
|
-
module: utils_1.model.enum(
|
|
8
|
-
"payment", "fulfillment", "marketplace", "crm", "erp", "pim",
|
|
9
|
-
"notification", "feed", "tax", "other",
|
|
10
|
-
]),
|
|
8
|
+
module: utils_1.model.enum(integration_1.IntegrationModule),
|
|
11
9
|
provider_id: utils_1.model.text(),
|
|
12
10
|
title: utils_1.model.text().nullable(),
|
|
13
11
|
// Integration options (non-secret settings)
|
|
14
12
|
options: utils_1.model.json().default({}),
|
|
15
13
|
// Metadata
|
|
16
|
-
options_version: utils_1.model.number().default(1),
|
|
17
14
|
is_enabled: utils_1.model.boolean().default(true),
|
|
18
|
-
|
|
19
|
-
last_test_status: utils_1.model.enum(["ok", "fail", "skipped"]).nullable(),
|
|
20
|
-
last_test_message: utils_1.model.text().nullable(),
|
|
15
|
+
last_test_status: utils_1.model.enum(integration_1.IntegrationTestStatus).nullable(),
|
|
21
16
|
})
|
|
22
17
|
.indexes([
|
|
23
18
|
{ on: ["provider_id"], unique: true },
|
|
24
19
|
{ on: ["module"] },
|
|
25
20
|
]);
|
|
26
21
|
exports.default = Integration;
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWdyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9pbnRlZ3JhdGlvbi9tb2RlbHMvaW50ZWdyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxREFBaUQ7QUFDakQsc0RBQStFO0FBRS9FLE1BQU0sV0FBVyxHQUFHLGFBQUssQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFO0lBQzlDLEVBQUUsRUFBRSxhQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFO0lBRTVDLGtCQUFrQjtJQUNsQixNQUFNLEVBQUUsYUFBSyxDQUFDLElBQUksQ0FBQywrQkFBaUIsQ0FBQztJQUNyQyxXQUFXLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRTtJQUN6QixLQUFLLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUU5Qiw0Q0FBNEM7SUFDNUMsT0FBTyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO0lBRWpDLFdBQVc7SUFDWCxVQUFVLEVBQUUsYUFBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDekMsZ0JBQWdCLEVBQUUsYUFBSyxDQUFDLElBQUksQ0FBQyxtQ0FBcUIsQ0FBQyxDQUFDLFFBQVEsRUFBRTtDQUMvRCxDQUFDO0tBQ0QsT0FBTyxDQUFDO0lBQ1AsRUFBRSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO0lBQ3JDLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUU7Q0FDbkIsQ0FBQyxDQUFBO0FBRUYsa0JBQWUsV0FBVyxDQUFBIn0=
|
package/.medusa/server/src/modules/integration/services/__tests__/integration-provider.unit.spec.js
CHANGED
|
@@ -5,20 +5,21 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const globals_1 = require("@jest/globals");
|
|
7
7
|
const integration_provider_1 = __importDefault(require("../integration-provider"));
|
|
8
|
-
// Minimal provider stubs — the registry only needs getIdentifier/getInstanceId/
|
|
8
|
+
// Minimal provider stubs — the registry only needs getIdentifier/getInstanceId/descriptor.
|
|
9
9
|
const mkProvider = (identifier, instanceId, withTest = false) => {
|
|
10
10
|
const p = {
|
|
11
11
|
getIdentifier: () => identifier,
|
|
12
12
|
getInstanceId: () => instanceId,
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
get descriptor() {
|
|
14
|
+
return {
|
|
15
|
+
module: "payment",
|
|
16
|
+
displayName: `${identifier}.name`,
|
|
17
|
+
options: {},
|
|
18
|
+
sections: [],
|
|
19
|
+
...(withTest ? { testConnection: async () => ({ status: "passed" }) } : {}),
|
|
20
|
+
};
|
|
21
|
+
},
|
|
19
22
|
};
|
|
20
|
-
if (withTest)
|
|
21
|
-
p.testConnection = async () => ({ status: "ok" });
|
|
22
23
|
return p;
|
|
23
24
|
};
|
|
24
25
|
// Mimics the awilix cradle: container keys are `int_<identifier>[_<id>]`.
|
|
@@ -30,20 +31,20 @@ const makeRegistry = () => new integration_provider_1.default({
|
|
|
30
31
|
integrationModuleOptions: { encryptionKey: "x" },
|
|
31
32
|
});
|
|
32
33
|
(0, globals_1.describe)("IntegrationProviderService (registration identity)", () => {
|
|
33
|
-
(0, globals_1.it)("builds container keys from (
|
|
34
|
+
(0, globals_1.it)("builds container keys from (identifier, instanceId)", () => {
|
|
34
35
|
(0, globals_1.expect)(integration_provider_1.default.key("tkassa")).toBe("int_tkassa");
|
|
35
36
|
(0, globals_1.expect)(integration_provider_1.default.key("tkassa", null)).toBe("int_tkassa");
|
|
36
37
|
(0, globals_1.expect)(integration_provider_1.default.key("ozon", "acct1")).toBe("int_ozon_acct1");
|
|
37
38
|
});
|
|
38
39
|
(0, globals_1.it)("lists registrations with derived identity, ignoring non-provider keys", () => {
|
|
39
40
|
const regs = makeRegistry().listRegistrations();
|
|
40
|
-
(0, globals_1.expect)(regs.map((r) => [r.key, r.
|
|
41
|
+
(0, globals_1.expect)(regs.map((r) => [r.key, r.identifier, r.instanceId]).sort()).toEqual([
|
|
41
42
|
["int_ozon_acct1", "ozon", "acct1"],
|
|
42
43
|
["int_ozon_acct2", "ozon", "acct2"],
|
|
43
44
|
["int_tkassa", "tkassa", null],
|
|
44
45
|
]);
|
|
45
46
|
});
|
|
46
|
-
(0, globals_1.it)("resolves a provider by key and by (
|
|
47
|
+
(0, globals_1.it)("resolves a provider by key and by (identifier, instanceId)", () => {
|
|
47
48
|
const reg = makeRegistry();
|
|
48
49
|
(0, globals_1.expect)(reg.retrieveByKey("int_ozon_acct1").getInstanceId()).toBe("acct1");
|
|
49
50
|
(0, globals_1.expect)(reg.retrieveProvider("ozon", "acct2").getInstanceId()).toBe("acct2");
|
|
@@ -57,9 +58,9 @@ const makeRegistry = () => new integration_provider_1.default({
|
|
|
57
58
|
(0, globals_1.expect)(reg.hasProvider("ozon")).toBe(false); // no null-instance ozon
|
|
58
59
|
(0, globals_1.expect)(reg.hasProvider("ozon", "nope")).toBe(false);
|
|
59
60
|
});
|
|
60
|
-
(0, globals_1.it)("maps a key back to its (
|
|
61
|
+
(0, globals_1.it)("maps a key back to its (identifier, instanceId)", () => {
|
|
61
62
|
(0, globals_1.expect)(makeRegistry().getRegistration("int_ozon_acct2")).toMatchObject({
|
|
62
|
-
|
|
63
|
+
identifier: "ozon",
|
|
63
64
|
instanceId: "acct2",
|
|
64
65
|
});
|
|
65
66
|
(0, globals_1.expect)(makeRegistry().getRegistration("int_unknown")).toBeUndefined();
|
|
@@ -67,11 +68,11 @@ const makeRegistry = () => new integration_provider_1.default({
|
|
|
67
68
|
(0, globals_1.it)("throws on an unknown key", () => {
|
|
68
69
|
(0, globals_1.expect)(() => makeRegistry().retrieveByKey("int_nope")).toThrow(/Unable to retrieve/);
|
|
69
70
|
});
|
|
70
|
-
(0, globals_1.it)("stamps
|
|
71
|
+
(0, globals_1.it)("stamps identifier + instanceId onto each descriptor", () => {
|
|
71
72
|
const ds = makeRegistry().listDescriptors();
|
|
72
73
|
const ozon1 = ds.find((d) => d.instanceId === "acct1");
|
|
73
|
-
(0, globals_1.expect)(ozon1.
|
|
74
|
-
(0, globals_1.expect)(ds.find((d) => d.
|
|
74
|
+
(0, globals_1.expect)(ozon1.identifier).toBe("ozon");
|
|
75
|
+
(0, globals_1.expect)(ds.find((d) => d.identifier === "tkassa").instanceId).toBe(null);
|
|
75
76
|
});
|
|
76
77
|
});
|
|
77
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWdyYXRpb24tcHJvdmlkZXIudW5pdC5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvaW50ZWdyYXRpb24vc2VydmljZXMvX190ZXN0c19fL2ludGVncmF0aW9uLXByb3ZpZGVyLnVuaXQuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDJDQUFvRDtBQUNwRCxtRkFBZ0U7QUFFaEUsMkZBQTJGO0FBQzNGLE1BQU0sVUFBVSxHQUFHLENBQUMsVUFBa0IsRUFBRSxVQUF5QixFQUFFLFFBQVEsR0FBRyxLQUFLLEVBQUUsRUFBRTtJQUNyRixNQUFNLENBQUMsR0FBUTtRQUNiLGFBQWEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxVQUFVO1FBQy9CLGFBQWEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxVQUFVO1FBQy9CLElBQUksVUFBVTtZQUNaLE9BQU87Z0JBQ0wsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLFdBQVcsRUFBRSxHQUFHLFVBQVUsT0FBTztnQkFDakMsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsUUFBUSxFQUFFLEVBQUU7Z0JBQ1osR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQzVFLENBQUE7UUFDSCxDQUFDO0tBQ0YsQ0FBQTtJQUNELE9BQU8sQ0FBQyxDQUFBO0FBQ1YsQ0FBQyxDQUFBO0FBRUQsMEVBQTBFO0FBQzFFLE1BQU0sWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUN4QixJQUFJLDhCQUEwQixDQUFDO0lBQzdCLFVBQVUsRUFBRSxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQztJQUN0QyxjQUFjLEVBQUUsVUFBVSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDO0lBQ2pELGNBQWMsRUFBRSxVQUFVLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztJQUMzQyw4Q0FBOEM7SUFDOUMsd0JBQXdCLEVBQUUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFO0NBQzFDLENBQUMsQ0FBQTtBQUVYLElBQUEsa0JBQVEsRUFBQyxvREFBb0QsRUFBRSxHQUFHLEVBQUU7SUFDbEUsSUFBQSxZQUFFLEVBQUMscURBQXFELEVBQUUsR0FBRyxFQUFFO1FBQzdELElBQUEsZ0JBQU0sRUFBQyw4QkFBMEIsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDbkUsSUFBQSxnQkFBTSxFQUFDLDhCQUEwQixDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDekUsSUFBQSxnQkFBTSxFQUFDLDhCQUEwQixDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtJQUNoRixDQUFDLENBQUMsQ0FBQTtJQUVGLElBQUEsWUFBRSxFQUFDLHVFQUF1RSxFQUFFLEdBQUcsRUFBRTtRQUMvRSxNQUFNLElBQUksR0FBRyxZQUFZLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO1FBQy9DLElBQUEsZ0JBQU0sRUFBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUMxRSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUM7WUFDbkMsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDO1lBQ25DLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUM7U0FDL0IsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFDLENBQUE7SUFFRixJQUFBLFlBQUUsRUFBQyw0REFBNEQsRUFBRSxHQUFHLEVBQUU7UUFDcEUsTUFBTSxHQUFHLEdBQUcsWUFBWSxFQUFFLENBQUE7UUFDMUIsSUFBQSxnQkFBTSxFQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUN6RSxJQUFBLGdCQUFNLEVBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUMzRSxJQUFBLGdCQUFNLEVBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ25FLENBQUMsQ0FBQyxDQUFBO0lBRUYsSUFBQSxZQUFFLEVBQUMsd0NBQXdDLEVBQUUsR0FBRyxFQUFFO1FBQ2hELE1BQU0sR0FBRyxHQUFHLFlBQVksRUFBRSxDQUFBO1FBQzFCLElBQUEsZ0JBQU0sRUFBQyxHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzVDLElBQUEsZ0JBQU0sRUFBQyxHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNsRCxJQUFBLGdCQUFNLEVBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDbkQsSUFBQSxnQkFBTSxFQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUEsQ0FBQyx3QkFBd0I7UUFDcEUsSUFBQSxnQkFBTSxFQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3JELENBQUMsQ0FBQyxDQUFBO0lBRUYsSUFBQSxZQUFFLEVBQUMsaURBQWlELEVBQUUsR0FBRyxFQUFFO1FBQ3pELElBQUEsZ0JBQU0sRUFBQyxZQUFZLEVBQUUsQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztZQUNyRSxVQUFVLEVBQUUsTUFBTTtZQUNsQixVQUFVLEVBQUUsT0FBTztTQUNwQixDQUFDLENBQUE7UUFDRixJQUFBLGdCQUFNLEVBQUMsWUFBWSxFQUFFLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUE7SUFDdkUsQ0FBQyxDQUFDLENBQUE7SUFFRixJQUFBLFlBQUUsRUFBQywwQkFBMEIsRUFBRSxHQUFHLEVBQUU7UUFDbEMsSUFBQSxnQkFBTSxFQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO0lBQ3RGLENBQUMsQ0FBQyxDQUFBO0lBRUYsSUFBQSxZQUFFLEVBQUMscURBQXFELEVBQUUsR0FBRyxFQUFFO1FBQzdELE1BQU0sRUFBRSxHQUFHLFlBQVksRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFBO1FBQzNDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLEtBQUssT0FBTyxDQUFFLENBQUE7UUFDdkQsSUFBQSxnQkFBTSxFQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDckMsSUFBQSxnQkFBTSxFQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLEtBQUssUUFBUSxDQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQzFFLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEifQ==
|
|
@@ -20,15 +20,27 @@ export type ResolvedOptions = {
|
|
|
20
20
|
declare const IntegrationModuleService_base: import("@medusajs/framework/utils").MedusaServiceReturnType<import("@medusajs/framework/utils").ModelConfigurationsToConfigTemplate<{
|
|
21
21
|
readonly Integration: import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
|
|
22
22
|
id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
|
|
23
|
-
module: import("@medusajs/framework/utils").EnumProperty<
|
|
23
|
+
module: import("@medusajs/framework/utils").EnumProperty<{
|
|
24
|
+
readonly PAYMENT: "payment";
|
|
25
|
+
readonly FULFILLMENT: "fulfillment";
|
|
26
|
+
readonly MARKETPLACE: "marketplace";
|
|
27
|
+
readonly CRM: "crm";
|
|
28
|
+
readonly ERP: "erp";
|
|
29
|
+
readonly PIM: "pim";
|
|
30
|
+
readonly NOTIFICATION: "notification";
|
|
31
|
+
readonly FEED: "feed";
|
|
32
|
+
readonly TAX: "tax";
|
|
33
|
+
readonly OTHER: "other";
|
|
34
|
+
}>;
|
|
24
35
|
provider_id: import("@medusajs/framework/utils").TextProperty;
|
|
25
36
|
title: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
26
37
|
options: import("@medusajs/framework/utils").JSONProperty;
|
|
27
|
-
options_version: import("@medusajs/framework/utils").NumberProperty;
|
|
28
38
|
is_enabled: import("@medusajs/framework/utils").BooleanProperty;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
39
|
+
last_test_status: import("@medusajs/framework/utils").NullableModifier<"passed" | "failed" | "skipped", import("@medusajs/framework/utils").EnumProperty<{
|
|
40
|
+
readonly PASSED: "passed";
|
|
41
|
+
readonly FAILED: "failed";
|
|
42
|
+
readonly SKIPPED: "skipped";
|
|
43
|
+
}>>;
|
|
32
44
|
}>, "integration">;
|
|
33
45
|
}>>;
|
|
34
46
|
export default class IntegrationModuleService extends IntegrationModuleService_base {
|
|
@@ -42,7 +54,7 @@ export default class IntegrationModuleService extends IntegrationModuleService_b
|
|
|
42
54
|
constructor(deps: InjectedDependencies);
|
|
43
55
|
/** UI descriptors for every registration (one per instance). */
|
|
44
56
|
listUiDescriptors(): UiDescriptor[];
|
|
45
|
-
/** Stamped descriptor (schema +
|
|
57
|
+
/** Stamped descriptor (schema + identifier/instanceId) for one `provider_id`. */
|
|
46
58
|
getProviderDescriptor(providerId: string): IntegrationDescriptor | undefined;
|
|
47
59
|
/** UI descriptor for one `provider_id` (container key). */
|
|
48
60
|
getProviderUiDescriptor(providerId: string): UiDescriptor | undefined;
|
|
@@ -58,11 +70,8 @@ export default class IntegrationModuleService extends IntegrationModuleService_b
|
|
|
58
70
|
provider_id: string;
|
|
59
71
|
title: string | null;
|
|
60
72
|
options: Record<string, unknown>;
|
|
61
|
-
options_version: number;
|
|
62
73
|
is_enabled: boolean;
|
|
63
|
-
|
|
64
|
-
last_test_status: "ok" | "fail" | "skipped" | null;
|
|
65
|
-
last_test_message: string | null;
|
|
74
|
+
last_test_status: "passed" | "failed" | "skipped" | null;
|
|
66
75
|
created_at: Date;
|
|
67
76
|
updated_at: Date;
|
|
68
77
|
deleted_at: Date | null;
|
|
@@ -87,8 +96,8 @@ export default class IntegrationModuleService extends IntegrationModuleService_b
|
|
|
87
96
|
*/
|
|
88
97
|
listIntegrationsOverview(): Promise<IntegrationOverviewItem[]>;
|
|
89
98
|
/**
|
|
90
|
-
* Run the
|
|
91
|
-
* Delegates to the
|
|
99
|
+
* Run the connection test against the currently-resolved settings.
|
|
100
|
+
* Delegates to the descriptor's `testConnection` (if it declares one).
|
|
92
101
|
*/
|
|
93
102
|
runTestConnection(providerId: string): Promise<TestConnectionResult>;
|
|
94
103
|
/** The configured passphrase (any non-empty string). Throws if missing. */
|
|
@@ -105,9 +114,9 @@ export default class IntegrationModuleService extends IntegrationModuleService_b
|
|
|
105
114
|
/** Clear the resolved-options cache for one `provider_id`, or all when omitted. */
|
|
106
115
|
clearOptionsCache(providerId?: string): void;
|
|
107
116
|
/**
|
|
108
|
-
* Resolve decrypted options for a `(
|
|
109
|
-
* shape) — mapped internally to the `provider_id` key `int_<
|
|
117
|
+
* Resolve decrypted options for a `(identifier, instanceId)` pair (the consumer-facing
|
|
118
|
+
* shape) — mapped internally to the `provider_id` key `int_<identifier>[_<instanceId>]`.
|
|
110
119
|
*/
|
|
111
|
-
getResolvedOptions(
|
|
120
|
+
getResolvedOptions(identifier: string, instanceId?: string | null): Promise<ResolvedOptions | null>;
|
|
112
121
|
}
|
|
113
122
|
export {};
|
|
@@ -24,21 +24,21 @@ class IntegrationModuleService extends (0, utils_1.MedusaService)({
|
|
|
24
24
|
// ── descriptors (sourced from registered integration-providers) ──────────────
|
|
25
25
|
/** UI descriptors for every registration (one per instance). */
|
|
26
26
|
listUiDescriptors() {
|
|
27
|
-
return this.providerService_.listRegistrations().map((r) => (0, introspect_1.introspectDescriptor)({ ...r.provider.
|
|
27
|
+
return this.providerService_.listRegistrations().map((r) => (0, introspect_1.introspectDescriptor)({ ...r.provider.descriptor, identifier: r.identifier, instanceId: r.instanceId }));
|
|
28
28
|
}
|
|
29
|
-
/** Stamped descriptor (schema +
|
|
29
|
+
/** Stamped descriptor (schema + identifier/instanceId) for one `provider_id`. */
|
|
30
30
|
getProviderDescriptor(providerId) {
|
|
31
31
|
const r = this.providerService_.getRegistration(providerId);
|
|
32
32
|
if (!r)
|
|
33
33
|
return undefined;
|
|
34
|
-
return { ...r.provider.
|
|
34
|
+
return { ...r.provider.descriptor, identifier: r.identifier, instanceId: r.instanceId };
|
|
35
35
|
}
|
|
36
36
|
/** UI descriptor for one `provider_id` (container key). */
|
|
37
37
|
getProviderUiDescriptor(providerId) {
|
|
38
38
|
const r = this.providerService_.getRegistration(providerId);
|
|
39
39
|
if (!r)
|
|
40
40
|
return undefined;
|
|
41
|
-
return (0, introspect_1.introspectDescriptor)({ ...r.provider.
|
|
41
|
+
return (0, introspect_1.introspectDescriptor)({ ...r.provider.descriptor, identifier: r.identifier, instanceId: r.instanceId });
|
|
42
42
|
}
|
|
43
43
|
/** Whether a provider is registered under this `provider_id` (container key). */
|
|
44
44
|
hasProviderId(providerId) {
|
|
@@ -90,28 +90,27 @@ class IntegrationModuleService extends (0, utils_1.MedusaService)({
|
|
|
90
90
|
const rows = await this.listIntegrations({}, { take: 1000 });
|
|
91
91
|
const byId = new Map(rows.map((r) => [r.provider_id, r]));
|
|
92
92
|
return regs.map((r) => {
|
|
93
|
-
const d = r.provider.
|
|
93
|
+
const d = r.provider.descriptor;
|
|
94
94
|
const row = byId.get(r.key);
|
|
95
95
|
return {
|
|
96
96
|
provider_id: r.key,
|
|
97
|
-
|
|
97
|
+
identifier: r.identifier,
|
|
98
98
|
instance_id: r.instanceId,
|
|
99
99
|
module: d.module,
|
|
100
100
|
display_name: d.displayName,
|
|
101
101
|
icon: d.icon,
|
|
102
102
|
supports_multiple_instances: d.supportsMultipleInstances ?? false,
|
|
103
|
-
has_test_connection: typeof
|
|
103
|
+
has_test_connection: typeof d.testConnection === "function",
|
|
104
104
|
is_configured: !!row,
|
|
105
105
|
is_enabled: row?.is_enabled ?? false,
|
|
106
106
|
is_complete: row ? this.isComplete(row) : false,
|
|
107
107
|
last_test_status: row?.last_test_status ?? null,
|
|
108
|
-
last_test_at: row?.last_test_at ?? null,
|
|
109
108
|
};
|
|
110
109
|
});
|
|
111
110
|
}
|
|
112
111
|
/**
|
|
113
|
-
* Run the
|
|
114
|
-
* Delegates to the
|
|
112
|
+
* Run the connection test against the currently-resolved settings.
|
|
113
|
+
* Delegates to the descriptor's `testConnection` (if it declares one).
|
|
115
114
|
*/
|
|
116
115
|
async runTestConnection(providerId) {
|
|
117
116
|
let provider;
|
|
@@ -119,22 +118,21 @@ class IntegrationModuleService extends (0, utils_1.MedusaService)({
|
|
|
119
118
|
provider = this.providerService_.retrieveByKey(providerId);
|
|
120
119
|
}
|
|
121
120
|
catch {
|
|
122
|
-
return { status: "
|
|
121
|
+
return { status: "failed", message: `Unknown integration provider "${providerId}"` };
|
|
123
122
|
}
|
|
124
|
-
|
|
123
|
+
const testConnection = provider.descriptor.testConnection;
|
|
124
|
+
if (!testConnection) {
|
|
125
125
|
return { status: "skipped", message: "No test configured" };
|
|
126
126
|
}
|
|
127
127
|
const resolved = await this.getResolvedOptions(provider.getIdentifier(), provider.getInstanceId());
|
|
128
128
|
if (!resolved) {
|
|
129
|
-
return { status: "
|
|
129
|
+
return { status: "failed", message: "Not configured" };
|
|
130
130
|
}
|
|
131
131
|
try {
|
|
132
|
-
return await
|
|
133
|
-
options: resolved.options,
|
|
134
|
-
});
|
|
132
|
+
return await testConnection({ options: resolved.options });
|
|
135
133
|
}
|
|
136
134
|
catch (e) {
|
|
137
|
-
return { status: "
|
|
135
|
+
return { status: "failed", message: e?.message ?? "Test failed" };
|
|
138
136
|
}
|
|
139
137
|
}
|
|
140
138
|
// ── encryption ───────────────────────────────────────────────────────────────
|
|
@@ -175,11 +173,11 @@ class IntegrationModuleService extends (0, utils_1.MedusaService)({
|
|
|
175
173
|
this.cache_.delete(providerId);
|
|
176
174
|
}
|
|
177
175
|
/**
|
|
178
|
-
* Resolve decrypted options for a `(
|
|
179
|
-
* shape) — mapped internally to the `provider_id` key `int_<
|
|
176
|
+
* Resolve decrypted options for a `(identifier, instanceId)` pair (the consumer-facing
|
|
177
|
+
* shape) — mapped internally to the `provider_id` key `int_<identifier>[_<instanceId>]`.
|
|
180
178
|
*/
|
|
181
|
-
async getResolvedOptions(
|
|
182
|
-
const providerId = integration_provider_1.default.key(
|
|
179
|
+
async getResolvedOptions(identifier, instanceId) {
|
|
180
|
+
const providerId = integration_provider_1.default.key(identifier, instanceId);
|
|
183
181
|
const hit = this.cache_.get(providerId);
|
|
184
182
|
if (hit && hit.expiresAt > Date.now())
|
|
185
183
|
return hit.value;
|
|
@@ -216,4 +214,4 @@ class IntegrationModuleService extends (0, utils_1.MedusaService)({
|
|
|
216
214
|
}
|
|
217
215
|
}
|
|
218
216
|
exports.default = IntegrationModuleService;
|
|
219
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
217
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWdyYXRpb24tbW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvaW50ZWdyYXRpb24vc2VydmljZXMvaW50ZWdyYXRpb24tbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscURBQXlEO0FBRXpELHdFQUErQztBQUMvQyxxQ0FBb0M7QUFDcEMsdUNBQXNFO0FBQ3RFLGtGQUErRDtBQUUvRCx5REFBb0c7QUFDcEcscURBQTZEO0FBQzdELG9DQUFpRjtBQWNqRixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUE7QUFFM0IsTUFBcUIsd0JBQXlCLFNBQVEsSUFBQSxxQkFBYSxFQUFDO0lBQ2xFLFdBQVcsRUFBWCxxQkFBVztDQUNaLENBQUM7SUFNQSxZQUFZLElBQTBCO1FBQ3BDLEtBQUssQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFBO1FBSlgsV0FBTSxHQUFHLElBQUksR0FBRyxFQUFnRSxDQUFBO1FBS3hGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUE7UUFDdkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsK0JBQXVCLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDckQsQ0FBQztJQUVELGdGQUFnRjtJQUNoRixnRUFBZ0U7SUFDaEUsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUN6RCxJQUFBLGlDQUFvQixFQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQ3ZHLENBQUE7SUFDSCxDQUFDO0lBRUQsaUZBQWlGO0lBQ2pGLHFCQUFxQixDQUFDLFVBQWtCO1FBQ3RDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDM0QsSUFBSSxDQUFDLENBQUM7WUFBRSxPQUFPLFNBQVMsQ0FBQTtRQUN4QixPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFBO0lBQ3pGLENBQUM7SUFFRCwyREFBMkQ7SUFDM0QsdUJBQXVCLENBQUMsVUFBa0I7UUFDeEMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUMzRCxJQUFJLENBQUMsQ0FBQztZQUFFLE9BQU8sU0FBUyxDQUFBO1FBQ3hCLE9BQU8sSUFBQSxpQ0FBb0IsRUFBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFBO0lBQy9HLENBQUM7SUFFRCxpRkFBaUY7SUFDakYsYUFBYSxDQUFDLFVBQWtCO1FBQzlCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDNUQsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFrQjtRQUN2QyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUN0RixPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLGVBQWUsQ0FBQyxVQUFrQjtRQUN0QyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUN0RCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBQ2xELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsVUFBVSxDQUFDLE1BQVc7UUFDcEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUNqRSxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU8sS0FBSyxDQUFBO1FBQzdCLE9BQU8sSUFBQSwrQkFBb0IsRUFBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQ3RFLENBQUM7SUFFRCx3RkFBd0Y7SUFDOUUsY0FBYyxDQUFDLE1BQVc7UUFDbEMsTUFBTSxPQUFPLEdBQUcsQ0FBRSxNQUFNLENBQUMsT0FBbUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUNuRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ2pFLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBQSw2QkFBZ0IsRUFBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBQ2pFLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUE7UUFDbEQsT0FBTyxJQUFBLDhCQUFvQixFQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7SUFDakUsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyx3QkFBd0I7UUFDNUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixFQUFFLENBQUE7UUFDdEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7UUFDNUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUM5RCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNwQixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQTtZQUMvQixNQUFNLEdBQUcsR0FBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUNoQyxPQUFPO2dCQUNMLFdBQVcsRUFBRSxDQUFDLENBQUMsR0FBRztnQkFDbEIsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVO2dCQUN4QixXQUFXLEVBQUUsQ0FBQyxDQUFDLFVBQVU7Z0JBQ3pCLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTTtnQkFDaEIsWUFBWSxFQUFFLENBQUMsQ0FBQyxXQUFXO2dCQUMzQixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7Z0JBQ1osMkJBQTJCLEVBQUUsQ0FBQyxDQUFDLHlCQUF5QixJQUFJLEtBQUs7Z0JBQ2pFLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxDQUFDLGNBQWMsS0FBSyxVQUFVO2dCQUMzRCxhQUFhLEVBQUUsQ0FBQyxDQUFDLEdBQUc7Z0JBQ3BCLFVBQVUsRUFBRSxHQUFHLEVBQUUsVUFBVSxJQUFJLEtBQUs7Z0JBQ3BDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7Z0JBQy9DLGdCQUFnQixFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsSUFBSSxJQUFJO2FBQ2hELENBQUE7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsaUJBQWlCLENBQUMsVUFBa0I7UUFDeEMsSUFBSSxRQUFRLENBQUE7UUFDWixJQUFJLENBQUM7WUFDSCxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUM1RCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLGlDQUFpQyxVQUFVLEdBQUcsRUFBRSxDQUFBO1FBQ3RGLENBQUM7UUFDRCxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQTtRQUN6RCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDcEIsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLENBQUE7UUFDN0QsQ0FBQztRQUNELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsRUFBRSxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQTtRQUNsRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZCxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQTtRQUN4RCxDQUFDO1FBQ0QsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLGNBQWMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQTtRQUM1RCxDQUFDO1FBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztZQUNoQixPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sSUFBSSxhQUFhLEVBQUUsQ0FBQTtRQUNuRSxDQUFDO0lBQ0gsQ0FBQztJQUVELGdGQUFnRjtJQUNoRiwyRUFBMkU7SUFDakUsVUFBVTtRQUNsQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQTtRQUN2QyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUM7WUFBRSxPQUFPLEdBQUcsQ0FBQTtRQUNyQyxNQUFNLElBQUksS0FBSyxDQUNiLHVGQUF1RjtZQUNyRiwyRUFBMkUsQ0FDOUUsQ0FBQTtJQUNILENBQUM7SUFFRCxzRUFBc0U7SUFDNUQsTUFBTTtRQUNkLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUEsa0JBQVMsRUFBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ3JELENBQUM7SUFFRCw4RkFBOEY7SUFDOUYsYUFBYSxDQUFDLFVBQWtCO1FBQzlCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUN6RCxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBQSw2QkFBZ0IsRUFBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBQ3ZELENBQUM7SUFFRDs7O09BR0c7SUFDSCxpQkFBaUIsQ0FDZixVQUFpQyxFQUNqQyxNQUErQjtRQUUvQixNQUFNLFVBQVUsR0FBRyxJQUFBLDZCQUFnQixFQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQy9DLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUE7UUFDakQsT0FBTyxJQUFBLDhCQUFvQixFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7SUFDaEUsQ0FBQztJQUVELGdGQUFnRjtJQUNoRixtRkFBbUY7SUFDbkYsaUJBQWlCLENBQUMsVUFBbUI7UUFDbkMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUE7WUFDbkIsT0FBTTtRQUNSLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUNoQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLGtCQUFrQixDQUN0QixVQUFrQixFQUNsQixVQUEwQjtRQUUxQixNQUFNLFVBQVUsR0FBRyw4QkFBMEIsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFBO1FBQ3pFLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQ3ZDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUFFLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQTtRQUV2RCwrRUFBK0U7UUFDL0Usa0ZBQWtGO1FBQ2xGLHlEQUF5RDtRQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQ2IsMkNBQTJDLFVBQVUsS0FBSztnQkFDeEQsK0VBQStFLENBQ2xGLENBQUE7UUFDSCxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUE7UUFFdEQsSUFBSSxLQUFLLEdBQTJCLElBQUksQ0FBQTtRQUN4Qyx1RkFBdUY7UUFDdkYsdUZBQXVGO1FBQ3ZGLDZFQUE2RTtRQUM3RSxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBRSxDQUFBO1lBQzFELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDN0MsSUFBSSxJQUFBLCtCQUFvQixFQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUNoRCxrRUFBa0U7Z0JBQ2xFLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFBO2dCQUM1RCxLQUFLLEdBQUc7b0JBQ04sT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFFLE1BQU0sQ0FBQyxJQUFnQyxDQUFDLENBQUMsQ0FBQyxTQUFTO29CQUM5RSxJQUFJLEVBQUU7d0JBQ0osV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO3dCQUMvQixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sSUFBSSxJQUFJO3dCQUM3QixVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7cUJBQzlCO2lCQUNGLENBQUE7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFlBQVksRUFBRSxDQUFDLENBQUE7UUFDNUUsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0NBQ0Y7QUFsT0QsMkNBa09DIn0=
|
|
@@ -8,7 +8,7 @@ type InjectedDependencies = {
|
|
|
8
8
|
export type ProviderRegistration = {
|
|
9
9
|
/** Container key `int_<identifier>[_<id>]` — the instance's stable identity. */
|
|
10
10
|
key: string;
|
|
11
|
-
|
|
11
|
+
identifier: string;
|
|
12
12
|
instanceId: string | null;
|
|
13
13
|
provider: AbstractIntegrationProvider;
|
|
14
14
|
};
|
|
@@ -16,7 +16,7 @@ export type ProviderRegistration = {
|
|
|
16
16
|
* Thin registry over the integration-providers registered into the module container by
|
|
17
17
|
* `loadProviders`. Each registration in `options.providers` is one instance, identified
|
|
18
18
|
* by its container key `int_<identifier>[_<id>]` — which is also the DB `provider_id`.
|
|
19
|
-
* Instances are declared in medusa-config, not created at runtime. `
|
|
19
|
+
* Instances are declared in medusa-config, not created at runtime. `identifier`/`instanceId`
|
|
20
20
|
* (= `getIdentifier()`/`getInstanceId()`) are derived for descriptors/UI.
|
|
21
21
|
*
|
|
22
22
|
* Intentionally minimal: it locates providers; callers invoke provider methods directly,
|
|
@@ -25,23 +25,23 @@ export type ProviderRegistration = {
|
|
|
25
25
|
export default class IntegrationProviderService {
|
|
26
26
|
protected dependencies_: InjectedDependencies;
|
|
27
27
|
constructor(container: InjectedDependencies);
|
|
28
|
-
/** Build the container key for a `(
|
|
29
|
-
static key(
|
|
28
|
+
/** Build the container key for a `(identifier, instanceId)` pair. */
|
|
29
|
+
static key(identifier: string, instanceId?: string | null): string;
|
|
30
30
|
/** All registered provider instances. */
|
|
31
31
|
listProviders(): AbstractIntegrationProvider[];
|
|
32
|
-
/** Every registration with its derived `(
|
|
32
|
+
/** Every registration with its derived `(identifier, instanceId)` identity. */
|
|
33
33
|
listRegistrations(): ProviderRegistration[];
|
|
34
34
|
/** Resolve a provider by its exact container key. */
|
|
35
35
|
retrieveByKey(key: string): AbstractIntegrationProvider;
|
|
36
|
-
/** Resolve the provider for a `(
|
|
37
|
-
retrieveProvider(
|
|
38
|
-
/** Whether a provider is registered for this `(
|
|
39
|
-
hasProvider(
|
|
40
|
-
/** Resolve `(
|
|
36
|
+
/** Resolve the provider for a `(identifier, instanceId)` pair. */
|
|
37
|
+
retrieveProvider(identifier: string, instanceId?: string | null): AbstractIntegrationProvider;
|
|
38
|
+
/** Whether a provider is registered for this `(identifier, instanceId)` pair. */
|
|
39
|
+
hasProvider(identifier: string, instanceId?: string | null): boolean;
|
|
40
|
+
/** Resolve `(identifier, instanceId)` from a container key, or undefined if unregistered. */
|
|
41
41
|
getRegistration(key: string): ProviderRegistration | undefined;
|
|
42
42
|
/**
|
|
43
43
|
* Descriptors of every registered provider — feeds the introspection/UI pipeline.
|
|
44
|
-
* `
|
|
44
|
+
* `identifier`/`instanceId` are stamped from each registration, so authors never repeat
|
|
45
45
|
* them in the descriptor. One descriptor per registration (one per instance).
|
|
46
46
|
*/
|
|
47
47
|
listDescriptors(): IntegrationDescriptor[];
|
|
@@ -5,7 +5,7 @@ const types_1 = require("../types");
|
|
|
5
5
|
* Thin registry over the integration-providers registered into the module container by
|
|
6
6
|
* `loadProviders`. Each registration in `options.providers` is one instance, identified
|
|
7
7
|
* by its container key `int_<identifier>[_<id>]` — which is also the DB `provider_id`.
|
|
8
|
-
* Instances are declared in medusa-config, not created at runtime. `
|
|
8
|
+
* Instances are declared in medusa-config, not created at runtime. `identifier`/`instanceId`
|
|
9
9
|
* (= `getIdentifier()`/`getInstanceId()`) are derived for descriptors/UI.
|
|
10
10
|
*
|
|
11
11
|
* Intentionally minimal: it locates providers; callers invoke provider methods directly,
|
|
@@ -15,9 +15,9 @@ class IntegrationProviderService {
|
|
|
15
15
|
constructor(container) {
|
|
16
16
|
this.dependencies_ = container;
|
|
17
17
|
}
|
|
18
|
-
/** Build the container key for a `(
|
|
19
|
-
static key(
|
|
20
|
-
return `${types_1.IntegrationProviderRegistrationPrefix}${
|
|
18
|
+
/** Build the container key for a `(identifier, instanceId)` pair. */
|
|
19
|
+
static key(identifier, instanceId) {
|
|
20
|
+
return `${types_1.IntegrationProviderRegistrationPrefix}${identifier}${instanceId ? `_${instanceId}` : ""}`;
|
|
21
21
|
}
|
|
22
22
|
/** All registered provider instances. */
|
|
23
23
|
listProviders() {
|
|
@@ -25,7 +25,7 @@ class IntegrationProviderService {
|
|
|
25
25
|
.filter((k) => k.startsWith(types_1.IntegrationProviderRegistrationPrefix))
|
|
26
26
|
.map((k) => this.dependencies_[k]);
|
|
27
27
|
}
|
|
28
|
-
/** Every registration with its derived `(
|
|
28
|
+
/** Every registration with its derived `(identifier, instanceId)` identity. */
|
|
29
29
|
listRegistrations() {
|
|
30
30
|
return Object.keys(this.dependencies_)
|
|
31
31
|
.filter((k) => k.startsWith(types_1.IntegrationProviderRegistrationPrefix))
|
|
@@ -33,7 +33,7 @@ class IntegrationProviderService {
|
|
|
33
33
|
const provider = this.dependencies_[k];
|
|
34
34
|
return {
|
|
35
35
|
key: k,
|
|
36
|
-
|
|
36
|
+
identifier: provider.getIdentifier(),
|
|
37
37
|
instanceId: provider.getInstanceId(),
|
|
38
38
|
provider,
|
|
39
39
|
};
|
|
@@ -47,30 +47,30 @@ class IntegrationProviderService {
|
|
|
47
47
|
}
|
|
48
48
|
return provider;
|
|
49
49
|
}
|
|
50
|
-
/** Resolve the provider for a `(
|
|
51
|
-
retrieveProvider(
|
|
52
|
-
return this.retrieveByKey(IntegrationProviderService.key(
|
|
50
|
+
/** Resolve the provider for a `(identifier, instanceId)` pair. */
|
|
51
|
+
retrieveProvider(identifier, instanceId) {
|
|
52
|
+
return this.retrieveByKey(IntegrationProviderService.key(identifier, instanceId));
|
|
53
53
|
}
|
|
54
|
-
/** Whether a provider is registered for this `(
|
|
55
|
-
hasProvider(
|
|
56
|
-
return !!this.dependencies_[IntegrationProviderService.key(
|
|
54
|
+
/** Whether a provider is registered for this `(identifier, instanceId)` pair. */
|
|
55
|
+
hasProvider(identifier, instanceId) {
|
|
56
|
+
return !!this.dependencies_[IntegrationProviderService.key(identifier, instanceId)];
|
|
57
57
|
}
|
|
58
|
-
/** Resolve `(
|
|
58
|
+
/** Resolve `(identifier, instanceId)` from a container key, or undefined if unregistered. */
|
|
59
59
|
getRegistration(key) {
|
|
60
60
|
return this.listRegistrations().find((r) => r.key === key);
|
|
61
61
|
}
|
|
62
62
|
/**
|
|
63
63
|
* Descriptors of every registered provider — feeds the introspection/UI pipeline.
|
|
64
|
-
* `
|
|
64
|
+
* `identifier`/`instanceId` are stamped from each registration, so authors never repeat
|
|
65
65
|
* them in the descriptor. One descriptor per registration (one per instance).
|
|
66
66
|
*/
|
|
67
67
|
listDescriptors() {
|
|
68
68
|
return this.listRegistrations().map((r) => ({
|
|
69
|
-
...r.provider.
|
|
70
|
-
|
|
69
|
+
...r.provider.descriptor,
|
|
70
|
+
identifier: r.identifier,
|
|
71
71
|
instanceId: r.instanceId,
|
|
72
72
|
}));
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
75
|
exports.default = IntegrationProviderService;
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWdyYXRpb24tcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9pbnRlZ3JhdGlvbi9zZXJ2aWNlcy9pbnRlZ3JhdGlvbi1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLG9DQUFnRTtBQWlCaEU7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBcUIsMEJBQTBCO0lBRzdDLFlBQVksU0FBK0I7UUFDekMsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUE7SUFDaEMsQ0FBQztJQUVELHFFQUFxRTtJQUNyRSxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQWtCLEVBQUUsVUFBMEI7UUFDdkQsT0FBTyxHQUFHLDZDQUFxQyxHQUFHLFVBQVUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFBO0lBQ3JHLENBQUM7SUFFRCx5Q0FBeUM7SUFDekMsYUFBYTtRQUNYLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO2FBQ25DLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyw2Q0FBcUMsQ0FBQyxDQUFDO2FBQ2xFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUErQixDQUFDLENBQUMsQ0FBQTtJQUNwRSxDQUFDO0lBRUQsK0VBQStFO0lBQy9FLGlCQUFpQjtRQUNmLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO2FBQ25DLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyw2Q0FBcUMsQ0FBQyxDQUFDO2FBQ2xFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ1QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUErQixDQUFDLENBQUE7WUFDcEUsT0FBTztnQkFDTCxHQUFHLEVBQUUsQ0FBQztnQkFDTixVQUFVLEVBQUUsUUFBUSxDQUFDLGFBQWEsRUFBRTtnQkFDcEMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxhQUFhLEVBQUU7Z0JBQ3BDLFFBQVE7YUFDVCxDQUFBO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQscURBQXFEO0lBQ3JELGFBQWEsQ0FBQyxHQUFXO1FBQ3ZCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBaUMsQ0FBQyxDQUFBO1FBQ3RFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLE1BQU0sSUFBSSxLQUFLLENBQ2IsNENBQTRDLEdBQUcsc0dBQXNHLENBQ3RKLENBQUE7UUFDSCxDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUE7SUFDakIsQ0FBQztJQUVELGtFQUFrRTtJQUNsRSxnQkFBZ0IsQ0FBQyxVQUFrQixFQUFFLFVBQTBCO1FBQzdELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUE7SUFDbkYsQ0FBQztJQUVELGlGQUFpRjtJQUNqRixXQUFXLENBQUMsVUFBa0IsRUFBRSxVQUEwQjtRQUN4RCxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUN6QiwwQkFBMEIsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBK0IsQ0FDckYsQ0FBQTtJQUNILENBQUM7SUFFRCw2RkFBNkY7SUFDN0YsZUFBZSxDQUFDLEdBQVc7UUFDekIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUE7SUFDNUQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDMUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVU7WUFDeEIsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVO1lBQ3hCLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVTtTQUN6QixDQUFDLENBQUMsQ0FBQTtJQUNMLENBQUM7Q0FDRjtBQTFFRCw2Q0EwRUMifQ==
|
|
@@ -1,19 +1,18 @@
|
|
|
1
|
-
import type { IntegrationDescriptorInput
|
|
1
|
+
import type { IntegrationDescriptorInput } from "../descriptor/define";
|
|
2
2
|
/**
|
|
3
3
|
* Base class AND contract for integration-providers. A plugin ships a subclass and
|
|
4
4
|
* registers it via `ModuleProvider(INTEGRATION_MODULE, { services: [MyProvider] })`.
|
|
5
5
|
*
|
|
6
6
|
* export class TkassaIntegrationProvider extends AbstractIntegrationProvider {
|
|
7
7
|
* static identifier = "tkassa"
|
|
8
|
-
*
|
|
9
|
-
* async testConnection({ credentials }) { ... }
|
|
8
|
+
* get descriptor() { return tkassaDescriptor }
|
|
10
9
|
* }
|
|
11
10
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
11
|
+
* The whole provider contract — options, sections, cross-section `validate` and
|
|
12
|
+
* `testConnection` — is declared in the descriptor (`defineIntegration`); the class only
|
|
13
|
+
* pairs a `static identifier` with that descriptor.
|
|
15
14
|
*
|
|
16
|
-
* `static identifier` becomes the descriptor's `
|
|
15
|
+
* `static identifier` becomes the descriptor's `identifier` (settings are stored/resolved
|
|
17
16
|
* under it); authors don't repeat it in the descriptor.
|
|
18
17
|
*
|
|
19
18
|
* Each registration in `options.providers` is one *instance*: its `id` (if any) is
|
|
@@ -31,9 +30,7 @@ export declare abstract class AbstractIntegrationProvider {
|
|
|
31
30
|
getIdentifier(): string;
|
|
32
31
|
/** This instance's id (the registration `id`), or null for the single/default instance. */
|
|
33
32
|
getInstanceId(): string | null;
|
|
34
|
-
/**
|
|
35
|
-
abstract
|
|
36
|
-
/** Optional connection check; omit if the plugin can't quickly verify credentials. */
|
|
37
|
-
testConnection?(ctx: TestConnectionContext): Promise<TestConnectionResult>;
|
|
33
|
+
/** This plugin's descriptor (options + sections + `validate` + `testConnection`). */
|
|
34
|
+
abstract get descriptor(): IntegrationDescriptorInput;
|
|
38
35
|
}
|
|
39
36
|
export default AbstractIntegrationProvider;
|