Include authority, track id, masked card, and paid-at from gateway meta for support and reconciliation.
Co-authored-by: Cursor <cursoragent@cursor.com>
Reject admin PATCH of awaiting-payment / payment-successful so order payment status cannot be set manually.
Co-authored-by: Cursor <cursoragent@cursor.com>
Wire cart/checkout shipping fees with category groups and static rates, reject gibberish contact submissions, and SMS only valid Iranian mobiles.
Co-authored-by: Cursor <cursoragent@cursor.com>
Signup verifies phone before password; existing Meshkee accounts keep their password. Products can attach an optional PDF catalog (max 2MB) via Pars Pack media.
Co-authored-by: Cursor <cursoragent@cursor.com>
Supports dashboard CRUD and tenant list/get/calculate so storefronts can offer installments, requiring a method pick when several exist.
Co-authored-by: Cursor <cursoragent@cursor.com>
Support duplicatable free-text lists, always append سایر ویژگیها on AI category forms, and fill leftover product specs into that field.
Co-authored-by: Cursor <cursoragent@cursor.com>
Ground product technical fill, product AI create, and category technical form suggestions on page text instead of inventing specs from the URL alone.
Co-authored-by: Cursor <cursoragent@cursor.com>
Persists used/second-hand status per listing and supports isUsed=true on business and public store-item queries.
Co-authored-by: Cursor <cursoragent@cursor.com>
Arvan CDN 4.0 rejects A creates when value is a single { ip } object
(422: value must be an array). Send [{ ip }] and compare listed A
values as arrays so ensureMailRecords no longer fails before DKIM.
Stop auto-counting list APIs and homepage sliders, track static pages via pageKey, and add store-specials AI list matching.
Co-authored-by: Cursor <cursoragent@cursor.com>
Align storefront/sitemap URLs with catalog products, add by-id public APIs, and include user-product detail views in the product visit chart.
Co-authored-by: Cursor <cursoragent@cursor.com>
Expose list/add/remove gallery endpoints via media_attachments, plus profile title, banner, and category tag/nameFa support needed by the marketplace dashboard.
Co-authored-by: Cursor <cursoragent@cursor.com>
Expose Organization/LocalBusiness and Product/BlogPosting jsonLd, optional seoMeta fields on content/categories, and continue mass SMS after per-recipient failures.
Co-authored-by: Cursor <cursoragent@cursor.com>
Import the purchase-price constant for Nest build, and only convert IRT-scale balances so migrate re-runs do not divide credits again.
Co-authored-by: Cursor <cursoragent@cursor.com>
Charge ceil(len/64)*400 IRT per recipient across OTP, customer, and partner SMS; seed new businesses with 500k IRT; default partner sends to the advertising line.
Co-authored-by: Cursor <cursoragent@cursor.com>
Use /blog/{slug}, /portfolio/{slug}, and /instruction/{slug} in sitemap defaults and emit CMS slugs for blogs/portfolios instead of title-derived paths.
Co-authored-by: Cursor <cursoragent@cursor.com>
Business SMS uses optional settings.sms.senderNumber (else advertising shortcode) with SendQuick for one recipient and SendBulk for quantity.
Co-authored-by: Cursor <cursoragent@cursor.com>
Website agents must add variants to a local guest cart and redirect to customer.{domain} for login and checkout instead of building those pages on the shop.
Co-authored-by: Cursor <cursoragent@cursor.com>
This API VM's Node 20 build has no node:undici, so require() crash-looped the process and took login down.
Co-authored-by: Cursor <cursoragent@cursor.com>
Node fetch was aborting at undici's 5-minute headers timeout, so Super Admin marked long npm ci / next builds as failed while the websites VM was still compiling.
Co-authored-by: Cursor <cursoragent@cursor.com>
Store product/category translations in entity_translations, expose CMS APIs, and gate the MultiLanguage Data module for businesses.
Co-authored-by: Cursor <cursoragent@cursor.com>
Update DNS writes @, www, business, customer, and api records on the chosen provider instead of Arvan only.
Co-authored-by: Cursor <cursoragent@cursor.com>
Provision uses the same websites-VM agent as Businesses; DNS still goes through Arvan ensureTenantRecords.
Co-authored-by: Cursor <cursoragent@cursor.com>
The API VM resolver often NXDOMAINs business.* / customer.* CNAMEs even when the certs are valid, which made the SSL button always fail after a successful issue.
Co-authored-by: Cursor <cursoragent@cursor.com>
PM2 was restarting at 512MB while Sharp cached buffers, which returned 502 to the migrate UI after categories had already succeeded.
Co-authored-by: Cursor <cursoragent@cursor.com>