@gorgo/medusa-integration 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.medusa/server/src/admin/index.js +519 -106
- package/.medusa/server/src/admin/index.mjs +522 -109
- package/.medusa/server/src/api/admin/integrations/[provider_id]/route.js +7 -2
- package/.medusa/server/src/api/admin/integrations/catalog/route.d.ts +3 -0
- package/.medusa/server/src/api/admin/integrations/catalog/route.js +10 -0
- package/.medusa/server/src/api/admin/integrations/middlewares.js +16 -1
- package/.medusa/server/src/api/admin/integrations/route.js +17 -3
- package/.medusa/server/src/api/admin/integrations/validators.d.ts +7 -0
- package/.medusa/server/src/api/admin/integrations/validators.js +8 -2
- package/.medusa/server/src/jobs/test-integration-connections.js +3 -3
- package/.medusa/server/src/lib/__tests__/catalog-fallback.unit.spec.d.ts +1 -0
- package/.medusa/server/src/lib/__tests__/catalog-fallback.unit.spec.js +37 -0
- package/.medusa/server/src/lib/__tests__/catalog.unit.spec.d.ts +1 -0
- package/.medusa/server/src/lib/__tests__/catalog.unit.spec.js +71 -0
- package/.medusa/server/src/lib/catalog.d.ts +9 -0
- package/.medusa/server/src/lib/catalog.generated.d.ts +2 -0
- package/.medusa/server/src/lib/catalog.generated.js +88 -0
- package/.medusa/server/src/lib/catalog.js +55 -0
- package/.medusa/server/src/modules/integration/loaders/__tests__/package-meta.unit.spec.d.ts +1 -0
- package/.medusa/server/src/modules/integration/loaders/__tests__/package-meta.unit.spec.js +63 -0
- package/.medusa/server/src/modules/integration/loaders/load-providers.js +9 -37
- package/.medusa/server/src/modules/integration/loaders/package-meta.d.ts +22 -0
- package/.medusa/server/src/modules/integration/loaders/package-meta.js +45 -0
- package/.medusa/server/src/modules/integration/loaders/resolve-package-meta.d.ts +8 -0
- package/.medusa/server/src/modules/integration/loaders/resolve-package-meta.js +59 -0
- package/.medusa/server/src/modules/integration/migrations/Migration20260724101525.d.ts +5 -0
- package/.medusa/server/src/modules/integration/migrations/Migration20260724101525.js +16 -0
- package/.medusa/server/src/modules/integration/models/integration.d.ts +8 -4
- package/.medusa/server/src/modules/integration/services/__tests__/integration-module.unit.spec.js +107 -3
- package/.medusa/server/src/modules/integration/services/integration-module.d.ts +46 -9
- package/.medusa/server/src/modules/integration/services/integration-module.js +54 -4
- package/.medusa/server/src/modules/integration/types/index.d.ts +11 -0
- package/.medusa/server/src/modules/integration/types/index.js +4 -2
- package/.medusa/server/src/modules/integration/utils/integration.d.ts +8 -4
- package/.medusa/server/src/modules/integration/utils/integration.js +9 -5
- package/.medusa/server/src/types/http/integration/admin/entities.d.ts +34 -0
- package/.medusa/server/src/types/http/integration/admin/responses.d.ts +17 -2
- package/.medusa/server/src/workflows/integration/steps/set-integration-enabled.d.ts +1 -1
- package/.medusa/server/src/workflows/integration/workflows/set-integration-enabled.d.ts +1 -1
- package/README.md +5 -5
- package/README.ru.md +5 -5
- package/package.json +7 -3
|
@@ -3,12 +3,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const node_path_1 = __importDefault(require("node:path"));
|
|
7
6
|
const awilix_1 = require("@medusajs/framework/awilix");
|
|
8
7
|
const modules_sdk_1 = require("@medusajs/framework/modules-sdk");
|
|
9
8
|
const telemetry_1 = require("@gorgo/telemetry");
|
|
10
9
|
const types_1 = require("../types");
|
|
11
10
|
const integration_provider_1 = __importDefault(require("../services/integration-provider"));
|
|
11
|
+
const resolve_package_meta_1 = require("./resolve-package-meta");
|
|
12
12
|
/**
|
|
13
13
|
* Registers each integration-provider class into the module container under
|
|
14
14
|
* `int_<identifier>[_<id>]`, mirroring how the payment/fulfillment modules load
|
|
@@ -28,47 +28,17 @@ const registrationFn = async (klass, container, pluginOptions) => {
|
|
|
28
28
|
});
|
|
29
29
|
container.registerAdd(types_1.IntegrationProviderRegistrationKey, (0, awilix_1.asValue)(key));
|
|
30
30
|
};
|
|
31
|
-
const trackStarted = async (container,
|
|
31
|
+
const trackStarted = async (container, packageMeta) => {
|
|
32
32
|
try {
|
|
33
33
|
const telemetry = (0, telemetry_1.createTelemetryClient)({ packageDir: __dirname });
|
|
34
|
-
// Map each provider's static identifier → its npm package (name/version), resolved from the
|
|
35
|
-
// `resolve` specifier. identifier↔package is 1:1, so this keys the lookup below no matter
|
|
36
|
-
// how many instances share the same class.
|
|
37
|
-
const pkgByIdentifier = new Map();
|
|
38
|
-
for (const entry of providers) {
|
|
39
|
-
const spec = entry.resolve;
|
|
40
|
-
if (!spec)
|
|
41
|
-
continue;
|
|
42
|
-
try {
|
|
43
|
-
const pkg = await (0, telemetry_1.findPackageJson)(node_path_1.default.dirname(require.resolve(spec)));
|
|
44
|
-
if (!pkg)
|
|
45
|
-
continue;
|
|
46
|
-
const mod = require(spec);
|
|
47
|
-
const services = (mod?.default ?? mod)?.services ?? [];
|
|
48
|
-
for (const svc of services) {
|
|
49
|
-
if (svc?.identifier)
|
|
50
|
-
pkgByIdentifier.set(svc.identifier, pkg);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
catch {
|
|
54
|
-
// a single unresolvable provider must not sink the whole event
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
let machineId = "";
|
|
58
|
-
try {
|
|
59
|
-
machineId = (0, telemetry_1.getMachineId)();
|
|
60
|
-
}
|
|
61
|
-
catch {
|
|
62
|
-
// hash without a salt rather than dropping the event
|
|
63
|
-
}
|
|
64
34
|
const providerService = new integration_provider_1.default(container.cradle);
|
|
65
35
|
const list = providerService.listRegistrations().map((r) => {
|
|
66
|
-
const
|
|
36
|
+
const meta = packageMeta[r.identifier];
|
|
67
37
|
return {
|
|
68
38
|
category: r.provider.descriptor.category,
|
|
69
39
|
id: r.identifier,
|
|
70
|
-
package_name:
|
|
71
|
-
package_version:
|
|
40
|
+
package_name: meta?.name ?? null,
|
|
41
|
+
package_version: meta?.version ?? null,
|
|
72
42
|
};
|
|
73
43
|
});
|
|
74
44
|
telemetry.track("plugin.started", { providers: list, provider_count: list.length });
|
|
@@ -78,8 +48,10 @@ const trackStarted = async (container, providers) => {
|
|
|
78
48
|
}
|
|
79
49
|
};
|
|
80
50
|
exports.default = async ({ container, options, }) => {
|
|
51
|
+
const packageMeta = (0, resolve_package_meta_1.resolvePackageMetaByIdentifier)(options?.providers ?? []);
|
|
81
52
|
container.register({
|
|
82
53
|
[types_1.INTEGRATION_OPTIONS_KEY]: (0, awilix_1.asValue)(options ?? {}),
|
|
54
|
+
[types_1.INTEGRATION_PACKAGE_META_KEY]: (0, awilix_1.asValue)(packageMeta),
|
|
83
55
|
});
|
|
84
56
|
await (0, modules_sdk_1.moduleProviderLoader)({
|
|
85
57
|
container,
|
|
@@ -87,6 +59,6 @@ exports.default = async ({ container, options, }) => {
|
|
|
87
59
|
registerServiceFn: registrationFn,
|
|
88
60
|
});
|
|
89
61
|
// Providers are now registered — announce them (guarded; never throws).
|
|
90
|
-
await trackStarted(container,
|
|
62
|
+
await trackStarted(container, packageMeta);
|
|
91
63
|
};
|
|
92
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC1wcm92aWRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9pbnRlZ3JhdGlvbi9sb2FkZXJzL2xvYWQtcHJvdmlkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsdURBQTBFO0FBQzFFLGlFQUFzRTtBQU10RSxnREFBc0U7QUFDdEUsb0NBTWlCO0FBQ2pCLDRGQUF5RTtBQUN6RSxpRUFBdUU7QUFFdkU7Ozs7OztHQU1HO0FBQ0gsTUFBTSxjQUFjLEdBQUcsS0FBSyxFQUMxQixLQUFVLEVBQ1YsU0FBYyxFQUNkLGFBQWlFLEVBQ2pFLEVBQUU7SUFDRixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQTtJQUMzQyxNQUFNLEdBQUcsR0FBRyxHQUFHLDZDQUFxQyxHQUFHLEtBQUssQ0FBQyxVQUFVLEdBQ3JFLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDbEMsRUFBRSxDQUFBO0lBRUYsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUNqQixtRkFBbUY7UUFDbkYsdUZBQXVGO1FBQ3ZGLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBQSxtQkFBVSxFQUFDLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRTtZQUN2RixRQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsSUFBSSxpQkFBUSxDQUFDLFNBQVM7U0FDaEQsQ0FBQztLQUNILENBQUMsQ0FBQTtJQUVGLFNBQVMsQ0FBQyxXQUFXLENBQUMsMENBQWtDLEVBQUUsSUFBQSxnQkFBTyxFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7QUFDekUsQ0FBQyxDQUFBO0FBU0QsTUFBTSxZQUFZLEdBQUcsS0FBSyxFQUFFLFNBQWMsRUFBRSxXQUEyQixFQUFpQixFQUFFO0lBQ3hGLElBQUksQ0FBQztRQUNILE1BQU0sU0FBUyxHQUFHLElBQUEsaUNBQXFCLEVBQUMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQTtRQUVsRSxNQUFNLGVBQWUsR0FBRyxJQUFJLDhCQUEwQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN4RSxNQUFNLElBQUksR0FBd0IsZUFBZSxDQUFDLGlCQUFpQixFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDOUUsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQTtZQUN0QyxPQUFPO2dCQUNMLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxRQUFRO2dCQUN4QyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFVBQVU7Z0JBQ2hCLFlBQVksRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUk7Z0JBQ2hDLGVBQWUsRUFBRSxJQUFJLEVBQUUsT0FBTyxJQUFJLElBQUk7YUFDdkMsQ0FBQTtRQUNILENBQUMsQ0FBQyxDQUFBO1FBRUYsU0FBUyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFBO0lBQ3JGLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCw2QkFBNkI7SUFDL0IsQ0FBQztBQUNILENBQUMsQ0FBQTtBQUVELGtCQUFlLEtBQUssRUFBRSxFQUNwQixTQUFTLEVBQ1QsT0FBTyxHQU1SLEVBQWlCLEVBQUU7SUFDbEIsTUFBTSxXQUFXLEdBQUcsSUFBQSxxREFBOEIsRUFBQyxPQUFPLEVBQUUsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBRTVFLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFDakIsQ0FBQywrQkFBdUIsQ0FBQyxFQUFFLElBQUEsZ0JBQU8sRUFBQyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ2pELENBQUMsb0NBQTRCLENBQUMsRUFBRSxJQUFBLGdCQUFPLEVBQUMsV0FBVyxDQUFDO0tBQ3JELENBQUMsQ0FBQTtJQUVGLE1BQU0sSUFBQSxrQ0FBb0IsRUFBQztRQUN6QixTQUFTO1FBQ1QsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLElBQUksRUFBRTtRQUNuQyxpQkFBaUIsRUFBRSxjQUFjO0tBQ2xDLENBQUMsQ0FBQTtJQUVGLHdFQUF3RTtJQUN4RSxNQUFNLFlBQVksQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUE7QUFDNUMsQ0FBQyxDQUFBIn0=
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { PackageMeta } from "../types";
|
|
2
|
+
type RawPkg = {
|
|
3
|
+
name?: string;
|
|
4
|
+
version?: string;
|
|
5
|
+
author?: string | {
|
|
6
|
+
name?: string;
|
|
7
|
+
url?: string;
|
|
8
|
+
};
|
|
9
|
+
homepage?: string;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Derive a human author name from an npm scope: "@gorgo/medusa-payment-tkassa" → "Gorgo".
|
|
13
|
+
* Returns null for unscoped/blank names.
|
|
14
|
+
*/
|
|
15
|
+
export declare function authorFromScope(name: string | null | undefined): string | null;
|
|
16
|
+
/**
|
|
17
|
+
* Normalize a raw package.json into the fields the admin list needs. `author` may be a string
|
|
18
|
+
* ("Name <email> (url)") or an object ({ name, url }); when absent, the name is derived from the
|
|
19
|
+
* npm scope. `authorUrl` comes from the author's url, else `homepage`.
|
|
20
|
+
*/
|
|
21
|
+
export declare function parsePackageMeta(pkg: RawPkg): PackageMeta;
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.authorFromScope = authorFromScope;
|
|
4
|
+
exports.parsePackageMeta = parsePackageMeta;
|
|
5
|
+
/** Capitalize the first character ("gorgo" → "Gorgo"). */
|
|
6
|
+
const cap = (s) => (s ? s[0].toUpperCase() + s.slice(1) : s);
|
|
7
|
+
/** Narrow to string, else undefined — guards against non-string JSON-valid shapes. */
|
|
8
|
+
const str = (v) => (typeof v === "string" ? v : undefined);
|
|
9
|
+
/**
|
|
10
|
+
* Derive a human author name from an npm scope: "@gorgo/medusa-payment-tkassa" → "Gorgo".
|
|
11
|
+
* Returns null for unscoped/blank names.
|
|
12
|
+
*/
|
|
13
|
+
function authorFromScope(name) {
|
|
14
|
+
if (!name)
|
|
15
|
+
return null;
|
|
16
|
+
const m = /^@([^/]+)\//.exec(name);
|
|
17
|
+
return m ? cap(m[1]) : null;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Normalize a raw package.json into the fields the admin list needs. `author` may be a string
|
|
21
|
+
* ("Name <email> (url)") or an object ({ name, url }); when absent, the name is derived from the
|
|
22
|
+
* npm scope. `authorUrl` comes from the author's url, else `homepage`.
|
|
23
|
+
*/
|
|
24
|
+
function parsePackageMeta(pkg) {
|
|
25
|
+
const name = str(pkg.name) ?? null;
|
|
26
|
+
const version = str(pkg.version) ?? null;
|
|
27
|
+
let author = null;
|
|
28
|
+
let authorUrl = null;
|
|
29
|
+
if (typeof pkg.author === "string") {
|
|
30
|
+
author = pkg.author.split(/[<(]/)[0].trim() || null;
|
|
31
|
+
const url = /\(([^)]+)\)/.exec(pkg.author)?.[1];
|
|
32
|
+
if (url)
|
|
33
|
+
authorUrl = url.trim();
|
|
34
|
+
}
|
|
35
|
+
else if (pkg.author && typeof pkg.author === "object") {
|
|
36
|
+
author = str(pkg.author.name)?.trim() || null;
|
|
37
|
+
authorUrl = str(pkg.author.url)?.trim() || null;
|
|
38
|
+
}
|
|
39
|
+
if (!author)
|
|
40
|
+
author = authorFromScope(name);
|
|
41
|
+
if (!authorUrl)
|
|
42
|
+
authorUrl = str(pkg.homepage)?.trim() || null;
|
|
43
|
+
return { name, version, author, authorUrl };
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS1tZXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvaW50ZWdyYXRpb24vbG9hZGVycy9wYWNrYWdlLW1ldGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFtQkEsMENBSUM7QUFPRCw0Q0FvQkM7QUF6Q0QsMERBQTBEO0FBQzFELE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBUyxFQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBRTVFLHNGQUFzRjtBQUN0RixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQVUsRUFBc0IsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0FBRXZGOzs7R0FHRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxJQUErQjtJQUM3RCxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sSUFBSSxDQUFBO0lBQ3RCLE1BQU0sQ0FBQyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDbEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO0FBQzdCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQUMsR0FBVztJQUMxQyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQTtJQUNsQyxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQTtJQUV4QyxJQUFJLE1BQU0sR0FBa0IsSUFBSSxDQUFBO0lBQ2hDLElBQUksU0FBUyxHQUFrQixJQUFJLENBQUE7SUFFbkMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDbkMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQTtRQUNuRCxNQUFNLEdBQUcsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQy9DLElBQUksR0FBRztZQUFFLFNBQVMsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDakMsQ0FBQztTQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxPQUFPLEdBQUcsQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDeEQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQTtRQUM3QyxTQUFTLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFBO0lBQ2pELENBQUM7SUFFRCxJQUFJLENBQUMsTUFBTTtRQUFFLE1BQU0sR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDM0MsSUFBSSxDQUFDLFNBQVM7UUFBRSxTQUFTLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUE7SUFFN0QsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFBO0FBQzdDLENBQUMifQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ModuleProvider } from "@medusajs/framework/types";
|
|
2
|
+
import type { PackageMetaMap } from "../types";
|
|
3
|
+
/**
|
|
4
|
+
* Resolve npm-package metadata (version/author/url) per provider `identifier` from each
|
|
5
|
+
* registration's `resolve` specifier. identifier↔package is 1:1, so one lookup keys every
|
|
6
|
+
* instance sharing the class. Best-effort: an unresolvable provider is skipped, never thrown.
|
|
7
|
+
*/
|
|
8
|
+
export declare function resolvePackageMetaByIdentifier(providers: ModuleProvider[]): PackageMetaMap;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.resolvePackageMetaByIdentifier = resolvePackageMetaByIdentifier;
|
|
7
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
8
|
+
const node_fs_1 = require("node:fs");
|
|
9
|
+
const package_meta_1 = require("./package-meta");
|
|
10
|
+
/** Walk up from `startDir` to the nearest package.json that has name + version. */
|
|
11
|
+
function readNearestPackageJson(startDir) {
|
|
12
|
+
let dir = node_path_1.default.resolve(startDir);
|
|
13
|
+
// eslint-disable-next-line no-constant-condition
|
|
14
|
+
while (true) {
|
|
15
|
+
try {
|
|
16
|
+
const raw = (0, node_fs_1.readFileSync)(node_path_1.default.join(dir, "package.json"), "utf-8");
|
|
17
|
+
const pkg = JSON.parse(raw);
|
|
18
|
+
if (pkg?.name && pkg?.version)
|
|
19
|
+
return pkg;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
// keep walking up
|
|
23
|
+
}
|
|
24
|
+
const parent = node_path_1.default.dirname(dir);
|
|
25
|
+
if (parent === dir)
|
|
26
|
+
return null;
|
|
27
|
+
dir = parent;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Resolve npm-package metadata (version/author/url) per provider `identifier` from each
|
|
32
|
+
* registration's `resolve` specifier. identifier↔package is 1:1, so one lookup keys every
|
|
33
|
+
* instance sharing the class. Best-effort: an unresolvable provider is skipped, never thrown.
|
|
34
|
+
*/
|
|
35
|
+
function resolvePackageMetaByIdentifier(providers) {
|
|
36
|
+
const out = {};
|
|
37
|
+
for (const entry of providers) {
|
|
38
|
+
const spec = entry.resolve;
|
|
39
|
+
if (!spec)
|
|
40
|
+
continue;
|
|
41
|
+
try {
|
|
42
|
+
const pkgJson = readNearestPackageJson(node_path_1.default.dirname(require.resolve(spec)));
|
|
43
|
+
if (!pkgJson)
|
|
44
|
+
continue;
|
|
45
|
+
const meta = (0, package_meta_1.parsePackageMeta)(pkgJson);
|
|
46
|
+
const mod = require(spec);
|
|
47
|
+
const services = (mod?.default ?? mod)?.services ?? [];
|
|
48
|
+
for (const svc of services) {
|
|
49
|
+
if (svc?.identifier)
|
|
50
|
+
out[svc.identifier] = meta;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// a single unresolvable provider must not sink the whole map
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return out;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS1wYWNrYWdlLW1ldGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9pbnRlZ3JhdGlvbi9sb2FkZXJzL3Jlc29sdmUtcGFja2FnZS1tZXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBNkJBLHdFQW1CQztBQWhERCwwREFBNEI7QUFDNUIscUNBQXNDO0FBRXRDLGlEQUFpRDtBQUdqRCxtRkFBbUY7QUFDbkYsU0FBUyxzQkFBc0IsQ0FBQyxRQUFnQjtJQUM5QyxJQUFJLEdBQUcsR0FBRyxtQkFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNoQyxpREFBaUQ7SUFDakQsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUNaLElBQUksQ0FBQztZQUNILE1BQU0sR0FBRyxHQUFHLElBQUEsc0JBQVksRUFBQyxtQkFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDakUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUMzQixJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLE9BQU87Z0JBQUUsT0FBTyxHQUFHLENBQUE7UUFDM0MsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLGtCQUFrQjtRQUNwQixDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsbUJBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDaEMsSUFBSSxNQUFNLEtBQUssR0FBRztZQUFFLE9BQU8sSUFBSSxDQUFBO1FBQy9CLEdBQUcsR0FBRyxNQUFNLENBQUE7SUFDZCxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQiw4QkFBOEIsQ0FBQyxTQUEyQjtJQUN4RSxNQUFNLEdBQUcsR0FBbUIsRUFBRSxDQUFBO0lBQzlCLEtBQUssTUFBTSxLQUFLLElBQUksU0FBUyxFQUFFLENBQUM7UUFDOUIsTUFBTSxJQUFJLEdBQUksS0FBOEIsQ0FBQyxPQUFPLENBQUE7UUFDcEQsSUFBSSxDQUFDLElBQUk7WUFBRSxTQUFRO1FBQ25CLElBQUksQ0FBQztZQUNILE1BQU0sT0FBTyxHQUFHLHNCQUFzQixDQUFDLG1CQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQzNFLElBQUksQ0FBQyxPQUFPO2dCQUFFLFNBQVE7WUFDdEIsTUFBTSxJQUFJLEdBQUcsSUFBQSwrQkFBZ0IsRUFBQyxPQUFjLENBQUMsQ0FBQTtZQUM3QyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDekIsTUFBTSxRQUFRLEdBQW1DLENBQUMsR0FBRyxFQUFFLE9BQU8sSUFBSSxHQUFHLENBQUMsRUFBRSxRQUFRLElBQUksRUFBRSxDQUFBO1lBQ3RGLEtBQUssTUFBTSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQzNCLElBQUksR0FBRyxFQUFFLFVBQVU7b0JBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUE7WUFDakQsQ0FBQztRQUNILENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCw2REFBNkQ7UUFDL0QsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQTtBQUNaLENBQUMifQ==
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20260724101525 = void 0;
|
|
4
|
+
const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
|
|
5
|
+
class Migration20260724101525 extends migrations_1.Migration {
|
|
6
|
+
async up() {
|
|
7
|
+
this.addSql(`alter table if exists "integration" drop constraint if exists "integration_category_check";`);
|
|
8
|
+
this.addSql(`alter table if exists "integration" add constraint "integration_category_check" check("category" in ('payment', 'notification', 'fulfillment', 'search', 'content', 'analytics', 'authentication', 'erp', 'crm', 'pim', 'marketplace', 'feed', 'file_providers', 'other'));`);
|
|
9
|
+
}
|
|
10
|
+
async down() {
|
|
11
|
+
this.addSql(`alter table if exists "integration" drop constraint if exists "integration_category_check";`);
|
|
12
|
+
this.addSql(`alter table if exists "integration" add constraint "integration_category_check" check("category" in ('payment', 'fulfillment', 'marketplace', 'crm', 'erp', 'pim', 'notification', 'feed', 'tax', 'other'));`);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.Migration20260724101525 = Migration20260724101525;
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjA3MjQxMDE1MjUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9pbnRlZ3JhdGlvbi9taWdyYXRpb25zL01pZ3JhdGlvbjIwMjYwNzI0MTAxNTI1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlFQUFxRTtBQUVyRSxNQUFhLHVCQUF3QixTQUFRLHNCQUFTO0lBRTNDLEtBQUssQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyw2RkFBNkYsQ0FBQyxDQUFDO1FBRTNHLElBQUksQ0FBQyxNQUFNLENBQUMsNlFBQTZRLENBQUMsQ0FBQztJQUM3UixDQUFDO0lBRVEsS0FBSyxDQUFDLElBQUk7UUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyw2RkFBNkYsQ0FBQyxDQUFDO1FBRTNHLElBQUksQ0FBQyxNQUFNLENBQUMsOE1BQThNLENBQUMsQ0FBQztJQUM5TixDQUFDO0NBRUY7QUFkRCwwREFjQyJ9
|
|
@@ -2,14 +2,18 @@ declare const Integration: import("@medusajs/framework/utils").DmlEntity<import(
|
|
|
2
2
|
id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
|
|
3
3
|
category: import("@medusajs/framework/utils").EnumProperty<{
|
|
4
4
|
readonly PAYMENT: "payment";
|
|
5
|
+
readonly NOTIFICATION: "notification";
|
|
5
6
|
readonly FULFILLMENT: "fulfillment";
|
|
6
|
-
readonly
|
|
7
|
-
readonly
|
|
7
|
+
readonly SEARCH: "search";
|
|
8
|
+
readonly CONTENT: "content";
|
|
9
|
+
readonly ANALYTICS: "analytics";
|
|
10
|
+
readonly AUTHENTICATION: "authentication";
|
|
8
11
|
readonly ERP: "erp";
|
|
12
|
+
readonly CRM: "crm";
|
|
9
13
|
readonly PIM: "pim";
|
|
10
|
-
readonly
|
|
14
|
+
readonly MARKETPLACE: "marketplace";
|
|
11
15
|
readonly FEED: "feed";
|
|
12
|
-
readonly
|
|
16
|
+
readonly FILE_PROVIDERS: "file_providers";
|
|
13
17
|
readonly OTHER: "other";
|
|
14
18
|
}>;
|
|
15
19
|
provider_id: import("@medusajs/framework/utils").TextProperty;
|
package/.medusa/server/src/modules/integration/services/__tests__/integration-module.unit.spec.js
CHANGED
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const globals_1 = require("@jest/globals");
|
|
7
7
|
const integration_module_1 = __importDefault(require("../integration-module"));
|
|
8
8
|
const define_1 = require("../../descriptor/define");
|
|
9
|
+
const catalog_1 = require("../../../../lib/catalog");
|
|
9
10
|
// A representative descriptor: one plain required option, one required secret, one defaulted enum.
|
|
10
11
|
const descriptor = (0, define_1.defineIntegration)({
|
|
11
12
|
category: "payment",
|
|
@@ -45,6 +46,7 @@ function makeService(opts) {
|
|
|
45
46
|
const svc = Object.create(integration_module_1.default.prototype);
|
|
46
47
|
svc.providerService_ = opts?.providerService ?? makeProviderService();
|
|
47
48
|
svc.options_ = opts?.options ?? { encryptionKey: "unit-test-key" };
|
|
49
|
+
svc.packageMeta_ = opts?.packageMeta ?? {};
|
|
48
50
|
svc.cache_ = new Map();
|
|
49
51
|
svc.listIntegrations = globals_1.jest.fn(async (filter = {}) => rows.filter((r) => (filter?.provider_id ? r.provider_id === filter.provider_id : true)));
|
|
50
52
|
svc.createIntegrations = globals_1.jest.fn(async (data) => {
|
|
@@ -214,7 +216,8 @@ function storedRow(svc, values, extra) {
|
|
|
214
216
|
(0, globals_1.describe)("IntegrationModuleService — listIntegrationsOverview", () => {
|
|
215
217
|
(0, globals_1.it)("lists a registered-but-unconfigured provider", async () => {
|
|
216
218
|
const svc = makeService();
|
|
217
|
-
const
|
|
219
|
+
const { integrations } = await svc.listIntegrationsOverview();
|
|
220
|
+
const [item] = integrations;
|
|
218
221
|
(0, globals_1.expect)(item).toMatchObject({
|
|
219
222
|
provider_id: "int_demo",
|
|
220
223
|
identifier: "demo",
|
|
@@ -228,7 +231,8 @@ function storedRow(svc, values, extra) {
|
|
|
228
231
|
(0, globals_1.it)("reflects a configured + complete + enabled row", async () => {
|
|
229
232
|
const svc = makeService();
|
|
230
233
|
svc._rows.push(storedRow(svc, { apiKey: "pub", secretKey: "shh" }, { is_enabled: true, last_test_status: "passed" }));
|
|
231
|
-
const
|
|
234
|
+
const { integrations } = await svc.listIntegrationsOverview();
|
|
235
|
+
const [item] = integrations;
|
|
232
236
|
(0, globals_1.expect)(item).toMatchObject({
|
|
233
237
|
is_configured: true,
|
|
234
238
|
is_enabled: true,
|
|
@@ -236,5 +240,105 @@ function storedRow(svc, values, extra) {
|
|
|
236
240
|
last_test_status: "passed",
|
|
237
241
|
});
|
|
238
242
|
});
|
|
243
|
+
(0, globals_1.it)("includes package meta (version/author/author_url) and descriptor description", async () => {
|
|
244
|
+
const withDesc = (0, define_1.defineIntegration)({
|
|
245
|
+
category: "payment",
|
|
246
|
+
displayName: "d",
|
|
247
|
+
description: "demo.desc",
|
|
248
|
+
options: { apiKey: { type: "string", label: "l" } },
|
|
249
|
+
sections: [{ id: "s", title: "t", options: ["apiKey"] }],
|
|
250
|
+
});
|
|
251
|
+
const reg = {
|
|
252
|
+
key: "int_demo",
|
|
253
|
+
identifier: "demo",
|
|
254
|
+
instanceId: null,
|
|
255
|
+
provider: { descriptor: withDesc, getIdentifier: () => "demo", getInstanceId: () => null },
|
|
256
|
+
};
|
|
257
|
+
const svc = makeService({
|
|
258
|
+
providerService: makeProviderService([reg]),
|
|
259
|
+
packageMeta: { demo: { name: "@gorgo/demo", version: "1.2.3", author: "Gorgo", authorUrl: "https://gorgo.dev" } },
|
|
260
|
+
});
|
|
261
|
+
const { integrations } = await svc.listIntegrationsOverview();
|
|
262
|
+
(0, globals_1.expect)(integrations[0]).toMatchObject({
|
|
263
|
+
description: "demo.desc",
|
|
264
|
+
version: "1.2.3",
|
|
265
|
+
author: "Gorgo",
|
|
266
|
+
author_url: "https://gorgo.dev",
|
|
267
|
+
});
|
|
268
|
+
});
|
|
269
|
+
(0, globals_1.it)("filters by category and reports the unfiltered categories facet", async () => {
|
|
270
|
+
const pay = { key: "int_pay", identifier: "pay", instanceId: null, provider: { descriptor: { category: "payment", displayName: "p" }, getIdentifier: () => "pay", getInstanceId: () => null } };
|
|
271
|
+
const ful = { key: "int_ful", identifier: "ful", instanceId: null, provider: { descriptor: { category: "fulfillment", displayName: "f" }, getIdentifier: () => "ful", getInstanceId: () => null } };
|
|
272
|
+
const svc = makeService({ providerService: makeProviderService([pay, ful]) });
|
|
273
|
+
const res = await svc.listIntegrationsOverview({ category: "payment" });
|
|
274
|
+
(0, globals_1.expect)(res.integrations.map((i) => i.provider_id)).toEqual(["int_pay"]);
|
|
275
|
+
(0, globals_1.expect)(res.count).toBe(1);
|
|
276
|
+
(0, globals_1.expect)(res.categories.sort()).toEqual(["fulfillment", "payment"]);
|
|
277
|
+
});
|
|
278
|
+
(0, globals_1.it)("filters by q on the identifier", async () => {
|
|
279
|
+
const pay = { key: "int_pay", identifier: "pay", instanceId: null, provider: { descriptor: { category: "payment", displayName: "p" }, getIdentifier: () => "pay", getInstanceId: () => null } };
|
|
280
|
+
const ful = { key: "int_ful", identifier: "ful", instanceId: null, provider: { descriptor: { category: "fulfillment", displayName: "f" }, getIdentifier: () => "ful", getInstanceId: () => null } };
|
|
281
|
+
const svc = makeService({ providerService: makeProviderService([pay, ful]) });
|
|
282
|
+
const res = await svc.listIntegrationsOverview({ q: "FUL" });
|
|
283
|
+
(0, globals_1.expect)(res.integrations.map((i) => i.identifier)).toEqual(["ful"]);
|
|
284
|
+
(0, globals_1.expect)(res.count).toBe(1);
|
|
285
|
+
});
|
|
286
|
+
(0, globals_1.it)("paginates via limit/offset while count reflects the full filtered set", async () => {
|
|
287
|
+
const regs = [1, 2, 3].map((n) => ({
|
|
288
|
+
key: `int_p${n}`, identifier: `p${n}`, instanceId: null,
|
|
289
|
+
provider: { descriptor: { category: "payment", displayName: "p" }, getIdentifier: () => `p${n}`, getInstanceId: () => null },
|
|
290
|
+
}));
|
|
291
|
+
const svc = makeService({ providerService: makeProviderService(regs) });
|
|
292
|
+
const res = await svc.listIntegrationsOverview({ limit: 2, offset: 2 });
|
|
293
|
+
(0, globals_1.expect)(res.count).toBe(3);
|
|
294
|
+
(0, globals_1.expect)(res.integrations).toHaveLength(1);
|
|
295
|
+
(0, globals_1.expect)(res.integrations[0].provider_id).toBe("int_p3");
|
|
296
|
+
});
|
|
297
|
+
});
|
|
298
|
+
(0, globals_1.describe)("IntegrationModuleService — getPackageMeta", () => {
|
|
299
|
+
(0, globals_1.it)("maps the injected package meta for a provider_id (by identifier)", () => {
|
|
300
|
+
const svc = makeService({
|
|
301
|
+
packageMeta: { demo: { name: "@gorgo/demo", version: "1.2.3", author: "Gorgo", authorUrl: "https://gorgo.dev" } },
|
|
302
|
+
});
|
|
303
|
+
(0, globals_1.expect)(svc.getPackageMeta("int_demo")).toEqual({
|
|
304
|
+
version: "1.2.3",
|
|
305
|
+
author: "Gorgo",
|
|
306
|
+
author_url: "https://gorgo.dev",
|
|
307
|
+
});
|
|
308
|
+
});
|
|
309
|
+
(0, globals_1.it)("returns nulls when there is no package meta for the provider", () => {
|
|
310
|
+
const svc = makeService();
|
|
311
|
+
(0, globals_1.expect)(svc.getPackageMeta("int_demo")).toEqual({ version: null, author: null, author_url: null });
|
|
312
|
+
});
|
|
313
|
+
(0, globals_1.it)("returns nulls for an unregistered provider_id", () => {
|
|
314
|
+
const svc = makeService({ providerService: makeProviderService([]) });
|
|
315
|
+
(0, globals_1.expect)(svc.getPackageMeta("int_missing")).toEqual({ version: null, author: null, author_url: null });
|
|
316
|
+
});
|
|
317
|
+
});
|
|
318
|
+
(0, globals_1.describe)("IntegrationModuleService — getCatalog", () => {
|
|
319
|
+
const realFetch = global.fetch;
|
|
320
|
+
(0, globals_1.beforeEach)(() => {
|
|
321
|
+
(0, catalog_1.resetCatalogCacheForTests)();
|
|
322
|
+
global.fetch = globals_1.jest.fn().mockRejectedValue(new Error("offline"));
|
|
323
|
+
});
|
|
324
|
+
(0, globals_1.afterEach)(() => {
|
|
325
|
+
global.fetch = realFetch;
|
|
326
|
+
});
|
|
327
|
+
(0, globals_1.it)("marks a catalog entry installed when a provider with that identifier is registered", async () => {
|
|
328
|
+
const reg = {
|
|
329
|
+
key: "int_tkassa", identifier: "tkassa", instanceId: null,
|
|
330
|
+
provider: { descriptor: { category: "payment", displayName: "T" }, getIdentifier: () => "tkassa", getInstanceId: () => null },
|
|
331
|
+
};
|
|
332
|
+
const svc = makeService({ providerService: makeProviderService([reg]) });
|
|
333
|
+
const catalog = await svc.getCatalog();
|
|
334
|
+
(0, globals_1.expect)(catalog.find((c) => c.integrationId === "tkassa")).toMatchObject({ installed: true, provider_id: "int_tkassa" });
|
|
335
|
+
(0, globals_1.expect)(catalog.find((c) => c.integrationId === "1c")).toMatchObject({ installed: false, provider_id: null });
|
|
336
|
+
});
|
|
337
|
+
(0, globals_1.it)("returns the whole catalog with installed=false when nothing matches", async () => {
|
|
338
|
+
const svc = makeService(); // default registration identifier "demo" — no catalog match
|
|
339
|
+
const catalog = await svc.getCatalog();
|
|
340
|
+
(0, globals_1.expect)(catalog.length).toBeGreaterThanOrEqual(5);
|
|
341
|
+
(0, globals_1.expect)(catalog.every((c) => c.installed === false && c.provider_id === null)).toBe(true);
|
|
342
|
+
});
|
|
239
343
|
});
|
|
240
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWdyYXRpb24tbW9kdWxlLnVuaXQuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2ludGVncmF0aW9uL3NlcnZpY2VzL19fdGVzdHNfXy9pbnRlZ3JhdGlvbi1tb2R1bGUudW5pdC5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMkNBQTBEO0FBQzFELCtFQUE0RDtBQUM1RCxvREFBMkQ7QUFFM0QsbUdBQW1HO0FBQ25HLE1BQU0sVUFBVSxHQUFHLElBQUEsMEJBQWlCLEVBQUM7SUFDbkMsUUFBUSxFQUFFLFNBQVM7SUFDbkIsV0FBVyxFQUFFLEdBQUc7SUFDaEIsT0FBTyxFQUFFO1FBQ1AsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtRQUNwRSxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7UUFDckYsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO0tBQzlFO0lBQ0QsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO0lBQ2pGLGNBQWMsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBaUIsRUFBRSxDQUFDO0NBQzVE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
|
|
344
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWdyYXRpb24tbW9kdWxlLnVuaXQuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2ludGVncmF0aW9uL3NlcnZpY2VzL19fdGVzdHNfXy9pbnRlZ3JhdGlvbi1tb2R1bGUudW5pdC5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMkNBQWlGO0FBQ2pGLCtFQUE0RDtBQUM1RCxvREFBMkQ7QUFDM0QscURBQW1FO0FBRW5FLG1HQUFtRztBQUNuRyxNQUFNLFVBQVUsR0FBRyxJQUFBLDBCQUFpQixFQUFDO0lBQ25DLFFBQVEsRUFBRSxTQUFTO0lBQ25CLFdBQVcsRUFBRSxHQUFHO0lBQ2hCLE9BQU8sRUFBRTtRQUNQLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7UUFDcEUsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO1FBQ3JGLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtLQUM5RTtJQUNELFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztJQUNqRixjQUFjLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLFFBQWlCLEVB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
|