@vlayer/react 0.1.0-nightly-20250213-df4a6a3 → 0.1.0-nightly-20250217-9669344

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 (60) hide show
  1. package/dist/context.d.ts +20 -0
  2. package/dist/context.d.ts.map +1 -0
  3. package/dist/context.js +51 -0
  4. package/dist/context.js.map +1 -0
  5. package/dist/context.test.d.ts +2 -0
  6. package/dist/context.test.d.ts.map +1 -0
  7. package/dist/context.test.js +75 -0
  8. package/dist/context.test.js.map +1 -0
  9. package/dist/defaults.d.ts +20 -0
  10. package/dist/defaults.d.ts.map +1 -0
  11. package/dist/defaults.js +21 -0
  12. package/dist/defaults.js.map +1 -0
  13. package/dist/index.d.ts +7 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +7 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/types.d.ts +35 -0
  18. package/dist/types.d.ts.map +1 -0
  19. package/dist/types.js +18 -0
  20. package/dist/types.js.map +1 -0
  21. package/dist/useCallProver/useCallProver.d.ts +19 -0
  22. package/dist/useCallProver/useCallProver.d.ts.map +1 -0
  23. package/dist/useCallProver/useCallProver.js +49 -0
  24. package/dist/useCallProver/useCallProver.js.map +1 -0
  25. package/dist/useWaitForProvingResult/useWaitForProvingResult.d.ts +18 -0
  26. package/dist/useWaitForProvingResult/useWaitForProvingResult.d.ts.map +1 -0
  27. package/dist/useWaitForProvingResult/useWaitForProvingResult.js +41 -0
  28. package/dist/useWaitForProvingResult/useWaitForProvingResult.js.map +1 -0
  29. package/dist/useWebproof/extension.mock.d.ts +25 -0
  30. package/dist/useWebproof/extension.mock.d.ts.map +1 -0
  31. package/dist/useWebproof/extension.mock.js +65 -0
  32. package/dist/useWebproof/extension.mock.js.map +1 -0
  33. package/dist/useWebproof/useWebProof.d.ts +16 -0
  34. package/dist/useWebproof/useWebProof.d.ts.map +1 -0
  35. package/dist/useWebproof/useWebProof.js +37 -0
  36. package/dist/useWebproof/useWebProof.js.map +1 -0
  37. package/dist/useWebproof/useWebProof.test.d.ts +2 -0
  38. package/dist/useWebproof/useWebProof.test.d.ts.map +1 -0
  39. package/dist/useWebproof/useWebProof.test.js +119 -0
  40. package/dist/useWebproof/useWebProof.test.js.map +1 -0
  41. package/package.json +5 -2
  42. package/bun.lockb +0 -0
  43. package/eslint.config.ts +0 -36
  44. package/src/context.test.tsx +0 -105
  45. package/src/context.tsx +0 -78
  46. package/src/defaults.ts +0 -22
  47. package/src/index.ts +0 -7
  48. package/src/interface.test.ts +0 -12
  49. package/src/types.ts +0 -47
  50. package/src/useCallProver/useCallProver.test.ts +0 -126
  51. package/src/useCallProver/useCallProver.ts +0 -60
  52. package/src/useWaitForProvingResult/useWaitForProvingResult.test.ts +0 -80
  53. package/src/useWaitForProvingResult/useWaitForProvingResult.ts +0 -48
  54. package/src/useWebproof/extension.mock.ts +0 -103
  55. package/src/useWebproof/useWebProof.test.tsx +0 -142
  56. package/src/useWebproof/useWebProof.ts +0 -52
  57. package/tsconfig.base.json +0 -26
  58. package/tsconfig.build.json +0 -12
  59. package/tsconfig.json +0 -6
  60. package/vitest.config.ts +0 -8
@@ -1,80 +0,0 @@
1
- import { renderHook, waitFor } from "@testing-library/react";
2
- import { describe, it, expect, vi } from "vitest";
3
- import {
4
- useWaitForProvingResult,
5
- WaitForProvingResultStatus,
6
- } from "./useWaitForProvingResult";
7
- import type { BrandedHash } from "@vlayer/sdk";
8
- import type { Abi } from "viem";
9
-
10
- const mockResult = { success: true };
11
- const mockError = new Error("Test error");
12
- const mockHash = "0x123";
13
-
14
- const mockVlayerClient = vi.hoisted(() => ({
15
- waitForProvingResult: vi.fn().mockResolvedValue({ success: true }),
16
- }));
17
- vi.mock("../context", () => ({
18
- useProofContext: () => ({
19
- vlayerClient: mockVlayerClient,
20
- }),
21
- }));
22
-
23
- describe("useWaitForProvingResult", () => {
24
- it("should initialize properly", () => {
25
- const { result } = renderHook(() => useWaitForProvingResult(null));
26
-
27
- expect(result.current).toMatchObject({
28
- status: WaitForProvingResultStatus.Idle,
29
- isIdle: true,
30
- error: null,
31
- });
32
- });
33
-
34
- it("should handle successful proving result", async () => {
35
- const { result } = renderHook(() =>
36
- useWaitForProvingResult({ hash: "0x1234" } as BrandedHash<Abi, string>),
37
- );
38
-
39
- await waitFor(() => {
40
- expect(result.current).toMatchObject({
41
- data: mockResult,
42
- status: WaitForProvingResultStatus.Ready,
43
- isReady: true,
44
- error: null,
45
- });
46
- });
47
- });
48
- it("should handle proving error", async () => {
49
- mockVlayerClient.waitForProvingResult.mockRejectedValueOnce(mockError);
50
-
51
- const { result } = renderHook(() =>
52
- useWaitForProvingResult({ hash: mockHash } as BrandedHash<Abi, string>),
53
- );
54
-
55
- await waitFor(() => {
56
- expect(result.current).toMatchObject({
57
- status: WaitForProvingResultStatus.Error,
58
- isError: true,
59
- error: mockError,
60
- });
61
- });
62
- });
63
-
64
- it("should set pending status while waiting for result", async () => {
65
- mockVlayerClient.waitForProvingResult.mockImplementation(
66
- () =>
67
- new Promise((resolve) => setTimeout(() => resolve(mockResult), 100)),
68
- );
69
-
70
- const { result } = renderHook(() =>
71
- useWaitForProvingResult({ hash: mockHash } as BrandedHash<Abi, string>),
72
- );
73
- await waitFor(() => {
74
- expect(result.current).toMatchObject({
75
- status: WaitForProvingResultStatus.Pending,
76
- isPending: true,
77
- });
78
- });
79
- });
80
- });
@@ -1,48 +0,0 @@
1
- import type { BrandedHash } from "@vlayer/sdk";
2
- import { useState, useEffect } from "react";
3
- import { useProofContext } from "../context";
4
- import type { Abi } from "viem";
5
-
6
- export enum WaitForProvingResultStatus {
7
- Idle = "Idle",
8
- Pending = "Pending",
9
- Ready = "Ready",
10
- Error = "Error",
11
- }
12
-
13
- export const useWaitForProvingResult = (
14
- hash: BrandedHash<Abi, string> | null,
15
- ) => {
16
- const { vlayerClient } = useProofContext();
17
- const [status, setStatus] = useState<WaitForProvingResultStatus>(
18
- WaitForProvingResultStatus.Idle,
19
- );
20
- const [error, setError] = useState<Error | null>(null);
21
- const [result, setResult] = useState<unknown>(null);
22
- useEffect(() => {
23
- if (!hash) {
24
- return;
25
- }
26
- setStatus(WaitForProvingResultStatus.Pending);
27
- vlayerClient
28
- .waitForProvingResult({ hash })
29
- .then((result) => {
30
- setStatus(WaitForProvingResultStatus.Ready);
31
- setResult(result);
32
- })
33
- .catch((e) => {
34
- setError(e as Error);
35
- setStatus(WaitForProvingResultStatus.Error);
36
- });
37
- }, [JSON.stringify(hash)]);
38
-
39
- return {
40
- status,
41
- error,
42
- isIdle: status === WaitForProvingResultStatus.Idle,
43
- isPending: status === WaitForProvingResultStatus.Pending,
44
- isReady: status === WaitForProvingResultStatus.Ready,
45
- isError: status === WaitForProvingResultStatus.Error,
46
- data: result,
47
- };
48
- };
@@ -1,103 +0,0 @@
1
- import type { PresentationJSON, ZkProvingStatus } from "@vlayer/sdk";
2
-
3
- import {
4
- ExtensionMessageType,
5
- type ExtensionMessage,
6
- type WebProofProvider,
7
- } from "@vlayer/sdk";
8
-
9
- export class MockExtensionWebProofProvider implements WebProofProvider {
10
- private listeners: Partial<
11
- Record<
12
- ExtensionMessageType,
13
- ((
14
- args: Extract<ExtensionMessage, { type: ExtensionMessageType }>,
15
- ) => void)[]
16
- >
17
- > = {};
18
-
19
- constructor(
20
- private mockBehavior: {
21
- shouldSucceed?: boolean;
22
- delayMs?: number;
23
- mockProof?: PresentationJSON;
24
- mockError?: string;
25
- } = { shouldSucceed: true, delayMs: 100 },
26
- ) {}
27
-
28
- public notifyZkProvingStatus(status: ZkProvingStatus): void {
29
- console.log("Mock: ZK proving status notification", status);
30
- }
31
-
32
- public addEventListeners<T extends ExtensionMessageType>(
33
- messageType: T,
34
- listener: (args: Extract<ExtensionMessage, { type: T }>) => void,
35
- ): void {
36
- if (!this.listeners[messageType]) {
37
- this.listeners[messageType] = [];
38
- }
39
- this.listeners[messageType].push(
40
- listener as (args: ExtensionMessage) => void,
41
- );
42
- }
43
-
44
- public requestWebProof(): void {
45
- // Simulate async response
46
- setTimeout(() => {
47
- if (this.mockBehavior.shouldSucceed) {
48
- const mockProofDoneMessage: ExtensionMessage = {
49
- type: ExtensionMessageType.ProofDone,
50
- payload: {
51
- presentationJson:
52
- this.mockBehavior.mockProof ||
53
- ({ mock: "proof" } as unknown as PresentationJSON),
54
- decodedTranscript: {
55
- sent: "mock sent",
56
- recv: "mock recv",
57
- },
58
- },
59
- };
60
- this.listeners[ExtensionMessageType.ProofDone]?.forEach((listener) => {
61
- console.log("Mock: ProofDone message", mockProofDoneMessage);
62
- listener(mockProofDoneMessage);
63
- });
64
- } else {
65
- const mockErrorMessage: ExtensionMessage = {
66
- type: ExtensionMessageType.ProofError,
67
- payload: {
68
- error: this.mockBehavior.mockError || "Mock error occurred",
69
- },
70
- };
71
- this.listeners[ExtensionMessageType.ProofError]?.forEach((listener) =>
72
- listener(mockErrorMessage),
73
- );
74
- }
75
- }, this.mockBehavior.delayMs);
76
- }
77
-
78
- public async getWebProof(): Promise<{
79
- presentationJson: PresentationJSON;
80
- decodedTranscript: {
81
- sent: string;
82
- recv: string;
83
- };
84
- }> {
85
- await new Promise((resolve) =>
86
- setTimeout(resolve, this.mockBehavior.delayMs),
87
- );
88
-
89
- if (this.mockBehavior.shouldSucceed) {
90
- return {
91
- presentationJson:
92
- this.mockBehavior.mockProof ||
93
- ({ mock: "proof" } as unknown as PresentationJSON),
94
- decodedTranscript: {
95
- sent: "mock sent",
96
- recv: "mock recv",
97
- },
98
- };
99
- } else {
100
- throw new Error(this.mockBehavior.mockError || "Mock error occurred");
101
- }
102
- }
103
- }
@@ -1,142 +0,0 @@
1
- import { act, renderHook } from "@testing-library/react";
2
- import { it, expect, describe, vi, beforeEach } from "vitest";
3
- import { useWebProof } from "./useWebProof";
4
- import { ProofProvider } from "../context";
5
- import { MockExtensionWebProofProvider } from "./extension.mock";
6
- import { WebProofRequestStatus } from "../types";
7
-
8
- const mocks = vi.hoisted(() => ({
9
- createExtensionWebProofProvider: vi.fn(),
10
- }));
11
-
12
- vi.mock("@vlayer/sdk/web_proof", () => ({
13
- createExtensionWebProofProvider: mocks.createExtensionWebProofProvider,
14
- }));
15
-
16
- const stubWebProofRequest = {
17
- proverCallCommitment: {
18
- address: "0x" as `0x${string}`,
19
- proverAbi: [
20
- {
21
- type: "function",
22
- name: "mint",
23
- inputs: [],
24
- outputs: [],
25
- stateMutability: "nonpayable",
26
- },
27
- ] as const,
28
- chainId: 1,
29
- functionName: "mint",
30
- commitmentArgs: [] as [],
31
- },
32
- logoUrl: "http://twitterswap.com/logo.png",
33
- steps: [],
34
- };
35
-
36
- describe("useWebproof", () => {
37
- beforeEach(() => {
38
- vi.useFakeTimers();
39
- });
40
-
41
- const VlayerMockContext = ({ children }: { children: React.ReactNode }) => (
42
- <ProofProvider>{children}</ProofProvider>
43
- );
44
-
45
- const renderWebproofHook = () =>
46
- renderHook(() => useWebProof(stubWebProofRequest), {
47
- wrapper: VlayerMockContext,
48
- });
49
-
50
- const setupMockProvider = (options = {}) => {
51
- mocks.createExtensionWebProofProvider.mockImplementation(
52
- () => new MockExtensionWebProofProvider(options),
53
- );
54
- vi.runAllTimers();
55
- };
56
-
57
- it("should throw error if called outside of ProofProvider", () => {
58
- expect(() => renderHook(() => useWebProof(stubWebProofRequest))).toThrow(
59
- "useProofContext must be used within a ProofProvider",
60
- );
61
- });
62
-
63
- it("should initialize with the correct state", () => {
64
- setupMockProvider();
65
- const { result } = renderWebproofHook();
66
-
67
- expect(result.current).toEqual({
68
- webProof: null,
69
- status: WebProofRequestStatus.idle,
70
- isIdle: true,
71
- isError: false,
72
- isSuccess: false,
73
- isPending: false,
74
- error: null,
75
- requestWebProof: expect.any(Function) as () => void,
76
- });
77
- });
78
-
79
- it("should request the web proof", () => {
80
- const { result } = renderWebproofHook();
81
- act(() => result.current.requestWebProof());
82
-
83
- expect(result.current).toEqual({
84
- webProof: null,
85
- status: WebProofRequestStatus.pending,
86
- isIdle: false,
87
- isError: false,
88
- isSuccess: false,
89
- isPending: true,
90
- error: null,
91
- requestWebProof: expect.any(Function) as () => void,
92
- });
93
- });
94
-
95
- it("should set the web proof when the request is successful", () => {
96
- setupMockProvider({
97
- shouldSucceed: true,
98
- mockProof: { mock: "proof" },
99
- });
100
- const { result, rerender } = renderWebproofHook();
101
-
102
- act(() => result.current.requestWebProof());
103
- vi.advanceTimersByTime(1000);
104
- rerender();
105
-
106
- expect(result.current).toMatchObject({
107
- webProof: {
108
- webProofJson: JSON.stringify({ presentationJson: { mock: "proof" } }),
109
- },
110
- status: WebProofRequestStatus.success,
111
- isIdle: false,
112
- isPending: false,
113
- isError: false,
114
- isSuccess: true,
115
- error: null,
116
- requestWebProof: expect.any(Function) as () => void,
117
- });
118
- });
119
-
120
- it("should set the error when the request fails", () => {
121
- setupMockProvider({
122
- shouldSucceed: false,
123
- mockError: "Mock error occurred",
124
- });
125
- const { result, rerender } = renderWebproofHook();
126
-
127
- act(() => result.current.requestWebProof());
128
- vi.advanceTimersByTime(1000);
129
- rerender();
130
-
131
- expect(result.current).toEqual({
132
- webProof: null,
133
- status: WebProofRequestStatus.error,
134
- isIdle: false,
135
- isPending: false,
136
- isError: true,
137
- isSuccess: false,
138
- error: new Error("Mock error occurred"),
139
- requestWebProof: expect.any(Function) as () => void,
140
- });
141
- });
142
- });
@@ -1,52 +0,0 @@
1
- import { useEffect, useState } from "react";
2
- import { type Abi, type ContractFunctionName } from "viem";
3
- import { useProofContext } from "../context";
4
- import { WebProofRequestStatus } from "../types";
5
- import { ExtensionMessageType, type GetWebProofArgs } from "@vlayer/sdk";
6
-
7
- export const useWebProof = (
8
- webProofRequest: GetWebProofArgs<Abi, ContractFunctionName>,
9
- ) => {
10
- const { webProofProvider } = useProofContext();
11
- const [webProof, setWebProof] = useState<{
12
- webProofJson: string;
13
- } | null>(null);
14
- const [error, setError] = useState<Error | null>(null);
15
- const [status, setStatus] = useState<WebProofRequestStatus>(
16
- WebProofRequestStatus.idle,
17
- );
18
-
19
- useEffect(() => {
20
- webProofProvider.addEventListeners(
21
- ExtensionMessageType.ProofDone,
22
- ({ payload: { presentationJson } }) => {
23
- setWebProof({
24
- webProofJson: JSON.stringify({ presentationJson: presentationJson }),
25
- });
26
- setStatus(WebProofRequestStatus.success);
27
- },
28
- );
29
-
30
- webProofProvider.addEventListeners(
31
- ExtensionMessageType.ProofError,
32
- ({ payload: { error } }) => {
33
- setError(new Error(error));
34
- setStatus(WebProofRequestStatus.error);
35
- },
36
- );
37
- }, []);
38
-
39
- return {
40
- webProof,
41
- error,
42
- status,
43
- isIdle: status === WebProofRequestStatus.idle,
44
- isPending: status === WebProofRequestStatus.pending,
45
- isError: status === WebProofRequestStatus.error,
46
- isSuccess: status === WebProofRequestStatus.success,
47
- requestWebProof: () => {
48
- setStatus(WebProofRequestStatus.pending);
49
- webProofProvider.requestWebProof(webProofRequest);
50
- },
51
- };
52
- };
@@ -1,26 +0,0 @@
1
- {
2
- "extends": "../tsconfig.base.json",
3
- "compilerOptions": {
4
- "rootDir": "./src",
5
- "outDir": "./dist",
6
- "lib": [
7
- "ESNext",
8
- "DOM"
9
- ],
10
- "jsx": "react-jsx",
11
- "target": "ESNext",
12
- "module": "ESNext",
13
- "moduleResolution": "bundler",
14
- "moduleDetection": "force",
15
- "downlevelIteration": true,
16
- "forceConsistentCasingInFileNames": true,
17
- "verbatimModuleSyntax": true,
18
- "baseUrl": "./",
19
- "types": [
20
- "bun"
21
- ]
22
- },
23
- "include": [
24
- "src"
25
- ]
26
- }
@@ -1,12 +0,0 @@
1
- {
2
- "extends": "./tsconfig.base.json",
3
- "exclude": [
4
- "./src/**/*.test.ts"
5
- ],
6
- "compilerOptions": {
7
- "noEmit": false,
8
- "sourceMap": true,
9
- "declaration": true,
10
- "declarationMap": true
11
- }
12
- }
package/tsconfig.json DELETED
@@ -1,6 +0,0 @@
1
- {
2
- "extends": "./tsconfig.base.json",
3
- "tsc-alias" : {
4
- "resolveFullPaths": true
5
- }
6
- }
package/vitest.config.ts DELETED
@@ -1,8 +0,0 @@
1
- import { defineConfig } from "vitest/config";
2
-
3
- export default defineConfig({
4
- test: {
5
- environment: "jsdom",
6
- include: ["src/**/*.test.ts", "src/**/*.test.tsx"],
7
- },
8
- });