diff --git a/docs/assets/hierarchy.js b/docs/assets/hierarchy.js index 0b325795..843bebc2 100644 --- a/docs/assets/hierarchy.js +++ b/docs/assets/hierarchy.js @@ -1 +1 @@ -window.hierarchyData = "eJyV0z1vwjAQBuD/crOhiQ1Jmq0EBoYytBVLhSorOYqFsZFtaCXEf6/4ag1Uir1kSO7Nc7bPOzBaOwvlO+1lJO0XMwIG5xJrJ7SyUO6AHh6KrxBKeJpWUqByQGApVANlSgsCGyOhhFpya9E+8O1HfSzqXqq7C7eSQE4VUIKzTecQ75xe7Amk/cJTxncM7WcXRiiHZs7rK2ncSv3GDh8XQjYG1WHVsz0BmuSePthIiU6ogeamGRmjTdhq73Pt66Y08eTRigs51Ggn2j1zVy+m2qF5wVpHNdL6m4C+GPP6Gg4GEfylOkDpZf5sbU9HGEFdRVq862NPckJpQihjhGYpoXmP0CInLEkISxlhNCOMPR6HI0v9Jusara10g6PvtTDYBDZ6GwvYnLz3rztWWy5FtHuOBbiFfxkqbcxm7aqtiTiWm1C7yRL/GryJFepNzBz4iQAt9Yf7vDGVVnPxGWHe5wJkmt3Lr447jIf/YgEue/TcCbovbZYRpJ9o0/b7H3zfGqI=" \ No newline at end of file +window.hierarchyData = "eJydlt9v2jAQgP8XP1+ZY+f3W6FU4mFUYlVfpmqKzFEsjI0cwyZV/O8TUFazsMXmJQ/Jffnuzmcn78Qa41pSf2dZBUlWvgKxuFAonDS6JfU7YYeLbtZIanL/MlIStSNAVlLPSZ2wEsjWKlIToZq2xfZLs/shjkGDc/Rg6daKwCmC1MS187sDfne6sQeSZKVnmXQ0LMvPGqkd2kUjLkyTXtUf7PBwKdXcoj5U/boHwmjh2YdbpdBJPTSNnY+tNTas2i7XXzdj1DOP141UDwbbqXFfGyeWL8ahnaEwUYn0viYgL869vB6Gwwj9OTrAkuZ+3xuljJvhAi1qgVPjnrSXeeAi/P8lATlllT/vu9NYRZR/gfT4LkeRFsAYBcY5sDQHVqTAygI4pcATDpzlwHkFPGPA8wx4UQKvEkhpCmlSQMrpcZiL1C9ACGzbkZnj+NdGWgxsYwcLaFxZXPVO9K5RMtr7gfV7OfW30MhYu9240c5GLNlfUIAz8bfHs1yj2cbMiE8E2Ji/TT4aMzJ6Id8inF0uwMyrrvmbaxzGiz+xAG/Gut5ns0Id7/3EArx55nmn6H4au4pQ+kSArfA/et4pNTXu0Wx1zJn/Lzogiyq5Ol0O26CR3qGVC4l2cAXtt6c07dqfNoefj1vkHhngToque4YC5eamyn00wM7plRm3jVhJ/XY8eW9IocP35bHf/wY12Vrs" \ No newline at end of file diff --git a/docs/assets/highlight.css b/docs/assets/highlight.css index 51b7a0fb..1167f4bc 100644 --- a/docs/assets/highlight.css +++ b/docs/assets/highlight.css @@ -7,18 +7,18 @@ --dark-hl-2: #DCDCAA; --light-hl-3: #A31515; --dark-hl-3: #CE9178; - --light-hl-4: #0000FF; - --dark-hl-4: #569CD6; - --light-hl-5: #0070C1; - --dark-hl-5: #4FC1FF; - --light-hl-6: #AF00DB; - --dark-hl-6: #C586C0; - --light-hl-7: #267F99; - --dark-hl-7: #4EC9B0; - --light-hl-8: #000000; - --dark-hl-8: #C8C8C8; - --light-hl-9: #098658; - --dark-hl-9: #B5CEA8; + --light-hl-4: #000000; + --dark-hl-4: #C8C8C8; + --light-hl-5: #0000FF; + --dark-hl-5: #569CD6; + --light-hl-6: #0070C1; + --dark-hl-6: #4FC1FF; + --light-hl-7: #AF00DB; + --dark-hl-7: #C586C0; + --light-hl-8: #267F99; + --dark-hl-8: #4EC9B0; + --light-hl-9: #008000; + --dark-hl-9: #6A9955; --light-code-background: #FFFFFF; --dark-code-background: #1E1E1E; } diff --git a/docs/assets/navigation.js b/docs/assets/navigation.js index 3d9fb028..b503f0a0 100644 --- a/docs/assets/navigation.js +++ b/docs/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "eJydll1vmzAUhv+Ld5tuTZZ2a+4GjbRJay+aKTdVVB2ZQ7Hq2Mg+eExT//sUkYCB1ma5xY+f9+CPA49/GWFNbMXAPXEpUBGbsRKoYCu211kl0X5qhz4WtJdsxl6EythqMWO8EDIzqNjqsRV926YDD5dgbc9zYvrC+eLr68zzbNGIXKCJVfQBnOvQxrWc3yw/Xy59n2sy18ZoEyzOB4MVco7WpjrDH8qBFFnQOoSnmdd1KQxONB/hkPke6bc2L9FF8LmQ7/gyqVa5eI5ax/QE94aAcKq6g0PmpJISSahEg8mi6jEdcq/3IOStRnuv6Q6IF1tNaB6Q6wlR0cmh5NskiQacmJAn1cZUJaXORHUDNGT9Jfaoq/j187ng6Rg3GqEITQ68fzDebjaLq2tPhjUZ4JRqRWhpgxI5Ca1s584r1Tzy1O/N6idd97pQnosMnPCqpj9l/z6fkEHBlzdf5leHpntYssM8m10Ie4E1oVEgmZeyEc8KqDL4fkqLnJ/yHWyxBVkFUlrk/JQEpNTd4kZ2e0CP9nxS5E847GfTpSJ5Pnpe2PH03EEZierA84KapUl0/YAcRRm7N0P8f0J3Xiy4Jxf6kJ8GJ/5cjH8KvBbSujpu3EJ2r7t/EDobQQ==" \ No newline at end of file +window.navigationData = "eJydll1v2jAUhv+Le0u3wmi3cldSpk1aqQQVNxWqLOcELIwd2ScZ09T/PmUhiRMa23BLnvO8/jz49S9BOCCZEJq/McFBIhmQlOKWTMhexZkA87n+9GmLe0EGZMdlTCajAWFbLmINkkxea9HDKup4mKDGtDwV0xYOR9/eB5ZnBZonHLRvRFc0zxu0dI2H9+MvN2Pbl5eZM62Vdg7OBp0jZAyMiVQMP2VOBY+d1i4cZp4dUq4h0HyEXeY54G+ld95FsDmX7ziZSMmEb7zWUzrAvUSKEKpuYJd5mgkByOVUUR171ae0yz3bUy4eFZi5wieKbLtSCHoBTAVEeYuds6JCKFxAAhokg7nCZ2nVO6foLnWlPk6n3mlVjMtjxc0VfleZ9C9XX40rJ1JaZylGufbqO6jL+sL3oDJ/c7G5gLP/onYgQ89+AzvNpw2aSwSdUNaWftykR7d3lgwOqCnDSEkEg0sQwJAraRp3ksnyJ0vdV9VOumt17yThMc25NWr8k7b7YIV0Bnxz/3V4W/xZFetW1Jn4mptrOCBoSQWxUpZ8IylmGvpTauTylB/UbFdUZI6UGrk8pbzS9eJ6drtDn+x5UOQvWuxn2d09eTZ6Wdjx9DzR1BPVgJcFlUszVYcFMOCp79508XNC11Yszd9y1wOo+hj0KKs6hKZsx+Xm/2Oht6vU5r6qgMZ1nHx4iF0Q9uAoNjXcbxcE+J/T4hqE6y3+3EftR9aGO/8x13dGrmSJwxFvP5TX7+t/KjQ06Q==" \ No newline at end of file diff --git a/docs/assets/search.js b/docs/assets/search.js index 169206f7..9f46583c 100644 --- a/docs/assets/search.js +++ b/docs/assets/search.js @@ -1 +1 @@ -window.searchData = "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"; \ No newline at end of file +window.searchData = "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"; \ No newline at end of file diff --git a/docs/classes/av_client.AVClient.html b/docs/classes/av_client.AVClient.html index 07c1ae67..06fde44c 100644 --- a/docs/classes/av_client.AVClient.html +++ b/docs/classes/av_client.AVClient.html @@ -5,7 +5,12 @@
Two authorization modes are supported, depending on the election configuration:
+proof-of-identity: the voter receives a one-time password by email (OTP flow).proof-of-election-codes: the voter derives a cryptographic proof from printed election codes.| requestAccessCode | -Initiates the authorization process, in case voter has not authorized yet. Requests access code to be sent to voter email | +Requests a one-time password sent to the voter's email | |
| validateAccessCode | -Gets voter authorized to vote. | +Validates the OTP code and obtains the identity token | |
| registerVoter | Registers the voter on the bulletin board | ||
| AVClient.constructBallotCryptograms | -constructBallotCryptograms | +constructBallot | +Encrypts the ballot selections and submits cryptograms | +
| spoilBallot | +Optional. Initiates ballot encryption testing (challenge flow). | +||
| castBallot | +Finalizes the voting process | +
| Method | +Description | +|
|---|---|---|
| initialize | +Initializes the library by fetching election configuration | +|
| generateProofOfElectionCodes | +Derives a cryptographic proof from the voter's election codes | +|
| createVoterRegistration | +Registers the voter on the bulletin board | +|
| constructBallot | +Encrypts the ballot selections and submits cryptograms | |
| spoilBallot | -Optional. Initiates process of testing the ballot encryption. | +Optional. Initiates ballot encryption testing (challenge flow). |
| castBallot | -Finalizes the voting process. | +Finalizes the voting process |
OptionaldbbPublicKey: stringInitializes the client with an election config. -If no config is provided, it fetches one from the backend.
-OptionallatestConfig: LatestConfigAllows injection of an election configuration for testing purposes
-OptionalkeyPair: KeyPairAllows injection of a keypair to support automatic testing
-Returns undefined if succeeded or throws an error
-NetworkError if any request failed to get a response
-Should be called when a voter chooses digital vote submission (instead of mail-in).
-Will attempt to get backend services to send an access code (one time password, OTP) to voter's email address.
-Should be followed by validateAccessCode to submit access code for validation.
+Creates a new AVClient instance pointed at a specific Digital Ballot Box.
+Base URL of the Digital Ballot Box for this election.
+OptionaldbbPublicKey: stringOptional DBB public key to pin at construction time. If omitted, the key +is read from the genesis config once initialize is called.
+Loads the election configuration and generates a fresh EC key pair for the voter.
+If latestConfig is provided it is validated and used directly; otherwise the config is
+fetched from the DBB (GET /configuration/latest_config). After loading the config,
+AVCrypto is initialised with the elliptic curve from genesisConfig.eaCurveName and a
+fresh EC key pair is generated. Must be the first method called on a new AVClient.
OptionallatestConfig: LatestConfigOptional election configuration to inject. If provided it is validated +before use; if omitted the config is fetched from the DBB.
+OptionalkeyPair: KeyPairOptional key pair to inject instead of generating a fresh one. For testing only.
+Returns undefined on success or throws an error.
+InvalidConfigError if the injected latestConfig fails validation.
Starts the OTP (one-time password) authorization flow by requesting an access code sent to +the voter's email address.
+Calls the Voter Authorizer coordinator to create a session and trigger an OTP email. Stores
+the returned sessionId as authorizationSessionId and the email address internally.
Only used when authorizationMode === 'proof-of-identity'. For the election-codes flow,
+use generateProofOfElectionCodes instead.
Should be followed by validateAccessCode.
Voter ID that preserves voter anonymity.
-where the voter expects to receive otp code.
-OptionalballotReference: stringThe ballot which which voter voter intends to vote on
-Returns undefined or throws an error.
-NetworkError if any request failed to get a response
+The voter's email address where the OTP will be sent.
+OptionalballotReference: stringOptional ballot reference identifying which ballot the voter intends to vote on.
+Returns undefined on success or throws an error.
+VoterRecordNotFoundError if no voter record matches the given ID.
+EmailDoesNotMatchVoterRecordError if the email address does not match the voter's record.
+BallotReferenceNotOnVoterRecord if the provided ballotReference is not on the voter's record.
NetworkError if any request failed to get a response.
Should be called after requestAccessCode.
-Takes an access code (OTP) that voter received, uses it to authorize to submit votes.
-Internally, generates a private/public key pair, then attempts to authorize the public -key with each OTP provider.
-Should be followed by AVClient.constructBallotCryptograms | constructBallotCryptograms.
-An access code string.
-Returns undefined if authorization succeeded or throws an error
-InvalidStateError if called before required data is available
-AccessCodeExpired if an OTP code has expired
-AccessCodeInvalid if an OTP code is invalid
-NetworkError if any request failed to get a response
-Registers a voter based on the authorization mode of the Voter Authorizer -Authorization is done by 'proof-of-identity' or 'proof-of-election-codes'
-Registers a voter based on the authorization mode of the Voter Authorizer
-undefined or throws an error
-Should be called after validateAccessCode.
-Encrypts a ballot-selection (CVR) and generates vote cryptograms.
+Validates the one-time password (OTP) the voter received by email. On success, +stores the identity confirmation token internally so that +registerVoter can authorize the voter with the DBB.
+Should be followed by registerVoter.
+The one-time password string received by the voter via email.
+Returns undefined if authorization succeeded or throws an error.
+InvalidStateError if called before requestAccessCode.
+AccessCodeExpired if the OTP code has expired.
+AccessCodeInvalid if the OTP code is invalid.
+NetworkError if any request failed to get a response.
+Derives a cryptographic proof from the voter's printed election codes.
+Required when the election uses authorizationMode === 'proof-of-election-codes' as an
+alternative to the OTP email flow. The derived proof is stored internally and consumed by
+createVoterRegistration.
Must be called after initialize and before +createVoterRegistration.
+Array of election code strings provided to the voter (e.g. on a printed card).
+Directly sets the identity confirmation token without going through the standard OTP flow.
+Use this when the consuming application obtains an identity token through an external +authentication mechanism and needs to inject it before calling +registerVoter. This is an alternative to calling +requestAccessCode → +validateAccessCode.
+The identity confirmation token string obtained from the external identity provider.
+Sets the registration channel before calling createVoterRegistration.
+When the election configuration includes segmentsConfig.content.channels, the consuming
+application should call this method with a channel private key (typically stored in
+localStorage by a channel-provisioning flow) before registering the voter. Internally,
+the key is used to sign a JWT ({ sub: "channel" }) that is sent alongside the voter
+registration request, allowing the DBB to associate the vote with a specific channel.
Passing undefined clears any previously set channel, which means no channel JWT is
+included in the registration request.
Must be called after initialize and before +createVoterRegistration.
+Hex-encoded P-256 private key for the channel, or undefined to clear.
Retrieves voter information from the Voter Authorizer coordinator.
+Requires that the voter has already been identified — either via the OTP flow +(validateAccessCode) or via election codes +(generateProofOfElectionCodes).
+The returned AxiosResponse.data contains voter metadata as returned by the Voter Authorizer.
+Commonly accessed fields include:
ballotReference — identifies which ballot config applies to this voter.demo — whether this voter is a demo voter (used to filter voting rounds).Typical usage: call this method after identification and use data.ballotReference to look up
+the voter's ballot config from getLatestConfig().items.ballotConfigs, then determine which
+voting rounds are active and applicable before calling
+createVoterRegistration.
The raw AxiosResponse from the Voter Authorizer. Relevant shape:
{ data: { ballotReference: string, demo: boolean, ...voterMetadata } }
+
+
+InvalidStateError if neither an identity token nor an election code proof is available.
+NetworkError if any request failed to get a response.
+Registers the voter on the Digital Ballot Box, branching on the election's authorizationMode.
proof-of-identity: uses the identity confirmation token obtained via
+validateAccessCode (or
+setIdentityToken) to request a JWT from the Voter
+Authorizer, then posts a voter session to the DBB.proof-of-election-codes: uses the proof generated by
+generateProofOfElectionCodes to request a
+JWT from the Voter Authorizer, then posts a voter session to the DBB.Note: if an identity confirmation token is present (set via
+setIdentityToken), the identity path is used regardless
+of authorizationMode. This allows SSO-integrated consumers to inject a token even in
+elections configured as proof-of-election-codes.
The DBB response is validated against the DBB public key. On success, the voter session is +stored internally and used in all subsequent calls.
+Prefer registerVoter for the standard single-round case.
+Use this method when you need to specify a non-default votingRoundReference.
Identifies which voting round to register for. Defaults to "voting-round-1".
Returns undefined on success or throws an error.
+InvalidStateError if the required token or proof is missing.
+InvalidTokenError if the JWT from the Voter Authorizer cannot be decoded.
+InvalidConfigError if the election has an unknown authorizationMode.
BulletinBoardError if the DBB rejects the registration.
+NetworkError if any request failed to get a response.
+Registers the voter on the Digital Ballot Box for voting round 1.
+Convenience wrapper around createVoterRegistration
+using the default votingRoundReference = "voting-round-1". This is the method defined in
+the IAVClient interface and is sufficient for most single-round elections.
Must be preceded by voter identification:
+Returns undefined on success or throws an error.
+InvalidStateError if the required token or proof is missing.
+InvalidTokenError if the JWT from the Voter Authorizer cannot be decoded.
+BulletinBoardError if the DBB rejects the registration.
+NetworkError if any request failed to get a response.
+Expires all active voter sessions for the given voting round on the Digital Ballot Box.
+Only supported when authorizationMode === 'proof-of-election-codes'. Uses the stored
+election code proof (set by generateProofOfElectionCodes)
+to obtain an expiration JWT from the Voter Authorizer (action "expire"), then posts to
+POST /voting/expirations on the DBB.
Primarily used by IVR telephony consumers to end a voting session programmatically.
+Identifies which voting round's sessions to expire.
+The raw AxiosResponse from the DBB expiration endpoint.
InvalidStateError if called when authorizationMode === 'proof-of-identity' (not supported).
InvalidStateError if called before generateProofOfElectionCodes.
+InvalidTokenError if the expiration JWT from the Voter Authorizer cannot be decoded.
+InvalidConfigError if the election has an unknown authorizationMode.
NetworkError if any request failed to get a response.
+Extends the active voter session on the Digital Ballot Box.
+Signs a SessionExtensionItem containing { extendedBy } with the voter's private key and
+posts it to POST /voting/extensions. Requires that voter registration has completed (so that
+voterSession is set). No-ops silently if the voter session has an empty address.
Used by consuming applications to refresh the session timeout when the voter is still active
+(e.g. after a "Extend session" prompt in the UI, or while the voter is on the phone in an
+IVR flow). The number of seconds to extend by is typically read from
+electionStatus.sessionCountdown.extendSeconds.
Number of seconds to extend the session by.
+Returns undefined on success or throws an error.
+TypeError if called before voter registration (this.voterSession is undefined — the guard on line 628 dereferences it directly).
NetworkError if any request failed to get a response.
+Encrypts the voter's ballot selections and submits them to the Digital Ballot Box.
+Must be called after registerVoter (or +createVoterRegistration).
+Internally performs the following steps:
+ballotSelection against the voter's contest configs and marking rules.POST /voting/commitments — submits the voter commitment to the DBB. Receives the
+board commitment (server's Pedersen commitment) and server envelopes.POST /voting/votes — submits ballot cryptograms and ZK proofs to the DBB.Should be followed by either spoilBallot +or castBallot.
Example:
-const client = new AVClient(url);
const cvr = { '1': 'option1', '2': 'optiona' };
const trackingCode = await client.constructBallotCryptograms(cvr);
+const client = new AVClient(url);
const trackingCode = await client.constructBallot(ballotSelection);
Example of handling errors:
-try {
await client.constructBallotCryptograms({});
} catch(error) {
if(error instanceof AvClientError) {
switch(error.name) {
case 'InvalidStateError':
console.log("State is not valid for this call");
break;
case 'NetworkError':
console.log("It's a network error");
break;
default:
console.log('Something else was wrong');
}
}
}
-
+try {
await client.constructBallot(ballotSelection);
} catch(error) {
if(error instanceof AvClientError) {
switch(error.name) {
case 'InvalidStateError':
console.log("State is not valid for this call");
break;
case 'NetworkError':
console.log("It's a network error");
break;
default:
console.log('Something else was wrong');
}
}
}
+
-Where '1' and '2' are contest ids, and 'option1' and 'optiona' are
-values internal to the AV election config.
-Should be followed by either spoilBallot
-or castBallot.
-BallotSelection containing the selections for each contest.
-Returns the ballot tracking code. Example:
-'5e4d8fe41fa3819cc064e2ace0eda8a847fe322594a6fd5a9a51c699e63804b7'
+BallotSelection containing the voter's selections for each contest.
+The 7-character Base58 ballot tracking code (e.g. 'A3K9mNP').
InvalidStateError if called before registerVoter.
+CorruptCvrError if the ballot selection is structurally invalid.
+NetworkError if any request failed to get a response.
+Finalises the voting process by casting the previously constructed ballot.
+Must be called after constructBallot. Signs a
+CastRequestItem with the voter's private key and posts it to POST /voting/cast on the
+DBB. The DBB response payload and receipt are validated against the DBB public key.
If sendTrackingCodeByEmail is enabled in the election configuration, an attempt is made to
+send the receipt to the voter by email via the Voter Authorizer. Email delivery failures are
+logged but not propagated as errors.
BCP 47 locale tag for the receipt email (e.g. "en", "es", "fr"). Defaults to "en".
The BallotBoxReceipt confirming the ballot was recorded. Shape:
{
previousBoardHash: string,
boardHash: string,
registeredAt: string, // ISO 8601
serverSignature: string, // EC signature from the DBB
voteSubmissionId: number
}
-InvalidStateError if called before required data is available
-CorruptCvrError if the cast vote record is invalid
-NetworkError if any request failed to get a response
-Should be the last call in the entire voting process.
-Requests that the previously constructed ballot is cast.
-The locale which the email with the vote receipt should be sent in
-Returns the vote receipt. Example of a receipt:
-{
previousBoardHash: 'd8d9742271592d1b212bbd4cbvobbe357aef8e00cdbdf312df95e9cf9a1a921465',
boardHash: '5a9175c2b3617298d78be7d0244a68f34bc8b2a37061bb4d3fdf97edc1424098',
registeredAt: '2020-03-01T10:00:00.000+01:00',
serverSignature: 'dbcce518142b8740a5c911f727f3c02829211a8ddfccabeb89297877e4198bc1,46826ddfccaac9ca105e39c8a2d015098479624c411b4783ca1a3600daf4e8fa',
voteSubmissionId: 6
}
+Throws
InvalidStateError if called before constructBallot.
+Throws
NetworkError if any request failed to get a response.
+Initiates the ballot challenge (spoil) flow to test the ballot encryption.
+Must be called after constructBallot, as an alternative to
+castBallot. Signs a SpoilRequestItem and posts it to
+POST /voting/spoil. Retrieves the server commitment opening and validates it against the
+previously stored board commitment and server envelopes.
The returned address is passed to +AVVerifier.submitVerifierKey on the second (verifier) +device to link the two devices.
+Should be followed by waitForVerifierRegistration.
+The spoilRequest.address string — the DBB chain address of the spoil request item.
InvalidStateError if called before constructBallot.
+NetworkError if any request failed to get a response.
+Sends the voter's commitment opening (ballot randomizers) to the verifier device via the DBB.
+Must be called after constructBallot (which generates the
+commitment opening) and after
+waitForVerifierRegistration (which provides the
+verifier's public key). Encrypts the voter's CommitmentOpening (ballot randomizers and
+commitment randomness) under the verifier's public key and fires a
+POST /verification/commitment_openings request to the DBB.
Note: The HTTP request is fire-and-forget — it is not awaited. The method returns +immediately regardless of network success.
+Returns undefined immediately (HTTP request is not awaited).
+InvalidStateError if called before voter registration (this.voterSession not set).
TypeError if called before waitForVerifierRegistration — this.verifierItem and this.voterCommitmentOpening are not explicitly guarded and will be undefined.
Returns the full election configuration loaded during initialize.
+The LatestConfig object containing genesis config, election config, contest configs,
+ballot configs, voting round configs, and threshold key.
InvalidStateError if called before initialize.
+Returns the voter session item received from the DBB after registration.
+The voter session item contains the voter's identifier, public key, weight, voter group, and +voting round reference as stored on the DBB chain.
+The VoterSessionItem from the DBB.
InvalidStateError if called before registerVoter.
+Returns the Voter Authorizer session ID for the current authorization session.
+Set during requestAccessCode (OTP flow) or during +createVoterRegistration (election codes flow).
+Common uses by consumers:
+The authorization session ID string.
+Returns the ballot configuration for the voter's voter group.
+The ballot config defines which contests appear on the voter's ballot (i.e. the set of contest +references for this voter group). Use getVoterContestConfigs +to get the full contest configs filtered to the active voting round.
+The BallotConfig for the voter's group.
InvalidStateError if called before registerVoter.
+Returns the contest configurations accessible to this voter in the current voting round.
+Computes the intersection of contests on the voter's ballot (from their voter group) and
+contests active in the current voting round. Each ContestConfig includes the contest title,
+marking rules (min/max selections, weights), available options, and encoding parameters.
Array of ContestConfig objects for the contests this voter can vote on.
InvalidStateError if called before registerVoter.
+Returns the DBB public key used to verify DBB-signed payloads and receipts.
+Returns the key pinned at construction time (if provided), otherwise falls back to the key +from the genesis config loaded during initialize.
+The hex-encoded DBB public key string.
+InvalidStateError if no DBB public key is available (neither pinned nor loaded).
+Signs an arbitrary string payload with the voter's EC private key.
+Useful when the consuming application needs to produce a signature on behalf of the voter +(e.g. for authenticating requests to external services). Requires +initialize to have been called so the key pair is available.
+The string to sign.
+The EC signature as a hex string.
+Polls the Digital Ballot Box until the verifier device registers its public key.
+Must be called after spoilBallot. Queries
+GET /verification/verifiers/{address} every 1000ms for up to 600 attempts (10 minutes). Resolves
+once a VerifierItem is detected on the DBB chain for this spoil request, stores the verifier
+item internally (used by challengeBallot), and returns the
+7-character Base58 pairing code derived from the verifier item's short address.
Both the voter's app and the verifier device should display the pairing code so the voter can +confirm they are connected to the correct second device.
+Should be followed by challengeBallot.
+The 7-character Base58 pairing code derived from the verifier item's DBB address.
+InvalidStateError if called before voter registration or before spoilBallot.
+TimeoutError if the verifier does not register within 600 poll attempts.
+Retrieves the current status and audit log for a ballot identified by its tracking code.
+Decodes the Base58 tracking code to its hex short address and queries
+GET /ballot_status on the DBB. This method does not require an active voter session and
+can be called unauthenticated — useful for voters checking their ballot after the fact or
+for external verification tools.
The 7-character Base58 tracking code returned by constructBallot.
+A BallotStatus object:
{
status: string, // e.g. "cast", "spoiled", "pending"
activities: Activity[] // audit log entries for this ballot
}
+
+
+Disables the voter in the Voter Authorizer so they can no longer sign in or vote.
+Signs the current authorizationSessionId with the voter's private key and calls the VA
+disable endpoint. Used in two contexts:
Requires that voter registration has been completed
+(registerVoter or
+createVoterRegistration) so that both
+authorizationSessionId and voterSession.content.votingRoundReference are available.
The raw AxiosResponse from the Voter Authorizer disable endpoint.
NetworkError if any request failed to get a response.
+Retrieves the voting round items for the voter's current voting round from the Voter Authorizer.
+Signs the authorizationSessionId with the voter's private key to authenticate the request.
+The returned AxiosResponse.data.items is an array of voting round items (e.g. information
+pages to display before the ballot). Consumers should handle the case where data.items is
+missing or not an array, as the shape depends on the Voter Authorizer configuration.
Requires that voter registration has been completed so that authorizationSessionId and the
+voter session's votingRoundReference are available.
The raw AxiosResponse from the Voter Authorizer. Relevant shape:
{ data: { items: RawVotingRoundItem[] } }
-NetworkError if any request failed to get a response
-Should be called when voter chooses to test the encryption of their ballot. -Gets commitment opening of the digital ballot box and validates it.
-Returns undefined if the validation succeeds or throws an error
-InvalidStateError if called before required data is available
-NetworkError if any request failed to get a response
-Should be called when the voter has 'paired' the verifier and the voting app. -Computes and encrypts the clientEncryptionCommitment and posts it to the DBB
-Returns void if the computation was succesful
-InvalidStateError if called before required data is available
-NetworkError if any request failed to get a response
-Should be called after spoilBallot. -Gets the verifier public key from the DBB
-Returns the pairing code based on the address of the verifier item in the DBB
-InvalidStateError if called before required data is available
-TimeoutError if the verifier doesn't register itself to the DBB in time
-NetworkError if any request failed to get a response
-Finds the ballot status corresponding to the given trackingcode. -Also returns the activities associated with the ballot
-base58-encoded trackingcode
-Disables the voter in the VA, so that they can no longer vote or sign in.
-
URL to the Assembly Voting backend server, specific for election.
-