@prosopo/procaptcha 0.1.0 → 0.1.3

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 (98) hide show
  1. package/README.md +13 -0
  2. package/dist/api/AsyncFactory.d.ts +7 -0
  3. package/dist/api/AsyncFactory.d.ts.map +1 -0
  4. package/{src/api/AsyncFactory.ts → dist/api/AsyncFactory.js} +8 -9
  5. package/dist/api/AsyncFactory.js.map +1 -0
  6. package/dist/api/Extension.d.ts +22 -0
  7. package/dist/api/Extension.d.ts.map +1 -0
  8. package/{src/api/Extension.ts → dist/api/Extension.js} +39 -56
  9. package/dist/api/Extension.js.map +1 -0
  10. package/dist/api/HttpClientBase.d.ts +9 -0
  11. package/dist/api/HttpClientBase.d.ts.map +1 -0
  12. package/dist/api/HttpClientBase.js +36 -0
  13. package/dist/api/HttpClientBase.js.map +1 -0
  14. package/dist/api/ProsopoContract.d.ts +13 -0
  15. package/dist/api/ProsopoContract.d.ts.map +1 -0
  16. package/{src/api/ProsopoContract.ts → dist/api/ProsopoContract.js} +18 -20
  17. package/dist/api/ProsopoContract.js.map +1 -0
  18. package/dist/api/ProsopoContractBase.d.ts +31 -0
  19. package/dist/api/ProsopoContractBase.d.ts.map +1 -0
  20. package/dist/api/ProsopoContractBase.js +131 -0
  21. package/dist/api/ProsopoContractBase.js.map +1 -0
  22. package/dist/api/ProviderApi.d.ts +21 -0
  23. package/dist/api/ProviderApi.d.ts.map +1 -0
  24. package/dist/api/ProviderApi.js +54 -0
  25. package/dist/api/ProviderApi.js.map +1 -0
  26. package/dist/api/handlers.d.ts +5 -0
  27. package/dist/api/handlers.d.ts.map +1 -0
  28. package/dist/api/handlers.js +14 -0
  29. package/dist/api/handlers.js.map +1 -0
  30. package/dist/api/index.d.ts +7 -0
  31. package/dist/api/index.d.ts.map +1 -0
  32. package/{src/api/handlers.ts → dist/api/index.js} +10 -14
  33. package/dist/api/index.js.map +1 -0
  34. package/dist/index.d.ts +4 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/{src/modules/index.ts → dist/index.js} +7 -7
  37. package/dist/index.js.map +1 -0
  38. package/dist/modules/ProsopoCaptchaApi.d.ts +16 -0
  39. package/dist/modules/ProsopoCaptchaApi.d.ts.map +1 -0
  40. package/dist/modules/ProsopoCaptchaApi.js +86 -0
  41. package/dist/modules/ProsopoCaptchaApi.js.map +1 -0
  42. package/dist/modules/ProsopoCaptchaClient.d.ts +27 -0
  43. package/dist/modules/ProsopoCaptchaClient.d.ts.map +1 -0
  44. package/dist/modules/ProsopoCaptchaClient.js +97 -0
  45. package/dist/modules/ProsopoCaptchaClient.js.map +1 -0
  46. package/dist/modules/ProsopoCaptchaStateClient.d.ts +17 -0
  47. package/dist/modules/ProsopoCaptchaStateClient.d.ts.map +1 -0
  48. package/dist/modules/ProsopoCaptchaStateClient.js +104 -0
  49. package/dist/modules/ProsopoCaptchaStateClient.js.map +1 -0
  50. package/dist/modules/client.d.ts +9 -0
  51. package/dist/modules/client.d.ts.map +1 -0
  52. package/{src/modules/client.ts → dist/modules/client.js} +13 -12
  53. package/dist/modules/client.js.map +1 -0
  54. package/dist/modules/contract.d.ts +7 -0
  55. package/dist/modules/contract.d.ts.map +1 -0
  56. package/{src/api/HttpClientBase.ts → dist/modules/contract.js} +14 -21
  57. package/dist/modules/contract.js.map +1 -0
  58. package/dist/modules/extension.d.ts +3 -0
  59. package/dist/modules/extension.d.ts.map +1 -0
  60. package/{src/api/index.ts → dist/modules/extension.js} +10 -6
  61. package/dist/modules/extension.js.map +1 -0
  62. package/dist/modules/index.d.ts +8 -0
  63. package/dist/modules/index.d.ts.map +1 -0
  64. package/{src/modules/contract.ts → dist/modules/index.js} +11 -8
  65. package/dist/modules/index.js.map +1 -0
  66. package/dist/modules/storage.d.ts +14 -0
  67. package/dist/modules/storage.d.ts.map +1 -0
  68. package/{src/modules/storage.ts → dist/modules/storage.js} +7 -7
  69. package/dist/modules/storage.js.map +1 -0
  70. package/dist/types/api.d.ts +45 -0
  71. package/dist/types/api.d.ts.map +1 -0
  72. package/{src/types/index.ts → dist/types/api.js} +7 -3
  73. package/dist/types/api.js.map +1 -0
  74. package/{src/types/client.ts → dist/types/client.d.ts} +8 -36
  75. package/dist/types/client.d.ts.map +1 -0
  76. package/dist/types/client.js +3 -0
  77. package/dist/types/client.js.map +1 -0
  78. package/dist/types/contract.d.ts +5 -0
  79. package/dist/types/contract.d.ts.map +1 -0
  80. package/dist/types/contract.js +3 -0
  81. package/dist/types/contract.js.map +1 -0
  82. package/dist/types/index.d.ts +4 -0
  83. package/dist/types/index.d.ts.map +1 -0
  84. package/{src/modules/extension.ts → dist/types/index.js} +7 -5
  85. package/dist/types/index.js.map +1 -0
  86. package/img/contracts-page.png +0 -0
  87. package/package.json +2 -2
  88. package/tsconfig.tsbuildinfo +1 -0
  89. package/src/api/ProsopoContractBase.ts +0 -169
  90. package/src/api/ProviderApi.ts +0 -59
  91. package/src/index.ts +0 -18
  92. package/src/modules/ProsopoCaptchaApi.ts +0 -105
  93. package/src/modules/ProsopoCaptchaClient.ts +0 -131
  94. package/src/modules/ProsopoCaptchaStateClient.ts +0 -146
  95. package/src/types/api.ts +0 -79
  96. package/src/types/contract.ts +0 -21
  97. package/tests/mocks/browser.ts +0 -25
  98. package/tests/modules/client.test.ts +0 -56
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProviderApi.js","sourceRoot":"","sources":["../../src/api/ProviderApi.ts"],"names":[],"mappings":";;;;AAAA,4CAA4C;AAC5C,8EAA8E;AAC9E,EAAE;AACF,qEAAqE;AACrE,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,gEAAgE;AAChE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,sEAAsE;AACtE,8EAA8C;AAC9C,yEAAyC;AAGzC,MAAa,WAAY,SAAQ,wBAAc;IAEnC,MAAM,CAAuB;IAEvC,YAAY,MAA4B;QACtC,KAAK,CAAC,MAAM,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACnE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;;OAGG;IACI,iBAAiB;QACtB,MAAM,WAAW,GAAG,iBAAO,CAAC,UAAU,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACzF,CAAC;IAEM,YAAY;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACtC,CAAC;IAEM,kBAAkB;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAC7C,CAAC;IAEM,mBAAmB,CAAC,cAA6C;QACtE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,cAAc,CAAC;QAC/C,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,4CAA4C;QACzF,MAAM,WAAW,GAAG,iBAAO,CAAC,UAAU,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,QAAQ,CAAC,gBAAgB,IAAI,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;IACtI,CAAC;IAEM,qBAAqB,CAAC,SAAiB,EAAE,QAA2B,EAAE,WAAmB,EAAE,MAAc,EAAE,WAAmB;QACnI,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAC,CAAC,CAAC;IACjJ,CAAC;CAEF;AArCD,kCAqCC;AAED,kBAAe,WAAW,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { AxiosResponse } from "axios";
2
+ export declare class ProsopoApiError extends Error {
3
+ constructor(error: AxiosResponse, context?: string, ...params: any[]);
4
+ }
5
+ //# sourceMappingURL=handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/api/handlers.ts"],"names":[],"mappings":"AAeA,OAAO,EAAC,aAAa,EAAC,MAAM,OAAO,CAAC;AAEpC,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,KAAK,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE;CAUrE"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProsopoApiError = void 0;
4
+ class ProsopoApiError extends Error {
5
+ constructor(error, context, ...params) {
6
+ super(`${error.data.message ? error.data.message : error.statusText}`);
7
+ this.name = context && `${ProsopoApiError.name}@${context}` || ProsopoApiError.name;
8
+ // TODO: if env.debug
9
+ console.error('\n********************* ERROR *********************\n');
10
+ console.error(this.cause, this.stack, ...params);
11
+ }
12
+ }
13
+ exports.ProsopoApiError = ProsopoApiError;
14
+ //# sourceMappingURL=handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/api/handlers.ts"],"names":[],"mappings":";;;AAiBA,MAAa,eAAgB,SAAQ,KAAK;IACxC,YAAY,KAAoB,EAAE,OAAgB,EAAE,GAAG,MAAa;QAElE,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAA;QAEtE,IAAI,CAAC,IAAI,GAAG,OAAO,IAAI,GAAG,eAAe,CAAC,IAAI,IAAI,OAAO,EAAE,IAAI,eAAe,CAAC,IAAI,CAAC;QAEpF,qBAAqB;QACrB,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;QACvE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,CAAC;IACnD,CAAC;CACF;AAXD,0CAWC"}
@@ -0,0 +1,7 @@
1
+ export * from './AsyncFactory';
2
+ export * from './Extension';
3
+ export * from './HttpClientBase';
4
+ export * from './ProsopoContract';
5
+ export * from './ProsopoContractBase';
6
+ export * from './ProviderApi';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAeA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC"}
@@ -1,3 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
1
4
  // Copyright (C) 2021-2022 Prosopo (UK) Ltd.
2
5
  // This file is part of procaptcha <https://github.com/prosopo-io/procaptcha>.
3
6
  //
@@ -13,17 +16,10 @@
13
16
  //
14
17
  // You should have received a copy of the GNU General Public License
15
18
  // along with procaptcha. If not, see <http://www.gnu.org/licenses/>.
16
- import {AxiosResponse} from "axios";
17
-
18
- export class ProsopoApiError extends Error {
19
- constructor(error: AxiosResponse, context?: string, ...params: any[]) {
20
-
21
- super(`${error.data.message ? error.data.message : error.statusText}`)
22
-
23
- this.name = context && `${ProsopoApiError.name}@${context}` || ProsopoApiError.name;
24
-
25
- // TODO: if env.debug
26
- console.error('\n********************* ERROR *********************\n');
27
- console.error(this.cause, this.stack, ...params);
28
- }
29
- }
19
+ tslib_1.__exportStar(require("./AsyncFactory"), exports);
20
+ tslib_1.__exportStar(require("./Extension"), exports);
21
+ tslib_1.__exportStar(require("./HttpClientBase"), exports);
22
+ tslib_1.__exportStar(require("./ProsopoContract"), exports);
23
+ tslib_1.__exportStar(require("./ProsopoContractBase"), exports);
24
+ tslib_1.__exportStar(require("./ProviderApi"), exports);
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":";;;AAAA,4CAA4C;AAC5C,8EAA8E;AAC9E,EAAE;AACF,qEAAqE;AACrE,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,gEAAgE;AAChE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,sEAAsE;AACtE,yDAA+B;AAC/B,sDAA4B;AAC5B,2DAAiC;AACjC,4DAAkC;AAClC,gEAAsC;AACtC,wDAA8B"}
@@ -0,0 +1,4 @@
1
+ export * from './api';
2
+ export * from './modules';
3
+ export * from './types';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAeA,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC"}
@@ -1,3 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
1
4
  // Copyright (C) 2021-2022 Prosopo (UK) Ltd.
2
5
  // This file is part of procaptcha <https://github.com/prosopo-io/procaptcha>.
3
6
  //
@@ -13,10 +16,7 @@
13
16
  //
14
17
  // You should have received a copy of the GNU General Public License
15
18
  // along with procaptcha. If not, see <http://www.gnu.org/licenses/>.
16
- export * from './contract';
17
- export * from './extension';
18
- export * from './storage';
19
- export * from './client';
20
- export * from './ProsopoCaptchaApi';
21
- export * from './ProsopoCaptchaClient';
22
- export * from './ProsopoCaptchaStateClient';
19
+ tslib_1.__exportStar(require("./api"), exports);
20
+ tslib_1.__exportStar(require("./modules"), exports);
21
+ tslib_1.__exportStar(require("./types"), exports);
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,4CAA4C;AAC5C,8EAA8E;AAC9E,EAAE;AACF,qEAAqE;AACrE,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,gEAAgE;AAChE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,sEAAsE;AACtE,gDAAsB;AACtB,oDAA0B;AAC1B,kDAAwB"}
@@ -0,0 +1,16 @@
1
+ import { CaptchaSolution } from '@prosopo/contract';
2
+ import { Signer } from "@polkadot/api/types";
3
+ import { ProsopoRandomProviderResponse, GetCaptchaResponse } from "../types/api";
4
+ import ProviderApi from "../api/ProviderApi";
5
+ import ProsopoContract from "../api/ProsopoContract";
6
+ import { TCaptchaSubmitResult } from '../types/client';
7
+ export declare class ProsopoCaptchaApi {
8
+ protected contract: ProsopoContract;
9
+ protected provider: ProsopoRandomProviderResponse;
10
+ protected providerApi: ProviderApi;
11
+ constructor(contract: ProsopoContract, provider: ProsopoRandomProviderResponse, providerApi: ProviderApi);
12
+ getCaptchaChallenge(): Promise<GetCaptchaResponse>;
13
+ submitCaptchaSolution(signer: Signer, requestHash: string, datasetId: string, solutions: CaptchaSolution[]): Promise<TCaptchaSubmitResult>;
14
+ }
15
+ export default ProsopoCaptchaApi;
16
+ //# sourceMappingURL=ProsopoCaptchaApi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProsopoCaptchaApi.d.ts","sourceRoot":"","sources":["../../src/modules/ProsopoCaptchaApi.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,eAAe,EAAgD,MAAM,mBAAmB,CAAC;AAClG,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,6BAA6B,EAAE,kBAAkB,EAA2B,MAAM,cAAc,CAAC;AAG1G,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAC7C,OAAO,eAAe,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAYvD,qBAAa,iBAAiB;IAE1B,SAAS,CAAC,QAAQ,EAAE,eAAe,CAAC;IACpC,SAAS,CAAC,QAAQ,EAAE,6BAA6B,CAAC;IAClD,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC;gBAEvB,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,6BAA6B,EAAE,WAAW,EAAE,WAAW;IAM3F,mBAAmB,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAUlD,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAI,OAAO,CAAC,oBAAoB,CAAC;CA0C3J;AAED,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProsopoCaptchaApi = void 0;
4
+ // Copyright (C) 2021-2022 Prosopo (UK) Ltd.
5
+ // This file is part of procaptcha <https://github.com/prosopo-io/procaptcha>.
6
+ //
7
+ // procaptcha is free software: you can redistribute it and/or modify
8
+ // it under the terms of the GNU General Public License as published by
9
+ // the Free Software Foundation, either version 3 of the License, or
10
+ // (at your option) any later version.
11
+ //
12
+ // procaptcha is distributed in the hope that it will be useful,
13
+ // but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ // GNU General Public License for more details.
16
+ //
17
+ // You should have received a copy of the GNU General Public License
18
+ // along with procaptcha. If not, see <http://www.gnu.org/licenses/>.
19
+ const util_crypto_1 = require("@polkadot/util-crypto");
20
+ // import {computeCaptchaSolutionHash} from '@prosopo/provider'; // TODO
21
+ const contract_1 = require("@prosopo/contract");
22
+ const handlers_1 = require("../api/handlers");
23
+ function hexHash(data) {
24
+ return (0, util_crypto_1.blake2AsHex)(data);
25
+ }
26
+ function computeCaptchaSolutionHash(captcha) {
27
+ return hexHash([captcha.captchaId, captcha.solution, captcha.salt].join());
28
+ }
29
+ class ProsopoCaptchaApi {
30
+ contract;
31
+ provider;
32
+ providerApi;
33
+ constructor(contract, provider, providerApi) {
34
+ this.contract = contract;
35
+ this.provider = provider;
36
+ this.providerApi = providerApi;
37
+ }
38
+ async getCaptchaChallenge() {
39
+ let captchaChallenge;
40
+ try {
41
+ captchaChallenge = await this.providerApi.getCaptchaChallenge(this.provider);
42
+ }
43
+ catch (err) {
44
+ throw new handlers_1.ProsopoApiError(err);
45
+ }
46
+ return captchaChallenge;
47
+ }
48
+ async submitCaptchaSolution(signer, requestHash, datasetId, solutions) {
49
+ const salt = (0, util_crypto_1.randomAsHex)();
50
+ const tree = new contract_1.CaptchaMerkleTree();
51
+ const captchaSolutionsSalted = solutions.map(solution => ({ ...solution, salt: salt }));
52
+ const captchasHashed = captchaSolutionsSalted.map((captcha) => computeCaptchaSolutionHash(captcha));
53
+ tree.build(captchasHashed);
54
+ const commitmentId = tree.root.hash;
55
+ console.log("solveCaptchaChallenge commitmentId", commitmentId);
56
+ // console.log("solveCaptchaChallenge USER ACCOUNT", this.contract.getAccount().address);
57
+ // console.log("solveCaptchaChallenge DAPP ACCOUNT", this.contract.getDappAddress());
58
+ // console.log("solveCaptchaChallenge CONTRACT ADDRESS", this.contract.getContract().address.toString());
59
+ let tx;
60
+ try {
61
+ tx = await this.contract.dappUserCommit(signer, datasetId, commitmentId, this.provider.providerId);
62
+ }
63
+ catch (err) {
64
+ throw new handlers_1.ProsopoApiError(err);
65
+ }
66
+ let result;
67
+ try {
68
+ result = await this.providerApi.submitCaptchaSolution(tx.blockHash, captchaSolutionsSalted, requestHash, tx.txHash.toString(), this.contract.getAccount().address);
69
+ }
70
+ catch (err) {
71
+ throw new handlers_1.ProsopoApiError(err);
72
+ }
73
+ let commitment;
74
+ // TODO concurrency?
75
+ try {
76
+ commitment = await this.contract.getCaptchaSolutionCommitment(commitmentId);
77
+ }
78
+ catch (err) {
79
+ throw new handlers_1.ProsopoApiError(err);
80
+ }
81
+ return [result, tx, commitment];
82
+ }
83
+ }
84
+ exports.ProsopoCaptchaApi = ProsopoCaptchaApi;
85
+ exports.default = ProsopoCaptchaApi;
86
+ //# sourceMappingURL=ProsopoCaptchaApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProsopoCaptchaApi.js","sourceRoot":"","sources":["../../src/modules/ProsopoCaptchaApi.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { ICaptchaContextReducer, CaptchaEventCallbacks, TExtensionAccount, ICaptchaStatusReducer, IExtensionInterface } from "../types/client";
2
+ import { ProsopoRandomProviderResponse } from "../types/api";
3
+ import { ProsopoContract } from "../api/ProsopoContract";
4
+ import { ProviderApi } from "../api/ProviderApi";
5
+ import { ProsopoCaptchaApi } from "./ProsopoCaptchaApi";
6
+ export declare class ProsopoCaptchaClient {
7
+ manager: ICaptchaContextReducer;
8
+ status: ICaptchaStatusReducer;
9
+ callbacks: CaptchaEventCallbacks | undefined;
10
+ providerApi: ProviderApi;
11
+ solutionThreshold: number;
12
+ private static extension;
13
+ private static contract;
14
+ private static provider;
15
+ private static captchaApi;
16
+ constructor(manager: ICaptchaContextReducer, status: ICaptchaStatusReducer, callbacks?: CaptchaEventCallbacks);
17
+ getExtension(): IExtensionInterface;
18
+ setExtension(extension: IExtensionInterface): IExtensionInterface;
19
+ getContract(): ProsopoContract | undefined;
20
+ getProvider(): ProsopoRandomProviderResponse | undefined;
21
+ getCaptchaApi(): ProsopoCaptchaApi | undefined;
22
+ onLoad(): Promise<void>;
23
+ onAccountChange(account?: TExtensionAccount): Promise<void>;
24
+ onAccountUnset(): void;
25
+ }
26
+ export default ProsopoCaptchaClient;
27
+ //# sourceMappingURL=ProsopoCaptchaClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProsopoCaptchaClient.d.ts","sourceRoot":"","sources":["../../src/modules/ProsopoCaptchaClient.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC/I,OAAO,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAE7D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGzD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAIxD,qBAAa,oBAAoB;IAEtB,OAAO,EAAE,sBAAsB,CAAC;IAChC,MAAM,EAAE,qBAAqB,CAAC;IAC9B,SAAS,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAC7C,WAAW,EAAE,WAAW,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAA;IAEhC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAsB;IAC9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA8B;IACrD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA4C;IACnE,OAAO,CAAC,MAAM,CAAC,UAAU,CAAgC;gBAE7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,EAAE,qBAAqB,EAAE,SAAS,CAAC,EAAE,qBAAqB;IAQtG,YAAY;IAIZ,YAAY,CAAC,SAAS,EAAE,mBAAmB;IAI3C,WAAW;IAIX,WAAW;IAIX,aAAa;IAIP,MAAM;IAkBN,eAAe,CAAC,OAAO,CAAC,EAAE,iBAAiB;IAkCjD,cAAc;CAYxB;AAED,eAAe,oBAAoB,CAAC"}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProsopoCaptchaClient = void 0;
4
+ const contract_1 = require("./contract");
5
+ const extension_1 = require("./extension");
6
+ const ProviderApi_1 = require("../api/ProviderApi");
7
+ const ProsopoCaptchaApi_1 = require("./ProsopoCaptchaApi");
8
+ // import { Extension } from "../api";
9
+ class ProsopoCaptchaClient {
10
+ manager;
11
+ status;
12
+ callbacks;
13
+ providerApi;
14
+ solutionThreshold;
15
+ static extension;
16
+ static contract;
17
+ static provider;
18
+ static captchaApi;
19
+ constructor(manager, status, callbacks) {
20
+ this.manager = manager;
21
+ this.status = status;
22
+ this.callbacks = callbacks;
23
+ this.providerApi = new ProviderApi_1.ProviderApi(manager.state.config);
24
+ this.solutionThreshold = manager.state.config.solutionThreshold;
25
+ }
26
+ getExtension() {
27
+ return ProsopoCaptchaClient.extension;
28
+ }
29
+ setExtension(extension) {
30
+ return ProsopoCaptchaClient.extension = extension;
31
+ }
32
+ getContract() {
33
+ return ProsopoCaptchaClient.contract;
34
+ }
35
+ getProvider() {
36
+ return ProsopoCaptchaClient.provider;
37
+ }
38
+ getCaptchaApi() {
39
+ return ProsopoCaptchaClient.captchaApi;
40
+ }
41
+ async onLoad() {
42
+ let contractAddress = ProsopoCaptchaClient.contract?.address;
43
+ if (!ProsopoCaptchaClient.extension || !contractAddress) {
44
+ try {
45
+ [ProsopoCaptchaClient.extension, { contractAddress }] = await Promise.all([(0, extension_1.getExtension)(), this.providerApi.getContractAddress()]);
46
+ }
47
+ catch (err) {
48
+ throw new Error(err);
49
+ }
50
+ }
51
+ if (this.callbacks?.onLoad) {
52
+ this.callbacks.onLoad(ProsopoCaptchaClient.extension, contractAddress);
53
+ }
54
+ this.manager.update({ contractAddress });
55
+ }
56
+ async onAccountChange(account) {
57
+ if (!account) {
58
+ this.onAccountUnset();
59
+ return;
60
+ }
61
+ try {
62
+ ProsopoCaptchaClient.extension.setAccount(account.address);
63
+ }
64
+ catch (err) {
65
+ throw new Error(err);
66
+ }
67
+ try {
68
+ ProsopoCaptchaClient.contract = await (0, contract_1.getProsopoContract)(this.manager.state.contractAddress, this.manager.state.config['dappAccount'], account, (0, contract_1.getWsProvider)(this.manager.state.config['dappUrl']));
69
+ }
70
+ catch (err) {
71
+ throw new Error(err);
72
+ }
73
+ try {
74
+ ProsopoCaptchaClient.provider = await ProsopoCaptchaClient.contract.getRandomProvider(); // TODO how often should provider change?
75
+ }
76
+ catch (err) {
77
+ throw new Error(err);
78
+ }
79
+ ProsopoCaptchaClient.captchaApi = new ProsopoCaptchaApi_1.ProsopoCaptchaApi(ProsopoCaptchaClient.contract, ProsopoCaptchaClient.provider, this.providerApi);
80
+ if (this.callbacks?.onAccountChange) {
81
+ this.callbacks.onAccountChange(account);
82
+ }
83
+ this.manager.update({ account });
84
+ }
85
+ onAccountUnset() {
86
+ ProsopoCaptchaClient.contract = undefined;
87
+ ProsopoCaptchaClient.provider = undefined;
88
+ ProsopoCaptchaClient.captchaApi = undefined;
89
+ if (this.callbacks?.onAccountChange) {
90
+ this.callbacks.onAccountChange(undefined);
91
+ }
92
+ this.manager.update({ account: undefined });
93
+ }
94
+ }
95
+ exports.ProsopoCaptchaClient = ProsopoCaptchaClient;
96
+ exports.default = ProsopoCaptchaClient;
97
+ //# sourceMappingURL=ProsopoCaptchaClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProsopoCaptchaClient.js","sourceRoot":"","sources":["../../src/modules/ProsopoCaptchaClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { ICaptchaStateReducer, TCaptchaSubmitResult } from "../types/client";
2
+ import { CaptchaSolution, GetCaptchaResponse } from "../types/api";
3
+ import { ProsopoCaptchaClient } from "./ProsopoCaptchaClient";
4
+ export declare class ProsopoCaptchaStateClient {
5
+ context: ProsopoCaptchaClient;
6
+ manager: ICaptchaStateReducer;
7
+ constructor(context: ProsopoCaptchaClient, manager: ICaptchaStateReducer);
8
+ onLoadCaptcha(): Promise<void>;
9
+ onCancel(): void;
10
+ onSubmit(): Promise<void>;
11
+ onSolved(submitResult: TCaptchaSubmitResult): Promise<void>;
12
+ onChange(index: number): void;
13
+ dismissCaptcha(): void;
14
+ parseSolution(captchaChallenge: GetCaptchaResponse, captchaSolution: number[][]): CaptchaSolution[];
15
+ }
16
+ export default ProsopoCaptchaStateClient;
17
+ //# sourceMappingURL=ProsopoCaptchaStateClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProsopoCaptchaStateClient.d.ts","sourceRoot":"","sources":["../../src/modules/ProsopoCaptchaStateClient.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAA2B,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAG5F,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAI9D,qBAAa,yBAAyB;IAE3B,OAAO,EAAE,oBAAoB,CAAC;IAC9B,OAAO,EAAE,oBAAoB,CAAC;gBAEzB,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,oBAAoB;IAK3D,aAAa;IAoBnB,QAAQ;IAOF,QAAQ;IA0CR,QAAQ,CAAC,YAAY,EAAE,oBAAoB;IAajD,QAAQ,CAAC,KAAK,EAAE,MAAM;IAetB,cAAc;IAKd,aAAa,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,GAAG,eAAe,EAAE;CAc7G;AAED,eAAe,yBAAyB,CAAC"}
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProsopoCaptchaStateClient = void 0;
4
+ const contract_1 = require("@prosopo/contract");
5
+ class ProsopoCaptchaStateClient {
6
+ context;
7
+ manager;
8
+ constructor(context, manager) {
9
+ this.context = context;
10
+ this.manager = manager;
11
+ }
12
+ async onLoadCaptcha() {
13
+ let captchaChallenge;
14
+ try {
15
+ captchaChallenge = await this.context.getCaptchaApi().getCaptchaChallenge();
16
+ }
17
+ catch (err) {
18
+ captchaChallenge = err;
19
+ }
20
+ if (this.context.callbacks?.onLoadCaptcha) {
21
+ this.context.callbacks.onLoadCaptcha(captchaChallenge);
22
+ }
23
+ if (captchaChallenge instanceof Error) {
24
+ captchaChallenge = undefined;
25
+ }
26
+ this.manager.update({ captchaChallenge, captchaIndex: 0 });
27
+ }
28
+ onCancel() {
29
+ if (this.context.callbacks?.onCancel) {
30
+ this.context.callbacks.onCancel();
31
+ }
32
+ this.dismissCaptcha();
33
+ }
34
+ async onSubmit() {
35
+ const { captchaChallenge, captchaIndex, captchaSolution } = this.manager.state;
36
+ const nextCaptchaIndex = captchaIndex + 1;
37
+ if (nextCaptchaIndex < captchaChallenge.captchas.length) {
38
+ captchaSolution[nextCaptchaIndex] = [];
39
+ this.manager.update({ captchaIndex: nextCaptchaIndex, captchaSolution });
40
+ return;
41
+ }
42
+ const signer = this.context.getExtension().getExtension().signer;
43
+ const currentCaptcha = captchaChallenge.captchas[captchaIndex];
44
+ const { datasetId } = currentCaptcha.captcha; // TODO arbitrary datasetId? Could datasetId be moved up next to requestHash?
45
+ const solutions = this.parseSolution(captchaChallenge, captchaSolution);
46
+ let submitResult;
47
+ try {
48
+ submitResult = await this.context.getCaptchaApi().submitCaptchaSolution(signer, captchaChallenge.requestHash, datasetId, solutions);
49
+ }
50
+ catch (err) {
51
+ submitResult = err;
52
+ }
53
+ if (this.context.callbacks?.onSubmit) {
54
+ this.context.callbacks.onSubmit(submitResult, this.manager.state);
55
+ }
56
+ this.manager.update({ captchaSolution: [] });
57
+ if (submitResult instanceof Error) {
58
+ // TODO onFail?
59
+ return;
60
+ }
61
+ await this.onSolved(submitResult);
62
+ }
63
+ // TODO check for solved captchas.
64
+ async onSolved(submitResult) {
65
+ let isHuman;
66
+ try {
67
+ isHuman = await this.context.getContract()?.dappOperatorIsHumanUser(this.context.solutionThreshold);
68
+ }
69
+ catch (err) {
70
+ // TODO
71
+ }
72
+ this.dismissCaptcha();
73
+ if (this.context.callbacks?.onSolved) {
74
+ this.context.callbacks.onSolved(submitResult, isHuman);
75
+ }
76
+ }
77
+ onChange(index) {
78
+ const { captchaIndex, captchaSolution } = this.manager.state;
79
+ let currentSolution = captchaSolution[captchaIndex] || [];
80
+ currentSolution = currentSolution.includes(index) ? currentSolution.filter(item => item !== index) : [...currentSolution, index];
81
+ captchaSolution[captchaIndex] = currentSolution;
82
+ if (this.context.callbacks?.onChange) {
83
+ this.context.callbacks.onChange(captchaSolution, captchaIndex);
84
+ }
85
+ this.manager.update({ captchaSolution });
86
+ }
87
+ dismissCaptcha() {
88
+ this.manager.update({ captchaChallenge: undefined });
89
+ }
90
+ // TODO move to ProsopoContract/ProviderApi/Model?
91
+ parseSolution(captchaChallenge, captchaSolution) {
92
+ const parsedSolution = [];
93
+ for (const [index, challenge] of captchaChallenge.captchas.entries()) {
94
+ const solution = captchaSolution[index] || [];
95
+ challenge.captcha.solution = solution;
96
+ parsedSolution[index] = (0, contract_1.convertCaptchaToCaptchaSolution)(challenge.captcha);
97
+ }
98
+ console.log("CAPTCHA SOLUTIONS", parsedSolution);
99
+ return parsedSolution;
100
+ }
101
+ }
102
+ exports.ProsopoCaptchaStateClient = ProsopoCaptchaStateClient;
103
+ exports.default = ProsopoCaptchaStateClient;
104
+ //# sourceMappingURL=ProsopoCaptchaStateClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProsopoCaptchaStateClient.js","sourceRoot":"","sources":["../../src/modules/ProsopoCaptchaStateClient.ts"],"names":[],"mappings":";;;AAoBA,gDAAoE;AAGpE,MAAa,yBAAyB;IAE3B,OAAO,CAAuB;IAC9B,OAAO,CAAuB;IAErC,YAAY,OAA6B,EAAE,OAA6B;QACpE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAEM,KAAK,CAAC,aAAa;QACtB,IAAI,gBAAwD,CAAC;QAE7D,IAAI;YACA,gBAAgB,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,EAAG,CAAC,mBAAmB,EAAE,CAAC;SAChF;QAAC,OAAO,GAAG,EAAE;YACV,gBAAgB,GAAG,GAAY,CAAC;SACnC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,aAAa,EAAE;YACvC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;SAC1D;QAED,IAAI,gBAAgB,YAAY,KAAK,EAAE;YACnC,gBAAgB,GAAG,SAAS,CAAC;SAChC;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC;IAEM,QAAQ;QACX,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE;YAClC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;SACrC;QACD,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAEM,KAAK,CAAC,QAAQ;QACjB,MAAM,EAAE,gBAAgB,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAE/E,MAAM,gBAAgB,GAAG,YAAY,GAAG,CAAC,CAAC;QAE1C,IAAI,gBAAgB,GAAG,gBAAiB,CAAC,QAAQ,CAAC,MAAM,EAAE;YACtD,eAAe,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC;YACvC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC,CAAC;YAEzE,OAAO;SACV;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC;QAEjE,MAAM,cAAc,GAAG,gBAAiB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAChE,MAAM,EAAE,SAAS,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,6EAA6E;QAE3H,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAiB,EAAE,eAAe,CAAC,CAAC;QAEzE,IAAI,YAA0C,CAAC;QAE/C,IAAI;YACA,YAAY,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,EAAG,CAAC,qBAAqB,CAAC,MAAM,EAAE,gBAAiB,CAAC,WAAW,EAAE,SAAU,EAAE,SAAS,CAAC,CAAC;SAC1I;QAAC,OAAO,GAAG,EAAE;YACV,YAAY,GAAG,GAAY,CAAC;SAC/B;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE;YAClC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SACrE;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,CAAC;QAE7C,IAAI,YAAY,YAAY,KAAK,EAAE;YAC/B,eAAe;YACf,OAAO;SACV;QAED,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACtC,CAAC;IAED,kCAAkC;IAC3B,KAAK,CAAC,QAAQ,CAAC,YAAkC;QACpD,IAAI,OAA4B,CAAC;QACjC,IAAI;YACA,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;SACvG;QAAG,OAAO,GAAG,EAAE;YACZ,OAAO;SACV;QACD,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE;YAClC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;SAC1D;IACL,CAAC;IAEM,QAAQ,CAAC,KAAa;QACzB,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAE7D,IAAI,eAAe,GAAa,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QACpE,eAAe,GAAG,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,eAAe,EAAE,KAAK,CAAC,CAAC;QAEjI,eAAe,CAAC,YAAY,CAAC,GAAG,eAAe,CAAC;QAEhD,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE;YAClC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;SAClE;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC;IAC7C,CAAC;IAEM,cAAc;QACjB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,kDAAkD;IAC3C,aAAa,CAAC,gBAAoC,EAAE,eAA2B;QAClF,MAAM,cAAc,GAAsB,EAAE,CAAC;QAE7C,KAAK,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,gBAAiB,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE;YACnE,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAC9C,SAAS,CAAC,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACtC,cAAc,CAAC,KAAK,CAAC,GAAG,IAAA,0CAA+B,EAAC,SAAS,CAAC,OAAO,CAAC,CAAC;SAC9E;QAED,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC;QAEjD,OAAO,cAAc,CAAC;IAC1B,CAAC;CAEJ;AA9HD,8DA8HC;AAED,kBAAe,yBAAyB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { ICaptchaContextState, ICaptchaState, ICaptchaStatusState, ICaptchaStatusReducerAction } from '../types';
2
+ export declare const captchaContextReducer: (state: ICaptchaContextState, action: Partial<ICaptchaContextState>) => {
3
+ config: import("../types").ProsopoCaptchaConfig;
4
+ contractAddress?: string | undefined;
5
+ account?: import("@polkadot/extension-inject/types").InjectedAccountWithMeta | undefined;
6
+ };
7
+ export declare const captchaStateReducer: (state: ICaptchaState, action: Partial<ICaptchaState>) => ICaptchaState;
8
+ export declare const captchaStatusReducer: (state: ICaptchaStatusState, action: ICaptchaStatusReducerAction) => ICaptchaStatusState;
9
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/modules/client.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC;AAGjH,eAAO,MAAM,qBAAqB,UAAW,oBAAoB,UAAU,QAAQ,oBAAoB,CAAC;;;;CAEvG,CAAA;AAED,eAAO,MAAM,mBAAmB,UAAW,aAAa,UAAU,QAAQ,aAAa,CAAC,KAAG,aAE1F,CAAA;AAED,eAAO,MAAM,oBAAoB,UAAW,mBAAmB,UAAU,2BAA2B,KAAG,mBAWtG,CAAA"}
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  // Copyright (C) 2021-2022 Prosopo (UK) Ltd.
2
3
  // This file is part of procaptcha <https://github.com/prosopo-io/procaptcha>.
3
4
  //
@@ -13,19 +14,17 @@
13
14
  //
14
15
  // You should have received a copy of the GNU General Public License
15
16
  // along with procaptcha. If not, see <http://www.gnu.org/licenses/>.
16
-
17
- import { ICaptchaContextState, ICaptchaState, ICaptchaStatusState, ICaptchaStatusReducerAction } from '../types';
18
-
19
-
20
- export const captchaContextReducer = (state: ICaptchaContextState, action: Partial<ICaptchaContextState>) => {
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.captchaStatusReducer = exports.captchaStateReducer = exports.captchaContextReducer = void 0;
19
+ const captchaContextReducer = (state, action) => {
21
20
  return { ...state, ...action };
22
- }
23
-
24
- export const captchaStateReducer = (state: ICaptchaState, action: Partial<ICaptchaState>): ICaptchaState => {
21
+ };
22
+ exports.captchaContextReducer = captchaContextReducer;
23
+ const captchaStateReducer = (state, action) => {
25
24
  return { ...state, ...action };
26
- }
27
-
28
- export const captchaStatusReducer = (state: ICaptchaStatusState, action: ICaptchaStatusReducerAction): ICaptchaStatusState => {
25
+ };
26
+ exports.captchaStateReducer = captchaStateReducer;
27
+ const captchaStatusReducer = (state, action) => {
29
28
  const logger = { info: console.log, error: console.error };
30
29
  for (const key in action) {
31
30
  logger[key](action[key]);
@@ -36,4 +35,6 @@ export const captchaStatusReducer = (state: ICaptchaStatusState, action: ICaptch
36
35
  return { [key]: String(status) };
37
36
  }
38
37
  return state;
39
- }
38
+ };
39
+ exports.captchaStatusReducer = captchaStatusReducer;
40
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/modules/client.ts"],"names":[],"mappings":";AAAA,4CAA4C;AAC5C,8EAA8E;AAC9E,EAAE;AACF,qEAAqE;AACrE,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,gEAAgE;AAChE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,sEAAsE;;;AAK/D,MAAM,qBAAqB,GAAG,CAAC,KAA2B,EAAE,MAAqC,EAAE,EAAE;IACxG,OAAO,EAAE,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE,CAAC;AACnC,CAAC,CAAA;AAFY,QAAA,qBAAqB,yBAEjC;AAEM,MAAM,mBAAmB,GAAG,CAAC,KAAoB,EAAE,MAA8B,EAAiB,EAAE;IACvG,OAAO,EAAE,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE,CAAC;AACnC,CAAC,CAAA;AAFY,QAAA,mBAAmB,uBAE/B;AAEM,MAAM,oBAAoB,GAAG,CAAC,KAA0B,EAAE,MAAmC,EAAuB,EAAE;IACzH,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;IAC3D,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;QACtB,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,IAAI,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvE,IAAI,MAAM,YAAY,KAAK,EAAE;YACzB,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;SAC3B;QACD,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;KACpC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC,CAAA;AAXY,QAAA,oBAAoB,wBAWhC"}
@@ -0,0 +1,7 @@
1
+ import ProsopoContract from "../api/ProsopoContract";
2
+ import { WsProvider } from "@polkadot/rpc-provider";
3
+ import { InjectedAccountWithMeta } from "@polkadot/extension-inject/types";
4
+ import { ProviderInterface } from "@polkadot/rpc-provider/types";
5
+ export declare function getWsProvider(url?: string): WsProvider;
6
+ export declare function getProsopoContract(address: string, dappAddress: string, account: InjectedAccountWithMeta, providerInterface?: ProviderInterface): Promise<ProsopoContract>;
7
+ //# sourceMappingURL=contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/modules/contract.ts"],"names":[],"mappings":"AAeA,OAAO,eAAe,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAgB,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,wBAAgB,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,UAAU,CAEtD;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC,CAEhL"}
@@ -1,3 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getProsopoContract = exports.getWsProvider = void 0;
4
+ const tslib_1 = require("tslib");
1
5
  // Copyright (C) 2021-2022 Prosopo (UK) Ltd.
2
6
  // This file is part of procaptcha <https://github.com/prosopo-io/procaptcha>.
3
7
  //
@@ -13,25 +17,14 @@
13
17
  //
14
18
  // You should have received a copy of the GNU General Public License
15
19
  // along with procaptcha. If not, see <http://www.gnu.org/licenses/>.
16
- import axios, { AxiosInstance, AxiosResponse } from "axios";
17
-
18
- export class HttpClientBase {
19
-
20
- protected readonly axios: AxiosInstance;
21
-
22
- constructor(baseURL: string, prefix = "") {
23
- baseURL = baseURL + prefix;
24
- this.axios = axios.create({ baseURL });
25
- this.axios.interceptors.response.use(this.responseHandler, this.errorHandler);
26
- }
27
-
28
- protected responseHandler = (response: AxiosResponse) => {
29
- console.log("API REQUEST", response.request);
30
- return response.data;
31
- }
32
-
33
- protected errorHandler = (error: any) => Promise.reject(error.response);
34
-
20
+ const ProsopoContract_1 = tslib_1.__importDefault(require("../api/ProsopoContract"));
21
+ const rpc_provider_1 = require("@polkadot/rpc-provider");
22
+ function getWsProvider(url) {
23
+ return new rpc_provider_1.WsProvider(url);
35
24
  }
36
-
37
- export default HttpClientBase;
25
+ exports.getWsProvider = getWsProvider;
26
+ async function getProsopoContract(address, dappAddress, account, providerInterface) {
27
+ return await ProsopoContract_1.default.create(address, dappAddress, account, providerInterface ?? getWsProvider());
28
+ }
29
+ exports.getProsopoContract = getProsopoContract;
30
+ //# sourceMappingURL=contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/modules/contract.ts"],"names":[],"mappings":";;;;AAAA,4CAA4C;AAC5C,8EAA8E;AAC9E,EAAE;AACF,qEAAqE;AACrE,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,gEAAgE;AAChE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,sEAAsE;AACtE,qFAAqD;AACrD,yDAAkE;AAIlE,SAAgB,aAAa,CAAC,GAAY;IACtC,OAAO,IAAI,yBAAU,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC;AAFD,sCAEC;AAEM,KAAK,UAAU,kBAAkB,CAAC,OAAe,EAAE,WAAmB,EAAE,OAAgC,EAAE,iBAAqC;IAClJ,OAAO,MAAM,yBAAe,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,IAAI,aAAa,EAAE,CAAC,CAAC;AAC7G,CAAC;AAFD,gDAEC"}