UNPKG

@vansite/ts-sharetribe-flex-sdk

Version:

This is a TypeScript SDK for Sharetribe Flex API. It reduces the complexity of the API and provides a more user-friendly interface.

228 lines (227 loc) 8.66 kB
import UUIDClass from "../sdkTypes/UUID"; import { User } from "./marketplace/user"; import { Booking } from "./marketplace/bookings"; import { Stock } from "./marketplace/stock"; import { StripePaymentMethod } from "./marketplace/stripePaymentMethod"; import { Image } from "./marketplace/images"; import { Listing } from "./marketplace/listings"; import { Marketplace } from "./marketplace/marketplace"; import { Message } from "./marketplace/messages"; import { OwnListing } from "./marketplace/ownListings"; import { Review } from "./marketplace/reviews"; import { StockReservation } from "./marketplace/stockReservations"; import { StripeAccount } from "./marketplace/stripeAccount"; import { StripeCustomer } from "./marketplace/stripeCustomer"; import { Transaction } from "./marketplace/transactions"; import { CurrentUserPermissionSet } from "./marketplace/currentUser"; import { StockAdjustment } from "./marketplace/stockAdjustment"; import { ImageAsset } from "./assets"; /** * A mapping of relationship types to their corresponding entities. * The `I` flag controls whether private/protected user data is included. */ export type RelationshipTypeMap<I extends boolean = false> = { "author.effectivePermissionSet": CurrentUserPermissionSet; "author.marketplace": Marketplace; "author.profileImage": Image; "author.stripeAccount": StripeAccount; "booking.transaction": Transaction; "customer.effectivePermissionSet": CurrentUserPermissionSet; "customer.marketplace": Marketplace; "customer.profileImage": Image; "customer.stripeAccount": StripeAccount; "effectivePermissionSet": CurrentUserPermissionSet; "listing.author": User<I>; "listing.currentStock": Stock; "listing.images": Image; "listing.marketplace": Marketplace; "messages.sender": User<I>; "messages.transaction": Transaction; "ownListing.author": User<I>; "ownListing.currentStock": Stock; "ownListing.images": Image; "ownListing.marketplace": Marketplace; "provider.effectivePermissionSet": CurrentUserPermissionSet; "provider.marketplace": Marketplace; "provider.profileImage": Image; "provider.stripeAccount": StripeAccount; "reviews.author": User<I>; "reviews.author.profileImage": Image; "reviews.listing": Listing<I>; "reviews.subject": User<I>; "sender.effectivePermissionSet": CurrentUserPermissionSet; "sender.marketplace": Marketplace; "sender.profileImage": Image; "sender.stripeAccount": StripeAccount; "stockReservation.transaction": Transaction; "stripeCustomer.defaultPaymentMethod": StripePaymentMethod; "subject.effectivePermissionSet": CurrentUserPermissionSet; "subject.marketplace": Marketplace; "subject.profileImage": Image; "subject.stripeAccount": StripeAccount; "transaction.booking": Booking; "transaction.customer": User<I>; "transaction.listing": Listing<I>; "transaction.marketplace": Marketplace; "transaction.messages": Message; "transaction.provider": User<I>; "transaction.reviews": Review; "transaction.stockReservation": StockReservation; author: User<I>; booking: Booking; currentStock: Stock; customer: User<I>; defaultPaymentMethod: StripePaymentMethod; imageAsset: ImageAsset; images: Image; listing: Listing<I>; marketplace: Marketplace; messages: Message; ownListing: OwnListing; profileImage: Image; provider: User<I>; reviews: Review; sender: User<I>; stockAdjustment: StockAdjustment; stockReservation: StockReservation; stripeAccount: StripeAccount; stripeCustomer: StripeCustomer; subject: User<I>; transaction: Transaction; }; /** * HTTP status codes that can return API errors */ export declare const ApiErrorStatuses: { readonly BadRequest: 400; readonly Unauthorized: 401; readonly PaymentRequired: 402; readonly Forbidden: 403; readonly NotFound: 404; readonly Conflict: 409; readonly PayloadTooLarge: 413; readonly TooManyRequests: 429; readonly ServerError: 500; }; export type ApiErrorStatus = typeof ApiErrorStatuses[keyof typeof ApiErrorStatuses]; /** * Strongly typed error codes per status */ export type ApiErrorCode = "unsupported-content-type" | "bad-request" | "validation-disallowed-key" | "validation-invalid-value" | "validation-invalid-params" | "validation-missing-key" | "auth-invalid-access-token" | "auth-missing-access-token" | "transaction-payment-failed" | "forbidden" | "not-found" | "conflict" | "image-invalid" | "image-invalid-content" | "email-taken" | "email-already-verified" | "email-unverified" | "email-not-found" | "listing-not-found" | "listing-invalid-state" | "stripe-account-not-found" | "stripe-missing-api-key" | "stripe-invalid-payment-intent-status" | "stripe-customer-not-found" | "stripe-multiple-payment-methods-not-supported" | "stripe-payment-method-type-not-supported" | "user-missing-stripe-account" | "user-is-banned" | "user-not-found" | "transaction-locked" | "transaction-not-found" | "transaction-listing-not-found" | "transaction-booking-state-not-pending" | "transaction-booking-state-not-accepted" | "transaction-invalid-transition" | "transaction-invalid-action-sequence" | "transaction-missing-listing-price" | "transaction-missing-stripe-account" | "transaction-same-author-and-customer" | "transaction-stripe-account-disabled-charges" | "transaction-stripe-account-disabled-payouts" | "transaction-charge-zero-payin" | "transaction-charge-zero-payout" | "transaction-zero-payin" | "transaction-unknown-alias" | "transaction-provider-banned-or-deleted" | "transaction-customer-banned-or-deleted" | "request-larger-than-content-length" | "request-upload-over-limit" | "too-many-requests"; /** * Single API error object */ export interface ApiError { id: string; status: ApiErrorStatus; code: ApiErrorCode; title: string; detail?: string; source?: { pointer?: string; parameter?: string; }; meta?: Record<string, unknown>; } /** * Full error response from Sharetribe API */ export interface ApiErrorResponse { errors: ApiError[]; } /** * Error thrown by the SDK for any non-2xx API response. Extends the native * Error so `instanceof Error` checks and stringification behave correctly * (including in error loggers like Sentry). */ export interface SharetribeApiError extends Error { status?: number; statusText?: string; data: any; } /** * UUID wrapper instance */ export type UUID = InstanceType<typeof UUIDClass>; /** * Pagination metadata */ export interface ApiMeta { totalItems: number; totalPages: number; page: number; perPage: number; paginationLimit?: number; } /** * Relationship object in API responses */ export type Relationship<IsArray extends boolean = false, Type extends keyof RelationshipTypeMap = keyof RelationshipTypeMap> = IsArray extends true ? { data: { id: UUID; type: Type; }[]; } : { data: { id: UUID; type: Type; } | null; }; /** * Query parameter prefixes */ export type QueryFields = `fields.${string}`; export type QueryLimit = `limit.${string}`; export type QueryImageVariant = `imageVariant.${string}`; /** * Public, metadata, private, protected data query keys */ export type QueryPub = `pub_${string}`; export type QueryMeta = `meta_${string}`; export type QueryPriv = `priv_${string}`; export type QueryProt = `prot_${string}`; /** * Optional expand control */ export interface ExpandParam { expand?: boolean; } export type ExtraParameter = ExpandParam | undefined; export type ExtraParameterType = ExtraParameter; /** * Base API parameter interface (index signatures are now safe) */ export interface ApiParameter { /** Select fields: fields.listings=title,description */ [K: QueryFields]: string | string[] | undefined; /** Pagination limits per resource type */ [K: QueryLimit]: number | undefined; /** Image variants */ [K: QueryImageVariant]: string | string[] | undefined; /** Public custom fields */ [K: QueryPub]: string | undefined; /** Metadata fields */ [K: QueryMeta]: string | undefined; /** Private fields (admin only) */ [K: QueryPriv]: string | undefined; /** Protected fields (trusted user) */ [K: QueryProt]: string | undefined; } /** * Geographic types */ export interface LatLng { lat: number; lng: number; } export interface LatLngBounds { ne: LatLng; sw: LatLng; } /** * Money amount with currency */ export interface Money { amount: number; currency: string; }