@huloglobal/vendure-plugin-visitor-analytics 0.17.1 → 0.18.0
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/CHANGELOG.md +21 -0
- package/README.md +80 -4
- package/dist/abandoned-cart.controller.d.ts +70 -14
- package/dist/abandoned-cart.controller.d.ts.map +1 -1
- package/dist/abandoned-cart.controller.js +214 -13
- package/dist/abandoned-cart.controller.js.map +1 -1
- package/dist/abandoned-cart.entity.d.ts +15 -0
- package/dist/abandoned-cart.entity.d.ts.map +1 -1
- package/dist/abandoned-cart.entity.js +20 -0
- package/dist/abandoned-cart.entity.js.map +1 -1
- package/dist/abandoned-cart.service.d.ts +133 -7
- package/dist/abandoned-cart.service.d.ts.map +1 -1
- package/dist/abandoned-cart.service.js +286 -10
- package/dist/abandoned-cart.service.js.map +1 -1
- package/dist/hulo-storefront.d.ts.map +1 -1
- package/dist/hulo-storefront.js +52 -0
- package/dist/hulo-storefront.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/recovery-tokens.d.ts +56 -0
- package/dist/recovery-tokens.d.ts.map +1 -0
- package/dist/recovery-tokens.js +125 -0
- package/dist/recovery-tokens.js.map +1 -0
- package/dist/recovery-tokens.test.d.ts +2 -0
- package/dist/recovery-tokens.test.d.ts.map +1 -0
- package/dist/recovery-tokens.test.js +115 -0
- package/dist/recovery-tokens.test.js.map +1 -0
- package/package.json +2 -2
|
@@ -15,13 +15,49 @@ const core_1 = require("@vendure/core");
|
|
|
15
15
|
const crypto_1 = require("crypto");
|
|
16
16
|
const plugin_1 = require("./plugin");
|
|
17
17
|
const vendure_licence_sdk_1 = require("@huloglobal/vendure-licence-sdk");
|
|
18
|
+
const recovery_tokens_1 = require("./recovery-tokens");
|
|
18
19
|
const loggerCtx = 'HuloAbandonedCartService';
|
|
19
20
|
let AbandonedCartService = class AbandonedCartService {
|
|
20
21
|
constructor(connection) {
|
|
21
22
|
this.connection = connection;
|
|
22
23
|
}
|
|
24
|
+
/** Add the 0.18.0 columns + the opt-out table on installs that don't
|
|
25
|
+
* run TypeORM migrations for plugins. Idempotent; never blocks boot. */
|
|
26
|
+
async onApplicationBootstrap() {
|
|
27
|
+
try {
|
|
28
|
+
await this.ensureSchema();
|
|
29
|
+
}
|
|
30
|
+
catch (e) {
|
|
31
|
+
common_1.Logger.warn(`Schema check failed (will retry next boot): ${e === null || e === void 0 ? void 0 : e.message}`, loggerCtx);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async ensureSchema() {
|
|
35
|
+
const conn = (0, vendure_licence_sdk_1.adapterFor)(this.connection.rawConnection);
|
|
36
|
+
const cols = [
|
|
37
|
+
['resumeOrderCode', 'VARCHAR(32) NULL'],
|
|
38
|
+
['recoveryStep', 'VARCHAR(16) NULL'],
|
|
39
|
+
['convertedAt', 'DATETIME(3) NULL'],
|
|
40
|
+
['convertedOrderId', 'INT NULL'],
|
|
41
|
+
['convertedOrderCode', 'VARCHAR(32) NULL'],
|
|
42
|
+
];
|
|
43
|
+
for (const [name, type] of cols) {
|
|
44
|
+
await conn.query(`ALTER TABLE abandoned_cart ADD COLUMN IF NOT EXISTS ${name} ${type}`);
|
|
45
|
+
}
|
|
46
|
+
await conn.query(`
|
|
47
|
+
CREATE TABLE IF NOT EXISTS abandoned_cart_opt_out (
|
|
48
|
+
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
49
|
+
emailHash VARCHAR(64) NOT NULL,
|
|
50
|
+
email VARCHAR(255) NOT NULL,
|
|
51
|
+
channelId INT NULL,
|
|
52
|
+
source VARCHAR(32) NOT NULL DEFAULT 'link',
|
|
53
|
+
ip VARCHAR(45) NULL,
|
|
54
|
+
createdAt DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
55
|
+
UNIQUE INDEX abandoned_cart_opt_out_hash_uniq (emailHash)
|
|
56
|
+
)
|
|
57
|
+
`);
|
|
58
|
+
}
|
|
23
59
|
opts() {
|
|
24
|
-
var _a, _b, _c, _d, _e, _f;
|
|
60
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
25
61
|
const raw = (0, plugin_1.getOptions)().abandonment;
|
|
26
62
|
return {
|
|
27
63
|
windowMinutes: (_a = raw === null || raw === void 0 ? void 0 : raw.windowMinutes) !== null && _a !== void 0 ? _a : 30,
|
|
@@ -30,6 +66,8 @@ let AbandonedCartService = class AbandonedCartService {
|
|
|
30
66
|
recoveryLinkSecret: (_d = raw === null || raw === void 0 ? void 0 : raw.recoveryLinkSecret) !== null && _d !== void 0 ? _d : '',
|
|
31
67
|
recoveryLinkTtlHours: (_e = raw === null || raw === void 0 ? void 0 : raw.recoveryLinkTtlHours) !== null && _e !== void 0 ? _e : 72,
|
|
32
68
|
storefrontBaseUrl: (_f = raw === null || raw === void 0 ? void 0 : raw.storefrontBaseUrl) !== null && _f !== void 0 ? _f : (0, plugin_1.getOptions)().publicBaseUrl,
|
|
69
|
+
storefrontBaseUrls: (_g = raw === null || raw === void 0 ? void 0 : raw.storefrontBaseUrls) !== null && _g !== void 0 ? _g : {},
|
|
70
|
+
optOutSecret: (_k = (_j = (_h = raw === null || raw === void 0 ? void 0 : raw.optOutSecret) !== null && _h !== void 0 ? _h : raw === null || raw === void 0 ? void 0 : raw.recoveryLinkSecret) !== null && _j !== void 0 ? _j : (0, plugin_1.getOptions)().signingSecret) !== null && _k !== void 0 ? _k : '',
|
|
33
71
|
};
|
|
34
72
|
}
|
|
35
73
|
/**
|
|
@@ -52,7 +90,7 @@ let AbandonedCartService = class AbandonedCartService {
|
|
|
52
90
|
// 1. Auto-mark existing abandoned rows as converted when a
|
|
53
91
|
// matching checkout_completed lands afterwards.
|
|
54
92
|
const converted = await conn.query(`UPDATE abandoned_cart ac
|
|
55
|
-
SET ac.status = 'converted', ac.recoveredAt = NOW()
|
|
93
|
+
SET ac.status = 'converted', ac.recoveredAt = NOW(), ac.convertedAt = COALESCE(ac.convertedAt, NOW())
|
|
56
94
|
WHERE ac.status = 'abandoned'
|
|
57
95
|
AND EXISTS (
|
|
58
96
|
SELECT 1 FROM visitor_event ve
|
|
@@ -240,31 +278,65 @@ let AbandonedCartService = class AbandonedCartService {
|
|
|
240
278
|
* restore the cart. Returns null when the recovery-link secret is
|
|
241
279
|
* unset (feature disabled). Idempotent: reissues a fresh token so
|
|
242
280
|
* you can safely regenerate before every send.
|
|
281
|
+
*
|
|
282
|
+
* Pass `{ resumeOrderCode }` to bind the link to the visitor's open
|
|
283
|
+
* Vendure order: `findByRecoveryToken` / the resume endpoint then
|
|
284
|
+
* return that code (while the order is still `AddingItems` /
|
|
285
|
+
* `ArrangingPayment`) so the storefront can pick up the same order
|
|
286
|
+
* instead of rebuilding it. Passing `{ resumeOrderCode: null }`
|
|
287
|
+
* clears a previous binding; omitting the option keeps it.
|
|
288
|
+
*
|
|
289
|
+
* Also advances `recoveryStep` to `link_issued`.
|
|
243
290
|
*/
|
|
244
|
-
async issueRecoveryLink(cartId) {
|
|
291
|
+
async issueRecoveryLink(cartId, options = {}) {
|
|
245
292
|
const o = this.opts();
|
|
246
293
|
if (!o.recoveryLinkSecret)
|
|
247
294
|
return null;
|
|
248
295
|
const conn = (0, vendure_licence_sdk_1.adapterFor)(this.connection.rawConnection);
|
|
249
|
-
const rows = await conn.query(`SELECT sessionId, visitorId
|
|
296
|
+
const rows = await conn.query(`SELECT ac.sessionId, ac.visitorId, ac.channelId, ac.recoveryStep, ch.code AS channelCode
|
|
297
|
+
FROM abandoned_cart ac LEFT JOIN channel ch ON ch.id = ac.channelId
|
|
298
|
+
WHERE ac.id = ? LIMIT 1`, [cartId]);
|
|
250
299
|
if (!(rows === null || rows === void 0 ? void 0 : rows.length))
|
|
251
300
|
return null;
|
|
252
301
|
const token = (0, crypto_1.randomBytes)(24).toString('base64url');
|
|
253
302
|
const expiresAt = new Date(Date.now() + o.recoveryLinkTtlHours * 3600000);
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
303
|
+
const step = (0, recovery_tokens_1.advanceRecoveryStep)(rows[0].recoveryStep, 'link_issued');
|
|
304
|
+
if (options.resumeOrderCode !== undefined) {
|
|
305
|
+
const code = options.resumeOrderCode === null ? null : (0, recovery_tokens_1.sanitiseOrderCode)(options.resumeOrderCode) || null;
|
|
306
|
+
await conn.query(`UPDATE abandoned_cart
|
|
307
|
+
SET recoveryToken = ?, recoveryTokenExpiresAt = ?, resumeOrderCode = ?, recoveryStep = ?
|
|
308
|
+
WHERE id = ?`, [token, expiresAt, code, step, cartId]);
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
await conn.query(`UPDATE abandoned_cart SET recoveryToken = ?, recoveryTokenExpiresAt = ?, recoveryStep = ? WHERE id = ?`, [token, expiresAt, step, cartId]);
|
|
312
|
+
}
|
|
313
|
+
return `${this.storefrontBaseFor(rows[0].channelCode)}/cart/restore?t=${token}`;
|
|
314
|
+
}
|
|
315
|
+
/** Storefront origin for a channel: the per-channel map first, then
|
|
316
|
+
* the single storefrontBaseUrl. Trailing slashes are dropped. */
|
|
317
|
+
storefrontBaseFor(channelCode) {
|
|
318
|
+
var _a;
|
|
319
|
+
const o = this.opts();
|
|
320
|
+
const perChannel = channelCode ? (_a = o.storefrontBaseUrls) === null || _a === void 0 ? void 0 : _a[channelCode] : undefined;
|
|
321
|
+
return String(perChannel || o.storefrontBaseUrl || '').replace(/\/$/, '');
|
|
257
322
|
}
|
|
258
323
|
/**
|
|
259
324
|
* Look up an abandoned cart by its recovery token. Returns null if
|
|
260
325
|
* the token is unknown, expired, or the cart is already recovered.
|
|
261
326
|
* Storefront calls this via `/ees/recover-cart?t=...` to rebuild the
|
|
262
327
|
* cart from the persisted itemsJson.
|
|
328
|
+
*
|
|
329
|
+
* Since 0.18.0 the result also carries `orderCode` / `orderState` /
|
|
330
|
+
* `resumable` when the link was bound to an order, and the call
|
|
331
|
+
* advances `recoveryStep` to `link_opened`.
|
|
263
332
|
*/
|
|
264
333
|
async findByRecoveryToken(token) {
|
|
265
334
|
const conn = (0, vendure_licence_sdk_1.adapterFor)(this.connection.rawConnection);
|
|
266
|
-
const
|
|
267
|
-
|
|
335
|
+
const t = String(token || '').trim();
|
|
336
|
+
if (!t || t.length > 128)
|
|
337
|
+
return null;
|
|
338
|
+
const rows = await conn.query(`SELECT id, currency, itemsJson, email, recoveryTokenExpiresAt, status, resumeOrderCode, recoveryStep, channelId
|
|
339
|
+
FROM abandoned_cart WHERE recoveryToken = ? LIMIT 1`, [t]);
|
|
268
340
|
if (!(rows === null || rows === void 0 ? void 0 : rows.length))
|
|
269
341
|
return null;
|
|
270
342
|
const r = rows[0];
|
|
@@ -274,12 +346,216 @@ let AbandonedCartService = class AbandonedCartService {
|
|
|
274
346
|
await conn.query(`UPDATE abandoned_cart SET status = 'expired' WHERE id = ?`, [r.id]);
|
|
275
347
|
return null;
|
|
276
348
|
}
|
|
349
|
+
const step = (0, recovery_tokens_1.advanceRecoveryStep)(r.recoveryStep, 'link_opened');
|
|
350
|
+
if (step !== r.recoveryStep) {
|
|
351
|
+
await conn.query(`UPDATE abandoned_cart SET recoveryStep = ? WHERE id = ?`, [step, r.id]);
|
|
352
|
+
}
|
|
353
|
+
return this.buildRecoveredCart(r);
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Token-bound "resume" — the storefront calls this (via
|
|
357
|
+
* `POST /ees/recover-cart/resume?t=…`) when it would rather pick up
|
|
358
|
+
* the exact order the visitor left than rebuild a cart. Returns the
|
|
359
|
+
* same payload as `findByRecoveryToken` plus `resumeOrderCode`, which
|
|
360
|
+
* is set only while the bound order is still open. Advances
|
|
361
|
+
* `recoveryStep` to `resumed` (only when there is an order to resume,
|
|
362
|
+
* so the funnel column stays honest).
|
|
363
|
+
*/
|
|
364
|
+
async resumeByRecoveryToken(token) {
|
|
365
|
+
const cart = await this.findByRecoveryToken(token);
|
|
366
|
+
if (!cart)
|
|
367
|
+
return null;
|
|
368
|
+
const resumeOrderCode = cart.resumable ? cart.orderCode : null;
|
|
369
|
+
if (resumeOrderCode) {
|
|
370
|
+
const conn = (0, vendure_licence_sdk_1.adapterFor)(this.connection.rawConnection);
|
|
371
|
+
await conn.query(`UPDATE abandoned_cart SET recoveryStep = ? WHERE id = ? AND (recoveryStep IS NULL OR recoveryStep IN ('link_issued','link_opened'))`, ['resumed', cart.id]);
|
|
372
|
+
}
|
|
373
|
+
return { ...cart, resumeOrderCode };
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Attribution: the restored cart checked out. Called by the storefront
|
|
377
|
+
* (`POST /ees/recover-cart/converted { t, orderCode }`) from the
|
|
378
|
+
* confirmation page. Token-bound so nobody can mark a stranger's cart
|
|
379
|
+
* converted; the order must exist and be past `AddingItems`.
|
|
380
|
+
*
|
|
381
|
+
* Deliberately ignores token expiry and the row's status — a visitor
|
|
382
|
+
* who opens the link at hour 71 and pays at hour 73 still converted.
|
|
383
|
+
* Idempotent.
|
|
384
|
+
*/
|
|
385
|
+
async markConvertedByToken(token, orderCode) {
|
|
386
|
+
const conn = (0, vendure_licence_sdk_1.adapterFor)(this.connection.rawConnection);
|
|
387
|
+
const t = String(token || '').trim();
|
|
388
|
+
const code = (0, recovery_tokens_1.sanitiseOrderCode)(orderCode);
|
|
389
|
+
if (!t || t.length > 128 || !code)
|
|
390
|
+
return { ok: false, error: 'invalid-token' };
|
|
391
|
+
const rows = await conn.query(`SELECT id, status, convertedOrderCode FROM abandoned_cart WHERE recoveryToken = ? LIMIT 1`, [t]);
|
|
392
|
+
if (!(rows === null || rows === void 0 ? void 0 : rows.length))
|
|
393
|
+
return { ok: false, error: 'invalid-token' };
|
|
394
|
+
const cart = rows[0];
|
|
395
|
+
if (cart.status === 'converted' && cart.convertedOrderCode === code) {
|
|
396
|
+
return { ok: true, cartId: Number(cart.id), orderCode: code, alreadyConverted: true };
|
|
397
|
+
}
|
|
398
|
+
const order = await this.lookupOrder(code);
|
|
399
|
+
if (!order)
|
|
400
|
+
return { ok: false, error: 'order-not-found' };
|
|
401
|
+
if (order.state === 'AddingItems' || order.state === 'Cancelled' || order.state === 'Draft') {
|
|
402
|
+
return { ok: false, error: 'order-not-placed' };
|
|
403
|
+
}
|
|
404
|
+
await conn.query(`UPDATE abandoned_cart
|
|
405
|
+
SET status = 'converted',
|
|
406
|
+
recoveredAt = COALESCE(recoveredAt, NOW(3)),
|
|
407
|
+
convertedAt = COALESCE(convertedAt, NOW(3)),
|
|
408
|
+
convertedOrderId = ?,
|
|
409
|
+
convertedOrderCode = ?,
|
|
410
|
+
recoveryOrderId = COALESCE(recoveryOrderId, ?),
|
|
411
|
+
recoveryStep = 'converted'
|
|
412
|
+
WHERE id = ?`, [order.id, order.code, order.id, cart.id]);
|
|
413
|
+
common_1.Logger.log(`Recovery link converted: cart=${cart.id} order=${order.code}`, loggerCtx);
|
|
414
|
+
return { ok: true, cartId: Number(cart.id), orderCode: order.code, alreadyConverted: false };
|
|
415
|
+
}
|
|
416
|
+
// ── opt-out ─────────────────────────────────────────────────────
|
|
417
|
+
optOutSecret() {
|
|
418
|
+
return this.opts().optOutSecret;
|
|
419
|
+
}
|
|
420
|
+
/** True when the address has asked not to receive recovery emails.
|
|
421
|
+
* Hosts MUST check this before every send. Fail-open on DB errors
|
|
422
|
+
* would mean emailing someone who opted out, so this fails closed. */
|
|
423
|
+
async isOptedOut(email) {
|
|
424
|
+
const e = (0, recovery_tokens_1.normaliseEmail)(email);
|
|
425
|
+
if (!e)
|
|
426
|
+
return false;
|
|
427
|
+
try {
|
|
428
|
+
const conn = (0, vendure_licence_sdk_1.adapterFor)(this.connection.rawConnection);
|
|
429
|
+
const rows = await conn.query(`SELECT 1 AS x FROM abandoned_cart_opt_out WHERE emailHash = ? LIMIT 1`, [(0, recovery_tokens_1.hashEmail)(e)]);
|
|
430
|
+
return !!(rows === null || rows === void 0 ? void 0 : rows.length);
|
|
431
|
+
}
|
|
432
|
+
catch (err) {
|
|
433
|
+
common_1.Logger.warn(`isOptedOut(${e}) failed — treating as opted out: ${err === null || err === void 0 ? void 0 : err.message}`, loggerCtx);
|
|
434
|
+
return true;
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
/** Record an opt-out. Idempotent. Returns false for a malformed email. */
|
|
438
|
+
async optOut(email, meta = {}) {
|
|
439
|
+
var _a;
|
|
440
|
+
const e = (0, recovery_tokens_1.normaliseEmail)(email);
|
|
441
|
+
if (!e)
|
|
442
|
+
return false;
|
|
443
|
+
const conn = (0, vendure_licence_sdk_1.adapterFor)(this.connection.rawConnection);
|
|
444
|
+
await conn.query(`INSERT INTO abandoned_cart_opt_out (emailHash, email, channelId, source, ip, createdAt)
|
|
445
|
+
VALUES (?, ?, ?, ?, ?, NOW(3))
|
|
446
|
+
ON DUPLICATE KEY UPDATE email = VALUES(email)`, [(0, recovery_tokens_1.hashEmail)(e), e, (_a = meta.channelId) !== null && _a !== void 0 ? _a : null, String(meta.source || 'link').slice(0, 32), meta.ip ? String(meta.ip).slice(0, 45) : null], { conflictColumns: ['emailHash'] });
|
|
447
|
+
return true;
|
|
448
|
+
}
|
|
449
|
+
/** Remove an opt-out (admin action after an explicit customer request). */
|
|
450
|
+
async optIn(email) {
|
|
451
|
+
var _a;
|
|
452
|
+
const e = (0, recovery_tokens_1.normaliseEmail)(email);
|
|
453
|
+
if (!e)
|
|
454
|
+
return false;
|
|
455
|
+
const conn = (0, vendure_licence_sdk_1.adapterFor)(this.connection.rawConnection);
|
|
456
|
+
const res = await conn.query(`DELETE FROM abandoned_cart_opt_out WHERE emailHash = ?`, [(0, recovery_tokens_1.hashEmail)(e)], { needAffected: true });
|
|
457
|
+
return Number((_a = res === null || res === void 0 ? void 0 : res.affectedRows) !== null && _a !== void 0 ? _a : 0) > 0;
|
|
458
|
+
}
|
|
459
|
+
async listOptOuts(take = 50, skip = 0) {
|
|
460
|
+
var _a;
|
|
461
|
+
const conn = (0, vendure_licence_sdk_1.adapterFor)(this.connection.rawConnection);
|
|
462
|
+
const [rows, totalRow] = await Promise.all([
|
|
463
|
+
conn.query(`SELECT id, email, channelId, source, createdAt FROM abandoned_cart_opt_out
|
|
464
|
+
ORDER BY createdAt DESC LIMIT ? OFFSET ?`, [take, skip]),
|
|
465
|
+
conn.query(`SELECT COUNT(*) AS c FROM abandoned_cart_opt_out`),
|
|
466
|
+
]);
|
|
467
|
+
return { items: rows, total: Number(((_a = totalRow === null || totalRow === void 0 ? void 0 : totalRow[0]) === null || _a === void 0 ? void 0 : _a.c) || 0) };
|
|
468
|
+
}
|
|
469
|
+
/** Absolute opt-out URL for an email, on the Vendure server's public
|
|
470
|
+
* origin. Null when no secret is configured. */
|
|
471
|
+
buildOptOutLink(email) {
|
|
472
|
+
return (0, recovery_tokens_1.buildOptOutUrl)((0, plugin_1.getOptions)().publicBaseUrl, email, this.optOutSecret());
|
|
473
|
+
}
|
|
474
|
+
/** `List-Unsubscribe` + `List-Unsubscribe-Post` headers for a recovery
|
|
475
|
+
* email to `email`. Null when opt-out links are disabled. */
|
|
476
|
+
buildListUnsubscribeHeaders(email) {
|
|
477
|
+
return (0, recovery_tokens_1.buildListUnsubscribeHeaders)((0, plugin_1.getOptions)().publicBaseUrl, email, this.optOutSecret());
|
|
478
|
+
}
|
|
479
|
+
/** Exposed for the controller — verifies an `e=` token. */
|
|
480
|
+
getOptOutSecret() {
|
|
481
|
+
return this.optOutSecret();
|
|
482
|
+
}
|
|
483
|
+
// ── attribution ─────────────────────────────────────────────────
|
|
484
|
+
/** Recovery-link funnel for the admin summary: how many carts got a
|
|
485
|
+
* link, how many opened it, resumed, converted — and the value of
|
|
486
|
+
* the carts the link brought back. */
|
|
487
|
+
async attributionSummary(since) {
|
|
488
|
+
var _a;
|
|
489
|
+
const conn = (0, vendure_licence_sdk_1.adapterFor)(this.connection.rawConnection);
|
|
490
|
+
const rows = await conn.query(`SELECT
|
|
491
|
+
SUM(CASE WHEN recoveryStep IS NOT NULL THEN 1 ELSE 0 END) AS linkIssued,
|
|
492
|
+
SUM(CASE WHEN recoveryStep IN ('link_opened','resumed','converted') THEN 1 ELSE 0 END) AS linkOpened,
|
|
493
|
+
SUM(CASE WHEN recoveryStep IN ('resumed','converted') THEN 1 ELSE 0 END) AS resumed,
|
|
494
|
+
SUM(CASE WHEN recoveryStep = 'converted' THEN 1 ELSE 0 END) AS convertedViaLink,
|
|
495
|
+
SUM(CASE WHEN recoveryStep = 'converted' THEN totalMinor ELSE 0 END) AS convertedViaLinkValueMinor,
|
|
496
|
+
SUM(CASE WHEN status = 'converted' THEN 1 ELSE 0 END) AS convertedTotal
|
|
497
|
+
FROM abandoned_cart
|
|
498
|
+
WHERE abandonedAt >= ?`, [since]);
|
|
499
|
+
let optOuts = 0;
|
|
500
|
+
try {
|
|
501
|
+
const o = await conn.query(`SELECT COUNT(*) AS c FROM abandoned_cart_opt_out WHERE createdAt >= ?`, [since]);
|
|
502
|
+
optOuts = Number(((_a = o === null || o === void 0 ? void 0 : o[0]) === null || _a === void 0 ? void 0 : _a.c) || 0);
|
|
503
|
+
}
|
|
504
|
+
catch { /* table missing on a very old install — reported as 0 */ }
|
|
505
|
+
const s = (rows === null || rows === void 0 ? void 0 : rows[0]) || {};
|
|
506
|
+
return {
|
|
507
|
+
linkIssued: Number(s.linkIssued || 0),
|
|
508
|
+
linkOpened: Number(s.linkOpened || 0),
|
|
509
|
+
resumed: Number(s.resumed || 0),
|
|
510
|
+
convertedViaLink: Number(s.convertedViaLink || 0),
|
|
511
|
+
convertedViaLinkValueMinor: Number(s.convertedViaLinkValueMinor || 0),
|
|
512
|
+
convertedTotal: Number(s.convertedTotal || 0),
|
|
513
|
+
optOuts,
|
|
514
|
+
};
|
|
515
|
+
}
|
|
516
|
+
// ── order lookup ────────────────────────────────────────────────
|
|
517
|
+
async lookupOrder(code) {
|
|
518
|
+
const c = (0, recovery_tokens_1.sanitiseOrderCode)(code);
|
|
519
|
+
if (!c)
|
|
520
|
+
return null;
|
|
521
|
+
const conn = (0, vendure_licence_sdk_1.adapterFor)(this.connection.rawConnection);
|
|
522
|
+
try {
|
|
523
|
+
const rows = await conn.query('SELECT o.id, o.code, o.state, oc.channelId AS channelId\n' +
|
|
524
|
+
'FROM `order` o LEFT JOIN order_channels_channel oc ON oc.orderId = o.id\n' +
|
|
525
|
+
'WHERE o.code = ? LIMIT 1', [c]);
|
|
526
|
+
if (!(rows === null || rows === void 0 ? void 0 : rows.length))
|
|
527
|
+
return null;
|
|
528
|
+
const r = rows[0];
|
|
529
|
+
return { id: Number(r.id), code: String(r.code), state: String(r.state), channelId: r.channelId == null ? null : Number(r.channelId) };
|
|
530
|
+
}
|
|
531
|
+
catch (e) {
|
|
532
|
+
common_1.Logger.warn(`Order lookup for ${c} failed: ${e === null || e === void 0 ? void 0 : e.message}`, loggerCtx);
|
|
533
|
+
return null;
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
async buildRecoveredCart(r) {
|
|
537
|
+
var _a, _b;
|
|
277
538
|
let items = [];
|
|
278
539
|
try {
|
|
279
540
|
items = JSON.parse(r.itemsJson || '[]');
|
|
280
541
|
}
|
|
281
542
|
catch { }
|
|
282
|
-
|
|
543
|
+
const orderCode = (0, recovery_tokens_1.sanitiseOrderCode)(r.resumeOrderCode) || null;
|
|
544
|
+
let orderState = null;
|
|
545
|
+
if (orderCode) {
|
|
546
|
+
const order = await this.lookupOrder(orderCode);
|
|
547
|
+
orderState = (_a = order === null || order === void 0 ? void 0 : order.state) !== null && _a !== void 0 ? _a : null;
|
|
548
|
+
}
|
|
549
|
+
return {
|
|
550
|
+
id: Number(r.id),
|
|
551
|
+
currency: String(r.currency || 'GBP'),
|
|
552
|
+
items,
|
|
553
|
+
email: (_b = r.email) !== null && _b !== void 0 ? _b : null,
|
|
554
|
+
orderCode,
|
|
555
|
+
orderState,
|
|
556
|
+
resumable: !!orderCode && (0, recovery_tokens_1.isResumableOrderState)(orderState),
|
|
557
|
+
channelId: Number(r.channelId || 1),
|
|
558
|
+
};
|
|
283
559
|
}
|
|
284
560
|
async markStatus(cartId, status) {
|
|
285
561
|
var _a;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abandoned-cart.service.js","sourceRoot":"","sources":["../src/abandoned-cart.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"abandoned-cart.service.js","sourceRoot":"","sources":["../src/abandoned-cart.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hulo-storefront.d.ts","sourceRoot":"","sources":["../src/hulo-storefront.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,kBAAkB,GAAI,gBAAgB,MAAM,EAAE,yBAAoB,KAAG,
|
|
1
|
+
{"version":3,"file":"hulo-storefront.d.ts","sourceRoot":"","sources":["../src/hulo-storefront.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,kBAAkB,GAAI,gBAAgB,MAAM,EAAE,yBAAoB,KAAG,MAgUjF,CAAC"}
|
package/dist/hulo-storefront.js
CHANGED
|
@@ -23,6 +23,7 @@ const HULO_STOREFRONT_JS = (backendBaseUrl, defaultChannelId = 1) => `
|
|
|
23
23
|
var CONFIG = {
|
|
24
24
|
endpoint: ${JSON.stringify(backendBaseUrl.replace(/\/$/, '') + '/ees/track')},
|
|
25
25
|
recoverEndpoint: ${JSON.stringify(backendBaseUrl.replace(/\/$/, '') + '/ees/recover-cart')},
|
|
26
|
+
recoveryTokenKey: 'hulo_recovery_token',
|
|
26
27
|
channelId: ${defaultChannelId},
|
|
27
28
|
debug: false,
|
|
28
29
|
autoRageClick: true,
|
|
@@ -202,12 +203,63 @@ const HULO_STOREFRONT_JS = (backendBaseUrl, defaultChannelId = 1) => `
|
|
|
202
203
|
restoreCart: function (token) {
|
|
203
204
|
var t = String(token || '').trim();
|
|
204
205
|
if (!t) return Promise.reject(new Error('missing-token'));
|
|
206
|
+
rememberRecoveryToken(t);
|
|
205
207
|
return fetch(CONFIG.recoverEndpoint + '?t=' + encodeURIComponent(t), {
|
|
206
208
|
credentials: 'include',
|
|
207
209
|
}).then(function (r) { return r.json(); });
|
|
208
210
|
},
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Like restoreCart, but asks the backend to resume the exact order
|
|
214
|
+
* the link was bound to. The response carries resumeOrderCode
|
|
215
|
+
* (non-null only while that order is still open) alongside the usual
|
|
216
|
+
* items — fall back to re-adding the items when it is null.
|
|
217
|
+
*/
|
|
218
|
+
resumeCart: function (token) {
|
|
219
|
+
var t = String(token || '').trim();
|
|
220
|
+
if (!t) return Promise.reject(new Error('missing-token'));
|
|
221
|
+
rememberRecoveryToken(t);
|
|
222
|
+
return fetch(CONFIG.recoverEndpoint + '/resume?t=' + encodeURIComponent(t), {
|
|
223
|
+
method: 'POST',
|
|
224
|
+
credentials: 'include',
|
|
225
|
+
headers: { 'content-type': 'application/json' },
|
|
226
|
+
body: '{}',
|
|
227
|
+
}).then(function (r) { return r.json(); });
|
|
228
|
+
},
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* Attribution: call from the thank-you page with the placed order's
|
|
232
|
+
* code. Uses the recovery token remembered by restoreCart /
|
|
233
|
+
* resumeCart (sessionStorage), so it is a no-op for visitors who did
|
|
234
|
+
* not arrive through a recovery link. Resolves to null in that case.
|
|
235
|
+
*/
|
|
236
|
+
recoveryConverted: function (orderCode, token) {
|
|
237
|
+
var t = String(token || readRecoveryToken() || '').trim();
|
|
238
|
+
var code = String(orderCode || '').trim();
|
|
239
|
+
if (!t || !code) return Promise.resolve(null);
|
|
240
|
+
return fetch(CONFIG.recoverEndpoint + '/converted', {
|
|
241
|
+
method: 'POST',
|
|
242
|
+
credentials: 'include',
|
|
243
|
+
keepalive: true,
|
|
244
|
+
headers: { 'content-type': 'application/json' },
|
|
245
|
+
body: JSON.stringify({ t: t, orderCode: code }),
|
|
246
|
+
}).then(function (r) { return r.json(); }).then(function (j) {
|
|
247
|
+
if (j && j.ok) forgetRecoveryToken();
|
|
248
|
+
return j;
|
|
249
|
+
}).catch(function () { return null; });
|
|
250
|
+
},
|
|
209
251
|
};
|
|
210
252
|
|
|
253
|
+
function rememberRecoveryToken(t) {
|
|
254
|
+
try { sessionStorage.setItem(CONFIG.recoveryTokenKey, t); } catch (_e) {}
|
|
255
|
+
}
|
|
256
|
+
function readRecoveryToken() {
|
|
257
|
+
try { return sessionStorage.getItem(CONFIG.recoveryTokenKey); } catch (_e) { return null; }
|
|
258
|
+
}
|
|
259
|
+
function forgetRecoveryToken() {
|
|
260
|
+
try { sessionStorage.removeItem(CONFIG.recoveryTokenKey); } catch (_e) {}
|
|
261
|
+
}
|
|
262
|
+
|
|
211
263
|
// ── auto rage-click detector ─────────────────────────────────────
|
|
212
264
|
// Any pointerdown ≥ 3 within 500ms in a 20x20px zone counts.
|
|
213
265
|
if (CONFIG.autoRageClick) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hulo-storefront.js","sourceRoot":"","sources":["../src/hulo-storefront.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;GAcG;AACI,MAAM,kBAAkB,GAAG,CAAC,cAAsB,EAAE,gBAAgB,GAAG,CAAC,EAAU,EAAE,CAAC;;;;;gBAK5E,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,YAAY,CAAC;uBACzD,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,mBAAmB,CAAC
|
|
1
|
+
{"version":3,"file":"hulo-storefront.js","sourceRoot":"","sources":["../src/hulo-storefront.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;GAcG;AACI,MAAM,kBAAkB,GAAG,CAAC,cAAsB,EAAE,gBAAgB,GAAG,CAAC,EAAU,EAAE,CAAC;;;;;gBAK5E,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,YAAY,CAAC;uBACzD,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,mBAAmB,CAAC;;iBAE7E,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwThC,CAAC;AAhUW,QAAA,kBAAkB,sBAgU7B"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,7 +6,8 @@ export { VisitorTrackingService } from './visitor-tracking.service';
|
|
|
6
6
|
export { VisitorEvent } from './visitor-event.entity';
|
|
7
7
|
export { AbandonedCart, AbandonedCartStatus } from './abandoned-cart.entity';
|
|
8
8
|
export { ProductCoView } from './product-co-view.entity';
|
|
9
|
-
export { AbandonedCartService, CartSnapshotMeta, AbandonmentOptions, } from './abandoned-cart.service';
|
|
9
|
+
export { AbandonedCartService, CartSnapshotMeta, AbandonmentOptions, IssueRecoveryLinkOptions, RecoveredCart, ResumedCart, } from './abandoned-cart.service';
|
|
10
|
+
export { RecoveryStep, RESUMABLE_ORDER_STATES, isResumableOrderState, advanceRecoveryStep, normaliseEmail, hashEmail, buildOptOutToken, verifyOptOutToken, buildOptOutUrl, buildListUnsubscribeHeaders, } from './recovery-tokens';
|
|
10
11
|
export { RecommendationsService, RecommendedProduct } from './recommendations.service';
|
|
11
12
|
export { SearchAnalyticsService } from './search-analytics.service';
|
|
12
13
|
export { JourneyBuffsService } from './journey-buffs.service';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,MAAM,UAAU,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EACH,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,MAAM,UAAU,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EACH,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,EAClB,wBAAwB,EACxB,aAAa,EACb,WAAW,GACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACH,YAAY,EACZ,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,2BAA2B,GAC9B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACvF,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* `@huloglobal/vendure-plugin-visitor-analytics` — public exports.
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.JourneyBuffsService = exports.SearchAnalyticsService = exports.RecommendationsService = exports.AbandonedCartService = exports.ProductCoView = exports.AbandonedCart = exports.VisitorEvent = exports.VisitorTrackingService = exports.VisitorAnalyticsPlugin = void 0;
|
|
6
|
+
exports.JourneyBuffsService = exports.SearchAnalyticsService = exports.RecommendationsService = exports.buildListUnsubscribeHeaders = exports.buildOptOutUrl = exports.verifyOptOutToken = exports.buildOptOutToken = exports.hashEmail = exports.normaliseEmail = exports.advanceRecoveryStep = exports.isResumableOrderState = exports.RESUMABLE_ORDER_STATES = exports.AbandonedCartService = exports.ProductCoView = exports.AbandonedCart = exports.VisitorEvent = exports.VisitorTrackingService = exports.VisitorAnalyticsPlugin = void 0;
|
|
7
7
|
var plugin_1 = require("./plugin");
|
|
8
8
|
Object.defineProperty(exports, "VisitorAnalyticsPlugin", { enumerable: true, get: function () { return plugin_1.VisitorAnalyticsPlugin; } });
|
|
9
9
|
var visitor_tracking_service_1 = require("./visitor-tracking.service");
|
|
@@ -16,6 +16,16 @@ var product_co_view_entity_1 = require("./product-co-view.entity");
|
|
|
16
16
|
Object.defineProperty(exports, "ProductCoView", { enumerable: true, get: function () { return product_co_view_entity_1.ProductCoView; } });
|
|
17
17
|
var abandoned_cart_service_1 = require("./abandoned-cart.service");
|
|
18
18
|
Object.defineProperty(exports, "AbandonedCartService", { enumerable: true, get: function () { return abandoned_cart_service_1.AbandonedCartService; } });
|
|
19
|
+
var recovery_tokens_1 = require("./recovery-tokens");
|
|
20
|
+
Object.defineProperty(exports, "RESUMABLE_ORDER_STATES", { enumerable: true, get: function () { return recovery_tokens_1.RESUMABLE_ORDER_STATES; } });
|
|
21
|
+
Object.defineProperty(exports, "isResumableOrderState", { enumerable: true, get: function () { return recovery_tokens_1.isResumableOrderState; } });
|
|
22
|
+
Object.defineProperty(exports, "advanceRecoveryStep", { enumerable: true, get: function () { return recovery_tokens_1.advanceRecoveryStep; } });
|
|
23
|
+
Object.defineProperty(exports, "normaliseEmail", { enumerable: true, get: function () { return recovery_tokens_1.normaliseEmail; } });
|
|
24
|
+
Object.defineProperty(exports, "hashEmail", { enumerable: true, get: function () { return recovery_tokens_1.hashEmail; } });
|
|
25
|
+
Object.defineProperty(exports, "buildOptOutToken", { enumerable: true, get: function () { return recovery_tokens_1.buildOptOutToken; } });
|
|
26
|
+
Object.defineProperty(exports, "verifyOptOutToken", { enumerable: true, get: function () { return recovery_tokens_1.verifyOptOutToken; } });
|
|
27
|
+
Object.defineProperty(exports, "buildOptOutUrl", { enumerable: true, get: function () { return recovery_tokens_1.buildOptOutUrl; } });
|
|
28
|
+
Object.defineProperty(exports, "buildListUnsubscribeHeaders", { enumerable: true, get: function () { return recovery_tokens_1.buildListUnsubscribeHeaders; } });
|
|
19
29
|
var recommendations_service_1 = require("./recommendations.service");
|
|
20
30
|
Object.defineProperty(exports, "RecommendationsService", { enumerable: true, get: function () { return recommendations_service_1.RecommendationsService; } });
|
|
21
31
|
var search_analytics_service_1 = require("./search-analytics.service");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,mCAAiF;AAAxE,gHAAA,sBAAsB,OAAA;AAC/B,uEAAoE;AAA3D,kIAAA,sBAAsB,OAAA;AAC/B,+DAAsD;AAA7C,oHAAA,YAAY,OAAA;AACrB,iEAA6E;AAApE,sHAAA,aAAa,OAAA;AACtB,mEAAyD;AAAhD,uHAAA,aAAa,OAAA;AACtB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,mCAAiF;AAAxE,gHAAA,sBAAsB,OAAA;AAC/B,uEAAoE;AAA3D,kIAAA,sBAAsB,OAAA;AAC/B,+DAAsD;AAA7C,oHAAA,YAAY,OAAA;AACrB,iEAA6E;AAApE,sHAAA,aAAa,OAAA;AACtB,mEAAyD;AAAhD,uHAAA,aAAa,OAAA;AACtB,mEAOkC;AAN9B,8HAAA,oBAAoB,OAAA;AAOxB,qDAW2B;AATvB,yHAAA,sBAAsB,OAAA;AACtB,wHAAA,qBAAqB,OAAA;AACrB,sHAAA,mBAAmB,OAAA;AACnB,iHAAA,cAAc,OAAA;AACd,4GAAA,SAAS,OAAA;AACT,mHAAA,gBAAgB,OAAA;AAChB,oHAAA,iBAAiB,OAAA;AACjB,iHAAA,cAAc,OAAA;AACd,8HAAA,2BAA2B,OAAA;AAE/B,qEAAuF;AAA9E,iIAAA,sBAAsB,OAAA;AAC/B,uEAAoE;AAA3D,kIAAA,sBAAsB,OAAA;AAC/B,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure helpers behind the cart-recovery attribution + opt-out features
|
|
3
|
+
* (0.18.0). No I/O — everything here is unit-tested in isolation.
|
|
4
|
+
*/
|
|
5
|
+
/** Vendure order states from which a customer can still pick up the same
|
|
6
|
+
* order (the storefront can add items / arrange payment). Anything later —
|
|
7
|
+
* `PaymentAuthorized`, `PaymentSettled`, `Cancelled`, … — is a finished or
|
|
8
|
+
* dead order and the storefront should rebuild a fresh cart instead. */
|
|
9
|
+
export declare const RESUMABLE_ORDER_STATES: ReadonlyArray<string>;
|
|
10
|
+
export declare function isResumableOrderState(state: string | null | undefined): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Where a recovery link got to. Monotonic — a step never moves backwards,
|
|
13
|
+
* so the admin can read a funnel straight off the column:
|
|
14
|
+
*
|
|
15
|
+
* link_issued → link_opened → resumed → converted
|
|
16
|
+
*/
|
|
17
|
+
export type RecoveryStep = 'link_issued' | 'link_opened' | 'resumed' | 'converted';
|
|
18
|
+
export declare function recoveryStepRank(step: string | null | undefined): number;
|
|
19
|
+
/** Returns the later of `current` and `target`; never regresses. Unknown
|
|
20
|
+
* values in `current` (legacy rows, hand edits) are treated as "no step". */
|
|
21
|
+
export declare function advanceRecoveryStep(current: string | null | undefined, target: RecoveryStep): RecoveryStep;
|
|
22
|
+
/** Lower-cased, trimmed. Returns '' for anything that is not an email. */
|
|
23
|
+
export declare function normaliseEmail(raw: string | null | undefined): string;
|
|
24
|
+
/** SHA-256 hex of the normalised email — the same hash `abandoned_cart.emailHash`
|
|
25
|
+
* stores, so opt-outs can be matched without keeping the raw address. */
|
|
26
|
+
export declare function hashEmail(email: string): string;
|
|
27
|
+
/**
|
|
28
|
+
* Opt-out token: `<base64url(email)>.<base64url(hmac-sha256(secret, email))>`.
|
|
29
|
+
* Self-describing so the endpoint needs no DB lookup to know *who* is opting
|
|
30
|
+
* out, and unforgeable so a third party cannot unsubscribe someone else.
|
|
31
|
+
* Returns null when there is no secret (feature disabled) or the email is
|
|
32
|
+
* malformed.
|
|
33
|
+
*/
|
|
34
|
+
export declare function buildOptOutToken(email: string, secret: string): string | null;
|
|
35
|
+
/** Inverse of `buildOptOutToken`. Returns the normalised email on success,
|
|
36
|
+
* null on any failure (bad shape, bad MAC, wrong secret). Constant-time
|
|
37
|
+
* MAC comparison. */
|
|
38
|
+
export declare function verifyOptOutToken(token: string | null | undefined, secret: string): string | null;
|
|
39
|
+
/** Build the absolute opt-out URL for an email. `backendBaseUrl` is the
|
|
40
|
+
* Vendure server's public origin (the endpoint lives on the API, not the
|
|
41
|
+
* storefront). */
|
|
42
|
+
export declare function buildOptOutUrl(backendBaseUrl: string, email: string, secret: string): string | null;
|
|
43
|
+
/**
|
|
44
|
+
* Headers a mailer should add to every abandoned-cart email so Gmail /
|
|
45
|
+
* Outlook / Yahoo render their native "Unsubscribe" affordance
|
|
46
|
+
* (RFC 2369 + RFC 8058 one-click). Returns null when opt-out links are
|
|
47
|
+
* disabled.
|
|
48
|
+
*/
|
|
49
|
+
export declare function buildListUnsubscribeHeaders(backendBaseUrl: string, email: string, secret: string): {
|
|
50
|
+
'List-Unsubscribe': string;
|
|
51
|
+
'List-Unsubscribe-Post': string;
|
|
52
|
+
} | null;
|
|
53
|
+
/** Order codes are Vendure-generated (16 upper-case alphanumerics by default)
|
|
54
|
+
* but hosts can override the generator, so accept a generous safe subset. */
|
|
55
|
+
export declare function sanitiseOrderCode(raw: string | null | undefined): string;
|
|
56
|
+
//# sourceMappingURL=recovery-tokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recovery-tokens.d.ts","sourceRoot":"","sources":["../src/recovery-tokens.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAEH;;;yEAGyE;AACzE,eAAO,MAAM,sBAAsB,EAAE,aAAa,CAAC,MAAM,CAAuC,CAAC;AAEjG,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAE/E;AAED;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,aAAa,GAAG,SAAS,GAAG,WAAW,CAAC;AAInF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAGxE;AAED;8EAC8E;AAC9E,wBAAgB,mBAAmB,CAC/B,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAClC,MAAM,EAAE,YAAY,GACrB,YAAY,CAId;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAIrE;AAED;0EAC0E;AAC1E,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AAUD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI7E;AAED;;sBAEsB;AACtB,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgBjG;AAED;;mBAEmB;AACnB,wBAAgB,cAAc,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAInG;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACvC,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACf;IAAE,kBAAkB,EAAE,MAAM,CAAC;IAAC,uBAAuB,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAOxE;AAED;8EAC8E;AAC9E,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAGxE"}
|