Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Backbone-specific addresses #570

Merged
merged 72 commits into from
May 8, 2024
Merged
Show file tree
Hide file tree
Changes from 53 commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
7ab7128
feat: add 100 char-long identityAddresses
Dannyps Mar 21, 2024
5e080e1
chore: add missing config
Dannyps Mar 21, 2024
29a5f2b
chore: fix erroneous migrations
Dannyps Mar 21, 2024
7a5ff21
feat: add 100 char-long identityAddresses on SqlServer
Dannyps Mar 21, 2024
3006724
chore: fix erroneous migrations' name
Dannyps Mar 21, 2024
65c3765
chore: fix erroneous migrations' name
Dannyps Mar 21, 2024
6e14210
chore: attempt to remove identity assertions from transport tests
Dannyps Mar 21, 2024
040fef1
chore: fix sed
Dannyps Mar 21, 2024
97968a2
chore: fix erroneous migrations' name
Dannyps Mar 21, 2024
a470078
chore: use backbone-specific-addresses branch of transport tests
Dannyps Mar 22, 2024
bce9153
chore: branch → ref
Dannyps Mar 22, 2024
067d77a
chore: fix branch name
Dannyps Mar 22, 2024
edf0241
Merge branch 'main' into nmshdb-69-backbone-specific-addresses
mergify[bot] Mar 22, 2024
a68bcbf
Merge branch 'main' into nmshdb-69-backbone-specific-addresses
mergify[bot] Mar 25, 2024
99b6d34
Merge branch 'main' into nmshdb-69-backbone-specific-addresses
mergify[bot] Mar 26, 2024
f5e53da
Merge remote-tracking branch 'origin/main' into nmshdb-69-backbone-sp…
Dannyps Apr 8, 2024
5dafbb4
chore: backbone sln merge
Dannyps Apr 8, 2024
ac9cfdd
chore: remove realm, change url to prod.enmeshed.eu where applicable
Dannyps Apr 8, 2024
cfbfafb
chore: fix unit tests after removing realm from identity
Dannyps Apr 8, 2024
40957bd
chore: remove AddressPrefix from config files
Dannyps Apr 8, 2024
ac95b4b
Merge remote-tracking branch 'origin/main' into nmshdb-69-backbone-sp…
Dannyps Apr 8, 2024
7879511
chore: remove AddressPrefix from config files
Dannyps Apr 8, 2024
d0350e1
chore: fix formatting
Dannyps Apr 8, 2024
50e5466
chore: remove second needless migration
Dannyps Apr 8, 2024
6c6c13f
fix: remove old configuration and update messages to use InstanceUrl,…
Dannyps Apr 8, 2024
9d532e3
chore: move migration order
Dannyps Apr 8, 2024
d129581
Merge branch 'main' into nmshdb-69-backbone-specific-addresses
mergify[bot] Apr 9, 2024
3e83af6
Merge branch 'main' into nmshdb-69-backbone-specific-addresses
mergify[bot] Apr 10, 2024
67fbf01
Merge branch 'main' into nmshdb-69-backbone-specific-addresses
mergify[bot] Apr 10, 2024
cb4f7b7
Merge branch 'main' into nmshdb-69-backbone-specific-addresses
mergify[bot] Apr 12, 2024
ca578e4
Merge branch 'main' into nmshdb-69-backbone-specific-addresses
tnotheis Apr 17, 2024
8cbe83d
feat: implement new IdentityAddress generation algorithm
Dannyps Apr 18, 2024
909b435
chore: reformat
Dannyps Apr 18, 2024
47cc2fd
chore: simplify isValid
Dannyps Apr 18, 2024
0b3b388
feat: change address length to 80
Dannyps Apr 18, 2024
9c4691b
Merge remote-tracking branch 'origin/release/v5' into nmshdb-69-backb…
Dannyps May 2, 2024
e8e7973
chore: fix migration name
Dannyps May 2, 2024
cecb502
chore: fix migration name
Dannyps May 2, 2024
f56ce38
chore: fix old 100 to 80 chars
Dannyps May 2, 2024
1050a00
chore: trigger pipeline
Dannyps May 2, 2024
3fdd4e2
fix: pipeline test file
Dannyps May 2, 2024
182b5df
Merge branch 'release/v5' into nmshdb-69-backbone-specific-addresses
mergify[bot] May 2, 2024
63df0d5
Merge branch 'release/v5' into nmshdb-69-backbone-specific-addresses
mergify[bot] May 2, 2024
46f2636
Merge remote-tracking branch 'origin/release/v5' into nmshdb-69-backb…
Dannyps May 2, 2024
a3c83d7
Merge branch 'nmshdb-69-backbone-specific-addresses' of github.com:nm…
Dannyps May 2, 2024
4469124
Merge branch 'release/v5' into nmshdb-69-backbone-specific-addresses
mergify[bot] May 2, 2024
b125944
fix: missing defaultschema for migrations
Dannyps May 2, 2024
f45399e
Merge branch 'nmshdb-69-backbone-specific-addresses' of github.com:nm…
Dannyps May 2, 2024
01c81d4
fix: missing defaultschema for migrations
Dannyps May 2, 2024
64bafa1
fix: max length set to 100
Dannyps May 2, 2024
c0f40f3
Merge branch 'release/v5' into nmshdb-69-backbone-specific-addresses
mergify[bot] May 3, 2024
1fb0aea
Merge branch 'release/v5' into nmshdb-69-backbone-specific-addresses
mergify[bot] May 3, 2024
155742a
Merge branch 'release/v5' into nmshdb-69-backbone-specific-addresses
mergify[bot] May 3, 2024
bef9422
Merge branch 'release/v5' into nmshdb-69-backbone-specific-addresses
mergify[bot] May 6, 2024
1333b67
chore: add InstanceUrl to test appsettings
Dannyps May 6, 2024
cd28171
chore: transport tests should still use the backbone-specific-address…
Dannyps May 6, 2024
2e3da3c
chore: add InstanceUrl to test appsettings for event handler
Dannyps May 6, 2024
0a8566b
fix: bad feature/backbone-specific-addresses branch name
Dannyps May 6, 2024
4fd66b7
fix: 100 → 80 chars
Dannyps May 6, 2024
b1d23c1
chore: remove out-of-date migrations
Dannyps May 6, 2024
8f05f17
feat: Identity80 migrations for relationships module
Dannyps May 6, 2024
2e783bd
chore: more restrictive regex. usage of return value instead of relyi…
Dannyps May 7, 2024
ca20379
chore: fix migration file names
Dannyps May 7, 2024
39e7ca5
fix: exception thrown when address does not match the regex
Dannyps May 8, 2024
4386f27
chore: identitySpecificPart must be a hex representation of bytes
Dannyps May 8, 2024
c14f667
refactor: turn regex into a compiled one
Dannyps May 8, 2024
4f86487
chorte: remove unused pattern
Dannyps May 8, 2024
f8fe4f7
chore: use named regex groups
Dannyps May 8, 2024
d37ae7d
chore: extract CHECKSUM_LENGTH, create addressWithoutChecksumregex group
Dannyps May 8, 2024
82e5c96
chore: optimize regex
tnotheis May 8, 2024
f725cc8
refactor: rename variable
Dannyps May 8, 2024
8a2ff57
Merge branch 'nmshdb-69-backbone-specific-addresses' of github.com:nm…
Dannyps May 8, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion AdminApi/src/AdminApi/appsettings.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
},
"Devices": {
"Application": {
"AddressPrefix": "id1",
"InstanceUrl": "prod.enmeshed.eu",
"Pagination": {
"DefaultPageSize": 50,
"MaxPageSize": 200
Expand Down
1 change: 0 additions & 1 deletion AdminApi/src/AdminApi/appsettings.override.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@
"Modules": {
"Devices": {
"Application": {
"AddressPrefix": "id1",
"Pagination": {
"DefaultPageSize": 50,
"MaxPageSize": 200
Expand Down
3 changes: 2 additions & 1 deletion Backbone.sln.DotSettings
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:Boolean x:Key="/Default/CodeEditing/Intellisense/CodeCompletion/IntelliSenseCompletingCharacters/CSharpCompletingCharacters/UpgradedFromVSSettings/@EntryValue">True</s:Boolean>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=ConvertToConstant_002ELocal/@EntryIndexedValue">SUGGESTION</s:String>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=ConvertToPrimaryConstructor/@EntryIndexedValue">DO_NOT_SHOW</s:String>
Expand Down Expand Up @@ -32,6 +32,7 @@
<s:Boolean x:Key="/Default/UserDictionary/Words/=appsettings/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Datawallet/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Datawallets/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=dids/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Deleters/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Dtos/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=ecdsa/@EntryIndexedValue">True</s:Boolean>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,19 @@
using System.Globalization;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using Backbone.BuildingBlocks.Domain;
using Backbone.BuildingBlocks.Domain.StronglyTypedIds.Records;
using SimpleBase;


namespace Backbone.DevelopmentKit.Identity.ValueObjects;

[Serializable]
[TypeConverter(typeof(IdentityAddressTypeConverter))]
public record IdentityAddress : StronglyTypedId
{
public const int MAX_LENGTH = 36;
public const int MAX_LENGTH = 80;

private IdentityAddress(string stringValue) : base(stringValue)
{
Expand Down Expand Up @@ -45,37 +47,41 @@ public static bool IsValid(string? stringValue)

var lengthIsValid = stringValue.Length <= MAX_LENGTH;

var realm = stringValue[..3];

var concatenation = Base58.Bitcoin.Decode(stringValue.AsSpan(3)).ToArray();
var hashedPublicKey = concatenation[..20];
var givenChecksum = concatenation[20..];
const string pattern = @"^did\:e\:(.+?)\:dids\:(.+)(.{2})$";
try
{
var matches = Regex.Matches(stringValue, pattern, RegexOptions.IgnoreCase).First().Groups;

var realmBytes = Encoding.UTF8.GetBytes(realm);
var correctChecksum = CalculateChecksum(realmBytes, hashedPublicKey);
var givenChecksum = matches[3].Value;
var calculatedChecksum = CalculateChecksum(stringValue[..^2]);

var checksumIsValid = givenChecksum.SequenceEqual(correctChecksum);
var checksumIsValid = givenChecksum == calculatedChecksum;

return lengthIsValid && checksumIsValid;
return lengthIsValid && checksumIsValid;
}
catch (Exception ex) when (ex is ArgumentNullException or ArgumentException or FormatException or InvalidOperationException)
{
return false;
}
}

public static IdentityAddress Create(byte[] publicKey, string realm)
public static IdentityAddress Create(byte[] publicKey, string instanceUrl)
{
var hashedPublicKey = SHA256.Create().ComputeHash(SHA512.Create().ComputeHash(publicKey))[..20];
var realmBytes = Encoding.UTF8.GetBytes(realm);
var checksum = CalculateChecksum(realmBytes, hashedPublicKey);
var concatenation = hashedPublicKey.Concat(checksum).ToArray();
var address = realm + Base58.Bitcoin.Encode(concatenation);
var hashedPublicKey = SHA256.HashData(SHA512.HashData(publicKey))[..10];

var identitySpecificPart = Hex(hashedPublicKey);

return new IdentityAddress(address);
var mainPhrase = $"did:e:{instanceUrl}:dids:{identitySpecificPart}";
var checksum = CalculateChecksum(mainPhrase);

return new IdentityAddress((mainPhrase + checksum).ToLower());
}

private static byte[] CalculateChecksum(byte[] realmBytes, byte[] hashedPublicKey)
private static string CalculateChecksum(string phrase) => Hex(SHA256.HashData(Encoding.ASCII.GetBytes(phrase)))[..2];

private static string Hex(byte[] hashedPublicKey)
{
var checksumSource = realmBytes.Concat(hashedPublicKey).ToArray();
var checksumHash = SHA256.Create().ComputeHash(SHA512.Create().ComputeHash(checksumSource));
var checksum = checksumHash[..4];
return checksum;
return Convert.ToHexString(hashedPublicKey).ToLower();
}

public override string ToString()
Expand Down
2 changes: 1 addition & 1 deletion BuildingBlocks/src/UnitTestTools/Data/TestDataGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public static string GenerateString(int resultLength, char[]? chars = null)

public static IdentityAddress CreateRandomIdentityAddress()
{
return IdentityAddress.Create(CreateRandomBytes(), "id1");
return IdentityAddress.Create(CreateRandomBytes(), "prod.enmeshed.eu");
}

public static DeviceId CreateRandomDeviceId()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,22 @@ namespace Backbone.DevelopmentKit.Identity.Tests;
public class IdentityAddressTests
{
[Theory]
[InlineData("fj0o9eOiPRswTZL6j9lE9TRvpDDnPRMF0gJeahz/W2c=", "id1QF24Gk2DfqCywRS7NpeH5iu7D4xvu6qv1")]
[InlineData("jRxGfZtQ8a90TmKCGk+dhuX1CBjgoXuldhNPwrjpWsw=", "id1HwY1TuyVBp3CmY3h18yTt1CKyu5qwB9wj")]
[InlineData("PEODpwvi7KxIVa4qeUXia9apMFvPMktdDHiDitlfbjE=", "id1LMp4k1XwxZ3WFXdAn9y12tv1ofe5so4kM")]
[InlineData("mJGmNbxiVZAPToRuk9O3NvdfsWl6V+7wzIc+/57bU08=", "id1McegXycvRoiJppS2LG25phn3jNveckFUL")]
[InlineData("l68K/zdNp1VLoswcHAqN6QUFwCMU6Yvzf7XiW2m1hRY=", "id193k6K5cJr94WJEWYb6Kei8zp5CGPyrQLS")]
[InlineData("Gl8XTo8qFuUM+ksXixwp4g/jf3H/hU1F8ETuYaHCM5I=", "id1BLrHAgDpimtLcGJGssMSm7bJHsvVe7CN")]
[InlineData("rIS4kAzHXT7GgCA6Qm1ANlwM3x12QMSkeprHb6tjPyc=", "id1NjGvLfWPrQ34PXWRBNiTfXv9DFiDQHExx")]
[InlineData("hg/cbeBvfNrMiJ0dW1AtWC4IQwG4gkuhzG2+z6bAoRU=", "id1Gda4aTXiBX9Pyc8UnmLaG44cX46umjnea")]
[InlineData("kId+qWen/lKeTdyxcIQhkzvvvTU8wIJECfWUWbmRQRY=", "id17RDEphijMPFGLbhqLWWgJfatBANMruC8f")]
[InlineData("NcqlzTEpSlKX9gmNBv41EjPRHpaNYwt0bxqh1bgyJzA=", "id19meHs4Di7JYNXoRPx9bFD6FUcpHFo3mBi")]
[InlineData("49fWA+kzWNdCFdo92imTiQ4vUUJsPPLNlcB9udC4ooE=", "id1c711BBi4yqV9wrLBVKxRSNFayfAm3Eib")]
// ReSharper disable StringLiteralTypo
[InlineData("49fWA+kzWNdCFdo92imTiQ4vUUJsPPLNlcB9udC4ooE=", "did:e:prod.enmeshed.eu:dids:06a391378e5df5c1399f77")]
[InlineData("fj0o9eOiPRswTZL6j9lE9TRvpDDnPRMF0gJeahz/W2c=", "did:e:prod.enmeshed.eu:dids:fef1992c5e529adc413288")]
[InlineData("Gl8XTo8qFuUM+ksXixwp4g/jf3H/hU1F8ETuYaHCM5I=", "did:e:prod.enmeshed.eu:dids:01f4bab09d757578bb4994")]
[InlineData("hg/cbeBvfNrMiJ0dW1AtWC4IQwG4gkuhzG2+z6bAoRU=", "did:e:prod.enmeshed.eu:dids:ab7475ba4070f29ce286fd")]
[InlineData("jRxGfZtQ8a90TmKCGk+dhuX1CBjgoXuldhNPwrjpWsw=", "did:e:prod.enmeshed.eu:dids:b9d25bd0a2bbd3aa48437c")]
[InlineData("kId+qWen/lKeTdyxcIQhkzvvvTU8wIJECfWUWbmRQRY=", "did:e:prod.enmeshed.eu:dids:4664f42d7ca6480db07fdb")]
[InlineData("l68K/zdNp1VLoswcHAqN6QUFwCMU6Yvzf7XiW2m1hRY=", "did:e:prod.enmeshed.eu:dids:5845cf29fbda2897892a9a")]
[InlineData("mJGmNbxiVZAPToRuk9O3NvdfsWl6V+7wzIc+/57bU08=", "did:e:prod.enmeshed.eu:dids:e2208784ee2769c5d9684d")]
[InlineData("NcqlzTEpSlKX9gmNBv41EjPRHpaNYwt0bxqh1bgyJzA=", "did:e:prod.enmeshed.eu:dids:60326ff5075e0d7378990c")]
[InlineData("PEODpwvi7KxIVa4qeUXia9apMFvPMktdDHiDitlfbjE=", "did:e:prod.enmeshed.eu:dids:d459ff2144f0eac7aff554")]
[InlineData("rIS4kAzHXT7GgCA6Qm1ANlwM3x12QMSkeprHb6tjPyc=", "did:e:prod.enmeshed.eu:dids:ee5966a158f1dc4de5bd5c")]
// ReSharper enable StringLiteralTypo
public void AddressIsCreatedCorrectly2(string publicKey, string expectedAddress)
{
var address = IdentityAddress.Create(Convert.FromBase64String(publicKey), "id1");
var address = IdentityAddress.Create(Convert.FromBase64String(publicKey), "prod.enmeshed.eu");

address.Value.Should().Be(expectedAddress);
}
Expand All @@ -29,7 +31,7 @@ public void AddressIsCreatedCorrectly2(string publicKey, string expectedAddress)
public void AddressIsCreatedCorrectly()
{
var testData = TestData.Valid();
var address = IdentityAddress.Create(testData.PublicKey, testData.Realm);
var address = IdentityAddress.Create(testData.PublicKey, testData.InstanceUrl);

address.Value.Should().Be(testData.Address);
}
Expand All @@ -38,7 +40,7 @@ public void AddressIsCreatedCorrectly()
public void EfConverterWorksCorrectly()
{
var testData = TestData.Valid();
var address = IdentityAddress.Create(testData.PublicKey, testData.Realm);
var address = IdentityAddress.Create(testData.PublicKey, testData.InstanceUrl);

address.Value.Should().Be(testData.Address);
}
Expand All @@ -52,15 +54,6 @@ public void ValidAddressesAreAccepted()
isValid.Should().BeTrue();
}

[Fact]
public void AddressesWithInvalidRealmAreDeclined()
{
var testData = TestData.WithInvalidRealm();
var isValid = IdentityAddress.IsValid(testData.Address);

isValid.Should().BeFalse();
}

[Fact]
public void AddressesWithInvalidChecksumAreDeclined()
{
Expand All @@ -82,59 +75,43 @@ public void AddressesWithInvalidMainPartAreDeclined()

internal class TestData
{
public required string Realm { get; set; }
public required string InstanceUrl { get; set; }
public required byte[] PublicKey { get; set; }

public required string Address { get; set; }

public required string Checksum { get; set; }
public required string MainPart { get; set; }

public static TestData Valid()
{
return new TestData
{
Address = "id18uSgVGTSNqECvt1DJM3bZg6U8p6RSjott",
PublicKey = Convert.FromBase64String("tB9KFp/YqHrom3m5qUuZsd6l30DkaNjN14SxRw7YZuI="),
Realm = "id1",
Checksum = "jott",
MainPart = "8uSgVGTSNqECvt1DJM3bZg6U8p6RS"
};
}

public static TestData WithInvalidRealm()
{
return new TestData
{
Address = "id08uSgVGTSNqECvt1DJM3bZg6U8p6RSjott",
Address = "did:e:prod.enmeshed.eu:dids:56b3f2a0c202e27229aa87",
PublicKey = Convert.FromBase64String("tB9KFp/YqHrom3m5qUuZsd6l30DkaNjN14SxRw7YZuI="),
Realm = "id0",
Checksum = "jott",
MainPart = "8uSgVGTSNqECvt1DJM3bZg6U8p6RS"
Checksum = "87",
InstanceUrl = "prod.enmeshed.eu"
};
}

public static TestData WithInvalidMainPart()
{
return new TestData
{
Address = "id07uSgVGTSNqECvt1DJM3bZg6U8p6RSjott",
Address = "did:e:prod.enmeshed.eu:dids:56b3f2a0c202e27d39aa87",
PublicKey = Convert.FromBase64String("tB9KFp/YqHrom3m5qUuZsd6l30DkaNjN14SxRw7YZuI="),
Realm = "id0",
Checksum = "jott",
MainPart = "7uSgVGTSNqECvt1DJM3bZg6U8p6RS"
Checksum = "87",
InstanceUrl = "prod.enmeshed.eu"
};
}

public static TestData WithInvalidChecksum()
{
return new TestData
{
Address = "id08uSgVGTSNqECvt1DJM3bZg6U8p6RSiott",
Address = "did:e:prod.enmeshed.eu:dids:56b3f2a0c202e27229aa55",
PublicKey = Convert.FromBase64String("tB9KFp/YqHrom3m5qUuZsd6l30DkaNjN14SxRw7YZuI="),
Realm = "id0",
Checksum = "iott",
MainPart = "8uSgVGTSNqECvt1DJM3bZg6U8p6RS"
Checksum = "55",
InstanceUrl = "prod.enmeshed.eu"
};
}
}
4 changes: 2 additions & 2 deletions ConsumerApi/appsettings.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
},
"Devices": {
"Application": {
"AddressPrefix": "id1",
"InstanceUrl": "prod.enmeshed.eu",
"Pagination": {
"DefaultPageSize": 50,
"MaxPageSize": 200
Expand All @@ -45,7 +45,7 @@
},
"Messages": {
"Application": {
"AddressPrefix": "id1",
"InstanceUrl": "prod.enmeshed.eu",
"MaxNumberOfUnreceivedMessagesFromOneSender": 20,
"Pagination": {
"DefaultPageSize": 50,
Expand Down
13 changes: 6 additions & 7 deletions Jobs/src/Job.IdentityDeletion/appsettings.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
},
"Devices": {
"Application": {
"AddressPrefix": "id1",
"Pagination": {
"DefaultPageSize": 50,
"MaxPageSize": 200
Expand All @@ -38,12 +37,12 @@
},
"Messages": {
"Application": {
"AddressPrefix": "id1",
"MaxNumberOfUnreceivedMessagesFromOneSender": 20,
"Pagination": {
"DefaultPageSize": 50,
"MaxPageSize": 200
}
"InstanceUrl": "prod.enmeshed.eu",
"MaxNumberOfUnreceivedMessagesFromOneSender": 20,
"Pagination": {
"DefaultPageSize": 50,
"MaxPageSize": 200
}
}
},
"Relationships": {
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading