@lockerverse/sdk 0.2.185 → 0.2.189
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 +13 -0
- package/dist/auctions.d.ts +1 -1
- package/dist/checkout.d.ts +2 -2
- package/dist/checkout.js +1 -1
- package/dist/checkout.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/telemetry.js +1 -1
- package/dist/telemetry.js.map +1 -1
- package/dist/transport.js +1 -1
- package/dist/transport.js.map +1 -1
- package/dist/types.d.ts +6 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
package/dist/transport.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{n as e}from"./types.js";import{ValiError as t,check as n,custom as r,function_ as i,is as a,looseObject as o,maxValue as s,minValue as c,nullable as l,number as u,optional as d,parse as f,picklist as p,pipe as m,safeInteger as h,string as g}from"valibot";function _(e){let t=new Object(e);if(t!==e||Object.isFrozen(t))return e;for(let e of Object.values(t))_(e);return Object.freeze(e)}const v=/\/+$/,y=new Set([`localhost`,`127.0.0.1`,`[::1]`]),b={development:{sentryDsn:`https://1977371f7bc44480935a7bc9726ca296@o1338376.ingest.sentry.io/6631829`},production:{sentryDsn:`https://43d2d853c129415cf77531c914511174@o1338376.ingest.us.sentry.io/4511911476133888`}};function x(e,t,n=`apiBaseUrl`){if(!a(g(),e))throw TypeError(`${n} must be a valid HTTP or HTTPS URL.`);let r;try{r=new URL(e)}catch{throw TypeError(`${n} must be a valid HTTP or HTTPS URL.`)}if(r.protocol!==`http:`&&r.protocol!==`https:`)throw TypeError(`${n} must be a valid HTTP or HTTPS URL.`);if(r.username||r.password)throw TypeError(`${n} must not include credentials.`);if(r.search||r.hash)throw TypeError(`${n} must not include a query or fragment.`);if(r.protocol!==`https:`&&!(t===`development`&&(y.has(r.hostname)||r.hostname.endsWith(`.localhost`))))throw TypeError(`${n} must use HTTPS except for development loopback endpoints.`);return r.pathname=r.pathname.replace(v,``),r.toString().replace(v,``)}function S(e,_){let v=`requestTimeoutMs must be a positive integer no greater than 2147483647.`,y=e=>m(g(`${e} must be a non-empty string.`),n(e=>e.trim().length>0,`${e} must be a non-empty string.`));try{let t=f(o({apiBaseUrl:d(g(`apiBaseUrl must be a valid HTTP or HTTPS URL.`)),communitySlug:y(`communitySlug`),environment:d(p([`development`,`production`],`environment must be either development or production.`)),fetch:d(r(e=>a(i(),e),`fetch must be a function when provided.`)),onError:d(r(e=>a(i(),e),`onError must be a function when provided.`)),requestTimeoutMs:d(m(u(v),h(v),c(1,v),s(2147483647,v))),sentryDsn:d(l(g(`sentryDsn must be a string or null when provided.`)))},`Expected an object.`),e);return{apiBaseUrl:t.apiBaseUrl,communitySlug:t.communitySlug,environment:t.environment,fetch:t.fetch,onError:t.onError,requestTimeoutMs:t.requestTimeoutMs,resourceSlugValue:f(y(_),t[_]),sentryDsn:t.sentryDsn}}catch(e){let n=e instanceof t?e.issues[0]?.message??`Invalid SDK options.`:`Invalid SDK options.`;throw TypeError(n)}}function C(e,t){let n=S(e,t),r=n.environment;if(n.apiBaseUrl!==void 0&&r===void 0)throw TypeError(`environment is required when apiBaseUrl is provided.`);if(n.apiBaseUrl===void 0&&r===`development`)throw TypeError(`apiBaseUrl is required when environment is development.`);let i=r===void 0?`production`:r,{communitySlug:a,resourceSlugValue:o}=n,s=n.fetch??globalThis.fetch,c=n.apiBaseUrl===void 0?`https://portal.lockerverse.com/api`:x(n.apiBaseUrl,i),l=b[i],u=n.sentryDsn,d=u===null?null:u??l.sentryDsn;return{apiBaseUrl:c,communitySlug:encodeURIComponent(a),communitySlugValue:a,environment:i,fetchImplementation:s,onError:n.onError,requestTimeoutMs:n.requestTimeoutMs??2e4,resourceSlug:encodeURIComponent(o),resourceSlugValue:o,sentryDsn:d}}function w(e){let t=C(e,`signupSlug`);return{...t,signupSlug:t.resourceSlug,signupSlugValue:t.resourceSlugValue}}function T(){return globalThis.window}function E({communitySlug:e,environment:t,getContext:n,onError:r,resourceContextName:i,sentryDsn:a}){let o=null;return function(s){try{Promise.resolve(r?.(s)).catch(()=>void 0)}catch{}let c=T();if(s.reportable&&a&&c!==void 0){let r=o??import(`./telemetry.js`);o=r;let c={communitySlug:e,...n()},l=s.status===void 0?c:{...c,status:s.status};r.then(({captureSdkError:e})=>e({context:l,contextName:i,dsn:a,environment:t,error:s})).catch(()=>{o===r&&(o=null)})}return s}}function D(t,n,r){function i(t){let
|
|
1
|
+
import{n as e}from"./types.js";import{ValiError as t,check as n,custom as r,function_ as i,is as a,looseObject as o,maxValue as s,minValue as c,nullable as l,number as u,optional as d,parse as f,picklist as p,pipe as m,safeInteger as h,string as g}from"valibot";function _(e){let t=new Object(e);if(t!==e||Object.isFrozen(t))return e;for(let e of Object.values(t))_(e);return Object.freeze(e)}const v=/\/+$/,y=new Set([`localhost`,`127.0.0.1`,`[::1]`]),b={development:{sentryDsn:`https://1977371f7bc44480935a7bc9726ca296@o1338376.ingest.sentry.io/6631829`},production:{sentryDsn:`https://43d2d853c129415cf77531c914511174@o1338376.ingest.us.sentry.io/4511911476133888`}};function x(e,t,n=`apiBaseUrl`){if(!a(g(),e))throw TypeError(`${n} must be a valid HTTP or HTTPS URL.`);let r;try{r=new URL(e)}catch{throw TypeError(`${n} must be a valid HTTP or HTTPS URL.`)}if(r.protocol!==`http:`&&r.protocol!==`https:`)throw TypeError(`${n} must be a valid HTTP or HTTPS URL.`);if(r.username||r.password)throw TypeError(`${n} must not include credentials.`);if(r.search||r.hash)throw TypeError(`${n} must not include a query or fragment.`);if(r.protocol!==`https:`&&!(t===`development`&&(y.has(r.hostname)||r.hostname.endsWith(`.localhost`))))throw TypeError(`${n} must use HTTPS except for development loopback endpoints.`);return r.pathname=r.pathname.replace(v,``),r.toString().replace(v,``)}function S(e,_){let v=`requestTimeoutMs must be a positive integer no greater than 2147483647.`,y=e=>m(g(`${e} must be a non-empty string.`),n(e=>e.trim().length>0,`${e} must be a non-empty string.`));try{let t=f(o({apiBaseUrl:d(g(`apiBaseUrl must be a valid HTTP or HTTPS URL.`)),communitySlug:y(`communitySlug`),environment:d(p([`development`,`production`],`environment must be either development or production.`)),fetch:d(r(e=>a(i(),e),`fetch must be a function when provided.`)),onError:d(r(e=>a(i(),e),`onError must be a function when provided.`)),requestTimeoutMs:d(m(u(v),h(v),c(1,v),s(2147483647,v))),sentryDsn:d(l(g(`sentryDsn must be a string or null when provided.`)))},`Expected an object.`),e);return{apiBaseUrl:t.apiBaseUrl,communitySlug:t.communitySlug,environment:t.environment,fetch:t.fetch,onError:t.onError,requestTimeoutMs:t.requestTimeoutMs,resourceSlugValue:f(y(_),t[_]),sentryDsn:t.sentryDsn}}catch(e){let n=e instanceof t?e.issues[0]?.message??`Invalid SDK options.`:`Invalid SDK options.`;throw TypeError(n)}}function C(e,t){let n=S(e,t),r=n.environment;if(n.apiBaseUrl!==void 0&&r===void 0)throw TypeError(`environment is required when apiBaseUrl is provided.`);if(n.apiBaseUrl===void 0&&r===`development`)throw TypeError(`apiBaseUrl is required when environment is development.`);let i=r===void 0?`production`:r,{communitySlug:a,resourceSlugValue:o}=n,s=n.fetch??globalThis.fetch,c=n.apiBaseUrl===void 0?`https://portal.lockerverse.com/api`:x(n.apiBaseUrl,i),l=b[i],u=n.sentryDsn,d=u===null?null:u??l.sentryDsn;return{apiBaseUrl:c,communitySlug:encodeURIComponent(a),communitySlugValue:a,environment:i,fetchImplementation:s,onError:n.onError,requestTimeoutMs:n.requestTimeoutMs??2e4,resourceSlug:encodeURIComponent(o),resourceSlugValue:o,sentryDsn:d}}function w(e){let t=C(e,`signupSlug`);return{...t,signupSlug:t.resourceSlug,signupSlugValue:t.resourceSlugValue}}function T(){return globalThis.window}function E({communitySlug:e,environment:t,getContext:n,onError:r,resourceContextName:i,sentryDsn:a}){let o=null;return function(s){try{Promise.resolve(r?.(s)).catch(()=>void 0)}catch{}let c=T();if(s.reportable&&a&&c!==void 0){let r=o??import(`./telemetry.js`);o=r;let c={communitySlug:e,...n()},l=s.status===void 0?c:{...c,status:s.status};r.then(({captureSdkError:e})=>e({context:l,contextName:i,dsn:a,environment:t,error:s})).catch(()=>{o===r&&(o=null)})}return s}}function D(t,n,r){function i(t,r){let i=new e({code:t.code,failureKind:r,message:t.message,operation:t.operation,reportable:!0});return t.report===!1?i:n(i)}async function a(e,n,a,o,s,c){let l=new AbortController,u=n?.signal??void 0,d=()=>l.abort(u?.reason);u?.aborted?d():u?.addEventListener(`abort`,d,{once:!0});let f,p=new Promise((e,t)=>{f=()=>t(l.signal.reason??new DOMException(`The request was aborted.`,`AbortError`)),l.signal.aborted?f():l.signal.addEventListener(`abort`,f,{once:!0})}),m=!1;function h(e,t){return u?.aborted?`aborted`:m?`timeout`:l.signal.aborted||t instanceof Error&&t.name===`AbortError`?`aborted`:e}let g=setTimeout(()=>{m=!0,l.abort(new DOMException(`The request timed out.`,`TimeoutError`))},r);try{let r;try{r=await Promise.race([t(e,{...n,signal:l.signal}),p])}catch(e){throw i(o,h(`network`,e))}if(!r.ok)try{return{errorValue:c?await Promise.race([c(r),p]):void 0,ok:!1,response:r}}catch{throw i(o,`invalid_response`)}let u;try{u=await Promise.race([r.json(),p])}catch(e){throw i(s,h(e instanceof TypeError?`network`:`invalid_response`,e))}try{return{ok:!0,response:r,value:a(u)}}catch{throw i(s,`invalid_response`)}}finally{clearTimeout(g),u?.removeEventListener(`abort`,d),f&&l.signal.removeEventListener(`abort`,f)}}return{requestJson:a}}export{w as a,C as i,E as n,_ as o,x as r,D as t};
|
|
2
2
|
//# sourceMappingURL=transport.js.map
|
package/dist/transport.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","names":[],"sources":["../src/deep-freeze.ts","../src/environment.ts","../src/error-reporting.ts","../src/transport.ts"],"sourcesContent":["export function deepFreeze<T>(value: T): T {\n const objectValue = new Object(value);\n if (objectValue !== value || Object.isFrozen(objectValue)) {\n return value;\n }\n for (const nestedValue of Object.values(objectValue)) {\n deepFreeze(nestedValue);\n }\n return Object.freeze(value);\n}\n","import {\n check,\n custom,\n function_,\n is,\n looseObject,\n maxValue,\n minValue,\n nullable,\n number,\n optional,\n parse,\n picklist,\n pipe,\n safeInteger,\n string,\n ValiError,\n} from \"valibot\";\n\nimport type { CreateLockerverseSignupOptions } from \"./signup-types.ts\";\nimport type { LockerverseEnvironment, LockerverseSdkError } from \"./types.ts\";\n\nconst DEFAULT_API_BASE_URL = \"https://portal.lockerverse.com/api\";\nconst DEFAULT_REQUEST_TIMEOUT_MS = 20_000;\nconst MAX_REQUEST_TIMEOUT_MS = 2_147_483_647;\nconst TRAILING_SLASHES = /\\/+$/;\nconst LOOPBACK_HOSTNAMES = new Set([\"localhost\", \"127.0.0.1\", \"[::1]\"]);\nconst ENVIRONMENT_CONFIG = {\n development: {\n sentryDsn:\n \"https://1977371f7bc44480935a7bc9726ca296@o1338376.ingest.sentry.io/6631829\",\n },\n production: {\n sentryDsn:\n \"https://43d2d853c129415cf77531c914511174@o1338376.ingest.us.sentry.io/4511911476133888\",\n },\n} as const;\n\nexport function parseResourceBaseUrl(\n value: string,\n environment: LockerverseEnvironment,\n name: \"apiBaseUrl\" | \"mediaBaseUrl\" = \"apiBaseUrl\"\n) {\n if (!is(string(), value)) {\n throw new TypeError(`${name} must be a valid HTTP or HTTPS URL.`);\n }\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n // biome-ignore lint/style/useErrorCause: The URL parser error can contain the rejected endpoint or credentials.\n throw new TypeError(`${name} must be a valid HTTP or HTTPS URL.`);\n }\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n throw new TypeError(`${name} must be a valid HTTP or HTTPS URL.`);\n }\n if (url.username || url.password) {\n throw new TypeError(`${name} must not include credentials.`);\n }\n if (url.search || url.hash) {\n throw new TypeError(`${name} must not include a query or fragment.`);\n }\n if (\n url.protocol !== \"https:\" &&\n !(\n environment === \"development\" &&\n (LOOPBACK_HOSTNAMES.has(url.hostname) ||\n url.hostname.endsWith(\".localhost\"))\n )\n ) {\n throw new TypeError(\n `${name} must use HTTPS except for development loopback endpoints.`\n );\n }\n url.pathname = url.pathname.replace(TRAILING_SLASHES, \"\");\n return url.toString().replace(TRAILING_SLASHES, \"\");\n}\n\nfunction parseRuntimeOptions<Options>(\n options: Options,\n resourceSlugKey: string\n) {\n const timeoutMessage =\n \"requestTimeoutMs must be a positive integer no greater than 2147483647.\";\n const slug = (name: string) =>\n pipe(\n string(`${name} must be a non-empty string.`),\n check(\n (value) => value.trim().length > 0,\n `${name} must be a non-empty string.`\n )\n );\n try {\n const runtimeOptions = parse(\n looseObject(\n {\n apiBaseUrl: optional(\n string(\"apiBaseUrl must be a valid HTTP or HTTPS URL.\")\n ),\n communitySlug: slug(\"communitySlug\"),\n environment: optional(\n picklist(\n [\"development\", \"production\"],\n \"environment must be either development or production.\"\n )\n ),\n fetch: optional(\n custom<typeof globalThis.fetch>(\n (value): value is typeof globalThis.fetch =>\n is(function_(), value),\n \"fetch must be a function when provided.\"\n )\n ),\n onError: optional(\n custom<(error: LockerverseSdkError) => void>(\n (value): value is (error: LockerverseSdkError) => void =>\n is(function_(), value),\n \"onError must be a function when provided.\"\n )\n ),\n requestTimeoutMs: optional(\n pipe(\n number(timeoutMessage),\n safeInteger(timeoutMessage),\n minValue(1, timeoutMessage),\n maxValue(MAX_REQUEST_TIMEOUT_MS, timeoutMessage)\n )\n ),\n sentryDsn: optional(\n nullable(\n string(\"sentryDsn must be a string or null when provided.\")\n )\n ),\n },\n \"Expected an object.\"\n ),\n options\n );\n return {\n apiBaseUrl: runtimeOptions.apiBaseUrl,\n communitySlug: runtimeOptions.communitySlug,\n environment: runtimeOptions.environment,\n fetch: runtimeOptions.fetch,\n onError: runtimeOptions.onError,\n requestTimeoutMs: runtimeOptions.requestTimeoutMs,\n resourceSlugValue: parse(\n slug(resourceSlugKey),\n runtimeOptions[resourceSlugKey]\n ),\n sentryDsn: runtimeOptions.sentryDsn,\n };\n } catch (error) {\n const message =\n error instanceof ValiError\n ? (error.issues[0]?.message ?? \"Invalid SDK options.\")\n : \"Invalid SDK options.\";\n // biome-ignore lint/style/useErrorCause: Validation details can contain rejected host input.\n throw new TypeError(message);\n }\n}\n\nexport function resolveResourceEnvironment<Options>(\n options: Options,\n resourceSlugKey: string\n) {\n const runtimeOptions = parseRuntimeOptions(options, resourceSlugKey);\n const requestedEnvironment = runtimeOptions.environment;\n if (\n runtimeOptions.apiBaseUrl !== undefined &&\n requestedEnvironment === undefined\n ) {\n throw new TypeError(\"environment is required when apiBaseUrl is provided.\");\n }\n if (\n runtimeOptions.apiBaseUrl === undefined &&\n requestedEnvironment === \"development\"\n ) {\n throw new TypeError(\n \"apiBaseUrl is required when environment is development.\"\n );\n }\n\n const environment =\n requestedEnvironment === undefined ? \"production\" : requestedEnvironment;\n const { communitySlug: communitySlugValue, resourceSlugValue } =\n runtimeOptions;\n\n const fetchImplementation = runtimeOptions.fetch ?? globalThis.fetch;\n const apiBaseUrl =\n runtimeOptions.apiBaseUrl === undefined\n ? DEFAULT_API_BASE_URL\n : parseResourceBaseUrl(runtimeOptions.apiBaseUrl, environment);\n const environmentConfig = ENVIRONMENT_CONFIG[environment];\n const configuredSentryDsn = runtimeOptions.sentryDsn;\n const sentryDsn =\n configuredSentryDsn === null\n ? null\n : (configuredSentryDsn ?? environmentConfig.sentryDsn);\n\n return {\n apiBaseUrl,\n communitySlug: encodeURIComponent(communitySlugValue),\n communitySlugValue,\n environment,\n fetchImplementation,\n onError: runtimeOptions.onError,\n requestTimeoutMs:\n runtimeOptions.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS,\n resourceSlug: encodeURIComponent(resourceSlugValue),\n resourceSlugValue,\n sentryDsn,\n };\n}\n\nexport function resolveSignupEnvironment(\n options: CreateLockerverseSignupOptions\n) {\n const runtime = resolveResourceEnvironment(options, \"signupSlug\");\n return {\n ...runtime,\n signupSlug: runtime.resourceSlug,\n signupSlugValue: runtime.resourceSlugValue,\n };\n}\n","import type { LockerverseEnvironment, LockerverseSdkError } from \"./types.ts\";\n\ntype TelemetryValue = boolean | number | string | null;\n\nexport function getBrowserWindow(): Window | undefined {\n return globalThis.window;\n}\n\nexport function createSdkErrorReporter({\n communitySlug,\n environment,\n getContext,\n onError,\n resourceContextName,\n sentryDsn,\n}: {\n communitySlug: string;\n environment: LockerverseEnvironment;\n getContext: () => Record<string, TelemetryValue>;\n onError: ((error: LockerverseSdkError) => void) | undefined;\n resourceContextName: string;\n sentryDsn: string | null;\n}) {\n let telemetryModulePromise: Promise<typeof import(\"./telemetry.ts\")> | null =\n null;\n\n return function reportError(error: LockerverseSdkError) {\n try {\n Promise.resolve(onError?.(error)).catch(() => undefined);\n } catch {\n // Host error reporting must never interrupt an SDK workflow.\n }\n\n const browserWindow = getBrowserWindow();\n if (error.reportable && sentryDsn && browserWindow !== undefined) {\n const telemetryPromise =\n telemetryModulePromise ?? import(\"./telemetry.ts\");\n telemetryModulePromise = telemetryPromise;\n const baseContext = {\n communitySlug,\n ...getContext(),\n };\n const context =\n error.status === undefined\n ? baseContext\n : { ...baseContext, status: error.status };\n telemetryPromise\n .then(({ captureSdkError }) =>\n captureSdkError({\n context,\n contextName: resourceContextName,\n dsn: sentryDsn,\n environment,\n error,\n })\n )\n .catch(() => {\n if (telemetryModulePromise === telemetryPromise) {\n telemetryModulePromise = null;\n }\n });\n }\n\n return error;\n };\n}\n","import {\n LockerverseSdkError,\n type LockerverseSdkErrorCode,\n type LockerverseSdkOperation,\n} from \"./types.ts\";\n\ntype ErrorContext = {\n code: LockerverseSdkErrorCode;\n message: string;\n operation: LockerverseSdkOperation;\n report?: boolean;\n};\n\ntype ReportError = (error: LockerverseSdkError) => LockerverseSdkError;\n\ntype JsonResponse<T, E> =\n | { errorValue: E | undefined; ok: false; response: Response }\n | { ok: true; response: Response; value: T };\n\ntype JsonValue =\n | boolean\n | number\n | string\n | null\n | JsonValue[]\n | { [key: string]: JsonValue };\n\nexport function createTransport(\n fetchImplementation: typeof globalThis.fetch,\n reportError: ReportError,\n requestTimeoutMs: number\n) {\n function createBoundaryError(context: ErrorContext) {\n const error = new LockerverseSdkError({\n code: context.code,\n message: context.message,\n operation: context.operation,\n reportable: true,\n });\n return context.report === false ? error : reportError(error);\n }\n\n async function requestJson<T, E>(\n input: string,\n init: RequestInit | undefined,\n parser: (value: JsonValue) => T,\n requestContext: ErrorContext,\n responseContext: ErrorContext,\n readErrorResponse?: (response: Response) => Promise<E>\n ): Promise<JsonResponse<T, E>> {\n const controller = new AbortController();\n const callerSignal = init?.signal ?? undefined;\n const abortFromCaller = () => controller.abort(callerSignal?.reason);\n if (callerSignal?.aborted) {\n abortFromCaller();\n } else {\n callerSignal?.addEventListener(\"abort\", abortFromCaller, { once: true });\n }\n\n let rejectWhenAborted: (() => void) | undefined;\n const aborted = new Promise<never>((_resolve, reject) => {\n rejectWhenAborted = () =>\n reject(\n controller.signal.reason ??\n new DOMException(\"The request was aborted.\", \"AbortError\")\n );\n if (controller.signal.aborted) {\n rejectWhenAborted();\n } else {\n controller.signal.addEventListener(\"abort\", rejectWhenAborted, {\n once: true,\n });\n }\n });\n const timeout = setTimeout(() => {\n controller.abort(\n new DOMException(\"The request timed out.\", \"TimeoutError\")\n );\n }, requestTimeoutMs);\n\n try {\n let response: Response;\n try {\n response = await Promise.race([\n fetchImplementation(input, { ...init, signal: controller.signal }),\n aborted,\n ]);\n } catch {\n // biome-ignore lint/style/useErrorCause: Raw host network errors are intentionally excluded from public SDK errors and telemetry.\n throw createBoundaryError(requestContext);\n }\n\n if (!response.ok) {\n try {\n const errorValue = readErrorResponse\n ? await Promise.race([readErrorResponse(response), aborted])\n : undefined;\n return { errorValue, ok: false, response };\n } catch {\n // biome-ignore lint/style/useErrorCause: Raw error-body failures must not escape the SDK boundary.\n throw createBoundaryError(requestContext);\n }\n }\n\n try {\n const value = await Promise.race([response.json(), aborted]);\n return { ok: true, response, value: parser(value) };\n } catch {\n // biome-ignore lint/style/useErrorCause: Raw parse and validation errors must not escape the SDK boundary.\n throw createBoundaryError(responseContext);\n }\n } finally {\n clearTimeout(timeout);\n callerSignal?.removeEventListener(\"abort\", abortFromCaller);\n if (rejectWhenAborted) {\n controller.signal.removeEventListener(\"abort\", rejectWhenAborted);\n }\n }\n }\n\n return { requestJson };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transport.js","names":[],"sources":["../src/deep-freeze.ts","../src/environment.ts","../src/error-reporting.ts","../src/transport.ts"],"sourcesContent":["export function deepFreeze<T>(value: T): T {\n const objectValue = new Object(value);\n if (objectValue !== value || Object.isFrozen(objectValue)) {\n return value;\n }\n for (const nestedValue of Object.values(objectValue)) {\n deepFreeze(nestedValue);\n }\n return Object.freeze(value);\n}\n","import {\n check,\n custom,\n function_,\n is,\n looseObject,\n maxValue,\n minValue,\n nullable,\n number,\n optional,\n parse,\n picklist,\n pipe,\n safeInteger,\n string,\n ValiError,\n} from \"valibot\";\n\nimport type { CreateLockerverseSignupOptions } from \"./signup-types.ts\";\nimport type { LockerverseEnvironment, LockerverseSdkError } from \"./types.ts\";\n\nconst DEFAULT_API_BASE_URL = \"https://portal.lockerverse.com/api\";\nconst DEFAULT_REQUEST_TIMEOUT_MS = 20_000;\nconst MAX_REQUEST_TIMEOUT_MS = 2_147_483_647;\nconst TRAILING_SLASHES = /\\/+$/;\nconst LOOPBACK_HOSTNAMES = new Set([\"localhost\", \"127.0.0.1\", \"[::1]\"]);\nconst ENVIRONMENT_CONFIG = {\n development: {\n sentryDsn:\n \"https://1977371f7bc44480935a7bc9726ca296@o1338376.ingest.sentry.io/6631829\",\n },\n production: {\n sentryDsn:\n \"https://43d2d853c129415cf77531c914511174@o1338376.ingest.us.sentry.io/4511911476133888\",\n },\n} as const;\n\nexport function parseResourceBaseUrl(\n value: string,\n environment: LockerverseEnvironment,\n name: \"apiBaseUrl\" | \"mediaBaseUrl\" = \"apiBaseUrl\"\n) {\n if (!is(string(), value)) {\n throw new TypeError(`${name} must be a valid HTTP or HTTPS URL.`);\n }\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n // biome-ignore lint/style/useErrorCause: The URL parser error can contain the rejected endpoint or credentials.\n throw new TypeError(`${name} must be a valid HTTP or HTTPS URL.`);\n }\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n throw new TypeError(`${name} must be a valid HTTP or HTTPS URL.`);\n }\n if (url.username || url.password) {\n throw new TypeError(`${name} must not include credentials.`);\n }\n if (url.search || url.hash) {\n throw new TypeError(`${name} must not include a query or fragment.`);\n }\n if (\n url.protocol !== \"https:\" &&\n !(\n environment === \"development\" &&\n (LOOPBACK_HOSTNAMES.has(url.hostname) ||\n url.hostname.endsWith(\".localhost\"))\n )\n ) {\n throw new TypeError(\n `${name} must use HTTPS except for development loopback endpoints.`\n );\n }\n url.pathname = url.pathname.replace(TRAILING_SLASHES, \"\");\n return url.toString().replace(TRAILING_SLASHES, \"\");\n}\n\nfunction parseRuntimeOptions<Options>(\n options: Options,\n resourceSlugKey: string\n) {\n const timeoutMessage =\n \"requestTimeoutMs must be a positive integer no greater than 2147483647.\";\n const slug = (name: string) =>\n pipe(\n string(`${name} must be a non-empty string.`),\n check(\n (value) => value.trim().length > 0,\n `${name} must be a non-empty string.`\n )\n );\n try {\n const runtimeOptions = parse(\n looseObject(\n {\n apiBaseUrl: optional(\n string(\"apiBaseUrl must be a valid HTTP or HTTPS URL.\")\n ),\n communitySlug: slug(\"communitySlug\"),\n environment: optional(\n picklist(\n [\"development\", \"production\"],\n \"environment must be either development or production.\"\n )\n ),\n fetch: optional(\n custom<typeof globalThis.fetch>(\n (value): value is typeof globalThis.fetch =>\n is(function_(), value),\n \"fetch must be a function when provided.\"\n )\n ),\n onError: optional(\n custom<(error: LockerverseSdkError) => void>(\n (value): value is (error: LockerverseSdkError) => void =>\n is(function_(), value),\n \"onError must be a function when provided.\"\n )\n ),\n requestTimeoutMs: optional(\n pipe(\n number(timeoutMessage),\n safeInteger(timeoutMessage),\n minValue(1, timeoutMessage),\n maxValue(MAX_REQUEST_TIMEOUT_MS, timeoutMessage)\n )\n ),\n sentryDsn: optional(\n nullable(\n string(\"sentryDsn must be a string or null when provided.\")\n )\n ),\n },\n \"Expected an object.\"\n ),\n options\n );\n return {\n apiBaseUrl: runtimeOptions.apiBaseUrl,\n communitySlug: runtimeOptions.communitySlug,\n environment: runtimeOptions.environment,\n fetch: runtimeOptions.fetch,\n onError: runtimeOptions.onError,\n requestTimeoutMs: runtimeOptions.requestTimeoutMs,\n resourceSlugValue: parse(\n slug(resourceSlugKey),\n runtimeOptions[resourceSlugKey]\n ),\n sentryDsn: runtimeOptions.sentryDsn,\n };\n } catch (error) {\n const message =\n error instanceof ValiError\n ? (error.issues[0]?.message ?? \"Invalid SDK options.\")\n : \"Invalid SDK options.\";\n // biome-ignore lint/style/useErrorCause: Validation details can contain rejected host input.\n throw new TypeError(message);\n }\n}\n\nexport function resolveResourceEnvironment<Options>(\n options: Options,\n resourceSlugKey: string\n) {\n const runtimeOptions = parseRuntimeOptions(options, resourceSlugKey);\n const requestedEnvironment = runtimeOptions.environment;\n if (\n runtimeOptions.apiBaseUrl !== undefined &&\n requestedEnvironment === undefined\n ) {\n throw new TypeError(\"environment is required when apiBaseUrl is provided.\");\n }\n if (\n runtimeOptions.apiBaseUrl === undefined &&\n requestedEnvironment === \"development\"\n ) {\n throw new TypeError(\n \"apiBaseUrl is required when environment is development.\"\n );\n }\n\n const environment =\n requestedEnvironment === undefined ? \"production\" : requestedEnvironment;\n const { communitySlug: communitySlugValue, resourceSlugValue } =\n runtimeOptions;\n\n const fetchImplementation = runtimeOptions.fetch ?? globalThis.fetch;\n const apiBaseUrl =\n runtimeOptions.apiBaseUrl === undefined\n ? DEFAULT_API_BASE_URL\n : parseResourceBaseUrl(runtimeOptions.apiBaseUrl, environment);\n const environmentConfig = ENVIRONMENT_CONFIG[environment];\n const configuredSentryDsn = runtimeOptions.sentryDsn;\n const sentryDsn =\n configuredSentryDsn === null\n ? null\n : (configuredSentryDsn ?? environmentConfig.sentryDsn);\n\n return {\n apiBaseUrl,\n communitySlug: encodeURIComponent(communitySlugValue),\n communitySlugValue,\n environment,\n fetchImplementation,\n onError: runtimeOptions.onError,\n requestTimeoutMs:\n runtimeOptions.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS,\n resourceSlug: encodeURIComponent(resourceSlugValue),\n resourceSlugValue,\n sentryDsn,\n };\n}\n\nexport function resolveSignupEnvironment(\n options: CreateLockerverseSignupOptions\n) {\n const runtime = resolveResourceEnvironment(options, \"signupSlug\");\n return {\n ...runtime,\n signupSlug: runtime.resourceSlug,\n signupSlugValue: runtime.resourceSlugValue,\n };\n}\n","import type { LockerverseEnvironment, LockerverseSdkError } from \"./types.ts\";\n\ntype TelemetryValue = boolean | number | string | null;\n\nexport function getBrowserWindow(): Window | undefined {\n return globalThis.window;\n}\n\nexport function createSdkErrorReporter({\n communitySlug,\n environment,\n getContext,\n onError,\n resourceContextName,\n sentryDsn,\n}: {\n communitySlug: string;\n environment: LockerverseEnvironment;\n getContext: () => Record<string, TelemetryValue>;\n onError: ((error: LockerverseSdkError) => void) | undefined;\n resourceContextName: string;\n sentryDsn: string | null;\n}) {\n let telemetryModulePromise: Promise<typeof import(\"./telemetry.ts\")> | null =\n null;\n\n return function reportError(error: LockerverseSdkError) {\n try {\n Promise.resolve(onError?.(error)).catch(() => undefined);\n } catch {\n // Host error reporting must never interrupt an SDK workflow.\n }\n\n const browserWindow = getBrowserWindow();\n if (error.reportable && sentryDsn && browserWindow !== undefined) {\n const telemetryPromise =\n telemetryModulePromise ?? import(\"./telemetry.ts\");\n telemetryModulePromise = telemetryPromise;\n const baseContext = {\n communitySlug,\n ...getContext(),\n };\n const context =\n error.status === undefined\n ? baseContext\n : { ...baseContext, status: error.status };\n telemetryPromise\n .then(({ captureSdkError }) =>\n captureSdkError({\n context,\n contextName: resourceContextName,\n dsn: sentryDsn,\n environment,\n error,\n })\n )\n .catch(() => {\n if (telemetryModulePromise === telemetryPromise) {\n telemetryModulePromise = null;\n }\n });\n }\n\n return error;\n };\n}\n","import {\n LockerverseSdkError,\n type LockerverseSdkErrorCode,\n type LockerverseSdkFailureKind,\n type LockerverseSdkOperation,\n} from \"./types.ts\";\n\ntype ErrorContext = {\n code: LockerverseSdkErrorCode;\n message: string;\n operation: LockerverseSdkOperation;\n report?: boolean;\n};\n\ntype ReportError = (error: LockerverseSdkError) => LockerverseSdkError;\n\ntype JsonResponse<T, E> =\n | { errorValue: E | undefined; ok: false; response: Response }\n | { ok: true; response: Response; value: T };\n\ntype JsonValue =\n | boolean\n | number\n | string\n | null\n | JsonValue[]\n | { [key: string]: JsonValue };\n\nexport function createTransport(\n fetchImplementation: typeof globalThis.fetch,\n reportError: ReportError,\n requestTimeoutMs: number\n) {\n function createBoundaryError(\n context: ErrorContext,\n failureKind: LockerverseSdkFailureKind\n ) {\n const error = new LockerverseSdkError({\n code: context.code,\n failureKind,\n message: context.message,\n operation: context.operation,\n reportable: true,\n });\n return context.report === false ? error : reportError(error);\n }\n\n async function requestJson<T, E>(\n input: string,\n init: RequestInit | undefined,\n parser: (value: JsonValue) => T,\n requestContext: ErrorContext,\n responseContext: ErrorContext,\n readErrorResponse?: (response: Response) => Promise<E>\n ): Promise<JsonResponse<T, E>> {\n const controller = new AbortController();\n const callerSignal = init?.signal ?? undefined;\n const abortFromCaller = () => controller.abort(callerSignal?.reason);\n if (callerSignal?.aborted) {\n abortFromCaller();\n } else {\n callerSignal?.addEventListener(\"abort\", abortFromCaller, { once: true });\n }\n\n let rejectWhenAborted: (() => void) | undefined;\n const aborted = new Promise<never>((_resolve, reject) => {\n rejectWhenAborted = () =>\n reject(\n controller.signal.reason ??\n new DOMException(\"The request was aborted.\", \"AbortError\")\n );\n if (controller.signal.aborted) {\n rejectWhenAborted();\n } else {\n controller.signal.addEventListener(\"abort\", rejectWhenAborted, {\n once: true,\n });\n }\n });\n let timedOut = false;\n function failureKind(\n fallback: LockerverseSdkFailureKind,\n cause?: unknown\n ): LockerverseSdkFailureKind {\n if (callerSignal?.aborted) {\n return \"aborted\";\n }\n if (timedOut) {\n return \"timeout\";\n }\n if (\n controller.signal.aborted ||\n (cause instanceof Error && cause.name === \"AbortError\")\n ) {\n return \"aborted\";\n }\n return fallback;\n }\n const timeout = setTimeout(() => {\n timedOut = true;\n controller.abort(\n new DOMException(\"The request timed out.\", \"TimeoutError\")\n );\n }, requestTimeoutMs);\n\n try {\n let response: Response;\n try {\n response = await Promise.race([\n fetchImplementation(input, { ...init, signal: controller.signal }),\n aborted,\n ]);\n } catch (cause) {\n // Raw host network errors are intentionally excluded from public SDK errors and telemetry.\n throw createBoundaryError(\n requestContext,\n failureKind(\"network\", cause)\n );\n }\n\n if (!response.ok) {\n try {\n const errorValue = readErrorResponse\n ? await Promise.race([readErrorResponse(response), aborted])\n : undefined;\n return { errorValue, ok: false, response };\n } catch {\n // biome-ignore lint/style/useErrorCause: Raw error-body failures must not escape the SDK boundary.\n throw createBoundaryError(requestContext, \"invalid_response\");\n }\n }\n\n let value: JsonValue;\n try {\n value = await Promise.race([response.json(), aborted]);\n } catch (cause) {\n // A disconnected response body is retryable; invalid JSON is not.\n throw createBoundaryError(\n responseContext,\n failureKind(\n cause instanceof TypeError ? \"network\" : \"invalid_response\",\n cause\n )\n );\n }\n try {\n return { ok: true, response, value: parser(value) };\n } catch {\n // biome-ignore lint/style/useErrorCause: Raw validation errors must not escape the SDK boundary.\n throw createBoundaryError(responseContext, \"invalid_response\");\n }\n } finally {\n clearTimeout(timeout);\n callerSignal?.removeEventListener(\"abort\", abortFromCaller);\n if (rejectWhenAborted) {\n controller.signal.removeEventListener(\"abort\", rejectWhenAborted);\n }\n }\n }\n\n return { requestJson };\n}\n"],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -125,7 +125,9 @@ type LockerverseWidgetConfiguration = {
|
|
|
125
125
|
type LockerverseSdkErrorCode = "public_events_load_failed" | "auction_load_failed" | "auction_bid_failed" | "auction_purchase_failed" | "auction_purchase_status_failed" | "auction_receipt_failed" | "widget_load_failed" | "signup_load_failed" | "signup_submit_failed" | "total_calculation_failed" | "payment_submit_failed" | "payment_status_failed" | "invalid_selection";
|
|
126
126
|
type LockerverseSdkOperation = "list_public_events" | "list_auctions" | "load_auction" | "create_auction_bid" | "create_auction_purchase" | "get_auction_purchase_receipt" | "get_auction_purchase_status" | "load_widget" | "load_signup" | "submit_signup" | "calculate_total" | "submit_payment" | "get_payment_status";
|
|
127
127
|
type LockerverseSdkServerCode = "PAYMENT_WIDGET_SALES_LIMIT_REACHED" | "PAYMENT_WIDGET_PHONE_INVALID" | "PAYMENT_WIDGET_PHONE_REQUIRED" | "SIGN_UP_WIDGET_PHONE_INVALID" | "SIGN_UP_WIDGET_PHONE_REQUIRED";
|
|
128
|
+
type LockerverseSdkFailureKind = "network" | "timeout" | "aborted" | "invalid_response";
|
|
128
129
|
declare class LockerverseSdkError extends Error {
|
|
130
|
+
readonly failureKind: LockerverseSdkFailureKind | undefined;
|
|
129
131
|
readonly code: LockerverseSdkErrorCode;
|
|
130
132
|
readonly operation: LockerverseSdkOperation;
|
|
131
133
|
readonly reportable: boolean;
|
|
@@ -133,14 +135,15 @@ declare class LockerverseSdkError extends Error {
|
|
|
133
135
|
readonly sdkVersion: string;
|
|
134
136
|
readonly serverCode: LockerverseSdkServerCode | undefined;
|
|
135
137
|
readonly status: number | undefined;
|
|
136
|
-
constructor({ code, message, operation, reportable, recoveryRecommended, serverCode, status }: {
|
|
138
|
+
constructor({ failureKind, code, message, operation, reportable, recoveryRecommended, serverCode, status }: {
|
|
139
|
+
failureKind?: LockerverseSdkFailureKind | undefined;
|
|
137
140
|
code: LockerverseSdkErrorCode;
|
|
138
141
|
message: string;
|
|
139
142
|
operation: LockerverseSdkOperation;
|
|
140
143
|
reportable: boolean;
|
|
141
144
|
recoveryRecommended?: boolean;
|
|
142
145
|
serverCode?: LockerverseSdkServerCode;
|
|
143
|
-
status?: number;
|
|
146
|
+
status?: number | undefined;
|
|
144
147
|
});
|
|
145
148
|
}
|
|
146
149
|
type LockerverseCheckoutLineItem = {
|
|
@@ -301,5 +304,5 @@ type LockerverseCheckoutClient = {
|
|
|
301
304
|
submitPayment: (input: LockerverseSubmitPaymentInput) => Promise<LockerversePaymentResult>;
|
|
302
305
|
};
|
|
303
306
|
//#endregion
|
|
304
|
-
export { LockerversePaymentCompletion as A, LockerverseSdkErrorCode as B, LockerverseEnvironment as C, LockerverseLoadCheckoutInput as D, LockerverseFulfillmentType as E, LockerversePaymentSubmission as F,
|
|
307
|
+
export { LockerversePaymentCompletion as A, LockerverseSdkErrorCode as B, LockerverseEnvironment as C, LockerverseLoadCheckoutInput as D, LockerverseFulfillmentType as E, LockerversePaymentSubmission as F, LockerverseSingleOptionCustomField as G, LockerverseSdkOperation as H, LockerversePreparedCheckout as I, LockerverseWidgetConfiguration as J, LockerverseSubmitPaymentInput as K, LockerverseProduct as L, LockerversePaymentOption as M, LockerversePaymentResult as N, LockerverseLoadedCheckout as O, LockerversePaymentStatus as P, LockerverseResourceEnvironmentOptions as R, LockerverseCustomFieldOption as S, LockerverseEvent as T, LockerverseSdkServerCode as U, LockerverseSdkFailureKind as V, LockerverseShipping as W, LockerverseWidgetFields as Y, LockerverseCheckoutSelectionItem as _, LockerverseBooleanCustomField as a, LockerverseCustomFieldAnswer as b, LockerverseCatalogAvailability as c, LockerverseCheckoutEstimate as d, LockerverseCheckoutItem as f, LockerverseCheckoutQuote as g, LockerverseCheckoutPricingPolicy as h, LockerverseAvailabilityStatus as i, LockerversePaymentConfiguration as j, LockerverseMultiOptionCustomField as k, LockerverseCheckoutAmounts as l, LockerverseCheckoutPricingInput as m, LOCKERVERSE_SDK_VERSION as n, LockerverseCalculateTotalInput as o, LockerverseCheckoutLineItem as p, LockerverseTextCustomField as q, LockerverseAppliedDiscount as r, LockerverseCatalog as s, CreateLockerverseWidgetOptions as t, LockerverseCheckoutClient as u, LockerverseCommunityBranding as v, LockerverseEstimateCheckoutInput as w, LockerverseCustomFieldAnswerValue as x, LockerverseCustomField as y, LockerverseSdkError as z };
|
|
305
308
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","names":[],"sources":["../src/types.ts"],"mappings":";KAGY;KAKA;KACA;cAEC;KAED;EACV;EACA;EACA;EACA;EACA;EACA,iBAAiB;EACjB;EACA,eAAe;EACf;EACA;EACA;;EAEA;EACA;EACA;;KAGU;KAEA;EACV,UAAU;IACR;IACA;IACA;IACA,QAAQ;;EAEV,cAAc;IACZ;IACA;IACA;IACA,QAAQ;;;KAIA;EACV,cAAc;EACd,WAAW;EACX,OAAO;EACP,SAAS;EACT,eAAe;EACf,UAAU;EACV,QAAQ;;KAGE;EACV;EACA;EACA;EACA;EACA;EACA;EACA;;KAGU;EACV;EACA;EACA;EACA;EACA;;KAGU;EACV;EACA;;KAGU;EACV;EACA;EACA;;KAGU;EACV;EACA;EACA;EACA;EACA;EACA;EACA;;KAGU;EAAiC;EAAY;;KAEpD;EACH;EACA;EACA;EACA;;KAGU,6BAA6B;EACvC;;KAGU,gCAAgC;EAC1C;;KAGU,qCAAqC;EAC/C,SAAS;EACT;;KAGU,oCAAoC;EAC9C,SAAS;EACT;;KAGU,yBACR,gCACA,6BACA,qCACA;KAEQ,kCACV,cAAc,0BACZ,cAAc,0CAEd,cAAc;KAIN,6BACV,cAAc,yBAAyB,0BACrC,cAAc;EACZ,SAAS;EAAa,OAAO,kCAAkC;;KAGzD;EACV;IAEM;IACA;IACA;;EAGN,cAAc;EACd;EACA,QAAQ;EACR;EACA;EACA;EACA;;KAGU;KAeA;KAeA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","names":[],"sources":["../src/types.ts"],"mappings":";KAGY;KAKA;KACA;cAEC;KAED;EACV;EACA;EACA;EACA;EACA;EACA,iBAAiB;EACjB;EACA,eAAe;EACf;EACA;EACA;;EAEA;EACA;EACA;;KAGU;KAEA;EACV,UAAU;IACR;IACA;IACA;IACA,QAAQ;;EAEV,cAAc;IACZ;IACA;IACA;IACA,QAAQ;;;KAIA;EACV,cAAc;EACd,WAAW;EACX,OAAO;EACP,SAAS;EACT,eAAe;EACf,UAAU;EACV,QAAQ;;KAGE;EACV;EACA;EACA;EACA;EACA;EACA;EACA;;KAGU;EACV;EACA;EACA;EACA;EACA;;KAGU;EACV;EACA;;KAGU;EACV;EACA;EACA;;KAGU;EACV;EACA;EACA;EACA;EACA;EACA;EACA;;KAGU;EAAiC;EAAY;;KAEpD;EACH;EACA;EACA;EACA;;KAGU,6BAA6B;EACvC;;KAGU,gCAAgC;EAC1C;;KAGU,qCAAqC;EAC/C,SAAS;EACT;;KAGU,oCAAoC;EAC9C,SAAS;EACT;;KAGU,yBACR,gCACA,6BACA,qCACA;KAEQ,kCACV,cAAc,0BACZ,cAAc,0CAEd,cAAc;KAIN,6BACV,cAAc,yBAAyB,0BACrC,cAAc;EACZ,SAAS;EAAa,OAAO,kCAAkC;;KAGzD;EACV;IAEM;IACA;IACA;;EAGN,cAAc;EACd;EACA,QAAQ;EACR;EACA;EACA;EACA;;KAGU;KAeA;KAeA;KAOA;cAMC,4BAA4B;WAC9B,aAAa;WACb,MAAM;WACN,WAAW;WACX;WACA;WACA;WACA,YAAY;WACZ;EAEG,cACV,aACA,MACA,SACA,WACA,YACA,qBACA,YACA;IAEA,cAAc;IACd,MAAM;IACN;IACA,WAAW;IACX;IACA;IACA,aAAa;IACb;;;KAeQ;EACV;EACA;EACA;EACA;EACA;EACA;EACA,iBAAiB;EACjB;EACA,eAAe;EACf;EACA;EACA;;KAGU;EACV;EACA;EACA;EACA;;KAGU;EACV;EACA;EACA;EACA;EACA;EACA;EACA;;KAGU,2BAA2B;EACrC,iBAAiB;EACjB;EACA;EACA,SAAS;EACT,eAAe;EACf,WAAW;;KAGD,8BAA8B;EACxC;EACA;EACA,gBAAgB;EAChB,oBAAoB;EACpB,eAAe;;KAGL;EACV;EACA;EACA;EACA;;KAGU;KAMA;EACV;EACA;EACA,gBAAgB;EAChB;EACA;EACA;EACA;EACA;;KAGU,+BAA+B;EACzC;EACA,oBAAoB;;KAYV;EACV;IACE;IACA;IACA;IACA;IACA;IACA;;EAEF;;KAGU;EACV;EACA;EACA,qBAAqB;EACrB;EACA;EACA;EACA,WAAW;EACX;EACA,WAAW;;KAGD;EACN;EAAmB;;EACnB;EAAmB;;EACnB;;KAEM;EACN;EAAqB;;EACrB;EAAqB;;EACrB;;KAEM,mCACV;EACE,WAAW;;KAGH;EACV,WAAW;;KAGD,iCAAiC;EAC3C,SAAS;;EAGH,OAAO;EACP;;EAGA;EACA,WAAW;;KAIP,8BAA8B,SACxC;EACE,gBAAgB;EAChB,SAAS,SAAS;;KAIV,4BAA4B;EACtC,SAAS;EACT,UAAU;;KAGA;EACV,UAAU;EACV,YAAY;;KAGT;EACH;EACA,eAAe,WAAW;EAC1B,WAAW,OAAO;EAClB;EACA;EACA;;KAGU;EAEN;EACA,aAAa;;EAGb;EACA;;KAGM,iCACV,qCAAqC;KAE3B;EACV,iBACE,OAAO,mCACJ,QAAQ;EACb,mBACE,6BACG,QAAQ;EACb;QACM,QAAQ;KACX,OAAO,+BAA+B,QAAQ;;EAEjD,gBACE,OAAO,kCACJ,QAAQ"}
|
package/dist/types.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=`0.2.
|
|
1
|
+
const e=`0.2.189`;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
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":["packageMetadata.version"],"sources":["../package.json","../src/types.ts"],"sourcesContent":["","import packageMetadata from \"../package.json\" with { type: \"json\" };\nimport type { GeneratedPaymentResult } from \"./generated/public-contract-types.ts\";\n\nexport type LockerversePaymentOption =\n | \"one-time\"\n | \"monthly\"\n | \"annually\"\n | \"every-six-months\";\nexport type LockerverseEnvironment = \"development\" | \"production\";\nexport type LockerverseFulfillmentType = \"none\" | \"event_admission\";\n\nexport const LOCKERVERSE_SDK_VERSION = packageMetadata.version;\n\nexport type LockerverseProduct = {\n id: string;\n listingId: string;\n slug: string;\n name: string;\n description: string | null;\n fulfillmentType: LockerverseFulfillmentType;\n pricingMode: \"fixed\" | \"custom\";\n paymentOption: LockerversePaymentOption;\n amountCents: number | null;\n minimumAmountCents: number | null;\n minimumQuantity: number | null;\n /** Per-order limit for this widget listing. Null means no per-order limit. */\n maximumQuantity: number | null;\n inventoryQuantity: number | null;\n acceptsDiscounts: boolean;\n};\n\nexport type LockerverseAvailabilityStatus = \"available\" | \"sold_out\";\n\nexport type LockerverseCatalogAvailability = {\n listings: Array<{\n listingId: string;\n maxPurchasableQuantity: number | null;\n remainingQuantity: number | null;\n status: LockerverseAvailabilityStatus;\n }>;\n sharedLimits: Array<{\n id: string;\n listingIds: string[];\n remainingQuantity: number;\n status: LockerverseAvailabilityStatus;\n }>;\n};\n\nexport type LockerverseCatalog = {\n availability: LockerverseCatalogAvailability;\n community: LockerverseCommunityBranding | null;\n event: LockerverseEvent | null;\n payment: LockerversePaymentConfiguration;\n pricingPolicy: LockerverseCheckoutPricingPolicy;\n products: LockerverseProduct[];\n widget: LockerverseWidgetConfiguration;\n};\n\nexport type LockerverseEvent = {\n description: string | null;\n endAt: string;\n id: string;\n location: string | null;\n name: string;\n startAt: string;\n status: \"draft\" | \"active\" | \"finished\" | \"cancelled\";\n};\n\nexport type LockerverseCommunityBranding = {\n widgetAchEnabled?: boolean | undefined;\n accentColor: string;\n imageUrl: string | null;\n memberIdLabel?: string | null | undefined;\n name: string;\n};\n\nexport type LockerverseCheckoutPricingPolicy = {\n currency: \"usd\";\n serviceFeeRateBasisPoints: number;\n};\n\nexport type LockerversePaymentConfiguration = {\n connectedAccountId: string | null;\n currency: \"usd\";\n publishableKey: string;\n};\n\nexport type LockerverseWidgetFields = {\n memberId: boolean;\n merchSize: boolean;\n phone: boolean;\n promoCode: boolean;\n serviceFee: boolean;\n shipping: boolean;\n tipping: boolean;\n};\n\nexport type LockerverseCustomFieldOption = { id: string; label: string };\n\ntype LockerverseCustomFieldBase = {\n id: string;\n label: string;\n paymentOptionIds?: string[] | undefined;\n required: boolean;\n};\n\nexport type LockerverseTextCustomField = LockerverseCustomFieldBase & {\n type: \"text\" | \"textarea\";\n};\n\nexport type LockerverseBooleanCustomField = LockerverseCustomFieldBase & {\n type: \"checkbox\";\n};\n\nexport type LockerverseSingleOptionCustomField = LockerverseCustomFieldBase & {\n options: LockerverseCustomFieldOption[];\n type: \"radio\" | \"select\";\n};\n\nexport type LockerverseMultiOptionCustomField = LockerverseCustomFieldBase & {\n options: LockerverseCustomFieldOption[];\n type: \"checkboxes\" | \"multi_select\";\n};\n\nexport type LockerverseCustomField =\n | LockerverseBooleanCustomField\n | LockerverseTextCustomField\n | LockerverseSingleOptionCustomField\n | LockerverseMultiOptionCustomField;\n\nexport type LockerverseCustomFieldAnswerValue<\n Field extends LockerverseCustomField,\n> = Field extends LockerverseBooleanCustomField\n ? boolean\n : Field extends LockerverseMultiOptionCustomField\n ? string[]\n : string;\n\nexport type LockerverseCustomFieldAnswer<\n Field extends LockerverseCustomField = LockerverseCustomField,\n> = Field extends LockerverseCustomField\n ? { fieldId: Field[\"id\"]; value: LockerverseCustomFieldAnswerValue<Field> }\n : never;\n\nexport type LockerverseWidgetConfiguration = {\n requiredShipping?:\n | {\n additionalUnitAmountCents?: number | undefined;\n productId: string;\n triggerProductIds: string[];\n }\n | undefined;\n customFields: LockerverseCustomField[];\n description: string | null;\n fields: LockerverseWidgetFields;\n id: string;\n name: string;\n showCommunityBranding: boolean;\n title: string | null;\n};\n\nexport type LockerverseSdkErrorCode =\n | \"public_events_load_failed\"\n | \"auction_load_failed\"\n | \"auction_bid_failed\"\n | \"auction_purchase_failed\"\n | \"auction_purchase_status_failed\"\n | \"auction_receipt_failed\"\n | \"widget_load_failed\"\n | \"signup_load_failed\"\n | \"signup_submit_failed\"\n | \"total_calculation_failed\"\n | \"payment_submit_failed\"\n | \"payment_status_failed\"\n | \"invalid_selection\";\n\nexport type LockerverseSdkOperation =\n | \"list_public_events\"\n | \"list_auctions\"\n | \"load_auction\"\n | \"create_auction_bid\"\n | \"create_auction_purchase\"\n | \"get_auction_purchase_receipt\"\n | \"get_auction_purchase_status\"\n | \"load_widget\"\n | \"load_signup\"\n | \"submit_signup\"\n | \"calculate_total\"\n | \"submit_payment\"\n | \"get_payment_status\";\n\nexport type LockerverseSdkServerCode =\n | \"PAYMENT_WIDGET_SALES_LIMIT_REACHED\"\n | \"PAYMENT_WIDGET_PHONE_INVALID\"\n | \"PAYMENT_WIDGET_PHONE_REQUIRED\"\n | \"SIGN_UP_WIDGET_PHONE_INVALID\"\n | \"SIGN_UP_WIDGET_PHONE_REQUIRED\";\n\nexport class LockerverseSdkError extends Error {\n readonly code: LockerverseSdkErrorCode;\n readonly operation: LockerverseSdkOperation;\n readonly reportable: boolean;\n readonly recoveryRecommended: boolean;\n readonly sdkVersion: string;\n readonly serverCode: LockerverseSdkServerCode | undefined;\n readonly status: number | undefined;\n\n constructor({\n code,\n message,\n operation,\n reportable,\n recoveryRecommended = false,\n serverCode,\n status,\n }: {\n code: LockerverseSdkErrorCode;\n message: string;\n operation: LockerverseSdkOperation;\n reportable: boolean;\n recoveryRecommended?: boolean;\n serverCode?: LockerverseSdkServerCode;\n status?: number;\n }) {\n super(message);\n this.name = \"LockerverseSdkError\";\n this.code = code;\n this.operation = operation;\n this.reportable = reportable;\n this.recoveryRecommended = recoveryRecommended;\n this.sdkVersion = LOCKERVERSE_SDK_VERSION;\n this.serverCode = serverCode;\n this.status = status;\n }\n}\n\nexport type LockerverseCheckoutLineItem = {\n productId: string;\n productName: string;\n listingId: string;\n listingSlug: string;\n acceptsDiscounts: boolean;\n eventId: string | null;\n fulfillmentType: LockerverseFulfillmentType;\n pricingMode: \"fixed\" | \"custom\";\n paymentOption: LockerversePaymentOption;\n quantity: number;\n unitAmountCents: number;\n subtotalCents: number;\n};\n\nexport type LockerverseAppliedDiscount = {\n percentageOff?: number | undefined;\n amountOffCents?: number | undefined;\n message?: string | undefined;\n source: \"email_list\" | \"promo_code\";\n};\n\nexport type LockerverseCheckoutAmounts = {\n amountCents: number;\n discountableSubtotalCents: number;\n discountCents: number;\n serviceFeeCents: number;\n subtotalCents: number;\n tipCents: number;\n totalCents: number;\n};\n\nexport type LockerverseCheckoutQuote = LockerverseCheckoutAmounts & {\n appliedDiscount: LockerverseAppliedDiscount | null;\n authoritative: true;\n paymentReference: string;\n payment: LockerversePaymentConfiguration;\n paymentOption: LockerversePaymentOption;\n lineItems: LockerverseCheckoutLineItem[];\n};\n\nexport type LockerverseCheckoutEstimate = LockerverseCheckoutAmounts & {\n appliedDiscount: null;\n authoritative: false;\n items: readonly LockerverseCheckoutItem[];\n lineItems: readonly LockerverseCheckoutLineItem[];\n paymentOption: LockerversePaymentOption;\n};\n\nexport type LockerverseCheckoutPricingInput = {\n email?: string;\n includeServiceFee?: boolean;\n promoCode?: string;\n tipCents?: number;\n};\n\nexport type LockerversePaymentStatus =\n | \"action_required\"\n | \"failed\"\n | \"pending\"\n | \"success\";\n\nexport type LockerversePaymentResult = {\n checkoutId: string;\n paymentReference: string;\n checkoutStatus: LockerversePaymentStatus;\n retryUrl?: string | undefined;\n clientSecret: string | null;\n paymentRequired: boolean;\n requiresAction: boolean;\n status: string | null;\n};\n\nexport type LockerversePaymentCompletion = LockerversePaymentResult & {\n email: string | null;\n lineItems: readonly LockerverseCheckoutLineItem[] | null;\n};\n\ntype AssertPaymentContract<T extends true> = T;\ntype _PaymentResultMatchesGenerated = AssertPaymentContract<\n LockerversePaymentResult extends GeneratedPaymentResult\n ? GeneratedPaymentResult extends LockerversePaymentResult\n ? true\n : false\n : false\n>;\n\nexport type LockerverseShipping = {\n address: {\n city: string;\n country: string;\n line1: string;\n line2?: string;\n postal_code: string;\n state: string;\n };\n name: string;\n};\n\nexport type LockerversePaymentSubmission = {\n confirmationToken?: string;\n paymentMethodConfiguration?: \"explicit\";\n customFieldAnswers?: LockerverseCustomFieldAnswer[];\n email: string;\n memberId?: string;\n merchSize?: \"XS\" | \"S\" | \"M\" | \"L\" | \"XL\" | \"XXL\" | \"XXXL\";\n metadata?: Record<string, string>;\n phone?: string;\n shipping?: LockerverseShipping;\n};\n\nexport type LockerverseCheckoutItem =\n | { productId: string; quantity: number }\n | { productId: string; amountCents: number }\n | { productId: string };\n\nexport type LockerverseCheckoutSelectionItem =\n | { productSlug: string; quantity: number }\n | { productSlug: string; amountCents: number }\n | { productSlug: string };\n\nexport type LockerverseEstimateCheckoutInput =\n LockerverseCheckoutPricingInput & {\n selection: LockerverseCheckoutSelectionItem[];\n };\n\nexport type LockerverseLoadCheckoutInput = {\n selection: LockerverseCheckoutSelectionItem[];\n};\n\nexport type LockerverseCalculateTotalInput = LockerverseCheckoutPricingInput & {\n catalog: LockerverseCatalog;\n} & (\n | {\n items: LockerverseCheckoutItem[];\n selection?: never;\n }\n | {\n items?: never;\n selection: LockerverseCheckoutSelectionItem[];\n }\n );\n\nexport type LockerversePreparedCheckout = Readonly<\n LockerverseCheckoutQuote & {\n items: readonly LockerverseCheckoutItem[];\n pricing: Readonly<LockerverseCheckoutPricingInput>;\n }\n>;\n\nexport type LockerverseLoadedCheckout = Readonly<{\n catalog: LockerverseCatalog;\n checkout: LockerversePreparedCheckout;\n}>;\n\nexport type LockerverseSubmitPaymentInput = {\n checkout: LockerversePreparedCheckout;\n submission: LockerversePaymentSubmission;\n};\n\ntype CreateLockerverseWidgetBaseOptions = {\n communitySlug: string;\n fetch?: typeof globalThis.fetch;\n onError?: (error: LockerverseSdkError) => void;\n requestTimeoutMs?: number;\n sentryDsn?: string | null;\n widgetSlug: string;\n};\n\nexport type LockerverseResourceEnvironmentOptions =\n | {\n apiBaseUrl: string;\n environment: LockerverseEnvironment;\n }\n | {\n apiBaseUrl?: undefined;\n environment?: \"production\";\n };\n\nexport type CreateLockerverseWidgetOptions =\n CreateLockerverseWidgetBaseOptions & LockerverseResourceEnvironmentOptions;\n\nexport type LockerverseCheckoutClient = {\n calculateTotal: (\n input: LockerverseCalculateTotalInput\n ) => Promise<LockerversePreparedCheckout>;\n getPaymentStatus: (\n paymentReference: string\n ) => Promise<LockerversePaymentResult>;\n load: {\n (): Promise<LockerverseCatalog>;\n (input: LockerverseLoadCheckoutInput): Promise<LockerverseLoadedCheckout>;\n };\n submitPayment: (\n input: LockerverseSubmitPaymentInput\n ) => Promise<LockerversePaymentResult>;\n};\n"],"mappings":"ACWA,MAAa,EAA0BA,UA2LvC,IAAa,EAAb,cAAyC,KAAM,CAC7C,KACA,UACA,WACA,oBACA,WACA,WACA,OAEA,YAAY,CACV,OACA,UACA,YACA,aACA,sBAAsB,GACtB,aACA,UASC,CACD,MAAM,CAAO,EACb,KAAK,KAAO,sBACZ,KAAK,KAAO,EACZ,KAAK,UAAY,EACjB,KAAK,WAAa,EAClB,KAAK,oBAAsB,EAC3B,KAAK,WAAa,EAClB,KAAK,WAAa,EAClB,KAAK,OAAS,CAChB,CACF"}
|
|
1
|
+
{"version":3,"file":"types.js","names":["packageMetadata.version"],"sources":["../package.json","../src/types.ts"],"sourcesContent":["","import packageMetadata from \"../package.json\" with { type: \"json\" };\nimport type { GeneratedPaymentResult } from \"./generated/public-contract-types.ts\";\n\nexport type LockerversePaymentOption =\n | \"one-time\"\n | \"monthly\"\n | \"annually\"\n | \"every-six-months\";\nexport type LockerverseEnvironment = \"development\" | \"production\";\nexport type LockerverseFulfillmentType = \"none\" | \"event_admission\";\n\nexport const LOCKERVERSE_SDK_VERSION = packageMetadata.version;\n\nexport type LockerverseProduct = {\n id: string;\n listingId: string;\n slug: string;\n name: string;\n description: string | null;\n fulfillmentType: LockerverseFulfillmentType;\n pricingMode: \"fixed\" | \"custom\";\n paymentOption: LockerversePaymentOption;\n amountCents: number | null;\n minimumAmountCents: number | null;\n minimumQuantity: number | null;\n /** Per-order limit for this widget listing. Null means no per-order limit. */\n maximumQuantity: number | null;\n inventoryQuantity: number | null;\n acceptsDiscounts: boolean;\n};\n\nexport type LockerverseAvailabilityStatus = \"available\" | \"sold_out\";\n\nexport type LockerverseCatalogAvailability = {\n listings: Array<{\n listingId: string;\n maxPurchasableQuantity: number | null;\n remainingQuantity: number | null;\n status: LockerverseAvailabilityStatus;\n }>;\n sharedLimits: Array<{\n id: string;\n listingIds: string[];\n remainingQuantity: number;\n status: LockerverseAvailabilityStatus;\n }>;\n};\n\nexport type LockerverseCatalog = {\n availability: LockerverseCatalogAvailability;\n community: LockerverseCommunityBranding | null;\n event: LockerverseEvent | null;\n payment: LockerversePaymentConfiguration;\n pricingPolicy: LockerverseCheckoutPricingPolicy;\n products: LockerverseProduct[];\n widget: LockerverseWidgetConfiguration;\n};\n\nexport type LockerverseEvent = {\n description: string | null;\n endAt: string;\n id: string;\n location: string | null;\n name: string;\n startAt: string;\n status: \"draft\" | \"active\" | \"finished\" | \"cancelled\";\n};\n\nexport type LockerverseCommunityBranding = {\n widgetAchEnabled?: boolean | undefined;\n accentColor: string;\n imageUrl: string | null;\n memberIdLabel?: string | null | undefined;\n name: string;\n};\n\nexport type LockerverseCheckoutPricingPolicy = {\n currency: \"usd\";\n serviceFeeRateBasisPoints: number;\n};\n\nexport type LockerversePaymentConfiguration = {\n connectedAccountId: string | null;\n currency: \"usd\";\n publishableKey: string;\n};\n\nexport type LockerverseWidgetFields = {\n memberId: boolean;\n merchSize: boolean;\n phone: boolean;\n promoCode: boolean;\n serviceFee: boolean;\n shipping: boolean;\n tipping: boolean;\n};\n\nexport type LockerverseCustomFieldOption = { id: string; label: string };\n\ntype LockerverseCustomFieldBase = {\n id: string;\n label: string;\n paymentOptionIds?: string[] | undefined;\n required: boolean;\n};\n\nexport type LockerverseTextCustomField = LockerverseCustomFieldBase & {\n type: \"text\" | \"textarea\";\n};\n\nexport type LockerverseBooleanCustomField = LockerverseCustomFieldBase & {\n type: \"checkbox\";\n};\n\nexport type LockerverseSingleOptionCustomField = LockerverseCustomFieldBase & {\n options: LockerverseCustomFieldOption[];\n type: \"radio\" | \"select\";\n};\n\nexport type LockerverseMultiOptionCustomField = LockerverseCustomFieldBase & {\n options: LockerverseCustomFieldOption[];\n type: \"checkboxes\" | \"multi_select\";\n};\n\nexport type LockerverseCustomField =\n | LockerverseBooleanCustomField\n | LockerverseTextCustomField\n | LockerverseSingleOptionCustomField\n | LockerverseMultiOptionCustomField;\n\nexport type LockerverseCustomFieldAnswerValue<\n Field extends LockerverseCustomField,\n> = Field extends LockerverseBooleanCustomField\n ? boolean\n : Field extends LockerverseMultiOptionCustomField\n ? string[]\n : string;\n\nexport type LockerverseCustomFieldAnswer<\n Field extends LockerverseCustomField = LockerverseCustomField,\n> = Field extends LockerverseCustomField\n ? { fieldId: Field[\"id\"]; value: LockerverseCustomFieldAnswerValue<Field> }\n : never;\n\nexport type LockerverseWidgetConfiguration = {\n requiredShipping?:\n | {\n additionalUnitAmountCents?: number | undefined;\n productId: string;\n triggerProductIds: string[];\n }\n | undefined;\n customFields: LockerverseCustomField[];\n description: string | null;\n fields: LockerverseWidgetFields;\n id: string;\n name: string;\n showCommunityBranding: boolean;\n title: string | null;\n};\n\nexport type LockerverseSdkErrorCode =\n | \"public_events_load_failed\"\n | \"auction_load_failed\"\n | \"auction_bid_failed\"\n | \"auction_purchase_failed\"\n | \"auction_purchase_status_failed\"\n | \"auction_receipt_failed\"\n | \"widget_load_failed\"\n | \"signup_load_failed\"\n | \"signup_submit_failed\"\n | \"total_calculation_failed\"\n | \"payment_submit_failed\"\n | \"payment_status_failed\"\n | \"invalid_selection\";\n\nexport type LockerverseSdkOperation =\n | \"list_public_events\"\n | \"list_auctions\"\n | \"load_auction\"\n | \"create_auction_bid\"\n | \"create_auction_purchase\"\n | \"get_auction_purchase_receipt\"\n | \"get_auction_purchase_status\"\n | \"load_widget\"\n | \"load_signup\"\n | \"submit_signup\"\n | \"calculate_total\"\n | \"submit_payment\"\n | \"get_payment_status\";\n\nexport type LockerverseSdkServerCode =\n | \"PAYMENT_WIDGET_SALES_LIMIT_REACHED\"\n | \"PAYMENT_WIDGET_PHONE_INVALID\"\n | \"PAYMENT_WIDGET_PHONE_REQUIRED\"\n | \"SIGN_UP_WIDGET_PHONE_INVALID\"\n | \"SIGN_UP_WIDGET_PHONE_REQUIRED\";\n\nexport type LockerverseSdkFailureKind =\n | \"network\"\n | \"timeout\"\n | \"aborted\"\n | \"invalid_response\";\n\nexport class LockerverseSdkError extends Error {\n readonly failureKind: LockerverseSdkFailureKind | undefined;\n readonly code: LockerverseSdkErrorCode;\n readonly operation: LockerverseSdkOperation;\n readonly reportable: boolean;\n readonly recoveryRecommended: boolean;\n readonly sdkVersion: string;\n readonly serverCode: LockerverseSdkServerCode | undefined;\n readonly status: number | undefined;\n\n constructor({\n failureKind,\n code,\n message,\n operation,\n reportable,\n recoveryRecommended = false,\n serverCode,\n status,\n }: {\n failureKind?: LockerverseSdkFailureKind | undefined;\n code: LockerverseSdkErrorCode;\n message: string;\n operation: LockerverseSdkOperation;\n reportable: boolean;\n recoveryRecommended?: boolean;\n serverCode?: LockerverseSdkServerCode;\n status?: number | undefined;\n }) {\n super(message);\n this.name = \"LockerverseSdkError\";\n this.failureKind = failureKind;\n this.code = code;\n this.operation = operation;\n this.reportable = reportable;\n this.recoveryRecommended = recoveryRecommended;\n this.sdkVersion = LOCKERVERSE_SDK_VERSION;\n this.serverCode = serverCode;\n this.status = status;\n }\n}\n\nexport type LockerverseCheckoutLineItem = {\n productId: string;\n productName: string;\n listingId: string;\n listingSlug: string;\n acceptsDiscounts: boolean;\n eventId: string | null;\n fulfillmentType: LockerverseFulfillmentType;\n pricingMode: \"fixed\" | \"custom\";\n paymentOption: LockerversePaymentOption;\n quantity: number;\n unitAmountCents: number;\n subtotalCents: number;\n};\n\nexport type LockerverseAppliedDiscount = {\n percentageOff?: number | undefined;\n amountOffCents?: number | undefined;\n message?: string | undefined;\n source: \"email_list\" | \"promo_code\";\n};\n\nexport type LockerverseCheckoutAmounts = {\n amountCents: number;\n discountableSubtotalCents: number;\n discountCents: number;\n serviceFeeCents: number;\n subtotalCents: number;\n tipCents: number;\n totalCents: number;\n};\n\nexport type LockerverseCheckoutQuote = LockerverseCheckoutAmounts & {\n appliedDiscount: LockerverseAppliedDiscount | null;\n authoritative: true;\n paymentReference: string;\n payment: LockerversePaymentConfiguration;\n paymentOption: LockerversePaymentOption;\n lineItems: LockerverseCheckoutLineItem[];\n};\n\nexport type LockerverseCheckoutEstimate = LockerverseCheckoutAmounts & {\n appliedDiscount: null;\n authoritative: false;\n items: readonly LockerverseCheckoutItem[];\n lineItems: readonly LockerverseCheckoutLineItem[];\n paymentOption: LockerversePaymentOption;\n};\n\nexport type LockerverseCheckoutPricingInput = {\n email?: string;\n includeServiceFee?: boolean;\n promoCode?: string;\n tipCents?: number;\n};\n\nexport type LockerversePaymentStatus =\n | \"action_required\"\n | \"failed\"\n | \"pending\"\n | \"success\";\n\nexport type LockerversePaymentResult = {\n checkoutId: string;\n paymentReference: string;\n checkoutStatus: LockerversePaymentStatus;\n retryUrl?: string | undefined;\n clientSecret: string | null;\n paymentRequired: boolean;\n requiresAction: boolean;\n status: string | null;\n};\n\nexport type LockerversePaymentCompletion = LockerversePaymentResult & {\n email: string | null;\n lineItems: readonly LockerverseCheckoutLineItem[] | null;\n};\n\ntype AssertPaymentContract<T extends true> = T;\ntype _PaymentResultMatchesGenerated = AssertPaymentContract<\n LockerversePaymentResult extends GeneratedPaymentResult\n ? GeneratedPaymentResult extends LockerversePaymentResult\n ? true\n : false\n : false\n>;\n\nexport type LockerverseShipping = {\n address: {\n city: string;\n country: string;\n line1: string;\n line2?: string;\n postal_code: string;\n state: string;\n };\n name: string;\n};\n\nexport type LockerversePaymentSubmission = {\n confirmationToken?: string;\n paymentMethodConfiguration?: \"explicit\";\n customFieldAnswers?: LockerverseCustomFieldAnswer[];\n email: string;\n memberId?: string;\n merchSize?: \"XS\" | \"S\" | \"M\" | \"L\" | \"XL\" | \"XXL\" | \"XXXL\";\n metadata?: Record<string, string>;\n phone?: string;\n shipping?: LockerverseShipping;\n};\n\nexport type LockerverseCheckoutItem =\n | { productId: string; quantity: number }\n | { productId: string; amountCents: number }\n | { productId: string };\n\nexport type LockerverseCheckoutSelectionItem =\n | { productSlug: string; quantity: number }\n | { productSlug: string; amountCents: number }\n | { productSlug: string };\n\nexport type LockerverseEstimateCheckoutInput =\n LockerverseCheckoutPricingInput & {\n selection: LockerverseCheckoutSelectionItem[];\n };\n\nexport type LockerverseLoadCheckoutInput = {\n selection: LockerverseCheckoutSelectionItem[];\n};\n\nexport type LockerverseCalculateTotalInput = LockerverseCheckoutPricingInput & {\n catalog: LockerverseCatalog;\n} & (\n | {\n items: LockerverseCheckoutItem[];\n selection?: never;\n }\n | {\n items?: never;\n selection: LockerverseCheckoutSelectionItem[];\n }\n );\n\nexport type LockerversePreparedCheckout = Readonly<\n LockerverseCheckoutQuote & {\n items: readonly LockerverseCheckoutItem[];\n pricing: Readonly<LockerverseCheckoutPricingInput>;\n }\n>;\n\nexport type LockerverseLoadedCheckout = Readonly<{\n catalog: LockerverseCatalog;\n checkout: LockerversePreparedCheckout;\n}>;\n\nexport type LockerverseSubmitPaymentInput = {\n checkout: LockerversePreparedCheckout;\n submission: LockerversePaymentSubmission;\n};\n\ntype CreateLockerverseWidgetBaseOptions = {\n communitySlug: string;\n fetch?: typeof globalThis.fetch;\n onError?: (error: LockerverseSdkError) => void;\n requestTimeoutMs?: number;\n sentryDsn?: string | null;\n widgetSlug: string;\n};\n\nexport type LockerverseResourceEnvironmentOptions =\n | {\n apiBaseUrl: string;\n environment: LockerverseEnvironment;\n }\n | {\n apiBaseUrl?: undefined;\n environment?: \"production\";\n };\n\nexport type CreateLockerverseWidgetOptions =\n CreateLockerverseWidgetBaseOptions & LockerverseResourceEnvironmentOptions;\n\nexport type LockerverseCheckoutClient = {\n calculateTotal: (\n input: LockerverseCalculateTotalInput\n ) => Promise<LockerversePreparedCheckout>;\n getPaymentStatus: (\n paymentReference: string\n ) => Promise<LockerversePaymentResult>;\n load: {\n (): Promise<LockerverseCatalog>;\n (input: LockerverseLoadCheckoutInput): Promise<LockerverseLoadedCheckout>;\n };\n submitPayment: (\n input: LockerverseSubmitPaymentInput\n ) => Promise<LockerversePaymentResult>;\n};\n"],"mappings":"ACWA,MAAa,EAA0BA,UAiMvC,IAAa,EAAb,cAAyC,KAAM,CAC7C,YACA,KACA,UACA,WACA,oBACA,WACA,WACA,OAEA,YAAY,CACV,cACA,OACA,UACA,YACA,aACA,sBAAsB,GACtB,aACA,UAUC,CACD,MAAM,CAAO,EACb,KAAK,KAAO,sBACZ,KAAK,YAAc,EACnB,KAAK,KAAO,EACZ,KAAK,UAAY,EACjB,KAAK,WAAa,EAClB,KAAK,oBAAsB,EAC3B,KAAK,WAAa,EAClB,KAAK,WAAa,EAClB,KAAK,OAAS,CAChB,CACF"}
|