Pakeitimų žurnalas
Pakeitimų žurnalas
Atrinkti svarbiausi pastarųjų leidimų akcentai. Norėdami sužinoti apie pilnas API versijas ir esminių pakeitimų politiką (Breaking-Change-Policy), žr. API versijavimas ir LTS politika.
Išsamūs atskirų galinių taškų (endpoints) pakeitimai: OpenAPI specifikacija ir interaktyvi API nuoroda.
2026-08 · Keyset žymeklis (cursor) dabar visuose sąrašų galiniuose taškuose
- Ištaisyta: Žymeklio (cursor) pataisymas, skirtas
GET /v1/codesirGET /v1/dpp(žr. žemiau), dabar pritaikytas visiems likusiems pagal žymeklį puslapiuojamiems sąrašams:GET /v1/qr-codes/:id/comments,/v1/workspaces,/v1/gs1/identifiers,/v1/members,/v1/audit-logs,/v1/admin/orgs,/v1/admin/usersir/v1/webhooks/:id/deliveries. Visi jie buvo puslapiuojami tik pagalcreated_at; eilutės su identiška laiko žyma (grupinių operacijų audito įrašai, pakartotiniai webhook bandymai, narių importavimas) kitame puslapyje galėjo būti prarastos. Rūšiavimo raktas dabar visur yra kortežas(created_at, id). - API pakeitimas: Šiuose sąrašuose
meta.pagination.next_cursornuo šiol taip pat yra nepermatoma reikšmė (base64url), o ne tiesioginė laiko žyma; neįskaitomi žymekliai grąžina400, o seni laiko žymos žymekliai laikinai bus priimami toliau. IšimtisGET /v1/webhooks/:id/deliveries: čianext_cursorlieka paskutinio pristatymo ID (nežinomas ID → pirmas puslapis). Klientams, kurie grąžinanext_cursornepakeistą — Valdymo skydas, CLI, SDKs, MCP —, nieko keisti nereikia. - Poveikis: Migracija nereikalinga. Jei kuriame nors iš šių sąrašų (pvz., audito žurnale arba pristatymo žurnale Valdymo skyde) vartydami puslapius pasigedote įrašų: jie niekur nebuvo dingę — nuo šiol sąrašai juos rodo visus.
2026-08 · Laiko žymos po redagavimo ir trynimo vėl atitinka OpenAPI
- Ištaisyta: Atlikus
PATCH /v1/codes/{id},updated_atbuvo grąžinama SQLite formatu be laiko juostos (2026-08-17 09:00:00), nors OpenAPI specifikacija numatoformat: date-time, o sukūrimas (POST) pateikia ISO laiko žymą (2026-08-17T09:00:00.000Z). Tas pats galiojodeleted_at/updated_atšvelnaus trynimo (Soft-Delete) atveju, taip pat API raktų, organizacijų, darbo sričių (Workspaces), narių, komentarų ir webhook redagavimo bei trynimo keliams, be to, API raktų laukuilast_used_atir webhook laukuilast_triggered_at. Visi rašymo keliai dabar žymi laiką ISO 8601 formatu (UTC,TirZ). - Poveikis: Klientai, kurie analizuoja
updated_atnaudodaminew Date(...)(SDKs, CLI, Valdymo skydas), tarpų formatą skaitė kaip vietos laiką — CLI rodė bent kartą redaguotų kodų laiką, pastumtą per vietinį poslinkį (Viena: −2 h). Tai ištaisyta. Be to, duomenų migracija normalizuoja jau išsaugotas senojo formato vertes į ISO, kad rūšiavimas ir palyginimai mišriuose rinkiniuose būtų teisingi. Jokių laukų pavadinimų ar atsakymo struktūros pakeitimų. - Kontekstas: Tokia pati klaidų klasė kaip ir du toliau pateikti pataisymai (API raktų galiojimo pabaiga, pakartotinio skenavimo riba): SQLite
datetime('now')įrašoYYYY-MM-DD HH:MM:SS, o visi kiti rašymo keliai – ISO 8601. Ateityje naujiems atvejams užkirs kelią pirminio kodo apsaugos testas.
2026-08 · Sąrašų puslapiavimas nebepraranda grupinių kodų
- Ištaisyta:
GET /v1/codesirGET /v1/dpppuslapiavo tik pagalcreated_at. Tačiau kodai išPOST /v1/codes/batch,POST /v1/dpp/batchir CSV/XLSX importo dalijasi viena laiko žyma — kai tik grupė buvo didesnė neilimit(numatytoji reikšmė 20), antrasis puslapis nebegrąžindavo likusių tos pačios laiko žymos eilučių. Kodai egzistavo ir buvo pasiekiami perGET /v1/codes/:id, tačiau sąraše (Valdymo skydas, CLIqr3 list, SDK, MCP) niekada nepasirodydavo. Dabar žymeklis yra raktų rinkinys (keyset) pagal(created_at, id). - API pakeitimas: nuo šiol
meta.pagination.next_cursoryra nepermatoma (opaque) reikšmė (base64url), o ne tiesioginė laiko žyma. Tiems, kurie grąžina nepakeistą žymeklį kaip?cursor=— kaip daro Valdymo skydas, CLI, visi SDK ir MCP serveris — nieko keisti nereikia. Senieji laiko žymos žymekliai laikinai bus priimami toliau; neįskaitomi žymekliai dabar grąžina400, užuot tyliai pateikę pirmąjį puslapį. - Poveikis: Jei po grupinio importavimo sąraše matėte mažiau kodų, nei buvo sukurta: kodai niekur nebuvo dingę — nuo šiol sąrašas juos rodo visus. Migracija nereikalinga.
2026-08 · Saugumo pakartotinis skenavimas vėl vyksta kas 24 valandas
- Ištaisyta: Periodinis tikslinių URL adresų ir nukreipimo puslapių nuorodų pakartotinis skenavimas (Google Web Risk) praleisdavo kodus, kurių paskutinis skenavimas buvo tą pačią kalendorinę dieną kaip ir 24 valandų riba — priklausomai nuo paros laiko, pakartotinis skenavimas vėluodavo iki papildomos paros. Riba dabar skaičiuojama tuo pačiu ISO formatu, kuriuo saugomos skenavimo laiko žymos.
- Poveikis: Tikslinis URL adresas, kuris po paskutinio skenavimo klasifikuojamas kaip nesaugus, vėl sukelia automatinį kodo pristabdymą per dokumentuotą 24 valandų langą. API ar atsakymo formato pakeitimų nėra.
2026-08 · API raktai nustoja galioti pasibaigus jų galiojimo laikui
- Ištaisyta: API raktas, kurio
expires_atbuvo tą pačią dieną, buvo priimamas iki vidurnakčio UTC. Galiojimo pabaiga dabar lyginama kaip laiko žyma, o ne kaip simbolių eilutė – pasibaigusio galiojimo raktas iškart grąžina401. - Kontekstas:
expires_atsaugomas kaip ISO laiko žyma (2026-08-14T09:00:00Z), o palyginamoji pusė pateikdavo formatą su tarpu (2026-08-14 09:00:00). Todėl tiesioginis simbolių eilučių palyginimas buvo teisingas tik tol, kol skyrėsi pati data. - Poveikis: Migracija nereikalinga,
GET /v1/api-keysatsakymo formatas lieka nepakitęs. Neįskaitomos galiojimo pabaigos reikšmės dabar laikomos pasibaigusiomis, o ne galiojančiomis.
2026-08 · API nuoroda: Tenant valdymas dokumentuotas
- OpenAPI: Specifikacija — o kartu ir interaktyvi nuoroda — dabar dokumentuoja organizacijas (įsk.
GET /v1/organizations/usage), darbo sritis (Workspaces), narius ir roles bei audito žurnalus (Audit-Logs). - Billing: Planų apžvalga (
GET /v1/billing/plans) yra vieša; Checkout (POST /v1/billing/checkout) ir Stripe klientų portalas (GET /v1/billing/portal) yra nurodyti kaip galiniai taškai organizacijos administratoriams. - Nuskaitymų eksportas: Nuskaitymų statistika (
GET /v1/codes/{id}/scans) ir neapdorotų duomenų eksportas (…/scans.csv,…/scans.xlsx) yra visiškai dokumentuoti — įskaitant BDAR pranešimą:ip_hashniekada neįtraukiamas į eksportą. - Klaidų elgsena: Taip pat naujai dokumentuotas užklausos patvirtinimo
400atsakymas: pranešimo turinys (body) yra neapdorota Zod klaida, o ne RFC-7807 problemos dokumentas — vis dėlto jis pateikiamas su Content-Typeapplication/problem+json.
2026-08 · Viešųjų failų nuorodų kopijavimas
- Valdymo skydelis: Vieši failai kodo išsamios informacijos puslapyje dabar turi mygtuką, kuris nukopijuoja jų viešąją nuorodą į iškarpinę. Ją galima iškart naudoti kaip QR kodo tikslo URL, kai nuskaičius kodą turi atsidaryti konkretus dokumentas, o ne nukreipimo puslapis su failų sąrašu.
- API: Failų galiniai taškai (
/v1/files) papildomai grąžinapublic_url. Šis laukas užpildomas tik failams suvisibility: public– privatūs failai viešo adreso negauna. - Elgsena: Nuoroda veikia be prisijungimo ir atidaro failą tiesiai naršyklėje. Failą pakeitus funkcija Pakeisti, nuoroda nesikeičia, todėl su ja atspausdintas kodas lieka galioti. Išsamiau: Failai ir duomenų lapai.
2026-07 · Komandos vaidmenys: bendradarbiai be šalinimo teisės ir administratoriaus atsiskaitymas
- Nauja: nario vaidmuo Bendradarbis (be šalinimo) — kuria ir redaguoja QR kodus, failus bei Digital Product Passports, tačiau negali nieko šalinti ar kurti API raktų. Visi destruktyvūs programinės sąsajos taškai tikrina vaidmenį serverio pusėje (
403). - Atsiskaitymas: plano keitimas ir Stripe klientų portalas (
POST /v1/billing/checkout,GET /v1/billing/portal) dabar yra prieinami tik organizacijos administratoriams — visiems kitiems vaidmenims rodoma tik skaitoma plano apžvalga. - Dashboard: veiksmai, kurių neleidžia naudotojo vaidmuo, yra paslepiami: pavyzdžiui, Žiūrovas nemato kūrimo, redagavimo ar šalinimo mygtukų, tačiau sąrašai, atsisiuntimai ir statistika lieka matomi. Išsamiau: Komanda ir vaidmenys.
2026-06 · Išorinės nuorodos kodo nukreipimo puslapyje
- Nukreipimo puslapis: qr3 talpinamas kodo nukreipimo puslapis dabar gali pateikti išorines, savarankiškai talpinamas nuorodas (
{ label, url }) kartu su įkeltais failais arba vietoj jų – pavyzdžiui, techninių duomenų lapams jūsų pačių svetainėje. - API:
POST/PATCH /v1/codespriima masyvąlinks(0–20 įrašų,http(s), ≤ 2048 simbolių). Kiekvienas URL tikrinamas naudojant „Google Web Risk“; nesaugus URL grąžina422. Tuščias masyvas pašalina visas nuorodas. - Valdymo skydelis: Pridėkite, pertvarkykite ir pašalinkite nuorodas kodo informacijos puslapyje.
- Sauga: Atvaizduotos nuorodos lieka apsaugotos nuo XSS (su kaitos ženklais, tik
http(s)), o puslapis išsaugo savonoindexantraštę.
2026-04 · Valdymo skydelio analitika kiekvienam QR kodui
- Valdymo skydelis: Analitikos mygtukas QR kodų sąraše dabar atidaro atitinkamo QR kodo statistikos puslapį adresu
/dashboard/codes/{id}. - Routing: Alternatyvus adresas (alias)
/dashboard/codesir toliau nukreipia į/dashboard, tačiau nebeperima detalių maršrutų, tokių kaip/dashboard/codes/{id}. - API: Detalusis puslapis įkelia QR kodą tiesiogiai per
GET /v1/codes/:id; dėl to jis nebėra priklausomas nuo sąrašo puslapiavimo (pagination) ribojimų. - Testai: Regresijos testai apima alternatyvaus adreso nukreipimą (alias redirect) ir tiesioginį kodo įkėlimą.
2026-04 · QR kodų trynimo dialogas valdymo skydelyje
- Valdymo skydelis: Šiukšliadėžės piktograma QR kodų sąraše dabar atidaro atskirą React dialogą, o ne naršyklės iššokantį langą (popup).
- Feedback: Ištrynus pasirodo iškylantysis pranešimas (toast) apie sėkmę arba klaidą.
- Testai:
packages/dashboard/tests/dashboard.test.tsapsaugo nuo regresijų naudojantconfirm()QR kodo trynimo sraute.
2026-04 · Trumpųjų nuorodų testas dinaminiams QR kodams valdymo skydelyje
- Valdymo skydelis: Trumpieji kodai (shortcodes) QR kodų sąraše dabar yra tiesiogiai spustelėjami als išorinės nukreipimo nuorodos. Išorinės nuorodos piktograma šalia, pvz.,
wu3qaa, atidarohttps://qr3.app/{shortCode}naujame skirtuke. - i18n: Pridėti patarimų (tooltip) tekstai vokiečių ir anglų kalbomis.
- Testai:
packages/dashboard/tests/dashboard.test.tsapsaugo nuorodos „href“, naujo skirtuko elgseną,noopener noreferrerir piktogramą nuo regresijų.
2026-04 · Nukreipimo Worker maršrutas dinaminiams QR kodams
- Ištaisyta: Dinaminius QR kodus adresu
https://qr3.app/{shortCode}vėl apdoroja nukreipimo Worker. Gamybinis (production) maršrutas dabar naudojaqr3.app/*, nes Cloudflare Worker maršrutai nepalaiko:codekelio parametrų. - Sustiprinimas: Neatitinkantys keliai perduodami į pradinę svetainę (landing origin), kad nukreipimo Worker neblokuotų įprastų puslapių, tokių kaip
/de/pricing. - Testai:
packages/redirect/tests/unit/redirect.test.tstikrina pakaitos simbolio (wildcard) maršrutą, trumpojo kodo apdorojimą ir pradinės svetainės praleidimą (origin pass-through).
2026-04 · Darbo srities DPP nuskaitymų apžvalga (Q3.4.2)
- Nauja:
GET /v1/workspace/stats/dpp?days=30— agreguoja visus API rakto darbo srities (workspace)dpp_scans(active_dpps,scans_by_day,top_dppssu produkto pavadinimu / kategorija). - Valdymo skydelis: Kortelė pradiniame puslapyje (
/dashboard) su 30 dienų stulpeline diagrama + populiariausių sąrašais — lygiagrečiai su QR kodo kortelėmis. - Public: Rinkodaros trumpoji nuoroda
GET /dpp/dpp_<id>(vienas segmentas) tiesioginėms demonstracijoms, lygiagrečiai su/dpp/{gtin}/{serial}.
2026-04 · DPP nuskaitymų analitika (Q3.4.1)
- Nauja:
GET /v1/dpp/:id/stats?days=30— agreguoti viešojo GS1 atpažintuvo (resolver) nuskaitymai vienam DPP. Laukai:total_scans,period_scans,scans_by_day,top_countries,top_devices,top_representations. - Nauja: Lentelė
dpp_scans(migracija0011) — atskirta nuoscans(nukreipimo Worker). IP adresai maišomi (hashed) naudojant kasdien keičiamą druską (salt), neapdoroti IP adresai niekada nepasiekia D1. - Valdymo skydelis: Mini diagramos kortelė (SVG, nenaudojant diagramų bibliotekos) adresu
/dashboard/dpp/:dppIdsu 30 dienų stulpeliais + 3 populiariausių pasiskirstymais. Tuščia būsena (empty-state), kai tik DPP yra paskelbtas, bet dar neturėjo nuskaitymų.
2026-04 · Tiesioginis ES atitikties simuliatorius (Q3.3.7)
- Nauja:
POST /v1/dpp/:id/validate-update— simuliuoja dalinius atnaujinimus be būsenos išsaugojimo (stateless) (būsena, rinkų sąrašas, …) be išliekamumo. Atsakyme yraeu_compliance+preview.changed_fields. - Valdymo skydelis: Simuliatoriaus kortelė detaliame DPP puslapyje (
/dashboard/dpp/:dppId) — žymos (chips) skirtosDE/AT/FR/IT/ES/NL+ pasirinktinėms, būsenos išskleidžiamasis sąrašas, Preview EU impact / Save changes / Reset. Neblokuojantis veikimas per RemixuseFetcher. - Sustiprinimas: Iškelti simuliatoriaus pagalbiniai įrankiai (helpers) (
readUpdatePatchFromForm,marketCountriesKey) + 18 naujų vienetų testų (unit tests); klaidų pataisymas: vienišas ne ISO įvesties laukas nebeištrina rinkų sąrašo.
2026-04 · Tiesioginė ES atitikties peržiūra kūrimo formoje (Q3.3.6)
- Pakeista:
POST /v1/dpp/validatepapildomai pateikiaeu_compliance— tas pats tikrintuvas (validator) kaip irGET /v1/dpp/:id/eu-compliance, veikiantis be būsenos išsaugojimo (stateless) prieš išsaugant. - Valdymo skydelis: Peržiūra po esamu patvirtinimo skydeliu + naujas apsauginis išsaugojimo skydelis (Save-Guard-Banner) prieš pateikimo mygtukus, jei yra klaidų / įspėjimų (i18n daugiskaitos formos DE/EN).
2026-04 · ES tikrintuvas + tekstilės vartotojo sąsaja (Q3.3.4 + Q3.3.5)
- Nauja: ES atitikties tikrintuvas (EU-Compliance-Validator) su 5 tekstilės taisyklėmis (
TEXTILE_AGEC_REQUIRED,TEXTILE_MICROPLASTICS_CONSISTENCY,TEXTILE_SVHC_THRESHOLD,TEXTILE_GREENWASHING,TEXTILE_ESPR_READY). - Nauja:
GET /v1/dpp/:id/eu-compliancesucompliant/espr_ready/issues[]/summary. - Valdymo skydelis: ES atitikties skiltis detaliame DPP puslapyje (suvestinės kortelės, sugrupuotos problemų kortelės, ESPR-Ready ženklelis antraštėje).
2026-04 · Tekstilės DPP schema (Q3.3.1–Q3.3.3)
- Nauja: Kategorija
textilesu privaloma AGEC grandine (audimas / mezgimas → dažymas / spausdinimas → siuvimas / konfekcija), kiekvienam pluoštuiorigin_country+recycled_pct,svhc_substances[], ESPR-Opt-in (PEF, tarnavimo laikas, Recyclability). - Nauja: Bazinis laukas
market_countries: string[](ISO 3166-1 alpha-2) visose DPP kategorijose — valdo Prancūzijai būdingas AGEC taisykles ir privalomą prancūzišką pastabą vartotojui. - Nauja: Vartotojo HTML šablonas su AGEC mikroplastiko įspėjamuoju laukeliu, 3 pakopų kilmės grandine (vėliavėlių žymekliais), SVHC sąrašu, Durability ir Recyclability skiltimis.
- Migracija:
0010_dpp_market_countries(D1).
2026-04 · Masinis DPP importas (Q3.2.1–Q3.2.5)
- Nauja:
POST /v1/dpp/importpriima CSV ir XLSX (suderinama su Worker per SheetJSxlsx, ~283 KB gzip paketas). - Skaliuojama: planu pagrįstas limitas (Free 100 → Enterprise 10k) + suskaidytas
db.batch()po 100 + 5 MB užklausos kūno (body) limitas. - Nauja: Klaidų ataskaita kaip CSV atsakymo 201 lauke
errors_csv;GET /v1/dpp/import/templates/:category?format=csv|xlsxpateikia paruoštus šablonus baterijoms ir tekstilei. - Valdymo skydelis: Failų vilkimo ir nuleidimo (drag-and-drop) įkėlimas adresu
/dashboard/dpp/importsu šablonų tarpiniu serveriu (proxy) ir tiesioginiu CSV atsisiuntimu.
Neesminiai pakeitimai (Non-Breaking) — LTS išplėtimai
Visi aukščiau išvardyti pakeitimai yra papildomi:
- Esami
POST /v1/dpp/validateklientai ignoruoja naująeu_compliancelauką be jokių pakeitimų. - Esami
batterysrautai lieka nepakeisti. market_countriesyra neprivalomas ir jo numatytoji reikšmė yra[].
Žr. API versijavimas dėl esminių pakeitimų politikos (Breaking-Change-Policy).