public static Task <MyInvitation> CreateInviteAsync(string realmUrl)
        {
            var tcs = new TaskCompletionSource <MyInvitation>();

            var permissionOffer = new PermissionOffer(realmUrl,
                                                      mayRead: true,
                                                      mayWrite: true,
                                                      mayManage: false,
                                                      expiresAt: DateTimeOffset.UtcNow.AddDays(7));

            var managementRealm = User.Current.GetManagementRealm();

            managementRealm.Write(() =>
            {
                managementRealm.Add(permissionOffer);
            });

            permissionOffer.WhenPropertyChanged(nameof(PermissionOffer.Status),
                                                (po) => po.Status == ManagementObjectStatus.Success,
                                                (po) =>
            {
                tcs.TrySetResult(CreateInvite(po));
            }
                                                );

            return(tcs.Task);
        }
 private static MyInvitation CreateInvite(PermissionOffer po)
 {
     return(new MyInvitation(po.Token));
 }