@fhevm/sdk 1.1.0-alpha.2 → 1.1.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_cjs/core/_version.js +1 -1
- package/_cjs/core/base/auth.js +8 -6
- package/_cjs/core/base/auth.js.map +1 -1
- package/_cjs/core/base/errors/InvalidUrlError.js +17 -0
- package/_cjs/core/base/errors/InvalidUrlError.js.map +1 -0
- package/_cjs/core/base/fetch.js +37 -0
- package/_cjs/core/base/fetch.js.map +1 -1
- package/_cjs/core/base/string.js +10 -0
- package/_cjs/core/base/string.js.map +1 -1
- package/_cjs/core/modules/decrypt/module/api-p.js +1 -2
- package/_cjs/core/modules/decrypt/module/api-p.js.map +1 -1
- package/_cjs/core/modules/relayer/module/RelayerAsyncRequest.js +16 -7
- package/_cjs/core/modules/relayer/module/RelayerAsyncRequest.js.map +1 -1
- package/_cjs/core/modules/relayer/module/fetchCoprocessorSignatures.js +5 -2
- package/_cjs/core/modules/relayer/module/fetchCoprocessorSignatures.js.map +1 -1
- package/_cjs/core/modules/relayer/module/fetchDelegatedUserDecrypt.js +5 -1
- package/_cjs/core/modules/relayer/module/fetchDelegatedUserDecrypt.js.map +1 -1
- package/_cjs/core/modules/relayer/module/fetchFheEncryptionKeySource.js +10 -5
- package/_cjs/core/modules/relayer/module/fetchFheEncryptionKeySource.js.map +1 -1
- package/_cjs/core/modules/relayer/module/fetchPublicDecrypt.js +5 -1
- package/_cjs/core/modules/relayer/module/fetchPublicDecrypt.js.map +1 -1
- package/_cjs/core/modules/relayer/module/fetchUserDecrypt.js +5 -1
- package/_cjs/core/modules/relayer/module/fetchUserDecrypt.js.map +1 -1
- package/_cjs/core/modules/relayer/module/relayerUrl.js +33 -27
- package/_cjs/core/modules/relayer/module/relayerUrl.js.map +1 -1
- package/_cjs/wasm/tfhe/loadTfheLib.js.map +1 -1
- package/_cjs/wasm/tkms/loadKmsLib.js.map +1 -1
- package/_esm/core/_version.js +1 -1
- package/_esm/core/base/auth.js +8 -6
- package/_esm/core/base/auth.js.map +1 -1
- package/_esm/core/base/errors/InvalidUrlError.js +13 -0
- package/_esm/core/base/errors/InvalidUrlError.js.map +1 -0
- package/_esm/core/base/fetch.js +96 -0
- package/_esm/core/base/fetch.js.map +1 -1
- package/_esm/core/base/string.js +9 -0
- package/_esm/core/base/string.js.map +1 -1
- package/_esm/core/modules/decrypt/module/api-p.js +18 -2
- package/_esm/core/modules/decrypt/module/api-p.js.map +1 -1
- package/_esm/core/modules/relayer/module/RelayerAsyncRequest.js +17 -13
- package/_esm/core/modules/relayer/module/RelayerAsyncRequest.js.map +1 -1
- package/_esm/core/modules/relayer/module/fetchCoprocessorSignatures.js +5 -2
- package/_esm/core/modules/relayer/module/fetchCoprocessorSignatures.js.map +1 -1
- package/_esm/core/modules/relayer/module/fetchDelegatedUserDecrypt.js +6 -2
- package/_esm/core/modules/relayer/module/fetchDelegatedUserDecrypt.js.map +1 -1
- package/_esm/core/modules/relayer/module/fetchFheEncryptionKeySource.js +12 -7
- package/_esm/core/modules/relayer/module/fetchFheEncryptionKeySource.js.map +1 -1
- package/_esm/core/modules/relayer/module/fetchPublicDecrypt.js +6 -2
- package/_esm/core/modules/relayer/module/fetchPublicDecrypt.js.map +1 -1
- package/_esm/core/modules/relayer/module/fetchUserDecrypt.js +6 -2
- package/_esm/core/modules/relayer/module/fetchUserDecrypt.js.map +1 -1
- package/_esm/core/modules/relayer/module/relayerUrl.js +55 -27
- package/_esm/core/modules/relayer/module/relayerUrl.js.map +1 -1
- package/_types/core/base/auth.d.ts.map +1 -1
- package/_types/core/base/errors/InvalidUrlError.d.ts +14 -0
- package/_types/core/base/errors/InvalidUrlError.d.ts.map +1 -0
- package/_types/core/base/fetch.d.ts +57 -0
- package/_types/core/base/fetch.d.ts.map +1 -1
- package/_types/core/base/string.d.ts +1 -0
- package/_types/core/base/string.d.ts.map +1 -1
- package/_types/core/modules/decrypt/module/api-p.d.ts.map +1 -1
- package/_types/core/modules/relayer/module/RelayerAsyncRequest.d.ts +1 -0
- package/_types/core/modules/relayer/module/RelayerAsyncRequest.d.ts.map +1 -1
- package/_types/core/modules/relayer/module/fetchCoprocessorSignatures.d.ts.map +1 -1
- package/_types/core/modules/relayer/module/fetchDelegatedUserDecrypt.d.ts.map +1 -1
- package/_types/core/modules/relayer/module/fetchFheEncryptionKeySource.d.ts.map +1 -1
- package/_types/core/modules/relayer/module/fetchPublicDecrypt.d.ts.map +1 -1
- package/_types/core/modules/relayer/module/fetchUserDecrypt.d.ts.map +1 -1
- package/_types/core/modules/relayer/module/relayerUrl.d.ts +24 -5
- package/_types/core/modules/relayer/module/relayerUrl.d.ts.map +1 -1
- package/_types/core/types/relayer.d.ts +1 -0
- package/_types/core/types/relayer.d.ts.map +1 -1
- package/core/_version.ts +1 -1
- package/core/base/auth.ts +8 -6
- package/core/base/errors/InvalidUrlError.ts +24 -0
- package/core/base/fetch.ts +102 -0
- package/core/base/string.ts +10 -0
- package/core/modules/decrypt/module/api-p.ts +20 -3
- package/core/modules/relayer/module/RelayerAsyncRequest.ts +19 -17
- package/core/modules/relayer/module/fetchCoprocessorSignatures.ts +6 -2
- package/core/modules/relayer/module/fetchDelegatedUserDecrypt.ts +7 -2
- package/core/modules/relayer/module/fetchFheEncryptionKeySource.ts +12 -7
- package/core/modules/relayer/module/fetchPublicDecrypt.ts +7 -2
- package/core/modules/relayer/module/fetchUserDecrypt.ts +7 -2
- package/core/modules/relayer/module/relayerUrl.ts +66 -27
- package/core/types/relayer.ts +1 -0
- package/package.json +1 -1
|
@@ -1,38 +1,77 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { assert } from '../../../base/errors/InternalError.js';
|
|
2
|
+
import { InvalidUrlError } from '../../../base/errors/InvalidUrlError.js';
|
|
3
|
+
import { removePrefix, removeSuffix } from '../../../base/string.js';
|
|
2
4
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Validates and normalizes a relayer URL before it's used to build the request.
|
|
7
|
+
*
|
|
8
|
+
* Validation:
|
|
9
|
+
* - non-empty string
|
|
10
|
+
* - parses as a URL
|
|
11
|
+
* - protocol is `http:` or `https:`
|
|
12
|
+
* - contains no userinfo (`user:pass@host`)
|
|
13
|
+
* - contains no query string or fragment (they would corrupt path concatenation)
|
|
14
|
+
* - if `hasAuth` is true, requires `https:` unless the host is localhost
|
|
15
|
+
*
|
|
16
|
+
* Normalization (via WHATWG `URL`):
|
|
17
|
+
* - scheme and host lower-cased
|
|
18
|
+
* - default ports collapsed (`:443` for https, `:80` for http)
|
|
19
|
+
* - path percent-encoded canonically
|
|
20
|
+
* - bare-origin URLs get a single trailing `/` (`https://x` → `https://x/`)
|
|
21
|
+
*
|
|
22
|
+
* Throws {@link InvalidUrlError} on any failure so the caller surfaces a
|
|
23
|
+
* uniform error type.
|
|
24
|
+
*
|
|
25
|
+
* @returns The normalized URL object.
|
|
26
|
+
*/
|
|
27
|
+
export function validateRelayerBaseUrl(relayerUrl: unknown, hasAuth: boolean): URL {
|
|
28
|
+
if (typeof relayerUrl !== 'string' || relayerUrl.length === 0) {
|
|
29
|
+
throw new InvalidUrlError({ message: 'Invalid relayerUrl: must be a non-empty string.' }, {});
|
|
30
|
+
}
|
|
5
31
|
|
|
6
|
-
|
|
7
|
-
|
|
32
|
+
let parsed: URL;
|
|
33
|
+
try {
|
|
34
|
+
parsed = new URL(relayerUrl);
|
|
35
|
+
} catch (cause) {
|
|
36
|
+
throw new InvalidUrlError({ message: `Invalid relayerUrl: cannot parse as URL}.`, cause }, {});
|
|
37
|
+
}
|
|
8
38
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
39
|
+
if (parsed.protocol !== 'https:' && parsed.protocol !== 'http:') {
|
|
40
|
+
throw new InvalidUrlError(
|
|
41
|
+
{ message: `Invalid relayerUrl protocol: ${parsed.protocol} (expected http: or https:).` },
|
|
42
|
+
{},
|
|
43
|
+
);
|
|
12
44
|
}
|
|
13
45
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
46
|
+
if (parsed.username !== '' || parsed.password !== '') {
|
|
47
|
+
throw new InvalidUrlError(
|
|
48
|
+
{ message: 'Invalid relayerUrl: URL must not contain credentials (user:pass@host).' },
|
|
49
|
+
{},
|
|
50
|
+
);
|
|
17
51
|
}
|
|
18
52
|
|
|
19
|
-
if (
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
if (isZamaUrl) {
|
|
28
|
-
if (urlNoSlash.endsWith('/v2')) {
|
|
29
|
-
return urlNoSlash;
|
|
30
|
-
}
|
|
31
|
-
return `${urlNoSlash}/v2`;
|
|
53
|
+
if (hasAuth && parsed.protocol === 'http:') {
|
|
54
|
+
const isLocalhost =
|
|
55
|
+
parsed.hostname === 'localhost' || parsed.hostname === '127.0.0.1' || parsed.hostname === '[::1]';
|
|
56
|
+
if (!isLocalhost) {
|
|
57
|
+
throw new InvalidUrlError(
|
|
58
|
+
{ message: 'Invalid relayerUrl: HTTPS is required when auth credentials are provided.' },
|
|
59
|
+
{},
|
|
60
|
+
);
|
|
32
61
|
}
|
|
33
|
-
// malformed Zama url
|
|
34
|
-
return null;
|
|
35
62
|
}
|
|
36
63
|
|
|
37
|
-
return
|
|
64
|
+
// At the end of validateRelayerUrl, just before `return parsed;`
|
|
65
|
+
if (!parsed.pathname.endsWith('/')) {
|
|
66
|
+
parsed.pathname += '/';
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return parsed;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export function buildRelayerUrlString(relayerBaseUrl: URL, path: string): string {
|
|
73
|
+
assert(relayerBaseUrl.pathname.endsWith('/'));
|
|
74
|
+
const sanitizedPath = removeSuffix(removePrefix(path, '/'), '/');
|
|
75
|
+
const url = new URL(sanitizedPath, relayerBaseUrl).toString();
|
|
76
|
+
return removeSuffix(url, '/');
|
|
38
77
|
}
|
package/core/types/relayer.ts
CHANGED
|
@@ -34,6 +34,7 @@ export type FetchDelegatedUserDecryptResult = readonly FetchUserDecryptResultIte
|
|
|
34
34
|
|
|
35
35
|
export type RelayerCommonOptions = {
|
|
36
36
|
auth?: Auth | undefined;
|
|
37
|
+
headers?: Record<string, string>;
|
|
37
38
|
debug?: boolean | undefined;
|
|
38
39
|
fetchRetries?: number | undefined;
|
|
39
40
|
fetchRetryDelayInMilliseconds?: number | undefined;
|