# pasteToPrint Deep Links

Krátky obyčajný text bez API session a bez HTTP `POST` má rezervovaný
fragmentový kontrakt `#text=`. Normatívny formát, limity, priorita importov a
bezpečnostné pravidlá sú definované v
[`INLINE-TEXT-DEEP-LINK-V1.md`](INLINE-TEXT-DEEP-LINK-V1.md). Prijímač je
implementovaný v `assets/js/external-import.js`; AI klientom ho produkčne
inzerujte až po nasadení tejto verzie.

Každá dočasná dokumentová session má oddelený editorový a zobrazovací HTTPS
capability odkaz. Editorový token sa používa aj v PWA a natívnom deep linku:

| Typ | Tvar | Použitie |
| --- | --- | --- |
| Editor HTTPS | `https://www.pastetoprint.com/open/{editorToken}` | Kontrola a úprava podľa `allowEditing`. |
| View HTTPS | `https://www.pastetoprint.com/view/{viewToken}` | Zobrazenie a tlač; úpravy sú vždy vypnuté. |
| PWA protokol | `web+pastetoprint://open/{editorToken}` | Otvorenie nainštalovanej pasteToPrint PWA v podporovanom prehliadači a OS. |
| Natívny protokol | `pastetoprint://open/{editorToken}` | Rezervované pre natívnu aplikáciu s registrovaným handlerom. |

API v2 ich vracia v poliach `editorUrl`, `viewUrl`, `pwaDeepLink` a
`nativeDeepLink`. `sessionId` nie je capability token a nemožno ním dokument
otvoriť. Používateľ musí výsledok importu skontrolovať. Spravovaný editovateľný
PTDF sa môže bez modalu vložiť iba do úplne prázdneho editora; zobrazí sa
oznámenie s funkciou `Späť`. Ak editor obsahuje dokument, session je read-only
alebo vstup nepochádza zo spravovanej PTDF session, používateľ musí výslovne
zvoliť `Pridať`, `Nahradiť` alebo `Zrušiť`.

## Odporúčanie pre AI klienta

1. Bežne vráť alebo otvor `editorUrl`.
2. `pwaDeepLink` použi iba vtedy, keď klient vie, že pasteToPrint PWA je
   nainštalovaná a protokol zaregistrovaný.
3. `nativeDeepLink` použi iba vtedy, keď hostiteľ potvrdil dostupnosť natívnej
   aplikácie.
4. Ak používateľ nemá dokument meniť, vráť `viewUrl`.
5. Ak protokol nemožno otvoriť, použi `editorUrl` ako fallback.

AI nemá skúšať vlastný protokol automaticky bez používateľského zámeru.
Neúspešné otvorenie môže v operačnom systéme zobraziť dialóg alebo chybu.

## Inline text pre bežný AI chatbot

Ak AI klient nevie volať API ani MCP a výsledkom je krátky obyčajný text,
vygeneruje klikateľný odkaz:

```text
https://www.pastetoprint.com/#text={percent-encoded UTF-8 text}
```

Model má najprv dokončiť celý text, zjednotiť konce riadkov na LF, hodnotu
zakódovať presne raz spôsobom zhodným s JavaScript `encodeURIComponent` a
vrátiť Markdown odkaz:

```markdown
[Otvoriť v pasteToPrint](https://www.pastetoprint.com/#text=ENCODED_TEXT)
```

Príklad:

```markdown
[Otvoriť v pasteToPrint](https://www.pastetoprint.com/#text=Servisn%C3%A1%20spr%C3%A1va%0AKontrola%20bola%20dokon%C4%8Den%C3%A1.)
```

Celá URL by nemala prekročiť 8 000 znakov. AI nesmie text skrátiť iba preto,
aby sa zmestil do odkazu. Pre dlhší alebo štruktúrovaný dokument použije PTDF
súbor, MCP alebo API session. Odkaz nesmie obsahovať heslá, tokeny ani iné
tajomstvá.

Fragment sa neposiela v HTTP requeste. Používateľ musí odkaz otvoriť,
skontrolovať náhľad a sám zvoliť pridanie, nahradenie alebo zrušenie. Presný
kontrakt a tvrdé limity sú v
[`INLINE-TEXT-DEEP-LINK-V1.md`](INLINE-TEXT-DEEP-LINK-V1.md).

## Inline PTDF pre štruktúrovaný dokument

AI klient s deterministickým UTF-8 a Base64URL kódovaním môže vložiť celý
validný PTDF 1.0 dokument do lokálne spracovaného fragmentu:

```text
https://www.pastetoprint.com/#ptdf={unpadded Base64URL of UTF-8 PTDF JSON}
```

JSON musí mať `schemaVersion: "ptp.document/1"`. Kóduje sa ako UTF-8 a následne
ako RFC 4648 Base64URL bez `=` paddingu, percent-encodingu a kompresie. Producent
musí výsledok spätne dekódovať, porovnať s pôvodnými bajtmi a znovu validovať.
Chatbot bez spoľahlivého nástroja na bajtové kódovanie nesmie payload odhadovať.

Celá URL by pre prenositeľnosť nemala prekročiť 8 000 znakov. Obsah sa nesmie
potichu skrátiť; pri prekročení limitu treba použiť `.ptdf` súbor, MCP alebo
API-backed session. Fragment sa neposiela v HTTP requeste a prijímač pred zmenou
editora vždy zobrazí náhľad. Presný kontrakt a tvrdé limity sú v
[`INLINE-PTDF-DEEP-LINK-V1.md`](INLINE-PTDF-DEEP-LINK-V1.md).

## Dlhé dokumenty bez POST

Ak by inline odkaz prekročil odporúčaných 8 000 znakov, AI nesmie dokument
skrátiť. Klient s podporou artefaktov vytvorí validný UTF-8 PTDF 1.0 súbor
`.ptdf` alebo `.ptdf.json`. Používateľ ho môže pretiahnuť nad editor, vybrať cez
**Import PTDF** alebo otvoriť nainštalovanou PWA s podporou file handlers.

Voliteľné rozšírenie **Open in pasteToPrint** pridáva lokálne tlačidlo k
odpovediam ChatGPT, Gemini, Claude a Microsoft Copilot. Až po kliknutí odošle
jednu vybranú odpoveď do nového okna cez existujúci nonce/origin
`window.postMessage` handshake. Platný PTDF JSON code block zachová štruktúru;
ostatný obsah sa prenesie ako obyčajný text.

Ani jedna cesta nevytvára API session alebo dokumentový HTTP `POST`. Vždy sa
zobrazí validačný náhľad a používateľ musí import potvrdiť. Inštalácia,
oprávnenia, limity a bezpečnostný kontrakt sú v
[`LONG-DOCUMENT-HANDOFF.md`](LONG-DOCUMENT-HANDOFF.md).

## PWA registrácia

Manifest `/assets/favicon/site.webmanifest` deklaruje:

```json
{
  "protocol_handlers": [
    {
      "protocol": "web+pastetoprint",
      "url": "../../open/protocol?url=%s"
    }
  ]
}
```

Registrácia prebehne pri inštalácii alebo aktualizácii PWA, ak ju prehliadač
a operačný systém podporujú. Webové platformy vyžadujú pri vlastných schémach
prefix `web+`, preto webová aplikácia neregistruje samotné `pastetoprint:`.

Handler prijme iba presný tvar:

```text
web+pastetoprint://open/{64 lowercase hexadecimal characters}
```

Po validácii odpovie dočasným presmerovaním na:

```text
https://www.pastetoprint.com/#agentImport={editorToken}
```

Fragment sa neposiela webovému serveru pri nasledujúcej požiadavke. Editor
načíta session cez API a zobrazí náhľad. Spravovaná session zostáva dostupná
do expirácie alebo do `DELETE /api/v2/documents/{sessionId}`.

## Bezpečnosť

- Editorový a view token sú rozdielne capability tokeny. Kto má príslušný
  odkaz, môže do vypršania načítať pripravený dokument v danom režime.
- `sessionId` nie je tajomstvo. Tajný `sessionToken` na správu session sa
  posiela iba v hlavičke `X-Session-Token`, nikdy v deep linku.
- Deep link nevkladajte do verejných stránok, analytiky, logov aplikácie ani
  obsahu dokumentu.
- Handler odpovedá s `Cache-Control: no-store`, `Referrer-Policy: no-referrer`,
  reštriktívnym CSP a `X-Robots-Tag: noindex`.
- Service worker neukladá `/open/...`, `/view/...` ani `/api/deep-link/...`
  do cache.
- Natívny a PWA protokol neprenášajú Bearer API ani manažérsky session token.
  Obsahujú iba dočasný editorový capability token.
- Otvorenie spravovaného editovateľného PTDF odkazu môže automaticky naplniť
  iba prázdny editor a vždy poskytne viditeľné jednokrokové `Späť`. Nikdy
  automaticky neprepisuje existujúci dokument a nespustí tlač ani export.

## HTTP handler

Nainštalovaná PWA odovzdá protokolovú URL percent-encoded:

```http
GET /open/protocol?url=web%2Bpastetoprint%3A%2F%2Fopen%2F... HTTP/1.1
Host: www.pastetoprint.com
```

Pri platnom vstupe handler vráti `302 Location` na fragmentový import.
Neplatná schéma, cesta alebo token vrátia `400`. Povolené metódy sú iba
`GET` a `HEAD`.
