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-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.