Skip to content

Commit f818168

Browse files
committed
Empty project structure outline (based on @httptoolkit/httpolyglot)
1 parent 799163e commit f818168

File tree

12 files changed

+220
-1
lines changed

12 files changed

+220
-1
lines changed

.github/workflows/ci.yml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
name: CI
2+
on: [push, pull_request]
3+
jobs:
4+
build:
5+
name: Build & test
6+
runs-on: ubuntu-latest
7+
8+
strategy:
9+
matrix:
10+
node-version: [12.x, 14.x, v16.x, v16.16.0, v18.x, '*']
11+
12+
steps:
13+
- uses: actions/checkout@v2
14+
15+
- uses: actions/setup-node@v2
16+
with:
17+
node-version: ${{ matrix.node-version }}
18+
19+
- run: npm install
20+
- run: npm test

.npmrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
package-lock=false

README.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,5 @@
1-
# read-tls-fingerprint
1+
# Read-TLS-Fingerprint [![Build Status](https://github.com/httptoolkit/read-tls-fingerprint/workflows/CI/badge.svg)](https://github.com/httptoolkit/read-tls-fingerprint/actions) [![Available on NPM](https://img.shields.io/npm/v/read-tls-fingerprint.svg)](https://npmjs.com/package/read-tls-fingerprint)
2+
3+
> _Part of [HTTP Toolkit](https://httptoolkit.tech): powerful tools for building, testing & debugging HTTP(S)_
4+
5+
A pure-JS module to read TLS fingerprints from an incoming socket connection. Using this, you can recognize certain TLS clients - e.g. specific browser, cURL, or even the specific versions of a specific programming language a client is using - regardless of the content of the request they send.

package.json

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
{
2+
"name": "read-tls-fingerprint",
3+
"version": "1.0.0",
4+
"author": "Tim Perry <[email protected]>",
5+
"description": "A pure-JS module to read TLS fingerprints from an incoming socket connection",
6+
"main": "./dist/index.js",
7+
"types": "./dist/index.d.ts",
8+
"files": [
9+
"dist/",
10+
"src/"
11+
],
12+
"scripts": {
13+
"prebuild": "rimraf dist/*",
14+
"build": "tsc",
15+
"prepack": "npm run build",
16+
"pretest": "npm run build",
17+
"test": "mocha -r ts-node/register 'test/**/*.spec.ts'"
18+
},
19+
"engines": {
20+
"node": ">=12.0.0"
21+
},
22+
"keywords": [
23+
"tls",
24+
"fingerprint",
25+
"fingerprinting",
26+
"https"
27+
],
28+
"licenses": [
29+
{
30+
"type": "Apache-2.0",
31+
"url": "http://github.com/httptoolkit/read-tls-fingerprint/raw/main/LICENSE"
32+
}
33+
],
34+
"repository": {
35+
"type": "git",
36+
"url": "http://github.com/httptoolkit/read-tls-fingerprint.git"
37+
},
38+
"dependencies": {
39+
"@types/node": "^16.7.10"
40+
},
41+
"devDependencies": {
42+
"@types/chai": "^4.2.21",
43+
"@types/mocha": "^9.0.0",
44+
"chai": "^4.3.4",
45+
"mocha": "^10.0.0",
46+
"rimraf": "^3.0.2",
47+
"ts-node": "^10.2.1",
48+
"typescript": "^4.8.4"
49+
}
50+
}

src/index.ts

Whitespace-only changes.

test/fixtures/server.crt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIDJzCCAg+gAwIBAgIUfxc7qPwEIlAJQtS+67g2MhKq9zkwDQYJKoZIhvcNAQEL
3+
BQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MCAXDTIxMDgzMDE1MjUxNFoYDzIxMjEw
4+
ODA2MTUyNTE0WjAUMRIwEAYDVQQDDAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEB
5+
AQUAA4IBDwAwggEKAoIBAQC4Cf55DdM7CE40miw2k2B1m+gihcHl+GkEu5ulrX9i
6+
NbgqsWC3FixNMejDk0DdyEi2QGdQNFha7w/jlQ/u4HGJTQBmKsqVFaV03N/dnnCV
7+
3yll7tjDJoA7yxohGSs2ouOhvytM/w2JflJ/bV5OWhsTrbV8V7omPGm83F/3RXer
8+
r76VUvhNbtpwc/QEV+zZ9HWDA9p+bjtsusFb+HD4XIn7lYfBBXQgUfGFJR1VCftQ
9+
7b8VCoMZTGj6+NL1+k+EQvgdlwi2u7BfXYI1q765gUk5XS3/eennvOKi8Jn5kzuh
10+
gQRyhErzYHwKv+KUYvJvOctIjHL6egNUqeVXYB3Q9AphAgMBAAGjbzBtMB0GA1Ud
11+
DgQWBBRWMwFWKMABMs5WSuxEnFoYPwlAUjAfBgNVHSMEGDAWgBRWMwFWKMABMs5W
12+
SuxEnFoYPwlAUjAPBgNVHRMBAf8EBTADAQH/MBoGA1UdEQQTMBGCCWxvY2FsaG9z
13+
dIcEfwAAATANBgkqhkiG9w0BAQsFAAOCAQEAdjlHqfdKUdEdGofuL5CLMOZtMgmU
14+
7BYRuBVkBBRb+aysRf+vb8OvmCHK+j4HzWe5hlsrJkyDhvTWQ6IMxuufEdK9NwOX
15+
8zLut+k7N7LRkJvqC+RX8bbD+2a56n+TJjdvCqsyBFyuYdlxw07s7So2gW818ooK
16+
qTJSAjBcSkrdgZhYOEkG/AWKkelZRw2R9WLQv5wB2b+R7q0wrGtB2b9IXOs6JTaS
17+
HA5dFMDW8YaGiUQLm53eEZeTeZg+l5+izl4mTi4ytV4xa5KDyQTzzTttkLHK4cb3
18+
kVgGmAHsFu5/W1u/1u/WG/JnUW1XeEml7HVRuyA2E+GWCJc2fvTd4A0DaQ==
19+
-----END CERTIFICATE-----

test/fixtures/server.key

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC4Cf55DdM7CE40
3+
miw2k2B1m+gihcHl+GkEu5ulrX9iNbgqsWC3FixNMejDk0DdyEi2QGdQNFha7w/j
4+
lQ/u4HGJTQBmKsqVFaV03N/dnnCV3yll7tjDJoA7yxohGSs2ouOhvytM/w2JflJ/
5+
bV5OWhsTrbV8V7omPGm83F/3RXerr76VUvhNbtpwc/QEV+zZ9HWDA9p+bjtsusFb
6+
+HD4XIn7lYfBBXQgUfGFJR1VCftQ7b8VCoMZTGj6+NL1+k+EQvgdlwi2u7BfXYI1
7+
q765gUk5XS3/eennvOKi8Jn5kzuhgQRyhErzYHwKv+KUYvJvOctIjHL6egNUqeVX
8+
YB3Q9AphAgMBAAECggEAYCeQlizb/Q7U1XTrvsP3dNs1SLw712yXagqfQsvIL0bD
9+
50JvtpjWIqr94xkPnhCjtN0nXWdL9o7K7WwXPAZ2K3dYywh2ebgqj0lLiZ3bUuKa
10+
3ZASHrwB6buu9jYRNuWaKwsXk436w6iFb+BzklpPpVNv6/xl3M5ZrHwzg5z+7mrs
11+
LQ83IgjFe6kVnkLYFPWLrFEsoiS3jOoILiDCUO5k4j0ZNYjRlmPpG7Iq+oPv+0rf
12+
JHiOV1Q9L1SMeubYSZ7NSiKPAqbi93BjJOpbNS2BrSL5YPt5pp8tKhwLj0gB8hux
13+
+XBwpn8GwwUypNy0YdbtYbLs/CbPcg1t5NEvhkrysQKBgQDfnBiQck9Xd8nqvwkb
14+
N0nw5UBXiPoKqHOxfQC5fsYjNdwKEvUj4OiGwAFtUwTSMqyqdmrj1Sy9SUuYfm3w
15+
ehOdQnabVyxYZj5Z1nLrP+wtXdCWv66ezq2S4dRsygs2fuy3uiL+ryVMojlBYj6M
16+
s53ipMN3qjDKt2NmwGWt33DJrQKBgQDSsokjbg7OMDebiWoimViE+eWRJ3YEXAtk
17+
WnDttCcG0qEGVi2gqZh6NjnCpiK3+dC07Sh24wfW6TS9Z9SZeNPrQ3BTnY4e0EDC
18+
hLo4MXeSEeXa+ndlTzpNcw/q63RNlKg7L+FJOV7Q3HaHKZvmC+kw2Y2dI9zYlK+X
19+
RH9ymffCBQKBgHdJHS2JXVwK0hNBX8k+AFra4S0RLFodLMKlLYrG30oPRFe3b0B5
20+
jXG84cYBQJQlZkj1LOZnZRuBCyvJXjqn1OjSeNU7drOdr2tbZCitC//TiR+yF6Qu
21+
Gxg9EoYKblre8Ma+LEbzBhHQhHylvTpv4yzxujiO+MJbfFJnFpbfmJptAoGARxx4
22+
yptvpcmCSx1y0+Cbjq3k/DusSkZileksah2+ekAGluPpHGuBCeZZUkfOOfe3qAjO
23+
+mkfkTo+UZrEl1O/eozVUXNAr0esQ7qWOzb+2y7tPB4CxA+cZt1pxujW5QRCT0+W
24+
oqcZSDbQTkgN1PO6LYGPmTSsafCs3soAlcY/Z50CgYBRhbOo9mq+hNXrKYifJwWZ
25+
dVzvlV1hJZ8ViXCzJIFwkcq9yokUwsppF/K+5c/fKN+6IWAwep7I7035GEAwtLTc
26+
J4oxpxDBYgHAON7OqHuns/xQ1Lvvg6fzAIQzR3NTXoPBSOyT2TbZJLDUf9jQ/TN/
27+
ts7xHGcDnvSUE/8RItnM5w==
28+
-----END PRIVATE KEY-----

test/test-util.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import * as stream from 'stream';
2+
import * as fs from 'fs';
3+
4+
export const testKey = fs.readFileSync(__dirname + '/fixtures/server.key');
5+
export const testCert = fs.readFileSync(__dirname + '/fixtures/server.crt');
6+
7+
export type Deferred<T> = Promise<T> & {
8+
resolve(value: T): void,
9+
reject(e: Error): void
10+
}
11+
12+
export function getDeferred<T>(): Deferred<T> {
13+
let resolveCallback: (value: T) => void;
14+
let rejectCallback: (e: Error) => void;
15+
let result = <Deferred<T>> new Promise((resolve, reject) => {
16+
resolveCallback = resolve;
17+
rejectCallback = reject;
18+
});
19+
result.resolve = resolveCallback!;
20+
result.reject = rejectCallback!;
21+
22+
return result;
23+
}
24+
25+
export async function streamToBuffer(stream: stream.Readable): Promise<Buffer> {
26+
const data: Buffer[] = [];
27+
stream.on('data', (d) => data.push(d));
28+
29+
return new Promise((resolve, reject) => {
30+
stream.on('end', () => resolve(Buffer.concat(data)));
31+
stream.on('error', reject);
32+
});
33+
}

test/test.spec.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
describe("Read-TLS-Fingerprint", () => {
2+
it("runs a test", () => {
3+
// no-op
4+
});
5+
});

test/tsconfig.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"extends": "../tsconfig.json",
3+
"include": [
4+
"../src/**/*.ts",
5+
"../dist/**/*.d.ts",
6+
"./**/*.ts",
7+
"../package.json"
8+
]
9+
}

0 commit comments

Comments
 (0)