Skip to content

Izmaiņu žurnāls

Izmaiņu žurnāls

Atlasīti pēdējo laidienu svarīgākie punkti. Pilnu informāciju par API versijām un saderību traucējošu izmaiņu politiku skatiet sadaļā API versiju izveide un LTS politika.

Detalizētas izmaiņas atsevišķos galapunktos: OpenAPI specifikācija un interaktīvā API atsauce.


2026-10 · Krāsas Dashboard

  • Jaunums: koda detalizētajā lapā ir kartīte Krāsas: priekšplāns un fons kā heksadecimāla vērtība, caurspīdīgs fons, priekšskatījums caur īsto attēla maršrutu. Pārbaude ir tā pati, ko veic PATCH /v1/codes/{id}: kritiskiem pāriem nepieciešams apstiprinājums, pārus zem 1,5:1 nevar saglabāt.
  • Atiestatīšana uz melnu uz balta visos četros formātos atkal atdod tos pašus baitus kā bez krāsām. Kodi bez krāsām nemainās.
  • Caurspīdīgi kodi visos Dashboard priekšskatījumos tiek rādīti uz šaha galdiņa raksta. Sīkāk: Krāsas Dashboard.

2026-10 · Krāsas PDF un EPS

  • Jaunums: qr.pdf un qr.eps attēlo fg un bg gan kā parametrus, gan kā saglabātās krāsas. Melna un jebkura pelēka krāsa tiek ierakstīta kā pelēktoņi (tikai melnā plate), jebkura cita krāsa kā CMYK veselos procentos, piemēram, 1F4E79 kā C74 M36 Y0 K53.
  • Fons tāpat kā SVG: Tiklīdz ir izvēlēta krāsa, aiz koda un tā klusuma zonas atrodas necaurspīdīgs laukums, balts vai bg. bg=transparent neattēlo nevienu. Virsraksts paliek melns, logo pamatne balta.
  • Bez krāsām nekas nemainās: Bez fg/bg un bez saglabātām krāsām abi formāti nodrošina tos pašus baitus, ko iepriekš. Produkta pases PDF paliek nekrāsots.
  • Ierobežojumi: nav ICC profila, nav PDF/X. Sīkāka informācija: Krāsas drukāšanā.

2026-09 · Statiskie kodi bez pāradresācijas kešatmiņas, vienlaicīga dzēšana

  • Mainīts: Statiskie kodi vairs neatrodas pāradresācijas kešatmiņā. Izsaucot to īso saiti (redirect_url), vienmēr tiek nolasīts aktuālais stāvoklis. Tāpēc pēc DELETE /v1/account statiskais kods nākamajā izsaukumā vairs nepāradresē, savukārt iepriekš tas varēja turpināties līdz pat 24 stundām. Arī tarifa maiņa statiskajiem kodiem stājas spēkā nekavējoties. Dinamiskos kodus konta dzēšana iztīra tāpat kā līdz šim. Drukātie statiskie kodi tieši satur savu mērķi un netiek ietekmēti.
  • Novērsts: Divi vienlaicīgi DELETE /v1/codes/:id pieprasījumi tam pašam kodam vienreiz atgriež 200 un vienreiz 404. Webhook qr.deleted tiek nosūtīts tieši vienreiz, iepriekš divreiz.
  • Jaunums: POST un DELETE /v1/codes/:id/logo atbild ar 409 (errors/conflict), ja cits pieprasījums vienlaicīgi ir mainījis tā paša koda logotipu, un tad nekas netiek mainīts. Iepriekš augšupielādētais logotips varēja palikt saglabāts bez izmantošanas. Divi vienlaicīgi DELETE /v1/codes/:id/logo pieprasījumi abi atgriež 200. Sīkāka informācija: Logo.

2026-09 · TypeScript-SDK 1.2.0

  • Jaunums @qr3/sdk 1.2.0: client.codes.update() pieņem appearance un rezultātā sniedz kontrasta pārbaudes atradumus kā issues; ja atradumu nav, šis lauks trūkst. client.codes.imageUrl() pieņem fg, bg un ecc. Katrs kods, ko atgriež API (get, list, create, update, batchCreate), satur title un appearance.
  • Atjaunināšana: npm install @qr3/sdk@latest. Sekos Python, Go un PHP. Sīkāka informācija: SDK un CLI un Krāsu saglabāšana kodā.

2026-09 · Mainītais derīguma termiņš stājas spēkā aptuveni vienas minūtes laikā

  • Novērsts: Veicot PATCH pieprasījumu parametram expires_at, tagad tiek iztīrīta koda pāradresācijas kešatmiņa. Tādējādi jaunais derīguma termiņš stājas spēkā aptuveni vienas minūtes laikā, nevis tikai pēc līdz pat 24 stundām. Iepriekš noņemts vai pārcelts derīguma termiņš līdz pat 24 stundām turpināja atgriezt 410, savukārt uz pašreizējo brīdi iestatīts derīguma termiņš ļāva pāradresācijai darboties vēl līdz pat 24 stundām.
  • Novērsts: Kods, kas izveidots ar expires_at, beidzas precīzi laikā arī tad, ja derīguma termiņš ir pirmo 24 stundu laikā.
  • Novērsts: Ja kods tiek dzēsts, kamēr tā logotips tiek augšupielādēts vai noņemts, POST un DELETE /v1/codes/:id/logo atbild ar 404 un nemaina dzēsto kodu, tāpat kā tas jau ir ar PATCH.
  • Novērsts: Arī statisks kods, kura īsā saite (redirect_url) ir tikusi izsaukta, atrodas pāradresācijas kešatmiņā. Tā mainīšana, apturēšana un dzēšana tagad arī to iztīra, nevis tikai dinamisko kodu gadījumā.

2026-09 · Krāsu saglabāšana pie koda

  • Jaunums: PATCH /v1/codes/:id pieņem appearance ar foreground_color un background_color (#RRGGBB, fonam arī transparent). qr.svg un qr.png attēlo saglabātās krāsas bez jebkādiem parametriem; tāds vaicājuma parametrs kā ?fg=000000 joprojām ir prioritārs. PDF un EPS krāsas attēlos tikai kādā no nākamajiem laidieniem.
  • Kontrasta pārbaude: pāris, kura attiecība ir mazāka par 1,5:1, atgriež 422. Vājāki pāri tiek saglabāti un uzrādīti meta.issues kā warning vai critical; caurspīdīgs fons vienmēr ir critical, nekad netiek bloķēts.
  • Apvienošana: izlaistie lauki saglabā savu saglabāto vērtību, null veic atiestatīšanu. Vienlaicīgas izmaiņas vienā un tajā pašā kodā vairs nepārraksta viena otru.
  • Katrā koda atbildē: appearance ir iekļauts katrā koda atbildē un webhooks qr.created un qr.updated. POST, pakešapstrāde un imports to noraida ar 422.
  • Nav izmaiņu esošajiem kodiem: bez saglabātām krāsām katrs kods atgriež tos pašus baitus, ko iepriekš. Sīkāka informācija: Krāsu saglabāšana pie koda.

2026-09 · Krāsas un kļūdu labošana kā attēlu maršrutu parametri

  • Jaunums: Visi četri attēlu maršruti pieņem fg (priekšplāna krāsa), bg (fona krāsa vai transparent) un ecc (kļūdu labošana L, M, Q, H). SVG un PNG zīmē krāsas; PDF un EPS tās pieņem, bet zīmēs tikai vēlākā laidienā. ecc darbojas visos četros formātos, logotips joprojām pieprasa H.
  • Caurspīdīgs: bg=transparent nodrošina SVG bez fona un PNG ar īstu alfa kanālu. Pamatnei jābūt gaišai un jāatstāj brīva klusuma zona.
  • Nekad neizraisa kļūdu: Nederīgas vērtības tiek ignorētas; attēls tiek parādīts tieši tāpat kā bez parametriem.
  • Kešatmiņa: Katrs spēkā esošais parametrs nodrošina Cache-Control: public, max-age=300 standarta attēla 24 stundu vietā.
  • Nav uzvedības izmaiņu bez parametriem: Jebkurš esošais kods nodrošina visos četros formātos tos pašus baitus, ko iepriekš.
  • Pieejams visos tarifu plānos. Sīkāka informācija: Krāsas un kļūdu labošana.
  • Paplašinājums: qr.pdf un qr.eps tagad iegulst iestatīto logo tieši tāpat kā qr.svg un qr.png (skatīt zemāk) — kā iegultu attēlu (PDF izmantojot Image XObject, EPS izmantojot attēlu vārdnīcu PostScript, tur tikai ar %%LanguageLevel: 3), centrētu tajā pašā laukumā, ar tādu pašu kļūdu labošanas līmeņa paaugstināšanu uz H. Abi formāti iepriekš logo neiekļāva; tagad tas ir novērsts.
  • Kešatmiņa: Ja ir iestatīts logo, tagad arī qr.pdf un qr.eps nodrošina Cache-Control: public, max-age=300 parasto 24 stundu vietā — tieši tāpat kā SVG/PNG.
  • Atkāpšanās režīms: Ja pašu logo attēlu nevar apstrādāt (piemēram, bojāts saglabātais objekts), kļūdu labošana joprojām paliek H, taču rezervētais laukums paliek tukšs attēla vietā — nekad netiek izraisīta servera kļūda.
  • Nav uzvedības izmaiņu bez logo: Kodi bez logo joprojām nodrošina baitos identiskus qr.pdf/qr.eps failus ar nemainīgu 24 stundu kešatmiņu.
  • Sīkāka informācija un drukāšanas norādes: Logo QR kodā.

2026-09 · Logo QR kodā — Dashboard un API

  • Jaunums: Kods tagad var saturēt logo vidū. Dashboard koda detaļu lapā tiek izveidota atsevišķa logo karte: Izvēlēties logo, pievienojot pirmo reizi vai noņemot, jāapstiprina brīdinājums ar obligātu atzīmi (abi maina punktu rakstu), pēc tam Augšupielādēt logo/Noņemt logo. Aizstāšanai nav nepieciešams apstiprinājums — mainās tikai attēls, nevis raksts. Loma viewer redz statusu un priekšskatījumu, bet nevienu no trim darbībām.
  • API: POST /v1/codes/{id}/logo (multipart lauks file; PNG, JPEG vai WebP, ne vairāk kā 1 MB, SVG tiek noraidīts) izveido vai aizstāj logo; DELETE /v1/codes/{id}/logo to atkal noņem un ir idempotents. Pārāk liels attēls atgriež 413, neatbalstīts formāts — 422, loma viewer — 403.
  • Renderēšana: qr.svg un qr.png iegulst logo kā faktiskus pikseļus (512 × 512, normalizēts) un šim nolūkam paaugstina kļūdu labošanu uz H. Tādējādi pievienošana un noņemšana maina punktu rakstu (M ↔ H), bet aizstāšana — nē. qr.pdf un qr.eps neiegulst logo un paliek nemainīti. Jau izdrukāts kods jebkurā gadījumā turpina darboties, jo kodētais mērķis nav atkarīgs no logo — no jauna jādrukā tikai tiem, kuri vēlas redzēt (jauno) logo izskatu arī uz materiāla, un šajā gadījumā nevajadzētu jaukt vecos un jaunos drukas failus.
  • Kešatmiņa: Ja logo ir iestatīts, qr.svg un qr.png atgriež Cache-Control: public, max-age=300 parasto 24 stundu vietā. Sīkāka informācija, ierobežojumi un drukas norādījumi: Logo QR kodā.

2026-08 · operationId visām 75 operācijām un “kad lietot” norādījumi aģentiem

  • Papildinājums: Visām 75 OpenAPI specifikācijas operācijām tagad ir operationId — listCodes, createCode, getCodeStats, archiveWorkspace un tā tālāk. Līdz šim šī lauka vispār nebija, tāpēc katram ģeneratoram metodes nosaukums bija jāatvasina no HTTP metodes un ceļa (postV1Codes). Šādi nosaukumi ir piesaistīti ceļam un mainās līdz ar katru ceļa pārveidi. Nosaukumu formāts visās 75 vietās ir vienāds: list/get/create/update/replace/delete, pretējā gadījumā tiek izmantots biznesa darbības darbības vārds (validateDpp, registerGs1Identifier, pingWebhook). Darbības vārds atbilst biznesa loģikai, nevis HTTP metodei — archiveWorkspace ir DELETE, importDpps ir POST.
  • Ietekme uz pašu ģenerētiem klientiem: Tie, kas ģenerē savu SDK no specifikācijas, nākamajā palaišanas reizē iegūs pārdēvētas metodes (postV1Codes → createCode). Tas ir šo izmaiņu mērķis, taču tā ir pārdēvēšana svešā kodā — tāpēc tas šeit ir īpaši pieminēts. Ceļi, parametri, atbilžu formāti un statusa kodi nav mainīti; oficiālie SDK, CLI un MCP serveri netiek ietekmēti.
  • Ievads aģentiem: Failā https://qr3.app/llms.txt ir sadaļa ## When to use qr3.app — seši uzdevumi sešu funkciju vietā, kā arī teikums par to, kam qr3.app nav piemērots rīks. To pašu informāciju MCP serveris tagad sniedz savienojuma izveides laikā: initialize pieprasījums pret https://mcp.qr3.app/mcp atbild ar lauku instructions (iepriekš: vienpadsmit rīki bez jebkāda iedalījuma). Tāpat ir norādīts, kuriem izsaukumiem ir nepieciešama API atslēga — initialize un tools/list nē, bet katram tools/call jā.
  • Labojumi failā llms.txt: Četras norādes tika pārbaudītas pret produkcijas vidi un izrādījās neprecīzas: (1) Python SDK qr3app nav publicēts PyPI — rinda pip install ir izņemta bez aizstāšanas; (2) Accept: text/markdown attiecas uz sākumlapu un emuāru, nevis uz katru servera pusē renderētu lapu; (3) kontaktadrese ir [email protected], arī sākumlapas JSON-LD; (4) /de/security/ ir pāradresācija uz enkuru, nevis atsevišķa lapa. Jaunā saite: docs.qr3.app/de/skills/.
  • Aizsardzība: Trīs apgalvojumi failā openapi-spec.test.ts — pilnīgums, unikalitāte, lowerCamelCase —, katrs pārbaudīts ar mutāciju. Vēl deviņi testi fiksē četras labotās norādes, lai tās neatkārtotos.
  • Zināms ierobežojums: Divas no 75 operācijām ir aprakstītas specifikācijā, taču atbild ar 404 (GET /v1/codes/{id}/stats un GET /v1/account). Šeit tām tika piešķirts nosaukums, un tās to atkal zaudēs, tiklīdz tiks pieņemts lēmums par to izstrādi vai svītrošanu.

2026-08 · Tarifu pazemināšana un atcelšana tagad ietekmē arī ierobežojumus

  • Labojums: Stripe webhook plāna maiņas un atcelšanas gadījumā ierakstīja tikai plāna nosaukumu, nevis četras organizācijas ierobežojumu kolonnas (max_workspaces, max_members, max_dynamic_codes, max_scans_per_month). Tā kā ierobežojumu piemērošanā tiek izmantota maksimālā vērtība no saglabātās vērtības un plāna bāzes līnijas, pazemināta vai atcelta organizācija saglabāja savus vecos, lielākos ierobežojumus — plāna pazemināšanai nebija ietekmes. Tagad webhook katras reālas plāna maiņas gadījumā iestata kolonnas uz jaunā tarifa bāzes līniju, bet atcelšanas gadījumā — uz Free bāzes līniju, tieši tāpat, kā to jau dara administratora pārvaldība.
  • Uzvedība: Abonementa rutīnas atjauninājumi (pagarināšana, maksāšanas līdzekļi, proporcionālais pārrēķins) joprojām neietekmē ierobežojumus; individuāli piešķirtie lielākie ierobežojumi paliek nemainīgi. Tikai reāla plāna maiņa atiestata tos uz jaunā tarifa bāzes līniju.
  • Ietekme: Nav API vai atbildes formāta izmaiņu. Organizācijas, kuru plāna pazemināšana notika pirms šī labojuma, saglabā vecās vērtības, līdz stājas spēkā nākamā plāna maiņa vai atbalsta dienests tās pielāgo.

2026-08 · Keyset kursors tagad visos sarakstu galapunktos

  • Labojums: Kursora labojums galapunktiem GET /v1/codes un GET /v1/dpp (skatīt zemāk) tagad ir ieviests visos pārējos sarakstos ar kursora pagināciju: GET /v1/qr-codes/:id/comments, /v1/workspaces, /v1/gs1/identifiers, /v1/members, /v1/audit-logs, /v1/admin/orgs, /v1/admin/users un /v1/webhooks/:id/deliveries. Visi tie veica šķirstīšanu tikai pēc created_at; rindas ar identisku laika zīmogu (audita ieraksti no batch operācijas, webhook atkārtotie mēģinājumi, dalībnieku importēšana) nākamajā lapā varēja tikt pazaudētas. Kārtošanas atslēga tagad visur ir kortežs (created_at, id).
  • API izmaiņas: Šajos sarakstos meta.pagination.next_cursor no šī brīža ir arī necaurredzama vērtība (base64url), nevis vienkāršs laika zīmogs; nenolasāmi kursori atgriež 400, bet vecie laika zīmoga kursori pārejas periodā joprojām tiks pieņemti. Izņēmums ir GET /v1/webhooks/:id/deliveries: tur next_cursor joprojām ir pēdējās piegādes ID (nezināms ID → pirmā lapa). Klientiem, kas atgriež next_cursor nemainītu — Dashboard, CLI, SDKs, MCP —, nekas nav jāmaina.
  • Ietekme: Nav nepieciešama migrācija. Ja kādā no šiem sarakstiem (piemēram, audita žurnālā vai piegādes žurnālā Dashboard) šķirstīšanas laikā pamanījāt trūkstošus ierakstus: tie nekad nebija pazuduši — saraksti tagad tos parāda pilnībā.

2026-08 · Laika zīmogi pēc rediģēšanas un dzēšanas atkal atbilst OpenAPI

  • Labojums: Pēc PATCH /v1/codes/{id} vērtība updated_at tika atgriezta SQLite formātā bez laika zonas (2026-08-17 09:00:00), lai gan OpenAPI specifikācija paredz format: date-time un izveide (POST) nodrošina ISO laika zīmogu (2026-08-17T09:00:00.000Z). Tas pats attiecās uz deleted_at/updated_at soft-delete gadījumā, kā arī uz API atslēgu, organizāciju, darbvietu, dalībnieku, komentāru un webhook rediģēšanas/dzēšanas ceļiem, un papildus uz API atslēgu last_used_at un webhook last_triggered_at. Visi rakstīšanas ceļi tagad izmanto ISO 8601 (UTC, T un Z).
  • Ietekme: Klienti, kas parsē updated_at ar new Date(...) (SDKs, CLI, Dashboard), nolasīja atstarpes formātu kā vietējo laiku — CLI vienreiz rediģētiem kodiem rādīja laiku, kas nobīdīts par vietējo nobīdi (Vīne: −2 h). Tas ir novērsts. Papildus tam datu migrācija normalizē jau saglabātās vērtības vecajā formātā uz ISO, lai kārtošana un salīdzināšana jauktos datos būtu pareiza. Nav nekādu izmaiņu lauku nosaukumos vai atbildes struktūrā.
  • Konteksts: Tā pati kļūdu klase, kas abos tālāk minētajos labojumos (API atslēgu derīguma termiņš, atkārtotās skenēšanas robežlaiks): SQLite datetime('now') raksta YYYY-MM-DD HH:MM:SS, bet visi pārējie rakstītāji — ISO 8601. Pirmkoda aizsardzības tests turpmāk novērsīs jaunus šādus gadījumus.

2026-08 · Saraksta paginācija vairs nezaudē batch kodus

  • Labojums: GET /v1/codes un GET /v1/dpp veica pagināciju tikai pēc created_at. Tomēr kodi no POST /v1/codes/batch, POST /v1/dpp/batch un CSV/XLSX importa koplieto vienu laika zīmogu — tiklīdz batch apjoms bija lielāks par limit (pēc noklusējuma 20), otrā lapa vairs neatgrieza atlikušās rindas ar to pašu laika zīmogu. Kodi eksistēja un bija sasniedzami, izmantojot GET /v1/codes/:id, taču sarakstā (Dashboard, CLI qr3 list, SDKs, MCP) tie nekad neparādījās. Kursors tagad ir keyset pār (created_at, id).
  • API izmaiņas: meta.pagination.next_cursor no šī brīža ir necaurredzama vērtība (base64url), nevis vienkāršs laika zīmogs. Tiem, kas atgriež kursoru nemainītu kā ?cursor= — kā to dara Dashboard, CLI, visi SDKs un MCP serveris —, nekas nav jāmaina. Vecie laika zīmoga kursori pārejas periodā joprojām tiks pieņemti; nesalasāmi kursori tagad atgriež 400, nevis klusi parāda pirmo lapu.
  • Ietekme: Ja pēc batch importa sarakstā redzējāt mazāk kodu, nekā tika izveidots: kodi nekad nebija pazuduši — saraksts tagad tos parāda pilnībā. Migrācija nav nepieciešama.

2026-08 · Drošības atkārtotā skenēšana atkal darbojas 24 stundu ciklā

  • Labojums: Periodiskā mērķa URL un mērķlapu saišu (Google Web Risk) atkārtotā skenēšana izlaida kodus, kuru pēdējā skenēšana bija tajā pašā kalendārajā dienā, kad 24 stundu robežlaiks — atkarībā no diennakts laika atkārtotā skenēšana aizkavējās pat par vēl vienu dienu. Robežlaiks tagad tiek aprēķināts tajā pašā ISO formātā, kurā tiek saglabāti skenēšanas laika zīmogi.
  • Ietekme: Mērķa URL, kas pēc pēdējās skenēšanas tiek klasificēts kā nedrošs, atkal izraisa automātisku koda apturēšanu dokumentētajā 24 stundu logā. Nav API vai atbildes formāta izmaiņu.

2026-08 · API atslēgu derīguma termiņš beidzas precīzā beigu laikā

  • Labojums: API atslēga, kuras expires_at bija tajā pašā dienā, joprojām tika akceptēta līdz pusnaktij pēc UTC. Derīguma termiņa beigas tagad tiek salīdzinātas kā laika zīmogs, nevis kā rakstzīmju virkne — atslēga ar beigušos derīguma termiņu nekavējoties atgriež 401.
  • Konteksts: expires_at tiek saglabāts kā ISO laika zīmogs (2026-08-14T09:00:00Z), savukārt salīdzināšanas puse nodrošināja formātu ar atstarpi (2026-08-14 09:00:00). Tāpēc tiešais rakstzīmju virkņu salīdzinājums bija pareizs tikai tik ilgi, kamēr atšķīrās pats datums.
  • Ietekme: Migrācija nav nepieciešama, atbildes formāts no GET /v1/api-keys paliek nemainīgs. Nelasāmas derīguma termiņa vērtības tagad tiek uzskatītas par beigušām, nevis derīgām.

2026-08 · API atsauce: tenant pārvaldība dokumentēta

  • OpenAPI: Specifikācija — un līdz ar to arī interaktīvā atsauce — tagad dokumentē organizācijas (tostarp GET /v1/organizations/usage), darbvietas, dalībniekus un lomas un audita žurnālus.
  • Billing: Tarifu pārskats (GET /v1/billing/plans) ir publisks; Checkout (POST /v1/billing/checkout) un Stripe klientu portāls (GET /v1/billing/portal) ir norādīti kā galapunkti organizācijas administratoriem.
  • Skenēšanas eksports: Skenēšanas statistika (GET /v1/codes/{id}/scans) un neapstrādāto datu eksports (…/scans.csv, …/scans.xlsx) ir pilnībā dokumentēti — tostarp VDAR paziņojums: ip_hash nekad netiek iekļauts eksportā.
  • Kļūdu reakcija: Tagad ir dokumentēta arī pieprasījuma validācijas 400 atbilde: pamatteksts ir neapstrādāta Zod kļūda, nevis RFC-7807 problēmas dokuments — tomēr tas tiek piegādāts ar Content-Type application/problem+json.

2026-08 · Publisko failu saišu kopēšana

  • Dashboard: Publiskiem failiem koda detaļu lapā tagad ir poga, kas kopē faila publisko saiti starpliktuvē – to var uzreiz izmantot kā QR koda mērķa URL, ja skenēšanai jāatver konkrēts dokuments, nevis mērķlapa ar failu sarakstu.
  • API: Failu galapunkti (/v1/files) papildus atgriež public_url. Lauks ir aizpildīts tikai failiem ar visibility: public – privātiem failiem publiskas adreses nav.
  • Uzvedība: Saite darbojas bez pieteikšanās un atver failu tieši pārlūkprogrammā. Funkcija Aizstāt to atstāj nemainītu, tāpēc ar šo saiti izdrukāts kods paliek derīgs. Sīkāka informācija: Faili un datu lapas.

2026-07 · Komandas lomas: Līdzstrādnieks bez dzēšanas un administratora norēķini

  • Jaunums: dalībnieka loma Līdzstrādnieks (bez dzēšanas) — izveido un rediģē QR kodus, failus un Digital Product Passports, bet nevar neko dzēst vai izveidot API atslēgas. Visi destruktīvie galapunkti pārbauda lomu servera pusē (403).
  • Norēķini: tarifu plānu jauninājumi un Stripe klientu portāls (POST /v1/billing/checkout, GET /v1/billing/portal) tagad ir pieejami tikai organizācijas Administratoriem — visas pārējās lomas redz tikai lasāmu tarifu pārskatu.
  • Dashboard: darbības, kuras lietotāja loma nepieļauj, tiek paslēptas: piemēram, Skatītājs neredz pogas izveidei, rediģēšanai vai dzēšanai, taču saraksti, lejupielādes un statistika paliek redzami. Sīkāka informācija: Komanda un lomas.

2026-06 · Ārējās saites koda mērķlapā

  • Mērķlapa: Koda qr3 mitinātā mērķlapa tagad var uzskaitīt ārējas, pašmitinātas saites ({ label, url }) papildus augšupielādētajiem failiem vai to vietā – piemēram, datu lapām jūsu pašu vietnē.
  • API: POST/PATCH /v1/codes pieņem masīvu links (0–20 ierakstu, http(s), ≤ 2048 rakstzīmju). Katrs URL tiek pārbaudīts ar Google Web Risk; nedrošs URL atgriež 422. Tukšs masīvs dzēš visas saites.
  • Dashboard: Pievienojiet, pārkārtojiet un noņemiet saites koda detaļu lapā.
  • Drošība: Renderētās saites paliek drošas pret XSS (ar atsoļa rakstzīmēm, tikai http(s)), un lapa saglabā savu noindex galveni.

2026-04 · Dashboard analītika katram QR kodam

  • Dashboard: Analītikas poga QR kodu sarakstā tagad atver attiecīgā QR koda statistikas lapu adresē /dashboard/codes/{id}.
  • Maršrutēšana: Aizstājvārds /dashboard/codes joprojām novirza uz /dashboard, taču vairs nepārtver detalizētos maršrutus, piemēram, /dashboard/codes/{id}.
  • API: Detalizētā lapa ielādē QR kodu tieši, izmantojot GET /v1/codes/:id; tādējādi tā vairs nav atkarīga no saraksta lapošanas (pagination) ierobežojumiem.
  • Testi: Regresijas testi aptver aizstājvārda novirzīšanu un tiešo koda ielādi.

2026-04 · Dashboard dzēšanas dialoglodziņš QR kodiem

  • Dashboard: Atkritumu tvertnes ikona QR kodu sarakstā tagad atver atsevišķu React dialoglodziņu, nevis pārlūkprogrammas noklusējuma uznirstošo logu.
  • Atsauksmes: Pēc dzēšanas parādās “toast” paziņojums par veiksmīgu darbību vai kļūdu.
  • Testi: packages/dashboard/tests/dashboard.test.ts novērš regresijas attiecībā uz confirm() QR kodu dzēšanas plūsmā.

2026-04 · Dashboard īso saišu tests dinamiskajiem QR kodiem

  • Dashboard: Īsie kodi (shortcodes) QR kodu sarakstā tagad ir tieši klikšķināmi kā ārējās novirzīšanas saites. Ārējās saites ikona blakus, piemēram, wu3qaa, atver https://qr3.app/{shortCode} jaunā cilnē.
  • i18n: Pievienoti rīka padomu (tooltip) teksti vācu un angļu valodā.
  • Testi: packages/dashboard/tests/dashboard.test.ts aizsargā saites href, jaunās cilnes uzvedību, noopener noreferrer un ikonu pret regresijām.

2026-04 · Redirect-Worker maršruts dinamiskajiem QR kodiem

  • Labojums: Dinamiskos QR kodus adresē https://qr3.app/{shortCode} atkal apstrādā Redirect-Worker. Produkcijas maršruts tagad izmanto qr3.app/*, jo Cloudflare Worker maršruti neatbalsta :code ceļa parametrus.
  • Drošības uzlabošana: Neatbilstošie ceļi tiek nodoti tālāk uz galveno izcelsmes adresi (landing origin), lai Redirect-Worker nebloķētu parastās lapas, piemēram, /de/pricing.
  • Testi: packages/redirect/tests/unit/redirect.test.ts pārbauda aizstājzīmes (wildcard) maršrutu, īso kodu apstrādi un izcelsmes caurlaidi (pass-through).

2026-04 · Workspace DPP skenēšanas pārskats (Q3.4.2)

  • Jaunums: GET /v1/workspace/stats/dpp?days=30 — apkopo visus API atslēgas darba vietas (workspace) dpp_scans (active_dpps, scans_by_day, top_dpps ar produkta nosaukumu/kategoriju).
  • Dashboard: Kartīte sākumlapā (/dashboard) ar 30 dienu joslu diagrammu + top sarakstiem — paralēli QR kodu kartītēm.
  • Publisks: Mārketinga īsā saite GET /dpp/dpp_<id> (viens segments) tiešraides demonstrācijām, paralēli /dpp/{gtin}/{serial}.

2026-04 · DPP skenēšanas analītika (Q3.4.1)

  • Jaunums: GET /v1/dpp/:id/stats?days=30 — apkopoti publiskā GS1 atrisinātāja (resolver) skenējumi katram DPP. Lauki: total_scans, period_scans, scans_by_day, top_countries, top_devices, top_representations.
  • Jaunums: Tabula dpp_scans (migrācija 0011) — atdalīta no scans (Redirect-Worker). IP adreses tiek jauktas (hashed) ar katru dienu rotējošu sāli (salt), neapstrādātas IP adreses nekad nesasniedz D1.
  • Dashboard: Mini diagrammas kartīte (SVG, bez diagrammu bibliotēkas) adresē /dashboard/dpp/:dppId ar 30 dienu joslām + top 3 sadalījumiem. Tukšs stāvoklis (empty state), tiklīdz DPP ir aktīvs, bet tam vēl nav bijis skenējumu.

2026-04 · Tiešsaistes ES atbilstības simulators (Q3.3.7)

  • Jaunums: POST /v1/dpp/:id/validate-update — simulē daļējus atjauninājumus bezstāvokļa (stateless) režīmā (statuss, tirgus saraksts, …) bez saglabāšanas. Atbilde satur eu_compliance + preview.changed_fields.
  • Dashboard: Simulatora kartīte DPP detaļās (/dashboard/dpp/:dppId) — čipi (chips) priekš DE/AT/FR/IT/ES/NL + pielāgoti, statusa nolaižamā izvēlne, Preview EU impact / Save changes / Reset. Nebloķējoša darbība, izmantojot Remix useFetcher.
  • Drošības uzlabošana: Ārēji simulatora palīgi (readUpdatePatchFromForm, marketCountriesKey) + 18 jauni vienību testi; kļūdas labojums: atsevišķa ne-ISO ievade vairs neizdzēš tirgus sarakstu.

2026-04 · Tiešsaistes ES atbilstības priekšskatījums izveides formā (Q3.3.6)

  • Mainīts: POST /v1/dpp/validate papildus sniedz eu_compliance — tas pats validators, kas GET /v1/dpp/:id/eu-compliance, bezstāvokļa režīmā pirms saglabāšanas.
  • Dashboard: Priekšskatījums zem esošā validācijas paneļa + jauns Save-Guard baneris pirms iesniegšanas pogām, ja ir aktīvas kļūdas/brīdinājumi (i18n daudzskaitļa formas DE/EN).

2026-04 · ES validators + tekstila saskarne (Q3.3.4 + Q3.3.5)

  • Jaunums: ES atbilstības validators ar 5 tekstila noteikumiem (TEXTILE_AGEC_REQUIRED, TEXTILE_MICROPLASTICS_CONSISTENCY, TEXTILE_SVHC_THRESHOLD, TEXTILE_GREENWASHING, TEXTILE_ESPR_READY).
  • Jaunums: GET /v1/dpp/:id/eu-compliance ar compliant / espr_ready / issues[] / summary.
  • Dashboard: ES atbilstības sadaļa DPP detaļās (kopsavilkuma flīzes, grupētas problēmu kartītes, ESPR-Ready nozīmīte galvenē).

2026-04 · Tekstila DPP shēma (Q3.3.1–Q3.3.3)

  • Jaunums: Kategorija textile ar AGEC obligāto ķēdi (aušana/adīšana → krāsošana/apdrukāšana → konfekcija), katrai šķiedrai origin_country + recycled_pct, svhc_substances[], ESPR izvēles iespēja (PEF, kalpošanas laiks, Recyclability).
  • Jaunums: Bāzes lauks market_countries: string[] (ISO 3166-1 alpha-2) visām DPP kategorijām — kontrolē Francijai specifiskos AGEC noteikumus un Francijas patērētāju obligāto paziņojumu.
  • Jaunums: Patērētāju HTML veidne ar AGEC mikroplastmasas brīdinājuma lodziņu, 3 pakāpju izcelsmes ķēdi (karogu tabletes), SVHC sarakstu, Durability un Recyclability sadaļu.
  • Migrācija: 0010_dpp_market_countries (D1).

2026-04 · DPP lielapjoma imports (Q3.2.1–Q3.2.5)

  • Jaunums: POST /v1/dpp/import pieņem CSV un XLSX (saderīgs ar Worker, izmantojot SheetJS xlsx, ~283 KB gzip pakotne).
  • Mērogots: uz plānu balstīts ierobežojums (Free 100 → Enterprise 10k) + sadalīts db.batch() pa 100 + 5 MB ķermeņa (body) ierobežojums.
  • Jaunums: Kļūdu ziņojums kā CSV atbildes 201 laukā errors_csv; GET /v1/dpp/import/templates/:category?format=csv|xlsx nodrošina gatavas veidnes akumulatoriem un tekstilam.
  • Dashboard: Vilkšanas un nomešanas (drag-and-drop) augšupielāde sadaļā /dashboard/dpp/import ar veidņu starpniekserveri (template proxy) un iekļautu CSV lejupielādi.

Saderīgas izmaiņas — LTS paplašinājumi

Visas iepriekš minētās izmaiņas ir papildinošas:

  • Esošie POST /v1/dpp/validate klienti ignorē jauno eu_compliance lauku bez izmaiņām.
  • Esošās battery plūsmas paliek nemainītas.
  • market_countries ir izvēles lauks, un tā noklusējuma vērtība ir [].

Skatīt API versiju izveide saderību traucējošu izmaiņu politikai.