/
RegisterNotificationTokenRequest.swift
94 lines (82 loc) · 2.68 KB
/
RegisterNotificationTokenRequest.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
//
// RegisterNotificationTokenRequest.swift
// Multisig
//
// Created by Moaaz on 8/5/20.
// Copyright © 2020 Gnosis Ltd. All rights reserved.
//
import Foundation
import Web3
struct RegisterNotificationTokenRequest: JSONRequest {
let uuid: String
let safes: [String]
let cloudMessagingToken: String
let bundle: String
let version: String
let deviceType: String = "IOS"
let buildNumber: String
let timestamp: String
let signatures: [String]?
var httpMethod: String { return "POST" }
var urlPath: String { return "/api/v1/notifications/devices/" }
typealias ResponseType = Response
init(deviceID: UUID,
safes: [Address],
token: String,
bundle: String,
version: String,
buildNumber: String,
timestamp: String = String(Int(Date().timeIntervalSince1970 * 1_000))) throws {
self.uuid = deviceID.uuidString.lowercased()
self.safes = safes.map { $0.checksummed }
self.cloudMessagingToken = token
self.bundle = bundle
self.version = version
self.buildNumber = buildNumber
self.timestamp = timestamp
let string = [
"gnosis-safe",
self.uuid,
self.safes.reduce("") { $0 + $1 },
self.cloudMessagingToken,
self.bundle,
self.version,
self.deviceType,
self.buildNumber,
self.timestamp
]
.reduce("") { $0 + $1 }
if let signature = try? Signer.sign(string).value {
self.signatures = [signature]
} else {
self.signatures = nil
}
}
struct Response: Decodable {
let uuid: UUID
let safes: [String]
let cloudMessagingToken: String
let bundle: String
let version: String
let deviceType: String
let buildNumber: Int
}
}
extension SafeTransactionService {
@discardableResult
func register(deviceID: UUID,
safes: [Address],
token: String,
bundle: String,
version: String,
buildNumber: String) throws -> RegisterNotificationTokenRequest.Response {
return try execute(
request: try RegisterNotificationTokenRequest(deviceID: deviceID,
safes: safes,
token: token,
bundle: bundle,
version: version,
buildNumber: buildNumber)
)
}
}