@mercurjs/core 2.3.9-canary.3 → 2.3.9-canary.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/api/admin/middlewares.js +41 -39
- package/.medusa/server/src/api/admin/payout-accounts/[id]/refresh-link/route.d.ts +3 -0
- package/.medusa/server/src/api/admin/payout-accounts/[id]/refresh-link/route.js +14 -0
- package/.medusa/server/src/api/admin/payout-accounts/[id]/route.d.ts +3 -0
- package/.medusa/server/src/api/admin/payout-accounts/[id]/route.js +18 -0
- package/.medusa/server/src/api/admin/payout-accounts/[id]/sync/route.d.ts +3 -0
- package/.medusa/server/src/api/admin/payout-accounts/[id]/sync/route.js +14 -0
- package/.medusa/server/src/api/admin/payout-accounts/helpers.d.ts +2 -0
- package/.medusa/server/src/api/admin/payout-accounts/helpers.js +7 -0
- package/.medusa/server/src/api/admin/payout-accounts/middlewares.d.ts +2 -0
- package/.medusa/server/src/api/admin/payout-accounts/middlewares.js +45 -0
- package/.medusa/server/src/api/admin/payout-accounts/query-config.d.ts +11 -0
- package/.medusa/server/src/api/admin/payout-accounts/query-config.js +26 -0
- package/.medusa/server/src/api/admin/payout-accounts/route.d.ts +5 -0
- package/.medusa/server/src/api/admin/payout-accounts/route.js +31 -0
- package/.medusa/server/src/api/admin/payout-accounts/validators.d.ts +51 -0
- package/.medusa/server/src/api/admin/payout-accounts/validators.js +22 -0
- package/.medusa/server/src/api/admin/payouts/[id]/retry/route.d.ts +3 -0
- package/.medusa/server/src/api/admin/payouts/[id]/retry/route.js +14 -0
- package/.medusa/server/src/api/admin/payouts/helpers.d.ts +2 -0
- package/.medusa/server/src/api/admin/payouts/helpers.js +7 -0
- package/.medusa/server/src/api/admin/payouts/middlewares.js +16 -1
- package/.medusa/server/src/api/admin/payouts/query-config.js +10 -1
- package/.medusa/server/src/api/admin/payouts/validators.d.ts +2 -0
- package/.medusa/server/src/api/admin/payouts/validators.js +3 -1
- package/.medusa/server/src/api/admin/products/validators.d.ts +1 -0
- package/.medusa/server/src/api/admin/products/validators.js +6 -2
- package/.medusa/server/src/api/hooks/payout/route.js +4 -6
- package/.medusa/server/src/api/middlewares.js +5 -1
- package/.medusa/server/src/api/payout/onboarding/refresh/route.d.ts +6 -0
- package/.medusa/server/src/api/payout/onboarding/refresh/route.js +21 -0
- package/.medusa/server/src/api/store/carts/middlewares.js +11 -1
- package/.medusa/server/src/api/utils/ensure-seller-middleware.js +2 -2
- package/.medusa/server/src/api/vendor/offers/batch/route.js +6 -2
- package/.medusa/server/src/api/vendor/offers/validators.d.ts +1 -0
- package/.medusa/server/src/api/vendor/offers/validators.js +2 -1
- package/.medusa/server/src/api/vendor/payout-accounts/[id]/onboarding/route.js +2 -8
- package/.medusa/server/src/api/vendor/payout-accounts/helpers.d.ts +2 -0
- package/.medusa/server/src/api/vendor/payout-accounts/helpers.js +7 -2
- package/.medusa/server/src/api/vendor/payout-accounts/me/route.d.ts +3 -0
- package/.medusa/server/src/api/vendor/payout-accounts/me/route.js +15 -0
- package/.medusa/server/src/api/vendor/payout-accounts/middlewares.js +9 -1
- package/.medusa/server/src/api/vendor/payout-accounts/query-config.d.ts +11 -0
- package/.medusa/server/src/api/vendor/payout-accounts/query-config.js +30 -2
- package/.medusa/server/src/api/vendor/payout-accounts/route.js +4 -9
- package/.medusa/server/src/api/vendor/payout-accounts/validators.d.ts +3 -1
- package/.medusa/server/src/api/vendor/payout-accounts/validators.js +5 -2
- package/.medusa/server/src/api/vendor/payouts/query-config.d.ts +2 -0
- package/.medusa/server/src/api/vendor/payouts/query-config.js +12 -2
- package/.medusa/server/src/api/vendor/payouts/validators.d.ts +1 -0
- package/.medusa/server/src/api/vendor/payouts/validators.js +2 -1
- package/.medusa/server/src/api/vendor/products/validators.d.ts +1 -0
- package/.medusa/server/src/api/vendor/products/validators.js +6 -2
- package/.medusa/server/src/api/vendor/sellers/select/route.js +2 -2
- package/.medusa/server/src/modules/payout/index.d.ts +1 -45
- package/.medusa/server/src/modules/payout/loaders/provider.js +7 -3
- package/.medusa/server/src/modules/payout/migrations/Migration20261028120000.d.ts +5 -0
- package/.medusa/server/src/modules/payout/migrations/Migration20261028120000.js +97 -0
- package/.medusa/server/src/modules/payout/models/index.d.ts +1 -0
- package/.medusa/server/src/modules/payout/models/index.js +4 -2
- package/.medusa/server/src/modules/payout/models/onboarding.d.ts +22 -1
- package/.medusa/server/src/modules/payout/models/payout-account.d.ts +23 -2
- package/.medusa/server/src/modules/payout/models/payout-account.js +33 -7
- package/.medusa/server/src/modules/payout/models/payout-reversal.d.ts +48 -0
- package/.medusa/server/src/modules/payout/models/payout-reversal.js +37 -0
- package/.medusa/server/src/modules/payout/models/payout.d.ts +22 -1
- package/.medusa/server/src/modules/payout/models/payout.js +18 -2
- package/.medusa/server/src/modules/payout/providers/system.d.ts +11 -5
- package/.medusa/server/src/modules/payout/providers/system.js +33 -14
- package/.medusa/server/src/modules/payout/services/payout-module-service.d.ts +94 -100
- package/.medusa/server/src/modules/payout/services/payout-module-service.js +316 -109
- package/.medusa/server/src/modules/payout/services/provider-service.d.ts +11 -7
- package/.medusa/server/src/modules/payout/services/provider-service.js +33 -13
- package/.medusa/server/src/modules/payout/utils/abstract-payout-provider.d.ts +20 -0
- package/.medusa/server/src/modules/payout/utils/abstract-payout-provider.js +19 -0
- package/.medusa/server/src/modules/payout/utils/index.d.ts +1 -0
- package/.medusa/server/src/modules/payout/utils/index.js +18 -0
- package/.medusa/server/src/modules/telemetry/index.d.ts +21 -0
- package/.medusa/server/src/modules/telemetry/index.js +12 -0
- package/.medusa/server/src/modules/telemetry/migrations/Migration20261029000000.d.ts +5 -0
- package/.medusa/server/src/modules/telemetry/migrations/Migration20261029000000.js +27 -0
- package/.medusa/server/src/modules/telemetry/models/index.d.ts +1 -0
- package/.medusa/server/src/modules/telemetry/models/index.js +10 -0
- package/.medusa/server/src/modules/telemetry/models/installation.d.ts +9 -0
- package/.medusa/server/src/modules/telemetry/models/installation.js +14 -0
- package/.medusa/server/src/modules/telemetry/repositories/index.d.ts +1 -0
- package/.medusa/server/src/modules/telemetry/repositories/index.js +18 -0
- package/.medusa/server/src/modules/telemetry/repositories/telemetry-heartbeat.d.ts +10 -0
- package/.medusa/server/src/modules/telemetry/repositories/telemetry-heartbeat.js +28 -0
- package/.medusa/server/src/modules/telemetry/service.d.ts +25 -0
- package/.medusa/server/src/modules/telemetry/service.js +54 -0
- package/.medusa/server/src/subscribers/payout-webhook.d.ts +2 -2
- package/.medusa/server/src/subscribers/payout-webhook.js +9 -5
- package/.medusa/server/src/subscribers/telemetry-first-member-invited.d.ts +3 -0
- package/.medusa/server/src/subscribers/telemetry-first-member-invited.js +14 -0
- package/.medusa/server/src/subscribers/telemetry-first-offer.d.ts +3 -0
- package/.medusa/server/src/subscribers/telemetry-first-offer.js +14 -0
- package/.medusa/server/src/subscribers/telemetry-first-order.d.ts +3 -0
- package/.medusa/server/src/subscribers/telemetry-first-order.js +14 -0
- package/.medusa/server/src/subscribers/telemetry-first-payout-account.d.ts +5 -0
- package/.medusa/server/src/subscribers/telemetry-first-payout-account.js +24 -0
- package/.medusa/server/src/subscribers/telemetry-first-product-published.d.ts +3 -0
- package/.medusa/server/src/subscribers/telemetry-first-product-published.js +14 -0
- package/.medusa/server/src/subscribers/telemetry-first-seller-approved.d.ts +3 -0
- package/.medusa/server/src/subscribers/telemetry-first-seller-approved.js +14 -0
- package/.medusa/server/src/subscribers/telemetry-first-seller.d.ts +3 -0
- package/.medusa/server/src/subscribers/telemetry-first-seller.js +14 -0
- package/.medusa/server/src/utils/telemetry/boot.d.ts +7 -0
- package/.medusa/server/src/utils/telemetry/boot.js +117 -0
- package/.medusa/server/src/utils/telemetry/buckets.d.ts +2 -0
- package/.medusa/server/src/utils/telemetry/buckets.js +22 -0
- package/.medusa/server/src/utils/telemetry/config.d.ts +19 -0
- package/.medusa/server/src/utils/telemetry/config.js +60 -0
- package/.medusa/server/src/utils/telemetry/first-party.d.ts +11 -0
- package/.medusa/server/src/utils/telemetry/first-party.js +33 -0
- package/.medusa/server/src/utils/telemetry/identity.d.ts +6 -0
- package/.medusa/server/src/utils/telemetry/identity.js +32 -0
- package/.medusa/server/src/utils/telemetry/index.d.ts +8 -0
- package/.medusa/server/src/utils/telemetry/index.js +27 -0
- package/.medusa/server/src/utils/telemetry/milestones.d.ts +20 -0
- package/.medusa/server/src/utils/telemetry/milestones.js +60 -0
- package/.medusa/server/src/utils/telemetry/sender.d.ts +17 -0
- package/.medusa/server/src/utils/telemetry/sender.js +48 -0
- package/.medusa/server/src/utils/telemetry/snapshot.d.ts +13 -0
- package/.medusa/server/src/utils/telemetry/snapshot.js +193 -0
- package/.medusa/server/src/with-mercur.d.ts +6 -0
- package/.medusa/server/src/with-mercur.js +1 -1
- package/.medusa/server/src/workflows/offer/workflows/create-offers.d.ts +3 -0
- package/.medusa/server/src/workflows/offer/workflows/create-offers.js +11 -1
- package/.medusa/server/src/workflows/payment/utils/split-order-payment-group.js +11 -3
- package/.medusa/server/src/workflows/payment/workflows/process-payment.js +10 -5
- package/.medusa/server/src/workflows/payout/steps/create-onboarding.d.ts +8 -2
- package/.medusa/server/src/workflows/payout/steps/create-onboarding.js +10 -4
- package/.medusa/server/src/workflows/payout/steps/create-payout-account.d.ts +3 -2
- package/.medusa/server/src/workflows/payout/steps/create-payout-account.js +9 -3
- package/.medusa/server/src/workflows/payout/steps/create-payout-accounts.d.ts +11 -0
- package/.medusa/server/src/workflows/payout/steps/create-payout-accounts.js +22 -0
- package/.medusa/server/src/workflows/payout/steps/create-payout-reversals.d.ts +4 -0
- package/.medusa/server/src/workflows/payout/steps/create-payout-reversals.js +23 -0
- package/.medusa/server/src/workflows/payout/steps/create-payouts.d.ts +4 -0
- package/.medusa/server/src/workflows/payout/steps/create-payouts.js +23 -0
- package/.medusa/server/src/workflows/payout/steps/index.d.ts +12 -5
- package/.medusa/server/src/workflows/payout/steps/index.js +13 -6
- package/.medusa/server/src/workflows/payout/steps/process-payout-reversals.d.ts +6 -0
- package/.medusa/server/src/workflows/payout/steps/process-payout-reversals.js +17 -0
- package/.medusa/server/src/workflows/payout/steps/process-payouts.d.ts +6 -0
- package/.medusa/server/src/workflows/payout/steps/process-payouts.js +17 -0
- package/.medusa/server/src/workflows/payout/steps/sync-payout-account.d.ts +8 -0
- package/.medusa/server/src/workflows/payout/steps/sync-payout-account.js +33 -0
- package/.medusa/server/src/workflows/payout/steps/update-payout-reversals.d.ts +4 -0
- package/.medusa/server/src/workflows/payout/steps/update-payout-reversals.js +29 -0
- package/.medusa/server/src/workflows/payout/steps/update-payouts.d.ts +4 -0
- package/.medusa/server/src/workflows/payout/steps/update-payouts.js +34 -0
- package/.medusa/server/src/workflows/payout/steps/validate-onboarding-token.d.ts +12 -0
- package/.medusa/server/src/workflows/payout/steps/validate-onboarding-token.js +23 -0
- package/.medusa/server/src/workflows/payout/steps/validate-payout-retry.d.ts +10 -0
- package/.medusa/server/src/workflows/payout/steps/validate-payout-retry.js +15 -0
- package/.medusa/server/src/workflows/payout/steps/validate-seller-without-payout-account.d.ts +10 -0
- package/.medusa/server/src/workflows/payout/steps/validate-seller-without-payout-account.js +13 -0
- package/.medusa/server/src/workflows/payout/utils/fulfillment-status.d.ts +26 -0
- package/.medusa/server/src/workflows/payout/utils/fulfillment-status.js +64 -0
- package/.medusa/server/src/workflows/payout/utils/index.d.ts +3 -0
- package/.medusa/server/src/workflows/payout/utils/index.js +20 -0
- package/.medusa/server/src/workflows/payout/utils/payout-amounts.d.ts +173 -0
- package/.medusa/server/src/workflows/payout/utils/payout-amounts.js +304 -0
- package/.medusa/server/src/workflows/payout/utils/sent-to-provider.d.ts +11 -0
- package/.medusa/server/src/workflows/payout/utils/sent-to-provider.js +15 -0
- package/.medusa/server/src/workflows/payout/workflows/create-onboarding.d.ts +5 -0
- package/.medusa/server/src/workflows/payout/workflows/create-onboarding.js +8 -3
- package/.medusa/server/src/workflows/payout/workflows/create-or-refresh-seller-payout-account.d.ts +16 -0
- package/.medusa/server/src/workflows/payout/workflows/create-or-refresh-seller-payout-account.js +38 -0
- package/.medusa/server/src/workflows/payout/workflows/create-order-payouts.d.ts +28 -0
- package/.medusa/server/src/workflows/payout/workflows/create-order-payouts.js +82 -0
- package/.medusa/server/src/workflows/payout/workflows/create-payout-account.d.ts +11 -5
- package/.medusa/server/src/workflows/payout/workflows/create-payout-account.js +42 -17
- package/.medusa/server/src/workflows/payout/workflows/create-payout-reversals.d.ts +14 -0
- package/.medusa/server/src/workflows/payout/workflows/create-payout-reversals.js +61 -0
- package/.medusa/server/src/workflows/payout/workflows/index.d.ts +11 -2
- package/.medusa/server/src/workflows/payout/workflows/index.js +12 -3
- package/.medusa/server/src/workflows/payout/workflows/link-payout-account.d.ts +11 -0
- package/.medusa/server/src/workflows/payout/workflows/link-payout-account.js +35 -0
- package/.medusa/server/src/workflows/payout/workflows/process-payout-for-webhook.d.ts +7 -3
- package/.medusa/server/src/workflows/payout/workflows/process-payout-for-webhook.js +50 -57
- package/.medusa/server/src/workflows/payout/workflows/process-payout-reversal.d.ts +9 -0
- package/.medusa/server/src/workflows/payout/workflows/process-payout-reversal.js +19 -0
- package/.medusa/server/src/workflows/payout/workflows/process-payout.d.ts +13 -0
- package/.medusa/server/src/workflows/payout/workflows/process-payout.js +23 -0
- package/.medusa/server/src/workflows/payout/workflows/refresh-onboarding.d.ts +13 -0
- package/.medusa/server/src/workflows/payout/workflows/refresh-onboarding.js +26 -0
- package/.medusa/server/src/workflows/payout/workflows/refresh-payout-account-link.d.ts +9 -0
- package/.medusa/server/src/workflows/payout/workflows/refresh-payout-account-link.js +15 -0
- package/.medusa/server/src/workflows/payout/workflows/retry-payout.d.ts +10 -0
- package/.medusa/server/src/workflows/payout/workflows/retry-payout.js +36 -0
- package/.medusa/server/src/workflows/payout/workflows/sync-payout-account.d.ts +9 -0
- package/.medusa/server/src/workflows/payout/workflows/sync-payout-account.js +24 -0
- package/.medusa/server/src/workflows/product/workflows/create-products.js +30 -10
- package/package.json +3 -3
- package/.medusa/server/src/workflows/payout/steps/create-payout.d.ts +0 -3
- package/.medusa/server/src/workflows/payout/steps/create-payout.js +0 -12
- package/.medusa/server/src/workflows/payout/steps/update-payout-account.d.ts +0 -35
- package/.medusa/server/src/workflows/payout/steps/update-payout-account.js +0 -27
- package/.medusa/server/src/workflows/payout/steps/update-payout.d.ts +0 -35
- package/.medusa/server/src/workflows/payout/steps/update-payout.js +0 -27
- package/.medusa/server/src/workflows/payout/steps/validate-seller-payout-account.d.ts +0 -5
- package/.medusa/server/src/workflows/payout/steps/validate-seller-payout-account.js +0 -21
- package/.medusa/server/src/workflows/payout/workflows/create-payout.d.ts +0 -9
- package/.medusa/server/src/workflows/payout/workflows/create-payout.js +0 -87
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.scheduleTelemetryBoot = scheduleTelemetryBoot;
|
|
4
|
+
const framework_1 = require("@medusajs/framework");
|
|
5
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
+
const types_1 = require("@mercurjs/types");
|
|
7
|
+
const config_1 = require("./config");
|
|
8
|
+
const milestones_1 = require("./milestones");
|
|
9
|
+
const sender_1 = require("./sender");
|
|
10
|
+
const snapshot_1 = require("./snapshot");
|
|
11
|
+
let scheduled = false;
|
|
12
|
+
const startedAt = Date.now();
|
|
13
|
+
const uptimeSeconds = () => Math.floor((Date.now() - startedAt) / 1_000);
|
|
14
|
+
const groupIdentify = (installation, snapshot) => {
|
|
15
|
+
const { $groups: _groups, ...properties } = snapshot;
|
|
16
|
+
return {
|
|
17
|
+
event: "$groupidentify",
|
|
18
|
+
distinct_id: installation.installation_id,
|
|
19
|
+
properties: {
|
|
20
|
+
$group_type: "installation",
|
|
21
|
+
$group_key: installation.installation_id,
|
|
22
|
+
$group_set: properties,
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
const bucketMilestones = [
|
|
27
|
+
["payouts_paid", milestones_1.TelemetryMilestones.FIRST_PAYOUT_PAID],
|
|
28
|
+
["commission_rules_total", milestones_1.TelemetryMilestones.FIRST_COMMISSION_RULE],
|
|
29
|
+
];
|
|
30
|
+
async function report(container, event) {
|
|
31
|
+
const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
32
|
+
const service = container.resolve(types_1.MercurModules.TELEMETRY);
|
|
33
|
+
const sender = (0, sender_1.createTelemetrySender)({ logger });
|
|
34
|
+
const installation = await service.getOrCreateInstallation();
|
|
35
|
+
const snapshot = await (0, snapshot_1.collectSnapshot)(container, installation, uptimeSeconds());
|
|
36
|
+
const events = [
|
|
37
|
+
{ event, distinct_id: installation.installation_id, properties: snapshot },
|
|
38
|
+
groupIdentify(installation, snapshot),
|
|
39
|
+
];
|
|
40
|
+
const version = snapshot.mercur_version;
|
|
41
|
+
if (version && installation.last_reported_version && installation.last_reported_version !== version) {
|
|
42
|
+
events.push({
|
|
43
|
+
event: "instance_upgraded",
|
|
44
|
+
distinct_id: installation.installation_id,
|
|
45
|
+
properties: { ...snapshot, from_version: installation.last_reported_version, to_version: version },
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
const milestones = (installation.milestones ?? {});
|
|
49
|
+
const dueMilestones = [
|
|
50
|
+
...(snapshot.node_env === "production" ? [milestones_1.TelemetryMilestones.FIRST_PRODUCTION_BOOT] : []),
|
|
51
|
+
...bucketMilestones.filter(([key]) => snapshot[key] && snapshot[key] !== "0").map(([, m]) => m),
|
|
52
|
+
].filter((m) => !milestones[m]);
|
|
53
|
+
for (const milestone of dueMilestones) {
|
|
54
|
+
if (await service.recordMilestone(milestone)) {
|
|
55
|
+
events.push({
|
|
56
|
+
event: "installation_milestone",
|
|
57
|
+
distinct_id: installation.installation_id,
|
|
58
|
+
properties: { ...snapshot, milestone, days_since_install: snapshot.instance_age_days },
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
await sender.capture(events);
|
|
63
|
+
if (version && installation.last_reported_version !== version) {
|
|
64
|
+
await service.setReportedVersion(version);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
function scheduleHeartbeat(container) {
|
|
68
|
+
const delay = config_1.HEARTBEAT_INTERVAL_MS + Math.floor(Math.random() * config_1.HEARTBEAT_JITTER_MS);
|
|
69
|
+
const timer = setTimeout(async () => {
|
|
70
|
+
try {
|
|
71
|
+
const service = container.resolve(types_1.MercurModules.TELEMETRY);
|
|
72
|
+
if (await service.claimHeartbeat(config_1.HEARTBEAT_MIN_GAP_SECONDS)) {
|
|
73
|
+
await report(container, "instance_heartbeat");
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
container.resolve(utils_1.ContainerRegistrationKeys.LOGGER).debug(`[telemetry] heartbeat skipped: ${error?.message}`);
|
|
78
|
+
}
|
|
79
|
+
finally {
|
|
80
|
+
scheduleHeartbeat(container);
|
|
81
|
+
}
|
|
82
|
+
}, delay);
|
|
83
|
+
timer.unref();
|
|
84
|
+
}
|
|
85
|
+
async function run(container) {
|
|
86
|
+
const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
87
|
+
const reason = (0, config_1.telemetryDisabledReason)({ configEnabled: (0, milestones_1.isTelemetryConfigEnabled)(container) });
|
|
88
|
+
if (reason) {
|
|
89
|
+
logger.debug(`[telemetry] disabled (${reason}). ${config_1.TELEMETRY_DOCS_URL}`);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
try {
|
|
93
|
+
const service = container.resolve(types_1.MercurModules.TELEMETRY);
|
|
94
|
+
await service.getOrCreateInstallation();
|
|
95
|
+
await service.claimHeartbeat(0);
|
|
96
|
+
await report(container, "instance_started");
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
logger.debug(`[telemetry] boot report skipped: ${error?.message}`);
|
|
100
|
+
}
|
|
101
|
+
scheduleHeartbeat(container);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Called from the plugin's API middleware file, which Medusa only loads in
|
|
105
|
+
* processes that serve HTTP. Worker processes, `medusa exec` and migrations
|
|
106
|
+
* never import it, so a boot event means a real server came up.
|
|
107
|
+
*/
|
|
108
|
+
function scheduleTelemetryBoot(container = framework_1.container) {
|
|
109
|
+
if (scheduled)
|
|
110
|
+
return;
|
|
111
|
+
scheduled = true;
|
|
112
|
+
const timer = setTimeout(() => {
|
|
113
|
+
run(container).catch(() => undefined);
|
|
114
|
+
}, (0, config_1.startupDelayMs)());
|
|
115
|
+
timer.unref();
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy91dGlscy90ZWxlbWV0cnkvYm9vdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWdJQSxzREFRQztBQXhJRCxtREFBa0U7QUFFbEUscURBQXFFO0FBQ3JFLDJDQUErQztBQUcvQyxxQ0FPaUI7QUFDakIsNkNBQTRFO0FBQzVFLHFDQUFnRTtBQUNoRSx5Q0FBZ0U7QUFFaEUsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFBO0FBQ3JCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQTtBQUU1QixNQUFNLGFBQWEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFBO0FBRXhFLE1BQU0sYUFBYSxHQUFHLENBQUMsWUFBZ0MsRUFBRSxRQUFpQyxFQUFrQixFQUFFO0lBQzVHLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsVUFBVSxFQUFFLEdBQUcsUUFBUSxDQUFBO0lBQ3BELE9BQU87UUFDTCxLQUFLLEVBQUUsZ0JBQWdCO1FBQ3ZCLFdBQVcsRUFBRSxZQUFZLENBQUMsZUFBZTtRQUN6QyxVQUFVLEVBQUU7WUFDVixXQUFXLEVBQUUsY0FBYztZQUMzQixVQUFVLEVBQUUsWUFBWSxDQUFDLGVBQWU7WUFDeEMsVUFBVSxFQUFFLFVBQVU7U0FDdkI7S0FDRixDQUFBO0FBQ0gsQ0FBQyxDQUFBO0FBRUQsTUFBTSxnQkFBZ0IsR0FBb0Y7SUFDeEcsQ0FBQyxjQUFjLEVBQUUsZ0NBQW1CLENBQUMsaUJBQWlCLENBQUM7SUFDdkQsQ0FBQyx3QkFBd0IsRUFBRSxnQ0FBbUIsQ0FBQyxxQkFBcUIsQ0FBQztDQUN0RSxDQUFBO0FBRUQsS0FBSyxVQUFVLE1BQU0sQ0FBQyxTQUEwQixFQUFFLEtBQWdEO0lBQ2hH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
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toBucket = toBucket;
|
|
4
|
+
function toBucket(count) {
|
|
5
|
+
if (count === null || count === undefined || !Number.isFinite(count) || count < 0) {
|
|
6
|
+
return undefined;
|
|
7
|
+
}
|
|
8
|
+
if (count === 0)
|
|
9
|
+
return "0";
|
|
10
|
+
if (count <= 10)
|
|
11
|
+
return "1-10";
|
|
12
|
+
if (count <= 100)
|
|
13
|
+
return "11-100";
|
|
14
|
+
if (count <= 1_000)
|
|
15
|
+
return "101-1k";
|
|
16
|
+
if (count <= 10_000)
|
|
17
|
+
return "1k-10k";
|
|
18
|
+
if (count <= 100_000)
|
|
19
|
+
return "10k-100k";
|
|
20
|
+
return "100k+";
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVja2V0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy91dGlscy90ZWxlbWV0cnkvYnVja2V0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLDRCQVdDO0FBWEQsU0FBZ0IsUUFBUSxDQUFDLEtBQWdDO0lBQ3ZELElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbEYsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztJQUNELElBQUksS0FBSyxLQUFLLENBQUM7UUFBRSxPQUFPLEdBQUcsQ0FBQTtJQUMzQixJQUFJLEtBQUssSUFBSSxFQUFFO1FBQUUsT0FBTyxNQUFNLENBQUE7SUFDOUIsSUFBSSxLQUFLLElBQUksR0FBRztRQUFFLE9BQU8sUUFBUSxDQUFBO0lBQ2pDLElBQUksS0FBSyxJQUFJLEtBQUs7UUFBRSxPQUFPLFFBQVEsQ0FBQTtJQUNuQyxJQUFJLEtBQUssSUFBSSxNQUFNO1FBQUUsT0FBTyxRQUFRLENBQUE7SUFDcEMsSUFBSSxLQUFLLElBQUksT0FBTztRQUFFLE9BQU8sVUFBVSxDQUFBO0lBQ3ZDLE9BQU8sT0FBTyxDQUFBO0FBQ2hCLENBQUMifQ==
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare const TELEMETRY_SCHEMA_VERSION = 1;
|
|
2
|
+
export declare const TELEMETRY_DOCS_URL = "https://docs.mercurjs.com/telemetry";
|
|
3
|
+
export declare const DEFAULT_TELEMETRY_HOST = "https://telemetry.mercurjs.com";
|
|
4
|
+
export declare const TELEMETRY_REQUEST_TIMEOUT_MS = 2000;
|
|
5
|
+
export declare const HEARTBEAT_INTERVAL_MS: number;
|
|
6
|
+
export declare const HEARTBEAT_JITTER_MS: number;
|
|
7
|
+
export declare const HEARTBEAT_MIN_GAP_SECONDS: number;
|
|
8
|
+
export declare const DEFAULT_STARTUP_DELAY_MS = 5000;
|
|
9
|
+
export declare const isCi: (env?: NodeJS.ProcessEnv) => boolean;
|
|
10
|
+
export type TelemetryEnablementInput = {
|
|
11
|
+
env?: NodeJS.ProcessEnv;
|
|
12
|
+
configEnabled?: boolean;
|
|
13
|
+
workerMode?: string;
|
|
14
|
+
};
|
|
15
|
+
export type TelemetryDisabledReason = "env" | "do_not_track" | "config" | "ci" | "test" | "worker";
|
|
16
|
+
export declare function telemetryDisabledReason({ env, configEnabled, workerMode, }?: TelemetryEnablementInput): TelemetryDisabledReason | null;
|
|
17
|
+
export declare const isTelemetryDebug: (env?: NodeJS.ProcessEnv) => boolean;
|
|
18
|
+
export declare const telemetryHost: (env?: NodeJS.ProcessEnv) => string;
|
|
19
|
+
export declare const startupDelayMs: (env?: NodeJS.ProcessEnv) => number;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.startupDelayMs = exports.telemetryHost = exports.isTelemetryDebug = exports.isCi = exports.DEFAULT_STARTUP_DELAY_MS = exports.HEARTBEAT_MIN_GAP_SECONDS = exports.HEARTBEAT_JITTER_MS = exports.HEARTBEAT_INTERVAL_MS = exports.TELEMETRY_REQUEST_TIMEOUT_MS = exports.DEFAULT_TELEMETRY_HOST = exports.TELEMETRY_DOCS_URL = exports.TELEMETRY_SCHEMA_VERSION = void 0;
|
|
4
|
+
exports.telemetryDisabledReason = telemetryDisabledReason;
|
|
5
|
+
exports.TELEMETRY_SCHEMA_VERSION = 1;
|
|
6
|
+
exports.TELEMETRY_DOCS_URL = "https://docs.mercurjs.com/telemetry";
|
|
7
|
+
exports.DEFAULT_TELEMETRY_HOST = "https://telemetry.mercurjs.com";
|
|
8
|
+
exports.TELEMETRY_REQUEST_TIMEOUT_MS = 2_000;
|
|
9
|
+
exports.HEARTBEAT_INTERVAL_MS = 24 * 60 * 60 * 1_000;
|
|
10
|
+
exports.HEARTBEAT_JITTER_MS = 60 * 60 * 1_000;
|
|
11
|
+
exports.HEARTBEAT_MIN_GAP_SECONDS = 23 * 60 * 60;
|
|
12
|
+
exports.DEFAULT_STARTUP_DELAY_MS = 5_000;
|
|
13
|
+
const CI_ENV_KEYS = [
|
|
14
|
+
"CI",
|
|
15
|
+
"GITHUB_ACTIONS",
|
|
16
|
+
"GITLAB_CI",
|
|
17
|
+
"CIRCLECI",
|
|
18
|
+
"BUILDKITE",
|
|
19
|
+
"JENKINS_URL",
|
|
20
|
+
"TF_BUILD",
|
|
21
|
+
"TEAMCITY_VERSION",
|
|
22
|
+
"DRONE",
|
|
23
|
+
];
|
|
24
|
+
const isTruthy = (value) => value !== undefined && ["1", "true", "yes"].includes(value.toLowerCase());
|
|
25
|
+
const isCi = (env = process.env) => CI_ENV_KEYS.some((key) => Boolean(env[key]));
|
|
26
|
+
exports.isCi = isCi;
|
|
27
|
+
function telemetryDisabledReason({ env = process.env, configEnabled = true, workerMode, } = {}) {
|
|
28
|
+
if (isTruthy(env.MERCUR_TELEMETRY_FORCE_ENABLED)) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
if (isTruthy(env.MERCUR_DISABLE_TELEMETRY)) {
|
|
32
|
+
return "env";
|
|
33
|
+
}
|
|
34
|
+
if (isTruthy(env.DO_NOT_TRACK)) {
|
|
35
|
+
return "do_not_track";
|
|
36
|
+
}
|
|
37
|
+
if (!configEnabled) {
|
|
38
|
+
return "config";
|
|
39
|
+
}
|
|
40
|
+
if (env.NODE_ENV === "test") {
|
|
41
|
+
return "test";
|
|
42
|
+
}
|
|
43
|
+
if ((0, exports.isCi)(env)) {
|
|
44
|
+
return "ci";
|
|
45
|
+
}
|
|
46
|
+
if (workerMode === "worker" || env.MEDUSA_WORKER_MODE === "worker") {
|
|
47
|
+
return "worker";
|
|
48
|
+
}
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
const isTelemetryDebug = (env = process.env) => isTruthy(env.MERCUR_TELEMETRY_DEBUG);
|
|
52
|
+
exports.isTelemetryDebug = isTelemetryDebug;
|
|
53
|
+
const telemetryHost = (env = process.env) => (env.MERCUR_TELEMETRY_PROXY_URL || exports.DEFAULT_TELEMETRY_HOST).replace(/\/+$/, "");
|
|
54
|
+
exports.telemetryHost = telemetryHost;
|
|
55
|
+
const startupDelayMs = (env = process.env) => {
|
|
56
|
+
const parsed = Number(env.MERCUR_TELEMETRY_STARTUP_DELAY_MS);
|
|
57
|
+
return Number.isFinite(parsed) && parsed >= 0 ? parsed : exports.DEFAULT_STARTUP_DELAY_MS;
|
|
58
|
+
};
|
|
59
|
+
exports.startupDelayMs = startupDelayMs;
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3RlbGVtZXRyeS9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBeUNBLDBEQTJCQztBQXBFWSxRQUFBLHdCQUF3QixHQUFHLENBQUMsQ0FBQTtBQUM1QixRQUFBLGtCQUFrQixHQUFHLHFDQUFxQyxDQUFBO0FBQzFELFFBQUEsc0JBQXNCLEdBQUcsZ0NBQWdDLENBQUE7QUFDekQsUUFBQSw0QkFBNEIsR0FBRyxLQUFLLENBQUE7QUFDcEMsUUFBQSxxQkFBcUIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUE7QUFDNUMsUUFBQSxtQkFBbUIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQTtBQUNyQyxRQUFBLHlCQUF5QixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFBO0FBQ3hDLFFBQUEsd0JBQXdCLEdBQUcsS0FBSyxDQUFBO0FBRTdDLE1BQU0sV0FBVyxHQUFHO0lBQ2xCLElBQUk7SUFDSixnQkFBZ0I7SUFDaEIsV0FBVztJQUNYLFVBQVU7SUFDVixXQUFXO0lBQ1gsYUFBYTtJQUNiLFVBQVU7SUFDVixrQkFBa0I7SUFDbEIsT0FBTztDQUNSLENBQUE7QUFFRCxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQXlCLEVBQUUsRUFBRSxDQUM3QyxLQUFLLEtBQUssU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUE7QUFFcEUsTUFBTSxJQUFJLEdBQUcsQ0FBQyxNQUF5QixPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDM0QsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFEakMsUUFBQSxJQUFJLFFBQzZCO0FBZ0I5QyxTQUFnQix1QkFBdUIsQ0FBQyxFQUN0QyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFDakIsYUFBYSxHQUFHLElBQUksRUFDcEIsVUFBVSxNQUNrQixFQUFFO0lBQzlCLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFLENBQUM7UUFDakQsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztRQUMzQyxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztRQUMvQixPQUFPLGNBQWMsQ0FBQTtJQUN2QixDQUFDO0lBQ0QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ25CLE9BQU8sUUFBUSxDQUFBO0lBQ2pCLENBQUM7SUFDRCxJQUFJLEdBQUcsQ0FBQyxRQUFRLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDNUIsT0FBTyxNQUFNLENBQUE7SUFDZixDQUFDO0lBQ0QsSUFBSSxJQUFBLFlBQUksRUFBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2QsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBQ0QsSUFBSSxVQUFVLEtBQUssUUFBUSxJQUFJLEdBQUcsQ0FBQyxrQkFBa0IsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNuRSxPQUFPLFFBQVEsQ0FBQTtJQUNqQixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDO0FBRU0sTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLE1BQXlCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUN2RSxRQUFRLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUE7QUFEekIsUUFBQSxnQkFBZ0Isb0JBQ1M7QUFFL0IsTUFBTSxhQUFhLEdBQUcsQ0FBQyxNQUF5QixPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDcEUsQ0FBQyxHQUFHLENBQUMsMEJBQTBCLElBQUksOEJBQXNCLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0FBRG5FLFFBQUEsYUFBYSxpQkFDc0Q7QUFFekUsTUFBTSxjQUFjLEdBQUcsQ0FBQyxNQUF5QixPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUU7SUFDckUsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFBO0lBQzVELE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGdDQUF3QixDQUFBO0FBQ25GLENBQUMsQ0FBQTtBQUhZLFFBQUEsY0FBYyxrQkFHMUIifQ==
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const isFirstPartyName: (name: string) => boolean;
|
|
2
|
+
export type NameSplit = {
|
|
3
|
+
first_party: string[];
|
|
4
|
+
custom_count: number;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* Keeps only package names Mercur or Medusa publish. Anything else is counted,
|
|
8
|
+
* never named, because a custom plugin or provider name can identify a company.
|
|
9
|
+
*/
|
|
10
|
+
export declare function splitFirstParty(names: Array<string | undefined | null>): NameSplit;
|
|
11
|
+
export declare const providerIdLabel: (resolve: string | undefined, id: string | undefined) => string | undefined;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.providerIdLabel = exports.isFirstPartyName = void 0;
|
|
4
|
+
exports.splitFirstParty = splitFirstParty;
|
|
5
|
+
const FIRST_PARTY_PREFIXES = ["@mercurjs/", "@medusajs/"];
|
|
6
|
+
const isFirstPartyName = (name) => FIRST_PARTY_PREFIXES.some((prefix) => name.startsWith(prefix));
|
|
7
|
+
exports.isFirstPartyName = isFirstPartyName;
|
|
8
|
+
/**
|
|
9
|
+
* Keeps only package names Mercur or Medusa publish. Anything else is counted,
|
|
10
|
+
* never named, because a custom plugin or provider name can identify a company.
|
|
11
|
+
*/
|
|
12
|
+
function splitFirstParty(names) {
|
|
13
|
+
const first_party = new Set();
|
|
14
|
+
let custom_count = 0;
|
|
15
|
+
for (const name of names) {
|
|
16
|
+
if (!name)
|
|
17
|
+
continue;
|
|
18
|
+
if ((0, exports.isFirstPartyName)(name)) {
|
|
19
|
+
first_party.add(name);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
custom_count += 1;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return { first_party: [...first_party].sort(), custom_count };
|
|
26
|
+
}
|
|
27
|
+
const providerIdLabel = (resolve, id) => {
|
|
28
|
+
if (!resolve || !id)
|
|
29
|
+
return undefined;
|
|
30
|
+
return (0, exports.isFirstPartyName)(resolve) ? `${resolve}#${id}` : "custom";
|
|
31
|
+
};
|
|
32
|
+
exports.providerIdLabel = providerIdLabel;
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlyc3QtcGFydHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdXRpbHMvdGVsZW1ldHJ5L2ZpcnN0LXBhcnR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWNBLDBDQWNDO0FBNUJELE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUE7QUFFbEQsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFLENBQy9DLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO0FBRG5ELFFBQUEsZ0JBQWdCLG9CQUNtQztBQU9oRTs7O0dBR0c7QUFDSCxTQUFnQixlQUFlLENBQUMsS0FBdUM7SUFDckUsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQTtJQUNyQyxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUE7SUFFcEIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSTtZQUFFLFNBQVE7UUFDbkIsSUFBSSxJQUFBLHdCQUFnQixFQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDM0IsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN2QixDQUFDO2FBQU0sQ0FBQztZQUNOLFlBQVksSUFBSSxDQUFDLENBQUE7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQTtBQUMvRCxDQUFDO0FBRU0sTUFBTSxlQUFlLEdBQUcsQ0FBQyxPQUEyQixFQUFFLEVBQXNCLEVBQUUsRUFBRTtJQUNyRixJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsRUFBRTtRQUFFLE9BQU8sU0FBUyxDQUFBO0lBQ3JDLE9BQU8sSUFBQSx3QkFBZ0IsRUFBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQTtBQUNsRSxDQUFDLENBQUE7QUFIWSxRQUFBLGVBQWUsbUJBRzNCIn0=
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const hashProjectKey: (input: string) => string;
|
|
2
|
+
/**
|
|
3
|
+
* Stable, irreversible id for the codebase an instance was built from. Shared
|
|
4
|
+
* with the CLI so a scaffolded project can be matched to its running server.
|
|
5
|
+
*/
|
|
6
|
+
export declare function resolveProjectId(cwd?: string): string;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.hashProjectKey = void 0;
|
|
4
|
+
exports.resolveProjectId = resolveProjectId;
|
|
5
|
+
const node_child_process_1 = require("node:child_process");
|
|
6
|
+
const node_crypto_1 = require("node:crypto");
|
|
7
|
+
const PROJECT_ID_SALT = "mercur-telemetry-v1";
|
|
8
|
+
const hashProjectKey = (input) => (0, node_crypto_1.createHash)("sha256").update(`${PROJECT_ID_SALT}:${input}`).digest("base64url");
|
|
9
|
+
exports.hashProjectKey = hashProjectKey;
|
|
10
|
+
const gitRemote = (cwd) => {
|
|
11
|
+
try {
|
|
12
|
+
return (0, node_child_process_1.execSync)("git config --local --get remote.origin.url", {
|
|
13
|
+
cwd,
|
|
14
|
+
stdio: "pipe",
|
|
15
|
+
timeout: 1_000,
|
|
16
|
+
})
|
|
17
|
+
.toString()
|
|
18
|
+
.trim();
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Stable, irreversible id for the codebase an instance was built from. Shared
|
|
26
|
+
* with the CLI so a scaffolded project can be matched to its running server.
|
|
27
|
+
*/
|
|
28
|
+
function resolveProjectId(cwd = process.cwd()) {
|
|
29
|
+
const remote = gitRemote(cwd);
|
|
30
|
+
return (0, exports.hashProjectKey)(remote || cwd);
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdXRpbHMvdGVsZW1ldHJ5L2lkZW50aXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTBCQSw0Q0FHQztBQTdCRCwyREFBNkM7QUFDN0MsNkNBQXdDO0FBRXhDLE1BQU0sZUFBZSxHQUFHLHFCQUFxQixDQUFBO0FBRXRDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FDOUMsSUFBQSx3QkFBVSxFQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLGVBQWUsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQTtBQURuRSxRQUFBLGNBQWMsa0JBQ3FEO0FBRWhGLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUU7SUFDaEMsSUFBSSxDQUFDO1FBQ0gsT0FBTyxJQUFBLDZCQUFRLEVBQUMsNENBQTRDLEVBQUU7WUFDNUQsR0FBRztZQUNILEtBQUssRUFBRSxNQUFNO1lBQ2IsT0FBTyxFQUFFLEtBQUs7U0FDZixDQUFDO2FBQ0MsUUFBUSxFQUFFO2FBQ1YsSUFBSSxFQUFFLENBQUE7SUFDWCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0FBQ0gsQ0FBQyxDQUFBO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUU7SUFDbEQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzdCLE9BQU8sSUFBQSxzQkFBYyxFQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQTtBQUN0QyxDQUFDIn0=
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.scheduleTelemetryBoot = void 0;
|
|
18
|
+
__exportStar(require("./buckets"), exports);
|
|
19
|
+
__exportStar(require("./config"), exports);
|
|
20
|
+
__exportStar(require("./first-party"), exports);
|
|
21
|
+
__exportStar(require("./identity"), exports);
|
|
22
|
+
__exportStar(require("./milestones"), exports);
|
|
23
|
+
__exportStar(require("./sender"), exports);
|
|
24
|
+
__exportStar(require("./snapshot"), exports);
|
|
25
|
+
var boot_1 = require("./boot");
|
|
26
|
+
Object.defineProperty(exports, "scheduleTelemetryBoot", { enumerable: true, get: function () { return boot_1.scheduleTelemetryBoot; } });
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdXRpbHMvdGVsZW1ldHJ5L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNENBQXlCO0FBQ3pCLDJDQUF3QjtBQUN4QixnREFBNkI7QUFDN0IsNkNBQTBCO0FBQzFCLCtDQUE0QjtBQUM1QiwyQ0FBd0I7QUFDeEIsNkNBQTBCO0FBQzFCLCtCQUE4QztBQUFyQyw2R0FBQSxxQkFBcUIsT0FBQSJ9
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { MedusaContainer } from "@medusajs/framework/types";
|
|
2
|
+
export declare const TelemetryMilestones: {
|
|
3
|
+
readonly FIRST_PRODUCTION_BOOT: "first_production_boot";
|
|
4
|
+
readonly FIRST_SELLER: "first_seller";
|
|
5
|
+
readonly FIRST_SELLER_APPROVED: "first_seller_approved";
|
|
6
|
+
readonly FIRST_MEMBER_INVITED: "first_member_invited";
|
|
7
|
+
readonly FIRST_OFFER: "first_offer";
|
|
8
|
+
readonly FIRST_PRODUCT_PUBLISHED: "first_product_published";
|
|
9
|
+
readonly FIRST_ORDER: "first_order";
|
|
10
|
+
readonly FIRST_PAYOUT_ACCOUNT: "first_payout_account";
|
|
11
|
+
readonly FIRST_PAYOUT_PAID: "first_payout_paid";
|
|
12
|
+
readonly FIRST_COMMISSION_RULE: "first_commission_rule";
|
|
13
|
+
};
|
|
14
|
+
export type TelemetryMilestone = (typeof TelemetryMilestones)[keyof typeof TelemetryMilestones];
|
|
15
|
+
export declare const isTelemetryConfigEnabled: (container: MedusaContainer) => boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Milestones are recorded from subscribers, which in a split deployment run in
|
|
18
|
+
* the worker, so the worker-process rule that gates boot events does not apply.
|
|
19
|
+
*/
|
|
20
|
+
export declare function recordMilestone(container: MedusaContainer, milestone: TelemetryMilestone): Promise<boolean>;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isTelemetryConfigEnabled = exports.TelemetryMilestones = void 0;
|
|
4
|
+
exports.recordMilestone = recordMilestone;
|
|
5
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
+
const types_1 = require("@mercurjs/types");
|
|
7
|
+
const config_1 = require("./config");
|
|
8
|
+
const sender_1 = require("./sender");
|
|
9
|
+
const snapshot_1 = require("./snapshot");
|
|
10
|
+
exports.TelemetryMilestones = {
|
|
11
|
+
FIRST_PRODUCTION_BOOT: "first_production_boot",
|
|
12
|
+
FIRST_SELLER: "first_seller",
|
|
13
|
+
FIRST_SELLER_APPROVED: "first_seller_approved",
|
|
14
|
+
FIRST_MEMBER_INVITED: "first_member_invited",
|
|
15
|
+
FIRST_OFFER: "first_offer",
|
|
16
|
+
FIRST_PRODUCT_PUBLISHED: "first_product_published",
|
|
17
|
+
FIRST_ORDER: "first_order",
|
|
18
|
+
FIRST_PAYOUT_ACCOUNT: "first_payout_account",
|
|
19
|
+
FIRST_PAYOUT_PAID: "first_payout_paid",
|
|
20
|
+
FIRST_COMMISSION_RULE: "first_commission_rule",
|
|
21
|
+
};
|
|
22
|
+
const isTelemetryConfigEnabled = (container) => {
|
|
23
|
+
const configModule = container.resolve(utils_1.ContainerRegistrationKeys.CONFIG_MODULE);
|
|
24
|
+
const mercur = configModule.projectConfig.mercur;
|
|
25
|
+
return mercur?.telemetry !== false;
|
|
26
|
+
};
|
|
27
|
+
exports.isTelemetryConfigEnabled = isTelemetryConfigEnabled;
|
|
28
|
+
/**
|
|
29
|
+
* Milestones are recorded from subscribers, which in a split deployment run in
|
|
30
|
+
* the worker, so the worker-process rule that gates boot events does not apply.
|
|
31
|
+
*/
|
|
32
|
+
async function recordMilestone(container, milestone) {
|
|
33
|
+
try {
|
|
34
|
+
const reason = (0, config_1.telemetryDisabledReason)({ configEnabled: (0, exports.isTelemetryConfigEnabled)(container) });
|
|
35
|
+
if (reason && reason !== "worker") {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
const service = container.resolve(types_1.MercurModules.TELEMETRY);
|
|
39
|
+
const installation = await service.getOrCreateInstallation();
|
|
40
|
+
const isNew = await service.recordMilestone(milestone);
|
|
41
|
+
if (!isNew) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
45
|
+
const sender = (0, sender_1.createTelemetrySender)({ logger });
|
|
46
|
+
const base = (0, snapshot_1.collectBaseProperties)(container, installation);
|
|
47
|
+
await sender.capture([
|
|
48
|
+
{
|
|
49
|
+
event: "installation_milestone",
|
|
50
|
+
distinct_id: installation.installation_id,
|
|
51
|
+
properties: { ...base, milestone, days_since_install: base.instance_age_days },
|
|
52
|
+
},
|
|
53
|
+
]);
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlsZXN0b25lcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy91dGlscy90ZWxlbWV0cnkvbWlsZXN0b25lcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFrQ0EsMENBNkJDO0FBOURELHFEQUFxRTtBQUNyRSwyQ0FBK0M7QUFHL0MscUNBQWtEO0FBQ2xELHFDQUFnRDtBQUNoRCx5Q0FBa0Q7QUFFckMsUUFBQSxtQkFBbUIsR0FBRztJQUNqQyxxQkFBcUIsRUFBRSx1QkFBdUI7SUFDOUMsWUFBWSxFQUFFLGNBQWM7SUFDNUIscUJBQXFCLEVBQUUsdUJBQXVCO0lBQzlDLG9CQUFvQixFQUFFLHNCQUFzQjtJQUM1QyxXQUFXLEVBQUUsYUFBYTtJQUMxQix1QkFBdUIsRUFBRSx5QkFBeUI7SUFDbEQsV0FBVyxFQUFFLGFBQWE7SUFDMUIsb0JBQW9CLEVBQUUsc0JBQXNCO0lBQzVDLGlCQUFpQixFQUFFLG1CQUFtQjtJQUN0QyxxQkFBcUIsRUFBRSx1QkFBdUI7Q0FDdEMsQ0FBQTtBQUlILE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxTQUEwQixFQUFFLEVBQUU7SUFDckUsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBZSxpQ0FBeUIsQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUM3RixNQUFNLE1BQU0sR0FBSSxZQUFZLENBQUMsYUFBc0QsQ0FBQyxNQUFNLENBQUE7SUFDMUYsT0FBTyxNQUFNLEVBQUUsU0FBUyxLQUFLLEtBQUssQ0FBQTtBQUNwQyxDQUFDLENBQUE7QUFKWSxRQUFBLHdCQUF3Qiw0QkFJcEM7QUFFRDs7O0dBR0c7QUFDSSxLQUFLLFVBQVUsZUFBZSxDQUFDLFNBQTBCLEVBQUUsU0FBNkI7SUFDN0YsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsSUFBQSxnQ0FBdUIsRUFBQyxFQUFFLGFBQWEsRUFBRSxJQUFBLGdDQUF3QixFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUM5RixJQUFJLE1BQU0sSUFBSSxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbEMsT0FBTyxLQUFLLENBQUE7UUFDZCxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBeUIscUJBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUNsRixNQUFNLFlBQVksR0FBRyxNQUFNLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxDQUFBO1FBQzVELE1BQU0sS0FBSyxHQUFHLE1BQU0sT0FBTyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUN0RCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPLEtBQUssQ0FBQTtRQUNkLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFTLGlDQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQzFFLE1BQU0sTUFBTSxHQUFHLElBQUEsOEJBQXFCLEVBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFBO1FBQ2hELE1BQU0sSUFBSSxHQUFHLElBQUEsZ0NBQXFCLEVBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFBO1FBRTNELE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUNuQjtnQkFDRSxLQUFLLEVBQUUsd0JBQXdCO2dCQUMvQixXQUFXLEVBQUUsWUFBWSxDQUFDLGVBQWU7Z0JBQ3pDLFVBQVUsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7YUFDL0U7U0FDRixDQUFDLENBQUE7UUFDRixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7QUFDSCxDQUFDIn0=
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Logger } from "@medusajs/framework/types";
|
|
2
|
+
export type TelemetryEvent = {
|
|
3
|
+
event: string;
|
|
4
|
+
distinct_id: string;
|
|
5
|
+
properties: Record<string, unknown>;
|
|
6
|
+
timestamp?: string;
|
|
7
|
+
};
|
|
8
|
+
export type TelemetrySender = {
|
|
9
|
+
capture: (events: TelemetryEvent[]) => Promise<void>;
|
|
10
|
+
};
|
|
11
|
+
type SenderOptions = {
|
|
12
|
+
logger?: Logger;
|
|
13
|
+
env?: NodeJS.ProcessEnv;
|
|
14
|
+
fetchImpl?: typeof fetch;
|
|
15
|
+
};
|
|
16
|
+
export declare function createTelemetrySender({ logger, env, fetchImpl, }?: SenderOptions): TelemetrySender;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createTelemetrySender = createTelemetrySender;
|
|
4
|
+
const config_1 = require("./config");
|
|
5
|
+
/**
|
|
6
|
+
* The proxy swaps this for the real project key, so no PostHog credential
|
|
7
|
+
* ships inside the package.
|
|
8
|
+
*/
|
|
9
|
+
const PLACEHOLDER_API_KEY = "mercur";
|
|
10
|
+
function createTelemetrySender({ logger, env = process.env, fetchImpl = fetch, } = {}) {
|
|
11
|
+
const url = `${(0, config_1.telemetryHost)(env)}/batch`;
|
|
12
|
+
const debug = (0, config_1.isTelemetryDebug)(env);
|
|
13
|
+
return {
|
|
14
|
+
async capture(events) {
|
|
15
|
+
if (!events.length)
|
|
16
|
+
return;
|
|
17
|
+
const body = {
|
|
18
|
+
api_key: PLACEHOLDER_API_KEY,
|
|
19
|
+
batch: events.map((event) => ({
|
|
20
|
+
...event,
|
|
21
|
+
timestamp: event.timestamp ?? new Date().toISOString(),
|
|
22
|
+
properties: { ...event.properties, $geoip_disable: true },
|
|
23
|
+
})),
|
|
24
|
+
};
|
|
25
|
+
if (debug) {
|
|
26
|
+
logger?.info(`[telemetry] ${JSON.stringify(body.batch, null, 2)}`);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const controller = new AbortController();
|
|
30
|
+
const timer = setTimeout(() => controller.abort(), config_1.TELEMETRY_REQUEST_TIMEOUT_MS);
|
|
31
|
+
try {
|
|
32
|
+
await fetchImpl(url, {
|
|
33
|
+
method: "POST",
|
|
34
|
+
headers: { "content-type": "application/json" },
|
|
35
|
+
body: JSON.stringify(body),
|
|
36
|
+
signal: controller.signal,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
logger?.debug(`[telemetry] send failed: ${error?.message}`);
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
clearTimeout(timer);
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3RlbGVtZXRyeS9zZW5kZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUEyQkEsc0RBMENDO0FBbkVELHFDQUF3RjtBQUV4Rjs7O0dBR0c7QUFDSCxNQUFNLG1CQUFtQixHQUFHLFFBQVEsQ0FBQTtBQW1CcEMsU0FBZ0IscUJBQXFCLENBQUMsRUFDcEMsTUFBTSxFQUNOLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUNqQixTQUFTLEdBQUcsS0FBSyxNQUNBLEVBQUU7SUFDbkIsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFBLHNCQUFhLEVBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQTtJQUN6QyxNQUFNLEtBQUssR0FBRyxJQUFBLHlCQUFnQixFQUFDLEdBQUcsQ0FBQyxDQUFBO0lBRW5DLE9BQU87UUFDTCxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU07WUFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO2dCQUFFLE9BQU07WUFFMUIsTUFBTSxJQUFJLEdBQUc7Z0JBQ1gsT0FBTyxFQUFFLG1CQUFtQjtnQkFDNUIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQzVCLEdBQUcsS0FBSztvQkFDUixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtvQkFDdEQsVUFBVSxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsVUFBVSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUU7aUJBQzFELENBQUMsQ0FBQzthQUNKLENBQUE7WUFFRCxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtnQkFDbEUsT0FBTTtZQUNSLENBQUM7WUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFBO1lBQ3hDLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEVBQUUscUNBQTRCLENBQUMsQ0FBQTtZQUNoRixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxTQUFTLENBQUMsR0FBRyxFQUFFO29CQUNuQixNQUFNLEVBQUUsTUFBTTtvQkFDZCxPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUU7b0JBQy9DLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztvQkFDMUIsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNO2lCQUMxQixDQUFDLENBQUE7WUFDSixDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixNQUFNLEVBQUUsS0FBSyxDQUFDLDRCQUE2QixLQUFlLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtZQUN4RSxDQUFDO29CQUFTLENBQUM7Z0JBQ1QsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ3JCLENBQUM7UUFDSCxDQUFDO0tBQ0YsQ0FBQTtBQUNILENBQUMifQ==
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { MedusaContainer } from "@medusajs/framework/types";
|
|
2
|
+
export type InstallationRecord = {
|
|
3
|
+
installation_id: string;
|
|
4
|
+
created_at: Date | string;
|
|
5
|
+
};
|
|
6
|
+
export declare function collectBaseProperties(container: MedusaContainer, installation: InstallationRecord, env?: NodeJS.ProcessEnv): Record<string, unknown>;
|
|
7
|
+
export declare function collectStackProperties(container: MedusaContainer, env?: NodeJS.ProcessEnv): Record<string, unknown>;
|
|
8
|
+
/**
|
|
9
|
+
* Counts run one at a time on purpose: a heartbeat must never compete with
|
|
10
|
+
* request traffic for the connection pool.
|
|
11
|
+
*/
|
|
12
|
+
export declare function collectMarketplaceProperties(container: MedusaContainer): Promise<Record<string, unknown>>;
|
|
13
|
+
export declare function collectSnapshot(container: MedusaContainer, installation: InstallationRecord, uptimeSeconds: number): Promise<Record<string, unknown>>;
|