@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
|
@@ -11,7 +11,12 @@ const GET = async (req, res) => {
|
|
|
11
11
|
const descriptor = svc.getProviderUiDescriptor(provider_id);
|
|
12
12
|
const record = await svc.findByProviderId(provider_id);
|
|
13
13
|
const is_complete = record ? svc.isComplete(record) : false;
|
|
14
|
-
res.json({
|
|
14
|
+
res.json({
|
|
15
|
+
descriptor,
|
|
16
|
+
integration: record ? (0, _helpers_1.maskedView)(record, svc.getSecretKeys(provider_id)) : null,
|
|
17
|
+
is_complete,
|
|
18
|
+
...svc.getPackageMeta(provider_id),
|
|
19
|
+
});
|
|
15
20
|
};
|
|
16
21
|
exports.GET = GET;
|
|
17
22
|
const POST = async (req, res) => {
|
|
@@ -43,4 +48,4 @@ const DELETE = async (req, res) => {
|
|
|
43
48
|
res.json({ id: provider_id, object: "integration", deleted: true });
|
|
44
49
|
};
|
|
45
50
|
exports.DELETE = DELETE;
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2ludGVncmF0aW9ucy9bcHJvdmlkZXJfaWRdL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLG1FQUF3RztBQUN4RywwQ0FBa0U7QUFRbEUsK0ZBQStGO0FBQ3hGLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFDdEIsR0FBK0IsRUFDL0IsR0FBNkMsRUFDN0MsRUFBRTtJQUNGLE1BQU0sR0FBRyxHQUFHLElBQUEsa0JBQU8sRUFBQyxHQUFHLENBQUMsQ0FBQTtJQUN4QixNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQTtJQUMxQyxJQUFBLDBCQUFlLEVBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBQ2pDLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUMzRCxNQUFNLE1BQU0sR0FBRyxNQUFNLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUN0RCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQTtJQUMzRCxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ1AsVUFBVTtRQUNWLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUEscUJBQVUsRUFBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO1FBQy9FLFdBQVc7UUFDWCxHQUFHLEdBQUcsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDO0tBQ25DLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQTtBQWhCWSxRQUFBLEdBQUcsT0FnQmY7QUFFTSxNQUFNLElBQUksR0FBRyxLQUFLLEVBQ3ZCLEdBQTJELEVBQzNELEdBQW1ELEVBQ25ELEVBQUU7SUFDRixNQUFNLEdBQUcsR0FBRyxJQUFBLGtCQUFPLEVBQUMsR0FBRyxDQUFDLENBQUE7SUFDeEIsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUE7SUFDMUMsSUFBQSwwQkFBZSxFQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUVqQyxzRkFBc0Y7SUFDdEYsMEZBQTBGO0lBQzFGLG9GQUFvRjtJQUNwRixpRUFBaUU7SUFDakUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sSUFBQSx1Q0FBeUIsRUFBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ2hFLEtBQUssRUFBRTtZQUNMLFdBQVc7WUFDWCxVQUFVLEVBQUUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxVQUFVO1lBQ3hDLEtBQUssRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLEtBQUs7WUFDOUIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsTUFBTTtTQUNqQztLQUNGLENBQUMsQ0FBQTtJQUNGLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBQSxxQkFBVSxFQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0FBQy9FLENBQUMsQ0FBQTtBQXJCWSxRQUFBLElBQUksUUFxQmhCO0FBRU0sTUFBTSxNQUFNLEdBQUcsS0FBSyxFQUN6QixHQUErQixFQUMvQixHQUFtRCxFQUNuRCxFQUFFO0lBQ0YsTUFBTSxHQUFHLEdBQUcsSUFBQSxrQkFBTyxFQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3hCLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFBO0lBQzFDLElBQUEsMEJBQWUsRUFBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUE7SUFDakMsTUFBTSxJQUFBLHVDQUF5QixFQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDN0MsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFO0tBQ3ZCLENBQUMsQ0FBQTtJQUNGLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7QUFDckUsQ0FBQyxDQUFBO0FBWFksUUFBQSxNQUFNLFVBV2xCIn0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { AuthenticatedMedusaRequest, MedusaResponse } from "@medusajs/framework/http";
|
|
2
|
+
import type { AdminIntegrationCatalogResponse } from "../../../../types";
|
|
3
|
+
export declare const GET: (req: AuthenticatedMedusaRequest, res: MedusaResponse<AdminIntegrationCatalogResponse>) => Promise<void>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = void 0;
|
|
4
|
+
const _helpers_1 = require("../_helpers");
|
|
5
|
+
const GET = async (req, res) => {
|
|
6
|
+
const svc = (0, _helpers_1.service)(req);
|
|
7
|
+
res.json({ integrations: await svc.getCatalog() });
|
|
8
|
+
};
|
|
9
|
+
exports.GET = GET;
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2ludGVncmF0aW9ucy9jYXRhbG9nL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDBDQUFxQztBQUc5QixNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQ3RCLEdBQStCLEVBQy9CLEdBQW9ELEVBQ3BELEVBQUU7SUFDRixNQUFNLEdBQUcsR0FBRyxJQUFBLGtCQUFPLEVBQUMsR0FBRyxDQUFDLENBQUE7SUFDeEIsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLFlBQVksRUFBRSxNQUFNLEdBQUcsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUE7QUFDcEQsQ0FBQyxDQUFBO0FBTlksUUFBQSxHQUFHLE9BTWYifQ==
|
|
@@ -4,6 +4,21 @@ exports.adminIntegrationRoutesMiddlewares = void 0;
|
|
|
4
4
|
const http_1 = require("@medusajs/framework/http");
|
|
5
5
|
const validators_1 = require("./validators");
|
|
6
6
|
exports.adminIntegrationRoutesMiddlewares = [
|
|
7
|
+
{
|
|
8
|
+
methods: ["GET"],
|
|
9
|
+
matcher: "/admin/integrations",
|
|
10
|
+
// Minimal queryConfig: this endpoint is an in-memory list, not a remote-query entity —
|
|
11
|
+
// we only need `req.validatedQuery`. `entity`/`defaults` are inert here. `as any` mirrors
|
|
12
|
+
// the existing body-validator cast (zod-4 vs the generic's deep instantiation).
|
|
13
|
+
middlewares: [
|
|
14
|
+
(0, http_1.validateAndTransformQuery)(validators_1.AdminGetIntegrationsParams, {
|
|
15
|
+
entity: "integration",
|
|
16
|
+
isList: true,
|
|
17
|
+
defaults: [],
|
|
18
|
+
defaultLimit: 20,
|
|
19
|
+
}),
|
|
20
|
+
],
|
|
21
|
+
},
|
|
7
22
|
{
|
|
8
23
|
methods: ["POST"],
|
|
9
24
|
matcher: "/admin/integrations/:provider_id",
|
|
@@ -18,4 +33,4 @@ exports.adminIntegrationRoutesMiddlewares = [
|
|
|
18
33
|
middlewares: [(0, http_1.validateAndTransformBody)(validators_1.AdminSetIntegrationEnabled)],
|
|
19
34
|
},
|
|
20
35
|
];
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2ludGVncmF0aW9ucy9taWRkbGV3YXJlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFBK0c7QUFDL0csNkNBQTZHO0FBRWhHLFFBQUEsaUNBQWlDLEdBQXNCO0lBQ2xFO1FBQ0UsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDO1FBQ2hCLE9BQU8sRUFBRSxxQkFBcUI7UUFDOUIsdUZBQXVGO1FBQ3ZGLDBGQUEwRjtRQUMxRixnRkFBZ0Y7UUFDaEYsV0FBVyxFQUFFO1lBQ1gsSUFBQSxnQ0FBeUIsRUFBQyx1Q0FBaUMsRUFBRTtnQkFDM0QsTUFBTSxFQUFFLGFBQWE7Z0JBQ3JCLE1BQU0sRUFBRSxJQUFJO2dCQUNaLFFBQVEsRUFBRSxFQUFFO2dCQUNaLFlBQVksRUFBRSxFQUFFO2FBQ1YsQ0FBQztTQUNWO0tBQ0Y7SUFDRDtRQUNFLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUNqQixPQUFPLEVBQUUsa0NBQWtDO1FBQzNDLHNGQUFzRjtRQUN0Rix1RkFBdUY7UUFDdkYsdUZBQXVGO1FBQ3ZGLFdBQVcsRUFBRSxDQUFDLElBQUEsK0JBQXdCLEVBQUMsbUNBQTZCLENBQUMsQ0FBQztLQUN2RTtJQUNEO1FBQ0UsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ2pCLE9BQU8sRUFBRSx5Q0FBeUM7UUFDbEQsV0FBVyxFQUFFLENBQUMsSUFBQSwrQkFBd0IsRUFBQyx1Q0FBaUMsQ0FBQyxDQUFDO0tBQzNFO0NBQ0YsQ0FBQSJ9
|
|
@@ -4,8 +4,22 @@ exports.GET = void 0;
|
|
|
4
4
|
const _helpers_1 = require("./_helpers");
|
|
5
5
|
const GET = async (req, res) => {
|
|
6
6
|
const svc = (0, _helpers_1.service)(req);
|
|
7
|
-
const
|
|
8
|
-
|
|
7
|
+
const { q, category, limit, offset } = (req.validatedQuery ?? {});
|
|
8
|
+
const resolvedLimit = limit ?? 20;
|
|
9
|
+
const resolvedOffset = offset ?? 0;
|
|
10
|
+
const { integrations, count, categories } = await svc.listIntegrationsOverview({
|
|
11
|
+
q,
|
|
12
|
+
category,
|
|
13
|
+
limit: resolvedLimit,
|
|
14
|
+
offset: resolvedOffset,
|
|
15
|
+
});
|
|
16
|
+
res.json({
|
|
17
|
+
integrations,
|
|
18
|
+
count,
|
|
19
|
+
limit: resolvedLimit,
|
|
20
|
+
offset: resolvedOffset,
|
|
21
|
+
categories,
|
|
22
|
+
});
|
|
9
23
|
};
|
|
10
24
|
exports.GET = GET;
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2ludGVncmF0aW9ucy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSx5Q0FBb0M7QUFJN0IsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUN0QixHQUErQixFQUMvQixHQUFpRCxFQUNqRCxFQUFFO0lBQ0YsTUFBTSxHQUFHLEdBQUcsSUFBQSxrQkFBTyxFQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3hCLE1BQU0sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFtQyxDQUFBO0lBQ25HLE1BQU0sYUFBYSxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUE7SUFDakMsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsQ0FBQTtJQUVsQyxNQUFNLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQztRQUM3RSxDQUFDO1FBQ0QsUUFBUTtRQUNSLEtBQUssRUFBRSxhQUFhO1FBQ3BCLE1BQU0sRUFBRSxjQUFjO0tBQ3ZCLENBQUMsQ0FBQTtJQUVGLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDUCxZQUFZO1FBQ1osS0FBSztRQUNMLEtBQUssRUFBRSxhQUFhO1FBQ3BCLE1BQU0sRUFBRSxjQUFjO1FBQ3RCLFVBQVU7S0FDWCxDQUFDLENBQUE7QUFDSixDQUFDLENBQUE7QUF2QlksUUFBQSxHQUFHLE9BdUJmIn0=
|
|
@@ -9,3 +9,10 @@ export type AdminSetIntegrationEnabledType = z.infer<typeof AdminSetIntegrationE
|
|
|
9
9
|
export declare const AdminSetIntegrationEnabled: z.ZodObject<{
|
|
10
10
|
is_enabled: z.ZodBoolean;
|
|
11
11
|
}, z.core.$strip>;
|
|
12
|
+
export type AdminGetIntegrationsParamsType = z.infer<typeof AdminGetIntegrationsParams>;
|
|
13
|
+
export declare const AdminGetIntegrationsParams: z.ZodObject<{
|
|
14
|
+
q: z.ZodOptional<z.ZodString>;
|
|
15
|
+
category: z.ZodOptional<z.ZodString>;
|
|
16
|
+
limit: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
17
|
+
offset: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
18
|
+
}, z.core.$strip>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AdminSetIntegrationEnabled = exports.AdminUpsertIntegration = void 0;
|
|
3
|
+
exports.AdminGetIntegrationsParams = exports.AdminSetIntegrationEnabled = exports.AdminUpsertIntegration = void 0;
|
|
4
4
|
const zod_1 = require("@medusajs/deps/zod");
|
|
5
5
|
exports.AdminUpsertIntegration = zod_1.z.object({
|
|
6
6
|
title: zod_1.z.string().optional(),
|
|
@@ -12,4 +12,10 @@ exports.AdminUpsertIntegration = zod_1.z.object({
|
|
|
12
12
|
exports.AdminSetIntegrationEnabled = zod_1.z.object({
|
|
13
13
|
is_enabled: zod_1.z.boolean(),
|
|
14
14
|
});
|
|
15
|
-
|
|
15
|
+
exports.AdminGetIntegrationsParams = zod_1.z.object({
|
|
16
|
+
q: zod_1.z.string().optional(),
|
|
17
|
+
category: zod_1.z.string().optional(),
|
|
18
|
+
limit: zod_1.z.coerce.number().int().min(1).max(1000).optional(),
|
|
19
|
+
offset: zod_1.z.coerce.number().int().min(0).optional(),
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvYWRtaW4vaW50ZWdyYXRpb25zL3ZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNENBQXNDO0FBR3pCLFFBQUEsc0JBQXNCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM3QyxLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QixvRkFBb0Y7SUFDcEYsd0ZBQXdGO0lBQ3hGLFVBQVUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2pDLE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7Q0FDMUMsQ0FBQyxDQUFBO0FBR1csUUFBQSwwQkFBMEIsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2pELFVBQVUsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFO0NBQ3hCLENBQUMsQ0FBQTtBQUdXLFFBQUEsMEJBQTBCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNqRCxDQUFDLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUN4QixRQUFRLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUMvQixLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUMxRCxNQUFNLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0NBQ2xELENBQUMsQ0FBQSJ9
|
|
@@ -31,8 +31,8 @@ function formatConnectionTestSummary(counts) {
|
|
|
31
31
|
async function testIntegrationConnectionsJob(container) {
|
|
32
32
|
const logger = container.resolve("logger");
|
|
33
33
|
const service = container.resolve(integration_1.INTEGRATION_MODULE);
|
|
34
|
-
const
|
|
35
|
-
const targets =
|
|
34
|
+
const { integrations } = await service.listIntegrationsOverview();
|
|
35
|
+
const targets = integrations.filter((i) => i.is_configured && i.is_enabled && i.has_test_connection);
|
|
36
36
|
if (targets.length === 0) {
|
|
37
37
|
logger.info("[integration] connection-test job: no configured integrations to test");
|
|
38
38
|
return;
|
|
@@ -63,4 +63,4 @@ exports.config = {
|
|
|
63
63
|
// Once a day, off-peak (03:00). Cron: minute hour day-of-month month day-of-week.
|
|
64
64
|
schedule: "0 3 * * *",
|
|
65
65
|
};
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1pbnRlZ3JhdGlvbi1jb25uZWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9qb2JzL3Rlc3QtaW50ZWdyYXRpb24tY29ubmVjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBVUEsc0NBSUM7QUFHRCxrRUFLQztBQVlELGdEQW9DQztBQXJFRCx3REFBMkQ7QUFFM0QsMERBQTRFO0FBTTVFLG1HQUFtRztBQUNuRyxTQUFnQixhQUFhLENBQUMsUUFBK0I7SUFDM0QsTUFBTSxNQUFNLEdBQWtCLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFBO0lBQzlFLEtBQUssTUFBTSxDQUFDLElBQUksUUFBUTtRQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBQ3JDLE9BQU8sTUFBTSxDQUFBO0FBQ2YsQ0FBQztBQUVELDZGQUE2RjtBQUM3RixTQUFnQiwyQkFBMkIsQ0FBQyxNQUFxQjtJQUMvRCxPQUFPLENBQ0wsZ0RBQWdELE1BQU0sQ0FBQyxNQUFNLFdBQVcsTUFBTSxDQUFDLE1BQU0sSUFBSTtRQUN6RixZQUFZLE1BQU0sQ0FBQyxPQUFPLGNBQWMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUN6RCxDQUFBO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNZLEtBQUssVUFBVSw2QkFBNkIsQ0FBQyxTQUEwQjtJQUNwRixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFTLFFBQVEsQ0FBQyxDQUFBO0lBQ2xELE1BQU0sT0FBTyxHQUE2QixTQUFTLENBQUMsT0FBTyxDQUFDLGdDQUFrQixDQUFDLENBQUE7SUFFL0UsTUFBTSxFQUFFLFlBQVksRUFBRSxHQUFHLE1BQU0sT0FBTyxDQUFDLHdCQUF3QixFQUFFLENBQUE7SUFDakUsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FDakMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsbUJBQW1CLENBQ2hFLENBQUE7SUFFRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekIsTUFBTSxDQUFDLElBQUksQ0FBQyx1RUFBdUUsQ0FBQyxDQUFBO1FBQ3BGLE9BQU07SUFDUixDQUFDO0lBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyw4Q0FBOEMsT0FBTyxDQUFDLE1BQU0saUJBQWlCLENBQUMsQ0FBQTtJQUUxRixNQUFNLFFBQVEsR0FBa0IsRUFBRSxDQUFBO0lBRWxDLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sSUFBQSwrQ0FBaUMsRUFBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBQ3hFLEtBQUssRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFO2FBQzNDLENBQUMsQ0FBQTtZQUNGLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQzVCLE1BQU0sSUFBSSxHQUFHLGlCQUFpQixNQUFNLENBQUMsV0FBVyxNQUFNLE1BQU0sQ0FBQyxNQUFNLEdBQ2pFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUMzQyxFQUFFLENBQUE7WUFDRixJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssUUFBUTtnQkFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBOztnQkFDNUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN4QixDQUFDO1FBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztZQUNoQixRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBQ3hCLE1BQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLE1BQU0sQ0FBQyxXQUFXLGtCQUFrQixDQUFDLEVBQUUsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDdEYsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDbkUsQ0FBQztBQUVZLFFBQUEsTUFBTSxHQUFHO0lBQ3BCLElBQUksRUFBRSxvQ0FBb0M7SUFDMUMsa0ZBQWtGO0lBQ2xGLFFBQVEsRUFBRSxXQUFXO0NBQ3RCLENBQUEifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const catalog_generated_1 = require("../catalog.generated");
|
|
4
|
+
describe("FALLBACK_CATALOG (generated from integrations.yml)", () => {
|
|
5
|
+
it("contains all five active integrations", () => {
|
|
6
|
+
expect(catalog_generated_1.FALLBACK_CATALOG).toHaveLength(5);
|
|
7
|
+
const ids = catalog_generated_1.FALLBACK_CATALOG.map((c) => c.integrationId).sort();
|
|
8
|
+
expect(ids).toEqual(["1c", "apiship", "robokassa", "tkassa", "yookassa"]);
|
|
9
|
+
});
|
|
10
|
+
it("flattens the 1c entry to the CatalogIntegration shape", () => {
|
|
11
|
+
const oneC = catalog_generated_1.FALLBACK_CATALOG.find((c) => c.integrationId === "1c");
|
|
12
|
+
expect(oneC).toMatchObject({
|
|
13
|
+
slug: "gorgo-medusa-1c",
|
|
14
|
+
npm: "@gorgo/medusa-1c",
|
|
15
|
+
category: "erp",
|
|
16
|
+
author: "gorgo",
|
|
17
|
+
authorLocalized: "Gorgo",
|
|
18
|
+
label: "1C:Enterprise",
|
|
19
|
+
icon: "/api/plugin-icon?slug=gorgo-medusa-1c",
|
|
20
|
+
stars: null,
|
|
21
|
+
downloads: null,
|
|
22
|
+
});
|
|
23
|
+
expect(oneC.configSnippet).toContain("@gorgo/medusa-1c");
|
|
24
|
+
});
|
|
25
|
+
it("every entry is well-formed", () => {
|
|
26
|
+
for (const c of catalog_generated_1.FALLBACK_CATALOG) {
|
|
27
|
+
expect(typeof c.integrationId).toBe("string");
|
|
28
|
+
expect(c.integrationId.length).toBeGreaterThan(0);
|
|
29
|
+
expect(typeof c.label).toBe("string");
|
|
30
|
+
expect(c.label.length).toBeGreaterThan(0);
|
|
31
|
+
expect(c.icon).toBe(`/api/plugin-icon?slug=${c.slug}`);
|
|
32
|
+
expect(c.stars).toBeNull();
|
|
33
|
+
expect(c.downloads).toBeNull();
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy1mYWxsYmFjay51bml0LnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL19fdGVzdHNfXy9jYXRhbG9nLWZhbGxiYWNrLnVuaXQuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDREQUF1RDtBQUV2RCxRQUFRLENBQUMsb0RBQW9ELEVBQUUsR0FBRyxFQUFFO0lBQ2xFLEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSxHQUFHLEVBQUU7UUFDL0MsTUFBTSxDQUFDLG9DQUFnQixDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3hDLE1BQU0sR0FBRyxHQUFHLG9DQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO1FBQy9ELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQTtJQUMzRSxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyx1REFBdUQsRUFBRSxHQUFHLEVBQUU7UUFDL0QsTUFBTSxJQUFJLEdBQUcsb0NBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBRSxDQUFBO1FBQ3BFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUM7WUFDekIsSUFBSSxFQUFFLGlCQUFpQjtZQUN2QixHQUFHLEVBQUUsa0JBQWtCO1lBQ3ZCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsTUFBTSxFQUFFLE9BQU87WUFDZixlQUFlLEVBQUUsT0FBTztZQUN4QixLQUFLLEVBQUUsZUFBZTtZQUN0QixJQUFJLEVBQUUsdUNBQXVDO1lBQzdDLEtBQUssRUFBRSxJQUFJO1lBQ1gsU0FBUyxFQUFFLElBQUk7U0FDaEIsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtJQUMxRCxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7UUFDcEMsS0FBSyxNQUFNLENBQUMsSUFBSSxvQ0FBZ0IsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDN0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ2pELE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDckMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ3pDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtZQUN0RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFBO1lBQzFCLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUE7UUFDaEMsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const catalog_1 = require("../catalog");
|
|
4
|
+
const catalog_generated_1 = require("../catalog.generated");
|
|
5
|
+
const remoteItem = {
|
|
6
|
+
integrationId: "remote-only",
|
|
7
|
+
slug: "gorgo-remote",
|
|
8
|
+
npm: "@gorgo/remote",
|
|
9
|
+
category: "payment",
|
|
10
|
+
author: "gorgo",
|
|
11
|
+
authorLocalized: "Gorgo",
|
|
12
|
+
label: "Remote Only",
|
|
13
|
+
shortDescription: "from the api",
|
|
14
|
+
repository: "https://example.com",
|
|
15
|
+
docsUrl: "https://example.com/docs",
|
|
16
|
+
icon: "/api/plugin-icon?slug=gorgo-remote",
|
|
17
|
+
stars: 1,
|
|
18
|
+
downloads: null,
|
|
19
|
+
};
|
|
20
|
+
const okResponse = (integrations) => ({
|
|
21
|
+
ok: true,
|
|
22
|
+
status: 200,
|
|
23
|
+
json: async () => ({ integrations }),
|
|
24
|
+
});
|
|
25
|
+
describe("loadCatalog", () => {
|
|
26
|
+
const realFetch = global.fetch;
|
|
27
|
+
beforeEach(() => (0, catalog_1.resetCatalogCacheForTests)());
|
|
28
|
+
afterEach(() => {
|
|
29
|
+
global.fetch = realFetch;
|
|
30
|
+
jest.restoreAllMocks();
|
|
31
|
+
});
|
|
32
|
+
it("returns the remote catalog on success", async () => {
|
|
33
|
+
global.fetch = jest.fn().mockResolvedValue(okResponse([remoteItem]));
|
|
34
|
+
expect(await (0, catalog_1.loadCatalog)()).toEqual([remoteItem]);
|
|
35
|
+
});
|
|
36
|
+
it("caches within the TTL (no second fetch)", async () => {
|
|
37
|
+
const fetchMock = jest.fn().mockResolvedValue(okResponse([remoteItem]));
|
|
38
|
+
global.fetch = fetchMock;
|
|
39
|
+
await (0, catalog_1.loadCatalog)();
|
|
40
|
+
await (0, catalog_1.loadCatalog)();
|
|
41
|
+
expect(fetchMock).toHaveBeenCalledTimes(1);
|
|
42
|
+
});
|
|
43
|
+
it("falls back to FALLBACK_CATALOG when the fetch rejects", async () => {
|
|
44
|
+
global.fetch = jest.fn().mockRejectedValue(new Error("offline"));
|
|
45
|
+
expect(await (0, catalog_1.loadCatalog)()).toBe(catalog_generated_1.FALLBACK_CATALOG);
|
|
46
|
+
});
|
|
47
|
+
it("falls back when the response is not ok", async () => {
|
|
48
|
+
global.fetch = jest
|
|
49
|
+
.fn()
|
|
50
|
+
.mockResolvedValue({ ok: false, status: 500, json: async () => ({}) });
|
|
51
|
+
expect(await (0, catalog_1.loadCatalog)()).toBe(catalog_generated_1.FALLBACK_CATALOG);
|
|
52
|
+
});
|
|
53
|
+
it("falls back when the response shape is invalid", async () => {
|
|
54
|
+
global.fetch = jest.fn().mockResolvedValue(okResponse([{ nope: true }]));
|
|
55
|
+
expect(await (0, catalog_1.loadCatalog)()).toBe(catalog_generated_1.FALLBACK_CATALOG);
|
|
56
|
+
});
|
|
57
|
+
it("serves the last-good cache when a later fetch fails after TTL expiry", async () => {
|
|
58
|
+
const nowSpy = jest.spyOn(Date, "now").mockReturnValue(1_000);
|
|
59
|
+
const fetchMock = jest
|
|
60
|
+
.fn()
|
|
61
|
+
.mockResolvedValueOnce(okResponse([remoteItem]))
|
|
62
|
+
.mockRejectedValue(new Error("offline"));
|
|
63
|
+
global.fetch = fetchMock;
|
|
64
|
+
expect(await (0, catalog_1.loadCatalog)()).toEqual([remoteItem]); // fetch #1 → cached at t=1000
|
|
65
|
+
nowSpy.mockReturnValue(1_000 + 60 * 60 * 1000 + 1); // past the 1h TTL
|
|
66
|
+
const second = await (0, catalog_1.loadCatalog)(); // stale → fetch #2 rejects → last-good, not yml
|
|
67
|
+
expect(second).toEqual([remoteItem]);
|
|
68
|
+
expect(fetchMock).toHaveBeenCalledTimes(2);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy51bml0LnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL19fdGVzdHNfXy9jYXRhbG9nLnVuaXQuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHdDQUFtRTtBQUNuRSw0REFBdUQ7QUFFdkQsTUFBTSxVQUFVLEdBQUc7SUFDakIsYUFBYSxFQUFFLGFBQWE7SUFDNUIsSUFBSSxFQUFFLGNBQWM7SUFDcEIsR0FBRyxFQUFFLGVBQWU7SUFDcEIsUUFBUSxFQUFFLFNBQVM7SUFDbkIsTUFBTSxFQUFFLE9BQU87SUFDZixlQUFlLEVBQUUsT0FBTztJQUN4QixLQUFLLEVBQUUsYUFBYTtJQUNwQixnQkFBZ0IsRUFBRSxjQUFjO0lBQ2hDLFVBQVUsRUFBRSxxQkFBcUI7SUFDakMsT0FBTyxFQUFFLDBCQUEwQjtJQUNuQyxJQUFJLEVBQUUsb0NBQW9DO0lBQzFDLEtBQUssRUFBRSxDQUFDO0lBQ1IsU0FBUyxFQUFFLElBQUk7Q0FDaEIsQ0FBQTtBQUVELE1BQU0sVUFBVSxHQUFHLENBQUMsWUFBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMzQyxFQUFFLEVBQUUsSUFBSTtJQUNSLE1BQU0sRUFBRSxHQUFHO0lBQ1gsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDO0NBQ3JDLENBQUMsQ0FBQTtBQUVGLFFBQVEsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFO0lBQzNCLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUE7SUFDOUIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUEsbUNBQXlCLEdBQUUsQ0FBQyxDQUFBO0lBQzdDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixNQUFNLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQTtRQUN4QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUE7SUFDeEIsQ0FBQyxDQUFDLENB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
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { CatalogIntegration } from "../types";
|
|
2
|
+
/**
|
|
3
|
+
* The Gorgo integration catalog: the live API when reachable (cached ~1h), otherwise the
|
|
4
|
+
* last-good response, otherwise the yml-derived FALLBACK_CATALOG shipped with the plugin.
|
|
5
|
+
* Never throws.
|
|
6
|
+
*/
|
|
7
|
+
export declare function loadCatalog(): Promise<CatalogIntegration[]>;
|
|
8
|
+
/** Test-only: clear the in-memory cache between cases. */
|
|
9
|
+
export declare function resetCatalogCacheForTests(): void;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* eslint-disable */
|
|
3
|
+
// AUTO-GENERATED from src/lib/integrations.yml by scripts/gen-catalog.mjs.
|
|
4
|
+
// Do not edit by hand — run `node scripts/gen-catalog.mjs` to regenerate.
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.FALLBACK_CATALOG = void 0;
|
|
7
|
+
exports.FALLBACK_CATALOG = [
|
|
8
|
+
{
|
|
9
|
+
"integrationId": "1c",
|
|
10
|
+
"slug": "gorgo-medusa-1c",
|
|
11
|
+
"npm": "@gorgo/medusa-1c",
|
|
12
|
+
"category": "erp",
|
|
13
|
+
"author": "gorgo",
|
|
14
|
+
"authorLocalized": "Gorgo",
|
|
15
|
+
"label": "1C:Enterprise",
|
|
16
|
+
"shortDescription": "Data exchange between Medusa and 1C:Enterprise ERP",
|
|
17
|
+
"repository": "https://github.com/gorgojs/medusa-plugins",
|
|
18
|
+
"docsUrl": "https://docs.gorgojs.com/medusa-plugins/1c-enterprise",
|
|
19
|
+
"configSnippet": "// Registered as a module, not an integration provider:\n{\n resolve: \"@gorgo/medusa-1c\",\n}\n",
|
|
20
|
+
"icon": "/api/plugin-icon?slug=gorgo-medusa-1c",
|
|
21
|
+
"stars": null,
|
|
22
|
+
"downloads": null
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"integrationId": "apiship",
|
|
26
|
+
"slug": "gorgo-medusa-fulfillment-apiship",
|
|
27
|
+
"npm": "@gorgo/medusa-fulfillment-apiship",
|
|
28
|
+
"category": "fulfillment",
|
|
29
|
+
"author": "gorgo",
|
|
30
|
+
"authorLocalized": "Gorgo",
|
|
31
|
+
"label": "ApiShip",
|
|
32
|
+
"shortDescription": "Multi-carrier shipping aggregation via ApiShip",
|
|
33
|
+
"repository": "https://github.com/gorgojs/medusa-plugins",
|
|
34
|
+
"docsUrl": "https://docs.gorgojs.com/medusa-plugins/apiship",
|
|
35
|
+
"icon": "/api/plugin-icon?slug=gorgo-medusa-fulfillment-apiship",
|
|
36
|
+
"stars": null,
|
|
37
|
+
"downloads": null
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"integrationId": "robokassa",
|
|
41
|
+
"slug": "gorgo-medusa-payment-robokassa",
|
|
42
|
+
"npm": "@gorgo/medusa-payment-robokassa",
|
|
43
|
+
"category": "payment",
|
|
44
|
+
"author": "gorgo",
|
|
45
|
+
"authorLocalized": "Gorgo",
|
|
46
|
+
"label": "Robokassa",
|
|
47
|
+
"shortDescription": "Accept payments via Robokassa",
|
|
48
|
+
"repository": "https://github.com/gorgojs/medusa-plugins",
|
|
49
|
+
"docsUrl": "https://docs.gorgojs.com/medusa-plugins/robokassa",
|
|
50
|
+
"configSnippet": "{\n resolve: \"@gorgo/medusa-payment-robokassa\",\n options: {\n // credentials & settings are managed in Admin, not here\n },\n}\n",
|
|
51
|
+
"icon": "/api/plugin-icon?slug=gorgo-medusa-payment-robokassa",
|
|
52
|
+
"stars": null,
|
|
53
|
+
"downloads": null
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"integrationId": "tkassa",
|
|
57
|
+
"slug": "gorgo-medusa-payment-tkassa",
|
|
58
|
+
"npm": "@gorgo/medusa-payment-tkassa",
|
|
59
|
+
"category": "payment",
|
|
60
|
+
"author": "gorgo",
|
|
61
|
+
"authorLocalized": "Gorgo",
|
|
62
|
+
"label": "T-Kassa",
|
|
63
|
+
"shortDescription": "Accept payments via T-Kassa by T-Bank",
|
|
64
|
+
"repository": "https://github.com/gorgojs/medusa-plugins",
|
|
65
|
+
"docsUrl": "https://docs.gorgojs.com/medusa-plugins/t-kassa",
|
|
66
|
+
"configSnippet": "{\n resolve: \"@gorgo/medusa-payment-tkassa\",\n options: {\n // credentials & settings are managed in Admin, not here\n },\n}\n",
|
|
67
|
+
"icon": "/api/plugin-icon?slug=gorgo-medusa-payment-tkassa",
|
|
68
|
+
"stars": null,
|
|
69
|
+
"downloads": null
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"integrationId": "yookassa",
|
|
73
|
+
"slug": "gorgo-medusa-payment-yookassa",
|
|
74
|
+
"npm": "@gorgo/medusa-payment-yookassa",
|
|
75
|
+
"category": "payment",
|
|
76
|
+
"author": "gorgo",
|
|
77
|
+
"authorLocalized": "Gorgo",
|
|
78
|
+
"label": "YooKassa",
|
|
79
|
+
"shortDescription": "Accept payments via YooKassa",
|
|
80
|
+
"repository": "https://github.com/gorgojs/medusa-plugins",
|
|
81
|
+
"docsUrl": "https://docs.gorgojs.com/medusa-plugins/yookassa",
|
|
82
|
+
"configSnippet": "{\n resolve: \"@gorgo/medusa-payment-yookassa\",\n options: {\n // credentials & settings are managed in Admin, not here\n },\n}\n",
|
|
83
|
+
"icon": "/api/plugin-icon?slug=gorgo-medusa-payment-yookassa",
|
|
84
|
+
"stars": null,
|
|
85
|
+
"downloads": null
|
|
86
|
+
}
|
|
87
|
+
];
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy5nZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NhdGFsb2cuZ2VuZXJhdGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxvQkFBb0I7QUFDcEIsMkVBQTJFO0FBQzNFLDBFQUEwRTs7O0FBSTdELFFBQUEsZ0JBQWdCLEdBQXlCO0lBQ3BEO1FBQ0UsZUFBZSxFQUFFLElBQUk7UUFDckIsTUFBTSxFQUFFLGlCQUFpQjtRQUN6QixLQUFLLEVBQUUsa0JBQWtCO1FBQ3pCLFVBQVUsRUFBRSxLQUFLO1FBQ2pCLFFBQVEsRUFBRSxPQUFPO1FBQ2pCLGlCQUFpQixFQUFFLE9BQU87UUFDMUIsT0FBTyxFQUFFLGVBQWU7UUFDeEIsa0JBQWtCLEVBQUUsb0RBQW9EO1FBQ3hFLFlBQVksRUFBRSwyQ0FBMkM7UUFDekQsU0FBUyxFQUFFLHVEQUF1RDtRQUNsRSxlQUFlLEVBQUUsbUdBQW1HO1FBQ3BILE1BQU0sRUFBRSx1Q0FBdUM7UUFDL0MsT0FBTyxFQUFFLElBQUk7UUFDYixXQUFXLEVBQUUsSUFBSTtLQUNsQjtJQUNEO1FBQ0UsZUFBZSxFQUFFLFNBQVM7UUFDMUIsTUFBTSxFQUFFLGtDQUFrQztRQUMxQyxLQUFLLEVBQUUsbUNBQW1DO1FBQzFDLFVBQVUsRUFBRSxhQUFhO1FBQ3pCLFFBQVEsRUFBRSxPQUFPO1FBQ2pCLGlCQUFpQixFQUFFLE9BQU87UUFDMUIsT0FBTyxFQUFFLFNBQVM7UUFDbEIsa0JBQWtCLEVBQUUsZ0RBQWdEO1FBQ3BFLFlBQVksRUFBRSwyQ0FBMkM7UUFDekQsU0FBUyxFQUFFLGlEQUFpRDtRQUM1RCxNQUFNLEVBQUUsd0RBQXdEO1FBQ2hFLE9BQU8sRUFBRSxJQUFJO1FBQ2IsV0FBVyxFQUFFLElBQUk7S0FDbEI7SUFDRDtRQUNFLGVBQWUsRUFBRSxXQUFXO1FBQzVCLE1BQU0sRUFBRSxnQ0FBZ0M7UUFDeEMsS0FBSyxFQUFFLGlDQUFpQztRQUN4QyxVQUFVLEVBQUUsU0FBUztRQUNyQixRQUFRLEVBQUUsT0FBTztRQUNqQixpQkFBaUIsRUFBRSxPQUFPO1FBQzFCLE9BQU8sRUFBRSxXQUFXO1FBQ3BCLGtCQUFrQixFQUFFLCtCQUErQjtRQUNuRCxZQUFZLEVBQUUsMkNBQTJDO1FBQ3pELFNBQVMsRUFBRSxtREFBbUQ7UUFDOUQsZUFBZSxFQUFFLDJJQUEySTtRQUM1SixNQUFNLEVBQUUsc0RBQXNEO1FBQzlELE9BQU8sRUFBRSxJQUFJO1FBQ2IsV0FBVyxFQUFFLElBQUk7S0FDbEI7SUFDRDtRQUNFLGVBQWUsRUFBRSxRQUFRO1FBQ3pCLE1BQU0sRUFBRSw2QkFBNkI7UUFDckMsS0FBSyxFQUFFLDhCQUE4QjtRQUNyQyxVQUFVLEVBQUUsU0FBUztRQUNyQixRQUFRLEVBQUUsT0FBTztRQUNqQixpQkFBaUIsRUFBRSxPQUFPO1FBQzFCLE9BQU8sRUFBRSxTQUFTO1FBQ2xCLGtCQUFrQixFQUFFLHVDQUF1QztRQUMzRCxZQUFZLEVBQUUsMkNBQTJDO1FBQ3pELFNBQVMsRUFBRSxpREFBaUQ7UUFDNUQsZUFBZSxFQUFFLHdJQUF3STtRQUN6SixNQUFNLEVBQUUsbURBQW1EO1FBQzNELE9BQU8sRUFBRSxJQUFJO1FBQ2IsV0FBVyxFQUFFLElBQUk7S0FDbEI7SUFDRDtRQUNFLGVBQWUsRUFBRSxVQUFVO1FBQzNCLE1BQU0sRUFBRSwrQkFBK0I7UUFDdkMsS0FBSyxFQUFFLGdDQUFnQztRQUN2QyxVQUFVLEVBQUUsU0FBUztRQUNyQixRQUFRLEVBQUUsT0FBTztRQUNqQixpQkFBaUIsRUFBRSxPQUFPO1FBQzFCLE9BQU8sRUFBRSxVQUFVO1FBQ25CLGtCQUFrQixFQUFFLDhCQUE4QjtRQUNsRCxZQUFZLEVBQUUsMkNBQTJDO1FBQ3pELFNBQVMsRUFBRSxrREFBa0Q7UUFDN0QsZUFBZSxFQUFFLDBJQUEwSTtRQUMzSixNQUFNLEVBQUUscURBQXFEO1FBQzdELE9BQU8sRUFBRSxJQUFJO1FBQ2IsV0FBVyxFQUFFLElBQUk7S0FDbEI7Q0FDRixDQUFBIn0=
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loadCatalog = loadCatalog;
|
|
4
|
+
exports.resetCatalogCacheForTests = resetCatalogCacheForTests;
|
|
5
|
+
const catalog_generated_1 = require("./catalog.generated");
|
|
6
|
+
const CATALOG_API_URL = "https://gorgojs.com/api/integrations";
|
|
7
|
+
const CACHE_TTL_MS = 60 * 60 * 1000; // 1 hour
|
|
8
|
+
const FETCH_TIMEOUT_MS = 4000;
|
|
9
|
+
let cache = null;
|
|
10
|
+
/** Minimal shape check — enough to reject a malformed API response. */
|
|
11
|
+
const isEntry = (x) => !!x &&
|
|
12
|
+
typeof x.integrationId === "string" &&
|
|
13
|
+
typeof x.slug === "string" &&
|
|
14
|
+
typeof x.label === "string";
|
|
15
|
+
/** Fetch the remote catalog with a hard timeout. Throws on any failure/invalid shape. */
|
|
16
|
+
async function fetchRemoteCatalog() {
|
|
17
|
+
const controller = new AbortController();
|
|
18
|
+
const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
|
|
19
|
+
try {
|
|
20
|
+
const res = await fetch(CATALOG_API_URL, { signal: controller.signal });
|
|
21
|
+
if (!res.ok)
|
|
22
|
+
throw new Error(`catalog api responded ${res.status}`);
|
|
23
|
+
const body = (await res.json());
|
|
24
|
+
const list = body?.integrations;
|
|
25
|
+
if (!Array.isArray(list) || !list.every(isEntry)) {
|
|
26
|
+
throw new Error("catalog api returned an unexpected shape");
|
|
27
|
+
}
|
|
28
|
+
return list;
|
|
29
|
+
}
|
|
30
|
+
finally {
|
|
31
|
+
clearTimeout(timer);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The Gorgo integration catalog: the live API when reachable (cached ~1h), otherwise the
|
|
36
|
+
* last-good response, otherwise the yml-derived FALLBACK_CATALOG shipped with the plugin.
|
|
37
|
+
* Never throws.
|
|
38
|
+
*/
|
|
39
|
+
async function loadCatalog() {
|
|
40
|
+
if (cache && Date.now() - cache.at < CACHE_TTL_MS)
|
|
41
|
+
return cache.data;
|
|
42
|
+
try {
|
|
43
|
+
const data = await fetchRemoteCatalog();
|
|
44
|
+
cache = { data, at: Date.now() };
|
|
45
|
+
return data;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return cache?.data ?? catalog_generated_1.FALLBACK_CATALOG;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/** Test-only: clear the in-memory cache between cases. */
|
|
52
|
+
function resetCatalogCacheForTests() {
|
|
53
|
+
cache = null;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXdDQSxrQ0FTQztBQUdELDhEQUVDO0FBckRELDJEQUFzRDtBQUV0RCxNQUFNLGVBQWUsR0FBRyxzQ0FBc0MsQ0FBQTtBQUM5RCxNQUFNLFlBQVksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQSxDQUFDLFNBQVM7QUFDN0MsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUE7QUFHN0IsSUFBSSxLQUFLLEdBQXNCLElBQUksQ0FBQTtBQUVuQyx1RUFBdUU7QUFDdkUsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFNLEVBQTJCLEVBQUUsQ0FDbEQsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLENBQUMsQ0FBQyxhQUFhLEtBQUssUUFBUTtJQUNuQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUTtJQUMxQixPQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFBO0FBRTdCLHlGQUF5RjtBQUN6RixLQUFLLFVBQVUsa0JBQWtCO0lBQy9CLE1BQU0sVUFBVSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUE7SUFDeEMsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFBO0lBQ3BFLElBQUksQ0FBQztRQUNILE1BQU0sR0FBRyxHQUFHLE1BQU0sS0FBSyxDQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQTtRQUN2RSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQTtRQUNuRSxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxDQUErQixDQUFBO1FBQzdELE1BQU0sSUFBSSxHQUFHLElBQUksRUFBRSxZQUFZLENBQUE7UUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDakQsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFBO1FBQzdELENBQUM7UUFDRCxPQUFPLElBQTRCLENBQUE7SUFDckMsQ0FBQztZQUFTLENBQUM7UUFDVCxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDckIsQ0FBQztBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLFdBQVc7SUFDL0IsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLEdBQUcsWUFBWTtRQUFFLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQTtJQUNwRSxJQUFJLENBQUM7UUFDSCxNQUFNLElBQUksR0FBRyxNQUFNLGtCQUFrQixFQUFFLENBQUE7UUFDdkMsS0FBSyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQTtRQUNoQyxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssRUFBRSxJQUFJLElBQUksb0NBQWdCLENBQUE7SUFDeEMsQ0FBQztBQUNILENBQUM7QUFFRCwwREFBMEQ7QUFDMUQsU0FBZ0IseUJBQXlCO0lBQ3ZDLEtBQUssR0FBRyxJQUFJLENBQUE7QUFDZCxDQUFDIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const globals_1 = require("@jest/globals");
|
|
4
|
+
const package_meta_1 = require("../package-meta");
|
|
5
|
+
(0, globals_1.describe)("authorFromScope", () => {
|
|
6
|
+
(0, globals_1.it)("capitalizes the npm scope", () => {
|
|
7
|
+
(0, globals_1.expect)((0, package_meta_1.authorFromScope)("@gorgo/medusa-payment-tkassa")).toBe("Gorgo");
|
|
8
|
+
});
|
|
9
|
+
(0, globals_1.it)("returns null for unscoped or blank names", () => {
|
|
10
|
+
(0, globals_1.expect)((0, package_meta_1.authorFromScope)("medusa-plugin")).toBeNull();
|
|
11
|
+
(0, globals_1.expect)((0, package_meta_1.authorFromScope)(null)).toBeNull();
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
(0, globals_1.describe)("parsePackageMeta", () => {
|
|
15
|
+
(0, globals_1.it)("reads name + version", () => {
|
|
16
|
+
const m = (0, package_meta_1.parsePackageMeta)({ name: "@gorgo/x", version: "1.2.3" });
|
|
17
|
+
(0, globals_1.expect)(m.name).toBe("@gorgo/x");
|
|
18
|
+
(0, globals_1.expect)(m.version).toBe("1.2.3");
|
|
19
|
+
});
|
|
20
|
+
(0, globals_1.it)("parses a string author with a URL and derives nothing extra", () => {
|
|
21
|
+
const m = (0, package_meta_1.parsePackageMeta)({ name: "@gorgo/x", version: "1.0.0", author: "Gorgo <hi@gorgo.dev> (https://gorgo.dev)" });
|
|
22
|
+
(0, globals_1.expect)(m.author).toBe("Gorgo");
|
|
23
|
+
(0, globals_1.expect)(m.authorUrl).toBe("https://gorgo.dev");
|
|
24
|
+
});
|
|
25
|
+
(0, globals_1.it)("parses an object author", () => {
|
|
26
|
+
const m = (0, package_meta_1.parsePackageMeta)({ name: "@gorgo/x", version: "1.0.0", author: { name: "Gorgo", url: "https://gorgo.dev" } });
|
|
27
|
+
(0, globals_1.expect)(m.author).toBe("Gorgo");
|
|
28
|
+
(0, globals_1.expect)(m.authorUrl).toBe("https://gorgo.dev");
|
|
29
|
+
});
|
|
30
|
+
(0, globals_1.it)("falls back to scope-derived author and homepage URL when author is absent", () => {
|
|
31
|
+
const m = (0, package_meta_1.parsePackageMeta)({ name: "@gorgo/x", version: "1.0.0", homepage: "https://gorgo.dev/x" });
|
|
32
|
+
(0, globals_1.expect)(m.author).toBe("Gorgo");
|
|
33
|
+
(0, globals_1.expect)(m.authorUrl).toBe("https://gorgo.dev/x");
|
|
34
|
+
});
|
|
35
|
+
(0, globals_1.it)("yields nulls when nothing is resolvable", () => {
|
|
36
|
+
const m = (0, package_meta_1.parsePackageMeta)({ name: "plain", version: "1.0.0" });
|
|
37
|
+
(0, globals_1.expect)(m.author).toBeNull();
|
|
38
|
+
(0, globals_1.expect)(m.authorUrl).toBeNull();
|
|
39
|
+
});
|
|
40
|
+
(0, globals_1.it)("does not throw on a non-string author.name and falls back to scope-derived author", () => {
|
|
41
|
+
const m = (0, package_meta_1.parsePackageMeta)({ name: "@gorgo/x", version: "1.0.0", author: { name: 123 } });
|
|
42
|
+
(0, globals_1.expect)(m.author).toBe("Gorgo");
|
|
43
|
+
});
|
|
44
|
+
(0, globals_1.it)("does not throw on a non-string homepage and yields a null authorUrl", () => {
|
|
45
|
+
const m = (0, package_meta_1.parsePackageMeta)({ name: "plain", version: "1.0.0", homepage: { url: "https://gorgo.dev" } });
|
|
46
|
+
(0, globals_1.expect)(m.authorUrl).toBeNull();
|
|
47
|
+
});
|
|
48
|
+
(0, globals_1.it)("uses the object author's name with no url, falling back to homepage for authorUrl", () => {
|
|
49
|
+
const m = (0, package_meta_1.parsePackageMeta)({
|
|
50
|
+
name: "@gorgo/x",
|
|
51
|
+
version: "1.0.0",
|
|
52
|
+
author: { name: "Gorgo" },
|
|
53
|
+
homepage: "https://gorgo.dev/x",
|
|
54
|
+
});
|
|
55
|
+
(0, globals_1.expect)(m.author).toBe("Gorgo");
|
|
56
|
+
(0, globals_1.expect)(m.authorUrl).toBe("https://gorgo.dev/x");
|
|
57
|
+
});
|
|
58
|
+
(0, globals_1.it)("falls back to scope-derived author on an empty-string author", () => {
|
|
59
|
+
const m = (0, package_meta_1.parsePackageMeta)({ name: "@gorgo/x", version: "1.0.0", author: "" });
|
|
60
|
+
(0, globals_1.expect)(m.author).toBe("Gorgo");
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS1tZXRhLnVuaXQuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2ludGVncmF0aW9uL2xvYWRlcnMvX190ZXN0c19fL3BhY2thZ2UtbWV0YS51bml0LnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyQ0FBb0Q7QUFDcEQsa0RBQW1FO0FBRW5FLElBQUEsa0JBQVEsRUFBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUU7SUFDL0IsSUFBQSxZQUFFLEVBQUMsMkJBQTJCLEVBQUUsR0FBRyxFQUFFO1FBQ25DLElBQUEsZ0JBQU0sRUFBQyxJQUFBLDhCQUFlLEVBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUN2RSxDQUFDLENBQUMsQ0FBQTtJQUNGLElBQUEsWUFBRSxFQUFDLDBDQUEwQyxFQUFFLEdBQUcsRUFBRTtRQUNsRCxJQUFBLGdCQUFNLEVBQUMsSUFBQSw4QkFBZSxFQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUE7UUFDbkQsSUFBQSxnQkFBTSxFQUFDLElBQUEsOEJBQWUsRUFBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQzFDLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUE7QUFFRixJQUFBLGtCQUFRLEVBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFO0lBQ2hDLElBQUEsWUFBRSxFQUFDLHNCQUFzQixFQUFFLEdBQUcsRUFBRTtRQUM5QixNQUFNLENBQUMsR0FBRyxJQUFBLCtCQUFnQixFQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtRQUNsRSxJQUFBLGdCQUFNLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUMvQixJQUFB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
|