Comparing version 0.3.0 to 0.4.0
61
index.js
@@ -7,11 +7,48 @@ let _id = null | ||
function resolvePromises(value) { | ||
_id = value | ||
promises.forEach(({ resolve }) => resolve(_id)) | ||
promises.length = 0 | ||
connection.removeEventListener('icecandidate', onIceCandidate) | ||
} | ||
function rejectPromises() { | ||
promises.forEach(({ reject }) => | ||
reject('This browser is not supported, so biri cannot provide a unique, static ID for this machine.') | ||
) | ||
promises.length = 0 | ||
} | ||
function onIceCandidate({ candidate }) { | ||
if (connection.iceGatheringState == 'complete' && _id == null) { | ||
connection = null | ||
return rejectPromises() | ||
} | ||
if(!candidate) return | ||
// For Chrome | ||
if (candidate.foundation) { | ||
return resolvePromises(candidate.foundation) | ||
} | ||
// For Safari | ||
if (candidate.candidate) { | ||
const matches = /^candidate:(\d+)\s/.exec(candidate.candidate) | ||
if (!matches || matches[1].length < 2) return | ||
return resolvePromises(matches[1]) | ||
} | ||
} | ||
async function startConnection() { | ||
if (connection) return | ||
const peerConnectionConfig = [ | ||
{ sdpSemantics: "unified-plan" }, | ||
{ sdpSemantics: "plan-b" } | ||
] | ||
connection = new RTCPeerConnection() | ||
connection = new RTCPeerConnection(peerConnectionConfig[0]); | ||
// Required for Safari, causes an error on some other browsers. | ||
try { | ||
const stream = document.createElement('canvas').captureStream() | ||
stream.getTracks().forEach((track) => connection.addTrack(track)) | ||
} catch (e) {} | ||
@@ -25,12 +62,2 @@ connection.addEventListener('icecandidate', onIceCandidate); | ||
connection.setLocalDescription(offer) | ||
function onIceCandidate({ candidate }) { | ||
if (!candidate) return | ||
if (candidate.protocol == 'udp') { | ||
_id = candidate.foundation | ||
promises.forEach(resolve => resolve(_id)) | ||
promises.length = 0 | ||
} | ||
} | ||
} | ||
@@ -44,5 +71,5 @@ | ||
const promise = new Promise(resolve => { | ||
const promise = new Promise((resolve, reject) => { | ||
startConnection() | ||
promises.push(resolve) | ||
promises.push({ resolve, reject }) | ||
}) | ||
@@ -49,0 +76,0 @@ |
{ | ||
"name": "biri", | ||
"version": "0.3.0", | ||
"version": "0.4.0", | ||
"description": "A unique, static client ID generator for browser applications", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
@@ -20,3 +20,12 @@ # biri | ||
## Browser support | ||
# Supported | ||
* Google Chrome +80 | ||
* Safari | ||
* Microsoft Edge | ||
# Not supported (yet) | ||
* Firefox | ||
* Opera | ||
* PWA (it won't work offline as it needs to have a network connection) | ||
## Installing | ||
@@ -23,0 +32,0 @@ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
93274
94
77