@prosopo/procaptcha-audio 0.0.0-stage → 0.2.1

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.
Files changed (68) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +52 -0
  2. package/.turbo/turbo-build$colon$tsc.log +53 -0
  3. package/.turbo/turbo-build.log +54 -0
  4. package/CHANGELOG.md +35 -0
  5. package/LICENSE +201 -0
  6. package/dist/_virtual/_rolldown/runtime.js +3 -0
  7. package/dist/cjs/components/audioPlayer.cjs +275 -0
  8. package/dist/cjs/components/procaptchaAudio.cjs +7 -0
  9. package/dist/cjs/components/procaptchaWidget.cjs +195 -0
  10. package/dist/cjs/index.cjs +8 -0
  11. package/dist/cjs/services/Manager.cjs +218 -0
  12. package/dist/components/audioPlayer.d.ts +18 -0
  13. package/dist/components/audioPlayer.d.ts.map +1 -0
  14. package/dist/components/audioPlayer.js +275 -0
  15. package/dist/components/audioPlayer.js.map +1 -0
  16. package/dist/components/procaptchaAudio.d.ts +7 -0
  17. package/dist/components/procaptchaAudio.d.ts.map +1 -0
  18. package/dist/components/procaptchaAudio.js +6 -0
  19. package/dist/components/procaptchaAudio.js.map +1 -0
  20. package/dist/components/procaptchaWidget.d.ts +7 -0
  21. package/dist/components/procaptchaWidget.d.ts.map +1 -0
  22. package/dist/components/procaptchaWidget.js +195 -0
  23. package/dist/components/procaptchaWidget.js.map +1 -0
  24. package/dist/index.d.ts +4 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +5 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/services/Manager.d.ts +10 -0
  29. package/dist/services/Manager.d.ts.map +1 -0
  30. package/dist/services/Manager.js +217 -0
  31. package/dist/services/Manager.js.map +1 -0
  32. package/dist/tests/audioPlayer.unit.test.d.ts +2 -0
  33. package/dist/tests/audioPlayer.unit.test.d.ts.map +1 -0
  34. package/dist/tests/audioPlayer.unit.test.js +341 -0
  35. package/dist/tests/audioPlayer.unit.test.js.map +1 -0
  36. package/dist/tests/domHarness.d.ts +20 -0
  37. package/dist/tests/domHarness.d.ts.map +1 -0
  38. package/dist/tests/domHarness.js +56 -0
  39. package/dist/tests/domHarness.js.map +1 -0
  40. package/dist/tests/manager.unit.test.d.ts +2 -0
  41. package/dist/tests/manager.unit.test.d.ts.map +1 -0
  42. package/dist/tests/manager.unit.test.js +627 -0
  43. package/dist/tests/manager.unit.test.js.map +1 -0
  44. package/dist/tests/managerHarness.d.ts +21 -0
  45. package/dist/tests/managerHarness.d.ts.map +1 -0
  46. package/dist/tests/managerHarness.js +67 -0
  47. package/dist/tests/managerHarness.js.map +1 -0
  48. package/dist/tests/procaptchaAudio.test-d.d.ts +2 -0
  49. package/dist/tests/procaptchaAudio.test-d.d.ts.map +1 -0
  50. package/dist/tests/procaptchaAudio.test-d.js +103 -0
  51. package/dist/tests/procaptchaAudio.test-d.js.map +1 -0
  52. package/dist/tests/procaptchaAudio.unit.test.d.ts +2 -0
  53. package/dist/tests/procaptchaAudio.unit.test.d.ts.map +1 -0
  54. package/dist/tests/procaptchaAudio.unit.test.js +93 -0
  55. package/dist/tests/procaptchaAudio.unit.test.js.map +1 -0
  56. package/dist/tests/procaptchaWidget.unit.test.d.ts +2 -0
  57. package/dist/tests/procaptchaWidget.unit.test.d.ts.map +1 -0
  58. package/dist/tests/procaptchaWidget.unit.test.js +597 -0
  59. package/dist/tests/procaptchaWidget.unit.test.js.map +1 -0
  60. package/dist/tests/setup.d.ts +2 -0
  61. package/dist/tests/setup.d.ts.map +1 -0
  62. package/dist/tests/setup.js +12 -0
  63. package/dist/tests/setup.js.map +1 -0
  64. package/package.json +70 -3
  65. package/vite.cjs.config.ts +22 -0
  66. package/vite.esm.config.ts +20 -0
  67. package/vite.test.config.ts +26 -0
  68. package/README.md +0 -3
@@ -0,0 +1,195 @@
1
+ import "../_virtual/_rolldown/runtime.js";
2
+ import { Manager } from "../services/Manager.js";
3
+ import { mountAudioPlayer } from "./audioPlayer.js";
4
+ import { createTranslator, loadI18next, localiseErrorMessage } from "@prosopo/locale";
5
+ import { PROCAPTCHA_EXECUTE_EVENT, Teardown, buildUpdateState, createElement, createProcaptchaState, createRenderScheduler, mountCheckbox, mountHoneypot, trustedClickCoords } from "@prosopo/procaptcha-common";
6
+ import { ModeEnum } from "@prosopo/types";
7
+ import { darkTheme, lightTheme } from "@prosopo/widget-skeleton";
8
+ //#region src/components/procaptchaWidget.ts
9
+ var mountProcaptchaAudioWidget = (container, props) => {
10
+ const teardown = new Teardown();
11
+ const config = props.config;
12
+ const i18n = props.i18n;
13
+ const frictionlessState = props.frictionlessState;
14
+ const callbacks = props.callbacks || {};
15
+ const translator = createTranslator(i18n);
16
+ const isInvisible = ModeEnum.invisible === config.mode;
17
+ const theme = "light" === config.theme ? lightTheme : darkTheme;
18
+ const store = createProcaptchaState();
19
+ let loading = false;
20
+ let audioPhase = "checkbox";
21
+ let challengeData = null;
22
+ let showRetry = true === props.startShowRetry;
23
+ let lastError = store.state.error;
24
+ let lastCoords = null;
25
+ let sessionInvalidatedFired = false;
26
+ let honeypot;
27
+ let checkbox;
28
+ let player;
29
+ const onReload = props.onReload;
30
+ const updateState = buildUpdateState(store.state, store.update);
31
+ const manager = Manager(config, store.state, updateState, callbacks, frictionlessState, () => honeypot?.getValue(), onReload ? (x, y) => onReload(x, y, { showRetry: true }) : void 0);
32
+ const root = createElement("div");
33
+ container.appendChild(root);
34
+ if (frictionlessState?.hp) honeypot = mountHoneypot(root, { encodedQuestion: frictionlessState.hp });
35
+ const reportError = (error) => {
36
+ callbacks.onError?.(error instanceof Error ? error : new Error(String(error)));
37
+ };
38
+ const returnToCheckbox = () => {
39
+ audioPhase = "checkbox";
40
+ challengeData = null;
41
+ showRetry = false;
42
+ };
43
+ const showChallenge = (challenge) => {
44
+ if (challenge) {
45
+ challengeData = challenge;
46
+ audioPhase = "answering";
47
+ }
48
+ };
49
+ const handleAudioComplete = async (answer, replays, audioEvents) => {
50
+ audioPhase = "submitting";
51
+ scheduler.schedule();
52
+ let verified = false;
53
+ try {
54
+ verified = await manager.submitSolution(answer, replays, audioEvents);
55
+ } catch (error) {
56
+ reportError(error);
57
+ }
58
+ if (verified) {
59
+ returnToCheckbox();
60
+ loading = false;
61
+ scheduler.schedule();
62
+ return;
63
+ }
64
+ showRetry = true;
65
+ if (onReload) {
66
+ scheduler.schedule();
67
+ return;
68
+ }
69
+ audioPhase = "answering";
70
+ scheduler.schedule();
71
+ try {
72
+ const newChallenge = await manager.start();
73
+ if (newChallenge) challengeData = newChallenge;
74
+ else returnToCheckbox();
75
+ } catch {
76
+ returnToCheckbox();
77
+ }
78
+ loading = false;
79
+ scheduler.schedule();
80
+ };
81
+ const handleDismiss = () => {
82
+ returnToCheckbox();
83
+ loading = false;
84
+ scheduler.schedule();
85
+ };
86
+ const playerProps = (challenge) => ({
87
+ clip: challenge.clip,
88
+ characterCount: challenge.characterCount,
89
+ onComplete: (answer, replays, events) => {
90
+ handleAudioComplete(answer, replays, events);
91
+ },
92
+ showRetry,
93
+ submitting: "submitting" === audioPhase,
94
+ theme,
95
+ translator,
96
+ placement: config.placement,
97
+ anchor: props.container,
98
+ onDismiss: handleDismiss
99
+ });
100
+ const runErrorEffect = () => {
101
+ if (store.state.error === lastError) return;
102
+ lastError = store.state.error;
103
+ if (!store.state.error) return;
104
+ loading = false;
105
+ returnToCheckbox();
106
+ if ("CAPTCHA.NO_SESSION_FOUND" !== store.state.error.key) return;
107
+ if (props.onSessionInvalidated && !sessionInvalidatedFired || void 0 !== frictionlessState) {
108
+ loading = true;
109
+ store.update({ error: void 0 });
110
+ }
111
+ if (props.onSessionInvalidated && !sessionInvalidatedFired) {
112
+ sessionInvalidatedFired = true;
113
+ props.onSessionInvalidated(lastCoords?.x, lastCoords?.y);
114
+ return;
115
+ }
116
+ if (frictionlessState) {
117
+ const timer = setTimeout(() => {
118
+ frictionlessState.restart();
119
+ }, 100);
120
+ teardown.add(() => clearTimeout(timer));
121
+ }
122
+ };
123
+ const render = () => {
124
+ runErrorEffect();
125
+ if (("answering" === audioPhase || "submitting" === audioPhase) && null !== challengeData) if (void 0 === player) player = mountAudioPlayer(playerProps(challengeData));
126
+ else player.update(playerProps(challengeData));
127
+ else {
128
+ player?.destroy();
129
+ player = void 0;
130
+ }
131
+ checkbox?.update(checkboxProps());
132
+ };
133
+ const scheduler = createRenderScheduler(render);
134
+ const beginChallenge = async (coords) => {
135
+ if (loading) return;
136
+ loading = true;
137
+ showRetry = false;
138
+ scheduler.schedule();
139
+ if (coords) lastCoords = coords;
140
+ try {
141
+ showChallenge(await manager.start(coords?.x, coords?.y));
142
+ } catch (error) {
143
+ reportError(error);
144
+ } finally {
145
+ loading = false;
146
+ scheduler.schedule();
147
+ }
148
+ };
149
+ const checkboxProps = () => ({
150
+ checked: store.state.isHuman,
151
+ theme,
152
+ labelText: translator.isReady() ? translator.t("WIDGET.I_AM_HUMAN") : "",
153
+ error: store.state.error ? localiseErrorMessage(translator.i18n, store.state.error) : void 0,
154
+ loadingText: translator.t("WIDGET.CHECKING", { defaultValue: "Checking that you are human" }),
155
+ loading: loading || "submitting" === audioPhase,
156
+ onChange: (event) => beginChallenge(trustedClickCoords(event))
157
+ });
158
+ if (!isInvisible) checkbox = mountCheckbox(root, checkboxProps());
159
+ teardown.add(scheduler.cancel);
160
+ teardown.add(store.subscribe(scheduler.schedule));
161
+ teardown.add(translator.subscribe(scheduler.schedule));
162
+ const handleExecute = () => {
163
+ beginChallenge();
164
+ };
165
+ if (props.container) teardown.addEventListener(props.container, PROCAPTCHA_EXECUTE_EVENT, handleExecute);
166
+ if (isInvisible) teardown.addEventListener(document, PROCAPTCHA_EXECUTE_EVENT, handleExecute);
167
+ if (config.language) if (i18n) {
168
+ if (i18n.language !== config.language) i18n.changeLanguage(config.language);
169
+ } else loadI18next(false, config.language);
170
+ if (props.autoStart) {
171
+ loading = true;
172
+ const coords = props.startCoords;
173
+ lastCoords = coords ?? null;
174
+ scheduler.schedule();
175
+ manager.start(coords?.x ?? 0, coords?.y ?? 0).then((challenge) => {
176
+ showChallenge(challenge);
177
+ loading = false;
178
+ scheduler.schedule();
179
+ }, () => {
180
+ loading = false;
181
+ scheduler.schedule();
182
+ });
183
+ }
184
+ render();
185
+ return { destroy: () => {
186
+ manager.dispose();
187
+ teardown.run();
188
+ player?.destroy();
189
+ checkbox?.destroy();
190
+ honeypot?.destroy();
191
+ root.parentNode?.removeChild(root);
192
+ } };
193
+ };
194
+ //#endregion
195
+ export { mountProcaptchaAudioWidget as default, mountProcaptchaAudioWidget };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procaptchaWidget.js","sourceRoot":"","sources":["../../src/components/procaptchaWidget.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from "./components/procaptchaWidget.js";
2
+ export * from "./components/procaptchaAudio.js";
3
+ export * from "./components/audioPlayer.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ import "./_virtual/_rolldown/runtime.js";
2
+ import { mountAudioPlayer } from "./components/audioPlayer.js";
3
+ import mountProcaptchaAudioWidget from "./components/procaptchaWidget.js";
4
+ import { loadProcaptchaAudio, mountProcaptchaAudio } from "./components/procaptchaAudio.js";
5
+ export { loadProcaptchaAudio, mountAudioPlayer, mountProcaptchaAudio, mountProcaptchaAudioWidget };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { type AudioEvent, type FrictionlessState, type GetAudioCaptchaResponse, type ProcaptchaCallbacks, type ProcaptchaClientConfigInput, type ProcaptchaState, type ProcaptchaStateUpdateFn } from "@prosopo/types";
2
+ interface AudioManagerHandle {
3
+ start: (x?: number, y?: number) => Promise<GetAudioCaptchaResponse | undefined>;
4
+ submitSolution: (answer: string, replays: number, audioEvents: AudioEvent[]) => Promise<boolean>;
5
+ resetState: (frictionlessRestart?: () => void) => void;
6
+ dispose: () => void;
7
+ }
8
+ export declare const Manager: (configInput: ProcaptchaClientConfigInput, state: ProcaptchaState, onStateUpdate: ProcaptchaStateUpdateFn, callbacks: ProcaptchaCallbacks, frictionlessState?: FrictionlessState, getHoneypotValue?: () => string | undefined, onReloadRequest?: (x?: number, y?: number) => void) => AudioManagerHandle;
9
+ export {};
10
+ //# sourceMappingURL=Manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Manager.d.ts","sourceRoot":"","sources":["../../src/services/Manager.ts"],"names":[],"mappings":"AA8BA,OAAO,EAGN,KAAK,UAAU,EAEf,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACxB,KAAK,2BAA2B,EAEhC,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAE5B,MAAM,gBAAgB,CAAC;AAIxB,UAAU,kBAAkB;IAC3B,KAAK,EAAE,CACN,CAAC,CAAC,EAAE,MAAM,EACV,CAAC,CAAC,EAAE,MAAM,KACN,OAAO,CAAC,uBAAuB,GAAG,SAAS,CAAC,CAAC;IAClD,cAAc,EAAE,CACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,UAAU,EAAE,KACrB,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,UAAU,EAAE,CAAC,mBAAmB,CAAC,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IACvD,OAAO,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,eAAO,MAAM,OAAO,gBACN,2BAA2B,SACjC,eAAe,iBACP,uBAAuB,aAC3B,mBAAmB,sBACV,iBAAiB,qBAClB,MAAM,MAAM,GAAG,SAAS,oBAEzB,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,KAChD,kBA4WF,CAAC"}
@@ -0,0 +1,217 @@
1
+ import { ExtensionLoader, buildClientMetaData, buildUpdateState, createManagerLifecycle, createSpentSessionGuard, encryptBehavioralDataForSubmit, getDefaultEvents, getProcaptchaRandomActiveProvider, getSimdReadingsForSubmit, pickIpMode, providerRetry } from "@prosopo/procaptcha-common";
2
+ import { ApiParams, CaptchaType, ProcaptchaConfigSchema, encodeProcaptchaOutput } from "@prosopo/types";
3
+ import { stringToHex } from "@polkadot/util/string";
4
+ import { ProviderApi } from "@prosopo/api";
5
+ import { ProsopoEnvError } from "@prosopo/common";
6
+ import { embedData, sleep } from "@prosopo/util";
7
+ import { randomAsHex } from "@prosopo/util-crypto";
8
+ //#region src/services/Manager.ts
9
+ var Manager = (configInput, state, onStateUpdate, callbacks, frictionlessState, getHoneypotValue, onReloadRequest) => {
10
+ const events = getDefaultEvents(callbacks);
11
+ let storedChallengeResponse;
12
+ let storedProviderApi;
13
+ let storedProviderUrl;
14
+ let storedUser;
15
+ let storedClickX;
16
+ let storedClickY;
17
+ let previousProviderUrl;
18
+ const spentSession = createSpentSessionGuard();
19
+ const defaultState = () => {
20
+ return {
21
+ showModal: false,
22
+ loading: false,
23
+ index: 0,
24
+ challenge: void 0,
25
+ solutions: void 0,
26
+ isHuman: false,
27
+ captchaApi: void 0,
28
+ account: void 0
29
+ };
30
+ };
31
+ const onFailed = () => {
32
+ updateState({
33
+ isHuman: false,
34
+ loading: false
35
+ });
36
+ events.onFailed();
37
+ resetState(frictionlessState?.restart);
38
+ };
39
+ const getConfig = () => {
40
+ const config = {
41
+ userAccountAddress: configInput.userAccountAddress || "",
42
+ ...configInput
43
+ };
44
+ if (state.account) config.userAccountAddress = state.account.account.address;
45
+ return ProcaptchaConfigSchema.parse(config);
46
+ };
47
+ const getAccount = () => {
48
+ if (!state.account) throw new ProsopoEnvError("GENERAL.ACCOUNT_NOT_FOUND", { context: { error: "Account not loaded" } });
49
+ return { account: state.account };
50
+ };
51
+ const getDappAccount = () => {
52
+ if (!state.dappAccount) throw new ProsopoEnvError("GENERAL.SITE_KEY_MISSING");
53
+ return state.dappAccount;
54
+ };
55
+ const updateState = buildUpdateState(state, onStateUpdate);
56
+ const lifecycle = createManagerLifecycle(state, updateState);
57
+ const resetState = (frictionlessRestart) => {
58
+ lifecycle.clearTimers();
59
+ updateState(defaultState());
60
+ events.onReset();
61
+ if (frictionlessRestart) frictionlessRestart();
62
+ storedChallengeResponse = void 0;
63
+ storedProviderApi = void 0;
64
+ storedProviderUrl = void 0;
65
+ storedUser = void 0;
66
+ storedClickX = void 0;
67
+ storedClickY = void 0;
68
+ };
69
+ const setValidChallengeTimeout = () => {
70
+ lifecycle.expireSolutionAfter(getConfig().captchas.audio.solutionTimeout, () => {
71
+ updateState({ isHuman: false });
72
+ events.onExpired();
73
+ resetState(frictionlessState?.restart);
74
+ });
75
+ };
76
+ const start = async (x = 0, y = 0) => {
77
+ await providerRetry(async () => {
78
+ if (state.loading) return;
79
+ if (state.isHuman) return;
80
+ resetState();
81
+ storedClickX = x;
82
+ storedClickY = y;
83
+ updateState({ loading: true });
84
+ updateState({ attemptCount: state.attemptCount + 1 });
85
+ const config = getConfig();
86
+ const selectAccount = async () => {
87
+ if (frictionlessState) return frictionlessState.userAccount;
88
+ return new (await (ExtensionLoader(config.web2)))().getAccount(config);
89
+ };
90
+ const user = await selectAccount();
91
+ const userAccount = user.account.address;
92
+ updateState({ account: { account: { address: userAccount } } });
93
+ updateState({ dappAccount: config.account.address });
94
+ await sleep(100);
95
+ if (!config.web2 && !config.userAccountAddress) throw new ProsopoEnvError("GENERAL.ACCOUNT_NOT_FOUND", { context: { error: "Account address has not been set for web3 mode" } });
96
+ let getRandomProviderResponse = void 0;
97
+ if (frictionlessState?.provider) getRandomProviderResponse = frictionlessState.provider;
98
+ else {
99
+ const currentConfig = getConfig();
100
+ getRandomProviderResponse = await getProcaptchaRandomActiveProvider(currentConfig.defaultEnvironment, pickIpMode(currentConfig), {
101
+ attempt: state.attemptCount,
102
+ excludeUrl: previousProviderUrl
103
+ });
104
+ }
105
+ const providerUrl = getRandomProviderResponse.provider.url;
106
+ previousProviderUrl = providerUrl;
107
+ const providerApi = new ProviderApi(providerUrl, getDappAccount());
108
+ const challengeSessionId = frictionlessState?.sessionId;
109
+ if (spentSession.isSpent(challengeSessionId)) {
110
+ updateState({
111
+ loading: false,
112
+ error: {
113
+ message: "No session found",
114
+ key: "CAPTCHA.NO_SESSION_FOUND"
115
+ }
116
+ });
117
+ events.onError(/* @__PURE__ */ new Error("No session found"));
118
+ return;
119
+ }
120
+ const simdReadingsOnChallenge = frictionlessState?.getSimdReadings ? await frictionlessState.getSimdReadings(0) : void 0;
121
+ const challenge = await providerApi.getAudioCaptchaChallenge(userAccount, getDappAccount(), challengeSessionId, simdReadingsOnChallenge);
122
+ spentSession.markSpent(challengeSessionId);
123
+ if (challenge.error) {
124
+ updateState({
125
+ loading: false,
126
+ error: {
127
+ message: challenge.error.message,
128
+ key: challenge.error.key || "API.UNKNOWN_ERROR"
129
+ }
130
+ });
131
+ return;
132
+ }
133
+ storedChallengeResponse = challenge;
134
+ storedProviderApi = providerApi;
135
+ storedProviderUrl = providerUrl;
136
+ storedUser = user;
137
+ updateState({ loading: false });
138
+ }, async () => {
139
+ await start(x, y);
140
+ }, () => {
141
+ resetState();
142
+ }, state.attemptCount, 3);
143
+ return storedChallengeResponse;
144
+ };
145
+ const submitSolution = async (answer, replays, audioEvents) => {
146
+ if (!storedChallengeResponse || !storedProviderApi || !storedProviderUrl || !storedUser) throw new ProsopoEnvError("GENERAL.ACCOUNT_NOT_FOUND", { context: { error: "No challenge data available. Call start() first." } });
147
+ updateState({ loading: true });
148
+ try {
149
+ const challenge = storedChallengeResponse;
150
+ const providerApi = storedProviderApi;
151
+ const providerUrl = storedProviderUrl;
152
+ const user = storedUser;
153
+ const signer = user.extension?.signer;
154
+ if (!signer || !signer.signRaw) throw new ProsopoEnvError("GENERAL.CANT_FIND_KEYRINGPAIR", { context: { error: "Signer is not defined, cannot sign message to prove account ownership" } });
155
+ const userTimestampSignature = await signer.signRaw({
156
+ address: user.account.address,
157
+ data: stringToHex(challenge[ApiParams.timestamp].toString()),
158
+ type: "bytes"
159
+ });
160
+ const encryptedBehavioralData = await encryptBehavioralDataForSubmit(frictionlessState);
161
+ let salt;
162
+ if (storedClickX !== void 0 && storedClickY !== void 0) {
163
+ const coords = [storedClickX, storedClickY];
164
+ salt = embedData(randomAsHex(coords.map((coord) => coord.toString(16).length + 4).reduce((acc, curr) => acc + curr, 0)), coords);
165
+ }
166
+ const simdReadings = await getSimdReadingsForSubmit(frictionlessState);
167
+ const clientMetaData = buildClientMetaData(getHoneypotValue?.(), getConfig().clientSessionId);
168
+ const verifiedSolution = await providerApi.submitAudioCaptchaSolution(challenge, getAccount().account.account.address, getDappAccount(), answer, replays, audioEvents, userTimestampSignature.signature.toString(), encryptedBehavioralData, salt, simdReadings, clientMetaData);
169
+ if (lifecycle.isDisposed()) return false;
170
+ if (verifiedSolution[ApiParams.verified]) {
171
+ updateState({
172
+ isHuman: true,
173
+ loading: false
174
+ });
175
+ events.onHuman(encodeProcaptchaOutput({
176
+ [ApiParams.providerUrl]: providerUrl,
177
+ [ApiParams.user]: getAccount().account.account.address,
178
+ [ApiParams.dapp]: getDappAccount(),
179
+ [ApiParams.challenge]: challenge.challenge,
180
+ [ApiParams.timestamp]: challenge.timestamp,
181
+ [ApiParams.signature]: {
182
+ [ApiParams.provider]: challenge.signature.provider,
183
+ [ApiParams.user]: { [ApiParams.timestamp]: userTimestampSignature.signature.toString() }
184
+ },
185
+ [ApiParams.captchaType]: CaptchaType.audio
186
+ }));
187
+ setValidChallengeTimeout();
188
+ return true;
189
+ }
190
+ if (onReloadRequest) {
191
+ updateState({
192
+ isHuman: false,
193
+ loading: false
194
+ });
195
+ events.onFailed();
196
+ const retryX = storedClickX;
197
+ const retryY = storedClickY;
198
+ resetState();
199
+ onReloadRequest(retryX, retryY);
200
+ return false;
201
+ }
202
+ onFailed();
203
+ return false;
204
+ } catch (error) {
205
+ updateState({ loading: false });
206
+ throw error;
207
+ }
208
+ };
209
+ return {
210
+ start,
211
+ submitSolution,
212
+ resetState,
213
+ dispose: lifecycle.dispose
214
+ };
215
+ };
216
+ //#endregion
217
+ export { Manager };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Manager.js","sourceRoot":"","sources":["../../src/services/Manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=audioPlayer.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audioPlayer.unit.test.d.ts","sourceRoot":"","sources":["../../src/tests/audioPlayer.unit.test.ts"],"names":[],"mappings":""}