@ebitex/forms-sdk 0.6.158 → 1.0.214

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 CHANGED
@@ -163,6 +163,52 @@ const errors = validateSubmission(form, submittedData, { requireAll: true })
163
163
  `<EbitexForm>` calls this itself for inline feedback before every request; the server is always the
164
164
  final authority regardless — a client-side pass is for a good respondent experience, not enforcement.
165
165
 
166
+ ## Consent and the visitor token
167
+
168
+ A multi-step form keeps its progress against a visitor token that the API issues. The package holds that token
169
+ **in memory only**. It never writes to `localStorage`, `sessionStorage`, a cookie or IndexedDB, so by default a
170
+ page load is a new visitor and nothing is remembered across visits.
171
+
172
+ Recognising a respondent across visits needs their consent. Tell the form what they chose, and, if you want the
173
+ token to survive between visits, give it somewhere to keep it:
174
+
175
+ ```tsx
176
+ import { EbitexForm } from '@ebitex/forms-sdk/react'
177
+
178
+ <EbitexForm
179
+ form={form}
180
+ consent={{ cmp: 'granted' }} // from your consent banner; 'denied' is a withdrawal
181
+ storage={{
182
+ get: () => localStorage.getItem('visitor'),
183
+ set: (token) => localStorage.setItem('visitor', token),
184
+ remove: () => localStorage.removeItem('visitor'),
185
+ }}
186
+ />
187
+ ```
188
+
189
+ - `set` is called **only** when the API reports that recognising the respondent is granted, and only when the
190
+ token has changed. `remove` is called when it is not, when the respondent withdraws consent, when you call
191
+ `forget`, and when a response says nothing about consent (an older server).
192
+ - Without a `consent` option the organization's default applies. That default is *denied* until an Owner changes
193
+ it or you pass a signal from your banner, so out of the box nothing is recognised across visits.
194
+ - `gpc` and `dnt` default to the browser's Global Privacy Control and Do Not Track settings. Pass them to
195
+ override. Either one set means "do not recognise me" unless your banner records an explicit choice.
196
+ - If you keep the token anywhere other than through `storage`, the same rule applies to you: store it only while
197
+ recognition is granted, and remove it as soon as it is not.
198
+
199
+ To change consent after the form has mounted, update the `consent` prop, or share one session across forms and
200
+ call `setConsent` yourself. `forget` asks the API to forget the browser and clears the token:
201
+
202
+ ```ts
203
+ import { createVisitorSession } from '@ebitex/forms-sdk'
204
+
205
+ const visitor = createVisitorSession({ storage, consent: { cmp: 'granted' } })
206
+ // <EbitexForm visitor={visitor} ... />
207
+ visitor.setConsent({ cmp: 'denied' }) // drops the token and calls storage.remove()
208
+ await visitor.forget(form) // resolves with the organization's confirmation message
209
+ visitor.consent?.messages.recognitionDeclined // wording to show where something needs recognition
210
+ ```
211
+
166
212
  ## Versioning
167
213
 
168
214
  This package's public wire shape mirrors ebitex's own Forms API responses directly (see
package/dist/index.d.ts CHANGED
@@ -12,7 +12,8 @@ export { validateSubmission, type ValidateOptions } from './validators.js';
12
12
  export { isAllOfSatisfied, isFieldComparisonSatisfied, isSatisfied } from './predicates.js';
13
13
  export { deriveDarkVariant } from './theme.js';
14
14
  export { adjacentVisibleStepSlot, collectDataFields, defaultChoiceValues, isDataField, collectSubmissionKeys, isFormField, resolveSteps, resolveVariant, resolveVisibleStepSlot, } from './nodes.js';
15
- export { type AllOfPredicate, type ButtonField, type ButtonType, type ChoiceField, type ChoiceOption, type ChoiceType, type FieldComparisonOperator, type FieldComparisonPredicate, type FieldsetNode, type FormField, type FormNode, type FormStep, type InputField, type InputVariant, type LookupSource, type NumberField, type RowNode, type SdkForm, type SubmissionData, type TextareaField, type ValidationErrors, type VariantBranch, type VariantNode, type VariantPredicate, } from './types.js';
15
+ export { type AllOfPredicate, type ButtonField, type ButtonType, type ChoiceField, type ChoiceOption, type ChoiceType, type ConsentMessages, type ConsentOptions, type ConsentState, type FieldComparisonOperator, type FieldComparisonPredicate, type FieldsetNode, type FormField, type FormNode, type FormStep, type InputField, type InputVariant, type LookupSource, type NumberField, type RowNode, type SdkForm, type SubmissionData, type TextareaField, type ValidationErrors, type VariantBranch, type VariantNode, type VariantPredicate, type VisitorStorage, } from './types.js';
16
16
  export { LOOKUP_COMPANION_SUFFIX, MAX_LOOKUP_VALUE_LENGTH } from './types.js';
17
17
  export { createPublicLookupSource, lookupUrlFromSubmissionUrl } from './lookup.js';
18
+ export { createVisitorSession, forgetUrlFromSubmissionUrl, type VisitorSession, type VisitorSessionOptions, } from './visitor.js';
18
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,KAAK,WAAW,EAChB,KAAK,kBAAkB,GACxB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,kBAAkB,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAE1E,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAE3F,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE9C,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,qBAAqB,EACrB,WAAW,EACX,YAAY,EACZ,cAAc,EACd,sBAAsB,GACvB,MAAM,YAAY,CAAA;AAEnB,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,gBAAgB,GACtB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AAE7E,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,KAAK,WAAW,EAChB,KAAK,kBAAkB,GACxB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,kBAAkB,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAE1E,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAE3F,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE9C,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,qBAAqB,EACrB,WAAW,EACX,YAAY,EACZ,cAAc,EACd,sBAAsB,GACvB,MAAM,YAAY,CAAA;AAEnB,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AAE7E,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AAElF,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,KAAK,cAAc,EACnB,KAAK,qBAAqB,GAC3B,MAAM,cAAc,CAAA"}
package/dist/index.js CHANGED
@@ -15,4 +15,5 @@ export { adjacentVisibleStepSlot, collectDataFields, defaultChoiceValues, isData
15
15
  export {} from './types.js';
16
16
  export { LOOKUP_COMPANION_SUFFIX, MAX_LOOKUP_VALUE_LENGTH } from './types.js';
17
17
  export { createPublicLookupSource, lookupUrlFromSubmissionUrl } from './lookup.js';
18
+ export { createVisitorSession, forgetUrlFromSubmissionUrl, } from './visitor.js';
18
19
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,iBAAiB,EACjB,aAAa,GAGd,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,kBAAkB,EAAwB,MAAM,iBAAiB,CAAA;AAE1E,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAE3F,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE9C,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,qBAAqB,EACrB,WAAW,EACX,YAAY,EACZ,cAAc,EACd,sBAAsB,GACvB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAyBN,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AAE7E,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,iBAAiB,EACjB,aAAa,GAGd,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,kBAAkB,EAAwB,MAAM,iBAAiB,CAAA;AAE1E,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAE3F,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE9C,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,qBAAqB,EACrB,WAAW,EACX,YAAY,EACZ,cAAc,EACd,sBAAsB,GACvB,MAAM,YAAY,CAAA;AAEnB,OAAO,EA6BN,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AAE7E,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AAElF,OAAO,EACL,oBAAoB,EACpB,0BAA0B,GAG3B,MAAM,cAAc,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import { type CSSProperties } from 'react';
2
- import type { LookupSource, SdkForm, SubmissionData } from '../types.js';
2
+ import type { ConsentOptions, LookupSource, SdkForm, SubmissionData, VisitorStorage } from '../types.js';
3
+ import { type VisitorSession } from '../visitor.js';
3
4
  import type { FieldComponents } from './fields.js';
4
5
  export interface EbitexFormProps {
5
6
  /** A form definition from `createFormsClient(...).getForm(...)`, fetched on your server. */
@@ -22,6 +23,24 @@ export interface EbitexFormProps {
22
23
  * through your own server or to fake them in a test.
23
24
  */
24
25
  lookup?: LookupSource;
26
+ /**
27
+ * Signals from your consent banner (and, by default, the browser's Global Privacy Control and Do Not
28
+ * Track settings). Without any, the organization's default applies, which is *denied* until an Owner
29
+ * changes it: the respondent is not recognised across visits. Update it as the respondent chooses; a
30
+ * change to `cmp: 'denied'` drops the token at once.
31
+ */
32
+ consent?: ConsentOptions;
33
+ /**
34
+ * Where to keep the visitor token between visits. Optional, and the component never persists anything
35
+ * itself: your adapter's `set` is called only when the API reports that recognising the respondent is
36
+ * granted, and `remove` whenever it is not. If you keep the token anywhere else, the same rule applies.
37
+ */
38
+ storage?: VisitorStorage;
39
+ /**
40
+ * An existing session from `createVisitorSession`, to share one token across several forms on a page or to
41
+ * call `forget` from your own UI. When given, `consent` and `storage` here are ignored.
42
+ */
43
+ visitor?: VisitorSession;
25
44
  /** Injectable for tests and non-standard runtimes. */
26
45
  fetch?: typeof globalThis.fetch;
27
46
  }
@@ -38,5 +57,5 @@ export interface EbitexFormProps {
38
57
  * isn't lost — matching the behaviour of ebitex's own renderer rather than a simplified
39
58
  * client-only notion of steps.
40
59
  */
41
- export declare function EbitexForm({ form, onSubmitted, onError, className, style, fieldComponents, lookup, fetch: injectedFetch, }: EbitexFormProps): import("react").JSX.Element | null;
60
+ export declare function EbitexForm({ form, onSubmitted, onError, className, style, fieldComponents, lookup, consent, storage, visitor: injectedVisitor, fetch: injectedFetch, }: EbitexFormProps): import("react").JSX.Element | null;
42
61
  //# sourceMappingURL=EbitexForm.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EbitexForm.d.ts","sourceRoot":"","sources":["../../src/react/EbitexForm.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,aAAa,EAAE,MAAM,OAAO,CAAA;AAGpE,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAoB,MAAM,aAAa,CAAA;AAE1F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAIlD,MAAM,WAAW,eAAe;IAC9B,4FAA4F;IAC5F,IAAI,EAAE,OAAO,CAAA;IAEb,kDAAkD;IAClD,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAA;IAE5C,wGAAwG;IACxG,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IAElC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,aAAa,CAAA;IAErB;;;;OAIG;IACH,eAAe,CAAC,EAAE,eAAe,CAAA;IAEjC;;;;OAIG;IACH,MAAM,CAAC,EAAE,YAAY,CAAA;IAErB,sDAAsD;IACtD,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;CAChC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,WAAW,EACX,OAAO,EACP,SAAS,EACT,KAAK,EACL,eAAe,EACf,MAAM,EACN,KAAK,EAAE,aAAa,GACrB,EAAE,eAAe,sCA6NjB"}
1
+ {"version":3,"file":"EbitexForm.d.ts","sourceRoot":"","sources":["../../src/react/EbitexForm.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuC,KAAK,aAAa,EAAE,MAAM,OAAO,CAAA;AAG/E,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAoB,cAAc,EAAE,MAAM,aAAa,CAAA;AAC1H,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,eAAe,CAAA;AAEzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAGlD,MAAM,WAAW,eAAe;IAC9B,4FAA4F;IAC5F,IAAI,EAAE,OAAO,CAAA;IAEb,kDAAkD;IAClD,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAA;IAE5C,wGAAwG;IACxG,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IAElC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,aAAa,CAAA;IAErB;;;;OAIG;IACH,eAAe,CAAC,EAAE,eAAe,CAAA;IAEjC;;;;OAIG;IACH,MAAM,CAAC,EAAE,YAAY,CAAA;IAErB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,cAAc,CAAA;IAExB;;;;OAIG;IACH,OAAO,CAAC,EAAE,cAAc,CAAA;IAExB;;;OAGG;IACH,OAAO,CAAC,EAAE,cAAc,CAAA;IAExB,sDAAsD;IACtD,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;CAChC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,WAAW,EACX,OAAO,EACP,SAAS,EACT,KAAK,EACL,eAAe,EACf,MAAM,EACN,OAAO,EACP,OAAO,EACP,OAAO,EAAE,eAAe,EACxB,KAAK,EAAE,aAAa,GACrB,EAAE,eAAe,sCAyOjB"}
@@ -1,10 +1,10 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useId, useMemo, useState } from 'react';
2
+ import { useEffect, useId, useMemo, useState } from 'react';
3
3
  import { adjacentVisibleStepSlot, collectSubmissionKeys, defaultChoiceValues, resolveSteps, resolveVisibleStepSlot } from '../nodes.js';
4
4
  import { createPublicLookupSource, lookupUrlFromSubmissionUrl } from '../lookup.js';
5
+ import { createVisitorSession } from '../visitor.js';
5
6
  import { validateSubmission } from '../validators.js';
6
7
  import { ActionButtons, NodeList, joinClassNames } from './NodeList.js';
7
- import { getOrCreateVisitorId } from './visitorId.js';
8
8
  /**
9
9
  * Renders an ebitex Form and submits it.
10
10
  *
@@ -18,7 +18,7 @@ import { getOrCreateVisitorId } from './visitorId.js';
18
18
  * isn't lost — matching the behaviour of ebitex's own renderer rather than a simplified
19
19
  * client-only notion of steps.
20
20
  */
21
- export function EbitexForm({ form, onSubmitted, onError, className, style, fieldComponents, lookup, fetch: injectedFetch, }) {
21
+ export function EbitexForm({ form, onSubmitted, onError, className, style, fieldComponents, lookup, consent, storage, visitor: injectedVisitor, fetch: injectedFetch, }) {
22
22
  const baseId = useId();
23
23
  const doFetch = injectedFetch ?? globalThis.fetch;
24
24
  const lookupSource = useMemo(() => {
@@ -46,7 +46,16 @@ export function EbitexForm({ form, onSubmitted, onError, className, style, field
46
46
  const isLastStep = step === undefined || adjacentVisibleStepSlot(steps, data, currentSlot, 1) < 0;
47
47
  const hasPreviousStep = step !== undefined && adjacentVisibleStepSlot(steps, data, currentSlot, -1) >= 0;
48
48
  const visibleStepPosition = step ? visibleSteps.indexOf(step) : -1;
49
- const visitorId = useMemo(() => getOrCreateVisitorId(), []);
49
+ // Held in memory for the life of the component. Nothing is written to the browser by this package.
50
+ const session = useMemo(() => injectedVisitor ?? createVisitorSession({ storage, consent }),
51
+ // The session is created once; later `consent` changes are applied by the effect below, and a
52
+ // different adapter is a different session only if the host remounts the form.
53
+ // eslint-disable-next-line react-hooks/exhaustive-deps
54
+ [injectedVisitor]);
55
+ useEffect(() => {
56
+ if (!injectedVisitor && consent)
57
+ session.setConsent(consent);
58
+ }, [session, injectedVisitor, consent?.cmp, consent?.cmpString, consent?.gpc, consent?.dnt]);
50
59
  if (completed) {
51
60
  return (_jsx("div", { className: joinClassNames('ebitex-forms', className), style: style, children: _jsx("p", { className: "ebitex-forms__complete", role: "status", children: "Thanks \u2014 your response has been submitted." }) }));
52
61
  }
@@ -90,7 +99,7 @@ export function EbitexForm({ form, onSubmitted, onError, className, style, field
90
99
  const response = await doFetch(form.submissionUrl, {
91
100
  method: 'POST',
92
101
  headers: { 'Content-Type': 'application/json' },
93
- body: JSON.stringify({ visitor: visitorId, data: visiblePayload(), complete }),
102
+ body: JSON.stringify({ ...(await session.requestFields()), data: visiblePayload(), complete }),
94
103
  });
95
104
  if (!response.ok) {
96
105
  // The server is authoritative: a field-level rejection is surfaced inline rather than
@@ -103,6 +112,8 @@ export function EbitexForm({ form, onSubmitted, onError, className, style, field
103
112
  onError?.(new Error(`Submission failed with status ${response.status}`));
104
113
  return false;
105
114
  }
115
+ // The response carries the token to use from now on and what the API decided about consent.
116
+ session.receive(await response.clone().json().catch(() => null));
106
117
  return true;
107
118
  }
108
119
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"EbitexForm.js","sourceRoot":"","sources":["../../src/react/EbitexForm.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EbitexForm.js","sourceRoot":"","sources":["../../src/react/EbitexForm.tsx"],"names":[],"mappings":"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"}
@@ -16,5 +16,5 @@ export { LookupFieldControl } from './LookupField.js';
16
16
  * spec 77-public-form-progressive-enhancement.
17
17
  */
18
18
  export { ActionButtons, NodeList } from './NodeList.js';
19
- export { getOrCreateVisitorId } from './visitorId.js';
19
+ export { createVisitorSession, type VisitorSession, type VisitorSessionOptions } from '../visitor.js';
20
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAElE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACxB,KAAK,eAAe,GACrB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAErD;;;;;;GAMG;AACH,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAElE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACxB,KAAK,eAAe,GACrB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAErD;;;;;;GAMG;AACH,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAEvD,OAAO,EAAE,oBAAoB,EAAE,KAAK,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,eAAe,CAAA"}
@@ -16,5 +16,5 @@ export { LookupFieldControl } from './LookupField.js';
16
16
  * spec 77-public-form-progressive-enhancement.
17
17
  */
18
18
  export { ActionButtons, NodeList } from './NodeList.js';
19
- export { getOrCreateVisitorId } from './visitorId.js';
19
+ export { createVisitorSession } from '../visitor.js';
20
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAwB,MAAM,iBAAiB,CAAA;AAElE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,GAIrB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAErD;;;;;;GAMG;AACH,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAwB,MAAM,iBAAiB,CAAA;AAElE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,GAIrB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAErD;;;;;;GAMG;AACH,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAEvD,OAAO,EAAE,oBAAoB,EAAmD,MAAM,eAAe,CAAA"}
package/dist/types.d.ts CHANGED
@@ -186,5 +186,49 @@ export interface SdkForm {
186
186
  export type SubmissionData = Record<string, string | string[] | number | null>;
187
187
  /** Field-level validation messages, keyed by `submissionKey`. Empty means valid. */
188
188
  export type ValidationErrors = Record<string, string>;
189
+ /**
190
+ * The signals from a consent banner and the respondent's browser, sent as they are for the API to resolve.
191
+ * Every member is optional. `gpc` and `dnt` default to the browser's Global Privacy Control and Do Not Track
192
+ * settings when running in a browser; pass a value to override.
193
+ */
194
+ export interface ConsentOptions {
195
+ /** The respondent's explicit choice about being recognised across visits, from your consent banner. */
196
+ cmp?: 'granted' | 'denied';
197
+ /** Your banner's own consent string (a TCF string, for instance), kept as the organization's evidence. Up to 4096 characters. */
198
+ cmpString?: string;
199
+ /** Global Privacy Control. Defaults to `navigator.globalPrivacyControl`. */
200
+ gpc?: boolean;
201
+ /** Do Not Track. Defaults to `navigator.doNotTrack === '1'`. */
202
+ dnt?: boolean;
203
+ }
204
+ /** Wording the organization has set for the respondent, already resolved to the respondent's language. */
205
+ export interface ConsentMessages {
206
+ /** Shown where something is unavailable because the respondent is not being recognised across visits. */
207
+ recognitionDeclined: string;
208
+ forgetConfirm: string;
209
+ forgetDone: string;
210
+ }
211
+ /** What the API decided about recognising this respondent, and why. */
212
+ export interface ConsentState {
213
+ recognition: 'granted' | 'denied';
214
+ /** What decided it: your banner (`cmp`), the browser (`globalPrivacyControl`, `doNotTrack`) or the organization's default. */
215
+ source: string;
216
+ policyVersion: number;
217
+ /** `recognition` tokens may outlive a visit; `session` tokens are short-lived and for the form in progress only. */
218
+ tokenKind: 'recognition' | 'session';
219
+ tokenLifetimeSeconds: number;
220
+ messages: ConsentMessages;
221
+ }
222
+ /**
223
+ * Where a consumer persists the visitor token across visits, if at all. The package never touches browser
224
+ * storage itself. See {@link VisitorSession} in `./visitor.js` for exactly when each method is called.
225
+ */
226
+ export interface VisitorStorage {
227
+ get(): string | null | undefined | Promise<string | null | undefined>;
228
+ /** Called only when the API reports recognition as granted, and only when the token changed. */
229
+ set(token: string): void | Promise<void>;
230
+ /** Called when recognition is denied or withdrawn, on forget, and when the API says nothing about consent. */
231
+ remove(): void | Promise<void>;
232
+ }
189
233
  export {};
190
234
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -13,8 +13,4 @@ export const MAX_LOOKUP_VALUE_LENGTH = 200;
13
13
  * is how extra questions appear only for an answer that is not in the list.
14
14
  */
15
15
  export const LOOKUP_COMPANION_SUFFIX = '-existing';
16
- // `isFormField`/`isDataField`/`collectDataFields`/`resolveVariant` live in `./nodes.js`, not here —
17
- // `resolveVariant` needs `isFieldComparisonSatisfied` from `./predicates.js`, which itself imports
18
- // types from this file, so keeping tree-walking logic out of `types.ts` avoids a circular import
19
- // between the two.
20
16
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAyFH,0FAA0F;AAC1F,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAA;AAE1C;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,WAAW,CAAA;AAkHlD,oGAAoG;AACpG,mGAAmG;AACnG,iGAAiG;AACjG,mBAAmB"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAyFH,0FAA0F;AAC1F,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAA;AAE1C;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,WAAW,CAAA"}
@@ -0,0 +1,61 @@
1
+ import type { ConsentOptions, ConsentState, SdkForm, VisitorStorage } from './types.js';
2
+ /**
3
+ * What a respondent's browser holds between the steps of one form, and, only with consent, between visits.
4
+ *
5
+ * **The token lives in memory.** This package never writes to `localStorage`, `sessionStorage`, a cookie or
6
+ * IndexedDB itself. Putting an identifier on a respondent's device is "storage" under the ePrivacy rules and
7
+ * needs their consent first, so persistence goes through the optional {@link VisitorStorage} adapter you pass,
8
+ * and the session calls its `set` **only** when the API reports that recognising the respondent is granted.
9
+ * On a denial, a withdrawal, a forget, or a response that says nothing about consent (an older server), it
10
+ * calls `remove`.
11
+ *
12
+ * If you keep the token anywhere yourself, the same rule applies to you: persist it only while recognition is
13
+ * granted and remove it as soon as it is not.
14
+ *
15
+ * Without a `consent` option the organization's default applies. That default is *denied* until an Owner
16
+ * changes it or you pass a signal from your consent banner, so out of the box nothing is recognised across
17
+ * visits and each page load is a new visitor.
18
+ */
19
+ export interface VisitorSession {
20
+ /** The current token, held in memory. `null` before the first response of a visit. */
21
+ readonly token: string | null;
22
+ /** The consent state the API reported on the last response, or `null` before one (or from an older server). */
23
+ readonly consent: ConsentState | null;
24
+ /**
25
+ * Resolves once the adapter's stored token, if any, has been read into memory. Awaited by {@link requestFields},
26
+ * so you rarely need it.
27
+ */
28
+ readonly ready: Promise<void>;
29
+ /**
30
+ * Replaces the consent signals, for a consent banner's callback. `cmp: 'denied'` is a withdrawal: the
31
+ * in-memory token is dropped and the adapter's `remove` is called at once.
32
+ */
33
+ setConsent(options: ConsentOptions): void;
34
+ /** The `visitor` and `consent` members to merge into a render or submission request body. */
35
+ requestFields(): Promise<{
36
+ visitor: string;
37
+ consent: {
38
+ cmp: 'granted' | 'denied' | null;
39
+ gpc: boolean;
40
+ dnt: boolean;
41
+ cmpString: string | null;
42
+ };
43
+ }>;
44
+ /** Reads `visitor` and `consent` from a render or submission response and applies the storage rules. */
45
+ receive(responseBody: unknown): void;
46
+ /**
47
+ * Asks the API to forget this browser (rotating its id and removing links to details held about it), then
48
+ * clears the token from memory and calls the adapter's `remove`. Resolves with the message to show.
49
+ */
50
+ forget(form: Pick<SdkForm, 'submissionUrl'>, doFetch?: typeof globalThis.fetch): Promise<string | null>;
51
+ }
52
+ export interface VisitorSessionOptions {
53
+ /** Where to persist the token across visits. Called only as described on {@link VisitorSession}. Optional. */
54
+ storage?: VisitorStorage;
55
+ /** Signals from your consent banner and the respondent's browser settings. See {@link ConsentOptions}. */
56
+ consent?: ConsentOptions;
57
+ }
58
+ export declare function createVisitorSession(options?: VisitorSessionOptions): VisitorSession;
59
+ /** The forget endpoint that sits beside a form's public submission endpoint, or `undefined` for an address of another shape. */
60
+ export declare function forgetUrlFromSubmissionUrl(submissionUrl: string): string | undefined;
61
+ //# sourceMappingURL=visitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visitor.d.ts","sourceRoot":"","sources":["../src/visitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,OAAO,EACP,cAAc,EACf,MAAM,YAAY,CAAA;AAEnB;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,cAAc;IAC7B,sFAAsF;IACtF,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IAE7B,+GAA+G;IAC/G,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAA;IAErC;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;IAE7B;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAAA;IAEzC,6FAA6F;IAC7F,aAAa,IAAI,OAAO,CAAC;QACvB,OAAO,EAAE,MAAM,CAAA;QACf,OAAO,EAAE;YAAE,GAAG,EAAE,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC;YAAC,GAAG,EAAE,OAAO,CAAC;YAAC,GAAG,EAAE,OAAO,CAAC;YAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE,CAAA;KACpG,CAAC,CAAA;IAEF,wGAAwG;IACxG,OAAO,CAAC,YAAY,EAAE,OAAO,GAAG,IAAI,CAAA;IAEpC;;;OAGG;IACH,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CACxG;AAED,MAAM,WAAW,qBAAqB;IACpC,8GAA8G;IAC9G,OAAO,CAAC,EAAE,cAAc,CAAA;IAExB,0GAA0G;IAC1G,OAAO,CAAC,EAAE,cAAc,CAAA;CACzB;AAED,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,qBAA0B,GAAG,cAAc,CAqHxF;AAED,gIAAgI;AAChI,wBAAgB,0BAA0B,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGpF"}
@@ -0,0 +1,152 @@
1
+ export function createVisitorSession(options = {}) {
2
+ const { storage } = options;
3
+ let consentOptions = { ...options.consent };
4
+ let token = null;
5
+ let persisted = null;
6
+ let consent = null;
7
+ // Only used when the API has not issued a token yet (the first request of a visit). It is never stored, and a
8
+ // server that issues its own tokens ignores it once its transition window for unsigned ids has ended.
9
+ let provisional = null;
10
+ const ready = (async () => {
11
+ if (!storage)
12
+ return;
13
+ try {
14
+ const stored = await storage.get();
15
+ if (stored && token === null) {
16
+ token = stored;
17
+ persisted = stored;
18
+ }
19
+ }
20
+ catch {
21
+ // A broken adapter must not stop a form rendering.
22
+ }
23
+ })();
24
+ async function removeStored() {
25
+ persisted = null;
26
+ if (!storage)
27
+ return;
28
+ try {
29
+ await storage.remove();
30
+ }
31
+ catch {
32
+ // Same: never fail the form over storage.
33
+ }
34
+ }
35
+ return {
36
+ get token() {
37
+ return token;
38
+ },
39
+ get consent() {
40
+ return consent;
41
+ },
42
+ ready,
43
+ setConsent(next) {
44
+ consentOptions = { ...next };
45
+ if (next.cmp === 'denied') {
46
+ token = null;
47
+ consent = null;
48
+ void removeStored();
49
+ }
50
+ },
51
+ async requestFields() {
52
+ await ready;
53
+ provisional ??= newProvisionalId();
54
+ return {
55
+ visitor: token ?? provisional,
56
+ consent: {
57
+ cmp: consentOptions.cmp ?? null,
58
+ gpc: consentOptions.gpc ?? detectGlobalPrivacyControl(),
59
+ dnt: consentOptions.dnt ?? detectDoNotTrack(),
60
+ cmpString: consentOptions.cmpString ?? null,
61
+ },
62
+ };
63
+ },
64
+ receive(responseBody) {
65
+ const body = isRecord(responseBody) ? responseBody : {};
66
+ if (typeof body.visitor === 'string' && body.visitor) {
67
+ token = body.visitor;
68
+ }
69
+ const reported = readConsent(body.consent);
70
+ consent = reported;
71
+ if (reported?.recognition === 'granted' && token) {
72
+ if (token !== persisted) {
73
+ const toPersist = token;
74
+ persisted = toPersist;
75
+ if (storage) {
76
+ void Promise.resolve()
77
+ .then(() => storage.set(toPersist))
78
+ .catch(() => { });
79
+ }
80
+ }
81
+ }
82
+ else {
83
+ // Denied, or no consent member at all (an older server): nothing is persisted, anything stored is removed.
84
+ void removeStored();
85
+ }
86
+ },
87
+ async forget(form, doFetch = globalThis.fetch) {
88
+ await ready;
89
+ const url = forgetUrlFromSubmissionUrl(form.submissionUrl);
90
+ let message = null;
91
+ if (url !== undefined && token !== null) {
92
+ try {
93
+ const response = await doFetch(url, {
94
+ method: 'POST',
95
+ headers: { 'Content-Type': 'application/json' },
96
+ body: JSON.stringify({ visitor: token }),
97
+ });
98
+ if (response.ok) {
99
+ const body = (await response.json().catch(() => null));
100
+ message = typeof body?.message === 'string' ? body.message : null;
101
+ }
102
+ }
103
+ catch {
104
+ // Forgetting locally still happens below: the respondent asked for it.
105
+ }
106
+ }
107
+ token = null;
108
+ provisional = null;
109
+ consent = null;
110
+ await removeStored();
111
+ return message;
112
+ },
113
+ };
114
+ }
115
+ /** The forget endpoint that sits beside a form's public submission endpoint, or `undefined` for an address of another shape. */
116
+ export function forgetUrlFromSubmissionUrl(submissionUrl) {
117
+ const suffix = '/submissions';
118
+ return submissionUrl.endsWith(suffix) ? `${submissionUrl.slice(0, -suffix.length)}/forget` : undefined;
119
+ }
120
+ function detectGlobalPrivacyControl() {
121
+ return typeof navigator !== 'undefined' && navigator.globalPrivacyControl === true;
122
+ }
123
+ function detectDoNotTrack() {
124
+ return typeof navigator !== 'undefined' && navigator.doNotTrack === '1';
125
+ }
126
+ function newProvisionalId() {
127
+ return globalThis.crypto.randomUUID();
128
+ }
129
+ function isRecord(value) {
130
+ return typeof value === 'object' && value !== null;
131
+ }
132
+ function readConsent(value) {
133
+ if (!isRecord(value))
134
+ return null;
135
+ const recognition = value.recognition;
136
+ if (recognition !== 'granted' && recognition !== 'denied')
137
+ return null;
138
+ const messages = isRecord(value.messages) ? value.messages : {};
139
+ return {
140
+ recognition,
141
+ source: typeof value.source === 'string' ? value.source : '',
142
+ policyVersion: typeof value.policyVersion === 'number' ? value.policyVersion : 0,
143
+ tokenKind: value.tokenKind === 'session' ? 'session' : 'recognition',
144
+ tokenLifetimeSeconds: typeof value.tokenLifetimeSeconds === 'number' ? value.tokenLifetimeSeconds : 0,
145
+ messages: {
146
+ recognitionDeclined: typeof messages.recognitionDeclined === 'string' ? messages.recognitionDeclined : '',
147
+ forgetConfirm: typeof messages.forgetConfirm === 'string' ? messages.forgetConfirm : '',
148
+ forgetDone: typeof messages.forgetDone === 'string' ? messages.forgetDone : '',
149
+ },
150
+ };
151
+ }
152
+ //# sourceMappingURL=visitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visitor.js","sourceRoot":"","sources":["../src/visitor.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ebitex/forms-sdk",
3
- "version": "0.6.158",
3
+ "version": "1.0.214",
4
4
  "description": "Fetch and render ebitex Forms in your own application.",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://developers.ebitex.io/getting-started/forms/",
@@ -1,19 +0,0 @@
1
- /**
2
- * The persistent visitor id the public submission endpoint uses to reconcile a respondent's
3
- * progress across steps.
4
- *
5
- * It serves the same purpose as the visitor id ebitex's own hosted form page keeps, implemented here
6
- * so this package depends on nothing but React: its consumers are arbitrary external apps with their
7
- * own bundlers and design systems.
8
- *
9
- * Note the id is scoped to *your* site's origin, not ebitex's, because nothing here loads in an
10
- * iframe. A respondent who fills the same form on two different sites is therefore two visitors.
11
- *
12
- * Never throws. Storage access can fail outright under some privacy settings, and a form that
13
- * refuses to render because it couldn't save an id would be a far worse outcome than one that
14
- * simply can't reconcile progress.
15
- */
16
- export declare function getOrCreateVisitorId(): string;
17
- /** Test seam — resets the in-memory fallback between cases. */
18
- export declare function resetVisitorIdFallbackForTests(): void;
19
- //# sourceMappingURL=visitorId.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"visitorId.d.ts","sourceRoot":"","sources":["../../src/react/visitorId.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAY7C;AAED,+DAA+D;AAC/D,wBAAgB,8BAA8B,IAAI,IAAI,CAErD"}
@@ -1,41 +0,0 @@
1
- const STORAGE_KEY = 'ebitex.visitor-id';
2
- /**
3
- * Held for the life of the page when storage is unavailable, so a respondent in a privacy-mode
4
- * browser still gets consistent behaviour *within* one visit (a multi-step form keeps accumulating
5
- * into one submission) even though nothing persists across visits.
6
- */
7
- let inMemoryFallback = null;
8
- /**
9
- * The persistent visitor id the public submission endpoint uses to reconcile a respondent's
10
- * progress across steps.
11
- *
12
- * It serves the same purpose as the visitor id ebitex's own hosted form page keeps, implemented here
13
- * so this package depends on nothing but React: its consumers are arbitrary external apps with their
14
- * own bundlers and design systems.
15
- *
16
- * Note the id is scoped to *your* site's origin, not ebitex's, because nothing here loads in an
17
- * iframe. A respondent who fills the same form on two different sites is therefore two visitors.
18
- *
19
- * Never throws. Storage access can fail outright under some privacy settings, and a form that
20
- * refuses to render because it couldn't save an id would be a far worse outcome than one that
21
- * simply can't reconcile progress.
22
- */
23
- export function getOrCreateVisitorId() {
24
- try {
25
- const existing = window.localStorage.getItem(STORAGE_KEY);
26
- if (existing)
27
- return existing;
28
- const created = crypto.randomUUID();
29
- window.localStorage.setItem(STORAGE_KEY, created);
30
- return created;
31
- }
32
- catch {
33
- inMemoryFallback ??= crypto.randomUUID();
34
- return inMemoryFallback;
35
- }
36
- }
37
- /** Test seam — resets the in-memory fallback between cases. */
38
- export function resetVisitorIdFallbackForTests() {
39
- inMemoryFallback = null;
40
- }
41
- //# sourceMappingURL=visitorId.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"visitorId.js","sourceRoot":"","sources":["../../src/react/visitorId.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,GAAG,mBAAmB,CAAA;AAEvC;;;;GAIG;AACH,IAAI,gBAAgB,GAAkB,IAAI,CAAA;AAE1C;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QACzD,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAA;QAE7B,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAA;QACnC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QACjD,OAAO,OAAO,CAAA;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,gBAAgB,KAAK,MAAM,CAAC,UAAU,EAAE,CAAA;QACxC,OAAO,gBAAgB,CAAA;IACzB,CAAC;AACH,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,8BAA8B;IAC5C,gBAAgB,GAAG,IAAI,CAAA;AACzB,CAAC"}