alpha
Login
or
Join now
lgtm.shop
/
commerce
Star
6
Fork
0
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
Pilot atproto-native commerce backend
Star
6
Fork
0
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
Overview
Issues
Pulls
Pipelines
commerce
/
crates
/
server
/
src
/
at
main
3 folders
10 files
Nate Moore
refactor(server): clearer 'unresolved actor' reason; sync design doc to Extension injection
4w ago
38581d11
admin
feat: variant option model + at-uri variant contract Surface the lexicon's option axes as first-class data across the read plane so storefronts can build variant selectors without inferring from SKUs. - lexicon: variantView gains variantUri (at-uri, replaces the bare-UUID `uri`), optionValues, and title; productView gains ordered `options` axes - migration 0009: product.options, variant.option_values, variant.title - read plane: synthesize canonical variant at-uris at projection time (variant_view + cart view); surface options/optionValues/title - setCartItem: accept variantUri (or bare UUID for back-compat), validate existence + tenant ownership up front (404) instead of deferring to checkout - importer: populate option_values/title per variant and aggregate product.options from Printful size/color; idempotency comparison extended so pre-existing rows backfill on the next run BREAKING: variantView.uri removed in favor of variantUri.
1 month ago
bin
feat(server): seed via `--role seed` (no entrypoint override) Adds a one-shot `--role seed` to the server binary (migrate → seed demo store → exit) and extracts the seeder into a shared `server::seed` module the bin + role + tests all call. Dockerfile splits ENTRYPOINT ["server"] + CMD ["--role","all"], so seeding is just `docker run <image> --role seed` — retiring the `--entrypoint /usr/local/bin/seed-demo` gotcha. Drops the seed-demo binary from the image (kept as a cargo-run convenience bin). Deploy docs + prod compose updated; the integration test now exercises the real seeder.
2 months ago
routes
refactor(server): clearer 'unresolved actor' reason; sync design doc to Extension injection
1 month ago
app.rs
feat(server): GET /api/pds-capabilities endpoint Resolve DID docs canonically (PLC directory / did:web well-known) rather than via Slingshot, which exposes resolveHandle but no DID-document method. Verified end-to-end against real infra (live tests).
1 month ago
boot.rs
feat(server): printful catalog import via --role import
1 month ago
dev.rs
feat(fulfillment): Order carries shipping recipient; Printful submit sends it Add Recipient (name/email/raw address) to the Order domain type and build the Printful POST /orders recipient block from it, mapping Stripe's address shape to Printful's. A physical order with no recipient is a typed error — never POST an unfulfillable draft. Recipient is None at draft time; the paid webhook seals it on and the worker loads it (subsequent commits).
1 month ago
import.rs
feat: variant option model + at-uri variant contract Surface the lexicon's option axes as first-class data across the read plane so storefronts can build variant selectors without inferring from SKUs. - lexicon: variantView gains variantUri (at-uri, replaces the bare-UUID `uri`), optionValues, and title; productView gains ordered `options` axes - migration 0009: product.options, variant.option_values, variant.title - read plane: synthesize canonical variant at-uris at projection time (variant_view + cart view); surface options/optionValues/title - setCartItem: accept variantUri (or bare UUID for back-compat), validate existence + tenant ownership up front (404) instead of deferring to checkout - importer: populate option_values/title per variant and aggregate product.options from Printful size/color; idempotency comparison extended so pre-existing rows backfill on the next run BREAKING: variantView.uri removed in favor of variantUri.
1 month ago
lib.rs
feat(server): printful import upserts (idempotent product/variant mirror rows)
1 month ago
main.rs
feat(worker): standing link opt-in + buyer-repo purchase-claim publishing via device-link grant
1 month ago
seed.rs
feat(server): seed via `--role seed` (no entrypoint override) Adds a one-shot `--role seed` to the server binary (migrate → seed demo store → exit) and extracts the seeder into a shared `server::seed` module the bin + role + tests all call. Dockerfile splits ENTRYPOINT ["server"] + CMD ["--role","all"], so seeding is just `docker run <image> --role seed` — retiring the `--entrypoint /usr/local/bin/seed-demo` gotcha. Drops the seed-demo binary from the image (kept as a cargo-run convenience bin). Deploy docs + prod compose updated; the integration test now exercises the real seeder.
2 months ago
state.rs
fix(stripe): make automatic tax opt-in (was hardcoded on, broke checkout) Prod checkout returned 502 for every order: the handler forwards a valid session to Stripe, but the form hardcoded automatic_tax[enabled]=true, and Stripe rejects the session with a 400 ("You must have a valid head office address to enable automatic tax") unless the account has a head-office address + tax registrations. (The v0.3.1 error mapping surfaced this cleanly in the logs — it is a Stripe account-config requirement, not a crash.) Gate automatic tax behind LGTM_STRIPE_AUTOMATIC_TAX=1 (config_for["stripe"] ["automatic_tax"]), default off, so the reference impl creates checkout sessions without requiring Stripe Tax setup. Extract checkout_form() so the form (incl. the on/off tax field + non-empty product name + redirect URLs) is unit-tested.
1 month ago
test_support.rs
fix(server): gate ALL mutating admin routes behind auth (close unauthenticated create/refund/settings bypass) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2 months ago
wiring.rs
fix(checkout): make real Stripe checkout succeed (was a bare 400 for every order) With fake-payments off, every POST /api/checkout returned an empty-body 400. The real Stripe path could never succeed: place_order sent empty success_url/ cancel_url and DbVariantLookup left product_uri (used as the Stripe line-item name) empty. Stripe rejects both, and the handler swallowed the error with a bare `Err(_) => 400`, making it undebuggable from the storefront. - Thread configurable redirect URLs through place_order. New optional env vars LGTM_CHECKOUT_SUCCESS_URL / LGTM_CHECKOUT_CANCEL_URL, defaulting to {public_url}/checkout/success?session_id={CHECKOUT_SESSION_ID} and {public_url}/cart. - DbVariantLookup joins product for the real at_uri + title; carry a display name through VariantInfo -> DraftLine -> OrderItem to the Stripe line item (fallback title -> SKU -> "Item"). Name is a checkout-time snapshot, not persisted in P1. - Map checkout errors: validation/currency/not-found -> descriptive 400; missing key / provider rejection -> logged in full + generic 502, never a bare empty 400. Tests: place_order fake now asserts non-empty URLs + names are forwarded; DbVariantLookup join covered (title + SKU fallback); config default/override.
1 month ago