work-license-server 1.0.19 → 1.0.21
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/assets/ODANT-WORK-presentation.html +1683 -0
- package/assets/ODANT-WORK-presentation.pdf +0 -0
- package/assets/landing.css +83 -0
- package/assets/landing.js +528 -41
- package/package.json +1 -1
- package/src/catalog.js +1 -1
- package/src/landing.js +141 -5
- package/src/server.js +36 -1
- package/src/store.js +201 -32
package/package.json
CHANGED
package/src/catalog.js
CHANGED
|
@@ -315,7 +315,7 @@ export function calculateOrderQuote({
|
|
|
315
315
|
const discSuffix = volumeDiscountPercent > 0 ? `, скидка −${volumeDiscountPercent}% за объём` : '';
|
|
316
316
|
items.push({
|
|
317
317
|
sku: `WORK-LIC-ADDON-${tierSpec.id.toUpperCase()}`,
|
|
318
|
-
title:
|
|
318
|
+
title: `Дополнительные лицензии ODANT-WORK: ${seats} раб. мест × ${periodYears} г. (уровень ${tierSpec.name}, ${effectiveUnitPriceRub.toLocaleString('ru-RU')} ₽/место${discSuffix})`,
|
|
319
319
|
quantity: seats,
|
|
320
320
|
unitPriceRub: effectiveUnitPriceRub,
|
|
321
321
|
totalRub: addonsAmountRub,
|
package/src/landing.js
CHANGED
|
@@ -200,7 +200,13 @@ export function renderLandingPage({ publicKey = '', regions = null, assetVersion
|
|
|
200
200
|
<span class="kicker">Платформа цифровой организации</span>
|
|
201
201
|
<h1 class="h2" style="font-size:clamp(1.9rem,3vw,2.6rem);margin:4px 0 0">ODANT-WORK — учёт, документооборот, процессы и <span class="grad">приватный ИИ</span></h1>
|
|
202
202
|
</div>
|
|
203
|
-
<
|
|
203
|
+
<div>
|
|
204
|
+
<p style="margin:0 0 12px">Все данные предприятия — справочники, проводки, документы, переписка и задачи — живут в единой модели с общими правами доступа и работают автономно в вашем контуре без передачи данных наружу.</p>
|
|
205
|
+
<div style="display:flex;gap:10px;flex-wrap:wrap">
|
|
206
|
+
<button type="button" class="btn btn-primary btn-sm" data-action="open-presentation" data-slide="1">${icon('docs')} Смотреть презентацию (12 слайдов)</button>
|
|
207
|
+
<a class="btn btn-ghost btn-sm" href="/assets/ODANT-WORK-presentation.pdf" download="ODANT-WORK-presentation.pdf" style="text-decoration:none">📥 Скачать PDF</a>
|
|
208
|
+
</div>
|
|
209
|
+
</div>
|
|
204
210
|
</div>
|
|
205
211
|
|
|
206
212
|
<div class="bento">
|
|
@@ -262,9 +268,10 @@ export function renderLandingPage({ publicKey = '', regions = null, assetVersion
|
|
|
262
268
|
<h2 class="h2">ODANT-WORK · ${esc(P.sku)}</h2>
|
|
263
269
|
<div class="price-big">${rub(P.basePriceRub)}</div>
|
|
264
270
|
<p class="note">Вечная лицензия на ${P.baseSeats} одновременных рабочих сессий и ${P.includedSupportYears} год поддержки уровня Enterprise — в комплекте с сервером (или ${rub(P.baseLicensePriceRub || 4_000_000)} за базовую лицензию без оборудования при установке через <code>npm</code>).</p>
|
|
265
|
-
<div class="hero-cta" style="margin-top:20px">
|
|
271
|
+
<div class="hero-cta" style="margin-top:20px;display:flex;gap:10px;flex-wrap:wrap">
|
|
266
272
|
<button class="btn btn-primary" data-stage="clients">Перейти к покупке →</button>
|
|
267
273
|
<button class="btn btn-ghost" data-stage="franchise">Региональная франшиза</button>
|
|
274
|
+
<button class="btn btn-ghost" data-action="open-presentation" data-slide="1">${icon('docs')} Презентация</button>
|
|
268
275
|
</div>
|
|
269
276
|
</div>
|
|
270
277
|
<dl class="spec">
|
|
@@ -332,7 +339,13 @@ export function renderLandingPage({ publicKey = '', regions = null, assetVersion
|
|
|
332
339
|
<span class="kicker">Тарифы поддержки и конкурентных мест</span>
|
|
333
340
|
<h2 class="h2">Условия лицензирования и SLA</h2>
|
|
334
341
|
</div>
|
|
335
|
-
<
|
|
342
|
+
<div>
|
|
343
|
+
<p style="margin:0 0 12px">Сразу после установки из <code>npm</code> система работает бесплатно в режиме настройки (1 сессия BOSS, ИИ-агенты отключены). Базовая постоянная лицензия открывает <b>${P.baseSeats} вечных одновременных сессий</b> и включает агентскую ИИ-систему.</p>
|
|
344
|
+
<div style="display:flex;gap:10px;flex-wrap:wrap">
|
|
345
|
+
<button type="button" class="btn btn-ghost btn-sm" data-action="open-presentation" data-slide="8">${icon('docs')} Презентация для клиентов (слайд 8)</button>
|
|
346
|
+
<a class="btn btn-ghost btn-sm" href="/assets/ODANT-WORK-presentation.pdf" download="ODANT-WORK-presentation.pdf" style="text-decoration:none">📥 Скачать PDF</a>
|
|
347
|
+
</div>
|
|
348
|
+
</div>
|
|
336
349
|
</div>
|
|
337
350
|
<div class="tiers">${renderTiers()}</div>
|
|
338
351
|
</section>
|
|
@@ -343,6 +356,8 @@ export function renderLandingPage({ publicKey = '', regions = null, assetVersion
|
|
|
343
356
|
<aside class="sec-nav" aria-label="Разделы Личного кабинета">
|
|
344
357
|
<button type="button" class="sec-nav-item active" data-cab-tab="servers" id="navCabServers">Серверы и устройства (0)</button>
|
|
345
358
|
<button type="button" class="sec-nav-item" data-cab-tab="franchises" id="navCabFranchises">Региональные франшизы (0)</button>
|
|
359
|
+
<div class="sec-nav-sep"></div>
|
|
360
|
+
<button type="button" class="sec-nav-item" data-cab-tab="requisites" id="navCabRequisites">Реквизиты организации</button>
|
|
346
361
|
</aside>
|
|
347
362
|
|
|
348
363
|
<div class="sec-main">
|
|
@@ -368,6 +383,77 @@ export function renderLandingPage({ publicKey = '', regions = null, assetVersion
|
|
|
368
383
|
</div>
|
|
369
384
|
<div class="sec-box" id="cabinetFranchisesRegistry"></div>
|
|
370
385
|
</div>
|
|
386
|
+
|
|
387
|
+
<!-- 1.3 РЕКВИЗИТЫ ОРГАНИЗАЦИИ (ЮРЛИЦА / ИП) ДЛЯ СЧЕТОВ И ДОГОВОРОВ -->
|
|
388
|
+
<div id="cabSecRequisites" style="display:none">
|
|
389
|
+
<div class="sec-bar" style="margin-bottom:12px">
|
|
390
|
+
<h2 class="sec-title">Реквизиты организации (Лицензиата)</h2>
|
|
391
|
+
<div class="sec-controls">
|
|
392
|
+
<button type="button" class="btn btn-primary btn-sm" data-action="save-requisites">Сохранить реквизиты</button>
|
|
393
|
+
</div>
|
|
394
|
+
</div>
|
|
395
|
+
<div class="sec-box">
|
|
396
|
+
<div class="sec-item">
|
|
397
|
+
<div class="small muted" style="margin-bottom:14px">
|
|
398
|
+
Сохранённые реквизиты автоматически подставляются во все счета-договоры и закрывающие документы в Личном кабинете.
|
|
399
|
+
</div>
|
|
400
|
+
<div class="grid g2" style="gap:14px">
|
|
401
|
+
<div class="field" style="margin:0">
|
|
402
|
+
<label for="reqCompanyName">Наименование организации / ИП *</label>
|
|
403
|
+
<input type="text" id="reqCompanyName" placeholder="ООО «Маслоторг»">
|
|
404
|
+
</div>
|
|
405
|
+
<div style="display:grid;grid-template-columns:1fr 1fr;gap:10px">
|
|
406
|
+
<div class="field" style="margin:0">
|
|
407
|
+
<label for="reqInn">ИНН *</label>
|
|
408
|
+
<input type="text" id="reqInn" placeholder="10 или 12 цифр" maxlength="12">
|
|
409
|
+
</div>
|
|
410
|
+
<div class="field" style="margin:0">
|
|
411
|
+
<label for="reqKpp">КПП (для ООО)</label>
|
|
412
|
+
<input type="text" id="reqKpp" placeholder="9 цифр" maxlength="9">
|
|
413
|
+
</div>
|
|
414
|
+
</div>
|
|
415
|
+
<div class="field" style="margin:0;grid-column:1 / -1">
|
|
416
|
+
<label for="reqLegalAddress">Юридический адрес</label>
|
|
417
|
+
<input type="text" id="reqLegalAddress" placeholder="Индекс, город, улица, дом, офис">
|
|
418
|
+
</div>
|
|
419
|
+
<div class="field" style="margin:0">
|
|
420
|
+
<label for="reqSignerPosition">Должность руководителя (подписанта)</label>
|
|
421
|
+
<input type="text" id="reqSignerPosition" placeholder="Генеральный директор">
|
|
422
|
+
</div>
|
|
423
|
+
<div class="field" style="margin:0">
|
|
424
|
+
<label for="reqSignerName">ФИО руководителя (подписанта)</label>
|
|
425
|
+
<input type="text" id="reqSignerName" placeholder="Иванов Иван Иванович">
|
|
426
|
+
</div>
|
|
427
|
+
<div class="field" style="margin:0">
|
|
428
|
+
<label for="reqBankName">Наименование банка</label>
|
|
429
|
+
<input type="text" id="reqBankName" placeholder="ПАО Сбербанк">
|
|
430
|
+
</div>
|
|
431
|
+
<div style="display:grid;grid-template-columns:1fr 1fr;gap:10px">
|
|
432
|
+
<div class="field" style="margin:0">
|
|
433
|
+
<label for="reqBik">БИК</label>
|
|
434
|
+
<input type="text" id="reqBik" placeholder="9 цифр" maxlength="9">
|
|
435
|
+
</div>
|
|
436
|
+
<div class="field" style="margin:0">
|
|
437
|
+
<label for="reqPhone">Контактный телефон</label>
|
|
438
|
+
<input type="text" id="reqPhone" placeholder="+7 (___) ___-__-__">
|
|
439
|
+
</div>
|
|
440
|
+
</div>
|
|
441
|
+
<div class="field" style="margin:0">
|
|
442
|
+
<label for="reqBankAccount">Расчётный счёт (р/с)</label>
|
|
443
|
+
<input type="text" id="reqBankAccount" placeholder="40702810..." maxlength="20">
|
|
444
|
+
</div>
|
|
445
|
+
<div class="field" style="margin:0">
|
|
446
|
+
<label for="reqCorrAccount">Корреспондентский счёт (к/с)</label>
|
|
447
|
+
<input type="text" id="reqCorrAccount" placeholder="30101810..." maxlength="20">
|
|
448
|
+
</div>
|
|
449
|
+
</div>
|
|
450
|
+
<div style="display:flex;align-items:center;justify-content:space-between;margin-top:16px;gap:12px;flex-wrap:wrap">
|
|
451
|
+
<div class="small" id="reqSaveStatus" style="color:var(--ok);font-weight:600"></div>
|
|
452
|
+
<button type="button" class="btn btn-primary" data-action="save-requisites">Сохранить реквизиты в Личном кабинете</button>
|
|
453
|
+
</div>
|
|
454
|
+
</div>
|
|
455
|
+
</div>
|
|
456
|
+
</div>
|
|
371
457
|
</div>
|
|
372
458
|
</div>
|
|
373
459
|
</section>
|
|
@@ -428,7 +514,13 @@ export function renderLandingPage({ publicKey = '', regions = null, assetVersion
|
|
|
428
514
|
|
|
429
515
|
<div class="sec-head" style="margin-top:8px">
|
|
430
516
|
<div><span class="kicker">Партнёрская программа</span><h2 class="h2">Условия региональной франшизы ODANT-WORK</h2></div>
|
|
431
|
-
<
|
|
517
|
+
<div>
|
|
518
|
+
<p style="margin:0 0 12px">Число франшиз в субъекте пропорционально населению, паушальный взнос — экономике региона. Резерв закрепляется сразу после невозвратного залога ${rub(FRANCHISE_PROGRAM.reservationDepositRub)}, полная оплата паушального взноса — в течение 1 года.</p>
|
|
519
|
+
<div style="display:flex;gap:10px;flex-wrap:wrap">
|
|
520
|
+
<button type="button" class="btn btn-ghost btn-sm" data-action="open-presentation" data-slide="10">${icon('docs')} Презентация франшизы (слайд 10)</button>
|
|
521
|
+
<a class="btn btn-ghost btn-sm" href="/assets/ODANT-WORK-presentation.pdf" download="ODANT-WORK-presentation.pdf" style="text-decoration:none">📥 Скачать PDF</a>
|
|
522
|
+
</div>
|
|
523
|
+
</div>
|
|
432
524
|
</div>
|
|
433
525
|
|
|
434
526
|
<div class="split">
|
|
@@ -475,7 +567,7 @@ export function renderLandingPage({ publicKey = '', regions = null, assetVersion
|
|
|
475
567
|
<h4>${esc(VENDOR_CONTACTS.company)}</h4>
|
|
476
568
|
<p>${esc(VENDOR_CONTACTS.address)}</p>
|
|
477
569
|
<p>${VENDOR_CONTACTS.phones.map(esc).join(', ')}</p>
|
|
478
|
-
<p><a href="${esc(VENDOR_CONTACTS.site)}" target="_blank" rel="noopener">${esc(VENDOR_CONTACTS.site.replace(/^https?:\/\//, ''))}</a> · <a href="#" data-action="open-oferta">Публичная оферта</a></p>
|
|
570
|
+
<p><a href="${esc(VENDOR_CONTACTS.site)}" target="_blank" rel="noopener">${esc(VENDOR_CONTACTS.site.replace(/^https?:\/\//, ''))}</a> · <a href="#" data-action="open-oferta">Публичная оферта</a> · <a href="#" data-action="open-presentation" data-slide="1">Презентация</a> · <a href="/assets/ODANT-WORK-presentation.pdf" download="ODANT-WORK-presentation.pdf">PDF</a></p>
|
|
479
571
|
</div>
|
|
480
572
|
</div>
|
|
481
573
|
<div class="footer-bottom">
|
|
@@ -594,6 +686,50 @@ export function renderLandingPage({ publicKey = '', regions = null, assetVersion
|
|
|
594
686
|
</div>
|
|
595
687
|
</div>
|
|
596
688
|
|
|
689
|
+
<!-- Интерактивный просмотр презентации ODANT-WORK (для клиентов и франчайзи) -->
|
|
690
|
+
<div class="modal pres-modal" id="presentationModal" role="dialog" aria-modal="true" aria-labelledby="presModalTitle">
|
|
691
|
+
<div class="card pres-card">
|
|
692
|
+
<div class="pres-top">
|
|
693
|
+
<div class="pres-title-wrap">
|
|
694
|
+
<img src="/assets/odant-logo.png" alt="">
|
|
695
|
+
<div>
|
|
696
|
+
<b id="presModalTitle">Презентация ODANT-WORK</b>
|
|
697
|
+
<span class="small muted">Для клиентов и региональных партнёров (франчайзи)</span>
|
|
698
|
+
</div>
|
|
699
|
+
</div>
|
|
700
|
+
<div class="pres-sections" id="presSectionTabs">
|
|
701
|
+
<button type="button" class="chip on" data-action="pres-goto" data-slide="1" data-sec="product">1. О платформе (1–7)</button>
|
|
702
|
+
<button type="button" class="chip" data-action="pres-goto" data-slide="8" data-sec="clients">2. Клиентам (8–9)</button>
|
|
703
|
+
<button type="button" class="chip" data-action="pres-goto" data-slide="10" data-sec="franchise">3. Франшиза (10–12)</button>
|
|
704
|
+
</div>
|
|
705
|
+
<div class="pres-actions">
|
|
706
|
+
<a class="btn btn-ghost btn-sm" href="/presentation" target="_blank" rel="noopener" style="text-decoration:none" title="Открыть в отдельном окне">${icon('expand')} Во весь экран</a>
|
|
707
|
+
<a class="btn btn-primary btn-sm" href="/assets/ODANT-WORK-presentation.pdf" download="ODANT-WORK-presentation.pdf" style="text-decoration:none">📥 Скачать PDF</a>
|
|
708
|
+
<button type="button" class="icon-btn" data-action="pres-close" aria-label="Закрыть презентацию">${icon('close')}</button>
|
|
709
|
+
</div>
|
|
710
|
+
</div>
|
|
711
|
+
|
|
712
|
+
<div class="pres-stage">
|
|
713
|
+
<iframe id="presFrame" title="Слайды презентации ODANT-WORK" loading="lazy"></iframe>
|
|
714
|
+
</div>
|
|
715
|
+
|
|
716
|
+
<div class="pres-bottom">
|
|
717
|
+
<div style="display:flex;align-items:center;gap:8px">
|
|
718
|
+
<button type="button" class="btn btn-ghost btn-sm" data-action="pres-prev">← Назад</button>
|
|
719
|
+
<span class="pres-counter" id="presCounter">Слайд 1 / 12</span>
|
|
720
|
+
<button type="button" class="btn btn-ghost btn-sm" data-action="pres-next">Вперёд →</button>
|
|
721
|
+
</div>
|
|
722
|
+
<div class="pres-dots" id="presDots">
|
|
723
|
+
${Array.from({ length: 12 }, (_, idx) => `<button type="button" class="pres-dot ${idx === 0 ? 'on' : ''}" data-action="pres-goto" data-slide="${idx + 1}" title="Слайд ${idx + 1}">${idx + 1}</button>`).join('')}
|
|
724
|
+
</div>
|
|
725
|
+
<div style="display:flex;align-items:center;gap:8px;flex-wrap:wrap">
|
|
726
|
+
<button type="button" class="btn btn-ghost btn-sm" data-action="pres-jump-stage" data-target-stage="clients">К калькулятору клиентов →</button>
|
|
727
|
+
<button type="button" class="btn btn-ghost btn-sm" data-action="pres-jump-stage" data-target-stage="franchise">К карте франшиз РФ →</button>
|
|
728
|
+
</div>
|
|
729
|
+
</div>
|
|
730
|
+
</div>
|
|
731
|
+
</div>
|
|
732
|
+
|
|
597
733
|
<!-- ИИ-агент лицензионного центра -->
|
|
598
734
|
<button class="ai-fab" data-action="ai-toggle" aria-controls="aiDrawer"><img src="/assets/odant-logo.png" alt=""><span class="t">ИИ-агент ODANT</span><span class="live"></span></button>
|
|
599
735
|
<div class="ai-drawer" id="aiDrawer" aria-live="polite">
|
package/src/server.js
CHANGED
|
@@ -82,6 +82,9 @@ const STATIC_ASSETS = Object.freeze({
|
|
|
82
82
|
'/assets/landing.css': { file: 'landing.css', type: 'text/css; charset=utf-8' },
|
|
83
83
|
'/assets/landing.js': { file: 'landing.js', type: 'text/javascript; charset=utf-8' },
|
|
84
84
|
'/assets/admin.js': { file: 'admin.js', type: 'text/javascript; charset=utf-8' },
|
|
85
|
+
'/presentation': { file: 'ODANT-WORK-presentation.html', type: 'text/html; charset=utf-8' },
|
|
86
|
+
'/assets/ODANT-WORK-presentation.html': { file: 'ODANT-WORK-presentation.html', type: 'text/html; charset=utf-8' },
|
|
87
|
+
'/assets/ODANT-WORK-presentation.pdf': { file: 'ODANT-WORK-presentation.pdf', type: 'application/pdf' },
|
|
85
88
|
});
|
|
86
89
|
const assetCache = new Map();
|
|
87
90
|
let assetVersionCache = '';
|
|
@@ -539,6 +542,14 @@ export function createLicenseServerApp(options = {}) {
|
|
|
539
542
|
return sendJson(res, 200, result);
|
|
540
543
|
}
|
|
541
544
|
|
|
545
|
+
if (req.method === 'POST' && pathname === '/api/cabinet/profile') {
|
|
546
|
+
const body = await readJsonBody(req);
|
|
547
|
+
const key = extractBearerToken(req, body, url) || body.email || body.accountId || '';
|
|
548
|
+
const user = store.updateUserProfile(key, body);
|
|
549
|
+
res.setHeader('Set-Cookie', `odant_work_session=${encodeURIComponent(user.sessionKey)}; Path=/; Max-Age=31536000; SameSite=Lax`);
|
|
550
|
+
return sendJson(res, 200, { ok: true, user });
|
|
551
|
+
}
|
|
552
|
+
|
|
542
553
|
if (req.method === 'POST' && pathname === '/api/auth/accept-oferta') {
|
|
543
554
|
const body = await readJsonBody(req);
|
|
544
555
|
const key = extractBearerToken(req, body, url) || body.email || '';
|
|
@@ -641,8 +652,16 @@ export function createLicenseServerApp(options = {}) {
|
|
|
641
652
|
createNewServer: Boolean(body.createNewServer || body.licenseId === 'NEW'),
|
|
642
653
|
ownerAccountId: user?.userId || '',
|
|
643
654
|
customer: {
|
|
644
|
-
name: body.customer?.name || user?.companyName ||
|
|
655
|
+
name: body.customer?.name || user?.companyName || '',
|
|
645
656
|
inn: body.customer?.inn || user?.inn || '',
|
|
657
|
+
kpp: body.customer?.kpp || user?.kpp || '',
|
|
658
|
+
legalAddress: body.customer?.legalAddress || user?.legalAddress || '',
|
|
659
|
+
signerName: body.customer?.signerName || user?.signerName || '',
|
|
660
|
+
signerPosition: body.customer?.signerPosition || user?.signerPosition || '',
|
|
661
|
+
bankName: body.customer?.bankName || user?.bankName || '',
|
|
662
|
+
bik: body.customer?.bik || user?.bik || '',
|
|
663
|
+
bankAccount: body.customer?.bankAccount || user?.bankAccount || '',
|
|
664
|
+
corrAccount: body.customer?.corrAccount || user?.corrAccount || '',
|
|
646
665
|
email: body.customer?.email || user?.email || '',
|
|
647
666
|
phone: body.customer?.phone || user?.phone || '',
|
|
648
667
|
},
|
|
@@ -652,6 +671,10 @@ export function createLicenseServerApp(options = {}) {
|
|
|
652
671
|
return sendJson(res, 200, {
|
|
653
672
|
ok: true,
|
|
654
673
|
...(payment || {}),
|
|
674
|
+
...(order?.paymentMethod === 'invoice' ? {
|
|
675
|
+
invoiceUrl: `${reqOrigin}${order.invoiceUrl}`,
|
|
676
|
+
confirmationUrl: `${reqOrigin}${order.invoiceUrl}`,
|
|
677
|
+
} : {}),
|
|
655
678
|
order,
|
|
656
679
|
reservation,
|
|
657
680
|
user: updatedUser,
|
|
@@ -715,8 +738,20 @@ export function createLicenseServerApp(options = {}) {
|
|
|
715
738
|
paymentMethod: body.paymentMethod || 'yookassa',
|
|
716
739
|
companyName: body.companyName || user?.companyName || '',
|
|
717
740
|
inn: body.inn || user?.inn || '',
|
|
741
|
+
kpp: body.kpp ?? user?.kpp ?? '',
|
|
742
|
+
legalAddress: body.legalAddress ?? user?.legalAddress ?? '',
|
|
743
|
+
signerName: body.signerName ?? user?.signerName ?? '',
|
|
744
|
+
signerPosition: body.signerPosition ?? user?.signerPosition ?? '',
|
|
745
|
+
bankName: body.bankName ?? user?.bankName ?? '',
|
|
746
|
+
bik: body.bik ?? user?.bik ?? '',
|
|
747
|
+
bankAccount: body.bankAccount ?? user?.bankAccount ?? '',
|
|
748
|
+
corrAccount: body.corrAccount ?? user?.corrAccount ?? '',
|
|
749
|
+
phone: body.phone ?? user?.phone ?? '',
|
|
718
750
|
});
|
|
719
751
|
const updatedUser = store.findUserBySessionKey(user?.sessionKey);
|
|
752
|
+
if (updatedUser?.sessionKey) {
|
|
753
|
+
res.setHeader('Set-Cookie', `odant_work_session=${encodeURIComponent(updatedUser.sessionKey)}; Path=/; Max-Age=31536000; SameSite=Lax`);
|
|
754
|
+
}
|
|
720
755
|
if (order.paymentMethod === 'invoice') {
|
|
721
756
|
return sendJson(res, 200, {
|
|
722
757
|
ok: true,
|