@lockerverse/sdk 0.2.189 → 0.2.191
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/MIGRATIONS.md +18 -0
- package/README.md +11 -0
- package/dist/auctions.d.ts +18 -2
- package/dist/auctions.d.ts.map +1 -1
- package/dist/auctions.js +1 -1
- package/dist/auctions.js.map +1 -1
- package/dist/types.js +1 -1
- package/package.json +1 -1
package/MIGRATIONS.md
CHANGED
|
@@ -36,6 +36,24 @@ If it cannot be found, report that limit and use the baseline review below. Do n
|
|
|
36
36
|
claim that every historical migration was applied. Read this file even if the
|
|
37
37
|
version already matches: a previous upgrade may have missed host adoption steps.
|
|
38
38
|
|
|
39
|
+
## 0.2.191 — auction item additional charges
|
|
40
|
+
|
|
41
|
+
- **Affected:** Core auction item data, purchase quotes, and React auction checkout.
|
|
42
|
+
- **Automatic:** optional `additionalCharge` charges the first-item amount plus the
|
|
43
|
+
additional-item amount for each further unit. Checkout and receipts show the configured charge
|
|
44
|
+
separately. Bids use one unit and add the first-unit charge only if the bid wins.
|
|
45
|
+
The bid amount and minimum increments remain unchanged. `maxQuantityPerOrder` limits each order; null inventory remains unlimited.
|
|
46
|
+
- **Required:** deploy the matching auction backend before enabling additional charges.
|
|
47
|
+
Upgrade Core and React together. Custom purchase forms must obtain `getPurchaseQuote`,
|
|
48
|
+
display the charge, and submit `expectedAdditionalChargeCents` with `expectedTotalCents`.
|
|
49
|
+
Custom bid forms must disclose the first-unit charge and submit the same expected
|
|
50
|
+
charge and total fields. Winner settlement uses the charge saved with the bid.
|
|
51
|
+
Service fees continue to use merchandise subtotal only. Existing items need no edits.
|
|
52
|
+
- **Optional:** set `--lockerverse-auction-catalog-columns` on the auction style to
|
|
53
|
+
choose desktop grid columns. Mobile retains one column.
|
|
54
|
+
- **Check:** compare one, two, and maximum quantity totals with the server quote,
|
|
55
|
+
verify the per-order limit, and inspect the named charge row before payment.
|
|
56
|
+
|
|
39
57
|
## 0.2.189 — widget load recovery and Sentry releases
|
|
40
58
|
|
|
41
59
|
- **Affected:** Core widget loading and SDK failure reporting.
|
package/README.md
CHANGED
|
@@ -300,6 +300,17 @@ Amounts are integer USD cents. Send the expected subtotal, service fee, and tota
|
|
|
300
300
|
that the customer accepted. Handle `requiresAction` with Stripe
|
|
301
301
|
`handleNextAction` and the returned `clientSecret`.
|
|
302
302
|
|
|
303
|
+
- Auction and Buy Now items can define `additionalCharge` with a name, category, first-unit
|
|
304
|
+
amount, and additional-unit amount. For Buy Now items call
|
|
305
|
+
`getPurchaseQuote(auctionSlug, itemId, { quantity, includeServiceFee })` and show
|
|
306
|
+
its named charge and total before payment. Send `expectedAdditionalChargeCents`
|
|
307
|
+
and `expectedTotalCents` with the purchase. Merchandise subtotal excludes the
|
|
308
|
+
charge, and service fees apply to merchandise only. Receipts retain the charge
|
|
309
|
+
name and rule at purchase time. The category does not enable address collection;
|
|
310
|
+
use `collectShippingAddress` for that. Respect `maxQuantityPerOrder` when set;
|
|
311
|
+
null `inventoryQuantity` means unlimited stock. Bids use the first-unit charge
|
|
312
|
+
only, payable when the bid wins. Disclose that charge and submit
|
|
313
|
+
`expectedAdditionalChargeCents` and `expectedTotalCents` with the bid.
|
|
303
314
|
- Never automatically retry a bid. The backend does not deduplicate bids and
|
|
304
315
|
has no public bid-status recovery endpoint. An unknown result needs support
|
|
305
316
|
follow-up; a submitted bid is not a winning bid or a payment receipt.
|
package/dist/auctions.d.ts
CHANGED
|
@@ -3,6 +3,12 @@ import { B as LockerverseSdkErrorCode, C as LockerverseEnvironment, H as Lockerv
|
|
|
3
3
|
type LockerverseAuctionStatus = "draft" | "active" | "finished";
|
|
4
4
|
type LockerverseAuctionSaleMode = "auction" | "buy_now" | "hybrid";
|
|
5
5
|
type LockerverseAuctionPurchaseStatus = "pending_payment" | "paid" | "payment_failed" | "expired" | "canceled" | "refunded";
|
|
6
|
+
type LockerverseAuctionAdditionalCharge = {
|
|
7
|
+
name: string;
|
|
8
|
+
category: "shipping" | "handling" | "other";
|
|
9
|
+
firstUnitAmountCents: number;
|
|
10
|
+
additionalUnitAmountCents: number;
|
|
11
|
+
};
|
|
6
12
|
type LockerverseAuctionItem = {
|
|
7
13
|
id: string;
|
|
8
14
|
name: string;
|
|
@@ -19,6 +25,8 @@ type LockerverseAuctionItem = {
|
|
|
19
25
|
saleMode: LockerverseAuctionSaleMode;
|
|
20
26
|
buyNowPriceAmount: number | null;
|
|
21
27
|
inventoryQuantity: number | null;
|
|
28
|
+
maxQuantityPerOrder?: number | null | undefined;
|
|
29
|
+
additionalCharge?: LockerverseAuctionAdditionalCharge | null | undefined;
|
|
22
30
|
availableQuantity: number | null;
|
|
23
31
|
paidQuantity: number;
|
|
24
32
|
reservedQuantity: number;
|
|
@@ -75,6 +83,9 @@ type LockerverseAuction = {
|
|
|
75
83
|
items: LockerverseAuctionItem[];
|
|
76
84
|
};
|
|
77
85
|
type LockerverseAuctionPricing = {
|
|
86
|
+
/** Omitted by older servers and bid-only integrations. */
|
|
87
|
+
additionalChargeCents?: number;
|
|
88
|
+
additionalCharge?: LockerverseAuctionAdditionalCharge | null | undefined;
|
|
78
89
|
subtotalCents: number;
|
|
79
90
|
serviceFeeCents: number;
|
|
80
91
|
serviceFeeRateBasisPoints: number;
|
|
@@ -89,6 +100,7 @@ type LockerverseAuctionBidSubmission = {
|
|
|
89
100
|
includeServiceFee?: boolean;
|
|
90
101
|
expectedSubtotalCents?: number;
|
|
91
102
|
expectedServiceFeeCents?: number;
|
|
103
|
+
expectedAdditionalChargeCents?: number;
|
|
92
104
|
expectedTotalCents?: number;
|
|
93
105
|
};
|
|
94
106
|
type LockerverseAuctionPurchaseSubmission = Omit<LockerverseAuctionBidSubmission, "amount"> & {
|
|
@@ -133,6 +145,10 @@ type LockerverseAuctionClient = {
|
|
|
133
145
|
load: (auctionSlug: string, options?: LockerverseAuctionLoadOptions) => Promise<LockerverseAuction>;
|
|
134
146
|
/** Never retry a bid automatically: the server does not deduplicate bids. */
|
|
135
147
|
createBid: (auctionSlug: string, itemId: string, submission: LockerverseAuctionBidSubmission) => Promise<LockerverseAuctionBidResult>;
|
|
148
|
+
getPurchaseQuote: (auctionSlug: string, itemId: string, selection: {
|
|
149
|
+
quantity: number;
|
|
150
|
+
includeServiceFee?: boolean;
|
|
151
|
+
}) => Promise<LockerverseAuctionPricing>;
|
|
136
152
|
createPurchase: (auctionSlug: string, itemId: string, submission: LockerverseAuctionPurchaseSubmission) => Promise<LockerverseAuctionPurchaseResult>;
|
|
137
153
|
/** Read the existing purchase without creating or retrying a payment. */
|
|
138
154
|
getPurchaseStatus: (auctionSlug: string, itemId: string, clientRequestId: string) => Promise<LockerverseAuctionPurchaseResult | null>;
|
|
@@ -144,9 +160,9 @@ declare function createLockerverseAuctionClient(options: CreateLockerverseAuctio
|
|
|
144
160
|
//#endregion
|
|
145
161
|
//#region src/auction-pricing.d.ts
|
|
146
162
|
/** Local estimate. Send expected amounts with the submission for server validation. */
|
|
147
|
-
declare function calculateLockerverseAuctionPricing(auction: Pick<LockerverseAuction, "serviceFeeEnabled" | "pricingPolicy">, subtotalCents: number, includeServiceFee?: boolean): LockerverseAuctionPricing;
|
|
163
|
+
declare function calculateLockerverseAuctionPricing(auction: Pick<LockerverseAuction, "serviceFeeEnabled" | "pricingPolicy">, subtotalCents: number, includeServiceFee?: boolean, additionalChargeCents?: number): LockerverseAuctionPricing;
|
|
148
164
|
/** Snapshot estimate. Another accepted bid can increase the server minimum. */
|
|
149
165
|
declare function getLockerverseAuctionMinimumBid(item: Pick<LockerverseAuctionItem, "minBidAmount" | "bidIncrementAmount" | "maxBidAmount">): number;
|
|
150
166
|
//#endregion
|
|
151
|
-
export { type CreateLockerverseAuctionOptions, type LockerverseAuction, type LockerverseAuctionBidResult, type LockerverseAuctionBidSubmission, type LockerverseAuctionClient, type LockerverseAuctionItem, type LockerverseAuctionLoadOptions, type LockerverseAuctionPricing, type LockerverseAuctionPurchaseReceipt, type LockerverseAuctionPurchaseResult, type LockerverseAuctionPurchaseStatus, type LockerverseAuctionPurchaseSubmission, type LockerverseAuctionSaleMode, type LockerverseAuctionStatus, type LockerverseEnvironment, LockerverseSdkError, type LockerverseSdkErrorCode, type LockerverseSdkOperation, type LockerverseSdkServerCode, calculateLockerverseAuctionPricing, createLockerverseAuctionClient, getLockerverseAuctionMinimumBid };
|
|
167
|
+
export { type CreateLockerverseAuctionOptions, type LockerverseAuction, type LockerverseAuctionAdditionalCharge, type LockerverseAuctionBidResult, type LockerverseAuctionBidSubmission, type LockerverseAuctionClient, type LockerverseAuctionItem, type LockerverseAuctionLoadOptions, type LockerverseAuctionPricing, type LockerverseAuctionPurchaseReceipt, type LockerverseAuctionPurchaseResult, type LockerverseAuctionPurchaseStatus, type LockerverseAuctionPurchaseSubmission, type LockerverseAuctionSaleMode, type LockerverseAuctionStatus, type LockerverseEnvironment, LockerverseSdkError, type LockerverseSdkErrorCode, type LockerverseSdkOperation, type LockerverseSdkServerCode, calculateLockerverseAuctionPricing, createLockerverseAuctionClient, getLockerverseAuctionMinimumBid };
|
|
152
168
|
//# sourceMappingURL=auctions.d.ts.map
|
package/dist/auctions.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auctions.d.ts","names":[],"sources":["../src/auction-types.ts","../src/auction-client.ts","../src/auction-pricing.ts"],"mappings":";;KAMY;KACA;KACA;KAOA;EACV;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU;EACV;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,QAAQ;EACR;EACA;;EAEA;EACA;EACA;;KAEU;;EAEV;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;IACE;IACA;IACA;IACA;IACA;IACA;;EAEF;EACA;EACA;EACA;IAAiB;IAAiB;;EAClC,UAAU;EACV;IAGM;IACA;IACA;IACA;;EAEN;EACA;EACA;EACA;EACA,QAAQ;EACR,OAAO;;KAEG;
|
|
1
|
+
{"version":3,"file":"auctions.d.ts","names":[],"sources":["../src/auction-types.ts","../src/auction-client.ts","../src/auction-pricing.ts"],"mappings":";;KAMY;KACA;KACA;KAOA;EACV;EACA;EACA;EACA;;KAEU;EACV;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU;EACV;EACA;EACA;EACA,mBAAmB;EACnB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,QAAQ;EACR;EACA;;EAEA;EACA;EACA;;KAEU;;EAEV;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;IACE;IACA;IACA;IACA;IACA;IACA;;EAEF;EACA;EACA;EACA;IAAiB;IAAiB;;EAClC,UAAU;EACV;IAGM;IACA;IACA;IACA;;EAEN;EACA;EACA;EACA;EACA,QAAQ;EACR,OAAO;;KAEG;;EAEV;EACA,mBAAmB;EACnB;EACA;EACA;EACA;;KAEU;;EAEV;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;KAEU,uCAAuC,KACjD;;EAIA;EACA;;EAEA;;KAEU,8BAA8B;EACxC;EACA;;KAEU,mCAAmC;EAC7C;EACA;EACA,QAAQ;EACR;EACA;;;KAGU,oCAAoC;EAC9C;EACA;EACA;;KAEU,kCACV;EACE;;EAEA;EACA,eAAe,WAAW;EAC1B,WAAW,OAAO;EAClB;EACA;;KAEQ;;EAEV;;KAEU;EACV,YAAY,QAAQ;EACpB,OACE,qBACA,UAAU,kCACP,QAAQ;;EAEb,YACE,qBACA,gBACA,YAAY,oCACT,QAAQ;EACb,mBACE,qBACA,gBACA;IAAa;IAAkB;QAC5B,QAAQ;EACb,iBACE,qBACA,gBACA,YAAY,yCACT,QAAQ;;EAEb,oBACE,qBACA,gBACA,4BACG,QAAQ;EACb,qBACE,qBACA,kBACA,uBACG,QAAQ;;;;iBClIC,+BACd,SAAS,kCACR;;;;iBC7Ca,mCACd,SAAS,KAAK,4DACd,uBACA,6BACA,iCACC;;iBA6Ba,gCACd,MAAM,KACJ"}
|
package/dist/auctions.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as e}from"./schema-helpers.js";import{i as t,n,o as r,r as i,t as a}from"./transport.js";import{n as o}from"./types.js";import{array as s,boolean as c,check as l,email as u,isoTimestamp as d,literal as f,minLength as p,minValue as m,nullable as h,object as g,optional as _,parse as v,picklist as y,pipe as b,regex as x,strictTuple as S,string as C}from"valibot";function w(e,t){if(t===void 0)return e;e.mediaBaseUrl=t;let n=e=>e?.startsWith(`https://media.lockerverse.com/`)?`${t}/${e.slice(30)}`:e;e.configuration.image=n(e.configuration.image),e.community&&(e.community.banner=n(e.community.banner),e.community.thumbnail=n(e.community.thumbnail));for(let t of e.items)t.image=n(t.image),t.images=t.images.map(n);return e}const T=b(C(),p(1)),E=e(0),D=b(C(),d()),O=y([`draft`,`active`,`finished`]),k=g({auctionId:T,availableQuantity:h(E),bidCount:E,bidIncrementAmount:h(E),buyNowPriceAmount:h(E),collectShippingAddress:c(),communityId:T,createdAt:D,description:h(C()),endAt:_(h(D)),finalizedBidCount:E,finishedAt:_(h(D)),id:T,image:h(C()),images:s(C()),inventoryQuantity:h(E),isSoldOut:c(),maxBidAmount:h(E),minBidAmount:h(E),name:C(),paidQuantity:E,path:T,position:E,reservedQuantity:E,saleMode:y([`auction`,`buy_now`,`hybrid`]),slug:T,startAt:_(h(D)),status:O,updatedAt:D}),
|
|
1
|
+
import{a as e}from"./schema-helpers.js";import{i as t,n,o as r,r as i,t as a}from"./transport.js";import{n as o}from"./types.js";import{array as s,boolean as c,check as l,email as u,isoTimestamp as d,literal as f,minLength as p,minValue as m,nullable as h,object as g,optional as _,parse as v,picklist as y,pipe as b,regex as x,strictTuple as S,string as C}from"valibot";function w(e,t){if(t===void 0)return e;e.mediaBaseUrl=t;let n=e=>e?.startsWith(`https://media.lockerverse.com/`)?`${t}/${e.slice(30)}`:e;e.configuration.image=n(e.configuration.image),e.community&&(e.community.banner=n(e.community.banner),e.community.thumbnail=n(e.community.thumbnail));for(let t of e.items)t.image=n(t.image),t.images=t.images.map(n);return e}const T=b(C(),p(1)),E=e(0),D=b(C(),d()),O=y([`draft`,`active`,`finished`]),k=g({additionalUnitAmountCents:E,category:y([`shipping`,`handling`,`other`]),firstUnitAmountCents:E,name:T}),A=g({additionalCharge:_(h(k)),auctionId:T,availableQuantity:h(E),bidCount:E,bidIncrementAmount:h(E),buyNowPriceAmount:h(E),collectShippingAddress:c(),communityId:T,createdAt:D,description:h(C()),endAt:_(h(D)),finalizedBidCount:E,finishedAt:_(h(D)),id:T,image:h(C()),images:s(C()),inventoryQuantity:h(E),isSoldOut:c(),maxBidAmount:h(E),maxQuantityPerOrder:_(h(b(E,m(1)))),minBidAmount:h(E),name:C(),paidQuantity:E,path:T,position:E,reservedQuantity:E,saleMode:y([`auction`,`buy_now`,`hybrid`]),slug:T,startAt:_(h(D)),status:O,updatedAt:D}),j=g({collectShippingAddress:c(),community:_(g({banner:_(h(C())),color:_(h(C())),name:_(C()),thumbnail:_(h(C()))})),communityId:T,configuration:g({collectShippingAddress:c(),endTimeEnabled:_(h(c())),image:h(C()),serviceFeeDefaultChecked:c(),serviceFeeEnabled:c(),startTimeEnabled:_(h(c()))}),createdAt:D,description:h(C()),endAt:D,id:T,items:s(A),name:C(),path:T,payment:_(g({connectedAccountId:h(T),currency:f(`usd`),publishableKey:T})),position:E,pricingPolicy:g({currency:f(`usd`),serviceFeeRateBasisPoints:E}),serviceFeeDefaultChecked:c(),serviceFeeEnabled:c(),slug:T,startAt:D,status:O,updatedAt:D}),M={additionalCharge:_(h(k)),additionalChargeCents:_(E,0),serviceFeeCents:E,serviceFeeRateBasisPoints:E,subtotalCents:E,totalCents:E},N=e=>e.totalCents===e.subtotalCents+e.serviceFeeCents+(e.additionalChargeCents??0),P={...M,clientSecret:h(T),requiresAction:c()},F=b(g(P),l(e=>N(e)),l(e=>!e.requiresAction||e.clientSecret!==null)),I=b(g({...P,id:T,purchaseId:T,quantity:b(E,m(1)),status:y([`pending_payment`,`paid`,`payment_failed`,`expired`,`canceled`,`refunded`]),totalAmount:E}),l(e=>N(e)),l(e=>e.id===e.purchaseId&&(!e.requiresAction||e.clientSecret!==null))),L=b(g({...M,quantity:b(E,m(1)),totalAmount:E,unitAmount:E}),l(e=>N(e))),R={confirmationToken:T,email:b(C(),u()),expectedAdditionalChargeCents:_(E),expectedServiceFeeCents:_(E),expectedSubtotalCents:_(E),expectedTotalCents:_(E),includeServiceFee:_(c()),phone:b(C(),x(/^\+[1-9]\d{1,14}$/))},z=g({...R,amount:b(E,m(100))}),B=g({...R,clientRequestId:T,paymentMethodTypes:_(S([f(`card`)])),quantity:b(E,m(1))}),V=e=>v(j,e),H=e=>v(s(j),e),U=e=>v(F,e),W=e=>v(I,e),G=e=>v(L,e),K=e=>v(z,e),q=e=>v(B,e),J=e=>v(h(I),e),Y=e=>v(b(g(M),l(e=>N(e))),e),X=e=>v(g({includeServiceFee:_(c()),quantity:b(E,m(1))}),e);function Z(e,t,n){let r=e+t.map(e=>`/${encodeURIComponent(v(T,e))}`).join(``);return n===void 0?r:`${r}?${new URLSearchParams({previewItem:v(T,n)})}`}function Q(e){let s=t(e,`communitySlug`),c=e.mediaBaseUrl===void 0?void 0:i(e.mediaBaseUrl,s.environment,`mediaBaseUrl`),l=e=>w(V(e),c),u=n({communitySlug:s.communitySlugValue,environment:s.environment,getContext:()=>({}),onError:s.onError,resourceContextName:`lockerverse_auction`,sentryDsn:s.sentryDsn}),{requestJson:d}=a(s.fetchImplementation,u,s.requestTimeoutMs),f=`${s.apiBaseUrl}/auctions/communities/slug/${s.communitySlug}`;async function p(e,t,n,i,a,s=!1){let c=!!i&&!s,l,p;try{l=Z(f,t,a),i&&(p={body:JSON.stringify(i.parse(i.value)),headers:{"content-type":`application/json`},method:`POST`})}catch{throw u(new o({...e,message:`Lockerverse auction input is invalid.`,reportable:!1}))}try{let t=await d(l,p,n,{...e,report:!1},{...e,report:!1});if(!t.ok){let{status:n}=t.response;throw new o({...e,recoveryRecommended:c&&(n>=500||n===408),reportable:n>=500,status:n})}return r(t.value)}catch(t){throw t instanceof o?u(new o({...e,recoveryRecommended:t.recoveryRecommended||c&&t.status===void 0,reportable:t.reportable,...t.status===void 0?void 0:{status:t.status}})):u(new o({...e,recoveryRecommended:c,reportable:!0}))}}return{createBid:(e,t,n)=>p({code:`auction_bid_failed`,message:`Unable to submit Lockerverse auction bid.`,operation:`create_auction_bid`},[`path`,e,`items`,t,`bids`],U,{parse:K,value:n}),createPurchase:(e,t,n)=>p({code:`auction_purchase_failed`,message:`Unable to submit Lockerverse auction purchase.`,operation:`create_auction_purchase`},[`path`,e,`items`,t,`purchases`],W,{parse:q,value:n}),getPurchaseQuote:(e,t,n)=>p({code:`auction_load_failed`,message:`Unable to load Lockerverse auction purchase quote.`,operation:`load_auction`},[`path`,e,`items`,t,`purchase-quote`],Y,{parse:X,value:n},void 0,!0),getPurchaseReceipt:(e,t,n)=>p({code:`auction_receipt_failed`,message:`Unable to load Lockerverse auction purchase receipt.`,operation:`get_auction_purchase_receipt`},[`path`,e,`items`,t,`purchases`,n],G),getPurchaseStatus:(e,t,n)=>p({code:`auction_purchase_status_failed`,message:`Unable to load Lockerverse auction purchase status.`,operation:`get_auction_purchase_status`},[`path`,e,`items`,t,`purchase-status`,n],J),list:()=>p({code:`auction_load_failed`,message:`Unable to load Lockerverse auctions.`,operation:`list_auctions`},[],e=>H(e).map(e=>w(e,c))),load:(e,t)=>p({code:`auction_load_failed`,message:`Unable to load Lockerverse auction.`,operation:`load_auction`},[`path`,e],l,void 0,t?.previewItemSlug)}}function $(e){if(!Number.isSafeInteger(e)||e<0)throw TypeError(`Auction amounts must be non-negative safe integers.`)}function ee(e,t,n=!1,i=0){if($(t),$(i),n&&!e.serviceFeeEnabled)throw TypeError(`The service fee is not available for this auction.`);let a=n?e.pricingPolicy.serviceFeeRateBasisPoints:0;$(a);let o=Math.round(t*a/1e4),s=t+o+i;$(o),$(s);let c={serviceFeeCents:o,serviceFeeRateBasisPoints:a,subtotalCents:t,totalCents:s};return i>0&&(c.additionalChargeCents=i),r(c)}function te(e){let t=e.minBidAmount??100,n=e.bidIncrementAmount??100;if($(t),$(n),e.maxBidAmount===null)return t;$(e.maxBidAmount);let r=Math.max(t,e.maxBidAmount+n);return $(r),r}export{o as LockerverseSdkError,ee as calculateLockerverseAuctionPricing,Q as createLockerverseAuctionClient,te as getLockerverseAuctionMinimumBid};
|
|
2
2
|
//# sourceMappingURL=auctions.js.map
|
package/dist/auctions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auctions.js","names":[],"sources":["../src/auction-media.ts","../src/auction-schemas.ts","../src/auction-client.ts","../src/auction-pricing.ts"],"sourcesContent":["import type { LockerverseAuction } from \"./auction-types.ts\";\n\nconst MEDIA_PREFIX = \"https://media.lockerverse.com/\";\n\nexport function rewriteAuctionMedia(\n auction: LockerverseAuction,\n mediaBaseUrl: string | undefined\n): LockerverseAuction {\n if (mediaBaseUrl === undefined) {\n return auction;\n }\n // Keep the explicit proxy identity with the snapshot, including across SSR.\n auction.mediaBaseUrl = mediaBaseUrl;\n const rewrite = <Value extends string | null | undefined>(value: Value) =>\n value?.startsWith(MEDIA_PREFIX)\n ? `${mediaBaseUrl}/${value.slice(MEDIA_PREFIX.length)}`\n : value;\n\n auction.configuration.image = rewrite(auction.configuration.image);\n if (auction.community) {\n auction.community.banner = rewrite(auction.community.banner);\n auction.community.thumbnail = rewrite(auction.community.thumbnail);\n }\n for (const item of auction.items) {\n item.image = rewrite(item.image);\n item.images = item.images.map(rewrite);\n }\n return auction;\n}\n","import {\n array,\n boolean,\n check,\n email,\n isoTimestamp,\n literal,\n minLength,\n minValue,\n nullable,\n object,\n optional,\n parse,\n picklist,\n pipe,\n regex,\n strictTuple,\n string,\n} from \"valibot\";\n\nimport { safeIntegerSchema } from \"./schema-helpers.ts\";\n\nexport const auctionTextSchema = pipe(string(), minLength(1));\nconst cents = safeIntegerSchema(0);\nconst date = pipe(string(), isoTimestamp());\nconst status = picklist([\"draft\", \"active\", \"finished\"]);\nconst itemSchema = object({\n auctionId: auctionTextSchema,\n availableQuantity: nullable(cents),\n bidCount: cents,\n bidIncrementAmount: nullable(cents),\n buyNowPriceAmount: nullable(cents),\n collectShippingAddress: boolean(),\n communityId: auctionTextSchema,\n createdAt: date,\n description: nullable(string()),\n endAt: optional(nullable(date)),\n finalizedBidCount: cents,\n finishedAt: optional(nullable(date)),\n id: auctionTextSchema,\n image: nullable(string()),\n images: array(string()),\n inventoryQuantity: nullable(cents),\n isSoldOut: boolean(),\n maxBidAmount: nullable(cents),\n minBidAmount: nullable(cents),\n name: string(),\n paidQuantity: cents,\n path: auctionTextSchema,\n position: cents,\n reservedQuantity: cents,\n saleMode: picklist([\"auction\", \"buy_now\", \"hybrid\"]),\n slug: auctionTextSchema,\n startAt: optional(nullable(date)),\n status,\n updatedAt: date,\n});\nconst auctionSchema = object({\n collectShippingAddress: boolean(),\n community: optional(\n object({\n banner: optional(nullable(string())),\n color: optional(nullable(string())),\n name: optional(string()),\n thumbnail: optional(nullable(string())),\n })\n ),\n communityId: auctionTextSchema,\n configuration: object({\n collectShippingAddress: boolean(),\n endTimeEnabled: optional(nullable(boolean())),\n image: nullable(string()),\n serviceFeeDefaultChecked: boolean(),\n serviceFeeEnabled: boolean(),\n startTimeEnabled: optional(nullable(boolean())),\n }),\n createdAt: date,\n description: nullable(string()),\n endAt: date,\n id: auctionTextSchema,\n items: array(itemSchema),\n name: string(),\n path: auctionTextSchema,\n payment: optional(\n object({\n connectedAccountId: nullable(auctionTextSchema),\n currency: literal(\"usd\"),\n publishableKey: auctionTextSchema,\n })\n ),\n position: cents,\n pricingPolicy: object({\n currency: literal(\"usd\"),\n serviceFeeRateBasisPoints: cents,\n }),\n serviceFeeDefaultChecked: boolean(),\n serviceFeeEnabled: boolean(),\n slug: auctionTextSchema,\n startAt: date,\n status,\n updatedAt: date,\n});\nconst pricingEntries = {\n serviceFeeCents: cents,\n serviceFeeRateBasisPoints: cents,\n subtotalCents: cents,\n totalCents: cents,\n};\nconst pricingIsConsistent = (value: {\n subtotalCents: number;\n serviceFeeCents: number;\n totalCents: number;\n}) => value.totalCents === value.subtotalCents + value.serviceFeeCents;\nconst bidResultEntries = {\n ...pricingEntries,\n clientSecret: nullable(auctionTextSchema),\n requiresAction: boolean(),\n};\nconst bidResultSchema = pipe(\n object(bidResultEntries),\n check((value) => pricingIsConsistent(value)),\n check((value) => !value.requiresAction || value.clientSecret !== null)\n);\nconst purchaseResultSchema = pipe(\n object({\n ...bidResultEntries,\n id: auctionTextSchema,\n purchaseId: auctionTextSchema,\n quantity: pipe(cents, minValue(1)),\n status: picklist([\n \"pending_payment\",\n \"paid\",\n \"payment_failed\",\n \"expired\",\n \"canceled\",\n \"refunded\",\n ]),\n totalAmount: cents,\n }),\n check((value) => pricingIsConsistent(value)),\n check(\n (value) =>\n value.id === value.purchaseId &&\n (!value.requiresAction || value.clientSecret !== null)\n )\n);\nconst receiptSchema = pipe(\n object({\n ...pricingEntries,\n quantity: pipe(cents, minValue(1)),\n totalAmount: cents,\n unitAmount: cents,\n }),\n check((value) => pricingIsConsistent(value))\n);\nconst submissionEntries = {\n confirmationToken: auctionTextSchema,\n email: pipe(string(), email()),\n expectedServiceFeeCents: optional(cents),\n expectedSubtotalCents: optional(cents),\n expectedTotalCents: optional(cents),\n includeServiceFee: optional(boolean()),\n phone: pipe(string(), regex(/^\\+[1-9]\\d{1,14}$/)),\n};\nconst bidSubmissionSchema = object({\n ...submissionEntries,\n amount: pipe(cents, minValue(100)),\n});\nconst purchaseSubmissionSchema = object({\n ...submissionEntries,\n clientRequestId: auctionTextSchema,\n paymentMethodTypes: optional(strictTuple([literal(\"card\")])),\n quantity: pipe(cents, minValue(1)),\n});\nexport const parseAuction = <Value>(value: Value) =>\n parse(auctionSchema, value);\nexport const parseAuctions = <Value>(value: Value) =>\n parse(array(auctionSchema), value);\nexport const parseAuctionBidResult = <Value>(value: Value) =>\n parse(bidResultSchema, value);\nexport const parseAuctionPurchaseResult = <Value>(value: Value) =>\n parse(purchaseResultSchema, value);\nexport const parseAuctionPurchaseReceipt = <Value>(value: Value) =>\n parse(receiptSchema, value);\nexport const parseAuctionBidSubmission = <Value>(value: Value) =>\n parse(bidSubmissionSchema, value);\nexport const parseAuctionPurchaseSubmission = <Value>(value: Value) =>\n parse(purchaseSubmissionSchema, value);\n\nexport const parseAuctionPurchaseStatus = <Value>(value: Value) =>\n parse(nullable(purchaseResultSchema), value);\n","import { parse } from \"valibot\";\nimport { rewriteAuctionMedia } from \"./auction-media.ts\";\nimport {\n auctionTextSchema,\n parseAuction,\n parseAuctionBidResult,\n parseAuctionBidSubmission,\n parseAuctionPurchaseReceipt,\n parseAuctionPurchaseResult,\n parseAuctionPurchaseStatus,\n parseAuctionPurchaseSubmission,\n parseAuctions,\n} from \"./auction-schemas.ts\";\nimport type {\n CreateLockerverseAuctionOptions,\n LockerverseAuctionClient,\n} from \"./auction-types.ts\";\nimport { deepFreeze } from \"./deep-freeze.ts\";\nimport {\n parseResourceBaseUrl,\n resolveResourceEnvironment,\n} from \"./environment.ts\";\nimport { createSdkErrorReporter } from \"./error-reporting.ts\";\nimport { createTransport } from \"./transport.ts\";\nimport {\n LockerverseSdkError,\n type LockerverseSdkErrorCode,\n type LockerverseSdkOperation,\n} from \"./types.ts\";\n\ntype RequestContext = {\n code: LockerverseSdkErrorCode;\n operation: LockerverseSdkOperation;\n message: string;\n};\n\nfunction auctionRequestUrl(\n baseUrl: string,\n segments: string[],\n previewItemSlug?: string\n): string {\n const path =\n baseUrl +\n segments\n .map(\n (segment) => `/${encodeURIComponent(parse(auctionTextSchema, segment))}`\n )\n .join(\"\");\n return previewItemSlug === undefined\n ? path\n : `${path}?${new URLSearchParams({\n previewItem: parse(auctionTextSchema, previewItemSlug),\n })}`;\n}\n\nexport function createLockerverseAuctionClient(\n options: CreateLockerverseAuctionOptions\n): LockerverseAuctionClient {\n const runtime = resolveResourceEnvironment(options, \"communitySlug\");\n const mediaBaseUrl =\n options.mediaBaseUrl === undefined\n ? undefined\n : parseResourceBaseUrl(\n options.mediaBaseUrl,\n runtime.environment,\n \"mediaBaseUrl\"\n );\n const parseAuctionResponse = <Value>(value: Value) =>\n rewriteAuctionMedia(parseAuction(value), mediaBaseUrl);\n const reportError = createSdkErrorReporter({\n communitySlug: runtime.communitySlugValue,\n environment: runtime.environment,\n getContext: () => ({}),\n onError: runtime.onError,\n resourceContextName: \"lockerverse_auction\",\n sentryDsn: runtime.sentryDsn,\n });\n const { requestJson } = createTransport(\n runtime.fetchImplementation,\n reportError,\n runtime.requestTimeoutMs\n );\n const baseUrl = `${runtime.apiBaseUrl}/auctions/communities/slug/${runtime.communitySlug}`;\n\n async function request<T, Submission, ParsedSubmission>(\n context: RequestContext,\n segments: string[],\n parser: <Value>(value: Value) => T,\n submission?: {\n value: Submission;\n parse: (value: Submission) => ParsedSubmission;\n },\n previewItemSlug?: string\n ): Promise<T> {\n let url: string;\n let init: RequestInit | undefined;\n try {\n url = auctionRequestUrl(baseUrl, segments, previewItemSlug);\n if (submission) {\n init = {\n body: JSON.stringify(submission.parse(submission.value)),\n headers: { \"content-type\": \"application/json\" },\n method: \"POST\",\n };\n }\n } catch {\n // biome-ignore lint/style/useErrorCause: Validation details can contain personal data or confirmation tokens.\n throw reportError(\n new LockerverseSdkError({\n ...context,\n message: \"Lockerverse auction input is invalid.\",\n reportable: false,\n })\n );\n }\n try {\n const response = await requestJson(\n url,\n init,\n parser,\n { ...context, report: false },\n { ...context, report: false }\n );\n if (!response.ok) {\n const { status } = response.response;\n throw new LockerverseSdkError({\n ...context,\n recoveryRecommended:\n Boolean(submission) && (status >= 500 || status === 408),\n reportable: status >= 500,\n status,\n });\n }\n return deepFreeze(response.value);\n } catch (error) {\n if (error instanceof LockerverseSdkError) {\n throw reportError(\n new LockerverseSdkError({\n ...context,\n recoveryRecommended:\n error.recoveryRecommended ||\n (Boolean(submission) && error.status === undefined),\n reportable: error.reportable,\n ...(error.status === undefined\n ? undefined\n : { status: error.status }),\n })\n );\n }\n throw reportError(\n new LockerverseSdkError({\n ...context,\n recoveryRecommended: Boolean(submission),\n reportable: true,\n })\n );\n }\n }\n\n return {\n createBid: (auctionSlug, itemId, submission) =>\n request(\n {\n code: \"auction_bid_failed\",\n message: \"Unable to submit Lockerverse auction bid.\",\n operation: \"create_auction_bid\",\n },\n [\"path\", auctionSlug, \"items\", itemId, \"bids\"],\n parseAuctionBidResult,\n { parse: parseAuctionBidSubmission, value: submission }\n ),\n createPurchase: (auctionSlug, itemId, submission) =>\n request(\n {\n code: \"auction_purchase_failed\",\n message: \"Unable to submit Lockerverse auction purchase.\",\n operation: \"create_auction_purchase\",\n },\n [\"path\", auctionSlug, \"items\", itemId, \"purchases\"],\n parseAuctionPurchaseResult,\n { parse: parseAuctionPurchaseSubmission, value: submission }\n ),\n getPurchaseReceipt: (auctionSlug, itemSlug, purchaseId) =>\n request(\n {\n code: \"auction_receipt_failed\",\n message: \"Unable to load Lockerverse auction purchase receipt.\",\n operation: \"get_auction_purchase_receipt\",\n },\n [\"path\", auctionSlug, \"items\", itemSlug, \"purchases\", purchaseId],\n parseAuctionPurchaseReceipt\n ),\n getPurchaseStatus: (auctionSlug, itemId, clientRequestId) =>\n request(\n {\n code: \"auction_purchase_status_failed\",\n message: \"Unable to load Lockerverse auction purchase status.\",\n operation: \"get_auction_purchase_status\",\n },\n [\n \"path\",\n auctionSlug,\n \"items\",\n itemId,\n \"purchase-status\",\n clientRequestId,\n ],\n parseAuctionPurchaseStatus\n ),\n list: () =>\n request(\n {\n code: \"auction_load_failed\",\n message: \"Unable to load Lockerverse auctions.\",\n operation: \"list_auctions\",\n },\n [],\n (value) =>\n parseAuctions(value).map((auction) =>\n rewriteAuctionMedia(auction, mediaBaseUrl)\n )\n ),\n load: (auctionSlug, loadOptions) =>\n request(\n {\n code: \"auction_load_failed\",\n message: \"Unable to load Lockerverse auction.\",\n operation: \"load_auction\",\n },\n [\"path\", auctionSlug],\n parseAuctionResponse,\n undefined,\n loadOptions?.previewItemSlug\n ),\n };\n}\n","import type {\n LockerverseAuction,\n LockerverseAuctionItem,\n LockerverseAuctionPricing,\n} from \"./auction-types.ts\";\nimport { deepFreeze } from \"./deep-freeze.ts\";\n\nfunction assertCents(value: number) {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new TypeError(\"Auction amounts must be non-negative safe integers.\");\n }\n}\n\n/** Local estimate. Send expected amounts with the submission for server validation. */\nexport function calculateLockerverseAuctionPricing(\n auction: Pick<LockerverseAuction, \"serviceFeeEnabled\" | \"pricingPolicy\">,\n subtotalCents: number,\n includeServiceFee = false\n): LockerverseAuctionPricing {\n assertCents(subtotalCents);\n if (includeServiceFee && !auction.serviceFeeEnabled) {\n throw new TypeError(\"The service fee is not available for this auction.\");\n }\n const serviceFeeRateBasisPoints = includeServiceFee\n ? auction.pricingPolicy.serviceFeeRateBasisPoints\n : 0;\n assertCents(serviceFeeRateBasisPoints);\n const serviceFeeCents = Math.round(\n (subtotalCents * serviceFeeRateBasisPoints) / 10_000\n );\n const totalCents = subtotalCents + serviceFeeCents;\n assertCents(serviceFeeCents);\n assertCents(totalCents);\n return deepFreeze({\n serviceFeeCents,\n serviceFeeRateBasisPoints,\n subtotalCents,\n totalCents,\n });\n}\n\n/** Snapshot estimate. Another accepted bid can increase the server minimum. */\nexport function getLockerverseAuctionMinimumBid(\n item: Pick<\n LockerverseAuctionItem,\n \"minBidAmount\" | \"bidIncrementAmount\" | \"maxBidAmount\"\n >\n): number {\n const minimum = item.minBidAmount ?? 100;\n const increment = item.bidIncrementAmount ?? 100;\n assertCents(minimum);\n assertCents(increment);\n if (item.maxBidAmount === null) {\n return minimum;\n }\n assertCents(item.maxBidAmount);\n const amount = Math.max(minimum, item.maxBidAmount + increment);\n assertCents(amount);\n return amount;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auctions.js","names":[],"sources":["../src/auction-media.ts","../src/auction-schemas.ts","../src/auction-client.ts","../src/auction-pricing.ts"],"sourcesContent":["import type { LockerverseAuction } from \"./auction-types.ts\";\n\nconst MEDIA_PREFIX = \"https://media.lockerverse.com/\";\n\nexport function rewriteAuctionMedia(\n auction: LockerverseAuction,\n mediaBaseUrl: string | undefined\n): LockerverseAuction {\n if (mediaBaseUrl === undefined) {\n return auction;\n }\n // Keep the explicit proxy identity with the snapshot, including across SSR.\n auction.mediaBaseUrl = mediaBaseUrl;\n const rewrite = <Value extends string | null | undefined>(value: Value) =>\n value?.startsWith(MEDIA_PREFIX)\n ? `${mediaBaseUrl}/${value.slice(MEDIA_PREFIX.length)}`\n : value;\n\n auction.configuration.image = rewrite(auction.configuration.image);\n if (auction.community) {\n auction.community.banner = rewrite(auction.community.banner);\n auction.community.thumbnail = rewrite(auction.community.thumbnail);\n }\n for (const item of auction.items) {\n item.image = rewrite(item.image);\n item.images = item.images.map(rewrite);\n }\n return auction;\n}\n","import {\n array,\n boolean,\n check,\n email,\n isoTimestamp,\n literal,\n minLength,\n minValue,\n nullable,\n object,\n optional,\n parse,\n picklist,\n pipe,\n regex,\n strictTuple,\n string,\n} from \"valibot\";\n\nimport { safeIntegerSchema } from \"./schema-helpers.ts\";\n\nexport const auctionTextSchema = pipe(string(), minLength(1));\nconst cents = safeIntegerSchema(0);\nconst date = pipe(string(), isoTimestamp());\nconst status = picklist([\"draft\", \"active\", \"finished\"]);\nconst additionalChargeSchema = object({\n additionalUnitAmountCents: cents,\n category: picklist([\"shipping\", \"handling\", \"other\"]),\n firstUnitAmountCents: cents,\n name: auctionTextSchema,\n});\nconst itemSchema = object({\n additionalCharge: optional(nullable(additionalChargeSchema)),\n auctionId: auctionTextSchema,\n availableQuantity: nullable(cents),\n bidCount: cents,\n bidIncrementAmount: nullable(cents),\n buyNowPriceAmount: nullable(cents),\n collectShippingAddress: boolean(),\n communityId: auctionTextSchema,\n createdAt: date,\n description: nullable(string()),\n endAt: optional(nullable(date)),\n finalizedBidCount: cents,\n finishedAt: optional(nullable(date)),\n id: auctionTextSchema,\n image: nullable(string()),\n images: array(string()),\n inventoryQuantity: nullable(cents),\n isSoldOut: boolean(),\n maxBidAmount: nullable(cents),\n maxQuantityPerOrder: optional(nullable(pipe(cents, minValue(1)))),\n minBidAmount: nullable(cents),\n name: string(),\n paidQuantity: cents,\n path: auctionTextSchema,\n position: cents,\n reservedQuantity: cents,\n saleMode: picklist([\"auction\", \"buy_now\", \"hybrid\"]),\n slug: auctionTextSchema,\n startAt: optional(nullable(date)),\n status,\n updatedAt: date,\n});\nconst auctionSchema = object({\n collectShippingAddress: boolean(),\n community: optional(\n object({\n banner: optional(nullable(string())),\n color: optional(nullable(string())),\n name: optional(string()),\n thumbnail: optional(nullable(string())),\n })\n ),\n communityId: auctionTextSchema,\n configuration: object({\n collectShippingAddress: boolean(),\n endTimeEnabled: optional(nullable(boolean())),\n image: nullable(string()),\n serviceFeeDefaultChecked: boolean(),\n serviceFeeEnabled: boolean(),\n startTimeEnabled: optional(nullable(boolean())),\n }),\n createdAt: date,\n description: nullable(string()),\n endAt: date,\n id: auctionTextSchema,\n items: array(itemSchema),\n name: string(),\n path: auctionTextSchema,\n payment: optional(\n object({\n connectedAccountId: nullable(auctionTextSchema),\n currency: literal(\"usd\"),\n publishableKey: auctionTextSchema,\n })\n ),\n position: cents,\n pricingPolicy: object({\n currency: literal(\"usd\"),\n serviceFeeRateBasisPoints: cents,\n }),\n serviceFeeDefaultChecked: boolean(),\n serviceFeeEnabled: boolean(),\n slug: auctionTextSchema,\n startAt: date,\n status,\n updatedAt: date,\n});\nconst pricingEntries = {\n additionalCharge: optional(nullable(additionalChargeSchema)),\n additionalChargeCents: optional(cents, 0),\n serviceFeeCents: cents,\n serviceFeeRateBasisPoints: cents,\n subtotalCents: cents,\n totalCents: cents,\n};\nconst pricingIsConsistent = (value: {\n additionalChargeCents?: number;\n subtotalCents: number;\n serviceFeeCents: number;\n totalCents: number;\n}) =>\n value.totalCents ===\n value.subtotalCents +\n value.serviceFeeCents +\n (value.additionalChargeCents ?? 0);\nconst bidResultEntries = {\n ...pricingEntries,\n clientSecret: nullable(auctionTextSchema),\n requiresAction: boolean(),\n};\nconst bidResultSchema = pipe(\n object(bidResultEntries),\n check((value) => pricingIsConsistent(value)),\n check((value) => !value.requiresAction || value.clientSecret !== null)\n);\nconst purchaseResultSchema = pipe(\n object({\n ...bidResultEntries,\n id: auctionTextSchema,\n purchaseId: auctionTextSchema,\n quantity: pipe(cents, minValue(1)),\n status: picklist([\n \"pending_payment\",\n \"paid\",\n \"payment_failed\",\n \"expired\",\n \"canceled\",\n \"refunded\",\n ]),\n totalAmount: cents,\n }),\n check((value) => pricingIsConsistent(value)),\n check(\n (value) =>\n value.id === value.purchaseId &&\n (!value.requiresAction || value.clientSecret !== null)\n )\n);\nconst receiptSchema = pipe(\n object({\n ...pricingEntries,\n quantity: pipe(cents, minValue(1)),\n totalAmount: cents,\n unitAmount: cents,\n }),\n check((value) => pricingIsConsistent(value))\n);\nconst submissionEntries = {\n confirmationToken: auctionTextSchema,\n email: pipe(string(), email()),\n expectedAdditionalChargeCents: optional(cents),\n expectedServiceFeeCents: optional(cents),\n expectedSubtotalCents: optional(cents),\n expectedTotalCents: optional(cents),\n includeServiceFee: optional(boolean()),\n phone: pipe(string(), regex(/^\\+[1-9]\\d{1,14}$/)),\n};\nconst bidSubmissionSchema = object({\n ...submissionEntries,\n amount: pipe(cents, minValue(100)),\n});\nconst purchaseSubmissionSchema = object({\n ...submissionEntries,\n clientRequestId: auctionTextSchema,\n paymentMethodTypes: optional(strictTuple([literal(\"card\")])),\n quantity: pipe(cents, minValue(1)),\n});\nexport const parseAuction = <Value>(value: Value) =>\n parse(auctionSchema, value);\nexport const parseAuctions = <Value>(value: Value) =>\n parse(array(auctionSchema), value);\nexport const parseAuctionBidResult = <Value>(value: Value) =>\n parse(bidResultSchema, value);\nexport const parseAuctionPurchaseResult = <Value>(value: Value) =>\n parse(purchaseResultSchema, value);\nexport const parseAuctionPurchaseReceipt = <Value>(value: Value) =>\n parse(receiptSchema, value);\nexport const parseAuctionBidSubmission = <Value>(value: Value) =>\n parse(bidSubmissionSchema, value);\nexport const parseAuctionPurchaseSubmission = <Value>(value: Value) =>\n parse(purchaseSubmissionSchema, value);\n\nexport const parseAuctionPurchaseStatus = <Value>(value: Value) =>\n parse(nullable(purchaseResultSchema), value);\n\nexport const parseAuctionPurchaseQuote = <Value>(value: Value) =>\n parse(\n pipe(\n object(pricingEntries),\n check((pricing) => pricingIsConsistent(pricing))\n ),\n value\n );\nexport const parseAuctionPurchaseQuoteSelection = <Value>(value: Value) =>\n parse(\n object({\n includeServiceFee: optional(boolean()),\n quantity: pipe(cents, minValue(1)),\n }),\n value\n );\n","import { parse } from \"valibot\";\nimport { rewriteAuctionMedia } from \"./auction-media.ts\";\nimport {\n auctionTextSchema,\n parseAuction,\n parseAuctionBidResult,\n parseAuctionBidSubmission,\n parseAuctionPurchaseQuote,\n parseAuctionPurchaseQuoteSelection,\n parseAuctionPurchaseReceipt,\n parseAuctionPurchaseResult,\n parseAuctionPurchaseStatus,\n parseAuctionPurchaseSubmission,\n parseAuctions,\n} from \"./auction-schemas.ts\";\nimport type {\n CreateLockerverseAuctionOptions,\n LockerverseAuctionClient,\n} from \"./auction-types.ts\";\nimport { deepFreeze } from \"./deep-freeze.ts\";\nimport {\n parseResourceBaseUrl,\n resolveResourceEnvironment,\n} from \"./environment.ts\";\nimport { createSdkErrorReporter } from \"./error-reporting.ts\";\nimport { createTransport } from \"./transport.ts\";\nimport {\n LockerverseSdkError,\n type LockerverseSdkErrorCode,\n type LockerverseSdkOperation,\n} from \"./types.ts\";\n\ntype RequestContext = {\n code: LockerverseSdkErrorCode;\n operation: LockerverseSdkOperation;\n message: string;\n};\n\nfunction auctionRequestUrl(\n baseUrl: string,\n segments: string[],\n previewItemSlug?: string\n): string {\n const path =\n baseUrl +\n segments\n .map(\n (segment) => `/${encodeURIComponent(parse(auctionTextSchema, segment))}`\n )\n .join(\"\");\n return previewItemSlug === undefined\n ? path\n : `${path}?${new URLSearchParams({\n previewItem: parse(auctionTextSchema, previewItemSlug),\n })}`;\n}\n\nexport function createLockerverseAuctionClient(\n options: CreateLockerverseAuctionOptions\n): LockerverseAuctionClient {\n const runtime = resolveResourceEnvironment(options, \"communitySlug\");\n const mediaBaseUrl =\n options.mediaBaseUrl === undefined\n ? undefined\n : parseResourceBaseUrl(\n options.mediaBaseUrl,\n runtime.environment,\n \"mediaBaseUrl\"\n );\n const parseAuctionResponse = <Value>(value: Value) =>\n rewriteAuctionMedia(parseAuction(value), mediaBaseUrl);\n const reportError = createSdkErrorReporter({\n communitySlug: runtime.communitySlugValue,\n environment: runtime.environment,\n getContext: () => ({}),\n onError: runtime.onError,\n resourceContextName: \"lockerverse_auction\",\n sentryDsn: runtime.sentryDsn,\n });\n const { requestJson } = createTransport(\n runtime.fetchImplementation,\n reportError,\n runtime.requestTimeoutMs\n );\n const baseUrl = `${runtime.apiBaseUrl}/auctions/communities/slug/${runtime.communitySlug}`;\n\n async function request<T, Submission, ParsedSubmission>(\n context: RequestContext,\n segments: string[],\n parser: <Value>(value: Value) => T,\n submission?: {\n value: Submission;\n parse: (value: Submission) => ParsedSubmission;\n },\n previewItemSlug?: string,\n readOnly = false\n ): Promise<T> {\n const mutatesPayment = Boolean(submission) && !readOnly;\n let url: string;\n let init: RequestInit | undefined;\n try {\n url = auctionRequestUrl(baseUrl, segments, previewItemSlug);\n if (submission) {\n init = {\n body: JSON.stringify(submission.parse(submission.value)),\n headers: { \"content-type\": \"application/json\" },\n method: \"POST\",\n };\n }\n } catch {\n // biome-ignore lint/style/useErrorCause: Validation details can contain personal data or confirmation tokens.\n throw reportError(\n new LockerverseSdkError({\n ...context,\n message: \"Lockerverse auction input is invalid.\",\n reportable: false,\n })\n );\n }\n try {\n const response = await requestJson(\n url,\n init,\n parser,\n { ...context, report: false },\n { ...context, report: false }\n );\n if (!response.ok) {\n const { status } = response.response;\n throw new LockerverseSdkError({\n ...context,\n recoveryRecommended:\n mutatesPayment && (status >= 500 || status === 408),\n reportable: status >= 500,\n status,\n });\n }\n return deepFreeze(response.value);\n } catch (error) {\n if (error instanceof LockerverseSdkError) {\n throw reportError(\n new LockerverseSdkError({\n ...context,\n recoveryRecommended:\n error.recoveryRecommended ||\n (mutatesPayment && error.status === undefined),\n reportable: error.reportable,\n ...(error.status === undefined\n ? undefined\n : { status: error.status }),\n })\n );\n }\n throw reportError(\n new LockerverseSdkError({\n ...context,\n recoveryRecommended: mutatesPayment,\n reportable: true,\n })\n );\n }\n }\n\n return {\n createBid: (auctionSlug, itemId, submission) =>\n request(\n {\n code: \"auction_bid_failed\",\n message: \"Unable to submit Lockerverse auction bid.\",\n operation: \"create_auction_bid\",\n },\n [\"path\", auctionSlug, \"items\", itemId, \"bids\"],\n parseAuctionBidResult,\n { parse: parseAuctionBidSubmission, value: submission }\n ),\n createPurchase: (auctionSlug, itemId, submission) =>\n request(\n {\n code: \"auction_purchase_failed\",\n message: \"Unable to submit Lockerverse auction purchase.\",\n operation: \"create_auction_purchase\",\n },\n [\"path\", auctionSlug, \"items\", itemId, \"purchases\"],\n parseAuctionPurchaseResult,\n { parse: parseAuctionPurchaseSubmission, value: submission }\n ),\n getPurchaseQuote: (auctionSlug, itemId, selection) =>\n request(\n {\n code: \"auction_load_failed\",\n message: \"Unable to load Lockerverse auction purchase quote.\",\n operation: \"load_auction\",\n },\n [\"path\", auctionSlug, \"items\", itemId, \"purchase-quote\"],\n parseAuctionPurchaseQuote,\n { parse: parseAuctionPurchaseQuoteSelection, value: selection },\n undefined,\n true\n ),\n getPurchaseReceipt: (auctionSlug, itemSlug, purchaseId) =>\n request(\n {\n code: \"auction_receipt_failed\",\n message: \"Unable to load Lockerverse auction purchase receipt.\",\n operation: \"get_auction_purchase_receipt\",\n },\n [\"path\", auctionSlug, \"items\", itemSlug, \"purchases\", purchaseId],\n parseAuctionPurchaseReceipt\n ),\n getPurchaseStatus: (auctionSlug, itemId, clientRequestId) =>\n request(\n {\n code: \"auction_purchase_status_failed\",\n message: \"Unable to load Lockerverse auction purchase status.\",\n operation: \"get_auction_purchase_status\",\n },\n [\n \"path\",\n auctionSlug,\n \"items\",\n itemId,\n \"purchase-status\",\n clientRequestId,\n ],\n parseAuctionPurchaseStatus\n ),\n list: () =>\n request(\n {\n code: \"auction_load_failed\",\n message: \"Unable to load Lockerverse auctions.\",\n operation: \"list_auctions\",\n },\n [],\n (value) =>\n parseAuctions(value).map((auction) =>\n rewriteAuctionMedia(auction, mediaBaseUrl)\n )\n ),\n load: (auctionSlug, loadOptions) =>\n request(\n {\n code: \"auction_load_failed\",\n message: \"Unable to load Lockerverse auction.\",\n operation: \"load_auction\",\n },\n [\"path\", auctionSlug],\n parseAuctionResponse,\n undefined,\n loadOptions?.previewItemSlug\n ),\n };\n}\n","import type {\n LockerverseAuction,\n LockerverseAuctionItem,\n LockerverseAuctionPricing,\n} from \"./auction-types.ts\";\nimport { deepFreeze } from \"./deep-freeze.ts\";\n\nfunction assertCents(value: number) {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new TypeError(\"Auction amounts must be non-negative safe integers.\");\n }\n}\n\n/** Local estimate. Send expected amounts with the submission for server validation. */\nexport function calculateLockerverseAuctionPricing(\n auction: Pick<LockerverseAuction, \"serviceFeeEnabled\" | \"pricingPolicy\">,\n subtotalCents: number,\n includeServiceFee = false,\n additionalChargeCents = 0\n): LockerverseAuctionPricing {\n assertCents(subtotalCents);\n assertCents(additionalChargeCents);\n if (includeServiceFee && !auction.serviceFeeEnabled) {\n throw new TypeError(\"The service fee is not available for this auction.\");\n }\n const serviceFeeRateBasisPoints = includeServiceFee\n ? auction.pricingPolicy.serviceFeeRateBasisPoints\n : 0;\n assertCents(serviceFeeRateBasisPoints);\n const serviceFeeCents = Math.round(\n (subtotalCents * serviceFeeRateBasisPoints) / 10_000\n );\n const totalCents = subtotalCents + serviceFeeCents + additionalChargeCents;\n assertCents(serviceFeeCents);\n assertCents(totalCents);\n const pricing: LockerverseAuctionPricing = {\n serviceFeeCents,\n serviceFeeRateBasisPoints,\n subtotalCents,\n totalCents,\n };\n if (additionalChargeCents > 0) {\n pricing.additionalChargeCents = additionalChargeCents;\n }\n return deepFreeze(pricing);\n}\n\n/** Snapshot estimate. Another accepted bid can increase the server minimum. */\nexport function getLockerverseAuctionMinimumBid(\n item: Pick<\n LockerverseAuctionItem,\n \"minBidAmount\" | \"bidIncrementAmount\" | \"maxBidAmount\"\n >\n): number {\n const minimum = item.minBidAmount ?? 100;\n const increment = item.bidIncrementAmount ?? 100;\n assertCents(minimum);\n assertCents(increment);\n if (item.maxBidAmount === null) {\n return minimum;\n }\n assertCents(item.maxBidAmount);\n const amount = Math.max(minimum, item.maxBidAmount + increment);\n assertCents(amount);\n return amount;\n}\n"],"mappings":"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"}
|
package/dist/types.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=`0.2.
|
|
1
|
+
const e=`0.2.191`;var t=class extends Error{failureKind;code;operation;reportable;recoveryRecommended;sdkVersion;serverCode;status;constructor({failureKind:t,code:n,message:r,operation:i,reportable:a,recoveryRecommended:o=!1,serverCode:s,status:c}){super(r),this.name=`LockerverseSdkError`,this.failureKind=t,this.code=n,this.operation=i,this.reportable=a,this.recoveryRecommended=o,this.sdkVersion=e,this.serverCode=s,this.status=c}};export{t as n,e as t};
|
|
2
2
|
//# sourceMappingURL=types.js.map
|