Changelog
Muudatuste logi
Viimaste väljalasete kureeritud esiletõstmised. Täielike API versioonide ja katkestavate muudatuste poliitika kohta vaata API versioonihaldus ja LTS-poliitika.
Üksikasjalikud muudatused konkreetsetes otspunktides (endpoints): OpenAPI spetsifikatsioon ja interaktiivne API viide.
2026-08 · Keyset-kursor nüüd kõigil loendi lõpp-punktidel
- Parandus: Kursori parandus lõpp-punktide
GET /v1/codesjaGET /v1/dppjaoks (vt allpool) on nüüd laiendatud kõigile ülejäänud kursoriga lehekülgedeks jagatud loenditele:GET /v1/qr-codes/:id/comments,/v1/workspaces,/v1/gs1/identifiers,/v1/members,/v1/audit-logs,/v1/admin/orgs,/v1/admin/usersja/v1/webhooks/:id/deliveries. Kõik need lehitsesid ainult väljacreated_atalusel; identse ajatempliga read (batch-operatsiooni auditisissekanded, veebikonksude korduskatsed, liikmete impordid) võisid järgmisel lehel kaduma minna. Sorteerimisvõtmeks on nüüd igal pool tuupel(created_at, id). - API muudatus: Nendes loendites on
meta.pagination.next_cursornüüdsest samuti läbipaistmatu väärtus (base64url) palja ajatempli asemel; loetamatud kursorid tagastavad vastuse400, vanu ajatempliga kursoreid aktsepteeritakse üleminekuperioodil edasi. Erand onGET /v1/webhooks/:id/deliveries: seal jääbnext_cursorviimase kohaletoimetamise ID-ks (tundmatu ID → esimene lehekülg). Kliendid, mis tagastavad väärtusenext_cursormuutmata kujul — Töölaud, CLI, SDK-d, MCP —, ei pea midagi muutma. - Mõju: Migratsiooni pole vaja. Kui keegi tundis mõnes neist loenditest (nt auditi logi või kohaletoimetamise logi Töölaual) lehitsemisel puudust mõnest sissekandest: need polnud kunagi kadunud — loendid kuvavad neid nüüdsest täielikult.
2026-08 · Ajatemplid pärast muutmist ja kustutamist taas OpenAPI-ga kooskõlas
- Parandus: Pärast
PATCH /v1/codes/{id}päringut tagastatiupdated_atSQLite-vormingus ilma ajavööndita (2026-08-17 09:00:00), kuigi OpenAPI-spetsifikatsioon lubabformat: date-timeja loomine (POST) tagastab ISO-ajatempli (2026-08-17T09:00:00.000Z). Sama kehtisdeleted_at/updated_atkohta pehme kustutamise puhul ning API-võtmete, organisatsioonide, tööruumide (Workspaces), liikmete, kommentaaride ja veebikonksude (Webhooks) muutmise/kustutamise teede puhul, samuti API-võtmetelast_used_atja veebikonksudelast_triggered_atpuhul. Kõik kirjutusteed kasutavad nüüd ISO 8601 ajatemplit (UTC,TjaZ). - Mõju: Kliendid, mis parsivad
updated_atväärtust funktsiooniganew Date(...)(SDK-d, CLI, Töölaud), lugesid tühikuga vormingut kui kohalikku aega — CLI näitas korra muudetud koodide puhul aega kohaliku nihke võrra nihutatuna (Viin: −2 h). See on lahendatud. Lisaks normaliseerib andmete migratsioon juba salvestatud vana vorminguga väärtused ISO-vormingusse, et sorteerimine ja võrdlused segatud andmete puhul toimiksid õigesti. Väljade nimesid ega vastuse struktuuri ei muudeta. - Taust: Sama veaklass nagu kahel allpool toodud parandusel (API-võtmete aegumine, korduvskannimise piiraeg): SQLite’i
datetime('now')kirjutabYYYY-MM-DD HH:MM:SS, kõik ülejäänud kirjutajad ISO 8601. Lähtekoodi kaitsetest (guard-test) hoiab edaspidi ära uued juhtumid.
2026-08 · Loendi pagineerimine ei kaota enam batch-koode
- Parandus:
GET /v1/codesjaGET /v1/dpppagineerisid varem ainultcreated_atjärgi. Kuid koodid päringutestPOST /v1/codes/batch,POST /v1/dpp/batchja CSV/XLSX-impordist jagavad ühte ajatemplit — niipea kui batch oli suurem kuilimit(vaikimisi 20), ei tagastanud teine lehekülg enam sama ajatempliga ülejäänud ridu. Koodid olid olemas ja kättesaadavad päringugaGET /v1/codes/:id, kuid ei ilmunud kunagi loendisse (Töölaud, CLIqr3 list, SDK-d, MCP). Kursor on nüüd võtmekogum (keyset) üle(created_at, id). - API muudatus:
meta.pagination.next_cursoron nüüdsest läbipaistmatu väärtus (base64url) palja ajatempli asemel. Need, kes edastavad kursori muutmata kujul parameetrina?cursor=— nagu teevad Töölaud, CLI, kõik SDK-d ja MCP-server —, ei pea midagi muutma. Vanu ajatempli kursoreid aktsepteeritakse üleminekuperioodil edasi; loetamatud kursorid tagastavad nüüd koodi400, selle asemel et vaikselt esimene lehekülg tagastada. - Mõju: Kui nägite pärast batch-importi loendis vähem koode, kui tegelikult loodi: koodid ei olnud kunagi kadunud — loend kuvab neid nüüdsest täielikult. Migreerimine pole vajalik.
2026-08 · Turvalisuse korduvskannimised toimuvad taas 24-tunnise intervalliga
- Parandus: Siht-URL-ide ja maandumislehtede linkide (Google Web Risk) perioodiline korduvskannimine jättis vahele koodid, mille viimane skannimine toimus samal kalendripäeval kui 24-tunnine piiraeg — olenevalt kellaajast viibis korduvskannimine kuni ühe päeva võrra. Piiraega arvutatakse nüüd samas ISO-vormingus, milles on salvestatud skannimise ajatemplid.
- Mõju: Siht-URL, mis liigitatakse pärast viimast skannimist ebaturvaliseks, põhjustab taas koodi automaatse peatamise dokumenteeritud 24-tunnise akna jooksul. API või vastuse vormingu muudatusi ei ole.
2026-08 · API-võtmed aeguvad täpselt aegumisajal
- Parandus: API-võtit, mille
expires_atoli samal päeval, aktsepteeriti edasi kuni UTC keskööni. Aegumist võrreldakse nüüd ajatemplina, mitte sõnena — aegunud võti tagastab kohe401. - Taust:
expires_atsalvestatakse ISO-ajatemplina (2026-08-14T09:00:00Z), kuid võrdluspool andis tühikuga vormingu (2026-08-14 09:00:00). Seetõttu klappis toores sõnevõrdlus ainult siis, kui juba kuupäev oli erinev. - Mõju: Migreerimine pole vajalik, päringu
GET /v1/api-keysvastuse vorming jääb muutmata. Loetamatuid aegumisväärtusi loetakse nüüd aegunuks, mitte kehtivaks.
2026-08 · API viide: tenandi haldus dokumenteeritud
- OpenAPI: Spetsifikatsioon — ja seega ka interaktiivne viide — dokumenteerib nüüd organisatsioone (sh
GET /v1/organizations/usage), tööruume (Workspaces), liikmeid ja rolle ning auditiloge. - Arveldus: Pakettide ülevaade (
GET /v1/billing/plans) on avalik; Checkout (POST /v1/billing/checkout) ja Stripe’i kliendiportaal (GET /v1/billing/portal) on määratletud lõpp-punktidena organisatsiooni administraatoritele. - Skannimise eksport: Skannimisstatistika (
GET /v1/codes/{id}/scans) ja toorandmete eksport (…/scans.csv,…/scans.xlsx) on täielikult dokumenteeritud — sealhulgas GDPR-i märkus:ip_hashei sisaldu kunagi ekspordis. - Vigade käitumine: Uuena on dokumenteeritud ka päringu valideerimise
400-vastus: vastuse keha on töötlemata Zod-viga, mitte RFC-7807 probleemidokument — sellest hoolimata väljastatakse see sisutüübigaapplication/problem+json.
2026-08 · Avalike faililinkide kopeerimine
- Dashboard: Koodi detailide lehel olevatel avalikel failidel on nüüd nupp, mis kopeerib nende avaliku lingi lõikelauale – seda saab kohe kasutada QR-koodi siht-URL-ina, kui skannimine peab avama kindla dokumendi failide loendiga maandumislehe asemel.
- API: Failide lõpp-punktid (
/v1/files) tagastavad lisaks väljapublic_url. Väli on määratud ainult failidel, millel onvisibility: public– privaatsed failid avalikku aadressi ei saa. - Käitumine: Link ei vaja sisselogimist ja avab faili otse brauseris. Toiming Asenda jätab selle muutmata, nii et selle lingiga trükitud kood jääb kehtima. Üksikasjad: Failid ja andmelehed.
2026-07 · Meeskonna rollid: Kaastööline ilma kustutamisõiguseta ja administraatori arveldus
- Uus: liikmeroll Kaastööline (kustutamiseta) — loob ja muudab QR-koode, faile ning Digital Product Passports, kuid ei saa midagi kustutada ega API-võtmeid luua. Kõik destruktiivsed lõpp-punktid kontrollivad rolli serveri poolel (
403). - Arveldus: paketi uuendamised ja Stripe kliendiportaal (
POST /v1/billing/checkout,GET /v1/billing/portal) on nüüd reserveeritud organisatsiooni administraatoritele — kõik teised rollid näevad kirjutuskaitstud paketi ülevaadet. - Dashboard: toimingud, mida kasutaja roll ei luba, peidetakse: Vaataja ei näe näiteks loomise, muutmise ega kustutamise nuppe; loendid, allalaadimised ja statistika jäävad nähtavaks. Üksikasjad: Meeskond ja rollid.
2026-06 · Välised lingid koodi maandumislehel
- Maandumisleht: Koodi qr3-majutatud maandumisleht võib nüüd loetleda väliseid, ise majutatud linke (
{ label, url }) lisaks üleslaaditud failidele või nende asemel – näiteks andmelehtede jaoks teie enda saidil. - API:
POST/PATCH /v1/codesaktsepteerivad massiivilinks(0–20 kirjet,http(s), ≤ 2048 märki). Iga URL kontrollitakse teenusega Google Web Risk; ebaturvaline URL tagastab422. Tühi massiiv kustutab kõik lingid. - Dashboard: Linkide lisamine, ümberjärjestamine ja eemaldamine koodi üksikasjade lehel.
- Turvalisus: Renderdatud lingid jäävad XSS-turvaliseks (escape’itud, ainult
http(s)) ja leht säilitab omanoindexpäise.
2026-04 · Dashboardi analüütika QR-koodi kohta
- Dashboard: QR-koodide loendis olev analüütika nupp avab nüüd vastava QR-koodi statistikalehe aadressil
/dashboard/codes/{id}. - Marsruutimine (Routing): Alias
/dashboard/codessuunab endiselt aadressile/dashboard, kuid ei püüa enam kinni detailseid marsruute nagu/dashboard/codes/{id}. - API: Detailne leht laeb QR-koodi otse päringuga
GET /v1/codes/:id; seetõttu ei sõltu see enam loendi lehekülgede jaotuse (pagination) piirangutest. - Testid: Regressioonitestid katavad aliase ümbersuunamist ja koodi otsest laadimist.
2026-04 · Dashboardi kustutamise dialoog QR-koodidele
- Dashboard: QR-koodide loendis olev prügikasti ikoon avab nüüd brauseri algupärase (native) hüpikakna asemel spetsiaalse Reacti dialoogiakna.
- Tagasiside: Pärast kustutamist kuvatakse edu või vea kohta teavitustekst (toast-teavitus).
- Testid:
packages/dashboard/tests/dashboard.test.tshoiab ära regressioonid funktsioonileconfirm()QR-koodi kustutamise voos.
2026-04 · Dashboardi lühilingi test dünaamilistele QR-koodidele
- Dashboard: QR-koodide loendis olevad lühikoodid (shortcodes) on nüüd otse klõpsatavad väliste ümbersuunamislinkidena. Välimise lingi ikoon näiteks koodi
wu3qaakõrval avab aadressihttps://qr3.app/{shortCode}uuel vahekaardil. - i18n: Lisatud saksa- ja ingliskeelsed vihjetekstid (tooltips).
- Testid:
packages/dashboard/tests/dashboard.test.tskaitseb lingi href-i, uue vahekaardi käitumist, atribuutinoopener noreferrerja ikooni regressioonide eest.
2026-04 · Suunamise Workeri marsruut dünaamilistele QR-koodidele
- Parandus: Dünaamilisi QR-koode aadressil
https://qr3.app/{shortCode}töötleb uuesti suunamise Worker (Redirect Worker). Tootmismarsruut (production route) kasutab nüüd mustritqr3.app/*, kuna Cloudflare Workeri marsruudid ei toeta:codeteekonnaparameetreid. - Tugevdamine: Mittesobivad teed suunatakse edasi maandumislehe algpunkti (landing origin), et suunamise Worker ei blokeeriks tavalisi lehti nagu
/de/pricing. - Testid:
packages/redirect/tests/unit/redirect.test.tskontrollib metamärgi (wildcard) marsruuti, lühikoodi töötlemist ja algpunkti edasisuunamist (origin pass-through).
2026-04 · Tööruumi (Workspace) DPP skannimiste ülevaade (Q3.4.2)
- Uus:
GET /v1/workspace/stats/dpp?days=30— koondab kõik API-võtme tööruumidpp_scansandmed (active_dpps,scans_by_day,top_dppskoos tootenime/kategooriaga). - Dashboard: Kaart avalehel (
/dashboard) koos 30 päeva tulpdiagrammiga + edetabelid — paralleelselt QR-koodi kaartidega. - Avalik: Turunduse lühilink
GET /dpp/dpp_<id>(üks segment) reaalajas demode jaoks, paralleelselt teega/dpp/{gtin}/{serial}.
2026-04 · DPP skannimiste analüütika (Q3.4.1)
- Uus:
GET /v1/dpp/:id/stats?days=30— avaliku GS1 lahendaja (resolver) koondatud skannimised DPP kohta. Väljad:total_scans,period_scans,scans_by_day,top_countries,top_devices,top_representations. - Uus: Tabel
dpp_scans(migratsioon0011) — eraldiseisev tabelistscans(suunamise Worker). IP-aadressid räsivad iga päev roteeruva soolaga (salt), toored IP-aadressid ei jõua kunagi andmebaasi D1. - Dashboard: Mini-graafiku kaart (SVG, ilma graafikute teegita) aadressil
/dashboard/dpp/:dppIdkoos 30 päeva tulpade + top 3 jaotustega. Tühja oleku (empty state) vaade, kui DPP on avalik, kuid pole veel skannimisi saanud.
2026-04 · Reaalajas EL-i vastavuse simulaator (Q3.3.7)
- Uus:
POST /v1/dpp/:id/validate-update— simuleerib osalisi värskendusi olekuta (stateless) (olek, turgude loend jne) ilma andmete salvestamiseta. Vastus sisaldab väljueu_compliance+preview.changed_fields. - Dashboard: Simulaatori kaart DPP detailvaates (
/dashboard/dpp/:dppId) — nupud (chips) riikideleDE/AT/FR/IT/ES/NL+ kohandatud, oleku rippmenüü, Preview EU impact / Save changes / Reset. Mitteblokeeriv RemixiuseFetcherkaudu. - Tugevdamine: Eraldatud simulaatori abifunktsioonid (
readUpdatePatchFromForm,marketCountriesKey) + 18 uut üksustesti (unit tests); veaparandus: üksik mitte-ISO sisend ei kustuta enam turgude loendit.
2026-04 · Reaalajas EL-i vastavuse eelvaade loomisvormis (Q3.3.6)
- Muudetud:
POST /v1/dpp/validatetagastab lisaks väljaeu_compliance— sama validaator misGET /v1/dpp/:id/eu-compliance, olekuta (stateless) enne salvestamist. - Dashboard: Eelvaade olemasoleva valideerimispaneeli all + uus Save-Guard-bänner enne saatmisnuppe (submit), kui esineb lahendamata vigu/hoiatusi (i18n mitmuse vormid DE/EN).
2026-04 · EL-i validaator + tekstiili kasutajaliides (Q3.3.4 + Q3.3.5)
- Uus: EL-i vastavuse validaator 5 tekstiilireegliga (
TEXTILE_AGEC_REQUIRED,TEXTILE_MICROPLASTICS_CONSISTENCY,TEXTILE_SVHC_THRESHOLD,TEXTILE_GREENWASHING,TEXTILE_ESPR_READY). - Uus:
GET /v1/dpp/:id/eu-compliancekoos väljadegacompliant/espr_ready/issues[]/summary. - Dashboard: EL-i vastavuse jaotis (EU-Compliance-Section) DPP detailvaates (kokkuvõtte kaardid, rühmitatud probleemide kaardid, ESPR-Ready-märk päises).
2026-04 · Tekstiili DPP skeem (Q3.3.1–Q3.3.3)
- Uus: Kategooria
textilekoos kohustusliku AGEC-ahelaga (kudumine/silmkoes valmistamine → värvimine/trükkimine → rõivaste valmistamine), kiu kohtaorigin_country+recycled_pct,svhc_substances[], ESPR-Opt-in (PEF, kasutusiga, ringlussevõetavus). - Uus: Baasväli
market_countries: string[](ISO 3166-1 alpha-2) kõikides DPP kategooriates — juhib Prantsusmaa-spetsiifilisi AGEC-reegleid ja prantsuskeelset kohustuslikku tarbijateavet. - Uus: Tarbija HTML-mall koos AGEC mikroplasti hoiatuskastiga, 3-astmelise päritoluahelaga (lipu-mullid), SVHC-loendiga ning vastupidavuse (Durability) ja ringlussevõetavuse (Recyclability) jaotisega.
- Migratsioon:
0010_dpp_market_countries(D1).
2026-04 · DPP hulgisissevedu (Bulk Import) (Q3.2.1–Q3.2.5)
- Uus:
POST /v1/dpp/importtoetab CSV- ja XLSX-vormingut (Worker-ühilduv SheetJSxlsxkaudu, ~283 KB gzip-pakett). - Skaleeritud: paketipõhine limiit (Free 100 → Enterprise 10k) + osadeks jaotatud
db.batch()à 100 + 5 MB päringu keha (body) limiit. - Uus: Veaaruanne CSV-vormingus vastuse 201 väljal
errors_csv;GET /v1/dpp/import/templates/:category?format=csv|xlsxpakub valmis malle aku ja tekstiili jaoks. - Dashboard: Pukseeri (Drag-and-Drop) üleslaadimine aadressil
/dashboard/dpp/importkoos malli puhverserveri (template proxy) ja vahetu CSV-allalaadimisega.
Mitte-katkestavad (Non-Breaking) — LTS-laiendused
Kõik ülaltoodud muudatused on additiivsed (lisanduvad):
- Olemasolevad
POST /v1/dpp/validatekliendid ignoreerivad uut väljaeu_complianceilma muudatusteta. - Olemasolevad
batteryvood on muutmata. market_countrieson valikuline ja selle vaikeväärtus on[].
Katkestavate muudatuste poliitika kohta vaata API versioonihaldus.