UNPKG

ring-client-api

Version:

Unofficial API for Ring doorbells, cameras, security alarm system and smart lighting

73 lines (72 loc) 2.55 kB
/* eslint-disable no-console */ import { RingApi } from "./api.js"; import { acquireRefreshToken } from "./refresh-token.js"; import { mapAsync } from "./util.js"; const sensitiveFields = [ 'id', 'device_id', 'latitude', 'longitude', 'address', 'email', 'time_zone', 'location_id', 'serialNumber', 'catalogId', 'adapterZid', 'fingerprint', 'owner', 'ssid', 'ap_address', 'codes', 'groupId', 'group', 'groupMembers', ]; function stripSensitiveFields(input) { if (typeof input === 'object') { if (Array.isArray(input)) { input.forEach((value) => stripSensitiveFields(value)); return; } for (const key in input) { if (sensitiveFields.includes(key) || key.endsWith('_id')) { delete input[key]; } else { const data = input[key]; if (key.length === 36) { input[key.slice(0, 13) + '-uuid'] = data; delete input[key]; } if (typeof data === 'string' && data.length === 36) { input[key] = data.slice(0, 13) + '-uuid'; } stripSensitiveFields(data); } } } } export async function logDeviceData() { console.log('This CLI will log data from you Ring Account to help debug issues and discovering new device types.'); console.log('The logged data is anonymized and should not compromise your account in any way.'); const refreshToken = await acquireRefreshToken(), ringApi = new RingApi({ refreshToken }); console.log('Successfully logged in. Fetching devices...'); const locations = await ringApi.getLocations(), amazonKeyLocks = await ringApi.fetchAmazonKeyLocks(), locationsWithDevices = await mapAsync(locations, async (location) => { const devices = await location.getDevices(); return { name: location.name, cameras: location.cameras.map((camera) => camera.data), chimes: location.chimes.map((chime) => chime.data), intercoms: location.intercoms.map((intercom) => intercom.data), devices: devices.map((device) => device.data), }; }), results = { locations: locationsWithDevices, amazonKeyLocks, }; stripSensitiveFields(results); console.log('\nPlease copy and paste everything AFTER THIS LINE:\n\n'); console.log(JSON.stringify(results)); process.exit(0); }