@vlayer/sdk 0.1.0-nightly-20241014-cf9cd99 → 0.1.0-nightly-20241015-013f55a
Sign up to get free protection for your applications and to get access to all the features.
- package/node_modules/@vlayer/web-proof-commons/.gitignore +175 -0
- package/node_modules/@vlayer/web-proof-commons/README.md +4 -0
- package/node_modules/@vlayer/web-proof-commons/package.json +17 -0
- package/node_modules/@vlayer/web-proof-commons/src/index.ts +3 -0
- package/node_modules/@vlayer/web-proof-commons/src/types/message.ts +71 -0
- package/node_modules/@vlayer/web-proof-commons/src/types/webProof.ts +111 -0
- package/node_modules/@vlayer/web-proof-commons/src/utils.ts +12 -0
- package/node_modules/@vlayer/web-proof-commons/tsconfig.json +27 -0
- package/package.json +3 -3
- package/src/api/helpers.ts +6 -3
- package/src/api/lib/types/index.ts +0 -1
@@ -0,0 +1,175 @@
|
|
1
|
+
# Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore
|
2
|
+
|
3
|
+
# Logs
|
4
|
+
|
5
|
+
logs
|
6
|
+
_.log
|
7
|
+
npm-debug.log_
|
8
|
+
yarn-debug.log*
|
9
|
+
yarn-error.log*
|
10
|
+
lerna-debug.log*
|
11
|
+
.pnpm-debug.log*
|
12
|
+
|
13
|
+
# Caches
|
14
|
+
|
15
|
+
.cache
|
16
|
+
|
17
|
+
# Diagnostic reports (https://nodejs.org/api/report.html)
|
18
|
+
|
19
|
+
report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json
|
20
|
+
|
21
|
+
# Runtime data
|
22
|
+
|
23
|
+
pids
|
24
|
+
_.pid
|
25
|
+
_.seed
|
26
|
+
*.pid.lock
|
27
|
+
|
28
|
+
# Directory for instrumented libs generated by jscoverage/JSCover
|
29
|
+
|
30
|
+
lib-cov
|
31
|
+
|
32
|
+
# Coverage directory used by tools like istanbul
|
33
|
+
|
34
|
+
coverage
|
35
|
+
*.lcov
|
36
|
+
|
37
|
+
# nyc test coverage
|
38
|
+
|
39
|
+
.nyc_output
|
40
|
+
|
41
|
+
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
42
|
+
|
43
|
+
.grunt
|
44
|
+
|
45
|
+
# Bower dependency directory (https://bower.io/)
|
46
|
+
|
47
|
+
bower_components
|
48
|
+
|
49
|
+
# node-waf configuration
|
50
|
+
|
51
|
+
.lock-wscript
|
52
|
+
|
53
|
+
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
54
|
+
|
55
|
+
build/Release
|
56
|
+
|
57
|
+
# Dependency directories
|
58
|
+
|
59
|
+
node_modules/
|
60
|
+
jspm_packages/
|
61
|
+
|
62
|
+
# Snowpack dependency directory (https://snowpack.dev/)
|
63
|
+
|
64
|
+
web_modules/
|
65
|
+
|
66
|
+
# TypeScript cache
|
67
|
+
|
68
|
+
*.tsbuildinfo
|
69
|
+
|
70
|
+
# Optional npm cache directory
|
71
|
+
|
72
|
+
.npm
|
73
|
+
|
74
|
+
# Optional eslint cache
|
75
|
+
|
76
|
+
.eslintcache
|
77
|
+
|
78
|
+
# Optional stylelint cache
|
79
|
+
|
80
|
+
.stylelintcache
|
81
|
+
|
82
|
+
# Microbundle cache
|
83
|
+
|
84
|
+
.rpt2_cache/
|
85
|
+
.rts2_cache_cjs/
|
86
|
+
.rts2_cache_es/
|
87
|
+
.rts2_cache_umd/
|
88
|
+
|
89
|
+
# Optional REPL history
|
90
|
+
|
91
|
+
.node_repl_history
|
92
|
+
|
93
|
+
# Output of 'npm pack'
|
94
|
+
|
95
|
+
*.tgz
|
96
|
+
|
97
|
+
# Yarn Integrity file
|
98
|
+
|
99
|
+
.yarn-integrity
|
100
|
+
|
101
|
+
# dotenv environment variable files
|
102
|
+
|
103
|
+
.env
|
104
|
+
.env.development.local
|
105
|
+
.env.test.local
|
106
|
+
.env.production.local
|
107
|
+
.env.local
|
108
|
+
|
109
|
+
# parcel-bundler cache (https://parceljs.org/)
|
110
|
+
|
111
|
+
.parcel-cache
|
112
|
+
|
113
|
+
# Next.js build output
|
114
|
+
|
115
|
+
.next
|
116
|
+
out
|
117
|
+
|
118
|
+
# Nuxt.js build / generate output
|
119
|
+
|
120
|
+
.nuxt
|
121
|
+
dist
|
122
|
+
|
123
|
+
# Gatsby files
|
124
|
+
|
125
|
+
# Comment in the public line in if your project uses Gatsby and not Next.js
|
126
|
+
|
127
|
+
# https://nextjs.org/blog/next-9-1#public-directory-support
|
128
|
+
|
129
|
+
# public
|
130
|
+
|
131
|
+
# vuepress build output
|
132
|
+
|
133
|
+
.vuepress/dist
|
134
|
+
|
135
|
+
# vuepress v2.x temp and cache directory
|
136
|
+
|
137
|
+
.temp
|
138
|
+
|
139
|
+
# Docusaurus cache and generated files
|
140
|
+
|
141
|
+
.docusaurus
|
142
|
+
|
143
|
+
# Serverless directories
|
144
|
+
|
145
|
+
.serverless/
|
146
|
+
|
147
|
+
# FuseBox cache
|
148
|
+
|
149
|
+
.fusebox/
|
150
|
+
|
151
|
+
# DynamoDB Local files
|
152
|
+
|
153
|
+
.dynamodb/
|
154
|
+
|
155
|
+
# TernJS port file
|
156
|
+
|
157
|
+
.tern-port
|
158
|
+
|
159
|
+
# Stores VSCode versions used for testing VSCode extensions
|
160
|
+
|
161
|
+
.vscode-test
|
162
|
+
|
163
|
+
# yarn v2
|
164
|
+
|
165
|
+
.yarn/cache
|
166
|
+
.yarn/unplugged
|
167
|
+
.yarn/build-state.yml
|
168
|
+
.yarn/install-state.gz
|
169
|
+
.pnp.*
|
170
|
+
|
171
|
+
# IntelliJ based IDEs
|
172
|
+
.idea
|
173
|
+
|
174
|
+
# Finder (MacOS) folder config
|
175
|
+
.DS_Store
|
@@ -0,0 +1,17 @@
|
|
1
|
+
{
|
2
|
+
"name": "@vlayer/web-proof-commons",
|
3
|
+
"private": true,
|
4
|
+
"version": "1.0.0",
|
5
|
+
"exports": "./src/index.ts",
|
6
|
+
"type": "module",
|
7
|
+
"scripts": {
|
8
|
+
"lint": "eslint lib",
|
9
|
+
"lint:fix": "eslint --fix lib"
|
10
|
+
},
|
11
|
+
"devDependencies": {
|
12
|
+
"@types/bun": "latest"
|
13
|
+
},
|
14
|
+
"peerDependencies": {
|
15
|
+
"typescript": "^5.0.0"
|
16
|
+
}
|
17
|
+
}
|
@@ -0,0 +1,71 @@
|
|
1
|
+
import type { Branded } from "../utils.ts";
|
2
|
+
import type { WebProof } from "./webProof.ts";
|
3
|
+
|
4
|
+
export const EXTENSION_STEP = {
|
5
|
+
expectUrl: "expectUrl",
|
6
|
+
startPage: "startPage",
|
7
|
+
notarize: "notarize",
|
8
|
+
} as const;
|
9
|
+
|
10
|
+
export type ExtensionStep =
|
11
|
+
(typeof EXTENSION_STEP)[keyof typeof EXTENSION_STEP];
|
12
|
+
|
13
|
+
export const enum ExtensionAction {
|
14
|
+
RequestWebProof,
|
15
|
+
}
|
16
|
+
|
17
|
+
export type MessageToExtension = {
|
18
|
+
action: ExtensionAction;
|
19
|
+
payload: WebProverSessionConfig;
|
20
|
+
};
|
21
|
+
|
22
|
+
export const enum ExtensionMessageType {
|
23
|
+
ProofDone = "ProofDone",
|
24
|
+
ProofError = "ProofError",
|
25
|
+
RedirectBack = "RedirectBack",
|
26
|
+
}
|
27
|
+
|
28
|
+
export type ExtensionMessage =
|
29
|
+
| { type: ExtensionMessageType.ProofDone; proof: WebProof }
|
30
|
+
| { type: ExtensionMessageType.ProofError; error: string }
|
31
|
+
| { type: ExtensionMessageType.RedirectBack };
|
32
|
+
|
33
|
+
export type WebProverSessionConfig = {
|
34
|
+
notaryUrl: string;
|
35
|
+
wsProxyUrl: string;
|
36
|
+
logoUrl: string;
|
37
|
+
steps: WebProofStep[];
|
38
|
+
};
|
39
|
+
|
40
|
+
export type WebProofStep =
|
41
|
+
| WebProofStepNotarize
|
42
|
+
| WebProofStepExpectUrl
|
43
|
+
| WebProofStepStartPage;
|
44
|
+
|
45
|
+
export type WebProofStepNotarize = Branded<
|
46
|
+
{
|
47
|
+
url: string;
|
48
|
+
method: string;
|
49
|
+
label: string;
|
50
|
+
step: typeof EXTENSION_STEP.notarize;
|
51
|
+
},
|
52
|
+
"notarize"
|
53
|
+
>;
|
54
|
+
|
55
|
+
export type WebProofStepExpectUrl = Branded<
|
56
|
+
{
|
57
|
+
url: string;
|
58
|
+
label: string;
|
59
|
+
step: typeof EXTENSION_STEP.expectUrl;
|
60
|
+
},
|
61
|
+
"expectUrl"
|
62
|
+
>;
|
63
|
+
|
64
|
+
export type WebProofStepStartPage = Branded<
|
65
|
+
{
|
66
|
+
url: string;
|
67
|
+
label: string;
|
68
|
+
step: typeof EXTENSION_STEP.startPage;
|
69
|
+
},
|
70
|
+
"startPage"
|
71
|
+
>;
|
@@ -0,0 +1,111 @@
|
|
1
|
+
// NOTE : this is copied from tlsn-js 5.4
|
2
|
+
// for some reason newest versions doesn't export this type (clarification is in progress)
|
3
|
+
// probably it should be reexported from tlsn-js
|
4
|
+
|
5
|
+
export interface WebProof {
|
6
|
+
session: Session;
|
7
|
+
substrings: Substrings;
|
8
|
+
notaryUrl: string;
|
9
|
+
}
|
10
|
+
|
11
|
+
export interface Session {
|
12
|
+
header: Header;
|
13
|
+
signature: Signature;
|
14
|
+
session_info: SessionInfo;
|
15
|
+
}
|
16
|
+
|
17
|
+
export interface SessionInfo {
|
18
|
+
server_name: ServerName;
|
19
|
+
handshake_decommitment: HandshakeDecommitment;
|
20
|
+
}
|
21
|
+
|
22
|
+
export interface HandshakeDecommitment {
|
23
|
+
nonce: number[];
|
24
|
+
data: Data;
|
25
|
+
}
|
26
|
+
|
27
|
+
export interface Data {
|
28
|
+
server_cert_details: ServerCERTDetails;
|
29
|
+
server_kx_details: ServerKxDetails;
|
30
|
+
client_random: number[];
|
31
|
+
server_random: number[];
|
32
|
+
}
|
33
|
+
|
34
|
+
export interface ServerCERTDetails {
|
35
|
+
cert_chain: Array<number[]>;
|
36
|
+
ocsp_response: number[];
|
37
|
+
scts: null;
|
38
|
+
}
|
39
|
+
|
40
|
+
export interface ServerKxDetails {
|
41
|
+
kx_params: number[];
|
42
|
+
kx_sig: KxSig;
|
43
|
+
}
|
44
|
+
|
45
|
+
export interface KxSig {
|
46
|
+
scheme: string;
|
47
|
+
sig: number[];
|
48
|
+
}
|
49
|
+
|
50
|
+
export interface Header {
|
51
|
+
encoder_seed: number[];
|
52
|
+
merkle_root: number[];
|
53
|
+
sent_len: number;
|
54
|
+
recv_len: number;
|
55
|
+
handshake_summary: HandshakeSummary;
|
56
|
+
}
|
57
|
+
|
58
|
+
export interface HandshakeSummary {
|
59
|
+
time: number;
|
60
|
+
server_public_key: ServerPublicKey;
|
61
|
+
handshake_commitment: number[];
|
62
|
+
}
|
63
|
+
|
64
|
+
export interface ServerPublicKey {
|
65
|
+
group: string;
|
66
|
+
key: number[];
|
67
|
+
}
|
68
|
+
|
69
|
+
export interface ServerName {
|
70
|
+
Dns: string;
|
71
|
+
}
|
72
|
+
|
73
|
+
export interface Signature {
|
74
|
+
P256: string;
|
75
|
+
}
|
76
|
+
|
77
|
+
export interface Substrings {
|
78
|
+
openings: { [key: string]: Opening[] };
|
79
|
+
inclusion_proof: InclusionProof;
|
80
|
+
}
|
81
|
+
|
82
|
+
export interface InclusionProof {
|
83
|
+
proof: unknown[];
|
84
|
+
total_leaves: number;
|
85
|
+
}
|
86
|
+
|
87
|
+
export interface Opening {
|
88
|
+
kind?: string;
|
89
|
+
ranges?: Range[];
|
90
|
+
direction?: string;
|
91
|
+
Blake3?: Blake3;
|
92
|
+
}
|
93
|
+
|
94
|
+
export interface Blake3 {
|
95
|
+
data: number[];
|
96
|
+
nonce: number[];
|
97
|
+
}
|
98
|
+
|
99
|
+
export interface Range {
|
100
|
+
start: number;
|
101
|
+
end: number;
|
102
|
+
}
|
103
|
+
export const assertWebProof = function (candidate: {
|
104
|
+
notaryUrl?: string;
|
105
|
+
}): asserts candidate is WebProof {
|
106
|
+
//for now only thing we check is notary url
|
107
|
+
//TODO: implement later once we known the conteact with tlsn-js
|
108
|
+
if (!candidate.notaryUrl) {
|
109
|
+
throw new Error("Missing required parameter");
|
110
|
+
}
|
111
|
+
};
|
@@ -0,0 +1,12 @@
|
|
1
|
+
declare const __brand: unique symbol;
|
2
|
+
type Brand<B> = { [__brand]: B };
|
3
|
+
export type Branded<T, B> = T & Brand<B>;
|
4
|
+
|
5
|
+
export function isDefined<T>(
|
6
|
+
value: T | undefined,
|
7
|
+
message: string = "Value is undefined",
|
8
|
+
): asserts value is T {
|
9
|
+
if (value === undefined) {
|
10
|
+
throw new Error(message);
|
11
|
+
}
|
12
|
+
}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
{
|
2
|
+
"compilerOptions": {
|
3
|
+
// Enable latest features
|
4
|
+
"lib": ["ESNext", "DOM"],
|
5
|
+
"target": "ESNext",
|
6
|
+
"module": "ESNext",
|
7
|
+
"moduleDetection": "force",
|
8
|
+
"jsx": "react-jsx",
|
9
|
+
"allowJs": true,
|
10
|
+
|
11
|
+
// Bundler mode
|
12
|
+
"moduleResolution": "bundler",
|
13
|
+
"allowImportingTsExtensions": true,
|
14
|
+
"verbatimModuleSyntax": true,
|
15
|
+
"noEmit": true,
|
16
|
+
|
17
|
+
// Best practices
|
18
|
+
"strict": true,
|
19
|
+
"skipLibCheck": true,
|
20
|
+
"noFallthroughCasesInSwitch": true,
|
21
|
+
|
22
|
+
// Some stricter flags (disabled by default)
|
23
|
+
"noUnusedLocals": false,
|
24
|
+
"noUnusedParameters": false,
|
25
|
+
"noPropertyAccessFromIndexSignature": false
|
26
|
+
}
|
27
|
+
}
|
package/package.json
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
{
|
2
2
|
"name": "@vlayer/sdk",
|
3
3
|
"type": "module",
|
4
|
-
"
|
5
|
-
"version": "0.1.0-nightly-
|
4
|
+
"exports": "./src/index.ts",
|
5
|
+
"version": "0.1.0-nightly-20241015-013f55a",
|
6
6
|
"types": "src/index.ts",
|
7
7
|
"scripts": {
|
8
8
|
"build": "npm run gen:types",
|
@@ -22,7 +22,7 @@
|
|
22
22
|
"dns-over-http-resolver": "^3.0.3",
|
23
23
|
"postal-mime": "^2.3.2",
|
24
24
|
"viem": "^2.21.0",
|
25
|
-
"@vlayer/web-proof-commons": "file
|
25
|
+
"@vlayer/web-proof-commons": "file:../web-proof-commons"
|
26
26
|
},
|
27
27
|
"bundleDependencies": [
|
28
28
|
"@vlayer/web-proof-commons"
|
package/src/api/helpers.ts
CHANGED
@@ -13,13 +13,16 @@ import {
|
|
13
13
|
} from "viem";
|
14
14
|
|
15
15
|
import { privateKeyToAccount, generatePrivateKey } from "viem/accounts";
|
16
|
-
import { foundry } from "viem/chains";
|
16
|
+
import { foundry, optimismSepolia } from "viem/chains";
|
17
17
|
|
18
18
|
import type { ContractSpec, ContractArg } from "types/ethereum";
|
19
19
|
|
20
|
-
const rpcUrls: Map<number, HttpTransport> = new Map([
|
20
|
+
const rpcUrls: Map<number, HttpTransport> = new Map([
|
21
|
+
[foundry.id, http()],
|
22
|
+
[optimismSepolia.id, http("https://sepolia.optimism.io")],
|
23
|
+
]);
|
21
24
|
|
22
|
-
export const chainIds = [foundry.id];
|
25
|
+
export const chainIds = [foundry.id, optimismSepolia.id];
|
23
26
|
|
24
27
|
export function createAnvilClient(
|
25
28
|
chainId: number = foundry.id,
|