@checktiv/sdk-web 1.9.0 → 1.12.0
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 +16 -1
- package/dist/agents/AGENTS.md +8 -0
- package/dist/agents/manifest.json +24 -0
- package/dist/capture-ui.d.ts +4 -4
- package/dist/capture-ui.js +7 -6
- package/dist/capture.d.ts +3 -3
- package/dist/capture.js +4 -3
- package/dist/challenge.js +2 -2
- package/dist/chunk-3KEVZCCZ.js +3 -0
- package/dist/chunk-4HIQN4KL.js +3 -0
- package/dist/chunk-C7GRMEYT.js +3 -0
- package/dist/chunk-CAI3JWWU.js +12 -0
- package/dist/chunk-EOTGVXW6.js +7 -0
- package/dist/{chunk-HV2QKVJX.js → chunk-FQSJUWRP.js} +1 -1
- package/dist/{chunk-FL2GCRSI.js → chunk-HWABVMID.js} +4 -4
- package/dist/{chunk-MCYAWMYQ.js → chunk-KYV5BPCD.js} +2 -2
- package/dist/chunk-MLQ2HMTS.js +3 -0
- package/dist/chunk-O3JECGW2.js +3 -0
- package/dist/chunk-PB2THQ3P.js +8 -0
- package/dist/chunk-TKK5CTVG.js +59 -0
- package/dist/chunk-UVTAPUGQ.js +3 -0
- package/dist/chunk-VMWTID63.js +3 -0
- package/dist/{chunk-WC6TLR42.js → chunk-WALPQ6TH.js} +2 -1
- package/dist/chunk-YE2LWN74.js +9 -0
- package/dist/{chunk-XSSM5ZB7.js → chunk-ZU4L3NDZ.js} +1 -1
- package/dist/collect-user-info.d.ts +4 -4
- package/dist/collect-user-info.js +5 -5
- package/dist/{controller-Ta5RgFZ4.d.ts → controller-Dh-rSrot.d.ts} +3 -2
- package/dist/{copy-CEILzVXc.d.ts → copy-Bsb1n1Wv.d.ts} +1 -1
- package/dist/credit-history.d.ts +4 -0
- package/dist/credit-history.js +12 -0
- package/dist/cross-device.js +2 -2
- package/dist/custom-form.css +1 -1
- package/dist/custom-form.d.ts +3 -3
- package/dist/custom-form.js +7 -8
- package/dist/esign/ceremony-runtime.js +7 -0
- package/dist/esign.d.ts +16 -0
- package/dist/esign.js +427 -0
- package/dist/fraud.d.ts +3 -3
- package/dist/fraud.js +5 -6
- package/dist/idv/cross-device.d.ts +7 -7
- package/dist/idv/cross-device.js +4 -5
- package/dist/idv.d.ts +3 -3
- package/dist/idv.js +13 -13
- package/dist/index-CGH7LlPH.d.ts +736 -0
- package/dist/{index-G5mVvjNZ.d.ts → index-CZt19Km4.d.ts} +5 -5
- package/dist/index.d.ts +6 -6
- package/dist/index.js +8 -8
- package/dist/{machine-BhPiYmOR.d.ts → machine-EePe2ERe.d.ts} +49 -2
- package/dist/react.d.ts +4 -4
- package/dist/react.js +11 -11
- package/dist/workspace.d.ts +3 -3
- package/dist/workspace.js +2 -1
- package/package.json +35 -9
- package/dist/api-BrQqQbGK.d.ts +0 -342
- package/dist/chunk-523TT3PD.js +0 -7
- package/dist/chunk-7GP5REM7.js +0 -3
- package/dist/chunk-BBO2X73Y.js +0 -9
- package/dist/chunk-GFHNOZVO.js +0 -3
- package/dist/chunk-NHNGQ5BB.js +0 -66
- package/dist/chunk-S2OOEDJS.js +0 -3
- package/dist/chunk-T4R5TTE5.js +0 -7
- package/dist/chunk-WPMO4FQ2.js +0 -13
- package/dist/chunk-XOGHMNBX.js +0 -3
package/dist/esign.js
ADDED
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
import { resolveSession, warnWrongTokenPlane } from './chunk-EOTGVXW6.js';
|
|
2
|
+
import './chunk-IQKHRPJR.js';
|
|
3
|
+
import { assertNever } from './chunk-UBQTPS5J.js';
|
|
4
|
+
import { isTerminalEnvelopeStatus, TERMINAL_STATUS_TO_STATE, ESIGN_PREPARING_MAX_ATTEMPTS, esignPreparingDelayMs, isEsignFrameFatalState, resolveEsignFrameTitle, ESIGN_FRAME_ANNOUNCE_TIMEOUT_MS, ESIGN_SCROLL_TARGET_MARGIN_PX, ESIGN_TERMINAL_STATUS_KEY, ESIGN_PREPARING_STALL_MS, resolveEsignShellCopy, resolveEsignCopy, resolveEsignDocumentCopy, resolveEsignLabel } from './chunk-MLQ2HMTS.js';
|
|
5
|
+
export { ESIGN_CONSENT_ACTIONS, ESIGN_COPY_FALLBACKS, ESIGN_COPY_STATE_KEYS, ESIGN_COUNT_TOKEN, ESIGN_DOCUMENT_FALLBACKS, ESIGN_DOCUMENT_KEYS, ESIGN_FRAME_ANNOUNCE_TIMEOUT_MS, ESIGN_LABELS, ESIGN_LABEL_FALLBACKS, ESIGN_OUTCOME_RIGHTS_KEY, ESIGN_RIGHTS_FALLBACKS, ESIGN_RIGHTS_KEYS, ESIGN_SHELL_FALLBACKS, ESIGN_SHELL_KEYS, ESIGN_STATES, ESIGN_STATE_RIGHTS, ESIGN_TERMINAL_STATUS_KEY, TERMINAL_STATUS_TO_STATE, esignStateOffersRights, resolveEsignCopy, resolveEsignDocumentCopy, resolveEsignFrameTitle, resolveEsignLabel, resolveEsignOutcomeCopy, resolveEsignRightsCopy, resolveEsignShellCopy, resolveEsignTerminalStatus } from './chunk-MLQ2HMTS.js';
|
|
6
|
+
import { resolveCaptureTheme } from './chunk-4HIQN4KL.js';
|
|
7
|
+
import { registerModule } from './chunk-VMWTID63.js';
|
|
8
|
+
import { withTokenRetry, createChecktivError, isCredentialUnverifiable, isChecktivError, mapHttpStatusToError } from './chunk-C7GRMEYT.js';
|
|
9
|
+
import { dataPlaneHeaders, stepSubmitPath, isCanonicalOrigin, SESSIONS_ME_PATH } from './chunk-HFQJYEGZ.js';
|
|
10
|
+
import './chunk-QFA3K5ZV.js';
|
|
11
|
+
import './chunk-AIK7CDV6.js';
|
|
12
|
+
|
|
13
|
+
function esignBundlePath(stepId,opts={}){return `${esignStepPath(stepId)}${localeQuery(opts.locale)}`}function esignStepPath(stepId){return `${SESSIONS_ME_PATH}/esign/${encodeURIComponent(stepId)}`}function localeQuery(locale){if(locale===void 0||locale.length===0)return "";return `?locale=${encodeURIComponent(locale)}`}function esignEventsPath(stepId){return `${esignStepPath(stepId)}/events`}function esignContextMintPath(stepId,opts={}){return `${esignStepPath(stepId)}/context${localeQuery(opts.locale)}`}function esignConsentWithdrawPath(stepId){return `${esignStepPath(stepId)}/consent-withdraw`}function esignDocumentPath(stepId,documentId){return `${esignStepPath(stepId)}/documents/${encodeURIComponent(documentId)}`}function isRecord(value){return typeof value==="object"&&value!==null}function parseEsignMint(body){if(!isRecord(body)||!isRecord(body.data))return null;const d=body.data;const contextToken=d.context_token;const embedOrigin=d.embed_origin;const disclosureLocale=d.disclosure_locale;if(typeof contextToken!=="string"||contextToken.length===0)return null;if(!isCanonicalOrigin(embedOrigin))return null;if(typeof disclosureLocale!=="string"||disclosureLocale.length<2)return null;return {contextToken,embedOrigin,disclosureLocale}}function parseEsignPending(body){if(!isRecord(body)||body.pending!==true)return null;const retryAfterMs=body.retryAfterMs;if(typeof retryAfterMs!=="number"||!Number.isFinite(retryAfterMs))return null;return {retryAfterMs}}async function readJson(res){try{return await res.json()}catch{return null}}function retryAfterMsFromHeader(res){const raw=res.headers.get("retry-after");if(raw===null)return void 0;const seconds=Number.parseInt(raw,10);if(!Number.isFinite(seconds)||seconds<=0)return void 0;return seconds*1e3}function esignPlaneThrowCode(err,fallback){return isChecktivError(err)&&err.code==="session_parked"?"session_parked":fallback}function warnEsignThrow(site,err){console.warn(`[Checktiv] esign ${site} threw.`,err);}function reportEsignThrow(site,err,fallback){const reported=esignPlaneThrowCode(err,fallback);if(!isChecktivError(err)||err.code!==reported)warnEsignThrow(site,err);return reported}async function postCeremonyEvent(d,rt,stepId,body){let res;try{res=await withTokenRetry(d.ctx.tokens,token=>d.fetchImpl(d.ctx.apiBaseOrigin+esignEventsPath(stepId),{method:"POST",headers:dataPlaneHeaders(d.ctx,token,{withJsonBody:true}),body:JSON.stringify(body)}));}catch(err){d.fail(reportEsignThrow("ceremony event",err,"sdk_load_failed"));return {kind:"failed"}}if(!res.ok){return await d.refuseAttempt(rt,res,stepId,"sdk_load_failed")}const parsed=await readJson(res);if(!rt.isEsignProjectionShape(parsed)){d.fail("sdk_load_failed");return {kind:"failed"}}return {kind:"ok",value:parsed}}async function fetchBundleOnce(d,rt,stepId,quiet=false){let res;try{res=await withTokenRetry(d.ctx.tokens,token=>d.fetchImpl(d.ctx.apiBaseOrigin+esignBundlePath(stepId,{locale:d.ctx.locale}),{method:"GET",headers:dataPlaneHeaders(d.ctx,token)}));}catch(err){const code=reportEsignThrow("bundle read",err,"sdk_load_failed");if(!quiet)d.fail(code);return {kind:"failed"}}if(!res.ok){if(!quiet){if(res.status===409)d.fail("session_parked");else d.failFromStatus(res.status,"sdk_load_failed");}return {kind:"failed"}}const parsed=await readJson(res);const pending=parseEsignPending(parsed);if(pending!==null)return {kind:"pending",retryAfterMs:pending.retryAfterMs};if(!rt.isEsignBundleShape(parsed)){if(!quiet)d.fail("sdk_load_failed");return {kind:"failed"}}return {kind:"ok",value:parsed}}async function mintSignContext(d,stepId){let res;try{res=await withTokenRetry(d.ctx.tokens,token=>d.fetchImpl(d.ctx.apiBaseOrigin+esignContextMintPath(stepId,{locale:d.ctx.locale}),{method:"POST",headers:dataPlaneHeaders(d.ctx,token,{withJsonBody:true}),body:"{}"}));}catch(err){d.fail(reportEsignThrow("context mint",err,"sdk_load_failed"));return null}if(!res.ok){d.failFromStatus(res.status,"sdk_load_failed");return null}const mint=parseEsignMint(await readJson(res));if(mint===null){d.fail("sdk_load_failed");return null}return mint}async function submitOnce(d,rt,sessionId,stepId,body){let res;try{res=await withTokenRetry(d.ctx.tokens,token=>d.fetchImpl(d.ctx.apiBaseOrigin+stepSubmitPath(sessionId,stepId),{method:"POST",headers:dataPlaneHeaders(d.ctx,token,{withJsonBody:true}),body:JSON.stringify(body)}));}catch(err){warnEsignThrow("step submit",err);d.fail("submit_failed");return {kind:"failed"}}if(d.isDestroyed())return {kind:"failed"};if(!res.ok)return await d.refuseAttempt(rt,res,stepId,"submit_failed");return {kind:"ok",value:true}}async function postConsentAct(d,rt,stepId,action){let res;try{res=await withTokenRetry(d.ctx.tokens,token=>d.fetchImpl(d.ctx.apiBaseOrigin+esignConsentWithdrawPath(stepId),{method:"POST",headers:dataPlaneHeaders(d.ctx,token,{withJsonBody:true}),body:JSON.stringify(rt.buildEsignConsentActBody(action,{locale:d.ctx.locale}))}));}catch(err){warnEsignThrow("consumer act",err);return {kind:"failed"}}if(!res.ok)return {kind:"failed"};const outcome=rt.parseEsignConsentActBody(await readJson(res));if(outcome===null)return {kind:"failed"};return {kind:"ok",outcome}}function fetchEsignDocument(d,stepId,documentId){return withTokenRetry(d.ctx.tokens,token=>d.fetchImpl(d.ctx.apiBaseOrigin+esignDocumentPath(stepId,documentId),{method:"GET",headers:dataPlaneHeaders(d.ctx,token)}))}function createEsignErrorEvent(code){return {type:"checktiv.esign.error",error:createChecktivError(code)}}var ESIGN_FAILURE_STATE={token_expired:"token_expired",protocol_mismatch:"protocol_mismatch",session_expired:"error",upload_failed:"error",sdk_load_failed:"error",session_parked:"error",submit_failed:"submit_error",wrong_token_type:"error"};var ESIGN_PANEL_SILENT_ATTR="data-checktiv-esign-silent";var MARK={info:"i",ok:"\u2713",warn:"!",stop:"\u2715",neutral:"\u2022"};var IN_CEREMONY={tone:"info",mark:MARK.info,actions:["reload"]};var ESIGN_PANEL_SPEC={preparing:{tone:"info",mark:MARK.info,actions:[]},consent:IN_CEREMONY,read:IN_CEREMONY,scroll_incomplete:IN_CEREMONY,adopt:IN_CEREMONY,age_gate:IN_CEREMONY,explain:IN_CEREMONY,sign:IN_CEREMONY,decline:IN_CEREMONY,withdraw:IN_CEREMONY,obscured:IN_CEREMONY,age_blocked:{tone:"warning",mark:MARK.warn,actions:[]},frame_blocked:{tone:"danger",mark:MARK.stop,actions:["reload","printAndSign"]},conflict:{tone:"warning",mark:MARK.warn,actions:["reload"]},token_expired:{tone:"warning",mark:MARK.warn,actions:["reload"]},protocol_mismatch:{tone:"danger",mark:MARK.stop,actions:["reload"]},error:{tone:"danger",mark:MARK.stop,actions:["reload","help"]},submit_error:{tone:"danger",mark:MARK.stop,actions:["reloadToCheck"]},terminal_signed:{tone:"success",mark:MARK.ok,actions:[]},terminal_declined:{tone:"neutral",mark:MARK.neutral,actions:["help"]},terminal_voided:{tone:"warning",mark:MARK.warn,actions:["help"]},terminal_expired:{tone:"warning",mark:MARK.warn,actions:["help"]},terminal_withdrawn:{tone:"neutral",mark:MARK.neutral,actions:["help"]}};var TONE_CLASS={info:"ctv-esign-callout-info",success:"ctv-esign-callout-success",warning:"ctv-esign-callout-warning",danger:"ctv-esign-callout-danger",neutral:""};var ACTION_WORD={reload:"reload",reloadToCheck:"reloadToCheck",printAndSign:"printAndSign",help:"getHelp"};function isTerminalPanelState(state){return Object.prototype.hasOwnProperty.call(ESIGN_TERMINAL_STATUS_KEY,state)}function createEsignStatePanel(deps){const doc=deps.container.ownerDocument;let panel=null;let body=null;let mark=null;let title=null;let text=null;let skeleton=null;let actions=null;function button(label,primary,onClick){const el=doc.createElement("button");el.type="button";el.className=`ctv-esign-btn ctv-esign-btn-${primary?"primary":"ghost"}`;el.textContent=label;el.addEventListener("click",onClick);return el}function ensurePanel(){const existing=panel;if(existing!==null)return existing;const root=doc.createElement("div");root.setAttribute("data-checktiv-esign-panel","");const markEl=doc.createElement("span");markEl.className="ctv-esign-callout-mark";markEl.setAttribute("aria-hidden","true");const bodyEl=doc.createElement("div");bodyEl.className="ctv-esign-callout-body";const titleEl=doc.createElement("p");titleEl.className="ctv-esign-callout-title";titleEl.setAttribute("data-checktiv-esign-terminal-status","");const textEl=doc.createElement("p");textEl.className="ctv-esign-callout-text";textEl.setAttribute("data-checktiv-esign-status","");textEl.setAttribute("role","status");const actionsEl=doc.createElement("div");actionsEl.className="ctv-esign-callout-actions";actionsEl.setAttribute("data-checktiv-esign-actions","");bodyEl.append(titleEl,textEl,actionsEl);root.append(markEl,bodyEl);deps.container.appendChild(root);panel=root;body=bodyEl;mark=markEl;title=titleEl;text=textEl;actions=actionsEl;return root}function renderSkeleton(column){if(skeleton!==null)return;const el=doc.createElement("div");el.className="ctv-esign-skeleton";el.setAttribute("aria-hidden","true");el.setAttribute("data-checktiv-esign-preparing-skeleton","");column.insertBefore(el,column.firstChild);skeleton=el;}function removeSkeleton(){skeleton?.remove();skeleton=null;}function silence(root){root.className="";root.removeAttribute("data-checktiv-esign-tone");root.setAttribute(ESIGN_PANEL_SILENT_ATTR,"");if(mark!==null){mark.textContent="";mark.hidden=true;}if(title!==null){title.textContent="";title.hidden=true;}if(text!==null)text.textContent="";if(actions!==null){actions.replaceChildren();actions.hidden=true;}removeSkeleton();}function isActionLive(action,model){if(action==="help")return deps.on.onHelp!==void 0;if(action==="printAndSign")return model.hasDocuments;return true}function actionWord(action){return resolveEsignLabel(deps.copy,ACTION_WORD[action])}function runAction(action,state){if(action==="help")deps.on.onHelp?.(state);else if(action==="printAndSign")deps.on.onPrintAndSign();else deps.on.onReload();}return {render(model){const state=model.state;if(state===null||!model.owned){if(panel===null)return;silence(panel);return}const spec=ESIGN_PANEL_SPEC[state];const root=ensurePanel();root.removeAttribute(ESIGN_PANEL_SILENT_ATTR);const loading=state==="preparing";const tone=TONE_CLASS[spec.tone];root.className=loading?"ctv-esign-loading":`ctv-esign-callout${tone===""?"":` ${tone}`}`;root.setAttribute("data-checktiv-esign-tone",spec.tone);if(mark!==null){mark.textContent=spec.mark;mark.hidden=loading;}const terminal=isTerminalPanelState(state);if(title!==null){title.textContent=terminal?resolveEsignShellCopy(deps.copy,ESIGN_TERMINAL_STATUS_KEY[state]):"";title.hidden=!terminal;}if(text!==null)text.textContent=resolveEsignCopy(deps.copy,state);if(loading&&!model.hasFrame&&body!==null)renderSkeleton(body);else removeSkeleton();if(actions===null)return;actions.replaceChildren();const late=state==="preparing"&&(model.preparingStalled||model.polls*2>=ESIGN_PREPARING_MAX_ATTEMPTS);const wanted=late?["reload"]:spec.actions;let primary=true;for(const action of wanted){if(!isActionLive(action,model))continue;const control=button(actionWord(action),primary,()=>runAction(action,state));control.setAttribute("data-checktiv-esign-action",action);actions.appendChild(control);primary=false;}if(model.printAndSignStarted){const note=doc.createElement("p");note.className="ctv-esign-callout-text";note.setAttribute("data-checktiv-esign-print-note","");note.textContent=resolveEsignDocumentCopy(deps.copy,"printAndSignStarted");actions.appendChild(note);}actions.hidden=actions.childElementCount===0;},destroy(){panel?.remove();panel=null;body=null;skeleton=null;}}}function applyEmbedTheme(theme,root,surface="inherit"){root.dataset.theme=theme.colorMode;root.style.setProperty("color-scheme",theme.colorMode);applyEmbedSurfacePaint(root,surface);const brand=theme.brandTokens;if(!brand)return;root.style.setProperty("--theme-primary",brand.primary);root.style.setProperty("--theme-primary-hover",brand.primaryHover);root.style.setProperty("--theme-on-primary",brand.onPrimary);root.style.setProperty("--theme-secondary",brand.secondary);root.style.setProperty("--theme-ring",brand.primary);}function applyEmbedSurfacePaint(root,surface){if(surface==="inherit")return;root.style.setProperty("background-color",surface==="transparent"?"transparent":"var(--theme-bg)");}var STYLE_ELEMENT_ID="ctv-esign-styles";var STYLE_MARKER_ATTR="data-ctv-esign-styles";var ESIGN_MODE_ATTR="data-ctv-esign-mode";var ESIGN_FRAME_CLASS="ctv-esign-frame";var delivery="none";var SCOPE_RULES=`
|
|
14
|
+
.ctv-esign {
|
|
15
|
+
box-sizing: border-box;
|
|
16
|
+
display: flex;
|
|
17
|
+
flex-direction: column;
|
|
18
|
+
gap: 0.75rem;
|
|
19
|
+
width: 100%;
|
|
20
|
+
padding: 1rem;
|
|
21
|
+
background-color: var(--theme-surface-1, #ffffff);
|
|
22
|
+
color: var(--theme-on-surface-1, #16181d);
|
|
23
|
+
border: 1px solid var(--theme-border, hsla(225, 12%, 10%, 0.1));
|
|
24
|
+
border-radius: var(--theme-shape-radius, 0.75rem);
|
|
25
|
+
font-family: var(--theme-font-family-sans, 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Helvetica Neue', Arial, sans-serif);
|
|
26
|
+
font-size: 0.875rem;
|
|
27
|
+
line-height: 1.5;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.ctv-esign *,
|
|
31
|
+
.ctv-esign *::before,
|
|
32
|
+
.ctv-esign *::after {
|
|
33
|
+
box-sizing: inherit;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.ctv-esign-sr-only {
|
|
37
|
+
position: absolute;
|
|
38
|
+
width: 1px;
|
|
39
|
+
height: 1px;
|
|
40
|
+
padding: 0;
|
|
41
|
+
margin: -1px;
|
|
42
|
+
overflow: hidden;
|
|
43
|
+
clip-path: inset(50%);
|
|
44
|
+
white-space: nowrap;
|
|
45
|
+
border: 0;
|
|
46
|
+
}
|
|
47
|
+
`;var PRIMITIVE_RULES=`
|
|
48
|
+
.ctv-esign-card {
|
|
49
|
+
background-color: var(--theme-surface-1, #ffffff);
|
|
50
|
+
color: var(--theme-on-surface-1, #16181d);
|
|
51
|
+
border: 1px solid var(--theme-border, hsla(225, 12%, 10%, 0.1));
|
|
52
|
+
border-radius: var(--theme-shape-radius, 0.75rem);
|
|
53
|
+
padding: 2rem;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.ctv-esign-input {
|
|
57
|
+
width: 100%;
|
|
58
|
+
background-color: var(--theme-surface-2, #f2f2ee);
|
|
59
|
+
color: var(--theme-on-surface-2, #16181d);
|
|
60
|
+
border: 1px solid var(--theme-border-strong, hsla(225, 12%, 10%, 0.18));
|
|
61
|
+
border-radius: var(--theme-button-border-radius, 0.4rem);
|
|
62
|
+
padding: 0.6rem 0.8rem;
|
|
63
|
+
font-size: max(16px, var(--font-size-base, 14px));
|
|
64
|
+
transition: border-color var(--theme-transition, 0.2s ease-in-out), background-color var(--theme-transition, 0.2s ease-in-out);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.ctv-esign-input::placeholder {
|
|
68
|
+
color: var(--theme-on-surface-2-muted, hsla(225, 12%, 10%, 0.62));
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.ctv-esign-input:hover {
|
|
72
|
+
border-color: var(--theme-ring, #2563eb);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.ctv-esign-input:focus-visible {
|
|
76
|
+
outline: 2px solid var(--theme-ring, #2563eb);
|
|
77
|
+
outline-offset: 2px;
|
|
78
|
+
border-color: var(--theme-ring, #2563eb);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
@media (forced-colors: active) {
|
|
82
|
+
.ctv-esign-input:focus-visible {
|
|
83
|
+
outline-color: Highlight;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.ctv-esign-input:is([type='date'], [type='datetime-local'], [type='month'], [type='time'], [type='week']) {
|
|
88
|
+
min-width: 0;
|
|
89
|
+
max-width: 100%;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.ctv-esign-btn {
|
|
93
|
+
display: inline-flex;
|
|
94
|
+
align-items: center;
|
|
95
|
+
justify-content: center;
|
|
96
|
+
gap: 0.5rem;
|
|
97
|
+
padding: 0.65rem 1.1rem;
|
|
98
|
+
border-radius: var(--theme-button-border-radius, 0.4rem);
|
|
99
|
+
font-size: var(--font-size-sm, 12px);
|
|
100
|
+
font-weight: 600;
|
|
101
|
+
letter-spacing: 0.01em;
|
|
102
|
+
border: 1px solid transparent;
|
|
103
|
+
cursor: pointer;
|
|
104
|
+
text-decoration: none;
|
|
105
|
+
transition: background-color var(--theme-transition, 0.2s ease-in-out), color var(--theme-transition, 0.2s ease-in-out), border-color var(--theme-transition, 0.2s ease-in-out), transform var(--theme-transition, 0.2s ease-in-out);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.ctv-esign-btn:active {
|
|
109
|
+
transform: translateY(1px);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.ctv-esign-btn:disabled {
|
|
113
|
+
opacity: 0.55;
|
|
114
|
+
cursor: not-allowed;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.ctv-esign-btn-primary,
|
|
118
|
+
a.ctv-esign-btn-primary {
|
|
119
|
+
background-color: var(--theme-primary, #2563eb);
|
|
120
|
+
color: var(--theme-on-primary, #ffffff);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.ctv-esign-btn-primary:hover:not(:disabled),
|
|
124
|
+
a.ctv-esign-btn-primary:hover {
|
|
125
|
+
background-color: var(--theme-primary-hover, #1d4ed8);
|
|
126
|
+
color: var(--theme-on-primary, #ffffff);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
.ctv-esign-btn-ghost,
|
|
130
|
+
a.ctv-esign-btn-ghost {
|
|
131
|
+
background-color: transparent;
|
|
132
|
+
color: var(--theme-on-bg, #121316);
|
|
133
|
+
border-color: var(--theme-border-strong, hsla(225, 12%, 10%, 0.18));
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.ctv-esign-btn-ghost:hover:not(:disabled),
|
|
137
|
+
a.ctv-esign-btn-ghost:hover {
|
|
138
|
+
background-color: var(--theme-surface-2, #f2f2ee);
|
|
139
|
+
color: var(--theme-on-bg, #121316);
|
|
140
|
+
border-color: var(--theme-ring, #2563eb);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.ctv-esign-btn-danger,
|
|
144
|
+
a.ctv-esign-btn-danger {
|
|
145
|
+
background-color: var(--theme-danger, #b91c1c);
|
|
146
|
+
color: var(--theme-on-danger, #ffffff);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.ctv-esign-btn-danger:hover:not(:disabled),
|
|
150
|
+
a.ctv-esign-btn-danger:hover {
|
|
151
|
+
background-color: var(--theme-danger-hover, #991b1b);
|
|
152
|
+
color: var(--theme-on-danger, #ffffff);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
@media (max-width: 519.98px) {
|
|
156
|
+
.ctv-esign-btn,
|
|
157
|
+
.ctv-esign-input {
|
|
158
|
+
min-height: 44px;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
`;var GATED_CONTROL_RULES=`
|
|
162
|
+
.ctv-esign-btn[aria-disabled='true'] {
|
|
163
|
+
opacity: 0.55;
|
|
164
|
+
cursor: not-allowed;
|
|
165
|
+
}
|
|
166
|
+
`;var BAR_RULES=`
|
|
167
|
+
.ctv-esign-bar {
|
|
168
|
+
display: flex;
|
|
169
|
+
align-items: center;
|
|
170
|
+
flex-wrap: wrap;
|
|
171
|
+
gap: 0.5rem 0.75rem;
|
|
172
|
+
padding: 0.625rem 0.875rem;
|
|
173
|
+
background-color: var(--theme-surface-2, #f2f2ee);
|
|
174
|
+
color: var(--theme-on-surface-2, #16181d);
|
|
175
|
+
border: 1px solid var(--theme-border, hsla(225, 12%, 10%, 0.1));
|
|
176
|
+
border-radius: var(--theme-button-border-radius, 0.4rem);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
.ctv-esign-bar-title {
|
|
180
|
+
flex: 1 1 auto;
|
|
181
|
+
min-width: 0;
|
|
182
|
+
margin: 0;
|
|
183
|
+
font-size: 0.9375rem;
|
|
184
|
+
font-weight: 600;
|
|
185
|
+
line-height: 1.3;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.ctv-esign-bar-actions {
|
|
189
|
+
display: flex;
|
|
190
|
+
flex: none;
|
|
191
|
+
align-items: center;
|
|
192
|
+
gap: 0.5rem;
|
|
193
|
+
margin-left: auto;
|
|
194
|
+
}
|
|
195
|
+
`;var CALLOUT_RULES=`
|
|
196
|
+
.ctv-esign-callout {
|
|
197
|
+
display: flex;
|
|
198
|
+
align-items: flex-start;
|
|
199
|
+
gap: 0.625rem;
|
|
200
|
+
padding: 0.75rem 0.875rem;
|
|
201
|
+
background-color: var(--theme-surface-1, #ffffff);
|
|
202
|
+
color: var(--theme-on-surface-1, #16181d);
|
|
203
|
+
border: 1px solid var(--theme-border, hsla(225, 12%, 10%, 0.1));
|
|
204
|
+
border-left-width: 3px;
|
|
205
|
+
border-radius: var(--theme-button-border-radius, 0.4rem);
|
|
206
|
+
line-height: 1.5;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
.ctv-esign-callout-mark {
|
|
210
|
+
flex: none;
|
|
211
|
+
line-height: 1.5;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
.ctv-esign-callout-body {
|
|
215
|
+
flex: 1 1 auto;
|
|
216
|
+
min-width: 0;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
.ctv-esign-callout-title {
|
|
220
|
+
margin: 0;
|
|
221
|
+
font-size: 0.9375rem;
|
|
222
|
+
font-weight: 600;
|
|
223
|
+
line-height: 1.35;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
.ctv-esign-callout-text {
|
|
227
|
+
margin: 0.25rem 0 0;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
.ctv-esign-callout-actions {
|
|
231
|
+
display: flex;
|
|
232
|
+
flex-wrap: wrap;
|
|
233
|
+
gap: 0.5rem;
|
|
234
|
+
margin-top: 0.625rem;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
.ctv-esign-callout-info {
|
|
238
|
+
border-left-color: var(--theme-primary, #2563eb);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
.ctv-esign-callout-success {
|
|
242
|
+
border-left-color: var(--theme-success, #3f8f46);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
.ctv-esign-callout-warning {
|
|
246
|
+
border-left-color: var(--theme-warning, #d97706);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
.ctv-esign-callout-danger {
|
|
250
|
+
border-left-color: var(--theme-danger, #b91c1c);
|
|
251
|
+
}
|
|
252
|
+
`;var MENU_RULES=`
|
|
253
|
+
.ctv-esign-menu {
|
|
254
|
+
display: flex;
|
|
255
|
+
flex-direction: column;
|
|
256
|
+
margin: 0.375rem 0 0;
|
|
257
|
+
padding: 0.25rem;
|
|
258
|
+
list-style: none;
|
|
259
|
+
background-color: var(--theme-surface-1, #ffffff);
|
|
260
|
+
color: var(--theme-on-surface-1, #16181d);
|
|
261
|
+
border: 1px solid var(--theme-border-strong, hsla(225, 12%, 10%, 0.18));
|
|
262
|
+
border-radius: var(--theme-button-border-radius, 0.4rem);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
.ctv-esign-menu-item {
|
|
266
|
+
display: flex;
|
|
267
|
+
align-items: center;
|
|
268
|
+
gap: 0.5rem;
|
|
269
|
+
width: 100%;
|
|
270
|
+
padding: 0.5rem 0.625rem;
|
|
271
|
+
background-color: transparent;
|
|
272
|
+
color: inherit;
|
|
273
|
+
border: 0;
|
|
274
|
+
border-radius: 0.25rem;
|
|
275
|
+
font: inherit;
|
|
276
|
+
text-align: left;
|
|
277
|
+
cursor: pointer;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
.ctv-esign-menu-item:hover:not([aria-disabled='true']) {
|
|
281
|
+
background-color: var(--theme-surface-2, #f2f2ee);
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
@media (max-width: 519.98px) {
|
|
285
|
+
.ctv-esign-menu-item {
|
|
286
|
+
min-height: 44px;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
`;var TILE_RULES=`
|
|
290
|
+
.ctv-esign-tiles {
|
|
291
|
+
display: grid;
|
|
292
|
+
grid-template-columns: repeat(auto-fit, minmax(8.5rem, 1fr));
|
|
293
|
+
gap: 0.5rem;
|
|
294
|
+
margin: 0;
|
|
295
|
+
padding: 0;
|
|
296
|
+
border: 0;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
.ctv-esign-tile {
|
|
300
|
+
display: flex;
|
|
301
|
+
align-items: center;
|
|
302
|
+
justify-content: center;
|
|
303
|
+
gap: 0.375rem;
|
|
304
|
+
min-height: 3.25rem;
|
|
305
|
+
padding: 0.5rem 0.75rem;
|
|
306
|
+
background-color: var(--theme-surface-1, #ffffff);
|
|
307
|
+
color: var(--theme-on-surface-1, #16181d);
|
|
308
|
+
border: 1px solid var(--theme-border-strong, hsla(225, 12%, 10%, 0.18));
|
|
309
|
+
border-radius: var(--theme-button-border-radius, 0.4rem);
|
|
310
|
+
text-align: center;
|
|
311
|
+
cursor: pointer;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
.ctv-esign-tile-selected {
|
|
315
|
+
border-width: 2px;
|
|
316
|
+
border-color: var(--theme-primary, #2563eb);
|
|
317
|
+
padding: calc(0.5rem - 1px) calc(0.75rem - 1px);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
.ctv-esign-tile-mark {
|
|
321
|
+
flex: none;
|
|
322
|
+
}
|
|
323
|
+
`;var CHECKBOX_RULES=`
|
|
324
|
+
.ctv-esign-check {
|
|
325
|
+
display: flex;
|
|
326
|
+
align-items: flex-start;
|
|
327
|
+
gap: 0.625rem;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
.ctv-esign-check-input {
|
|
331
|
+
flex: none;
|
|
332
|
+
width: 1.125rem;
|
|
333
|
+
height: 1.125rem;
|
|
334
|
+
margin: 0.1875rem 0 0;
|
|
335
|
+
accent-color: var(--theme-primary, #2563eb);
|
|
336
|
+
cursor: pointer;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
.ctv-esign-check-label {
|
|
340
|
+
flex: 1 1 auto;
|
|
341
|
+
min-width: 0;
|
|
342
|
+
line-height: 1.5;
|
|
343
|
+
cursor: pointer;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
@media (max-width: 519.98px) {
|
|
347
|
+
.ctv-esign-check-input {
|
|
348
|
+
width: 24px;
|
|
349
|
+
height: 24px;
|
|
350
|
+
margin-top: 0;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
`;var ESIGN_PLACEHOLDER_BOX="min(70dvh, 480px)";var SKELETON_RULES=`
|
|
354
|
+
.ctv-esign-loading {
|
|
355
|
+
display: block;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
.ctv-esign-skeleton {
|
|
359
|
+
position: relative;
|
|
360
|
+
overflow: hidden;
|
|
361
|
+
width: 100%;
|
|
362
|
+
height: ${ESIGN_PLACEHOLDER_BOX};
|
|
363
|
+
margin: 0 0 0.625rem;
|
|
364
|
+
background-color: var(--theme-surface-2, #f2f2ee);
|
|
365
|
+
border-radius: var(--theme-button-border-radius, 0.4rem);
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
.ctv-esign-skeleton::before {
|
|
369
|
+
content: '';
|
|
370
|
+
position: absolute;
|
|
371
|
+
inset: 0;
|
|
372
|
+
background: linear-gradient(100deg, transparent 30%, rgba(255, 255, 255, 0.22) 50%, transparent 70%);
|
|
373
|
+
background-size: 200% 100%;
|
|
374
|
+
animation: ctv-esign-skeleton-sweep 1.4s ease-in-out infinite;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
@keyframes ctv-esign-skeleton-sweep {
|
|
378
|
+
from {
|
|
379
|
+
background-position: 200% 0;
|
|
380
|
+
}
|
|
381
|
+
to {
|
|
382
|
+
background-position: -200% 0;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
@media (prefers-reduced-motion: reduce) {
|
|
387
|
+
.ctv-esign-skeleton::before {
|
|
388
|
+
animation: none;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
`;var FRAME_RULES=`
|
|
392
|
+
.ctv-esign-frame {
|
|
393
|
+
width: 100%;
|
|
394
|
+
border: 0;
|
|
395
|
+
}
|
|
396
|
+
`;var DARK_TOKENS=`
|
|
397
|
+
--theme-on-bg: #f3f3ef;
|
|
398
|
+
--theme-surface-1: #15171c;
|
|
399
|
+
--theme-on-surface-1: #f3f3ef;
|
|
400
|
+
--theme-on-surface-1-muted: hsla(40, 20%, 95%, 0.6);
|
|
401
|
+
--theme-surface-2: #1c1e24;
|
|
402
|
+
--theme-on-surface-2: #f3f3ef;
|
|
403
|
+
--theme-on-surface-2-muted: hsla(40, 20%, 95%, 0.6);
|
|
404
|
+
--theme-primary: #82a6f4;
|
|
405
|
+
--theme-primary-hover: #a8c1f7;
|
|
406
|
+
--theme-on-primary: #0b0c0f;
|
|
407
|
+
--theme-ring: #82a6f4;
|
|
408
|
+
--theme-success: #5fbe6d;
|
|
409
|
+
--theme-warning: #fbbf24;
|
|
410
|
+
--theme-danger: #fca5a5;
|
|
411
|
+
--theme-danger-hover: #f87171;
|
|
412
|
+
--theme-on-danger: #0b0c0f;
|
|
413
|
+
--theme-border: hsla(40, 20%, 95%, 0.08);
|
|
414
|
+
--theme-border-strong: hsla(40, 20%, 95%, 0.16);
|
|
415
|
+
`;var DARK_RULES=`
|
|
416
|
+
@media (prefers-color-scheme: dark) {
|
|
417
|
+
.ctv-esign:not([${ESIGN_MODE_ATTR}='light']) {
|
|
418
|
+
color-scheme: dark;
|
|
419
|
+
${DARK_TOKENS} }
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
.ctv-esign[${ESIGN_MODE_ATTR}='dark'] {
|
|
423
|
+
color-scheme: dark;
|
|
424
|
+
${DARK_TOKENS}}
|
|
425
|
+
`;var ESIGN_STYLESHEET=[SCOPE_RULES,PRIMITIVE_RULES,GATED_CONTROL_RULES,BAR_RULES,CALLOUT_RULES,MENU_RULES,TILE_RULES,CHECKBOX_RULES,SKELETON_RULES,FRAME_RULES,DARK_RULES].join("\n");var adoptedSheet=null;function supportsConstructableStyleSheets(){return typeof CSSStyleSheet==="function"&&typeof CSSStyleSheet.prototype.replaceSync==="function"&&"adoptedStyleSheets"in Document.prototype}function adoptConstructableStyleSheet(){try{if(adoptedSheet===null){adoptedSheet=new CSSStyleSheet;adoptedSheet.replaceSync(ESIGN_STYLESHEET);}if(!document.adoptedStyleSheets.includes(adoptedSheet)){document.adoptedStyleSheets=[...document.adoptedStyleSheets,adoptedSheet];}return true}catch{return false}}function injectLegacyStyleElement(){if(document.getElementById(STYLE_ELEMENT_ID)!==null)return;const style=document.createElement("style");style.id=STYLE_ELEMENT_ID;style.setAttribute(STYLE_MARKER_ATTR,"");style.textContent=ESIGN_STYLESHEET;document.head.appendChild(style);}function ensureEsignStyles(scope,theme){if(typeof document==="undefined")return;delivery=supportsConstructableStyleSheets()&&adoptConstructableStyleSheet()?"adopted":"element";if(delivery==="element")injectLegacyStyleElement();applyEmbedTheme(theme,scope);delete scope.dataset.theme;scope.setAttribute(ESIGN_MODE_ATTR,theme.colorMode);}function applyEsignFrameBox(frame){frame.className=ESIGN_FRAME_CLASS;if(delivery==="adopted")return;frame.style.width="100%";frame.style.border="0";}function createEsignLoaderChrome(d){const shell=d.container===null?null:d.container.ownerDocument.createElement("div");if(d.container!==null&&shell!==null){shell.setAttribute("data-checktiv-esign-shell","");d.container.appendChild(shell);}const statePanel=shell===null?null:createEsignStatePanel({container:shell,copy:d.copy,on:statePanelHandlers()});let chrome=null;let runtime=null;let downloadFailed=false;let downloadRemoved=false;let printAndSignStarted=false;let preparingStalled=false;let stallTimerArmed=false;function statePanelHandlers(){return {onReload:()=>d.reload(),onPrintAndSign:()=>{printAndSignStarted=true;runFirstDocumentAct();},onHelp:d.onHelp}}function runFirstDocumentAct(){const first=d.readCeremonyView().documents[0];if(runtime===null||first===void 0)return;void fetchAndDeliverDocument(runtime,first.documentId);}function render(){if(d.isDestroyed())return;const view=d.readCeremonyView();armStallTimer(view.state);statePanel?.render({state:view.state,owned:view.owned,polls:view.polls,hasDocuments:view.documents.length>0,hasFrame:view.hasFrame,preparingStalled,printAndSignStarted});chrome?.render({documents:view.documents,owned:view.owned,framePaintsTopBar:view.hasFrame&&view.state!=="withdraw",downloadFailed,downloadRemoved});if(shell===null)return;const painted=[...shell.children].some(el=>!el.hasAttribute(ESIGN_PANEL_SILENT_ATTR));shell.className=painted?"ctv-esign":"";if(!painted)return;ensureEsignStyles(shell,d.readTheme());}function armStallTimer(state){if(stallTimerArmed||state!=="preparing")return;stallTimerArmed=true;d.schedule(()=>{preparingStalled=true;render();},ESIGN_PREPARING_STALL_MS);}async function fetchAndDeliverDocument(rt,documentId){const stepId=d.getStepId();const container=d.container;if(stepId===null||container===null)return;downloadFailed=false;downloadRemoved=false;render();let res;try{res=await fetchEsignDocument(d.plane,stepId,documentId);}catch(err){warnEsignThrow("document download",err);downloadFailed=true;render();return}if(d.isDestroyed())return;if(isCredentialUnverifiable(res)){d.plane.fail("token_expired");return}if(res.ok&&(res.headers.get("content-type")??"").includes("application/json")){const body=await res.json().catch(()=>null);if(d.isDestroyed())return;downloadRemoved=rt.isEsignDocumentRemovedBody(body);downloadFailed=!downloadRemoved;render();return}let delivered=false;if(res.ok){const blobDeps={container,schedule:(cb,ms)=>d.schedule(cb,ms)};try{const blob=await res.blob();delivered=rt.saveBlobAsDownload(blob,rt.filenameFromDisposition(res.headers.get("content-disposition")),blobDeps);}catch(err){warnEsignThrow("document download",err);delivered=false;}}if(delivered)return;downloadFailed=true;render();}return {ensure(rt){if(chrome!==null||shell===null)return;runtime=rt;chrome=rt.createEsignChrome({container:shell,copy:d.copy,on:{onDownload:documentId=>void fetchAndDeliverDocument(rt,documentId)}});},render,runDocumentAct(documentId){if(runtime===null)return;void fetchAndDeliverDocument(runtime,documentId);},destroy(){chrome?.destroy();statePanel?.destroy();shell?.remove();}}}var ceremonyRuntimePromise=null;function loadCeremonyRuntime(){ceremonyRuntimePromise??(ceremonyRuntimePromise=import('./esign/ceremony-runtime.js').catch(error=>{ceremonyRuntimePromise=null;throw error}));return ceremonyRuntimePromise}function resolveEsignTheme(ctxTheme,opts){return resolveCaptureTheme(ctxTheme,opts)}function watchEsignHostTheme(deps){const teardowns=[];if(typeof deps.win.matchMedia==="function"){try{const query=deps.win.matchMedia("(prefers-color-scheme: dark)");if(typeof query.addEventListener==="function"){const onQuery=()=>deps.onChange();query.addEventListener("change",onQuery);teardowns.push(()=>query.removeEventListener("change",onQuery));}}catch{}}const ObserverCtor=deps.win.MutationObserver;if(typeof ObserverCtor==="function"){const observer=new ObserverCtor(()=>deps.onChange());observer.observe(deps.root,{attributes:true,attributeFilter:["data-theme"]});teardowns.push(()=>observer.disconnect());}return ()=>{while(teardowns.length>0)teardowns.pop()?.();}}function createEsign(ctx,opts){const fetchImpl=(input,init)=>(opts.fetchImpl??fetch)(input,init);const scheduler=opts.schedule??{set:(cb,ms)=>setTimeout(cb,ms),clear:handle=>clearTimeout(handle)};const emit=e=>opts.onEvent?.(e);let destroyed=false;let transport=null;let frame=null;let postToFrame=null;let sentTheme=null;let stopThemeWatch=null;let documentExtent=null;let readStartPosted=false;let stopReadWatch=null;let pollTimer=null;let cancelFrameDeadline=null;let resolvePoll=null;let bundle=null;let projection=null;let currentState=null;let resumeAttempted=false;let stepIdOfCurrentMount=null;let sessionIdOfCurrentMount=null;const container=resolveTarget(opts.target);let loaderOwnsCurrentSentence=false;let preparingPolls=0;const setState=(state,loaderOwnsSentence=false)=>{if(destroyed)return;currentState=state;loaderOwnsCurrentSentence=frame===null||loaderOwnsSentence;if(frame!==null){if(loaderOwnsSentence)frame.setAttribute("inert","");else frame.removeAttribute("inert");frame.style.opacity=loaderOwnsSentence?"0.5":"";}loaderChrome.render();emit({type:"checktiv.esign.state",state});};const fail=code=>{if(destroyed)return;emit(createEsignErrorEvent(code));setState(ESIGN_FAILURE_STATE[code],true);};const failFromStatus=(httpStatus,fallback)=>{fail(mapHttpStatusToError(httpStatus)==="token_expired"?"token_expired":fallback);};const plane={ctx,fetchImpl,fail,failFromStatus,isDestroyed:()=>destroyed,refuseAttempt};const loaderChrome=createEsignLoaderChrome({container,copy:opts.copy,plane,getStepId:()=>stepIdOfCurrentMount,isDestroyed:()=>destroyed,schedule:(cb,ms)=>void scheduler.set(cb,ms),reload:()=>container?.ownerDocument.defaultView?.location.reload(),onHelp:opts.onRequestHelp,readTheme:()=>resolveEsignTheme(ctx.theme),readCeremonyView:()=>({state:currentState,documents:bundle?.documents??[],owned:loaderOwnsCurrentSentence,polls:preparingPolls,hasFrame:frame!==null})});void(async()=>{try{await load();}catch(err){warnEsignThrow("load sequence",err);fail("sdk_load_failed");}})();async function load(){setState("preparing");void loadCeremonyRuntime().catch(()=>void 0);const identity=await resolveIdentity();if(destroyed)return;if(identity===null){return}const{sessionId,stepId}=identity;stepIdOfCurrentMount=stepId;sessionIdOfCurrentMount=sessionId;const rt=await loadCeremonyRuntime();if(destroyed)return;loaderChrome.ensure(rt);const first=await withBackoff(()=>postCeremonyEvent(plane,rt,stepId,rt.buildEsignCeremonyEventBody({type:"disclosure.presented",...ctx.locale.length>=2?{disclosureLocale:ctx.locale}:{}},{locale:ctx.locale})));if(destroyed||first===null)return;projection=first;if(isTerminalEnvelopeStatus(projection.status)){await settleTerminal(rt,stepId,TERMINAL_STATUS_TO_STATE[projection.status]);return}if(projection.consentWithdrawnAt!==null){await settleTerminal(rt,stepId,"terminal_withdrawn");return}const loaded=await withBackoff(()=>fetchBundleOnce(plane,rt,stepId));if(destroyed||loaded===null)return;bundle=loaded;loaderChrome.render();const mint=await mintSignContext(plane,stepId);if(destroyed||mint===null)return;mountFrame(rt,mint,sessionId,stepId);}async function resolveIdentity(){if(opts.session!==void 0)return opts.session;const resolution=await resolveSession(ctx,fetchImpl);switch(resolution.kind){case "ok":return {sessionId:resolution.session.sessionId,stepId:resolution.session.stepId};case "parked":fail("session_parked");return null;case "wrong_token":warnWrongTokenPlane();fail("wrong_token_type");return null;case "unresolved":case "nothing_to_render":fail("session_expired");return null;default:return assertNever(resolution)}}async function withBackoff(attempt,exhaustedCode="upload_failed"){for(let i=0;i<ESIGN_PREPARING_MAX_ATTEMPTS;i+=1){if(destroyed)return null;const outcome=await attempt();if(outcome.kind==="ok")return outcome.value;if(outcome.kind==="failed")return null;preparingPolls+=1;setState("preparing");const alive=await sleep(esignPreparingDelayMs(outcome.retryAfterMs));if(!alive)return null}fail(exhaustedCode);return null}function mountFrame(rt,mint,sessionId,stepId){const view=container?.ownerDocument.defaultView??null;if(container===null||view===null){fail("sdk_load_failed");return}transport=rt.wireEsignTransport({win:view,embedOrigin:mint.embedOrigin,getFrameWindow:()=>frame?.contentWindow??null,handlers:{onReady:post=>{clearFrameDeadline();if(bundle===null||projection===null)return;sentTheme=resolveEsignTheme(ctx.theme);post({type:"esign:init",protocolVersion:rt.ESIGN_PROTOCOL_VERSION,bundle,copy:opts.copy??{},projection,theme:sentTheme});loaderOwnsCurrentSentence=false;loaderChrome.render();emit({type:"checktiv.esign.ready"});},onState:message=>{clearFrameDeadline();if(frame!==null&&frame.hasAttribute("inert"))return;if(isEsignFrameFatalState(message.state)){teardownFrame();setState(message.state);return}currentState=message.state;loaderOwnsCurrentSentence=false;loaderChrome.render();emit({type:"checktiv.esign.state",state:message.state});},onEvent:(message,post)=>{void(async()=>{const outcome=await postCeremonyEvent(plane,rt,stepId,message.event);if(destroyed)return;if(outcome.kind!=="ok"){post({type:"esign:event_failed",protocolVersion:rt.ESIGN_PROTOCOL_VERSION,event:message.event.type});return}projection=outcome.value;post({type:"esign:projection",protocolVersion:rt.ESIGN_PROTOCOL_VERSION,projection:outcome.value});})();},onSubmit:message=>{void submitStep(rt,sessionId,stepId,message.body);},onResize:message=>{if(frame===null)return;frame.style.minHeight="";frame.style.height=`${Math.ceil(message.height)}px`;},onConsentAct:(message,post)=>{void(async()=>{const result=await postConsentAct(plane,rt,stepId,message.action);if(destroyed)return;post({type:"esign:consent_result",protocolVersion:rt.ESIGN_PROTOCOL_VERSION,result});})();},onScrollRequest:message=>{scrollFrameOffsetIntoView(message.offsetTop);},onDocumentAct:message=>{loaderChrome.runDocumentAct(message.documentId);},onDocumentExtent:message=>{documentExtent=message;if(stopReadWatch===null){const observe=()=>reportReadProgress(rt.ESIGN_PROTOCOL_VERSION,true);view.addEventListener("scroll",observe,{capture:true,passive:true});stopReadWatch=()=>view.removeEventListener("scroll",observe,{capture:true});}reportReadProgress(rt.ESIGN_PROTOCOL_VERSION,false);},onProtocolMismatch:()=>{teardownFrame();fail("protocol_mismatch");}}});postToFrame=message=>{const target=frame?.contentWindow??null;if(target===null)return;target.postMessage(message,mint.embedOrigin);};stopThemeWatch?.();stopThemeWatch=watchEsignHostTheme({win:view,root:container.ownerDocument.documentElement,onChange:()=>{if(destroyed)return;const next=resolveEsignTheme(ctx.theme);if(sentTheme===null||sentTheme.colorMode===next.colorMode)return;sentTheme=next;postToFrame?.({type:"esign:theme",protocolVersion:rt.ESIGN_PROTOCOL_VERSION,theme:next});}});const el=container.ownerDocument.createElement("iframe");el.src=`${mint.embedOrigin}/esign/sign?ctx=${encodeURIComponent(mint.contextToken)}`;el.title=resolveEsignFrameTitle(opts.copy);el.setAttribute("lang",mint.disclosureLocale);applyEsignFrameBox(el);el.style.minHeight=ESIGN_PLACEHOLDER_BOX;frame=el;container.appendChild(el);loaderChrome.render();const deadline=view.setTimeout(onFrameSilent,ESIGN_FRAME_ANNOUNCE_TIMEOUT_MS);cancelFrameDeadline=()=>view.clearTimeout(deadline);}function scrollFrameOffsetIntoView(offsetTop){const el=frame;const view=el?.ownerDocument.defaultView??null;if(el===null||view===null)return;const port=nearestScrollableAncestor(el,view);const portTop=port===null?0:port.getBoundingClientRect().top;const top=el.getBoundingClientRect().top+offsetTop-portTop-ESIGN_SCROLL_TARGET_MARGIN_PX;const behavior=prefersReducedMotion(view)?"auto":"smooth";if(port===null)view.scrollBy({top,behavior});else port.scrollBy({top,behavior});}function reportReadProgress(protocolVersion,fromScroll){const extent=documentExtent;const el=frame;const view=el?.ownerDocument.defaultView??null;if(extent===null||el===null||view===null)return;const port=nearestScrollableAncestor(el,view);const fold=port===null?view.innerHeight:port.getBoundingClientRect().bottom;const reachedEnd=el.getBoundingClientRect().top+extent.endOffsetTop<=fold;if(reachedEnd)documentExtent=null;else if(!fromScroll||readStartPosted)return;else readStartPosted=true;postToFrame?.({type:"esign:read_progress",protocolVersion,documentId:extent.documentId,reachedEnd});}function clearFrameDeadline(){cancelFrameDeadline?.();cancelFrameDeadline=null;}function onFrameSilent(){cancelFrameDeadline=null;if(destroyed)return;teardownFrame();emit(createEsignErrorEvent("sdk_load_failed"));setState("frame_blocked",true);}async function submitStep(rt,sessionId,stepId,body){const accepted=await withBackoff(()=>submitOnce(plane,rt,sessionId,stepId,body),"submit_failed");if(destroyed||accepted===null)return;const outcome=body.declineReason!==void 0?"declined":"signed";teardownFrame();setState(outcome==="declined"?"terminal_declined":"terminal_signed");emit({type:"checktiv.esign.submitted",sessionId,outcome});}async function refuseAttempt(rt,res,stepId,fallback){const refusal=rt.readEsignRefusal(await readJson(res));if(refusal===null){failFromStatus(res.status,fallback);return {kind:"failed"}}const{disposition,state}=rt.ESIGN_REFUSAL_STATE[refusal.code];switch(disposition){case "retry":return {kind:"pending",retryAfterMs:refusal.retryAfterMs??retryAfterMsFromHeader(res)};case "resume":void repairResume(rt,stepId);return {kind:"failed"};case "blocked":setState(state);postToFrame?.({type:"esign:blocked",protocolVersion:rt.ESIGN_PROTOCOL_VERSION,state});return {kind:"failed"};case "withdrawn":case "concluded":teardownFrame();void settleTerminal(rt,stepId,state);return {kind:"failed"};case "upgrade":teardownFrame();emit(createEsignErrorEvent("protocol_mismatch"));setState(state);return {kind:"failed"};default:return assertNeverDisposition(disposition)}}async function repairResume(rt,stepId){if(destroyed)return;teardownFrame();if(resumeAttempted){setState("conflict");return}resumeAttempted=true;setState("preparing");const sessionId=sessionIdOfCurrentMount;const refreshed=await fetchBundleOnce(plane,rt,stepId,true);if(destroyed)return;if(refreshed.kind!=="ok"||sessionId===null){setState("conflict");return}bundle=refreshed.value;loaderChrome.render();const next=await postCeremonyEvent(plane,rt,stepId,rt.buildEsignCeremonyEventBody({type:"disclosure.presented",...ctx.locale.length>=2?{disclosureLocale:ctx.locale}:{}},{locale:ctx.locale}));if(destroyed||next.kind!=="ok")return;projection=next.value;const mint=await mintSignContext(plane,stepId);if(destroyed||mint===null)return;mountFrame(rt,mint,sessionId,stepId);}async function settleTerminal(rt,stepId,state){setState(state);const loaded=await fetchBundleOnce(plane,rt,stepId,true);if(destroyed||loaded.kind!=="ok")return;bundle=loaded.value;loaderChrome.render();}function teardownFrame(){clearFrameDeadline();transport?.teardown();transport=null;frame?.remove();frame=null;postToFrame=null;stopThemeWatch?.();stopThemeWatch=null;stopReadWatch?.();stopReadWatch=null;documentExtent=null;readStartPosted=false;sentTheme=null;}function sleep(ms){return new Promise(resolve=>{resolvePoll=resolve;pollTimer=scheduler.set(()=>{pollTimer=null;resolvePoll=null;resolve(!destroyed);},ms);})}return {destroy(){destroyed=true;clearFrameDeadline();if(pollTimer!==null){scheduler.clear(pollTimer);pollTimer=null;}resolvePoll?.(false);resolvePoll=null;teardownFrame();loaderChrome.destroy();}}}function assertNeverDisposition(disposition){throw new Error(`Unhandled esign refusal disposition: ${JSON.stringify(disposition)}`)}function resolveTarget(target){if(typeof target!=="string")return target;if(typeof document==="undefined")return null;return document.querySelector(target)}function prefersReducedMotion(view){if(typeof view.matchMedia!=="function")return false;try{return view.matchMedia("(prefers-reduced-motion: reduce)").matches}catch{return false}}function nearestScrollableAncestor(el,view){let node=el.parentElement;while(node!==null&&node!==node.ownerDocument.body){const overflowY=view.getComputedStyle(node).overflowY;if((overflowY==="auto"||overflowY==="scroll")&&node.scrollHeight>node.clientHeight){return node}node=node.parentElement;}return null}registerModule("esign",createEsign);
|
|
426
|
+
|
|
427
|
+
export { createEsign, parseEsignMint, parseEsignPending };
|
package/dist/fraud.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export {
|
|
2
|
-
import './machine-
|
|
3
|
-
import './copy-
|
|
1
|
+
export { a8 as ChecktivFraudEvent, aG as FraudChunkModule, af as FraudHandle, ag as FraudMountOptions, aH as createFraud } from './index-CGH7LlPH.js';
|
|
2
|
+
import './machine-EePe2ERe.js';
|
|
3
|
+
import './copy-Bsb1n1Wv.js';
|
|
4
4
|
import './copy-DCeQ4JKx.js';
|
package/dist/fraud.js
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import { resolveSession, warnWrongTokenPlane } from './chunk-523TT3PD.js';
|
|
1
|
+
import { resolveSession, warnWrongTokenPlane } from './chunk-EOTGVXW6.js';
|
|
2
|
+
import './chunk-IQKHRPJR.js';
|
|
4
3
|
import { assertNever } from './chunk-UBQTPS5J.js';
|
|
5
|
-
import {
|
|
4
|
+
import { registerModule } from './chunk-VMWTID63.js';
|
|
5
|
+
import { createChecktivError, withTokenRetry } from './chunk-C7GRMEYT.js';
|
|
6
6
|
import { TELEMETRY_PATH, dataPlaneHeaders } from './chunk-HFQJYEGZ.js';
|
|
7
|
-
import './chunk-IQKHRPJR.js';
|
|
8
7
|
import './chunk-QFA3K5ZV.js';
|
|
9
8
|
import { __publicField } from './chunk-AIK7CDV6.js';
|
|
10
9
|
|
|
11
|
-
var MAX_STEPS=50;var MAX_STEP_SECONDS=86400;var MAX_STEP_PASTE_COUNT=1e4;var MAX_STEP_ID_LEN=80;function defaultNow(){return typeof performance!=="undefined"&&typeof performance.now==="function"?performance.now():Date.now()}var BehavioralTracker=class{constructor(now=defaultNow){__publicField(this,"steps",new Map);__publicField(this,"activeStepId",null);__publicField(this,"now");this.now=now;}get currentStepId(){return this.activeStepId}enter(rawStepId){const stepId=this.boundStepId(rawStepId);if(stepId===null)return;this.closeActiveInterval();const existing=this.steps.get(stepId);if(existing){existing.enteredAtMs=this.now();}else {this.steps.set(stepId,{stepId,enteredAtMs:this.now(),accumulatedMs:0,pasteCount:0});}this.activeStepId=stepId;}recordPaste(rawStepId){const target=rawStepId===void 0?this.activeStepId:this.boundStepId(rawStepId);if(target===null)return;const existing=this.steps.get(target);if(existing){if(existing.pasteCount<MAX_STEP_PASTE_COUNT)existing.pasteCount+=1;return}this.steps.set(target,{stepId:target,enteredAtMs:null,accumulatedMs:0,pasteCount:1});}snapshot(){this.closeActiveInterval();if(this.activeStepId!==null){const active=this.steps.get(this.activeStepId);if(active)active.enteredAtMs=this.now();}const out=[];for(const acc of this.steps.values()){if(out.length>=MAX_STEPS)break;out.push({stepId:acc.stepId,seconds:this.boundSeconds(acc.accumulatedMs),pasteCount:acc.pasteCount});}return out}closeActiveInterval(){if(this.activeStepId===null)return;const active=this.steps.get(this.activeStepId);if(!active||active.enteredAtMs===null)return;const delta=this.now()-active.enteredAtMs;if(delta>0)active.accumulatedMs+=delta;active.enteredAtMs=null;}boundStepId(rawStepId){if(typeof rawStepId!=="string")return null;const trimmed=rawStepId.trim();if(trimmed.length===0)return null;return trimmed.length>MAX_STEP_ID_LEN?trimmed.slice(0,MAX_STEP_ID_LEN):trimmed}boundSeconds(ms){const seconds=ms/1e3;if(!Number.isFinite(seconds)||seconds<0)return 0;return seconds>MAX_STEP_SECONDS?MAX_STEP_SECONDS:seconds}};var DEVICE_MODEL_HINT_MAX=120;function readBoundedString(value,max){if(typeof value!=="string")return null;const trimmed=value.trim();if(trimmed.length===0)return null;return trimmed.length>max?trimmed.slice(0,max):trimmed}function readTimezone(){try{const tz=Intl.DateTimeFormat().resolvedOptions().timeZone;return readBoundedString(tz,64)}catch{return null}}function readMaxTouchPoints(nav){const raw=nav.maxTouchPoints;if(typeof raw!=="number"||!Number.isFinite(raw))return 0;const floored=Math.floor(raw);if(floored<0)return 0;return floored>512?512:floored}function readPluginCount(nav){const plugins=nav.plugins;const len=plugins&&typeof plugins.length==="number"?plugins.length:0;if(!Number.isFinite(len)||len<0)return 0;return len>256?256:Math.floor(len)}function readDeviceModelHint(nav){const uaData=nav.userAgentData;if(typeof uaData!=="object"||uaData===null)return null;return readBoundedString(uaData.platform,DEVICE_MODEL_HINT_MAX)}function readBehaviorTraits(nav=navigator){return {webdriver:nav.webdriver===true,maxTouchPoints:readMaxTouchPoints(nav),timezone:readTimezone(),pluginCount:readPluginCount(nav),deviceModelHint:readDeviceModelHint(nav)}}var BEHAVIOR_CAPTURED_EVENT="kyc.fraud.behavior_captured";var MAX_SEGMENTS=4;var MAX_SEGMENT_STEPS=50;var DEFAULT_SUBMIT_TIMEOUT_MS=2500;function defaultSleep(ms){return new Promise(resolve=>setTimeout(resolve,ms))}function createGatedTransport(inner,opts){const sleep=opts.sleep??defaultSleep;return {async postTelemetry(events){for(let attempt=0;attempt<=opts.maxRetries;attempt+=1){if(attempt>0)await sleep(opts.retryDelayMs).catch(()=>{});try{const res=await inner.postTelemetry(events);if(res.ok)return}catch{}}console.warn("[fraud-agent] flush failed");}}}function withTimeout(promise,ms){return new Promise(resolve=>{let settled=false;const done=()=>{if(settled)return;settled=true;resolve();};const timer=setTimeout(done,ms);void promise.finally(()=>{clearTimeout(timer);done();});})}function boundSegmentSteps(steps){return steps.length>MAX_SEGMENT_STEPS?steps.slice(0,MAX_SEGMENT_STEPS):steps}function createFraudAgent(options){const{transport,sessionId,pasteListenerTarget,now,submitTimeoutMs=DEFAULT_SUBMIT_TIMEOUT_MS}=options;const tracker=new BehavioralTracker(now);let parentTraits=null;const traits=()=>parentTraits??(parentTraits=readBehaviorTraits());const embedSegments=[];const pasteTarget=pasteListenerTarget===void 0?typeof document!=="undefined"?document:null:pasteListenerTarget;const onPasteEvent=()=>{tracker.recordPaste();};if(pasteTarget){pasteTarget.addEventListener("paste",onPasteEvent,{capture:true,passive:true});}function buildPayload(){const steps=tracker.snapshot();const parentTraitsValue=traits();const payload={steps,traits:parentTraitsValue};if(embedSegments.length>0){payload.segments=[{surface:"parent",steps,traits:parentTraitsValue},...embedSegments.slice(0,MAX_SEGMENTS-1).map(seg=>({surface:"embed",steps:boundSegmentSteps(seg.steps),traits:seg.traits}))];}return payload}return {onStepEnter(stepId){tracker.enter(stepId);},onPaste(stepId){tracker.recordPaste(stepId);},mergeEmbedSegment(segment){if(embedSegments.length>=MAX_SEGMENTS-1)return;embedSegments.push({steps:boundSegmentSteps(segment.steps),traits:segment.traits});},async onSubmit(){if(sessionId===void 0)return;const payload=buildPayload();const activeStepId=tracker.currentStepId;const post=(async()=>{try{await transport.postTelemetry([{event:BEHAVIOR_CAPTURED_EVENT,sessionId,...activeStepId!==null?{stepId:activeStepId}:{},ts:Date.now(),payload}]);}catch{}})();await withTimeout(post,submitTimeoutMs);},dispose(){if(pasteTarget){pasteTarget.removeEventListener("paste",onPasteEvent,{capture:true});}}}}var TELEMETRY_FLUSH_MAX_RETRIES=1;var TELEMETRY_FLUSH_RETRY_DELAY_MS=400;function createTelemetryTransport(ctx,fetchImpl){const url=ctx.apiBaseOrigin+TELEMETRY_PATH;return {postTelemetry(events){return withTokenRetry(ctx.tokens,token=>fetchImpl(url,{method:"POST",headers:dataPlaneHeaders(ctx,token,{withJsonBody:true}),body:JSON.stringify({events})})
|
|
10
|
+
var MAX_STEPS=50;var MAX_STEP_SECONDS=86400;var MAX_STEP_PASTE_COUNT=1e4;var MAX_STEP_ID_LEN=80;function defaultNow(){return typeof performance!=="undefined"&&typeof performance.now==="function"?performance.now():Date.now()}var BehavioralTracker=class{constructor(now=defaultNow){__publicField(this,"steps",new Map);__publicField(this,"activeStepId",null);__publicField(this,"now");this.now=now;}get currentStepId(){return this.activeStepId}enter(rawStepId){const stepId=this.boundStepId(rawStepId);if(stepId===null)return;this.closeActiveInterval();const existing=this.steps.get(stepId);if(existing){existing.enteredAtMs=this.now();}else {this.steps.set(stepId,{stepId,enteredAtMs:this.now(),accumulatedMs:0,pasteCount:0});}this.activeStepId=stepId;}recordPaste(rawStepId){const target=rawStepId===void 0?this.activeStepId:this.boundStepId(rawStepId);if(target===null)return;const existing=this.steps.get(target);if(existing){if(existing.pasteCount<MAX_STEP_PASTE_COUNT)existing.pasteCount+=1;return}this.steps.set(target,{stepId:target,enteredAtMs:null,accumulatedMs:0,pasteCount:1});}snapshot(){this.closeActiveInterval();if(this.activeStepId!==null){const active=this.steps.get(this.activeStepId);if(active)active.enteredAtMs=this.now();}const out=[];for(const acc of this.steps.values()){if(out.length>=MAX_STEPS)break;out.push({stepId:acc.stepId,seconds:this.boundSeconds(acc.accumulatedMs),pasteCount:acc.pasteCount});}return out}closeActiveInterval(){if(this.activeStepId===null)return;const active=this.steps.get(this.activeStepId);if(!active||active.enteredAtMs===null)return;const delta=this.now()-active.enteredAtMs;if(delta>0)active.accumulatedMs+=delta;active.enteredAtMs=null;}boundStepId(rawStepId){if(typeof rawStepId!=="string")return null;const trimmed=rawStepId.trim();if(trimmed.length===0)return null;return trimmed.length>MAX_STEP_ID_LEN?trimmed.slice(0,MAX_STEP_ID_LEN):trimmed}boundSeconds(ms){const seconds=ms/1e3;if(!Number.isFinite(seconds)||seconds<0)return 0;return seconds>MAX_STEP_SECONDS?MAX_STEP_SECONDS:seconds}};var DEVICE_MODEL_HINT_MAX=120;function readBoundedString(value,max){if(typeof value!=="string")return null;const trimmed=value.trim();if(trimmed.length===0)return null;return trimmed.length>max?trimmed.slice(0,max):trimmed}function readTimezone(){try{const tz=Intl.DateTimeFormat().resolvedOptions().timeZone;return readBoundedString(tz,64)}catch{return null}}function readMaxTouchPoints(nav){const raw=nav.maxTouchPoints;if(typeof raw!=="number"||!Number.isFinite(raw))return 0;const floored=Math.floor(raw);if(floored<0)return 0;return floored>512?512:floored}function readPluginCount(nav){const plugins=nav.plugins;const len=plugins&&typeof plugins.length==="number"?plugins.length:0;if(!Number.isFinite(len)||len<0)return 0;return len>256?256:Math.floor(len)}function readDeviceModelHint(nav){const uaData=nav.userAgentData;if(typeof uaData!=="object"||uaData===null)return null;return readBoundedString(uaData.platform,DEVICE_MODEL_HINT_MAX)}function readBehaviorTraits(nav=navigator){return {webdriver:nav.webdriver===true,maxTouchPoints:readMaxTouchPoints(nav),timezone:readTimezone(),pluginCount:readPluginCount(nav),deviceModelHint:readDeviceModelHint(nav)}}var BEHAVIOR_CAPTURED_EVENT="kyc.fraud.behavior_captured";var MAX_SEGMENTS=4;var MAX_SEGMENT_STEPS=50;var DEFAULT_SUBMIT_TIMEOUT_MS=2500;function defaultSleep(ms){return new Promise(resolve=>setTimeout(resolve,ms))}function createGatedTransport(inner,opts){const sleep=opts.sleep??defaultSleep;return {async postTelemetry(events){for(let attempt=0;attempt<=opts.maxRetries;attempt+=1){if(attempt>0)await sleep(opts.retryDelayMs).catch(()=>{});try{const res=await inner.postTelemetry(events);if(res.ok)return}catch{}}console.warn("[fraud-agent] flush failed");}}}function withTimeout(promise,ms){return new Promise(resolve=>{let settled=false;const done=()=>{if(settled)return;settled=true;resolve();};const timer=setTimeout(done,ms);void promise.finally(()=>{clearTimeout(timer);done();});})}function boundSegmentSteps(steps){return steps.length>MAX_SEGMENT_STEPS?steps.slice(0,MAX_SEGMENT_STEPS):steps}function createFraudAgent(options){const{transport,sessionId,pasteListenerTarget,now,submitTimeoutMs=DEFAULT_SUBMIT_TIMEOUT_MS}=options;const tracker=new BehavioralTracker(now);let parentTraits=null;const traits=()=>parentTraits??(parentTraits=readBehaviorTraits());const embedSegments=[];const pasteTarget=pasteListenerTarget===void 0?typeof document!=="undefined"?document:null:pasteListenerTarget;const onPasteEvent=()=>{tracker.recordPaste();};if(pasteTarget){pasteTarget.addEventListener("paste",onPasteEvent,{capture:true,passive:true});}function buildPayload(){const steps=tracker.snapshot();const parentTraitsValue=traits();const payload={steps,traits:parentTraitsValue};if(embedSegments.length>0){payload.segments=[{surface:"parent",steps,traits:parentTraitsValue},...embedSegments.slice(0,MAX_SEGMENTS-1).map(seg=>({surface:"embed",steps:boundSegmentSteps(seg.steps),traits:seg.traits}))];}return payload}return {onStepEnter(stepId){tracker.enter(stepId);},onPaste(stepId){tracker.recordPaste(stepId);},mergeEmbedSegment(segment){if(embedSegments.length>=MAX_SEGMENTS-1)return;embedSegments.push({steps:boundSegmentSteps(segment.steps),traits:segment.traits});},async onSubmit(){if(sessionId===void 0)return;const payload=buildPayload();const activeStepId=tracker.currentStepId;const post=(async()=>{try{await transport.postTelemetry([{event:BEHAVIOR_CAPTURED_EVENT,sessionId,...activeStepId!==null?{stepId:activeStepId}:{},ts:Date.now(),payload}]);}catch{}})();await withTimeout(post,submitTimeoutMs);},dispose(){if(pasteTarget){pasteTarget.removeEventListener("paste",onPasteEvent,{capture:true});}}}}var TELEMETRY_FLUSH_MAX_RETRIES=1;var TELEMETRY_FLUSH_RETRY_DELAY_MS=400;function createTelemetryTransport(ctx,fetchImpl){const url=ctx.apiBaseOrigin+TELEMETRY_PATH;return {postTelemetry(events){return withTokenRetry(ctx.tokens,token=>fetchImpl(url,{method:"POST",headers:dataPlaneHeaders(ctx,token,{withJsonBody:true}),body:JSON.stringify({events})}))}}}function createFraud(ctx,opts){const fetchImpl=opts.fetchImpl??fetch;const transport=createGatedTransport(createTelemetryTransport(ctx,fetchImpl),{maxRetries:TELEMETRY_FLUSH_MAX_RETRIES,retryDelayMs:TELEMETRY_FLUSH_RETRY_DELAY_MS});let destroyed=false;let agent=null;void Promise.resolve().then(async()=>{const granted=await opts.onConsent();if(destroyed||!granted)return;const resolution=await resolveSession(ctx,fetchImpl);if(destroyed)return;let session;switch(resolution.kind){case "ok":session=resolution.session;break;case "wrong_token":warnWrongTokenPlane();opts.onEvent?.({type:"checktiv.fraud.error",error:createChecktivError("wrong_token_type")});return;case "unresolved":opts.onEvent?.({type:"checktiv.fraud.error",error:createChecktivError("session_expired")});return;case "parked":opts.onEvent?.({type:"checktiv.fraud.error",error:createChecktivError("session_parked")});return;case "nothing_to_render":return;default:return assertNever(resolution)}agent=createFraudAgent({transport,sessionId:session.sessionId});opts.onEvent?.({type:"checktiv.fraud.started"});}).catch(()=>{});return {destroy(){destroyed=true;agent?.dispose();agent=null;}}}registerModule("fraud",createFraud);
|
|
12
11
|
|
|
13
12
|
export { createFraud };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { mountCrossDevice } from '../cross-device.js';
|
|
2
|
+
import { S as SdkCrossDeviceStatusResponse } from '../machine-EePe2ERe.js';
|
|
3
|
+
import { Y as SubstrateContext, Z as CrossDeviceHandoffHook, S as ChecktivIdvEvent } from '../index-CGH7LlPH.js';
|
|
3
4
|
import { C as CrossDeviceCopy } from '../copy-DCeQ4JKx.js';
|
|
4
|
-
import
|
|
5
|
-
import '../copy-CEILzVXc.js';
|
|
5
|
+
import '../copy-Bsb1n1Wv.js';
|
|
6
6
|
|
|
7
7
|
interface ManagedCrossDeviceParams {
|
|
8
8
|
ctx: SubstrateContext;
|
|
@@ -30,9 +30,9 @@ interface CrossDevicePollConfig {
|
|
|
30
30
|
totalCapMs?: number;
|
|
31
31
|
}
|
|
32
32
|
declare const CROSS_DEVICE_REMINT_CAP = 3;
|
|
33
|
-
|
|
34
|
-
mountCrossDevice
|
|
35
|
-
}
|
|
33
|
+
type CrossDeviceChunkModule = {
|
|
34
|
+
mountCrossDevice: typeof mountCrossDevice;
|
|
35
|
+
};
|
|
36
36
|
type CrossDeviceChunkImporter = () => Promise<CrossDeviceChunkModule>;
|
|
37
37
|
declare function preloadCrossDeviceChunk(importer?: CrossDeviceChunkImporter): void;
|
|
38
38
|
interface CrossDeviceOverlayOptions {
|
package/dist/idv/cross-device.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { registerCrossDeviceOpener, createChecktivErrorEvent } from '../chunk-
|
|
2
|
-
import
|
|
3
|
-
import { withTokenRetry } from '../chunk-
|
|
1
|
+
import { registerCrossDeviceOpener, createChecktivErrorEvent } from '../chunk-KYV5BPCD.js';
|
|
2
|
+
import '../chunk-ZU4L3NDZ.js';
|
|
3
|
+
import { withTokenRetry, createChecktivError, CREDENTIAL_UNVERIFIABLE_STATUS } from '../chunk-C7GRMEYT.js';
|
|
4
4
|
import { SESSIONS_ME_PATH, dataPlaneHeaders, SESSIONS_CROSS_DEVICE_STATUS_PATH } from '../chunk-HFQJYEGZ.js';
|
|
5
|
-
import '../chunk-XSSM5ZB7.js';
|
|
6
5
|
import '../chunk-QFA3K5ZV.js';
|
|
7
6
|
import '../chunk-AIK7CDV6.js';
|
|
8
7
|
|
|
9
|
-
var SESSIONS_HANDOFF_MINT_PATH=`${SESSIONS_ME_PATH}/handoff`;var CROSS_DEVICE_POLL_INTERVAL_MS=2500;var CROSS_DEVICE_POLL_TOTAL_CAP_MS=15*60*1e3;var CROSS_DEVICE_REMINT_CAP=3;var defaultChunkImporter=()=>import('../cross-device.js');function preloadCrossDeviceChunk(importer=defaultChunkImporter){try{void importer().catch(()=>{});}catch{}}function openCrossDeviceOverlay(opts){const{target,onOpenCrossDevice,copy,isMobile,emit,onClose,chunkImporter=defaultChunkImporter,poll}=opts;const childContainer=document.createElement("div");target.appendChild(childContainer);let destroyed=false;let remintCount=0;let capped=false;let onCloseFired=false;const invokeOnClose=()=>{if(onCloseFired)return;onCloseFired=true;onClose?.();};const dismissOverlay=()=>{if(!onCloseFired){emit({type:"checktiv.idv.cross_device_closed"});}invokeOnClose();};const panelOnClose=onClose?dismissOverlay:void 0;let chunkHandle=null;let isCompleting=false;let currentUrl=null;let pollGen=0;let pollTimeout=null;let pollAbort=null;let capTimeout=null;const markCompleting=()=>{isCompleting=true;if(chunkHandle!==null&¤tUrl!==null){chunkHandle.update({url:currentUrl,copy,isMobile,completing:true,onBack:panelOnClose,onRefreshLink:void 0,onRetry:panelOnClose});}};const stopPoll=()=>{pollGen+=1;if(pollTimeout!==null){clearTimeout(pollTimeout);pollTimeout=null;}if(capTimeout!==null){clearTimeout(capTimeout);capTimeout=null;}if(pollAbort!==null){pollAbort.abort();pollAbort=null;}};const startPoll=()=>{if(poll===void 0)return;const intervalMs=poll.intervalMs??CROSS_DEVICE_POLL_INTERVAL_MS;const totalCapMs=poll.totalCapMs??CROSS_DEVICE_POLL_TOTAL_CAP_MS;stopPoll();const gen=pollGen;capTimeout=setTimeout(()=>{if(gen!==pollGen||destroyed)return;stopPoll();capped=true;poll.onCapped?.();},totalCapMs);const scheduleNext=()=>{if(gen!==pollGen||destroyed)return;pollTimeout=setTimeout(runTick,intervalMs);};const runTick=()=>{void(async()=>{const controller=new AbortController;pollAbort=controller;let outcome;try{outcome=await poll.checkCompletion(controller.signal);}catch{scheduleNext();return}if(gen!==pollGen||destroyed)return;if(outcome==="advanced"){stopPoll();markCompleting();poll.onComplete();return}if(outcome==="terminal"){stopPoll();poll.onTerminal?.();return}scheduleNext();})();};pollTimeout=setTimeout(runTick,intervalMs);};const renderUnavailable=()=>{emit({type:"checktiv.idv.cross_device_unavailable"});chunkHandle?.update({url:"",copy,isMobile,completing:false,onBack:panelOnClose,onRetry:panelOnClose});};const rerender=url=>{if(typeof url!=="string"||url.length===0){renderUnavailable();return}currentUrl=url;chunkHandle?.update({url,copy,isMobile,completing:isCompleting,onBack:panelOnClose,onRefreshLink:makeRefreshHandler(),onRetry:panelOnClose});};function makeRefreshHandler(currentUrl2){if(remintCount>=CROSS_DEVICE_REMINT_CAP){return void 0}return ()=>{if(destroyed)return;if(remintCount>=CROSS_DEVICE_REMINT_CAP)return;void(async()=>{remintCount+=1;let result;try{result=await onOpenCrossDevice();}catch(err){console.warn("[Checktiv] cross-device: refresh hook rejected unexpectedly.",err);if(destroyed)return;renderUnavailable();return}if(destroyed)return;if(result.kind==="unavailable"){renderUnavailable();return}rerender(result.url);})();}}function mountPanel(chunkModule,mintResult){if(destroyed)return;const okUrl=mintResult.kind==="ok"?mintResult.url:void 0;if(mintResult.kind==="unavailable"||typeof okUrl!=="string"||okUrl.length===0){emit({type:"checktiv.idv.cross_device_unavailable"});chunkHandle=chunkModule.mountCrossDevice(childContainer,{url:"",copy,isMobile,completing:false,onBack:panelOnClose,onRetry:panelOnClose});return}emit({type:"checktiv.idv.cross_device_opened"});currentUrl=okUrl;chunkHandle=chunkModule.mountCrossDevice(childContainer,{url:okUrl,copy,isMobile,completing:isCompleting,onBack:panelOnClose,onRefreshLink:makeRefreshHandler(),onRetry:panelOnClose});}function renderDoubleFaultFallback(){if(destroyed)return;childContainer.textContent="";const msg=document.createElement("div");msg.setAttribute("data-testid","cross-device-double-fault");const text=copy.unavailableMessage;if(text){const p=document.createElement("p");p.textContent=text;msg.appendChild(p);}if(onClose){const btn=document.createElement("button");btn.type="button";btn.setAttribute("data-testid","cross-device-double-fault-retry");const retryLabel=copy.mobileTryAgainLabel??"Try again";btn.textContent=retryLabel;btn.addEventListener("click",dismissOverlay);msg.appendChild(btn);}childContainer.appendChild(msg);}startPoll();void(async()=>{let chunkResult;try{chunkResult=await chunkImporter();}catch(err){console.warn("[Checktiv] cross-device: failed to load the cross-device chunk.",err);emit(createErrorEvent("sdk_load_failed"));renderDoubleFaultFallback();return}if(destroyed)return;const mintResult=await onOpenCrossDevice().catch(err=>{console.warn("[Checktiv] cross-device: onOpenCrossDevice hook threw unexpectedly.",err);return {kind:"unavailable"}});if(destroyed)return;try{mountPanel(chunkResult,mintResult);}catch(err){console.warn("[Checktiv] cross-device: failed to mount the cross-device panel.",err);emit(createErrorEvent("sdk_load_failed"));renderDoubleFaultFallback();}})();return {setCompleting(){if(destroyed)return;markCompleting();},isCapped(){return destroyed?false:capped},restartPoll(){if(destroyed)return;capped=false;startPoll();},destroy(){if(destroyed)return;destroyed=true;stopPoll();invokeOnClose();if(chunkHandle!==null){chunkHandle.destroy();chunkHandle=null;}childContainer.remove();}}}function isRecord(v){return typeof v==="object"&&v!==null}function isHttpsUrl(value){if(typeof value!=="string"||value.length===0)return false;try{return new URL(value).protocol==="https:"}catch{return false}}function parseHandoffMintUrl(body){if(!isRecord(body))return null;const handoffUrl=body.handoffUrl;return isHttpsUrl(handoffUrl)?handoffUrl:null}function createHandoffMintHook(ctx,fetchImpl){const origin=ctx.apiBaseOrigin;return async()=>{let res;try{res=await withTokenRetry(ctx.tokens,token=>fetchImpl(origin+SESSIONS_HANDOFF_MINT_PATH,{method:"POST",headers:dataPlaneHeaders(ctx,token,{withJsonBody:true}),body:"{}"})
|
|
8
|
+
var SESSIONS_HANDOFF_MINT_PATH=`${SESSIONS_ME_PATH}/handoff`;var CROSS_DEVICE_POLL_INTERVAL_MS=2500;var CROSS_DEVICE_POLL_TOTAL_CAP_MS=15*60*1e3;var CROSS_DEVICE_REMINT_CAP=3;var defaultChunkImporter=()=>import('../cross-device.js');function preloadCrossDeviceChunk(importer=defaultChunkImporter){try{void importer().catch(()=>{});}catch{}}function openCrossDeviceOverlay(opts){const{target,onOpenCrossDevice,copy,isMobile,emit,onClose,chunkImporter=defaultChunkImporter,poll}=opts;const childContainer=document.createElement("div");target.appendChild(childContainer);let destroyed=false;let remintCount=0;let capped=false;let onCloseFired=false;const invokeOnClose=()=>{if(onCloseFired)return;onCloseFired=true;onClose?.();};const dismissOverlay=()=>{if(!onCloseFired){emit({type:"checktiv.idv.cross_device_closed"});}invokeOnClose();};const panelOnClose=onClose?dismissOverlay:void 0;let chunkHandle=null;let isCompleting=false;let currentUrl=null;let pollGen=0;let pollTimeout=null;let pollAbort=null;let capTimeout=null;const markCompleting=()=>{isCompleting=true;if(chunkHandle!==null&¤tUrl!==null){chunkHandle.update({url:currentUrl,copy,isMobile,completing:true,onBack:panelOnClose,onRefreshLink:void 0,onRetry:panelOnClose});}};const stopPoll=()=>{pollGen+=1;if(pollTimeout!==null){clearTimeout(pollTimeout);pollTimeout=null;}if(capTimeout!==null){clearTimeout(capTimeout);capTimeout=null;}if(pollAbort!==null){pollAbort.abort();pollAbort=null;}};const startPoll=()=>{if(poll===void 0)return;const intervalMs=poll.intervalMs??CROSS_DEVICE_POLL_INTERVAL_MS;const totalCapMs=poll.totalCapMs??CROSS_DEVICE_POLL_TOTAL_CAP_MS;stopPoll();const gen=pollGen;capTimeout=setTimeout(()=>{if(gen!==pollGen||destroyed)return;stopPoll();capped=true;poll.onCapped?.();},totalCapMs);const scheduleNext=()=>{if(gen!==pollGen||destroyed)return;pollTimeout=setTimeout(runTick,intervalMs);};const runTick=()=>{void(async()=>{const controller=new AbortController;pollAbort=controller;let outcome;try{outcome=await poll.checkCompletion(controller.signal);}catch{scheduleNext();return}if(gen!==pollGen||destroyed)return;if(outcome==="advanced"){stopPoll();markCompleting();poll.onComplete();return}if(outcome==="terminal"){stopPoll();poll.onTerminal?.();return}scheduleNext();})();};pollTimeout=setTimeout(runTick,intervalMs);};const renderUnavailable=()=>{emit({type:"checktiv.idv.cross_device_unavailable"});chunkHandle?.update({url:"",copy,isMobile,completing:false,onBack:panelOnClose,onRetry:panelOnClose});};const rerender=url=>{if(typeof url!=="string"||url.length===0){renderUnavailable();return}currentUrl=url;chunkHandle?.update({url,copy,isMobile,completing:isCompleting,onBack:panelOnClose,onRefreshLink:makeRefreshHandler(),onRetry:panelOnClose});};function makeRefreshHandler(currentUrl2){if(remintCount>=CROSS_DEVICE_REMINT_CAP){return void 0}return ()=>{if(destroyed)return;if(remintCount>=CROSS_DEVICE_REMINT_CAP)return;void(async()=>{remintCount+=1;let result;try{result=await onOpenCrossDevice();}catch(err){console.warn("[Checktiv] cross-device: refresh hook rejected unexpectedly.",err);if(destroyed)return;renderUnavailable();return}if(destroyed)return;if(result.kind==="unavailable"){renderUnavailable();return}rerender(result.url);})();}}function mountPanel(chunkModule,mintResult){if(destroyed)return;const okUrl=mintResult.kind==="ok"?mintResult.url:void 0;if(mintResult.kind==="unavailable"||typeof okUrl!=="string"||okUrl.length===0){emit({type:"checktiv.idv.cross_device_unavailable"});chunkHandle=chunkModule.mountCrossDevice(childContainer,{url:"",copy,isMobile,completing:false,onBack:panelOnClose,onRetry:panelOnClose});return}emit({type:"checktiv.idv.cross_device_opened"});currentUrl=okUrl;chunkHandle=chunkModule.mountCrossDevice(childContainer,{url:okUrl,copy,isMobile,completing:isCompleting,onBack:panelOnClose,onRefreshLink:makeRefreshHandler(),onRetry:panelOnClose});}function renderDoubleFaultFallback(){if(destroyed)return;childContainer.textContent="";const msg=document.createElement("div");msg.setAttribute("data-testid","cross-device-double-fault");const text=copy.unavailableMessage;if(text){const p=document.createElement("p");p.textContent=text;msg.appendChild(p);}if(onClose){const btn=document.createElement("button");btn.type="button";btn.setAttribute("data-testid","cross-device-double-fault-retry");const retryLabel=copy.mobileTryAgainLabel??"Try again";btn.textContent=retryLabel;btn.addEventListener("click",dismissOverlay);msg.appendChild(btn);}childContainer.appendChild(msg);}startPoll();void(async()=>{let chunkResult;try{chunkResult=await chunkImporter();}catch(err){console.warn("[Checktiv] cross-device: failed to load the cross-device chunk.",err);emit(createErrorEvent("sdk_load_failed"));renderDoubleFaultFallback();return}if(destroyed)return;const mintResult=await onOpenCrossDevice().catch(err=>{console.warn("[Checktiv] cross-device: onOpenCrossDevice hook threw unexpectedly.",err);return {kind:"unavailable"}});if(destroyed)return;try{mountPanel(chunkResult,mintResult);}catch(err){console.warn("[Checktiv] cross-device: failed to mount the cross-device panel.",err);emit(createErrorEvent("sdk_load_failed"));renderDoubleFaultFallback();}})();return {setCompleting(){if(destroyed)return;markCompleting();},isCapped(){return destroyed?false:capped},restartPoll(){if(destroyed)return;capped=false;startPoll();},destroy(){if(destroyed)return;destroyed=true;stopPoll();invokeOnClose();if(chunkHandle!==null){chunkHandle.destroy();chunkHandle=null;}childContainer.remove();}}}function isRecord(v){return typeof v==="object"&&v!==null}function isHttpsUrl(value){if(typeof value!=="string"||value.length===0)return false;try{return new URL(value).protocol==="https:"}catch{return false}}function parseHandoffMintUrl(body){if(!isRecord(body))return null;const handoffUrl=body.handoffUrl;return isHttpsUrl(handoffUrl)?handoffUrl:null}function createHandoffMintHook(ctx,fetchImpl){const origin=ctx.apiBaseOrigin;return async()=>{let res;try{res=await withTokenRetry(ctx.tokens,token=>fetchImpl(origin+SESSIONS_HANDOFF_MINT_PATH,{method:"POST",headers:dataPlaneHeaders(ctx,token,{withJsonBody:true}),body:"{}"}));}catch{return {kind:"unavailable"}}if(!res.ok)return {kind:"unavailable"};let body;try{body=await res.json();}catch{return {kind:"unavailable"}}const url=parseHandoffMintUrl(body);return url===null?{kind:"unavailable"}:{kind:"ok",url}}}function parseCrossDeviceStatus(body){if(typeof body!=="object"||body===null)return null;const b=body;if(typeof b.advanced!=="boolean")return null;if(b.currentStepId!==null&&typeof b.currentStepId!=="string")return null;return {advanced:b.advanced,currentStepId:b.currentStepId}}function classifyCrossDeviceCompletion(status,originalStepId){if(status===null)return "pending";if(status.advanced===true)return "advanced";if(status.currentStepId!==null&&status.currentStepId!==originalStepId)return "advanced";return "pending"}async function checkSessionCompletion(ctx,fetchImpl,originalStepId,signal){const origin=ctx.apiBaseOrigin;let res;try{res=await withTokenRetry(ctx.tokens,token=>fetchImpl(origin+SESSIONS_CROSS_DEVICE_STATUS_PATH,{method:"GET",headers:dataPlaneHeaders(ctx,token),signal}));}catch{return "pending"}if(res.status===CREDENTIAL_UNVERIFIABLE_STATUS)return "terminal";if(!res.ok)return "pending";let parsed;try{parsed=parseCrossDeviceStatus(await res.json());}catch{return "pending"}return classifyCrossDeviceCompletion(parsed,originalStepId)}function openManagedCrossDevice(params){const{ctx,fetchImpl,target,stepId,sessionId,copy,isMobile,emit,onClose,chunkImporter}=params;const onOpenCrossDevice=params.onOpenCrossDevice??createHandoffMintHook(ctx,fetchImpl);return openCrossDeviceOverlay({target,onOpenCrossDevice,copy,isMobile,emit,onClose,...chunkImporter!==void 0?{chunkImporter}:{},poll:{checkCompletion:signal=>checkSessionCompletion(ctx,fetchImpl,stepId,signal),onComplete:()=>emit({type:"checktiv.idv.submitted",sessionId}),onCapped:()=>emit({type:"checktiv.idv.cross_device_capped"}),onTerminal:()=>emit(createChecktivErrorEvent("session_expired"))}})}registerCrossDeviceOpener(openManagedCrossDevice);function createErrorEvent(code){return {type:"checktiv.idv.error",error:createChecktivError(code)}}
|
|
10
9
|
|
|
11
10
|
export { CROSS_DEVICE_POLL_INTERVAL_MS, CROSS_DEVICE_POLL_TOTAL_CAP_MS, CROSS_DEVICE_REMINT_CAP, checkSessionCompletion, classifyCrossDeviceCompletion, createHandoffMintHook, openCrossDeviceOverlay, openManagedCrossDevice, parseHandoffMintUrl, preloadCrossDeviceChunk };
|
package/dist/idv.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
import './
|
|
3
|
-
|
|
1
|
+
export { Z as CrossDeviceHandoffHook, aC as ForwardedSession, aD as IdvChunkModule, ak as IdvHandle, al as IdvMountOptions, aE as REMINT_READY_TIMEOUT_MS, aF as createIdv } from './index-CGH7LlPH.js';
|
|
2
|
+
import './machine-EePe2ERe.js';
|
|
3
|
+
import './copy-Bsb1n1Wv.js';
|
|
4
4
|
import './copy-DCeQ4JKx.js';
|