Skip to content

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/codes in GET /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/users in /v1/webhooks/:id/deliveries. Vsi so prej listali izključno po created_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_cursor od zdaj naprej prav tako neprozorna vrednost (base64url) namesto samega časovnega žiga; nečitljivi kazalci vrnejo 400, stari kazalci s časovnim žigom pa se začasno še naprej sprejemajo. Izjema je GET /v1/webhooks/:id/deliveries: tam next_cursor ostaja ID zadnje dostave (neznan ID → prva stran). Odjemalcem, ki next_cursor vrač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 je updated_at vrnil v formatu SQLite brez časovnega pasu (2026-08-17 09:00:00), čeprav specifikacija OpenAPI določa format: date-time in ustvarjanje (POST) vrne časovni žig ISO (2026-08-17T09:00:00.000Z). Enako je veljalo za deleted_at/updated_at pri mehkem brisanju (soft-delete) ter za poti urejanja/brisanja API-ključev, organizacij, delovnih prostorov, članov, komentarjev in webhookov, poleg tega pa tudi za last_used_at API-ključev in last_triggered_at webhookov. Vse poti za pisanje zdaj zapisujejo časovni žig v formatu ISO 8601 (UTC, T in Z).
  • Vpliv: Odjemalci, ki razčlenjujejo updated_at z new 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') zapisuje YYYY-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/codes in GET /v1/dpp sta uporabljala paginacijo samo prek created_at. Vendar pa si kode iz POST /v1/codes/batch, POST /v1/dpp/batch in uvoza CSV/XLSX delijo en časovni žig — takoj ko je bil batch večji od limit (privzeto 20), druga stran ni več vrnila preostalih vrstic istega časovnega žiga. Kode so obstajale in so bile dosegljive prek GET /v1/codes/:id, vendar se niso nikoli pojavile v seznamu (Nadzorna plošča, CLI qr3 list, SDK-ji, MCP). Kazalec je zdaj nabor ključev (keyset) prek (created_at, id).
  • Sprememba API-ja: meta.pagination.next_cursor je 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 vrnejo 400 namesto 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_at je 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 vrne 401.
  • Ozadje: expires_at se 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-keys ostaja 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_hash ni nikoli vključen v izvoz.
  • Obnašanje ob napakah: Na novo je dokumentiran tudi odgovor 400 pri validaciji zahtev: telo (body) je surova napaka Zod, ne dokument o težavi RFC-7807 — vendar se kljub temu dostavi pod vrsto vsebine application/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čajo public_url. Polje je nastavljeno samo pri datotekah z visibility: 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/codes sprejemata polje links (0–20 vnosov, http(s), ≤ 2048 znakov). Vsak URL se preveri z Google Web Risk; nevaren URL vrne 422. 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 glavo noindex.

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.ts preprečuje regresije pri confirm() 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. wu3qaa odpre https://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 noreferrer in 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 uporablja qr3.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.ts preverja 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 skeniranja dpp_scans delovnega prostora ključa API (active_dpps, scans_by_day, top_dpps z 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 (migracija 0011) — ločena od scans (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/:dppId s 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 vsebuje eu_compliance + preview.changed_fields.
  • Nadzorna plošča: Kartica simulatorja v podrobnostih DPP (/dashboard/dpp/:dppId) — žetoni (chips) za DE/AT/FR/IT/ES/NL + po meri, spustni meni za status, Predogled vpliva na EU / Shrani spremembe / Ponastavi. Neblokirajoče prek Remix useFetcher.
  • 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/validate dodatno vrne eu_compliance — isti validator kot GET /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-compliance z compliant / 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 textile z obvezno verigo AGEC (tkanje/pletenje → barvanje/tiskanje → konfekcija), za vsako vlakno origin_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/import sprejema CSV in XLSX (združljivo z delavci prek SheetJS xlsx, ~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_csv odgovora 201; GET /v1/dpp/import/templates/:category?format=csv|xlsx ponuja pripravljene predloge za baterije in tekstil.
  • Nadzorna plošča: Prenos z vlečenjem in spuščanjem (Drag-and-Drop) na /dashboard/dpp/import s 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/validate prezrejo novo polje eu_compliance brez sprememb.
  • Obstoječi poteki za battery ostajajo nespremenjeni.
  • market_countries je neobvezen in ima privzeto vrednost [].

Glejte Različice API-ja za pravilnik o prelomnih spremembah.