@lockerverse/sdk 0.2.56 → 0.2.57
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/README.md +8 -7
- package/dist/signup.d.ts +2 -25
- package/dist/signup.d.ts.map +1 -1
- package/dist/signup.js +1 -1
- package/dist/signup.js.map +1 -1
- package/dist/types.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -97,26 +97,27 @@ positive `requestTimeoutMs` value.
|
|
|
97
97
|
## Signup
|
|
98
98
|
|
|
99
99
|
```ts
|
|
100
|
-
import {
|
|
100
|
+
import { createLockerverseSignupClient } from "@lockerverse/sdk/signup";
|
|
101
101
|
|
|
102
|
-
const signup =
|
|
102
|
+
const signup = createLockerverseSignupClient({
|
|
103
103
|
communitySlug: "auburn",
|
|
104
104
|
signupSlug: "tailgate-guests",
|
|
105
105
|
});
|
|
106
106
|
|
|
107
107
|
const definition = await signup.load();
|
|
108
|
+
const submissionReference = crypto.randomUUID();
|
|
108
109
|
const submission = await signup.submit({
|
|
109
110
|
answers: [{ fieldId: "guest-type", value: "student" }],
|
|
110
111
|
email: "customer@example.com",
|
|
111
112
|
name: "Ada Lovelace",
|
|
112
113
|
participantCount: 2,
|
|
113
|
-
});
|
|
114
|
+
}, { submissionReference });
|
|
114
115
|
```
|
|
115
116
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
117
|
+
The signup client is stateless. Calls to `load` and `submit` are independent.
|
|
118
|
+
Create a submission reference before a request. If an error has
|
|
119
|
+
`recoveryRecommended: true`, reuse that reference with the same values so
|
|
120
|
+
Lockerverse can return the original submission.
|
|
120
121
|
|
|
121
122
|
## Security and observability
|
|
122
123
|
|
package/dist/signup.d.ts
CHANGED
|
@@ -61,36 +61,13 @@ type CreateLockerverseSignupOptions = CreateLockerverseSignupBaseOptions & ({
|
|
|
61
61
|
apiBaseUrl?: undefined;
|
|
62
62
|
environment?: "production";
|
|
63
63
|
});
|
|
64
|
-
type LockerverseSignupState = {
|
|
65
|
-
phase: "idle";
|
|
66
|
-
} | {
|
|
67
|
-
phase: "loading";
|
|
68
|
-
} | {
|
|
69
|
-
phase: "ready";
|
|
70
|
-
signup: LockerverseSignup;
|
|
71
|
-
} | {
|
|
72
|
-
phase: "submitting";
|
|
73
|
-
signup: LockerverseSignup;
|
|
74
|
-
submissionReference: string;
|
|
75
|
-
} | {
|
|
76
|
-
phase: "submitted";
|
|
77
|
-
signup: LockerverseSignup;
|
|
78
|
-
submission: LockerverseSignupSubmissionResult;
|
|
79
|
-
} | {
|
|
80
|
-
phase: "error";
|
|
81
|
-
error: LockerverseSdkError;
|
|
82
|
-
recoverableSubmissionReference: string | null;
|
|
83
|
-
signup: LockerverseSignup | null;
|
|
84
|
-
};
|
|
85
64
|
type LockerverseSignupClient = {
|
|
86
|
-
getState: () => LockerverseSignupState;
|
|
87
65
|
load: () => Promise<LockerverseSignup>;
|
|
88
66
|
submit: (submission: LockerverseSignupSubmission, options?: LockerverseSignupSubmitOptions) => Promise<LockerverseSignupSubmissionResult>;
|
|
89
|
-
subscribe: (listener: (state: LockerverseSignupState) => void) => () => void;
|
|
90
67
|
};
|
|
91
68
|
//#endregion
|
|
92
69
|
//#region src/signup.d.ts
|
|
93
|
-
declare function
|
|
70
|
+
declare function createLockerverseSignupClient(options: CreateLockerverseSignupOptions): LockerverseSignupClient;
|
|
94
71
|
//#endregion
|
|
95
|
-
export { type CreateLockerverseSignupOptions, type LockerverseCustomField, type LockerverseCustomFieldAnswer, type LockerverseCustomFieldAnswerValue, type LockerverseCustomFieldOption, type LockerverseEnvironment, type LockerverseSignup, type LockerverseSignupAddress, type LockerverseSignupClient, type LockerverseSignupField, type LockerverseSignupFields, type
|
|
72
|
+
export { type CreateLockerverseSignupOptions, type LockerverseCustomField, type LockerverseCustomFieldAnswer, type LockerverseCustomFieldAnswerValue, type LockerverseCustomFieldOption, type LockerverseEnvironment, type LockerverseSdkError, type LockerverseSignup, type LockerverseSignupAddress, type LockerverseSignupClient, type LockerverseSignupField, type LockerverseSignupFields, type LockerverseSignupSubmission, type LockerverseSignupSubmissionResult, type LockerverseSignupSubmitOptions, createLockerverseSignupClient };
|
|
96
73
|
//# sourceMappingURL=signup.d.ts.map
|
package/dist/signup.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signup.d.ts","names":[],"sources":["../src/signup-types.ts","../src/signup.ts"],"mappings":";;KAQY;EACV;EACA;;KAGU;EACV,SAAS;EACT,OAAO;EACP,MAAM;EACN,kBAAkB;EAClB,OAAO;;KAGG;EACV;EACA,cAAc;EACd;EACA,QAAQ;EACR;EACA;EACA;EACA;EACA;;KAGU;EACV;EACA;EACA;EACA;EACA;EACA;;KAGU;EACV,UAAU;EACV,UAAU;EACV;EACA;EACA;EACA;EACA;;KAGU;EACV;EACA;;KAYU;EACV;;KAGG;EACH;EACA,eAAe,WAAW;EAC1B,WAAW,OAAO;EAClB;EACA;EACA;;KAGU,iCACV;EAGQ;EACA,aAAa;;EAGb;EACA;;KAIE;
|
|
1
|
+
{"version":3,"file":"signup.d.ts","names":[],"sources":["../src/signup-types.ts","../src/signup.ts"],"mappings":";;KAQY;EACV;EACA;;KAGU;EACV,SAAS;EACT,OAAO;EACP,MAAM;EACN,kBAAkB;EAClB,OAAO;;KAGG;EACV;EACA,cAAc;EACd;EACA,QAAQ;EACR;EACA;EACA;EACA;EACA;;KAGU;EACV;EACA;EACA;EACA;EACA;EACA;;KAGU;EACV,UAAU;EACV,UAAU;EACV;EACA;EACA;EACA;EACA;;KAGU;EACV;EACA;;KAYU;EACV;;KAGG;EACH;EACA,eAAe,WAAW;EAC1B,WAAW,OAAO;EAClB;EACA;EACA;;KAGU,iCACV;EAGQ;EACA,aAAa;;EAGb;EACA;;KAIE;EACV,YAAY,QAAQ;EACpB,SACE,YAAY,6BACZ,UAAU,mCACP,QAAQ;;;;iBC9DC,8BACd,SAAS,iCACR"}
|
package/dist/signup.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{A as e,C as t,D as n,M as r,T as i,a,c as o,f as s,h as c,j as l,l as u,m as d,n as f,o as p,p as m,r as h,s as g,t as _,u as v,w as y,x as b}from"./transport.js";import{n as x}from"./types.js";const S=e({city:l(),country:l(),line1:l(),line2:y(b(l())),postalCode:l(),state:l()}),C=i(e({address:y(b(S)),answers:y(m(p)),email:y(b(l())),honeypot:y(l()),name:o,participantCount:y(b(v(0))),phone:y(b(l()))})),w=t({enabled:d(),required:d()}),T=n(t({config:t({builtInFields:t({address:w,email:w,name:w,participantCount:w,phone:w}),customFields:g}),coverImageUrl:u,description:u,id:o,isActive:d(),name:o,slug:o,title:u}),r(({config:e,...t})=>({...t,customFields:e.customFields,fields:e.builtInFields}))),E=n(a,c(({id:e})=>!!e.trim(),`Invalid signup submission ID.`)),D=i(T),O=i(E);function k(e
|
|
1
|
+
import{A as e,C as t,D as n,M as r,T as i,a,c as o,f as s,h as c,j as l,l as u,m as d,n as f,o as p,p as m,r as h,s as g,t as _,u as v,w as y,x as b}from"./transport.js";import{n as x}from"./types.js";const S=e({city:l(),country:l(),line1:l(),line2:y(b(l())),postalCode:l(),state:l()}),C=i(e({address:y(b(S)),answers:y(m(p)),email:y(b(l())),honeypot:y(l()),name:o,participantCount:y(b(v(0))),phone:y(b(l()))})),w=t({enabled:d(),required:d()}),T=n(t({config:t({builtInFields:t({address:w,email:w,name:w,participantCount:w,phone:w}),customFields:g}),coverImageUrl:u,description:u,id:o,isActive:d(),name:o,slug:o,title:u}),r(({config:e,...t})=>({...t,customFields:e.customFields,fields:e.builtInFields}))),E=n(a,c(({id:e})=>!!e.trim(),`Invalid signup submission ID.`)),D=i(T),O=i(E);function k(e,t,n){return e instanceof x?e:n(new x({code:`signup_submit_failed`,message:`Unable to submit Lockerverse signup.`,operation:`submit_signup`,recoveryRecommended:t,reportable:t}))}function A(e){let t=s(e),n=f({communitySlug:t.communitySlugValue,environment:t.environment,getContext:()=>({signupSlug:t.signupSlugValue}),onError:t.onError,resourceContextName:`lockerverse_signup`,sentryDsn:t.sentryDsn}),{requestJson:r}=_(t.fetchImplementation,e=>n(e.operation===`submit_signup`&&!e.recoveryRecommended?new x({code:e.code,message:e.message,operation:e.operation,recoveryRecommended:!0,reportable:e.reportable}):e),t.requestTimeoutMs),i=`${t.apiBaseUrl}/community/${t.communitySlug}/sign-up-widgets/${t.signupSlug}`;return{async load(){let e={code:`signup_load_failed`,message:`Unable to load Lockerverse signup.`,operation:`load_signup`},t=await r(i,void 0,D,e,e);if(!t.ok)throw n(new x({...e,reportable:t.response.status>=500,status:t.response.status}));return h(t.value)},async submit(e,t){let a=t?.submissionReference??globalThis.crypto.randomUUID(),o={code:`signup_submit_failed`,message:`Unable to submit Lockerverse signup.`,operation:`submit_signup`},s;try{s=C(e)}catch{throw n(new x({...o,message:`Lockerverse signup input is invalid.`,reportable:!1}))}let c=!1;try{let e=JSON.stringify({...s,submissionReference:a});c=!0;let t=await r(`${i}/submissions`,{body:e,headers:{"content-type":`application/json`},method:`POST`},O,o,o);if(!t.ok)throw n(new x({...o,recoveryRecommended:t.response.status>=500,reportable:t.response.status>=500,status:t.response.status}));let l=h(t.value);if(l.id!==a)throw n(new x({...o,recoveryRecommended:!0,reportable:!0}));return l}catch(e){throw k(e,c,n)}}}}export{A as createLockerverseSignupClient};
|
|
2
2
|
//# sourceMappingURL=signup.js.map
|
package/dist/signup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signup.js","names":[],"sources":["../src/signup-input-schema.ts","../src/signup-schemas.ts","../src/state.ts","../src/signup.ts"],"sourcesContent":["import {\n array,\n nullable,\n optional,\n parser,\n strictObject,\n string,\n} from \"valibot\";\n\nimport {\n customFieldAnswerSchema,\n nonEmptyStringSchema,\n safeIntegerSchema,\n} from \"./schema-helpers.ts\";\n\nconst signupAddressSchema = strictObject({\n city: string(),\n country: string(),\n line1: string(),\n line2: optional(nullable(string())),\n postalCode: string(),\n state: string(),\n});\n\nexport const parseSignupSubmission = parser(\n strictObject({\n address: optional(nullable(signupAddressSchema)),\n answers: optional(array(customFieldAnswerSchema)),\n email: optional(nullable(string())),\n honeypot: optional(string()),\n name: nonEmptyStringSchema,\n participantCount: optional(nullable(safeIntegerSchema(0))),\n phone: optional(nullable(string())),\n })\n);\n","import { boolean, check, object, parser, pipe, transform } from \"valibot\";\n\nimport { vPublicSignUpWidgetSubmissionResponseDto } from \"./generated/public-api/valibot.gen.ts\";\nimport {\n customFieldsSchema,\n nonEmptyStringSchema,\n optionalNullableStringSchema,\n} from \"./schema-helpers.ts\";\n\nconst signupFieldSchema = object({\n enabled: boolean(),\n required: boolean(),\n});\n\nexport const publicSignupSchema = pipe(\n object({\n config: object({\n builtInFields: object({\n address: signupFieldSchema,\n email: signupFieldSchema,\n name: signupFieldSchema,\n participantCount: signupFieldSchema,\n phone: signupFieldSchema,\n }),\n customFields: customFieldsSchema,\n }),\n coverImageUrl: optionalNullableStringSchema,\n description: optionalNullableStringSchema,\n id: nonEmptyStringSchema,\n isActive: boolean(),\n name: nonEmptyStringSchema,\n slug: nonEmptyStringSchema,\n title: optionalNullableStringSchema,\n }),\n transform(({ config, ...signup }) => ({\n ...signup,\n customFields: config.customFields,\n fields: config.builtInFields,\n }))\n);\n\nexport const signupSubmissionResultSchema = pipe(\n vPublicSignUpWidgetSubmissionResponseDto,\n check(({ id }) => Boolean(id.trim()), \"Invalid signup submission ID.\")\n);\n\nexport const parsePublicSignup = parser(publicSignupSchema);\nexport const parseSignupSubmissionResult = parser(signupSubmissionResultSchema);\n","import { deepFreeze } from \"./deep-freeze.ts\";\n\nexport function createStateStore<State>(initialState: State) {\n let state = deepFreeze(initialState);\n const listeners = new Set<(nextState: State) => void>();\n\n return {\n commit(nextState: State) {\n state = deepFreeze(nextState);\n for (const listener of [...listeners]) {\n try {\n listener(state);\n } catch {\n // Host listeners cannot interrupt SDK state transitions.\n }\n }\n },\n getState() {\n return state;\n },\n subscribe(listener: (nextState: State) => void) {\n listeners.add(listener);\n try {\n listener(state);\n } catch {\n // A failing initial render must not prevent subscription or checkout.\n }\n return () => {\n listeners.delete(listener);\n };\n },\n };\n}\n","import { deepFreeze } from \"./deep-freeze.ts\";\nimport { resolveSignupEnvironment } from \"./environment.ts\";\nimport { createSdkErrorReporter } from \"./error-reporting.ts\";\nimport { parseSignupSubmission } from \"./signup-input-schema.ts\";\nimport {\n parsePublicSignup,\n parseSignupSubmissionResult,\n} from \"./signup-schemas.ts\";\nimport type {\n CreateLockerverseSignupOptions,\n LockerverseSignup,\n LockerverseSignupClient,\n LockerverseSignupState,\n LockerverseSignupSubmission,\n} from \"./signup-types.ts\";\nimport { createStateStore } from \"./state.ts\";\nimport { createTransport } from \"./transport.ts\";\nimport { LockerverseSdkError } from \"./types.ts\";\n\nfunction classifySubmissionError(\n error: unknown,\n requestAttempted: boolean,\n reportError: (error: LockerverseSdkError) => LockerverseSdkError\n) {\n if (error instanceof LockerverseSdkError) {\n return error;\n }\n return reportError(\n new LockerverseSdkError({\n code: \"signup_submit_failed\",\n message: \"Unable to submit Lockerverse signup.\",\n operation: \"submit_signup\",\n recoveryRecommended: requestAttempted,\n reportable: requestAttempted,\n })\n );\n}\n\nexport function createLockerverseSignup(\n options: CreateLockerverseSignupOptions\n): LockerverseSignupClient {\n const runtime = resolveSignupEnvironment(options);\n const stateStore = createStateStore<LockerverseSignupState>({\n phase: \"idle\",\n });\n let loadedSignup: LockerverseSignup | null = null;\n let loading = false;\n let submitting = false;\n\n const reportError = createSdkErrorReporter({\n communitySlug: runtime.communitySlugValue,\n environment: runtime.environment,\n getContext: () => ({ signupSlug: runtime.signupSlugValue }),\n onError: runtime.onError,\n resourceContextName: \"lockerverse_signup\",\n sentryDsn: runtime.sentryDsn,\n });\n\n const { requestJson } = createTransport(\n runtime.fetchImplementation,\n (error) =>\n reportError(\n error.operation === \"submit_signup\" && !error.recoveryRecommended\n ? new LockerverseSdkError({\n code: error.code,\n message: error.message,\n operation: error.operation,\n recoveryRecommended: true,\n reportable: error.reportable,\n })\n : error\n ),\n runtime.requestTimeoutMs\n );\n\n return {\n getState: stateStore.getState,\n async load() {\n const errorContext = {\n code: \"signup_load_failed\" as const,\n message: \"Unable to load Lockerverse signup.\",\n operation: \"load_signup\" as const,\n };\n if (loading || submitting) {\n throw reportError(\n new LockerverseSdkError({\n ...errorContext,\n reportable: false,\n })\n );\n }\n\n loading = true;\n loadedSignup = null;\n stateStore.commit({ phase: \"loading\" });\n try {\n let signupResponse: Awaited<\n ReturnType<typeof requestJson<LockerverseSignup>>\n >;\n try {\n signupResponse = await requestJson(\n `${runtime.apiBaseUrl}/community/${runtime.communitySlug}/sign-up-widgets/${runtime.signupSlug}`,\n undefined,\n parsePublicSignup,\n errorContext,\n errorContext\n );\n } catch (error) {\n if (error instanceof LockerverseSdkError) {\n stateStore.commit({\n error,\n phase: \"error\",\n recoverableSubmissionReference: null,\n signup: null,\n });\n }\n throw error;\n }\n if (!signupResponse.ok) {\n const error = reportError(\n new LockerverseSdkError({\n ...errorContext,\n reportable: signupResponse.response.status >= 500,\n status: signupResponse.response.status,\n })\n );\n stateStore.commit({\n error,\n phase: \"error\",\n recoverableSubmissionReference: null,\n signup: null,\n });\n throw error;\n }\n const signup = deepFreeze(signupResponse.value);\n loadedSignup = signup;\n stateStore.commit({ phase: \"ready\", signup });\n return signup;\n } finally {\n loading = false;\n }\n },\n async submit(submission: LockerverseSignupSubmission, submitOptions) {\n const signup = loadedSignup;\n const submissionReference =\n submitOptions?.submissionReference ?? globalThis.crypto.randomUUID();\n const errorContext = {\n code: \"signup_submit_failed\" as const,\n message: \"Unable to submit Lockerverse signup.\",\n operation: \"submit_signup\" as const,\n };\n if (!signup?.isActive || submitting) {\n throw reportError(\n new LockerverseSdkError({\n ...errorContext,\n reportable: false,\n })\n );\n }\n\n let parsedSubmission: ReturnType<typeof parseSignupSubmission>;\n try {\n parsedSubmission = parseSignupSubmission(submission);\n } catch {\n const error = reportError(\n new LockerverseSdkError({\n ...errorContext,\n message: \"Lockerverse signup input is invalid.\",\n reportable: false,\n })\n );\n stateStore.commit({\n error,\n phase: \"error\",\n recoverableSubmissionReference: null,\n signup,\n });\n // biome-ignore lint/style/useErrorCause: Raw validation errors must not escape the SDK boundary.\n throw error;\n }\n\n submitting = true;\n stateStore.commit({ phase: \"submitting\", signup, submissionReference });\n let requestAttempted = false;\n try {\n const body = JSON.stringify({\n ...parsedSubmission,\n submissionReference,\n });\n requestAttempted = true;\n const submissionResponse = await requestJson(\n `${runtime.apiBaseUrl}/community/${runtime.communitySlug}/sign-up-widgets/${runtime.signupSlug}/submissions`,\n {\n body,\n headers: { \"content-type\": \"application/json\" },\n method: \"POST\",\n },\n parseSignupSubmissionResult,\n errorContext,\n errorContext\n );\n if (!submissionResponse.ok) {\n throw reportError(\n new LockerverseSdkError({\n ...errorContext,\n recoveryRecommended: submissionResponse.response.status >= 500,\n reportable: submissionResponse.response.status >= 500,\n status: submissionResponse.response.status,\n })\n );\n }\n const result = deepFreeze(submissionResponse.value);\n if (result.id !== submissionReference) {\n throw reportError(\n new LockerverseSdkError({\n ...errorContext,\n recoveryRecommended: true,\n reportable: true,\n })\n );\n }\n stateStore.commit({ phase: \"submitted\", signup, submission: result });\n return result;\n } catch (error) {\n const sdkError = classifySubmissionError(\n error,\n requestAttempted,\n reportError\n );\n stateStore.commit({\n error: sdkError,\n phase: \"error\",\n recoverableSubmissionReference: sdkError.recoveryRecommended\n ? submissionReference\n : null,\n signup,\n });\n throw sdkError;\n } finally {\n submitting = false;\n }\n },\n subscribe: stateStore.subscribe,\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"signup.js","names":[],"sources":["../src/signup-input-schema.ts","../src/signup-schemas.ts","../src/signup.ts"],"sourcesContent":["import {\n array,\n nullable,\n optional,\n parser,\n strictObject,\n string,\n} from \"valibot\";\n\nimport {\n customFieldAnswerSchema,\n nonEmptyStringSchema,\n safeIntegerSchema,\n} from \"./schema-helpers.ts\";\n\nconst signupAddressSchema = strictObject({\n city: string(),\n country: string(),\n line1: string(),\n line2: optional(nullable(string())),\n postalCode: string(),\n state: string(),\n});\n\nexport const parseSignupSubmission = parser(\n strictObject({\n address: optional(nullable(signupAddressSchema)),\n answers: optional(array(customFieldAnswerSchema)),\n email: optional(nullable(string())),\n honeypot: optional(string()),\n name: nonEmptyStringSchema,\n participantCount: optional(nullable(safeIntegerSchema(0))),\n phone: optional(nullable(string())),\n })\n);\n","import { boolean, check, object, parser, pipe, transform } from \"valibot\";\n\nimport { vPublicSignUpWidgetSubmissionResponseDto } from \"./generated/public-api/valibot.gen.ts\";\nimport {\n customFieldsSchema,\n nonEmptyStringSchema,\n optionalNullableStringSchema,\n} from \"./schema-helpers.ts\";\n\nconst signupFieldSchema = object({\n enabled: boolean(),\n required: boolean(),\n});\n\nexport const publicSignupSchema = pipe(\n object({\n config: object({\n builtInFields: object({\n address: signupFieldSchema,\n email: signupFieldSchema,\n name: signupFieldSchema,\n participantCount: signupFieldSchema,\n phone: signupFieldSchema,\n }),\n customFields: customFieldsSchema,\n }),\n coverImageUrl: optionalNullableStringSchema,\n description: optionalNullableStringSchema,\n id: nonEmptyStringSchema,\n isActive: boolean(),\n name: nonEmptyStringSchema,\n slug: nonEmptyStringSchema,\n title: optionalNullableStringSchema,\n }),\n transform(({ config, ...signup }) => ({\n ...signup,\n customFields: config.customFields,\n fields: config.builtInFields,\n }))\n);\n\nexport const signupSubmissionResultSchema = pipe(\n vPublicSignUpWidgetSubmissionResponseDto,\n check(({ id }) => Boolean(id.trim()), \"Invalid signup submission ID.\")\n);\n\nexport const parsePublicSignup = parser(publicSignupSchema);\nexport const parseSignupSubmissionResult = parser(signupSubmissionResultSchema);\n","import { deepFreeze } from \"./deep-freeze.ts\";\nimport { resolveSignupEnvironment } from \"./environment.ts\";\nimport { createSdkErrorReporter } from \"./error-reporting.ts\";\nimport { parseSignupSubmission } from \"./signup-input-schema.ts\";\nimport {\n parsePublicSignup,\n parseSignupSubmissionResult,\n} from \"./signup-schemas.ts\";\nimport type {\n CreateLockerverseSignupOptions,\n LockerverseSignupClient,\n LockerverseSignupSubmission,\n} from \"./signup-types.ts\";\nimport { createTransport } from \"./transport.ts\";\nimport { LockerverseSdkError } from \"./types.ts\";\n\nfunction classifySubmissionError(\n error: unknown,\n requestAttempted: boolean,\n reportError: (error: LockerverseSdkError) => LockerverseSdkError\n) {\n if (error instanceof LockerverseSdkError) {\n return error;\n }\n return reportError(\n new LockerverseSdkError({\n code: \"signup_submit_failed\",\n message: \"Unable to submit Lockerverse signup.\",\n operation: \"submit_signup\",\n recoveryRecommended: requestAttempted,\n reportable: requestAttempted,\n })\n );\n}\n\nexport function createLockerverseSignupClient(\n options: CreateLockerverseSignupOptions\n): LockerverseSignupClient {\n const runtime = resolveSignupEnvironment(options);\n const reportError = createSdkErrorReporter({\n communitySlug: runtime.communitySlugValue,\n environment: runtime.environment,\n getContext: () => ({ signupSlug: runtime.signupSlugValue }),\n onError: runtime.onError,\n resourceContextName: \"lockerverse_signup\",\n sentryDsn: runtime.sentryDsn,\n });\n const { requestJson } = createTransport(\n runtime.fetchImplementation,\n (error) =>\n reportError(\n error.operation === \"submit_signup\" && !error.recoveryRecommended\n ? new LockerverseSdkError({\n code: error.code,\n message: error.message,\n operation: error.operation,\n recoveryRecommended: true,\n reportable: error.reportable,\n })\n : error\n ),\n runtime.requestTimeoutMs\n );\n const signupUrl = `${runtime.apiBaseUrl}/community/${runtime.communitySlug}/sign-up-widgets/${runtime.signupSlug}`;\n\n return {\n async load() {\n const errorContext = {\n code: \"signup_load_failed\" as const,\n message: \"Unable to load Lockerverse signup.\",\n operation: \"load_signup\" as const,\n };\n const signupResponse = await requestJson(\n signupUrl,\n undefined,\n parsePublicSignup,\n errorContext,\n errorContext\n );\n if (!signupResponse.ok) {\n throw reportError(\n new LockerverseSdkError({\n ...errorContext,\n reportable: signupResponse.response.status >= 500,\n status: signupResponse.response.status,\n })\n );\n }\n return deepFreeze(signupResponse.value);\n },\n async submit(submission: LockerverseSignupSubmission, submitOptions) {\n const submissionReference =\n submitOptions?.submissionReference ?? globalThis.crypto.randomUUID();\n const errorContext = {\n code: \"signup_submit_failed\" as const,\n message: \"Unable to submit Lockerverse signup.\",\n operation: \"submit_signup\" as const,\n };\n let parsedSubmission: ReturnType<typeof parseSignupSubmission>;\n try {\n parsedSubmission = parseSignupSubmission(submission);\n } catch {\n // biome-ignore lint/style/useErrorCause: Raw validation errors must not escape the SDK boundary.\n throw reportError(\n new LockerverseSdkError({\n ...errorContext,\n message: \"Lockerverse signup input is invalid.\",\n reportable: false,\n })\n );\n }\n\n let requestAttempted = false;\n try {\n const body = JSON.stringify({\n ...parsedSubmission,\n submissionReference,\n });\n requestAttempted = true;\n const submissionResponse = await requestJson(\n `${signupUrl}/submissions`,\n {\n body,\n headers: { \"content-type\": \"application/json\" },\n method: \"POST\",\n },\n parseSignupSubmissionResult,\n errorContext,\n errorContext\n );\n if (!submissionResponse.ok) {\n throw reportError(\n new LockerverseSdkError({\n ...errorContext,\n recoveryRecommended: submissionResponse.response.status >= 500,\n reportable: submissionResponse.response.status >= 500,\n status: submissionResponse.response.status,\n })\n );\n }\n const result = deepFreeze(submissionResponse.value);\n if (result.id !== submissionReference) {\n throw reportError(\n new LockerverseSdkError({\n ...errorContext,\n recoveryRecommended: true,\n reportable: true,\n })\n );\n }\n return result;\n } catch (error) {\n throw classifySubmissionError(error, requestAttempted, reportError);\n }\n },\n };\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.57`;var t=class extends Error{code;operation;reportable;recoveryRecommended;sdkVersion;status;constructor({code:t,message:n,operation:r,reportable:i,recoveryRecommended:a=!1,status:o}){super(n),this.name=`LockerverseSdkError`,this.code=t,this.operation=r,this.reportable=i,this.recoveryRecommended=a,this.sdkVersion=e,this.status=o}};export{t as n,e as t};
|
|
2
2
|
//# sourceMappingURL=types.js.map
|