@joclaim/attestor-core 0.2.0 → 0.2.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.
- package/README.md +21 -15
- package/lib/avs/abis/avsDirectoryABI.d.ts +60 -0
- package/lib/avs/abis/avsDirectoryABI.js +340 -0
- package/lib/avs/abis/delegationABI.d.ts +126 -0
- package/lib/avs/abis/delegationABI.js +1 -0
- package/lib/avs/abis/registryABI.d.ts +136 -0
- package/lib/avs/abis/registryABI.js +725 -0
- package/lib/avs/client/create-claim-on-avs.d.ts +12 -0
- package/lib/avs/client/create-claim-on-avs.js +138 -0
- package/lib/avs/config.d.ts +7 -0
- package/lib/avs/config.js +20 -0
- package/lib/avs/contracts/ReclaimServiceManager.d.ts +697 -0
- package/lib/avs/contracts/ReclaimServiceManager.js +1 -0
- package/lib/avs/contracts/common.d.ts +21 -0
- package/lib/avs/contracts/common.js +1 -0
- package/lib/avs/contracts/factories/ReclaimServiceManager__factory.d.ts +888 -0
- package/lib/avs/contracts/factories/ReclaimServiceManager__factory.js +1169 -0
- package/lib/avs/contracts/factories/index.d.ts +1 -0
- package/{src/avs/contracts/factories/index.ts → lib/avs/contracts/factories/index.js} +1 -1
- package/{src/avs/contracts/index.ts → lib/avs/contracts/index.d.ts} +0 -3
- package/lib/avs/contracts/index.js +2 -0
- package/lib/avs/types/index.d.ts +55 -0
- package/lib/avs/types/index.js +1 -0
- package/lib/avs/utils/contracts.d.ts +21 -0
- package/lib/avs/utils/contracts.js +33 -0
- package/lib/avs/utils/register.d.ts +27 -0
- package/lib/avs/utils/register.js +78 -0
- package/lib/avs/utils/tasks.d.ts +22 -0
- package/lib/avs/utils/tasks.js +40 -0
- package/lib/client/create-claim.d.ts +5 -0
- package/lib/client/create-claim.js +437 -0
- package/lib/client/index.d.ts +3 -0
- package/lib/client/index.js +3 -0
- package/lib/client/tunnels/make-rpc-tcp-tunnel.d.ts +16 -0
- package/lib/client/tunnels/make-rpc-tcp-tunnel.js +51 -0
- package/lib/client/tunnels/make-rpc-tls-tunnel.d.ts +26 -0
- package/lib/client/tunnels/make-rpc-tls-tunnel.js +131 -0
- package/lib/client/utils/attestor-pool.d.ts +8 -0
- package/lib/client/utils/attestor-pool.js +25 -0
- package/lib/client/utils/client-socket.d.ts +11 -0
- package/lib/client/utils/client-socket.js +98 -0
- package/lib/client/utils/message-handler.d.ts +4 -0
- package/lib/client/utils/message-handler.js +87 -0
- package/lib/config/index.d.ts +30 -0
- package/lib/config/index.js +43 -0
- package/lib/external-rpc/benchmark.d.ts +1 -0
- package/lib/external-rpc/benchmark.js +69 -0
- package/lib/external-rpc/event-bus.d.ts +7 -0
- package/lib/external-rpc/event-bus.js +14 -0
- package/lib/external-rpc/handle-incoming-msg.d.ts +2 -0
- package/lib/external-rpc/handle-incoming-msg.js +233 -0
- package/lib/external-rpc/index.d.ts +3 -0
- package/lib/external-rpc/index.js +3 -0
- package/lib/external-rpc/jsc-polyfills/1.d.ts +14 -0
- package/lib/external-rpc/jsc-polyfills/1.js +82 -0
- package/lib/external-rpc/jsc-polyfills/2.d.ts +1 -0
- package/lib/external-rpc/jsc-polyfills/2.js +20 -0
- package/lib/external-rpc/jsc-polyfills/event.d.ts +10 -0
- package/lib/external-rpc/jsc-polyfills/event.js +14 -0
- package/lib/external-rpc/jsc-polyfills/index.d.ts +2 -0
- package/lib/external-rpc/jsc-polyfills/index.js +2 -0
- package/lib/external-rpc/jsc-polyfills/ws.d.ts +21 -0
- package/lib/external-rpc/jsc-polyfills/ws.js +81 -0
- package/lib/external-rpc/setup-browser.d.ts +6 -0
- package/lib/external-rpc/setup-browser.js +33 -0
- package/lib/external-rpc/setup-jsc.d.ts +24 -0
- package/lib/external-rpc/setup-jsc.js +22 -0
- package/lib/external-rpc/types.d.ts +213 -0
- package/lib/external-rpc/types.js +1 -0
- package/lib/external-rpc/utils.d.ts +20 -0
- package/lib/external-rpc/utils.js +100 -0
- package/lib/external-rpc/zk.d.ts +14 -0
- package/lib/external-rpc/zk.js +63 -0
- package/lib/index.d.ts +9 -0
- package/lib/index.js +9 -0
- package/lib/mechain/abis/governanceABI.d.ts +50 -0
- package/lib/mechain/abis/governanceABI.js +458 -0
- package/lib/mechain/abis/taskABI.d.ts +157 -0
- package/lib/mechain/abis/taskABI.js +509 -0
- package/lib/mechain/client/create-claim-on-mechain.d.ts +10 -0
- package/lib/mechain/client/create-claim-on-mechain.js +28 -0
- package/lib/mechain/client/index.d.ts +1 -0
- package/lib/mechain/client/index.js +1 -0
- package/lib/mechain/constants/index.d.ts +3 -0
- package/{src/mechain/constants/index.ts → lib/mechain/constants/index.js} +3 -5
- package/lib/mechain/index.d.ts +2 -0
- package/lib/mechain/index.js +2 -0
- package/lib/mechain/types/index.d.ts +23 -0
- package/lib/mechain/types/index.js +1 -0
- package/lib/proto/api.d.ts +633 -0
- package/lib/proto/api.js +4258 -0
- package/lib/proto/tee-bundle.d.ts +135 -0
- package/lib/proto/tee-bundle.js +1161 -0
- package/lib/providers/http/index.d.ts +18 -0
- package/lib/providers/http/index.js +658 -0
- package/lib/providers/http/patch-parse5-tree.d.ts +6 -0
- package/lib/providers/http/patch-parse5-tree.js +33 -0
- package/lib/providers/http/utils.d.ts +77 -0
- package/lib/providers/http/utils.js +324 -0
- package/lib/providers/index.d.ts +4 -0
- package/lib/providers/index.js +4 -0
- package/lib/scripts/build-browser.d.ts +1 -0
- package/lib/scripts/build-browser.js +37 -0
- package/lib/scripts/build-jsc.d.ts +1 -0
- package/lib/scripts/build-jsc.js +49 -0
- package/lib/scripts/check-avs-registration.d.ts +1 -0
- package/lib/scripts/check-avs-registration.js +26 -0
- package/lib/scripts/fallbacks/crypto.d.ts +1 -0
- package/lib/scripts/fallbacks/crypto.js +1 -0
- package/lib/scripts/fallbacks/empty.d.ts +3 -0
- package/lib/scripts/fallbacks/empty.js +1 -0
- package/lib/scripts/fallbacks/re2.d.ts +1 -0
- package/lib/scripts/fallbacks/re2.js +4 -0
- package/lib/scripts/fallbacks/snarkjs.d.ts +1 -0
- package/lib/scripts/fallbacks/snarkjs.js +1 -0
- package/lib/scripts/generate-provider-types.d.ts +5 -0
- package/lib/scripts/generate-provider-types.js +78 -0
- package/lib/scripts/generate-receipt.d.ts +9 -0
- package/lib/scripts/generate-receipt.js +90 -0
- package/lib/scripts/generate-toprf-keys.d.ts +1 -0
- package/lib/scripts/generate-toprf-keys.js +20 -0
- package/lib/scripts/jsc-cli-rpc.d.ts +1 -0
- package/lib/scripts/jsc-cli-rpc.js +37 -0
- package/lib/scripts/register-avs-operator.d.ts +1 -0
- package/lib/scripts/register-avs-operator.js +4 -0
- package/lib/scripts/start-server.d.ts +1 -0
- package/lib/scripts/start-server.js +13 -0
- package/lib/scripts/update-avs-metadata.d.ts +1 -0
- package/lib/scripts/update-avs-metadata.js +19 -0
- package/lib/scripts/utils.d.ts +1 -0
- package/lib/scripts/utils.js +7 -0
- package/lib/scripts/whitelist-operator.d.ts +1 -0
- package/lib/scripts/whitelist-operator.js +15 -0
- package/lib/server/create-server.d.ts +7 -0
- package/lib/server/create-server.js +122 -0
- package/lib/server/handlers/claimTeeBundle.d.ts +6 -0
- package/lib/server/handlers/claimTeeBundle.js +206 -0
- package/lib/server/handlers/claimTunnel.d.ts +2 -0
- package/lib/server/handlers/claimTunnel.js +73 -0
- package/lib/server/handlers/completeClaimOnChain.d.ts +2 -0
- package/lib/server/handlers/completeClaimOnChain.js +22 -0
- package/lib/server/handlers/createClaimOnChain.d.ts +2 -0
- package/lib/server/handlers/createClaimOnChain.js +26 -0
- package/lib/server/handlers/createTaskOnMechain.d.ts +2 -0
- package/lib/server/handlers/createTaskOnMechain.js +47 -0
- package/lib/server/handlers/createTunnel.d.ts +2 -0
- package/lib/server/handlers/createTunnel.js +93 -0
- package/lib/server/handlers/disconnectTunnel.d.ts +2 -0
- package/lib/server/handlers/disconnectTunnel.js +5 -0
- package/lib/server/handlers/fetchCertificateBytes.d.ts +2 -0
- package/lib/server/handlers/fetchCertificateBytes.js +41 -0
- package/lib/server/handlers/index.d.ts +4 -0
- package/lib/server/handlers/index.js +22 -0
- package/lib/server/handlers/init.d.ts +2 -0
- package/lib/server/handlers/init.js +30 -0
- package/lib/server/handlers/toprf.d.ts +2 -0
- package/lib/server/handlers/toprf.js +16 -0
- package/lib/server/index.d.ts +4 -0
- package/lib/server/index.js +4 -0
- package/lib/server/provider-api.d.ts +9 -0
- package/lib/server/provider-api.js +98 -0
- package/lib/server/provider-store.d.ts +53 -0
- package/lib/server/provider-store.js +80 -0
- package/lib/server/session-api.d.ts +9 -0
- package/lib/server/session-api.js +95 -0
- package/lib/server/session-store.d.ts +14 -0
- package/lib/server/session-store.js +36 -0
- package/lib/server/socket.d.ts +13 -0
- package/lib/server/socket.js +109 -0
- package/lib/server/tunnels/make-tcp-tunnel.d.ts +22 -0
- package/lib/server/tunnels/make-tcp-tunnel.js +177 -0
- package/lib/server/utils/apm.d.ts +11 -0
- package/lib/server/utils/apm.js +36 -0
- package/lib/server/utils/assert-valid-claim-request.d.ts +31 -0
- package/lib/server/utils/assert-valid-claim-request.js +229 -0
- package/lib/server/utils/config-env.d.ts +1 -0
- package/lib/server/utils/config-env.js +4 -0
- package/lib/server/utils/dns.d.ts +1 -0
- package/lib/server/utils/dns.js +18 -0
- package/lib/server/utils/gcp-attestation.d.ts +17 -0
- package/lib/server/utils/gcp-attestation.js +289 -0
- package/lib/server/utils/generics.d.ts +22 -0
- package/lib/server/utils/generics.js +51 -0
- package/lib/server/utils/iso.d.ts +1 -0
- package/lib/server/utils/iso.js +256 -0
- package/lib/server/utils/keep-alive.d.ts +7 -0
- package/lib/server/utils/keep-alive.js +38 -0
- package/lib/server/utils/nitro-attestation.d.ts +33 -0
- package/lib/server/utils/nitro-attestation.js +325 -0
- package/lib/server/utils/process-handshake.d.ts +13 -0
- package/lib/server/utils/process-handshake.js +214 -0
- package/lib/server/utils/proxy-session.d.ts +1 -0
- package/lib/server/utils/proxy-session.js +6 -0
- package/lib/server/utils/tee-oprf-verification.d.ts +22 -0
- package/lib/server/utils/tee-oprf-verification.js +160 -0
- package/lib/server/utils/tee-transcript-reconstruction.d.ts +24 -0
- package/lib/server/utils/tee-transcript-reconstruction.js +187 -0
- package/lib/server/utils/tee-verification.d.ts +27 -0
- package/lib/server/utils/tee-verification.js +365 -0
- package/lib/server/utils/validation.d.ts +2 -0
- package/lib/server/utils/validation.js +38 -0
- package/lib/types/bgp.d.ts +11 -0
- package/lib/types/bgp.js +1 -0
- package/lib/types/claims.d.ts +73 -0
- package/lib/types/claims.js +1 -0
- package/lib/types/client.d.ts +163 -0
- package/lib/types/client.js +1 -0
- package/lib/types/general.d.ts +54 -0
- package/lib/types/general.js +1 -0
- package/lib/types/handlers.d.ts +10 -0
- package/lib/types/handlers.js +1 -0
- package/lib/types/index.d.ts +10 -0
- package/lib/types/index.js +10 -0
- package/lib/types/providers.d.ts +161 -0
- package/lib/types/providers.gen.d.ts +443 -0
- package/lib/types/providers.gen.js +10 -0
- package/lib/types/providers.js +1 -0
- package/lib/types/rpc.d.ts +35 -0
- package/lib/types/rpc.js +1 -0
- package/lib/types/signatures.d.ts +28 -0
- package/lib/types/signatures.js +1 -0
- package/lib/types/tunnel.d.ts +18 -0
- package/lib/types/tunnel.js +1 -0
- package/lib/types/zk.d.ts +28 -0
- package/lib/types/zk.js +1 -0
- package/lib/utils/auth.d.ts +8 -0
- package/lib/utils/auth.js +59 -0
- package/lib/utils/b64-json.d.ts +2 -0
- package/lib/utils/b64-json.js +17 -0
- package/lib/utils/bgp-listener.d.ts +7 -0
- package/lib/utils/bgp-listener.js +119 -0
- package/lib/utils/claims.d.ts +33 -0
- package/lib/utils/claims.js +101 -0
- package/lib/utils/env.d.ts +3 -0
- package/lib/utils/env.js +15 -0
- package/lib/utils/error.d.ts +26 -0
- package/lib/utils/error.js +50 -0
- package/lib/utils/generics.d.ts +114 -0
- package/lib/utils/generics.js +317 -0
- package/lib/utils/http-parser.d.ts +59 -0
- package/lib/utils/http-parser.js +246 -0
- package/lib/utils/index.d.ts +13 -0
- package/lib/utils/index.js +13 -0
- package/lib/utils/logger.d.ts +13 -0
- package/lib/utils/logger.js +91 -0
- package/lib/utils/prepare-packets.d.ts +16 -0
- package/lib/utils/prepare-packets.js +62 -0
- package/lib/utils/redactions.d.ts +62 -0
- package/lib/utils/redactions.js +148 -0
- package/lib/utils/retries.d.ts +12 -0
- package/lib/utils/retries.js +24 -0
- package/lib/utils/signatures/eth.d.ts +2 -0
- package/lib/utils/signatures/eth.js +29 -0
- package/lib/utils/signatures/index.d.ts +5 -0
- package/lib/utils/signatures/index.js +7 -0
- package/lib/utils/socket-base.d.ts +23 -0
- package/lib/utils/socket-base.js +90 -0
- package/lib/utils/tls.d.ts +2 -0
- package/{src/utils/tls.ts → lib/utils/tls.js} +28 -35
- package/lib/utils/ws.d.ts +7 -0
- package/lib/utils/ws.js +22 -0
- package/lib/utils/zk.d.ts +70 -0
- package/lib/utils/zk.js +572 -0
- package/package.json +19 -12
- package/src/avs/abis/avsDirectoryABI.ts +0 -340
- package/src/avs/abis/delegationABI.ts +0 -1
- package/src/avs/abis/registryABI.ts +0 -725
- package/src/avs/client/create-claim-on-avs.ts +0 -206
- package/src/avs/config.ts +0 -25
- package/src/avs/contracts/ReclaimServiceManager.ts +0 -1457
- package/src/avs/contracts/common.ts +0 -44
- package/src/avs/contracts/factories/ReclaimServiceManager__factory.ts +0 -1213
- package/src/avs/tests/test.operator.ts +0 -413
- package/src/avs/tests/utils.ts +0 -51
- package/src/avs/types/index.ts +0 -60
- package/src/avs/utils/contracts.ts +0 -66
- package/src/avs/utils/register.ts +0 -125
- package/src/avs/utils/tasks.ts +0 -76
- package/src/client/create-claim.ts +0 -626
- package/src/client/index.ts +0 -3
- package/src/client/tunnels/make-rpc-tcp-tunnel.ts +0 -78
- package/src/client/tunnels/make-rpc-tls-tunnel.ts +0 -172
- package/src/client/utils/attestor-pool.ts +0 -35
- package/src/client/utils/client-socket.ts +0 -160
- package/src/client/utils/message-handler.ts +0 -116
- package/src/config/index.ts +0 -65
- package/src/external-rpc/benchmark.ts +0 -102
- package/src/external-rpc/event-bus.ts +0 -19
- package/src/external-rpc/global.d.ts +0 -20
- package/src/external-rpc/handle-incoming-msg.ts +0 -308
- package/src/external-rpc/index.ts +0 -3
- package/src/external-rpc/jsc-polyfills/1.ts +0 -117
- package/src/external-rpc/jsc-polyfills/2.ts +0 -24
- package/src/external-rpc/jsc-polyfills/event.ts +0 -16
- package/src/external-rpc/jsc-polyfills/index.ts +0 -2
- package/src/external-rpc/jsc-polyfills/ws.ts +0 -105
- package/src/external-rpc/setup-browser.ts +0 -42
- package/src/external-rpc/setup-jsc.ts +0 -48
- package/src/external-rpc/types.ts +0 -289
- package/src/external-rpc/utils.ts +0 -126
- package/src/external-rpc/zk.ts +0 -79
- package/src/index.ts +0 -9
- package/src/mechain/abis/governanceABI.ts +0 -458
- package/src/mechain/abis/taskABI.ts +0 -509
- package/src/mechain/client/create-claim-on-mechain.ts +0 -52
- package/src/mechain/client/index.ts +0 -1
- package/src/mechain/index.ts +0 -2
- package/src/mechain/types/index.ts +0 -29
- package/src/proto/api.ts +0 -5285
- package/src/proto/tee-bundle.ts +0 -1413
- package/src/providers/http/index.ts +0 -873
- package/src/providers/http/patch-parse5-tree.ts +0 -49
- package/src/providers/http/utils.ts +0 -439
- package/src/providers/index.ts +0 -8
- package/src/scripts/build-browser.sh +0 -9
- package/src/scripts/build-browser.ts +0 -40
- package/src/scripts/build-jsc.ts +0 -55
- package/src/scripts/check-avs-registration.ts +0 -38
- package/src/scripts/contract-data-gen.sh +0 -8
- package/src/scripts/fallbacks/crypto.ts +0 -1
- package/src/scripts/fallbacks/empty.ts +0 -2
- package/src/scripts/fallbacks/re2.ts +0 -5
- package/src/scripts/fallbacks/snarkjs.ts +0 -5
- package/src/scripts/generate-certs.sh +0 -11
- package/src/scripts/generate-proto.sh +0 -5
- package/src/scripts/generate-provider-types.ts +0 -121
- package/src/scripts/generate-receipt.ts +0 -138
- package/src/scripts/generate-toprf-keys.ts +0 -30
- package/src/scripts/jsc-cli-rpc.ts +0 -48
- package/src/scripts/register-avs-operator.ts +0 -5
- package/src/scripts/start-server.ts +0 -17
- package/src/scripts/update-avs-metadata.ts +0 -26
- package/src/scripts/utils.ts +0 -8
- package/src/scripts/whitelist-operator.ts +0 -22
- package/src/server/create-server.ts +0 -169
- package/src/server/handlers/claimTeeBundle.ts +0 -308
- package/src/server/handlers/claimTunnel.ts +0 -106
- package/src/server/handlers/completeClaimOnChain.ts +0 -36
- package/src/server/handlers/createClaimOnChain.ts +0 -39
- package/src/server/handlers/createTaskOnMechain.ts +0 -80
- package/src/server/handlers/createTunnel.ts +0 -128
- package/src/server/handlers/disconnectTunnel.ts +0 -11
- package/src/server/handlers/fetchCertificateBytes.ts +0 -66
- package/src/server/handlers/index.ts +0 -24
- package/src/server/handlers/init.ts +0 -46
- package/src/server/handlers/toprf.ts +0 -25
- package/src/server/index.ts +0 -4
- package/src/server/provider-api.ts +0 -118
- package/src/server/provider-store.ts +0 -117
- package/src/server/session-api.ts +0 -115
- package/src/server/session-store.ts +0 -60
- package/src/server/socket.ts +0 -156
- package/src/server/tunnels/make-tcp-tunnel.ts +0 -275
- package/src/server/utils/apm.ts +0 -49
- package/src/server/utils/assert-valid-claim-request.ts +0 -375
- package/src/server/utils/config-env.ts +0 -6
- package/src/server/utils/dns.ts +0 -25
- package/src/server/utils/gcp-attestation.ts +0 -415
- package/src/server/utils/generics.ts +0 -68
- package/src/server/utils/iso.ts +0 -258
- package/src/server/utils/keep-alive.ts +0 -50
- package/src/server/utils/nitro-attestation.ts +0 -396
- package/src/server/utils/process-handshake.ts +0 -311
- package/src/server/utils/proxy-session.ts +0 -6
- package/src/server/utils/tee-oprf-verification.ts +0 -231
- package/src/server/utils/tee-transcript-reconstruction.ts +0 -254
- package/src/server/utils/tee-verification.ts +0 -513
- package/src/server/utils/validation.ts +0 -57
- package/src/tests/auth.test.ts +0 -105
- package/src/tests/bgp-listener.test.ts +0 -193
- package/src/tests/claim-creation.test.ts +0 -415
- package/src/tests/describe-with-server.ts +0 -94
- package/src/tests/gcp-attestation.test.ts +0 -206
- package/src/tests/http-parser.test.ts +0 -135
- package/src/tests/http-provider-utils.test.ts +0 -3306
- package/src/tests/http-provider.test.ts +0 -125
- package/src/tests/jsc.test_mac.ts +0 -296
- package/src/tests/mock-provider-server.ts +0 -106
- package/src/tests/mocks.ts +0 -25
- package/src/tests/proof_bundle.bin +0 -0
- package/src/tests/rpc-communication.test.ts +0 -115
- package/src/tests/rpc-tunnel.test.ts +0 -239
- package/src/tests/signatures.test.ts +0 -37
- package/src/tests/tcp-tunnel.test.ts +0 -154
- package/src/tests/tee-bundle.test.ts +0 -321
- package/src/tests/tee-signatures.test.ts +0 -81
- package/src/tests/utils.ts +0 -108
- package/src/tests/verification_bundle.pb +0 -0
- package/src/tests/verification_bundle_tee.pb +0 -0
- package/src/tests/zk.test.ts +0 -453
- package/src/types/bgp.ts +0 -17
- package/src/types/claims.ts +0 -79
- package/src/types/client.ts +0 -205
- package/src/types/general.ts +0 -61
- package/src/types/handlers.ts +0 -16
- package/src/types/index.ts +0 -10
- package/src/types/providers.gen.ts +0 -135
- package/src/types/providers.ts +0 -203
- package/src/types/rpc.ts +0 -46
- package/src/types/signatures.ts +0 -29
- package/src/types/tunnel.ts +0 -25
- package/src/types/zk.ts +0 -31
- package/src/utils/auth.ts +0 -92
- package/src/utils/b64-json.ts +0 -25
- package/src/utils/bgp-listener.ts +0 -159
- package/src/utils/claims.ts +0 -132
- package/src/utils/env.ts +0 -21
- package/src/utils/error.ts +0 -76
- package/src/utils/generics.ts +0 -429
- package/src/utils/http-parser.ts +0 -312
- package/src/utils/index.ts +0 -13
- package/src/utils/logger.ts +0 -114
- package/src/utils/prepare-packets.ts +0 -98
- package/src/utils/redactions.ts +0 -203
- package/src/utils/retries.ts +0 -41
- package/src/utils/signatures/eth.ts +0 -35
- package/src/utils/signatures/index.ts +0 -11
- package/src/utils/socket-base.ts +0 -132
- package/src/utils/ws.ts +0 -30
- package/src/utils/zk.ts +0 -908
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
import assert from 'node:assert'
|
|
2
|
-
import { afterEach, it } from 'node:test'
|
|
3
|
-
|
|
4
|
-
import { createClaimOnAttestor } from '#src/client/index.ts'
|
|
5
|
-
import { describeWithServer } from '#src/tests/describe-with-server.ts'
|
|
6
|
-
import { getFirstTOprfBlock, verifyNoDirectRevealLeaks } from '#src/tests/utils.ts'
|
|
7
|
-
import { binaryHashToStr } from '#src/utils/index.ts'
|
|
8
|
-
|
|
9
|
-
describeWithServer('HTTP Provider', opts => {
|
|
10
|
-
|
|
11
|
-
afterEach(async() => {
|
|
12
|
-
await verifyNoDirectRevealLeaks()
|
|
13
|
-
})
|
|
14
|
-
|
|
15
|
-
it('should create claim with template params', async() => {
|
|
16
|
-
const resp = await createClaimOnAttestor({
|
|
17
|
-
name: 'http',
|
|
18
|
-
params: {
|
|
19
|
-
url: 'https://news.ycombinator.{{param1}}/{{param6}}?token={{param4}}&token1={{param5}}',
|
|
20
|
-
method: 'GET',
|
|
21
|
-
responseMatches: [{
|
|
22
|
-
type: 'regex',
|
|
23
|
-
value: '<title.*?(?<domain>{{param2}})<\\/title>',
|
|
24
|
-
}],
|
|
25
|
-
responseRedactions: [{
|
|
26
|
-
xPath: './html/head/{{param3}}',
|
|
27
|
-
}],
|
|
28
|
-
paramValues: {
|
|
29
|
-
param1: 'com',
|
|
30
|
-
param2: 'Top Links | Hacker News',
|
|
31
|
-
param3: 'title',
|
|
32
|
-
}
|
|
33
|
-
},
|
|
34
|
-
secretParams: {
|
|
35
|
-
cookieStr: '<cookie-str>',
|
|
36
|
-
paramValues: {
|
|
37
|
-
param4: 'quhrfqiuherfqlireufh',
|
|
38
|
-
param5: 'sssbbbbr123',
|
|
39
|
-
param6: 'best',
|
|
40
|
-
}
|
|
41
|
-
},
|
|
42
|
-
ownerPrivateKey: opts.privateKeyHex,
|
|
43
|
-
client: opts.client,
|
|
44
|
-
zkEngine: 'gnark'
|
|
45
|
-
})
|
|
46
|
-
assert.ok(!resp.error)
|
|
47
|
-
assert.match(
|
|
48
|
-
resp.claim?.context || '',
|
|
49
|
-
/0x5e3e976476ded7b58120d606b33b75be52adb8345a7979c181764f00763e7b2a/
|
|
50
|
-
)
|
|
51
|
-
})
|
|
52
|
-
|
|
53
|
-
it('should create claim with OPRF template params', async() => {
|
|
54
|
-
const resp = await createClaimOnAttestor({
|
|
55
|
-
name: 'http',
|
|
56
|
-
params: {
|
|
57
|
-
url: 'https://example.com/',
|
|
58
|
-
method: 'GET',
|
|
59
|
-
responseMatches: [
|
|
60
|
-
{
|
|
61
|
-
type: 'contains',
|
|
62
|
-
value: '<title>{{domain}}</title>',
|
|
63
|
-
}
|
|
64
|
-
],
|
|
65
|
-
responseRedactions: [
|
|
66
|
-
{
|
|
67
|
-
xPath: '/html/head/title',
|
|
68
|
-
regex: '<title>(?<domain>.*?)<\\/title>',
|
|
69
|
-
hash: 'oprf'
|
|
70
|
-
}
|
|
71
|
-
],
|
|
72
|
-
paramValues:{ domain:'Example Domain' }
|
|
73
|
-
},
|
|
74
|
-
secretParams: {
|
|
75
|
-
cookieStr: '<cookie-str>'
|
|
76
|
-
},
|
|
77
|
-
ownerPrivateKey: opts.privateKeyHex,
|
|
78
|
-
client: opts.client,
|
|
79
|
-
zkEngine: 'gnark',
|
|
80
|
-
})
|
|
81
|
-
assert.ok(!resp.error)
|
|
82
|
-
|
|
83
|
-
const ctx = JSON.parse(resp.claim!.context)
|
|
84
|
-
const domainStr = ctx.extractedParameters.domain
|
|
85
|
-
|
|
86
|
-
const toprf = getFirstTOprfBlock(resp.request!)?.payload
|
|
87
|
-
assert.ok(toprf)
|
|
88
|
-
const toprfStr = binaryHashToStr(
|
|
89
|
-
toprf.nullifier,
|
|
90
|
-
toprf.dataLocation!.length
|
|
91
|
-
)
|
|
92
|
-
assert.equal(domainStr, toprfStr.slice(0, domainStr.length))
|
|
93
|
-
})
|
|
94
|
-
|
|
95
|
-
it('should create claim with non 200 response', async() => {
|
|
96
|
-
const resp = await createClaimOnAttestor({
|
|
97
|
-
name: 'http',
|
|
98
|
-
params: {
|
|
99
|
-
url: 'https://the-internet.herokuapp.com/status_codes/201',
|
|
100
|
-
method: 'GET',
|
|
101
|
-
responseMatches: [{
|
|
102
|
-
type: 'contains',
|
|
103
|
-
value: 'Status Codes',
|
|
104
|
-
}],
|
|
105
|
-
responseRedactions: [{
|
|
106
|
-
xPath: '/html/body/div[2]/div/div/h3',
|
|
107
|
-
}],
|
|
108
|
-
headers: {
|
|
109
|
-
accept: 'application/json, text/plain, */*'
|
|
110
|
-
}
|
|
111
|
-
},
|
|
112
|
-
secretParams: {
|
|
113
|
-
cookieStr: '<cookie-str>'
|
|
114
|
-
},
|
|
115
|
-
ownerPrivateKey: opts.privateKeyHex,
|
|
116
|
-
client: opts.client,
|
|
117
|
-
zkEngine: 'gnark'
|
|
118
|
-
})
|
|
119
|
-
assert.ok(!resp.error)
|
|
120
|
-
assert.match(
|
|
121
|
-
resp.claim?.context || '',
|
|
122
|
-
/0x51004e4a2d91eda6fa8cf2e6fa9a8dd973070114a7c670a4c47797e9a55ab872/
|
|
123
|
-
)
|
|
124
|
-
})
|
|
125
|
-
})
|
|
@@ -1,296 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This file tests that if the TLS library works on javascript
|
|
3
|
-
* core (jsc) environment.
|
|
4
|
-
* 1. Ensure you have the jsc binary installed
|
|
5
|
-
* 2. Ensure you have built the jsc file via `npm run build:jsc`
|
|
6
|
-
*/
|
|
7
|
-
import { asciiToUint8Array } from '@joclaim/tls'
|
|
8
|
-
import { makeLocalFileFetch } from '@joclaim/zk-symmetric-crypto'
|
|
9
|
-
import { initGnark } from '@joclaim/zk-symmetric-crypto/gnark'
|
|
10
|
-
import { exec } from 'child_process'
|
|
11
|
-
import { after, afterEach, before, beforeEach, describe, it } from 'node:test'
|
|
12
|
-
import { stderr, stdout } from 'process'
|
|
13
|
-
import type { WebSocketServer } from 'ws'
|
|
14
|
-
|
|
15
|
-
import { generateRpcRequestId } from '#src/external-rpc/utils.ts'
|
|
16
|
-
import { ALL_ENC_ALGORITHMS } from '#src/external-rpc/zk.ts'
|
|
17
|
-
import { createServer } from '#src/server/create-server.ts'
|
|
18
|
-
import { getRandomPort, randomPrivateKey } from '#src/tests/utils.ts'
|
|
19
|
-
import { B64_JSON_REPLACER, B64_JSON_REVIVER } from '#src/utils/b64-json.ts'
|
|
20
|
-
import { uint8ArrayToBinaryStr } from '#src/utils/generics.ts'
|
|
21
|
-
import { logger } from '#src/utils/logger.ts'
|
|
22
|
-
import { makeDefaultZkOperator } from '#src/utils/zk.ts'
|
|
23
|
-
|
|
24
|
-
// algorithm doesn't matter, as the JSC bridge handles that part internally
|
|
25
|
-
// we'll just initialise all of them now
|
|
26
|
-
for(const alg of ALL_ENC_ALGORITHMS) {
|
|
27
|
-
await initGnark(alg, makeLocalFileFetch(), logger)
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
const GNARK_ZK = makeDefaultZkOperator('chacha20', 'gnark', logger)
|
|
31
|
-
|
|
32
|
-
describe('JSC Test', () => {
|
|
33
|
-
|
|
34
|
-
let wsServer: WebSocketServer
|
|
35
|
-
let privateKeyHex: string
|
|
36
|
-
const wsServerPort = getRandomPort()
|
|
37
|
-
|
|
38
|
-
let bridge: Awaited<ReturnType<typeof runJscBridge>>
|
|
39
|
-
|
|
40
|
-
before(async() => {
|
|
41
|
-
wsServer = await createServer(wsServerPort)
|
|
42
|
-
})
|
|
43
|
-
|
|
44
|
-
after(async() => {
|
|
45
|
-
wsServer.close()
|
|
46
|
-
})
|
|
47
|
-
|
|
48
|
-
beforeEach(async() => {
|
|
49
|
-
privateKeyHex = randomPrivateKey()
|
|
50
|
-
bridge = await runJscBridge(
|
|
51
|
-
{ attestorBaseUrl: `http://localhost:${wsServerPort}` }
|
|
52
|
-
)
|
|
53
|
-
})
|
|
54
|
-
|
|
55
|
-
afterEach(() => {
|
|
56
|
-
bridge?.exit()
|
|
57
|
-
})
|
|
58
|
-
|
|
59
|
-
it('should create claim with RPC', async() => {
|
|
60
|
-
const result = await bridge.rpc({
|
|
61
|
-
type: 'createClaim',
|
|
62
|
-
id: generateRpcRequestId(),
|
|
63
|
-
request: {
|
|
64
|
-
name: 'http',
|
|
65
|
-
params: {
|
|
66
|
-
url: 'https://the-internet.herokuapp.com/status_codes/201',
|
|
67
|
-
method: 'GET',
|
|
68
|
-
responseMatches: [{
|
|
69
|
-
type: 'contains',
|
|
70
|
-
value: 'Status Codes',
|
|
71
|
-
}],
|
|
72
|
-
responseRedactions: [{
|
|
73
|
-
xPath: '/html/body/div[2]/div/div/h3',
|
|
74
|
-
}],
|
|
75
|
-
headers: {
|
|
76
|
-
accept: 'application/json, text/plain, */*'
|
|
77
|
-
}
|
|
78
|
-
},
|
|
79
|
-
secretParams: {
|
|
80
|
-
cookieStr: '<cookie-str>'
|
|
81
|
-
},
|
|
82
|
-
ownerPrivateKey: privateKeyHex,
|
|
83
|
-
zkEngine: 'gnark',
|
|
84
|
-
zkOperatorMode: 'rpc'
|
|
85
|
-
}
|
|
86
|
-
})
|
|
87
|
-
console.log('Claim created:', result)
|
|
88
|
-
})
|
|
89
|
-
})
|
|
90
|
-
|
|
91
|
-
async function runJscBridge(
|
|
92
|
-
init: {
|
|
93
|
-
attestorBaseUrl: string
|
|
94
|
-
},
|
|
95
|
-
) {
|
|
96
|
-
const wsMap: Record<string, WebSocket> = {}
|
|
97
|
-
const pendingRpcMap: Record<
|
|
98
|
-
string, (data: JSCOutgoingMsg) => void
|
|
99
|
-
> = {}
|
|
100
|
-
|
|
101
|
-
const prc = exec('jsc -x out/jsc-cli-rpc.mjs', { })
|
|
102
|
-
prc.stdout!.on('data', async(data) => {
|
|
103
|
-
const cmds = Array.from(tryReadCmds(data))
|
|
104
|
-
if(!cmds.length) {
|
|
105
|
-
stdout.write('[JSC] ')
|
|
106
|
-
stdout.write(data)
|
|
107
|
-
return
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
for(const cmd of cmds) {
|
|
111
|
-
let res: JSCIncomingMsg
|
|
112
|
-
try {
|
|
113
|
-
const rslt = await handleCmd(cmd)
|
|
114
|
-
if(!rslt) {
|
|
115
|
-
return
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
res = {
|
|
119
|
-
type: `${cmd.type}Done`,
|
|
120
|
-
id: cmd.id,
|
|
121
|
-
module: 'attestor-core',
|
|
122
|
-
isResponse: true,
|
|
123
|
-
response: rslt,
|
|
124
|
-
} as any
|
|
125
|
-
} catch(err) {
|
|
126
|
-
res = {
|
|
127
|
-
type: 'error',
|
|
128
|
-
isResponse: true,
|
|
129
|
-
id: cmd.id,
|
|
130
|
-
data: {
|
|
131
|
-
message: err.message,
|
|
132
|
-
stack: err.stack,
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
await writeCmd(res)
|
|
138
|
-
}
|
|
139
|
-
})
|
|
140
|
-
prc.stderr!.on('data', (data) => {
|
|
141
|
-
stderr.write('[JSC-ERR] ')
|
|
142
|
-
stderr.write(data)
|
|
143
|
-
})
|
|
144
|
-
|
|
145
|
-
prc.on('exit', (err) => {
|
|
146
|
-
console.error('Error in JSC process', err)
|
|
147
|
-
})
|
|
148
|
-
|
|
149
|
-
await writeCmd({ type: 'init', ...init })
|
|
150
|
-
|
|
151
|
-
return {
|
|
152
|
-
writeCmd,
|
|
153
|
-
rpc,
|
|
154
|
-
exit() {
|
|
155
|
-
prc.kill()
|
|
156
|
-
onExit()
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
function onExit() {
|
|
161
|
-
for(const [id, ws] of Object.entries(wsMap)) {
|
|
162
|
-
ws.close()
|
|
163
|
-
delete wsMap[id]
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
for(const [id, resolve] of Object.entries(pendingRpcMap)) {
|
|
167
|
-
resolve({
|
|
168
|
-
type: 'error',
|
|
169
|
-
id,
|
|
170
|
-
isResponse: true,
|
|
171
|
-
data: {
|
|
172
|
-
message: 'Bridge closed before response',
|
|
173
|
-
stack: ''
|
|
174
|
-
}
|
|
175
|
-
})
|
|
176
|
-
delete pendingRpcMap[id]
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
async function handleCmd(cmd: JSCOutgoingMsg) {
|
|
181
|
-
if(pendingRpcMap[cmd.id]) {
|
|
182
|
-
const resolve = pendingRpcMap[cmd.id]
|
|
183
|
-
delete pendingRpcMap[cmd.id]
|
|
184
|
-
resolve(cmd)
|
|
185
|
-
return
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
if(cmd.type === 'connectWs') {
|
|
189
|
-
const { request: { id, url } } = cmd
|
|
190
|
-
const ws = (wsMap[id] = new WebSocket(url))
|
|
191
|
-
ws.binaryType = 'arraybuffer'
|
|
192
|
-
await new Promise<void>((resolve, reject) => {
|
|
193
|
-
ws.onopen = () => resolve()
|
|
194
|
-
ws.onerror = (ev) => reject(ev['error'] || ev)
|
|
195
|
-
})
|
|
196
|
-
|
|
197
|
-
ws.onclose = async() => {
|
|
198
|
-
await writeCmd({
|
|
199
|
-
type: 'disconnectWs',
|
|
200
|
-
id: generateRpcRequestId(),
|
|
201
|
-
request: { id }
|
|
202
|
-
})
|
|
203
|
-
delete wsMap[id]
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
ws.onmessage = async(ev) => {
|
|
207
|
-
const data = typeof ev.data === 'string'
|
|
208
|
-
? ev.data
|
|
209
|
-
: new Uint8Array(ev.data)
|
|
210
|
-
await writeCmd({
|
|
211
|
-
type: 'sendWsMessage',
|
|
212
|
-
id: generateRpcRequestId(),
|
|
213
|
-
request: { id, data }
|
|
214
|
-
})
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
return {}
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
if(cmd.type === 'sendWsMessage') {
|
|
221
|
-
const { request: { id, data } } = cmd
|
|
222
|
-
const ws = wsMap[id]
|
|
223
|
-
if(!ws) {
|
|
224
|
-
throw new Error(`WebSocket with id ${id} not found`)
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
ws.send(data)
|
|
228
|
-
return {}
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
if(cmd.type === 'executeZkFunctionV3') {
|
|
232
|
-
const { request: { fn, args } } = cmd
|
|
233
|
-
// @ts-expect-error
|
|
234
|
-
const result = await GNARK_ZK[fn]!(...args)
|
|
235
|
-
return result
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
if(cmd.type === 'createClaimStep') {
|
|
239
|
-
return
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
throw new Error(`Unknown command: ${cmd.type}`)
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
async function rpc<T>(cmd: JSCIncomingMsg) {
|
|
246
|
-
if(!('id' in cmd)) {
|
|
247
|
-
throw new Error('RPC command must have an id')
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
const waitForRes = new Promise<T>((resolve, reject) => {
|
|
251
|
-
pendingRpcMap[cmd.id] = data => {
|
|
252
|
-
if(data.type === 'error') {
|
|
253
|
-
reject(new Error(data.data.message))
|
|
254
|
-
return
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
resolve(data['response'] as T)
|
|
258
|
-
}
|
|
259
|
-
})
|
|
260
|
-
await writeCmd(cmd)
|
|
261
|
-
|
|
262
|
-
return waitForRes
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
function writeCmd(cmd: JSCIncomingMsg) {
|
|
266
|
-
const cmdStr = JSON.stringify(cmd, B64_JSON_REPLACER)
|
|
267
|
-
return new Promise<void>((resolve, reject) => {
|
|
268
|
-
prc.stdin!.write(asciiToUint8Array(cmdStr + '\n'), (err) => {
|
|
269
|
-
if(err) {
|
|
270
|
-
reject(err)
|
|
271
|
-
} else {
|
|
272
|
-
resolve()
|
|
273
|
-
}
|
|
274
|
-
})
|
|
275
|
-
})
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
function *tryReadCmds(str: string | Uint8Array): Generator<JSCOutgoingMsg> {
|
|
280
|
-
str = typeof str === 'string' ? str : uint8ArrayToBinaryStr(str)
|
|
281
|
-
const lines = str.split('\n')
|
|
282
|
-
for(const line of lines) {
|
|
283
|
-
try {
|
|
284
|
-
const cmd = JSON.parse(line, B64_JSON_REVIVER)
|
|
285
|
-
if(
|
|
286
|
-
typeof cmd !== 'object'
|
|
287
|
-
|| !cmd.type
|
|
288
|
-
|| cmd.module !== 'attestor-core'
|
|
289
|
-
) {
|
|
290
|
-
continue
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
yield cmd as JSCOutgoingMsg
|
|
294
|
-
} catch{}
|
|
295
|
-
}
|
|
296
|
-
}
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Mock HTTPS server to implement the "mock-login" provider
|
|
3
|
-
*/
|
|
4
|
-
import { readFileSync } from 'fs'
|
|
5
|
-
import { createServer } from 'https'
|
|
6
|
-
|
|
7
|
-
import { logger } from '#src/utils/index.ts'
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Mock https server to test claim creation.
|
|
11
|
-
* It implements a GET /me endpoint that returns the email address
|
|
12
|
-
* of the user. A bearer token is expected in the Authorization header.
|
|
13
|
-
*
|
|
14
|
-
* The bearer token is expected to be the email address without the domain.
|
|
15
|
-
* Eg. to claim the email address "abcd@mock.com", the header
|
|
16
|
-
* should be "Authorization: Bearer abcd".
|
|
17
|
-
*/
|
|
18
|
-
export function createMockServer(port: number) {
|
|
19
|
-
const tlsSessionStore: Record<string, Buffer> = {}
|
|
20
|
-
|
|
21
|
-
const server = createServer(
|
|
22
|
-
{
|
|
23
|
-
key: readFileSync('./cert/private-key.pem'),
|
|
24
|
-
cert: readFileSync('./cert/public-cert.pem'),
|
|
25
|
-
}
|
|
26
|
-
)
|
|
27
|
-
|
|
28
|
-
server.on('request', (req, res) => {
|
|
29
|
-
if(req.method !== 'GET') {
|
|
30
|
-
endWithError(405, 'invalid method')
|
|
31
|
-
return
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
if(!req.url?.startsWith('/me')) {
|
|
35
|
-
endWithError(404, 'invalid path')
|
|
36
|
-
return
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const auth = req.headers.authorization
|
|
40
|
-
if(!auth) {
|
|
41
|
-
endWithError(401, 'missing authorization header')
|
|
42
|
-
return
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
if(!auth?.startsWith('Bearer ')) {
|
|
46
|
-
endWithError(401, 'invalid authorization header')
|
|
47
|
-
return
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
const userId = auth.slice('Bearer '.length)
|
|
51
|
-
const emailAddress = userId + '@mock.com'
|
|
52
|
-
const resp = { emailAddress }
|
|
53
|
-
const parsedUrl = new URL(req.url, 'http://localhost')
|
|
54
|
-
|
|
55
|
-
const split = parsedUrl.searchParams.get('splitDataAcrossPackets')
|
|
56
|
-
if(split === 'true') {
|
|
57
|
-
// simulate spread across multiple packets by adding delays
|
|
58
|
-
// in sending the response
|
|
59
|
-
const str = JSON.stringify({ emailAddress })
|
|
60
|
-
const splitStart = str.indexOf(userId) + 4
|
|
61
|
-
if(splitStart <= 0 || splitStart >= str.length - 1) {
|
|
62
|
-
endWithError(500, 'could not split response')
|
|
63
|
-
return
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
res.writeHead(200, {
|
|
67
|
-
'Content-Type': 'application/json',
|
|
68
|
-
'Content-Length': str.length.toString(),
|
|
69
|
-
})
|
|
70
|
-
res.write(str.slice(0, splitStart))
|
|
71
|
-
|
|
72
|
-
setTimeout(() => {
|
|
73
|
-
res.write(str.slice(splitStart))
|
|
74
|
-
res.end()
|
|
75
|
-
}, 500)
|
|
76
|
-
|
|
77
|
-
logger.info({ emailAddress }, 'sent split response')
|
|
78
|
-
|
|
79
|
-
return
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
endWithJson(200, resp)
|
|
83
|
-
logger.info({ emailAddress }, 'ended with success')
|
|
84
|
-
|
|
85
|
-
function endWithError(status: number, message: string) {
|
|
86
|
-
endWithJson(status, { error: message })
|
|
87
|
-
|
|
88
|
-
logger.info({ status, message }, 'ended with error')
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
92
|
-
function endWithJson(status: number, json: any) {
|
|
93
|
-
const str = JSON.stringify(json)
|
|
94
|
-
res.writeHead(status, {
|
|
95
|
-
'Content-Type': 'application/json',
|
|
96
|
-
'Content-Length': str.length.toString(),
|
|
97
|
-
})
|
|
98
|
-
res.write(str)
|
|
99
|
-
res.end()
|
|
100
|
-
}
|
|
101
|
-
})
|
|
102
|
-
|
|
103
|
-
server.listen(port)
|
|
104
|
-
|
|
105
|
-
return { server, tlsSessionStore }
|
|
106
|
-
}
|
package/src/tests/mocks.ts
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { setCryptoImplementation } from '@joclaim/tls'
|
|
2
|
-
import { webcryptoCrypto } from '@joclaim/tls/webcrypto'
|
|
3
|
-
import { mock } from 'node:test'
|
|
4
|
-
import '#src/server/utils/config-env.ts'
|
|
5
|
-
|
|
6
|
-
import { preparePacketsForReveal } from '#src/utils/prepare-packets.ts'
|
|
7
|
-
|
|
8
|
-
setCryptoImplementation(webcryptoCrypto)
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Spies on the preparePacketsForReveal function
|
|
12
|
-
*/
|
|
13
|
-
export const SPY_PREPARER = mock.fn(preparePacketsForReveal)
|
|
14
|
-
|
|
15
|
-
mock.module('#src/utils/prepare-packets.ts', {
|
|
16
|
-
namedExports: {
|
|
17
|
-
preparePacketsForReveal: SPY_PREPARER
|
|
18
|
-
}
|
|
19
|
-
})
|
|
20
|
-
|
|
21
|
-
mock.module('#src/server/utils/apm.ts', {
|
|
22
|
-
namedExports: {
|
|
23
|
-
getApm: mock.fn()
|
|
24
|
-
}
|
|
25
|
-
})
|
|
Binary file
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
import assert from 'node:assert'
|
|
2
|
-
import { beforeEach, it } from 'node:test'
|
|
3
|
-
|
|
4
|
-
import { AttestorClient } from '#src/client/index.ts'
|
|
5
|
-
import { describeWithServer } from '#src/tests/describe-with-server.ts'
|
|
6
|
-
import { AttestorError, logger } from '#src/utils/index.ts'
|
|
7
|
-
|
|
8
|
-
describeWithServer('RPC Communication', opts => {
|
|
9
|
-
|
|
10
|
-
const { getClientOnServer } = opts
|
|
11
|
-
|
|
12
|
-
let client: AttestorClient
|
|
13
|
-
beforeEach(() => {
|
|
14
|
-
client = opts.client
|
|
15
|
-
})
|
|
16
|
-
|
|
17
|
-
it('should successfully initialise a session', async() => {
|
|
18
|
-
await client.waitForInit()
|
|
19
|
-
assert.ok(client.isInitialised)
|
|
20
|
-
// ensure the server has our client
|
|
21
|
-
assert.ok(getClientOnServer())
|
|
22
|
-
})
|
|
23
|
-
|
|
24
|
-
it('should gracefully handle terminated connection during init', async() => {
|
|
25
|
-
await client.terminateConnection()
|
|
26
|
-
client = new AttestorClient({
|
|
27
|
-
logger,
|
|
28
|
-
// a URL without a WS server
|
|
29
|
-
url: `ws://localhost:${opts.mockhttpsServerPort}`
|
|
30
|
-
})
|
|
31
|
-
await assert.rejects(
|
|
32
|
-
() => client.waitForInit(),
|
|
33
|
-
err => {
|
|
34
|
-
assert.ok(err instanceof AttestorError)
|
|
35
|
-
assert.strictEqual(err.code, 'ERROR_NETWORK_ERROR')
|
|
36
|
-
return true
|
|
37
|
-
}
|
|
38
|
-
)
|
|
39
|
-
})
|
|
40
|
-
|
|
41
|
-
it('should gracefully handle connection termination', async() => {
|
|
42
|
-
const err = new AttestorError(
|
|
43
|
-
'ERROR_INTERNAL',
|
|
44
|
-
'Test error',
|
|
45
|
-
{ abcd: 1 }
|
|
46
|
-
)
|
|
47
|
-
const waitForEnd = new Promise<AttestorError>(resolve => {
|
|
48
|
-
client.addEventListener('connection-terminated', d => {
|
|
49
|
-
resolve(d.data)
|
|
50
|
-
})
|
|
51
|
-
})
|
|
52
|
-
|
|
53
|
-
const ws = getClientOnServer()!
|
|
54
|
-
await ws.terminateConnection(err)
|
|
55
|
-
const recvErr = await waitForEnd
|
|
56
|
-
assert.deepEqual(recvErr, err)
|
|
57
|
-
assert.ok(!client.isOpen)
|
|
58
|
-
})
|
|
59
|
-
|
|
60
|
-
it('should terminate connection to server', async() => {
|
|
61
|
-
const ws = getClientOnServer()!
|
|
62
|
-
const waitForEnd = new Promise<AttestorError>(resolve => {
|
|
63
|
-
ws.addEventListener('connection-terminated', d => {
|
|
64
|
-
resolve(d.data)
|
|
65
|
-
})
|
|
66
|
-
})
|
|
67
|
-
|
|
68
|
-
await client.terminateConnection()
|
|
69
|
-
await waitForEnd
|
|
70
|
-
})
|
|
71
|
-
|
|
72
|
-
it('should handle RPC error response', async() => {
|
|
73
|
-
const err = new AttestorError(
|
|
74
|
-
'ERROR_INTERNAL',
|
|
75
|
-
'Test error',
|
|
76
|
-
{ abcd: 1 }
|
|
77
|
-
)
|
|
78
|
-
|
|
79
|
-
const ws = getClientOnServer()!
|
|
80
|
-
ws.addEventListener('rpc-request', ev => {
|
|
81
|
-
ev.stopImmediatePropagation()
|
|
82
|
-
ev.data.respond(err)
|
|
83
|
-
})
|
|
84
|
-
|
|
85
|
-
await assert.rejects(
|
|
86
|
-
() => client.rpc(
|
|
87
|
-
'createTunnel',
|
|
88
|
-
{
|
|
89
|
-
host: 'localhost',
|
|
90
|
-
port: 9999,
|
|
91
|
-
}
|
|
92
|
-
),
|
|
93
|
-
recvErr => {
|
|
94
|
-
assert.partialDeepStrictEqual(recvErr, err)
|
|
95
|
-
return true
|
|
96
|
-
}
|
|
97
|
-
)
|
|
98
|
-
})
|
|
99
|
-
|
|
100
|
-
it('should handle fetchCertificateBytes RPC', async() => {
|
|
101
|
-
const url = 'http://cacerts.rapidssl.com/RapidSSLTLSRSACAG1.crt'
|
|
102
|
-
const result = await client.rpc('fetchCertificateBytes', { url })
|
|
103
|
-
assert.ok(result.bytes?.length)
|
|
104
|
-
})
|
|
105
|
-
|
|
106
|
-
it('should fail fetchCertificateBytes RPC', async() => {
|
|
107
|
-
const url = 'http://cacerts.rapidssl.com/RapidSSLTLSRSACAG1.crt1'
|
|
108
|
-
await assert.rejects(
|
|
109
|
-
() => client.rpc('fetchCertificateBytes', { url }),
|
|
110
|
-
err => {
|
|
111
|
-
return err instanceof AttestorError
|
|
112
|
-
}
|
|
113
|
-
)
|
|
114
|
-
})
|
|
115
|
-
})
|