on master help sign in
Simplify code and improve type safety: replace manual JSON with JsonSerializer, type EventPayload, remove Identity from Connecting
commit3dd6eed9f4fbcca96ccc0ebc517678198ad4430c authoriko <mail@iko.soy> dateFri 10 Apr 2026, 09:27 (6 months ago) parentb86f18a
27 files changed+69−98
client/ApiClient.fs+12−12 client/App.fs+45−52 client/bin/Debug/net10.0-ios/iossimulator-arm64/Skrepka.app/Skrepka.dll client/bin/Debug/net10.0-ios/iossimulator-arm64/Skrepka.app/Skrepka.pdb client/bin/Debug/net10.0-ios/iossimulator-arm64/Skrepka.app/_CodeSignature/CodeResources+4−4 client/bin/Debug/net10.0-ios/iossimulator-arm64/Skrepka.dll client/bin/Debug/net10.0-ios/iossimulator-arm64/Skrepka.pdb client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.app/Contents/MonoBundle/Skrepka.dll client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.app/Contents/MonoBundle/Skrepka.pdb client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.app/Contents/_CodeSignature/CodeResources+2−2 client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.dll client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.pdb client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.AssemblyInfo.fs+1−1 client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.AssemblyInfoInputs.cache+1−1 client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.dll client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.fsproj.FileListAbsolute.txt−22 client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.pdb client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.sourcelink.json+1−1 client/obj/Debug/net10.0-ios/iossimulator-arm64/ref/Skrepka.dll client/obj/Debug/net10.0-ios/iossimulator-arm64/refint/Skrepka.dll client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.AssemblyInfo.fs+1−1 client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.AssemblyInfoInputs.cache+1−1 client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.dll client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.pdb client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.sourcelink.json+1−1 client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/ref/Skrepka.dll client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/refint/Skrepka.dll
client/ApiClient.fs+12−12
@@ -8,7 +8,8 @@ open System.Threading.Tasks
88
99module ApiClient =
1010
11− type PollEvent = { Id: string; Payload: JsonElement }
11+ type EventPayload = { EncryptedBlob: string; Timestamp: int64 }
12+ type PollEvent = { Id: string; Payload: EventPayload }
1213
1314 type AuthResult = { Token: string; ExpiresAt: int64 }
1415 type SendResult = { Status: string; MessageId: string }
@@ -63,7 +64,7 @@ module ApiClient =
6364
6465 let requestChallenge (serverUrl: string) (pubkeyHex: string) =
6566 async {
66− let body = $"""{{ "pubkey": "{pubkeyHex}" }}"""
67+ let body = JsonSerializer.Serialize({| pubkey = pubkeyHex |})
6768 let! doc = postJson $"{serverUrl}/auth/challenge" body None
6869 let root = expectObject doc "/auth/challenge"
6970 return root.GetProperty("challenge").GetString()
@@ -71,8 +72,7 @@ module ApiClient =
7172
7273 let verify (serverUrl: string) (pubkeyHex: string) (challenge: string) (signatureHex: string) =
7374 async {
74− let body =
75− $"""{{ "pubkey": "{pubkeyHex}", "challenge": "{challenge}", "signature": "{signatureHex}" }}"""
75+ let body = JsonSerializer.Serialize({| pubkey = pubkeyHex; challenge = challenge; signature = signatureHex |})
7676
7777 let! doc = postJson $"{serverUrl}/auth/verify" body None
7878 let root = expectObject doc "/auth/verify"
@@ -83,8 +83,7 @@ module ApiClient =
8383
8484 let sendMessage (serverUrl: string) (token: string) (toHex: string) (blobHex: string) (timestamp: int64) =
8585 async {
86− let body =
87− $"""{{ "to": "{toHex}", "encryptedBlob": "{blobHex}", "timestamp": {timestamp} }}"""
86+ let body = JsonSerializer.Serialize({| ``to`` = toHex; encryptedBlob = blobHex; timestamp = timestamp |})
8887
8988 let! doc = postJson $"{serverUrl}/messages" body (Some token)
9089 let root = expectObject doc "/messages"
@@ -101,7 +100,7 @@ module ApiClient =
101100 let poll (serverUrl: string) (token: string) (cursor: uint64) =
102101 async {
103102 let request = new HttpRequestMessage(HttpMethod.Post, $"{serverUrl}/poll")
104− request.Content <- new StringContent($"""{{"cursor":{cursor},"timeout":30000}}""", Encoding.UTF8, "application/json")
103+ request.Content <- new StringContent(JsonSerializer.Serialize({| cursor = cursor; timeout = 30000 |}), Encoding.UTF8, "application/json")
105104 request.Headers.Add("Authorization", $"Bearer {token}")
106105
107106 let! response = pollClient.SendAsync(request) |> awaitTask
@@ -116,18 +115,19 @@ module ApiClient =
116115 [ for e in events.EnumerateArray() do
117116 if e.ValueKind = JsonValueKind.Object
118117 && e.GetProperty("eventType").GetString() = "message" then
118+ let p = e.GetProperty("payload")
119+ let ts = p.GetProperty("timestamp")
119120 yield
120121 { Id = e.GetProperty("id").GetString()
121− Payload = e.GetProperty("payload") } ]
122+ Payload =
123+ { EncryptedBlob = p.GetProperty("encryptedBlob").GetString()
124+ Timestamp = if ts.ValueKind = JsonValueKind.String then Int64.Parse(ts.GetString()) else ts.GetInt64() } } ]
122125
123126 return { Events = events; Cursor = cursor }
124127 }
125128
126129 let ackMessages (serverUrl: string) (token: string) (messageIds: string list) =
127130 async {
128− let idsJson =
129− messageIds |> List.map (fun id -> $"\"{id}\"") |> String.concat ", "
130−
131− let body = $"""{{ "messageIds": [{idsJson}] }}"""
131+ let body = JsonSerializer.Serialize({| messageIds = messageIds |})
132132 do! postJson $"{serverUrl}/messages/ack" body (Some token) |> Async.Ignore
133133 }
client/App.fs+45−52
@@ -40,7 +40,7 @@ module App =
4040
4141 type ConnState =
4242 | Offline
43− | Connecting of Identity
43+ | Connecting
4444 | Online of Session
4545
4646 type PollResultData =
@@ -178,12 +178,12 @@ module App =
178178 | DoConnect ->
179179 match model.Identity with
180180 | Some id ->
181− { model with Conn = Connecting id }, [ CmdConnect(model.ServerUrl, id) ]
181+ { model with Conn = Connecting }, [ CmdConnect(model.ServerUrl, id) ]
182182 | None -> { model with Error = Some "No identity generated" }, []
183183
184184 | AuthOk token ->
185− match model.Conn with
186− | Connecting id ->
185+ match model.Conn, model.Identity with
186+ | Connecting, Some id ->
187187 let session = { Url = model.ServerUrl; Token = token; Identity = id }
188188 { model with Conn = Online session; Page = Conversations; Error = None },
189189 [ CmdPoll(session, model.PollCursor) ]
@@ -252,7 +252,7 @@ module App =
252252
253253 | DoSaveContact ->
254254 if model.NewPubkey <> "" && model.NewNickname <> "" then
255− let contact =
255+ let contact: Contact =
256256 { Pubkey = model.NewPubkey
257257 Nickname = model.NewNickname }
258258
@@ -281,38 +281,36 @@ module App =
281281
282282 | DismissError -> { model with Error = None }, []
283283
284− | StateLoaded { Identity = identityOpt; Data = dataOpt } ->
285− match identityOpt with
286− | None -> model, []
287− | Some identity ->
288− let model' = { model with Identity = Some identity; Conn = Connecting identity }
284+ | StateLoaded { Identity = None } -> model, []
285+ | StateLoaded { Identity = Some identity; Data = dataOpt } ->
286+ let model' = { model with Identity = Some identity; Conn = Connecting }
289287
290− let model' =
291− match dataOpt with
292− | Some data ->
293− let messages =
294− data.Messages
295− |> Seq.map (fun (KeyValue(pk, dtos)) ->
296− pk,
297− dtos
298− |> Array.toList
299− |> List.map (fun m ->
300− { Id = m.Id
301− Body = m.Body
302− Timestamp = DateTimeOffset.FromUnixTimeSeconds m.TimestampUnix
303− IsOutgoing = m.IsOutgoing }))
304− |> Map.ofSeq
305−
306− { model' with
307− Contacts = data.Contacts |> Array.toList
308− Messages = messages
309− ServerUrl = if data.ServerUrl <> "" then data.ServerUrl else model.ServerUrl
310− PollCursor = data.PollCursor
311− Page = Conversations }
312−
313− | None -> { model' with Page = Settings }
314−
315− model', [ CmdConnect(model'.ServerUrl, identity) ]
288+ let model' =
289+ match dataOpt with
290+ | Some data ->
291+ let messages =
292+ data.Messages
293+ |> Seq.map (fun (KeyValue(pk, dtos)) ->
294+ pk,
295+ dtos
296+ |> Array.toList
297+ |> List.map (fun m ->
298+ { Id = m.Id
299+ Body = m.Body
300+ Timestamp = DateTimeOffset.FromUnixTimeSeconds m.TimestampUnix
301+ IsOutgoing = m.IsOutgoing }))
302+ |> Map.ofSeq
303+
304+ { model' with
305+ Contacts = data.Contacts |> Array.toList
306+ Messages = messages
307+ ServerUrl = if data.ServerUrl <> "" then data.ServerUrl else model.ServerUrl
308+ PollCursor = data.PollCursor
309+ Page = Conversations }
310+
311+ | None -> { model' with Page = Settings }
312+
313+ model', [ CmdConnect(model'.ServerUrl, identity) ]
316314
317315 // ── mapCmd ──
318316
@@ -325,24 +323,19 @@ module App =
325323 }))
326324 |> ignore)
327325
328− let private decryptEvent (privKey: byte[]) (payload: JsonElement) =
326+ let private decryptEvent (privKey: byte[]) (payload: ApiClient.EventPayload) =
329327 try
330− let blobHex = payload.GetProperty("encryptedBlob").GetString()
331− let tsEl = payload.GetProperty("timestamp")
332− let ts =
333− if tsEl.ValueKind = JsonValueKind.String then Int64.Parse(tsEl.GetString())
334− else tsEl.GetInt64()
335− let blob = Crypto.fromHex blobHex
328+ let blob = Crypto.fromHex payload.EncryptedBlob
336329
337330 match Crypto.decrypt privKey blob with
338331 | Some(plaintext, senderHex) ->
339− let ptDoc = JsonDocument.Parse(plaintext)
340− let ptRoot = ptDoc.RootElement
332+ let pt = JsonDocument.Parse(plaintext).RootElement
341333
342− if ptRoot.GetProperty("type").GetString() = "text" then
343− let msgId = ptRoot.GetProperty("id").GetString()
344− let body = ptRoot.GetProperty("body").GetString()
345− Ok { FromPubkey = senderHex; Body = body; Timestamp = ts; MessageId = msgId }
334+ if pt.GetProperty("type").GetString() = "text" then
335+ Ok { FromPubkey = senderHex
336+ Body = pt.GetProperty("body").GetString()
337+ Timestamp = payload.Timestamp
338+ MessageId = pt.GetProperty("id").GetString() }
346339 else
347340 Error "unknown type"
348341 | None -> Error "decrypt failed"
@@ -376,7 +369,7 @@ module App =
376369 let ts = DateTimeOffset.UtcNow.ToUnixTimeSeconds()
377370
378371 let payload =
379− $"""{{ "type": "text", "id": "{messageId}", "timestamp": {ts}, "body": {JsonSerializer.Serialize(text)} }}"""
372+ JsonSerializer.Serialize({| ``type`` = "text"; id = messageId; timestamp = ts; body = text |})
380373
381374 let blob = Crypto.encrypt session.Identity.PrivKey recipPub payload
382375 let blobHex = Crypto.toHex blob
@@ -503,7 +496,7 @@ module App =
503496
504497 match model.Conn with
505498 | Offline -> Button("Connect", DoConnect)
506− | Connecting _ -> Label("Connecting...").centerTextHorizontal()
499+ | Connecting -> Label("Connecting...").centerTextHorizontal()
507500 | Online _ ->
508501 Button("Disconnect", DoDisconnect)
509502 Button("Go to Conversations", Nav Conversations)
@@ -516,7 +509,7 @@ module App =
516509 let connStr =
517510 match model.Conn with
518511 | Offline -> "OFFLINE"
519− | Connecting _ -> "CONNECTING"
512+ | Connecting -> "CONNECTING"
520513 | Online _ -> "ONLINE"
521514
522515 let contactNames =
client/bin/Debug/net10.0-ios/iossimulator-arm64/Skrepka.app/Skrepka.dll

Binary file not shown.

client/bin/Debug/net10.0-ios/iossimulator-arm64/Skrepka.app/Skrepka.pdb

Binary file not shown.

client/bin/Debug/net10.0-ios/iossimulator-arm64/Skrepka.app/_CodeSignature/CodeResources+4−4
@@ -162,11 +162,11 @@
162162 </data>
163163 <key>Skrepka.dll</key>
164164 <data>
165− YuvKkwqaKzWQzRQXpENlDG0Qj74=
165+ sPcmYumCi7ODANv0qBWzcUKeaPI=
166166 </data>
167167 <key>Skrepka.pdb</key>
168168 <data>
169− uWv9Q0kXJ3vU7v5u8O43aOdycdk=
169+ TF5b1I6J39w2Dj1Wrqug0/yg9qg=
170170 </data>
171171 <key>Sodium.Core.dll</key>
172172 <data>
@@ -1382,14 +1382,14 @@
13821382 <dict>
13831383 <key>hash2</key>
13841384 <data>
1385− Z58lx+z8OWKQABghiCVt0azHU+vbKzyMKcw6PrDtiNg=
1385+ BjaEjWa8QEFUOCVL1Ng+wnOYAZURekP8Q+FOVrnOCPQ=
13861386 </data>
13871387 </dict>
13881388 <key>Skrepka.pdb</key>
13891389 <dict>
13901390 <key>hash2</key>
13911391 <data>
1392− Z6xpYAcLJvuMODZXHsZdQO2dSNygZZZgeSiq725F/6s=
1392+ PCHpD3YLFr5j0LMCBnow74wXEPFzHYve3q9OnCr7KSE=
13931393 </data>
13941394 </dict>
13951395 <key>Sodium.Core.dll</key>
client/bin/Debug/net10.0-ios/iossimulator-arm64/Skrepka.dll

Binary file not shown.

client/bin/Debug/net10.0-ios/iossimulator-arm64/Skrepka.pdb

Binary file not shown.

client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.app/Contents/MonoBundle/Skrepka.dll

Binary file not shown.

client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.app/Contents/MonoBundle/Skrepka.pdb

Binary file not shown.

client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.app/Contents/_CodeSignature/CodeResources+2−2
@@ -240,14 +240,14 @@
240240 <dict>
241241 <key>hash2</key>
242242 <data>
243− 91zpkFT4/RM8YRa7FJkiFdDR7Pto7K+XY9imNTAYHjo=
243+ J0e0G+5VLninqP1T7boUEWU/O/eykbUdWGzOK8RH4/M=
244244 </data>
245245 </dict>
246246 <key>MonoBundle/Skrepka.pdb</key>
247247 <dict>
248248 <key>hash2</key>
249249 <data>
250− PBlWefCE9ZRLSbMgbnh+/sPWyukURBAZvneq4SzNCRA=
250+ cb32M8TckGOvsdyO5UBJyRy7PLwXN2rTWF2p7NOSjQc=
251251 </data>
252252 </dict>
253253 <key>MonoBundle/Sodium.Core.dll</key>
client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.dll

Binary file not shown.

client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.pdb

Binary file not shown.

client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.AssemblyInfo.fs+1−1
@@ -10,7 +10,7 @@ open System.Reflection
1010[<assembly: System.Reflection.AssemblyCompanyAttribute("Skrepka")>]
1111[<assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")>]
1212[<assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")>]
13−[<assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0+53111fd5732cdcd3f192c7b234c1e758166a5b4e")>]
13+[<assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0+b86f18ac7bc1810c038cac76bbaa8d60a06f932b")>]
1414[<assembly: System.Reflection.AssemblyProductAttribute("Skrepka")>]
1515[<assembly: System.Reflection.AssemblyTitleAttribute("Skrepka")>]
1616[<assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")>]
client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.AssemblyInfoInputs.cache+1−1
@@ -1 +1 @@
1−0ef83a245978e87cd24a7f73f252d902b7105a6b078059a69fddd28d07e76f29
1+1073aae7a8bfac91f0bc132ade6bddfa78bd27e8884b1abd921d1a371aa4b39f
client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.dll

Binary file not shown.

client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.fsproj.FileListAbsolute.txt−22
@@ -333,25 +333,3 @@
333333/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.pdb
334334/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.genruntimeconfig.cache
335335/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/ref/Skrepka.dll
336−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Fabulous.stamp
337−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Fabulous.MauiControls.stamp
338−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/FSharp.Core.stamp
339−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Extensions.Configuration.Abstractions.stamp
340−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Extensions.Configuration.stamp
341−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Extensions.DependencyInjection.Abstractions.stamp
342−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Extensions.DependencyInjection.stamp
343−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Extensions.Diagnostics.Abstractions.stamp
344−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Extensions.FileProviders.Abstractions.stamp
345−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Extensions.Hosting.Abstractions.stamp
346−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Extensions.Logging.Abstractions.stamp
347−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Extensions.Logging.stamp
348−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Extensions.Options.stamp
349−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Extensions.Primitives.stamp
350−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Maui.Controls.Compatibility.stamp
351−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Maui.Controls.stamp
352−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Maui.Controls.Xaml.stamp
353−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Maui.stamp
354−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Maui.Essentials.stamp
355−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Maui.Graphics.stamp
356−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Sodium.Core.stamp
357−/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/unpack/Microsoft.Maui.Essentials/BundleResource/xml/microsoft_maui_essentials_fileprovider_file_paths.xml
client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.pdb

Binary file not shown.

client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.sourcelink.json+1−1
@@ -1 +1 @@
1−{"documents":{"/Users/iko/Developer/skrepka/*":"https://raw.githubusercontent.com/ilyakooo0/skrepka/53111fd5732cdcd3f192c7b234c1e758166a5b4e/*"}}
1+{"documents":{"/Users/iko/Developer/skrepka/*":"https://raw.githubusercontent.com/ilyakooo0/skrepka/b86f18ac7bc1810c038cac76bbaa8d60a06f932b/*"}}
client/obj/Debug/net10.0-ios/iossimulator-arm64/ref/Skrepka.dll

Binary file not shown.

client/obj/Debug/net10.0-ios/iossimulator-arm64/refint/Skrepka.dll

Binary file not shown.

client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.AssemblyInfo.fs+1−1
@@ -10,7 +10,7 @@ open System.Reflection
1010[<assembly: System.Reflection.AssemblyCompanyAttribute("Skrepka")>]
1111[<assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")>]
1212[<assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")>]
13−[<assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0+ecdd432bf2c8310d4626a31121c2e9c307be193e")>]
13+[<assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0+b86f18ac7bc1810c038cac76bbaa8d60a06f932b")>]
1414[<assembly: System.Reflection.AssemblyProductAttribute("Skrepka")>]
1515[<assembly: System.Reflection.AssemblyTitleAttribute("Skrepka")>]
1616[<assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")>]
client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.AssemblyInfoInputs.cache+1−1
@@ -1 +1 @@
1−83cc1d0f7837e56dfd3e64e2491b55a1e8c0c0e8eac0237e2d9f361c0cdf8383
1+65f3a65e8aad333c4ce67904855fcf84ff492a316f7f53d5fb7bac25600d9db6
client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.dll

Binary file not shown.

client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.pdb

Binary file not shown.

client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.sourcelink.json+1−1
@@ -1 +1 @@
1−{"documents":{"/Users/iko/Developer/skrepka/*":"https://raw.githubusercontent.com/ilyakooo0/skrepka/ecdd432bf2c8310d4626a31121c2e9c307be193e/*"}}
1+{"documents":{"/Users/iko/Developer/skrepka/*":"https://raw.githubusercontent.com/ilyakooo0/skrepka/b86f18ac7bc1810c038cac76bbaa8d60a06f932b/*"}}
client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/ref/Skrepka.dll

Binary file not shown.

client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/refint/Skrepka.dll

Binary file not shown.