1.0.26 • Published 9 months ago

election-tonight-client v1.0.26

Weekly downloads
-
License
MIT
Repository
github
Last release
9 months ago

npm.io

šŸ—³ļø election-tonight-client

NPM Version Reuters open source software

Client for the ElectionTonight API, an API for retrieving U.S. election results and exit polls conducted by Edison Research.

šŸ“š API docs

āš™ļø GitHub Repo

Features

  • ✨ Easy and full-featured API to efficiently retrieve data from the ElectionTonight API in whatever way best suits you.
  • šŸ‡ Fast, efficient and fully typed database queries with Drizzle and Postgres.js.
  • āœ… Tested across multiple elections.
  • šŸ“† Simulates your own election night tests.

Install

npm install election-tonight-client

Quickstart

Initialise the client.

import { ElectionTonightClient } from 'election-tonight-client';

// ElectionTonight API key
const API_KEY = 'SECRET';
// ElectionTonight event ID
const EVENT_ID = '20221108';

const client = new ElectionTonightClient(API_KEY, EVENT_ID);

Connect to your PostgreSQL database, using Postgres.js.

const databaseUrl = 'postgresql://localhost:5432/yourdb';

client.connect(databaseUrl);

Setup the event with all its metadata.

await client.setupEvent();

Get all election data in a "sweep" ...

await client.getCountyVotes();
await client.getCalls();
await client.getEditorialTurnout();
await client.getTotalExpectedVote();
await client.getMessages();

... or get just the latest in a "stream."

let updatedEntities = await client.getStreamedCountyVotes();

// Now, do something with the updated entites -- states,
// offices, etc. -- returned from the stream.
for (const updatedEntity of updatedEntites.updated) {
  console.log(`New votes for state: ${updatedEntity.state}`);
}

updatedEntities = await client.getStreamedCalls();
updatedEntities = await client.getStreamedEditorialTurnout();
updatedEntities = await client.getStreamedTotalExpectedVote();
updatedEntities = await client.getStreamedMessages();

Filter requests to only get the county vote data you want.

client.filter({
  states: ['TX', 'KS', 'MO'],
  summary: true,
});

await client.getCountyVotes();

After you've gotten election data from the API, use Drizzle queries to retrieve records from your database.

const states = await client.db.query.state.findMany();

Close the PostgreSQL connection when you're done.

await client.disconnect();

Read more in the client's API docs.

API coverage

Current coverage of ElectionTonight API endpoints. All others are planned by 2024.

Events

endpoint
āœ…event list
āœ…absentee-method
āœ…county-by-elect
āœ…county-by-state
ā­•delegate-district
ā­•delegate-district-type
āœ…election
āœ…election/race
āœ…party-by-office
āœ…party-lookup
ā­•past-county-data
ā­•xtab-setup

Results/streams

endpoint
āœ…county-vote
ā­•delegate-allocation
ā­•delegate-vote
āœ…editorial-turnout
āœ…electoral-vote
āœ…est
āœ…msg
āœ…national-delegate-summary
āœ…total-expected-vote
ā­•xtab

Development

Testing

Setup

Export a DATABASE_URL environment variable or use the built-in ephemeral PostgreSQL testcontainer.

If using testcontainers, you must have a Docker client installed, e.g., Docker Desktop.

Running tests

npm run test

Run specific tests by passing a substring or regular expression to the --grep filter:

npm run test -- --grep 'your-substring'

ā˜‚ļø Code coverage

See coverage report.

1.0.26

9 months ago

1.0.25

9 months ago

1.0.19

11 months ago

1.0.18

11 months ago

1.0.17

11 months ago

1.0.22

10 months ago

1.0.21

10 months ago

1.0.20

10 months ago

1.0.24

9 months ago

1.0.23

9 months ago

1.0.16

11 months ago

1.0.15

11 months ago

1.0.14

1 year ago

1.0.13

1 year ago

1.0.12

1 year ago

1.0.11

1 year ago

1.0.10

1 year ago

1.0.9

1 year ago

1.0.8

1 year ago

1.0.7

1 year ago

1.0.6

1 year ago

1.0.5

1 year ago

1.0.2

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago

1.0.4

1 year ago

1.0.3

1 year ago

0.1.10

1 year ago

0.1.9

1 year ago

0.1.8

1 year ago

0.1.7

1 year ago

0.1.4

1 year ago

0.1.3

1 year ago

0.1.6

1 year ago

0.1.5

1 year ago

0.1.0

1 year ago

0.1.2

1 year ago

0.1.1

1 year ago

0.0.4-alpha.5

2 years ago

0.0.4-alpha.6

2 years ago

0.0.4-alpha.7

2 years ago

0.0.4-alpha.8

2 years ago

0.0.4-alpha.1

2 years ago

0.0.4-alpha.2

2 years ago

0.0.4-alpha.3

2 years ago

0.0.4-alpha.4

2 years ago

0.0.1-alpha.120

3 years ago

0.0.1

3 years ago

0.0.3

3 years ago

0.0.2

3 years ago

0.0.1-alpha.109

3 years ago

0.0.1-alpha.107

3 years ago

0.0.1-alpha.112

3 years ago

0.0.1-alpha.113

3 years ago

0.0.1-alpha.110

3 years ago

0.0.1-alpha.111

3 years ago

0.0.1-alpha.116

3 years ago

0.0.1-alpha.117

3 years ago

0.0.1-alpha.114

3 years ago

0.0.1-alpha.115

3 years ago

0.0.1-alpha.118

3 years ago

0.0.1-alpha.119

3 years ago

0.0.1-alpha.101

3 years ago

0.0.1-alpha.102

3 years ago

0.0.1-alpha.100

3 years ago

0.0.1-alpha.105

3 years ago

0.0.1-alpha.106

3 years ago

0.0.1-alpha.103

3 years ago

0.0.1-alpha.104

3 years ago

0.0.1-alpha.99

3 years ago

0.0.1-alpha.92

3 years ago

0.0.1-alpha.94

3 years ago

0.0.1-alpha.93

3 years ago

0.0.1-alpha.96

3 years ago

0.0.1-alpha.95

3 years ago

0.0.1-alpha.98

3 years ago

0.0.1-alpha.97

3 years ago

0.0.1-alpha.89

3 years ago

0.0.1-alpha.88

3 years ago

0.0.1-alpha.85

3 years ago

0.0.1-alpha.84

3 years ago

0.0.1-alpha.87

3 years ago

0.0.1-alpha.86

3 years ago

0.0.1-alpha.90

3 years ago

0.0.1-alpha.81

3 years ago

0.0.1-alpha.80

3 years ago

0.0.1-alpha.83

3 years ago

0.0.1-alpha.82

3 years ago

0.0.1-alpha.78

3 years ago

0.0.1-alpha.79

3 years ago

0.0.1-alpha.67

3 years ago

0.0.1-alpha.23

3 years ago

0.0.1-alpha.66

3 years ago

0.0.1-alpha.22

3 years ago

0.0.1-alpha.69

3 years ago

0.0.1-alpha.25

3 years ago

0.0.1-alpha.68

3 years ago

0.0.1-alpha.24

3 years ago

0.0.1-alpha.27

3 years ago

0.0.1-alpha.26

3 years ago

0.0.1-alpha.29

3 years ago

0.0.1-alpha.28

3 years ago

0.0.1-alpha.61

3 years ago

0.0.1-alpha.60

3 years ago

0.0.1-alpha.63

3 years ago

0.0.1-alpha.62

3 years ago

0.0.1-alpha.65

3 years ago

0.0.1-alpha.64

3 years ago

0.0.1-alpha.56

3 years ago

0.0.1-alpha.55

3 years ago

0.0.1-alpha.58

3 years ago

0.0.1-alpha.57

3 years ago

0.0.1-alpha.59

3 years ago

0.0.1-alpha.50

3 years ago

0.0.1-alpha.52

3 years ago

0.0.1-alpha.51

3 years ago

0.0.1-alpha.54

3 years ago

0.0.1-alpha.53

3 years ago

0.0.1-alpha.45

3 years ago

0.0.1-alpha.44

3 years ago

0.0.1-alpha.47

3 years ago

0.0.1-alpha.46

3 years ago

0.0.1-alpha.49

3 years ago

0.0.1-alpha.48

3 years ago

0.0.1-alpha.41

3 years ago

0.0.1-alpha.40

3 years ago

0.0.1-alpha.43

3 years ago

0.0.1-alpha.42

3 years ago

0.0.1-alpha.34

3 years ago

0.0.1-alpha.77

3 years ago

0.0.1-alpha.33

3 years ago

0.0.1-alpha.36

3 years ago

0.0.1-alpha.35

3 years ago

0.0.1-alpha.38

3 years ago

0.0.1-alpha.37

3 years ago

0.0.1-alpha.39

3 years ago

0.0.1-alpha.70

3 years ago

0.0.1-alpha.72

3 years ago

0.0.1-alpha.71

3 years ago

0.0.1-alpha.74

3 years ago

0.0.1-alpha.30

3 years ago

0.0.1-alpha.73

3 years ago

0.0.1-alpha.76

3 years ago

0.0.1-alpha.32

3 years ago

0.0.1-alpha.75

3 years ago

0.0.1-alpha.31

3 years ago

0.0.1-alpha.21

3 years ago

0.0.1-alpha.20

3 years ago

0.0.1-alpha.19

3 years ago

0.0.1-alpha.18

3 years ago

0.0.1-alpha.17

3 years ago

0.0.1-alpha.16

3 years ago

0.0.1-alpha.15

3 years ago

0.0.1-alpha.14

3 years ago

0.0.1-alpha.13

3 years ago

0.0.1-alpha.12

3 years ago

0.0.1-alpha.11

3 years ago

0.0.1-alpha.10

3 years ago

0.0.1-alpha.9

3 years ago

0.0.1-alpha.8

3 years ago

0.0.1-alpha.7

3 years ago

0.0.1-alpha.6

3 years ago

0.0.1-alpha.5

3 years ago

0.0.1-alpha.4

3 years ago

0.0.1-alpha.3

3 years ago

0.0.1-alpha.2

3 years ago

0.0.1-alpha.1

3 years ago