@purecut/configurator (1.0.0)
Installation
@purecut:registry=https://git.purecut.pl/api/packages/purecut/npm/npm install @purecut/configurator@1.0.0"@purecut/configurator": "1.0.0"About this package
@purecut/configurator
SDK do integracji zewnętrznego konfiguratora z koszykiem PureCut.pl.
Instalacja
# Dodaj registry Gitea do swojego projektu
npm config set @purecut:registry https://git.purecut.pl/api/packages/purecut/npm/
# Zainstaluj paczkę
npm install @purecut/configurator
Lub jednorazowo:
npm install @purecut/configurator --registry https://git.purecut.pl/api/packages/purecut/npm/
Szybki start — Metoda A: Redirect
Przekieruj klienta na koszyk PureCut po zakończeniu konfiguracji. Idealne gdy konfigurator działa jako osobna strona/domena.
import { addToCartViaRedirect } from '@purecut/configurator';
function onConfigurationComplete(config: MyConfig) {
addToCartViaRedirect({
id: crypto.randomUUID(), // unikalny per konfiguracja!
name: `Tabliczka — ${config.text}`,
price: config.totalPrice,
previewUrl: config.previewPdfUrl, // PDF widoczny klientowi
productionUrl: config.dxfFileUrl, // DXF dla laserownicy
configDescription: `${config.width}×${config.height} cm, tekst: ${config.text}`,
configSnapshot: config, // pełny snapshot (niewidoczny dla klienta)
});
}
Szybki start — Metoda B: postMessage
Wyślij produkt do rodzica gdy konfigurator działa jako iframe osadzony na PureCut.
import { addToCartViaPostMessage } from '@purecut/configurator';
function onConfigurationComplete(config: MyConfig) {
addToCartViaPostMessage({
id: crypto.randomUUID(),
name: `Tabliczka — ${config.text}`,
price: config.totalPrice,
previewUrl: config.previewPdfUrl,
productionUrl: config.dxfFileUrl,
configDescription: `${config.width}×${config.height} cm`,
});
}
Upload plików przez API PureCut
Jeśli nie chcesz hostować plików samodzielnie, możesz uploadować je bezpośrednio na serwery PureCut. Wymagany klucz API — skontaktuj się z Mikołajem.
import { PureCutClient, addToCartViaRedirect } from '@purecut/configurator';
const client = new PureCutClient({ storeKey: 'twój-klucz-api' });
async function onConfigurationComplete(config: MyConfig) {
// 1. Upload plików
const result = await client.submitFiles(
{
name: `Tabliczka — ${config.text}`,
price: config.totalPrice,
description: `${config.width}×${config.height} cm, tekst: ${config.text}`,
},
{
previewFile: config.previewPdfFile, // File lub { buffer, name, mimeType }
productionFile: config.dxfFile,
userSvgFiles: config.userUploadedSvgs, // opcjonalne
},
);
// 2. Redirect do koszyka z gotowymi URL
addToCartViaRedirect({
id: result.configuredProductId,
name: result.name,
price: result.price,
image: result.image,
previewUrl: result.previewUrl,
productionUrl: result.productionUrl,
userSvgUrls: result.userSvgUrls,
configDescription: result.description,
});
}
Typy
import type {
PureCutCartPayload, // dane do koszyka
SubmitMetadata, // metadane dla API upload
SubmitFiles, // pliki dla API upload
SubmitResult, // odpowiedź z API upload
} from '@purecut/configurator';
Ważne zasady
-
Unikalność
id— każda konfiguracja musi mieć swój własny ID (np.crypto.randomUUID()).
Powtórzony ID = zwiększenie ilości zamiast nowego produktu. -
Dostępność plików — jeśli hostujesz pliki samodzielnie, URL musi być aktywny przez min. 30 dni.
-
Produkty konfigurowane pomijają sprawdzanie stocku — każdy jest unikalny.
-
productionUrl(DXF) jest niewidoczny dla klienta — widzą go tylko pracownicy PureCut.
Aktualizacja paczki
# W katalogu SDK
npm version patch # lub minor / major
npm run build
npm publish
Linki
Dependencies
Development Dependencies
| ID | Version |
|---|---|
| typescript | ^5.9.3 |