Dnevnik sprememb
Dnevnik sprememb
Izbrani poudarki zadnjih izdaj. Za celotne različice API-ja in pravilnik o prelomnih spremembah si oglejte Različice API-ja in pravilnik LTS.
Podrobne spremembe posameznih končnih točk: Specifikacija OpenAPI in interaktivno referenco API.
2026-08 · Keyset kazalec zdaj na vseh seznamskih končnih točkah
- Popravek: Popravek kazalca za
GET /v1/codesinGET /v1/dpp(glejte spodaj) je zdaj uveden za vse preostale seznamske končne točke s paginacijo na podlagi kazalca:GET /v1/qr-codes/:id/comments,/v1/workspaces,/v1/gs1/identifiers,/v1/members,/v1/audit-logs,/v1/admin/orgs,/v1/admin/usersin/v1/webhooks/:id/deliveries. Vsi so prej listali izključno pocreated_at; vrstice z enakim časovnim žigom (revizijski zapisi paketne operacije, ponovni poskusi webhookov, uvozi članov) so se lahko na naslednji strani izgubile. Sortirni ključ je zdaj povsod nabor(created_at, id). - Sprememba API-ja: V teh seznamih je
meta.pagination.next_cursorod zdaj naprej prav tako neprozorna vrednost (base64url) namesto samega časovnega žiga; nečitljivi kazalci vrnejo400, stari kazalci s časovnim žigom pa se začasno še naprej sprejemajo. Izjema jeGET /v1/webhooks/:id/deliveries: tamnext_cursorostaja ID zadnje dostave (neznan ID → prva stran). Odjemalcem, kinext_cursorvračajo nespremenjen — Nadzorna plošča, CLI, SDK-ji, MCP —, ni treba ničesar spreminjati. - Vpliv: Migracija ni potrebna. Če ste v katerem od teh seznamov (npr. revizijski dnevnik ali dnevnik dostav v Nadzorni plošči) pri listanju pogrešali zapise: nikoli niso izginili — seznami jih od zdaj naprej prikazujejo v celoti.
2026-08 · Časovni žigi po urejanju in brisanju ponovno skladni z OpenAPI
- Popravek: Po
PATCH /v1/codes/{id}se jeupdated_atvrnil v formatu SQLite brez časovnega pasu (2026-08-17 09:00:00), čeprav specifikacija OpenAPI določaformat: date-timein ustvarjanje (POST) vrne časovni žig ISO (2026-08-17T09:00:00.000Z). Enako je veljalo zadeleted_at/updated_atpri mehkem brisanju (soft-delete) ter za poti urejanja/brisanja API-ključev, organizacij, delovnih prostorov, članov, komentarjev in webhookov, poleg tega pa tudi zalast_used_atAPI-ključev inlast_triggered_atwebhookov. Vse poti za pisanje zdaj zapisujejo časovni žig v formatu ISO 8601 (UTC,TinZ). - Vpliv: Odjemalci, ki razčlenjujejo
updated_atznew Date(...)(SDK-ji, CLI, Nadzorna plošča), so format s presledkom prebrali kot lokalni čas — CLI je pri enkrat urejenih kodah prikazal čas, zamaknjen za lokalni odmik (Dunaj: −2 h). To je odpravljeno. Poleg tega migracija podatkov normalizira že shranjene vrednosti v starem formatu na ISO, da bosta razvrščanje in primerjava v mešanih podatkih pravilna. Brez sprememb imen polj ali strukture odgovora. - Ozadje: Isti razred napake kot pri spodnjih dveh popravkih (potek veljavnosti API-ključa, meja za ponovni pregled): SQLite-ova funkcija
datetime('now')zapisujeYYYY-MM-DD HH:MM:SS, vsi ostali zapisovalci pa ISO 8601. Zaščitni test v izvorni kodi bo v prihodnje preprečil nove pojavitve te napake.
2026-08 · Paginacija seznamov ne izgublja več paketno ustvarjenih kod
- Popravek:
GET /v1/codesinGET /v1/dppsta uporabljala paginacijo samo prekcreated_at. Vendar pa si kode izPOST /v1/codes/batch,POST /v1/dpp/batchin uvoza CSV/XLSX delijo en časovni žig — takoj ko je bil batch večji odlimit(privzeto 20), druga stran ni več vrnila preostalih vrstic istega časovnega žiga. Kode so obstajale in so bile dosegljive prekGET /v1/codes/:id, vendar se niso nikoli pojavile v seznamu (Nadzorna plošča, CLIqr3 list, SDK-ji, MCP). Kazalec je zdaj nabor ključev (keyset) prek(created_at, id). - Sprememba API-ja:
meta.pagination.next_cursorje od zdaj naprej neprozorna vrednost (base64url) namesto golega časovnega žiga. Tistim, ki kazalec vračajo nespremenjen kot?cursor=— kot to počnejo Nadzorna plošča, CLI, vsi SDK-ji in strežnik MCP —, ni treba ničesar spreminjati. Stari kazalci s časovnim žigom bodo prehodno še naprej sprejeti; nečitljivi kazalci zdaj vrnejo400namesto tihega prikaza prve strani. - Vpliv: Če ste po uvozu batcha v seznamu videli manj kod, kot jih je bilo ustvarjenih: kode niso nikoli izginile — seznam jih od zdaj naprej prikazuje v celoti. Migracija ni potrebna.
2026-08 · Varnostni ponovni pregledi ponovno potekajo v 24-urnem intervalu
- Popravek: Periodično ponovno skeniranje ciljnih URL-jev in povezav na pristajalnih straneh (Google Web Risk) je preskočilo kode, katerih zadnji pregled je bil na isti koledarski dan kot 24-urna časovna meja — glede na čas se je ponovni pregled zakasnil za do en dodaten dan. Časovna meja se zdaj izračunava v enakem formatu ISO, v katerem so shranjeni časovni žigi pregledov.
- Vpliv: Ciljni URL, ki je po zadnjem pregledu označen kot nevaren, ponovno v dokumentiranem 24-urnem oknu vodi do samodejne zaustavitve kode. Brez sprememb API-ja ali formata odgovora.
2026-08 · API-ključi potečejo ob točnem času poteka
- Popravek: API-ključ, katerega
expires_atje bil na isti dan, je bil še naprej sprejet do polnoči UTC. Potek se zdaj primerja kot časovni žig namesto kot niz znakov — potekel ključ takoj vrne401. - Ozadje:
expires_atse shrani kot časovni žig ISO (2026-08-14T09:00:00Z), primerjalna stran pa je vrnila format s presledkom (2026-08-14 09:00:00). Surova primerjava nizov znakov je bila zato pravilna le, dokler se je razlikoval že sam datum. - Vpliv: Migracija ni potrebna, format odgovora
GET /v1/api-keysostaja nespremenjen. Nečitljive vrednosti poteka zdaj veljajo za potekle namesto za veljavne.
2026-08 · Referenca API: Dokumentirano upravljanje tenantov
- OpenAPI: Specifikacija — in s tem interaktivna referenca — zdaj dokumentira organizacije (vklj.
GET /v1/organizations/usage), delovne prostore (workspaces), člane in vloge ter revizijske dnevnike (audit logs). - Billing: Pregled naročniških paketov (
GET /v1/billing/plans) je javen; Checkout (POST /v1/billing/checkout) in Stripe portal za stranke (GET /v1/billing/portal) sta označena kot končni točki za administratorje organizacij. - Izvoz skeniranj: Statistika skeniranj (
GET /v1/codes/{id}/scans) in izvoz surovih podatkov (…/scans.csv,…/scans.xlsx) sta v celoti dokumentirana — vključno z opozorilom o GDPR:ip_hashni nikoli vključen v izvoz. - Obnašanje ob napakah: Na novo je dokumentiran tudi odgovor
400pri validaciji zahtev: telo (body) je surova napaka Zod, ne dokument o težavi RFC-7807 — vendar se kljub temu dostavi pod vrsto vsebineapplication/problem+json.
2026-08 · Kopiranje javnih povezav do datotek
- Nadzorna plošča: Javne datoteke na strani s podrobnostmi kode imajo zdaj gumb, ki njihovo javno povezavo kopira v odložišče – ta je neposredno uporabna kot ciljni URL QR-kode, kadar naj skeniranje namesto pristajalne strani s seznamom datotek takoj odpre določen dokument.
- API: Končne točke za datoteke (
/v1/files) dodatno vračajopublic_url. Polje je nastavljeno samo pri datotekah zvisibility: public– zasebne datoteke ne dobijo javnega naslova. - Vedenje: Povezava ne zahteva prijave in datoteko odpre neposredno v brskalniku. Zamenjava datoteke z gumbom Zamenjaj povezave ne spremeni, zato natisnjena koda ostane veljavna. Podrobnosti: Datoteke in podatkovni listi.
2026-07 · Vloge v ekipi: Sodelavci brez pravice brisanja in administratorsko obračunavanje
- Novo: Vloga člana Sodelavec (brez brisanja) — ustvarja in ureja QR-kode, datoteke in Digital Product Passports, ne more pa ničesar izbrisati ali ustvarjati API-ključev. Vsi destruktivni endpointi preverjajo vlogo na strežniški strani (
403). - Obračunavanje: Nadgradnje naročnin in Stripe portal za stranke (
POST /v1/billing/checkout,GET /v1/billing/portal) so zdaj omejeni na Administratorje organizacije — vse druge vloge vidijo pregled naročnin samo za branje. - Dashboard: Dejanja, ki jih trenutna vloga ne dovoljuje, so skrita: Gledalec na primer ne vidi gumbov za ustvarjanje, urejanje ali brisanje; seznami, prenosi in statistika ostanejo vidni. Podrobnosti: Ekipa in vloge.
2026-06 · Zunanje povezave na pristajalni strani kode
- Pristajalna stran: qr3-gostovana pristajalna stran kode lahko zdaj poleg naloženih datotek ali namesto njih navede zunanje, samostojno gostovane povezave (
{ label, url }) – na primer za podatkovne liste na vaši lastni strani. - API:
POST/PATCH /v1/codessprejemata poljelinks(0–20 vnosov,http(s), ≤ 2048 znakov). Vsak URL se preveri z Google Web Risk; nevaren URL vrne422. Prazno polje izbriše vse povezave. - Nadzorna plošča: Dodajanje, prerazporejanje in odstranjevanje povezav na strani s podrobnostmi kode.
- Varnost: Upodobljene povezave ostanejo varne pred XSS (escapirane, samo
http(s)) in stran ohrani svojo glavonoindex.
2026-04 · Analitika nadzorne plošče na posamezno kodo QR
- Nadzorna plošča: Gumb za analitiko na seznamu kod QR zdaj odpre stran s statistiko posamezne kode QR na naslovu
/dashboard/codes/{id}. - Usmerjanje: Alias
/dashboard/codesše naprej preusmerja na/dashboard, vendar ne prestreza več podrobnih poti, kot je/dashboard/codes/{id}. - API: Podrobna stran naloži kodo QR neposredno prek
GET /v1/codes/:id; s tem ni več odvisna od omejitev strani na seznamu (pagination). - Testi: Regresijski testi pokrivajo preusmeritev aliasa in neposredno nalaganje kode.
2026-04 · Pogovorno okno za brisanje kod QR na nadzorni plošči
- Nadzorna plošča: Ikona smetnjaka na seznamu kod QR zdaj odpre lastno pogovorno okno React namesto izvornega pojavnega okna brskalnika.
- Povratne informacije: Po brisanju se prikaže pojavno obvestilo (toast) o uspehu ali napaki.
- Testi:
packages/dashboard/tests/dashboard.test.tspreprečuje regresije priconfirm()v poteku brisanja kode QR.
2026-04 · Test kratkih povezav na nadzorni plošči za dinamične kode QR
- Nadzorna plošča: Kratke kode na seznamu kod QR so zdaj neposredno klikljive kot zunanje preusmeritvene povezave. Ikona za zunanjo povezavo poleg npr.
wu3qaaodprehttps://qr3.app/{shortCode}v novem zavihku. - i18n: Dodana besedila orodnih namigov (tooltip) za nemščino in angleščino.
- Testi:
packages/dashboard/tests/dashboard.test.tsščiti povezavo href, vedenje novega zavihka,noopener noreferrerin ikono pred regresijami.
2026-04 · Pot preusmeritvenega delavca (Redirect-Worker) za dinamične kode QR
- Popravek: Dinamične kode QR na
https://qr3.app/{shortCode}ponovno obdeluje preusmeritveni delavec (Redirect-Worker). Produkcijska pot zdaj uporabljaqr3.app/*, ker poti Cloudflare Workers ne podpirajo parametrov poti:code. - Utrjevanje: Neprilagojene poti se posredujejo ciljnemu naslovu pristajalne strani (landing origin), tako da preusmeritveni delavec ne blokira običajnih strani, kot je
/de/pricing. - Testi:
packages/redirect/tests/unit/redirect.test.tspreverja pot z divjo karto (wildcard), obdelavo kratkih kod in prehod do ciljnega naslova (origin pass-through).
2026-04 · Pregled skeniranj DPP v delovnem prostoru (Q3.4.2)
- Novo:
GET /v1/workspace/stats/dpp?days=30— združuje vsa skeniranjadpp_scansdelovnega prostora ključa API (active_dpps,scans_by_day,top_dppsz imenom izdelka/kategorijo). - Nadzorna plošča: Kartica na začetni strani (
/dashboard) s 30-dnevnim paličnim grafikonom + seznami najboljših — vzporedno s karticami kod QR. - Javno: Tržna kratka povezava
GET /dpp/dpp_<id>(en segment) za predstavitve v živo, vzporedno z/dpp/{gtin}/{serial}.
2026-04 · Analitika skeniranj DPP (Q3.4.1)
- Novo:
GET /v1/dpp/:id/stats?days=30— združena skeniranja javnega razreševalnika GS1 na DPP. Polja:total_scans,period_scans,scans_by_day,top_countries,top_devices,top_representations. - Novo: Tabela
dpp_scans(migracija0011) — ločena odscans(preusmeritveni delavec). IP-naslovi so zgoščeni z dnevno rotirajočo soljo (salt), surove IP-naslove pa nikoli ne dosežejo baze D1. - Nadzorna plošča: Mini kartica z grafikonom (SVG, brez knjižnice za grafikone) na
/dashboard/dpp/:dppIds 30-dnevnimi stolpci + razčlenitvijo najboljših 3. Prazno stanje (empty state), takoj ko je DPP aktiven, vendar še nima skeniranj.
2026-04 · Simulator skladnosti z EU v živo (Q3.3.7)
- Novo:
POST /v1/dpp/:id/validate-update— simulira delne posodobitve brez stanja (stateless) (status, seznam trgov, …) brez obstojnosti. Odgovor vsebujeeu_compliance+preview.changed_fields. - Nadzorna plošča: Kartica simulatorja v podrobnostih DPP (
/dashboard/dpp/:dppId) — žetoni (chips) zaDE/AT/FR/IT/ES/NL+ po meri, spustni meni za status, Predogled vpliva na EU / Shrani spremembe / Ponastavi. Neblokirajoče prek RemixuseFetcher. - Utrjevanje: Zunanji pomočniki simulatorja (
readUpdatePatchFromForm,marketCountriesKey) + 18 novih enotskih testov; popravek hrošča: samostojni ne-ISO vnos ne izbriše več seznama trgov.
2026-04 · Predogled skladnosti z EU v živo v obrazcu za ustvarjanje (Q3.3.6)
- Spremenjeno:
POST /v1/dpp/validatedodatno vrneeu_compliance— isti validator kotGET /v1/dpp/:id/eu-compliance, brez stanja (stateless) pred shranjevanjem. - Nadzorna plošča: Predogled pod obstoječo ploščo za preverjanje veljavnosti + nova pasica za zaščito pred shranjevanjem (Save-Guard-Banner) pred gumbi za pošiljanje, če so odprte napake/opozorila (i18n množina DE/EN).
2026-04 · Validator EU + uporabniški vmesnik za tekstil (Q3.3.4 + Q3.3.5)
- Novo: Validator skladnosti z EU s 5 tekstilnimi pravili (
TEXTILE_AGEC_REQUIRED,TEXTILE_MICROPLASTICS_CONSISTENCY,TEXTILE_SVHC_THRESHOLD,TEXTILE_GREENWASHING,TEXTILE_ESPR_READY). - Novo:
GET /v1/dpp/:id/eu-compliancezcompliant/espr_ready/issues[]/summary. - Nadzorna plošča: Razdelek za skladnost z EU v podrobnostih DPP (povzetki v obliki ploščic, skupinske kartice težav, značka ESPR-Ready v glavi).
2026-04 · Shema DPP za tekstil (Q3.3.1–Q3.3.3)
- Novo: Kategorija
textilez obvezno verigo AGEC (tkanje/pletenje → barvanje/tiskanje → konfekcija), za vsako vlaknoorigin_country+recycled_pct,svhc_substances[], ESPR-Opt-in (PEF, življenjska doba, možnost recikliranja). - Novo: Osnovno polje
market_countries: string[](ISO 3166-1 alpha-2) v vseh kategorijah DPP — upravlja specifična francoska pravila AGEC in obvezno francosko obvestilo za potrošnike. - Novo: Potrošniška predloga HTML z opozorilnim poljem AGEC za mikroplastiko, 3-stopenjsko verigo izvora (zastavice), seznamom SVHC ter razdelkom za trajnost (Durability) in možnost recikliranja (Recyclability).
- Migracija:
0010_dpp_market_countries(D1).
2026-04 · Množični uvoz DPP (Q3.2.1–Q3.2.5)
- Novo:
POST /v1/dpp/importsprejema CSV in XLSX (združljivo z delavci prek SheetJSxlsx, ~283 KB stisnjen paket gzip). - Skalirano: omejitev glede na paket (Free 100 → Enterprise 10k) + razdeljen
db.batch()po 100 + 5 MB omejitev telesa (body limit). - Novo: Poročilo o napakah kot CSV v polju
errors_csvodgovora 201;GET /v1/dpp/import/templates/:category?format=csv|xlsxponuja pripravljene predloge za baterije in tekstil. - Nadzorna plošča: Prenos z vlečenjem in spuščanjem (Drag-and-Drop) na
/dashboard/dpp/imports posrednikom predlog (template proxy) in neposrednim prenosom CSV.
Neprelomne spremembe — razširitve LTS
Vse zgoraj navedene spremembe so aditivne:
- Obstoječe stranke
POST /v1/dpp/validateprezrejo novo poljeeu_compliancebrez sprememb. - Obstoječi poteki za
batteryostajajo nespremenjeni. market_countriesje neobvezen in ima privzeto vrednost[].
Glejte Različice API-ja za pravilnik o prelomnih spremembah.