@homebridge-eufy-security/eufy-security-client 3.7.2-dev.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.prettierignore/342/200/216 +8 -0
- package/.prettierrc +11 -0
- package/LICENSE +21 -0
- package/README.md +970 -0
- package/build/error.d.ts +138 -0
- package/build/error.js +190 -0
- package/build/error.js.map +1 -0
- package/build/eufysecurity.d.ts +180 -0
- package/build/eufysecurity.js +3148 -0
- package/build/eufysecurity.js.map +1 -0
- package/build/http/api.d.ts +119 -0
- package/build/http/api.js +1877 -0
- package/build/http/api.js.map +1 -0
- package/build/http/cache.d.ts +8 -0
- package/build/http/cache.js +34 -0
- package/build/http/cache.js.map +1 -0
- package/build/http/const.d.ts +8 -0
- package/build/http/const.js +3054 -0
- package/build/http/const.js.map +1 -0
- package/build/http/device.d.ts +490 -0
- package/build/http/device.js +5256 -0
- package/build/http/device.js.map +1 -0
- package/build/http/error.d.ts +73 -0
- package/build/http/error.js +101 -0
- package/build/http/error.js.map +1 -0
- package/build/http/index.d.ts +10 -0
- package/build/http/index.js +30 -0
- package/build/http/index.js.map +1 -0
- package/build/http/interfaces.d.ts +248 -0
- package/build/http/interfaces.js +3 -0
- package/build/http/interfaces.js.map +1 -0
- package/build/http/models.d.ts +608 -0
- package/build/http/models.js +3 -0
- package/build/http/models.js.map +1 -0
- package/build/http/parameter.d.ts +7 -0
- package/build/http/parameter.js +119 -0
- package/build/http/parameter.js.map +1 -0
- package/build/http/station.d.ts +382 -0
- package/build/http/station.js +15735 -0
- package/build/http/station.js.map +1 -0
- package/build/http/types.d.ts +1358 -0
- package/build/http/types.js +10333 -0
- package/build/http/types.js.map +1 -0
- package/build/http/utils.d.ts +89 -0
- package/build/http/utils.js +916 -0
- package/build/http/utils.js.map +1 -0
- package/build/index.d.ts +8 -0
- package/build/index.js +29 -0
- package/build/index.js.map +1 -0
- package/build/interfaces.d.ts +147 -0
- package/build/interfaces.js +7 -0
- package/build/interfaces.js.map +1 -0
- package/build/logging.d.ts +36 -0
- package/build/logging.js +119 -0
- package/build/logging.js.map +1 -0
- package/build/mqtt/interface.d.ts +6 -0
- package/build/mqtt/interface.js +3 -0
- package/build/mqtt/interface.js.map +1 -0
- package/build/mqtt/model.d.ts +24 -0
- package/build/mqtt/model.js +3 -0
- package/build/mqtt/model.js.map +1 -0
- package/build/mqtt/mqtt-eufy.crt +79 -0
- package/build/mqtt/proto/lock.proto +33 -0
- package/build/mqtt/service.d.ts +28 -0
- package/build/mqtt/service.js +196 -0
- package/build/mqtt/service.js.map +1 -0
- package/build/p2p/ble.d.ts +59 -0
- package/build/p2p/ble.js +281 -0
- package/build/p2p/ble.js.map +1 -0
- package/build/p2p/error.d.ts +49 -0
- package/build/p2p/error.js +69 -0
- package/build/p2p/error.js.map +1 -0
- package/build/p2p/index.d.ts +8 -0
- package/build/p2p/index.js +28 -0
- package/build/p2p/index.js.map +1 -0
- package/build/p2p/interfaces.d.ts +423 -0
- package/build/p2p/interfaces.js +3 -0
- package/build/p2p/interfaces.js.map +1 -0
- package/build/p2p/models.d.ts +295 -0
- package/build/p2p/models.js +3 -0
- package/build/p2p/models.js.map +1 -0
- package/build/p2p/session.d.ts +186 -0
- package/build/p2p/session.js +3737 -0
- package/build/p2p/session.js.map +1 -0
- package/build/p2p/talkback.d.ts +8 -0
- package/build/p2p/talkback.js +23 -0
- package/build/p2p/talkback.js.map +1 -0
- package/build/p2p/types.d.ts +1164 -0
- package/build/p2p/types.js +1219 -0
- package/build/p2p/types.js.map +1 -0
- package/build/p2p/utils.d.ts +72 -0
- package/build/p2p/utils.js +865 -0
- package/build/p2p/utils.js.map +1 -0
- package/build/push/client.d.ts +49 -0
- package/build/push/client.js +344 -0
- package/build/push/client.js.map +1 -0
- package/build/push/error.d.ts +73 -0
- package/build/push/error.js +101 -0
- package/build/push/error.js.map +1 -0
- package/build/push/index.d.ts +6 -0
- package/build/push/index.js +26 -0
- package/build/push/index.js.map +1 -0
- package/build/push/interfaces.d.ts +19 -0
- package/build/push/interfaces.js +3 -0
- package/build/push/interfaces.js.map +1 -0
- package/build/push/models.d.ts +328 -0
- package/build/push/models.js +38 -0
- package/build/push/models.js.map +1 -0
- package/build/push/parser.d.ts +25 -0
- package/build/push/parser.js +231 -0
- package/build/push/parser.js.map +1 -0
- package/build/push/proto/checkin.proto +266 -0
- package/build/push/proto/mcs.proto +328 -0
- package/build/push/service.d.ts +46 -0
- package/build/push/service.js +965 -0
- package/build/push/service.js.map +1 -0
- package/build/push/types.d.ts +220 -0
- package/build/push/types.js +244 -0
- package/build/push/types.js.map +1 -0
- package/build/push/utils.d.ts +7 -0
- package/build/push/utils.js +116 -0
- package/build/push/utils.js.map +1 -0
- package/build/utils.d.ts +115 -0
- package/build/utils.js +438 -0
- package/build/utils.js.map +1 -0
- package/eslint.config.mts +68 -0
- package/jest.config.js +14 -0
- package/package.json +85 -0
- package/scripts/cut_release.sh +31 -0
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.PushClientParser = void 0;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const protobufjs_1 = require("protobufjs");
|
|
39
|
+
const tiny_typed_emitter_1 = require("tiny-typed-emitter");
|
|
40
|
+
const models_1 = require("./models");
|
|
41
|
+
const error_1 = require("../error");
|
|
42
|
+
const error_2 = require("./error");
|
|
43
|
+
const logging_1 = require("../logging");
|
|
44
|
+
class PushClientParser extends tiny_typed_emitter_1.TypedEmitter {
|
|
45
|
+
static proto = null;
|
|
46
|
+
state = models_1.ProcessingState.MCS_VERSION_TAG_AND_SIZE;
|
|
47
|
+
data = Buffer.alloc(0);
|
|
48
|
+
isWaitingForData = true;
|
|
49
|
+
sizePacketSoFar = 0;
|
|
50
|
+
messageSize = 0;
|
|
51
|
+
messageTag = 0;
|
|
52
|
+
handshakeComplete = false;
|
|
53
|
+
constructor() {
|
|
54
|
+
super();
|
|
55
|
+
}
|
|
56
|
+
resetState() {
|
|
57
|
+
this.state = models_1.ProcessingState.MCS_VERSION_TAG_AND_SIZE;
|
|
58
|
+
this.data = Buffer.alloc(0);
|
|
59
|
+
this.isWaitingForData = true;
|
|
60
|
+
this.sizePacketSoFar = 0;
|
|
61
|
+
this.messageSize = 0;
|
|
62
|
+
this.messageTag = 0;
|
|
63
|
+
this.handshakeComplete = false;
|
|
64
|
+
this.removeAllListeners();
|
|
65
|
+
}
|
|
66
|
+
static async init() {
|
|
67
|
+
this.proto = await (0, protobufjs_1.load)(path.join(__dirname, "./proto/mcs.proto"));
|
|
68
|
+
return new PushClientParser();
|
|
69
|
+
}
|
|
70
|
+
handleData(newData) {
|
|
71
|
+
this.data = Buffer.concat([this.data, newData]);
|
|
72
|
+
if (this.isWaitingForData) {
|
|
73
|
+
this.isWaitingForData = false;
|
|
74
|
+
this.waitForData();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
waitForData() {
|
|
78
|
+
const minBytesNeeded = this.getMinBytesNeeded();
|
|
79
|
+
// If we don't have all bytes yet, wait some more
|
|
80
|
+
if (this.data.length < minBytesNeeded) {
|
|
81
|
+
this.isWaitingForData = true;
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
this.handleFullMessage();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
handleFullMessage() {
|
|
89
|
+
switch (this.state) {
|
|
90
|
+
case models_1.ProcessingState.MCS_VERSION_TAG_AND_SIZE:
|
|
91
|
+
this.onGotVersion();
|
|
92
|
+
break;
|
|
93
|
+
case models_1.ProcessingState.MCS_TAG_AND_SIZE:
|
|
94
|
+
this.onGotMessageTag();
|
|
95
|
+
break;
|
|
96
|
+
case models_1.ProcessingState.MCS_SIZE:
|
|
97
|
+
this.onGotMessageSize();
|
|
98
|
+
break;
|
|
99
|
+
case models_1.ProcessingState.MCS_PROTO_BYTES:
|
|
100
|
+
this.onGotMessageBytes();
|
|
101
|
+
break;
|
|
102
|
+
default:
|
|
103
|
+
logging_1.rootPushLogger.warn("Push Parser - Unknown state", { state: this.state });
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
onGotVersion() {
|
|
108
|
+
const version = this.data.readInt8(0);
|
|
109
|
+
this.data = this.data.subarray(1);
|
|
110
|
+
if (version < 41 && version !== 38) {
|
|
111
|
+
throw new error_2.MCSProtocolVersionError("Got wrong protocol version", { context: { version: version } });
|
|
112
|
+
}
|
|
113
|
+
// Process the LoginResponse message tag.
|
|
114
|
+
this.onGotMessageTag();
|
|
115
|
+
}
|
|
116
|
+
onGotMessageTag() {
|
|
117
|
+
this.messageTag = this.data.readInt8(0);
|
|
118
|
+
this.data = this.data.subarray(1);
|
|
119
|
+
this.onGotMessageSize();
|
|
120
|
+
}
|
|
121
|
+
onGotMessageSize() {
|
|
122
|
+
let incompleteSizePacket = false;
|
|
123
|
+
const reader = new protobufjs_1.BufferReader(this.data);
|
|
124
|
+
try {
|
|
125
|
+
this.messageSize = reader.int32();
|
|
126
|
+
}
|
|
127
|
+
catch (err) {
|
|
128
|
+
const error = (0, error_1.ensureError)(err);
|
|
129
|
+
if (error instanceof Error && error.message.startsWith("index out of range:")) {
|
|
130
|
+
incompleteSizePacket = true;
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
throw error;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
if (incompleteSizePacket) {
|
|
137
|
+
this.sizePacketSoFar = reader.pos;
|
|
138
|
+
this.state = models_1.ProcessingState.MCS_SIZE;
|
|
139
|
+
this.waitForData();
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
this.data = this.data.subarray(reader.pos);
|
|
143
|
+
this.sizePacketSoFar = 0;
|
|
144
|
+
if (this.messageSize > 0) {
|
|
145
|
+
this.state = models_1.ProcessingState.MCS_PROTO_BYTES;
|
|
146
|
+
this.waitForData();
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
this.onGotMessageBytes();
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
onGotMessageBytes() {
|
|
153
|
+
const protobuf = this.buildProtobufFromTag(this.messageTag);
|
|
154
|
+
if (this.messageSize === 0) {
|
|
155
|
+
this.emit("message", { tag: this.messageTag, object: {} });
|
|
156
|
+
this.getNextMessage();
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
if (this.data.length < this.messageSize) {
|
|
160
|
+
this.state = models_1.ProcessingState.MCS_PROTO_BYTES;
|
|
161
|
+
this.waitForData();
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
const buffer = this.data.subarray(0, this.messageSize);
|
|
165
|
+
this.data = this.data.subarray(this.messageSize);
|
|
166
|
+
const message = protobuf.decode(buffer);
|
|
167
|
+
const object = protobuf.toObject(message, {
|
|
168
|
+
longs: String,
|
|
169
|
+
enums: String,
|
|
170
|
+
bytes: Buffer,
|
|
171
|
+
});
|
|
172
|
+
this.emit("message", { tag: this.messageTag, object: object });
|
|
173
|
+
if (this.messageTag === models_1.MessageTag.LoginResponse) {
|
|
174
|
+
if (this.handshakeComplete) {
|
|
175
|
+
logging_1.rootPushLogger.error("Push Parser - Unexpected login response!");
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
this.handshakeComplete = true;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
this.getNextMessage();
|
|
182
|
+
}
|
|
183
|
+
getNextMessage() {
|
|
184
|
+
this.messageTag = 0;
|
|
185
|
+
this.messageSize = 0;
|
|
186
|
+
this.state = models_1.ProcessingState.MCS_TAG_AND_SIZE;
|
|
187
|
+
this.waitForData();
|
|
188
|
+
}
|
|
189
|
+
getMinBytesNeeded() {
|
|
190
|
+
switch (this.state) {
|
|
191
|
+
case models_1.ProcessingState.MCS_VERSION_TAG_AND_SIZE:
|
|
192
|
+
return 1 + 1 + 1;
|
|
193
|
+
case models_1.ProcessingState.MCS_TAG_AND_SIZE:
|
|
194
|
+
return 1 + 1;
|
|
195
|
+
case models_1.ProcessingState.MCS_SIZE:
|
|
196
|
+
return this.sizePacketSoFar + 1;
|
|
197
|
+
case models_1.ProcessingState.MCS_PROTO_BYTES:
|
|
198
|
+
return this.messageSize;
|
|
199
|
+
default:
|
|
200
|
+
throw new error_2.MCSProtocolProcessingStateError("Unknown protocol processing state", {
|
|
201
|
+
context: { state: this.state },
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
buildProtobufFromTag(messageTag) {
|
|
206
|
+
switch (messageTag) {
|
|
207
|
+
case models_1.MessageTag.HeartbeatPing:
|
|
208
|
+
return PushClientParser.proto.lookupType("mcs_proto.HeartbeatPing");
|
|
209
|
+
case models_1.MessageTag.HeartbeatAck:
|
|
210
|
+
return PushClientParser.proto.lookupType("mcs_proto.HeartbeatAck");
|
|
211
|
+
case models_1.MessageTag.LoginRequest:
|
|
212
|
+
return PushClientParser.proto.lookupType("mcs_proto.LoginRequest");
|
|
213
|
+
case models_1.MessageTag.LoginResponse:
|
|
214
|
+
return PushClientParser.proto.lookupType("mcs_proto.LoginResponse");
|
|
215
|
+
case models_1.MessageTag.Close:
|
|
216
|
+
return PushClientParser.proto.lookupType("mcs_proto.Close");
|
|
217
|
+
case models_1.MessageTag.IqStanza:
|
|
218
|
+
return PushClientParser.proto.lookupType("mcs_proto.IqStanza");
|
|
219
|
+
case models_1.MessageTag.DataMessageStanza:
|
|
220
|
+
return PushClientParser.proto.lookupType("mcs_proto.DataMessageStanza");
|
|
221
|
+
case models_1.MessageTag.StreamErrorStanza:
|
|
222
|
+
return PushClientParser.proto.lookupType("mcs_proto.StreamErrorStanza");
|
|
223
|
+
default:
|
|
224
|
+
throw new error_2.MCSProtocolMessageTagError("Unknown protocol message tag", {
|
|
225
|
+
context: { messageTag: this.messageTag },
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
exports.PushClientParser = PushClientParser;
|
|
231
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/push/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
// Sample data, if provided, is fished from a Nexus 7 (2013) / flo running Android 5.0
|
|
2
|
+
message CheckinRequest {
|
|
3
|
+
// unused
|
|
4
|
+
optional string imei = 1;
|
|
5
|
+
|
|
6
|
+
// Gservices["android_id"] or 0 on first-checkin
|
|
7
|
+
optional int64 androidId = 2;
|
|
8
|
+
|
|
9
|
+
// Gservices["digest"] or ""
|
|
10
|
+
optional string digest = 3;
|
|
11
|
+
|
|
12
|
+
required Checkin checkin = 4;
|
|
13
|
+
message Checkin {
|
|
14
|
+
// empty Build on pre-checkin
|
|
15
|
+
required Build build = 1;
|
|
16
|
+
message Build {
|
|
17
|
+
// Build.FINGERPRINT
|
|
18
|
+
// eg. google/razor/flo:5.0.1/LRX22C/1602158:user/release-keys
|
|
19
|
+
optional string fingerprint = 1;
|
|
20
|
+
|
|
21
|
+
// Build.HARDWARE
|
|
22
|
+
// eg. flo
|
|
23
|
+
optional string hardware = 2;
|
|
24
|
+
|
|
25
|
+
// Build.BRAND
|
|
26
|
+
// eg. google
|
|
27
|
+
optional string brand = 3;
|
|
28
|
+
|
|
29
|
+
// Build.getRadioVersion()
|
|
30
|
+
optional string radio = 4;
|
|
31
|
+
|
|
32
|
+
// Build.BOOTLOADER
|
|
33
|
+
// eg. FLO-04.04
|
|
34
|
+
optional string bootloader = 5;
|
|
35
|
+
|
|
36
|
+
// GoogleSettingsContract.Partner["client_id"]
|
|
37
|
+
// eg. android-google
|
|
38
|
+
optional string clientId = 6;
|
|
39
|
+
|
|
40
|
+
// Build.TIME / 1000L
|
|
41
|
+
// eg. 1416533192
|
|
42
|
+
optional int64 time = 7;
|
|
43
|
+
|
|
44
|
+
// PackageInfo.versionCode
|
|
45
|
+
// eg. 6188736
|
|
46
|
+
optional int32 packageVersionCode = 8;
|
|
47
|
+
|
|
48
|
+
// Build.DEVICE
|
|
49
|
+
// eg. flo
|
|
50
|
+
optional string device = 9;
|
|
51
|
+
|
|
52
|
+
// Build.VERSION.SDK_INT
|
|
53
|
+
// eg. 21
|
|
54
|
+
optional int32 sdkVersion = 10;
|
|
55
|
+
|
|
56
|
+
// Build.MODEL
|
|
57
|
+
// eg. Nexus 7
|
|
58
|
+
optional string model = 11;
|
|
59
|
+
|
|
60
|
+
// Build.MANUFACTURER
|
|
61
|
+
// eg. asus
|
|
62
|
+
optional string manufacturer = 12;
|
|
63
|
+
|
|
64
|
+
// Build.PRODUCT
|
|
65
|
+
// eg. razor
|
|
66
|
+
optional string product = 13;
|
|
67
|
+
|
|
68
|
+
// fileExists("/system/recovery-from-boot.p")
|
|
69
|
+
// eg. false
|
|
70
|
+
optional bool otaInstalled = 14;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// last checkin ms or 0 if first checkin
|
|
74
|
+
// eg. 0
|
|
75
|
+
optional int64 lastCheckinMs = 2;
|
|
76
|
+
|
|
77
|
+
// eg. ("event_log_start",~,1424612602652) on first checkin
|
|
78
|
+
repeated Event event = 3;
|
|
79
|
+
message Event {
|
|
80
|
+
optional string tag = 1;
|
|
81
|
+
optional string value = 2;
|
|
82
|
+
optional int64 timeMs = 3;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// unknown, n/a on first checkin
|
|
86
|
+
repeated Statistic stat = 4;
|
|
87
|
+
message Statistic {
|
|
88
|
+
required string tag = 1;
|
|
89
|
+
optional int32 count = 2;
|
|
90
|
+
optional float sum = 3;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// unused
|
|
94
|
+
repeated string requestedGroup = 5;
|
|
95
|
+
|
|
96
|
+
// TelephonyManager.getNetworkOperator != null|empty
|
|
97
|
+
optional string cellOperator = 6;
|
|
98
|
+
|
|
99
|
+
// TelephonyManager.getSimOperator != null|empty
|
|
100
|
+
optional string simOperator = 7;
|
|
101
|
+
|
|
102
|
+
// "WIFI::" | ("mobile" | "notmobile" | "unknown") + "-" + ("roaming" | "notroaming" | "unknown")
|
|
103
|
+
optional string roaming = 8;
|
|
104
|
+
|
|
105
|
+
// UserHandle.myUserId
|
|
106
|
+
// eg. 0
|
|
107
|
+
optional int32 userNumber = 9;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// unused
|
|
111
|
+
optional string desiredBuild = 5;
|
|
112
|
+
|
|
113
|
+
// Locale.toString
|
|
114
|
+
optional string locale = 6;
|
|
115
|
+
|
|
116
|
+
// GoogleSettingsContract.Partner["logging_id2"] (choosen randomly on first checkin)
|
|
117
|
+
// eg. 12561488293572742346
|
|
118
|
+
optional int64 loggingId = 7;
|
|
119
|
+
|
|
120
|
+
// unused
|
|
121
|
+
optional string marketCheckin = 8;
|
|
122
|
+
|
|
123
|
+
// NetworkInfo.getExtraInfo, WifiInfo.getMacAddress (12 hex-digits)
|
|
124
|
+
// eg. d850e6abcdef
|
|
125
|
+
repeated string macAddress = 9;
|
|
126
|
+
|
|
127
|
+
// TelephonyManager.getDeviceId (14 hex-digits), not set on tablets
|
|
128
|
+
optional string meid = 10;
|
|
129
|
+
|
|
130
|
+
// "[<email>]" followed by "<authToken>", empty string on first checkin
|
|
131
|
+
repeated string accountCookie = 11;
|
|
132
|
+
|
|
133
|
+
// TimeZone.getId
|
|
134
|
+
// eg. GMT
|
|
135
|
+
optional string timeZone = 12;
|
|
136
|
+
|
|
137
|
+
// security token as given on first checkin, not set on first checkin
|
|
138
|
+
optional fixed64 securityToken = 13;
|
|
139
|
+
|
|
140
|
+
// use 3
|
|
141
|
+
optional int32 version = 14;
|
|
142
|
+
|
|
143
|
+
// SHA-1 of each in /system/etc/security/otacerts.zip or "--IOException--" or "--no-output--"
|
|
144
|
+
// eg. dKXTm1QH9QShGQwBM/4rg6/lCNQ=
|
|
145
|
+
repeated string otaCert = 15;
|
|
146
|
+
|
|
147
|
+
// Build.SERIAL != "unknown"
|
|
148
|
+
// eg. 07d90b18
|
|
149
|
+
optional string serial = 16;
|
|
150
|
+
|
|
151
|
+
// TelephonyManager.getDeviceId (8 hex-digits), not set on tablets
|
|
152
|
+
optional string esn = 17;
|
|
153
|
+
|
|
154
|
+
optional DeviceConfig deviceConfiguration = 18;
|
|
155
|
+
message DeviceConfig {
|
|
156
|
+
// ConfigurationInfo.reqTouchScreen
|
|
157
|
+
// eg. 3
|
|
158
|
+
optional int32 touchScreen = 1;
|
|
159
|
+
|
|
160
|
+
// ConfigurationInfo.reqKeyboardType
|
|
161
|
+
// eg. 1
|
|
162
|
+
optional int32 keyboardType = 2;
|
|
163
|
+
|
|
164
|
+
// ConfigurationInfo.reqNavigation
|
|
165
|
+
// eg. 1
|
|
166
|
+
optional int32 navigation = 3;
|
|
167
|
+
// ConfigurationInfo.screenLayout
|
|
168
|
+
// eg. 3
|
|
169
|
+
optional int32 screenLayout = 4;
|
|
170
|
+
|
|
171
|
+
// ConfigurationInfo.reqInputFeatures & ConfigurationInfo.INPUT_FEATURE_HARD_KEYBOARD
|
|
172
|
+
// eg. 0
|
|
173
|
+
optional bool hasHardKeyboard = 5;
|
|
174
|
+
|
|
175
|
+
// ConfigurationInfo.reqInputFeatures & ConfigurationInfo.INPUT_FEATURE_FIVE_WAY_NAV
|
|
176
|
+
// eg. 0
|
|
177
|
+
optional bool hasFiveWayNavigation = 6;
|
|
178
|
+
|
|
179
|
+
// DisplayMetrics.densityDpi
|
|
180
|
+
// eg. 320
|
|
181
|
+
optional int32 densityDpi = 7;
|
|
182
|
+
|
|
183
|
+
// ConfigurationInfo.reqGlEsVersion
|
|
184
|
+
// eg. 196608
|
|
185
|
+
optional int32 glEsVersion = 8;
|
|
186
|
+
|
|
187
|
+
// PackageManager.getSystemSharedLibraryNames
|
|
188
|
+
// eg. "android.test.runner", "com.android.future.usb.accessory", "com.android.location.provider",
|
|
189
|
+
// "com.android.media.remotedisplay", "com.android.mediadrm.signer", "com.google.android.maps",
|
|
190
|
+
// "com.google.android.media.effects", "com.google.widevine.software.drm", "javax.obex"
|
|
191
|
+
repeated string sharedLibrary = 9;
|
|
192
|
+
|
|
193
|
+
// PackageManager.getSystemAvailableFeatures
|
|
194
|
+
// eg. android.hardware.[...]
|
|
195
|
+
repeated string availableFeature = 10;
|
|
196
|
+
|
|
197
|
+
// Build.CPU_ABI and Build.CPU_ABI2 != "unknown"
|
|
198
|
+
// eg. "armeabi-v7a", "armeabi"
|
|
199
|
+
repeated string nativePlatform = 11;
|
|
200
|
+
|
|
201
|
+
// DisplayMetrics.widthPixels
|
|
202
|
+
// eg. 1200
|
|
203
|
+
optional int32 widthPixels = 12;
|
|
204
|
+
|
|
205
|
+
// DisplayMetrics.heightPixels
|
|
206
|
+
// eg. 1824
|
|
207
|
+
optional int32 heightPixels = 13;
|
|
208
|
+
|
|
209
|
+
// Context.getAssets.getLocales
|
|
210
|
+
// eg. [...], "en-US", [...]
|
|
211
|
+
repeated string locale = 14;
|
|
212
|
+
|
|
213
|
+
// GLES10.glGetString(GLES10.GL_EXTENSIONS)
|
|
214
|
+
// eg. "GL_AMD_compressed_ATC_texture", [...]
|
|
215
|
+
repeated string glExtension = 15;
|
|
216
|
+
|
|
217
|
+
// unused
|
|
218
|
+
optional int32 deviceClass = 16;
|
|
219
|
+
// unused
|
|
220
|
+
optional int32 maxApkDownloadSizeMb = 17;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// "ethernet" or "wifi"
|
|
224
|
+
repeated string macAddressType = 19;
|
|
225
|
+
|
|
226
|
+
// unknown, use 0 on pre- and first-checkin, and 1 for later checkins
|
|
227
|
+
// also present on pre-checkin
|
|
228
|
+
required int32 fragment = 20;
|
|
229
|
+
|
|
230
|
+
// unknown
|
|
231
|
+
optional string userName = 21;
|
|
232
|
+
|
|
233
|
+
// UserManager.getUserSerialNumber
|
|
234
|
+
// eg. 0
|
|
235
|
+
optional int32 userSerialNumber = 22;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
message CheckinResponse {
|
|
239
|
+
optional bool statsOk = 1;
|
|
240
|
+
repeated Intent intent = 2;
|
|
241
|
+
message Intent {
|
|
242
|
+
optional string action = 1;
|
|
243
|
+
optional string dataUri = 2;
|
|
244
|
+
optional string mimeType = 3;
|
|
245
|
+
optional string javaClass = 4;
|
|
246
|
+
repeated Extra extra = 5;
|
|
247
|
+
message Extra {
|
|
248
|
+
optional string name = 6;
|
|
249
|
+
optional string value = 7;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
optional int64 timeMs = 3;
|
|
253
|
+
optional string digest = 4;
|
|
254
|
+
repeated GservicesSetting setting = 5;
|
|
255
|
+
message GservicesSetting {
|
|
256
|
+
optional bytes name = 1;
|
|
257
|
+
optional bytes value = 2;
|
|
258
|
+
}
|
|
259
|
+
optional bool marketOk = 6;
|
|
260
|
+
optional fixed64 androidId = 7;
|
|
261
|
+
optional fixed64 securityToken = 8;
|
|
262
|
+
optional bool settingsDiff = 9;
|
|
263
|
+
repeated string deleteSetting = 10;
|
|
264
|
+
optional string versionInfo = 11;
|
|
265
|
+
optional string deviceDataVersionInfo = 12;
|
|
266
|
+
}
|