WIP Vendor modules proof of concept

Parent issue: https://github.com/silverstripe/silverstripe-framework/issues/7360
This demonstrates a working proof of concept for supporting silverstripe modules in /vendor dir.
The major changes include an updated module manifest, as well as additional URLGenerator which supports "remapping" of files from vendor to a top level 'resources' folder.
The idea is that, although not explicitly supported yet, this should allow us to move to a public folder later on down the track when we dis-associate the BASE_PATH with the web root folder.
Remapping can be configured to one or more of the following methods:

symlink to vendor
copy assets from vendor
url rewriting only

By default the first two options are configured, meaning that a failed symlink will fail over to a file copy. This does require that the 'resources' folder has write access, similar to 'assets'.
Modules in vendor are not automatically exposed; It's necessary for such a module to declare which folders are public.
{
    "name": "tractorcow/anothermodule",
    "description": "a test module",
    "type": "silverstripe-vendormodule",
    "extra": {
        "expose": [
            "client"
        ]
    },
    "require": {
        "silverstripe/framework": "^4.0"
    }
}

This will trigger a symlink at the location resources/tractorcow/anothermodule/client linking to the vendor dir vendor/tractorcow/anothermodule/client.
Remapping is performed JIT if a url to a resource isn't available, and additionally on flush. I had considered doing this on dev/build, but it was necessary to build this into error-handling, such that ErrorControlChain will allow the remapping to occur if a critical resource is unavailable (e.g. css on the login page).

Note: No changes to composer/installers necessary; As long as it doesn't match silverstripe-module it'll be installed normally.

@sminnee I agree; We are now thinking of moving this code out of framework, and putting it into a plugin.
Further discussion at https://github.com/silverstripe/silverstripe-framework/issues/7360#issuecomment-331322934

Ok, a big update; All file-mapping has been shifted out of framework, and put into a new silverstripe/vendor-plugin. Any silverstripe-vendormodule which requires this plugin will automatically have their exposed folders automatically mapped.
Additionally, to support --no-plugins installations you can now use the new silverstripe/vendor-helper CLI tool to link these dirs after the fact (internally they use the same code, but the CLI has slightly heavier dependencies).
See:

https://github.com/open-sausages/vendor-helper
https://github.com/open-sausages/vendor-plugin

@chillu would you like to review to check my approach works and fits with platform?

 I've looked through the two new modules on open-sausages, and they look solid.
I've had a look at how laravel packages handle this again, and they also publish config files and other stuff that's not intended for website use. So you might copy vendor/silverstripe/fluent/_config/default.yml to mysite/_config/fluent.yml. Which means the mapped path depends on the file, and wouldn't be set globally to resources/. I guess there's a bit of conceptual overlap with the recipe-plugin and its extra.project-files composer config. I know this isn't part of the AC, and I can't think of a good use case outside recipes. Just thought it's worth a mention.
Also, since the process doesn't actually boot a SilverStripe app, there's no way to conditionally load a module. We don't do that at the moment, but I could see us getting there long term. For example, conditional on a feature flag in that particular environment. So the composer package would always be installed, but the module isn't determined as "active" during boot - hence no files should be copied either. That's the tradeoff keeping the script separate (and compatible with composer --no-scripts --no-plugins).

A few minor bugs. I don't think any of them is blocking the merge here, but they're worth pointing out in the docs as gotchas:

If you switch from symlink to copy methods, it'll silently fail to add new files: https://github.com/open-sausages/vendor-plugin/blob/master/src/Methods/CopyMethod.php#L28
If you use copy, it won't delete files that have disappeared from the original vendor module.
If you use either copy or symlink, removing the module won't remove the files (there's a pre-package-uninstall event)

I've had a look at how laravel packages handle this again, and they also publish config files and other stuff that's not intended for website use.

The way that modules work, these files will work fine regardless of whether they are in the root or not; Vendor .yml config should be picked up, but I will double check to make sure the non-module manifests are working properly. :)

Task for today is to build a vendor-module and test it out to ensure it works properly.

If you switch from symlink to copy methods, it'll silently fail to add new files: https://github.com/open-sausages/vendor-plugin/blob/master/src/Methods/CopyMethod.php#L28

Ok, I'll remove the symlink in this case.

You can check this out, and then install https://github.com/tractorcow/test-vendor-module
composer require tractorcow/test-vendor-module ^1.0 and it will bootstrap a test page with a bunch of tests. :)

If you switch from symlink to copy methods, it'll silently fail to add new files: https://github.com/open-sausages/vendor-plugin/blob/master/src/Methods/CopyMethod.php#L28
If you use copy, it won't delete files that have disappeared from the original vendor module.
If you use either copy or symlink, removing the module won't remove the files (there's a pre-package-uninstall event)

@chillu all of this feedback has been addressed. :)

Updated with tests and documentation on themes.

Our modules have the following structure (e.g. silverstripe/campaign-admin)
client/
  dist/
  lang/
    src/
  src/

So we'd expose client/dist and client/lang separately here, mapping to resources/silverstripe-campaign-admin/dist and resources/silverstripe-campaign-admin/lang? Technically that would also copy the client/lang/src folder, but that's probably due to bad folder design in the module rather than shortcomings of the vendor approach itself. An exclusion regex list would be useful at some point, but doesn't seem to be block merge.

resources/silverstripe-campaign-admin/client/dist rather than resources/silverstripe-campaign-admin/dist

I just realised ALL of the 'vendor' test fixtures got lost due to .gitignore. Fixed now. :D

@chillu it's green :)

Rebased.


Unknown error: GPG is unavailable on this device

After a fresh install of the OS X client app I signed in and got this error message. GPG is installed as commandline utility... Not sure what the problem is here...
my log id: 05845a6848b9365d63f9e51c

Hi!  We've fixed this, but the new build containing the fix isn't released yet.  I'll comment here once it is, should be very soon.

Cool, thanks.

Btw is there a workaround this that I can apply? Would be cool if I could start using the app :)

So has this been release yet because im getting this issue.

@MLWALK3R Yes, it's been released now -- please could you run keybase log send so we can check it out?

https://github.com/keybase/client/issues/4732


.Net - Add support for Azure Open AI Assistants API

Motivation and Context

Azure has added support for Open AI Assistants API - https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/assistant.  We now want to support both Open AI and Azure Open AI Assistant API endpoints.
Description

Add WithAzureOpenAIChatCompletion to AgentBuilder and updated OpenAIRestContext to support Endpoint and Version.

Turns out Azure is opinionated on the object property in the models and OpenAI doesn't care...so removed.

Contribution Checklist

[x] The code builds clean without any errors or warnings
[x] The PR follows the SK Contribution Guidelines and the pre-submission formatting script raises no violations
[x] All unit tests pass, and I have added new tests where possible
[x] I didn't break anyone :smile:

I like this pattern with the UseOpenAI property I think we can push this property to the BaseTest class and use also in other examples.

I like this solution with the UseOpenAI property I think we can push this property to the BaseTest class and use also in other examples.

I agree with your vision.  I'd prefer not to churn the entire test-suite with this PR.  Happy to cycle-back and work on base-class semantics.


Missing import_callable statement in app_settins.py

PasswordResetConfirmSerializer = serializers.get(
    'PASSWORD_RESET_CONFIRM_SERIALIZER', DefaultPasswordResetConfirmSerializer
)

In app_settings.py should be:
PasswordResetConfirmSerializer = import_callable(serializers.get(
    'PASSWORD_RESET_CONFIRM_SERIALIZER', DefaultPasswordResetConfirmSerializer
))

Could you create PR for it? Or might I to do this?

Could you create PR for it? Or might I to do this?

If you could create it, it would be great. Thank you!


Error when using joinEager

Please see my gist.
I'm working on multiple MySQL databases. For the sake of simplicity I created two databases:

Master
Detail

The models that you'll see in the gist Product & Sales are also just for the sake of simplicity.
I don't want to use bindKnex() method because it cannot solve my problem when doing query using eager and graph API.
Then I saw that by prefixing the model's tableName property's value with the database name should solve the problem.
static get tableName() { return `myDb.myTable`; }

So, I just want to use a single Knex connection because it would make it simple. That's why if you see in db.js file, main DB is using information_schema which will be used by Model class.
const { main } = require(`./db`);

Model.knex(main);

When doing insertGraph it works.
const Product = require(`./product.js`);

(async () => {
  const result = (
    await Product
      .query()
      .insertGraphAndFetch([
        {
          id: 1,
          name: `Blaah`,
          sales: [{
            id: 1,
            qty: 1,
          }],
        },
      ])
  );

  console.log(result);
})();

But the problem is when doing joinEager:
const result = (
  await Product
    .query()
    .eagerOptions({ joinOperation: `innerJoin` })
    .joinEager({
      sales: true,
    })
);

I got this exception:
TypeError: Cannot read property 'length' of undefined
    at createModel (.../node_modules/objection/lib/queryBuilder/operations/eager/RelationJoinBuilder.js:643:32)
    at RelationJoinBuilder.rowsToTree (.../node_modules/objection/lib/queryBuilder/operations/eager/RelationJoinBuilder.js:122:19)
    at JoinEagerOperation.onRawResult (.../node_modules/objection/lib/queryBuilder/operations/eager/JoinEagerOperation.js:41:29)
    at promise.then.result (.../node_modules/objection/lib/queryBuilder/QueryBuilder.js:1181:45)

Currently the only workaround is to set the Knex connection for each models.
const { master, detail } = require(`./db`);

Product.knex(master);
Sales.knex(detail);

Which actually the thing that I want it to avoid because I just want to use a single Knex connection. The reason is because most DBMS support this as long the databases are in the same instance. This is something that can be done by using raw SQL but was never easy when using ORM.
I wish that the case could be solved with simple code like this:
Product
  .query()
  .withSchema(`master`)
  .eager({
    sales: {
      $schema: `detail`,
    },
  });

Using $schema as part of the RelationExpression.
MySQL version: 5.6.0
Objection version: 1.4.0
Node.js version: 11.0.0
OS version: macOS 10.14

Your gist is full of errors. relationMappings must me a static getter. The transaction is never used, etc. Could you provide a gist that I can run?

 The transaction is never used, etc. Could you provide a gist that I can run?

@koskimas Sorry about that. I've fixed it. Please try again.

In my gist I also found that if I don't comment the case 2 before running case 3 it will still throws the same exception as before.

You should never mix two connections like this:
      Product.knex(master);
      Sales.knex(detail);

This will break so many things.
The problem here seems to be that joinEager needs to fetch the table metadata and it doesn't get it through the main knex since that database doesn't contain the needed tables.
You can bypass the metadata fetching by overriding the tableMetadata method. Something like this:

const { Model } = require(`objection`);

class Product extends Model {
  static get schemaName() {
    return `master`;
  }

  static get tableName() {
    return `${this.schemaName}.product`;
  }

  static get tableMetadata() {
    return {
      columns: ['id', 'name']
    };
  }

  static get relationMappings() {
    const Sales = require(`./sales`);

    return {
      sales: {
        relation: Model.HasManyRelation,
        modelClass: Sales,
        join: {
          from: `${Product.tableName}.id`,
          to: `${Sales.tableName}.productId`,
        },
      },
    };
  }
}

module.exports = Product;

You need to do this for each Model.
You may still run into other problems because the way you have prefixed the table name using the database name. It's not tested in objection very well.

@isanimu Were you able to solve this?

@isanimu Were you able to solve this?

Yes, I was able to solve the problem using the solution you've provided.
But tableMetadata should be a function instead of a property.
Thanks.


DBZ-6406 Update to Debezium 2.3.x

https://issues.redhat.com/browse/DBZ-6406

The two failures are related to the fact we have some debezium/example-xxxx:2.3 artifacts that are not published, such as the PostgreSQL and MySQL example databases.  These are not currently published due to a script failure.


Is there any code (example) for creating persistent menu with microsoft bot framework c# ?

Is there any code for creating persistent menu with microsoft bot framework c# ?
I found this : https://satwikkansal.wordpress.com/2016/08/25/adding-menu-and-buttons-to-your-messenger-bot/
But i'm using c# language .... so it would be excellent if is there any example written in c#

Not out of the box - curl is just making a HTTP Post to the FB API ...
Why don't you just Postman or Fiddler (or write some c# code) and create the necessary POST request - we used that method with great success.
Agree that it would be nice to add this to the emulator or even the bot framework portal.
PS.
Remember that you would have to 'catch' these 'global' commands as they may appear in any dialog/conversation you are having.

@lonche Hi, I'm having the same difficulty. Were you able to make the menu in C #? Best regards

@krconnect Yes. I made persistent menu. It is more difficult if you want to make POST request to Facebook using c#.
If you want to make persistent menu, use this : https://developers.facebook.com/docs/messenger-platform/messenger-profile/persistent-menu
and (ex. fiddler).

@lonche This documentation I already read, but I have not yet been able to understand how to create a drop down menu in C #. Thanks for the answer, I'll search more.

Hi Guys
Don't see what the issue is ? - Just do it via fiddler/Postman or whatever.
If you really want c# code -> use webclient and upload the data as specified in the links
(substitute the curl for the webclient code).
To help you out I made you a quick sample using the FB Get started payload (which you need for the persistent menu)
http://rextester.com/PGZ32787
Code:
`//Rextester.Program.Main is the entry point for your code. Don't change it.
//Compiler version 4.0.30319.17929 for Microsoft (R) .NET Framework 4.5
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Net;
using System.Net.Http;
using System.Dynamic;
namespace Rextester
{
public class Program
{
public static void Main(string[] args)
{
String PAGE_ACCESS_TOKEN = "MYTOKEN"; //your facebook app token
        //Build JSON required - Or use a string , copy+paste
        dynamic Data = new ExpandoObject();
        Data.get_started = new ExpandoObject();
        Data.get_started.payload = "GET_STARTED_PAYLOAD";

        Console.WriteLine("About to send : " + Newtonsoft.Json.JsonConvert.SerializeObject(Data));

        using (WebClient client = new WebClient())
        {
            client.Headers[HttpRequestHeader.ContentType] = "application/json";
            var result = client.UploadString(
                "https://graph.facebook.com/v2.6/me/messenger_profile?access_token=" + PAGE_ACCESS_TOKEN,
                Newtonsoft.Json.JsonConvert.SerializeObject(Data)
            );
            Console.WriteLine("Result : " + result);
        }
    }
}

}`
If you can't see how to do the rest using this method then I'm not sure how we can assist further.
Cheers

@leroibeukes  Thank you my friend!!!!! Now you've cleared the way! Many, many thanks!

@krconnect  You could share your code in C #. Please

@leroibeukes Many thanks, you could also share for Persistent Menu. please. in C#

Can anyone please help share code in c# for persistent menu? Thanks in advance.

I understood the process, but when I went to perform I could not. I'm still trying to build this menu that looks so simple, but it's not!

Hi Guys ....
Ok... I'll help you out and provide you with some sample code --- Expect it in the next day or two.
Cheers
Le Roi

@leroibeukes .. please share the code.

Sorry guys - been travelling , will get to it in the next day or two

tks

Similar to last one - just build the structure...
Note did not test this very well.
//Rextester.Program.Main is the entry point for your code. Don't change it.
//Compiler version 4.0.30319.17929 for Microsoft (R) .NET Framework 4.5
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Net;
using System.Net.Http;
using System.Dynamic;
namespace Rextester
{
public class Program
{
public static void Main(string[] args)
{
String PAGE_ACCESS_TOKEN = "MYTOKEN"; //your facebook app token
        //Build JSON required - Or use a string , copy+paste

        dynamic Data = new ExpandoObject();
        Data.persistent_menu = new ExpandoObject();
        Data.persistent_menu = new []
        {
            new { locale = "default",
			      composer_input_disabled = false,
                  call_to_actions = new []
                  {
                      new { type  = "postback",
                            title = "Menu Free Text",
                            payload = "menu1",//This is what the bot will receive
                          },
                      new { type  = "postback",
                        title = "Menu Free Text2",
                        payload = "menu2",

                      },
                          /* DIFFERENT MENU STRUCTURE */
                          /*
                      new {
                          type  = "nested",
                          title = "More",

                          call_to_actions = new []
                          {
                              new { type  = "web_url",
                                    title = "CLICK ME",
                                    url = "https://SomeURLThatWasWhiteListedINYOURFBDEVELOPERPROFILE.com",
                                    webview_height_ratio= "full",
							        messenger_extensions = true
                                  }
                          }
                      }*/
                  }
                }
        };

        Console.WriteLine("About to send : " + Newtonsoft.Json.JsonConvert.SerializeObject(Data));

        using (WebClient client = new WebClient())
        {
            client.Headers[HttpRequestHeader.ContentType] = "application/json";
            var result = client.UploadString(
                "https://graph.facebook.com/v2.6/me/messenger_profile?access_token=" + PAGE_ACCESS_TOKEN,
                Newtonsoft.Json.JsonConvert.SerializeObject(Data)
            );
            Console.WriteLine("Result : " + result);
        }
    }
}

}

Perfect! Menu created !!! Now I'm trying to get the return from the menu click!

Awesome- please let us know how you go .
You should receive as the payload "menu1" when you click the "Menu Free Text" button.
Use this to figure out which action to do.
Cheers


Improve Legrand 064882 cable outlet heat mode

Proposed change
Following https://github.com/zigpy/zha-device-handlers/pull/2807
Pilot wire mode has been renamed to heat mode.
Enum for device_mode has been removed as it's not used.
The value is now exposed and you can read and write the cluster of the attribute. This will allow the creation of a climate entity in ZHA to control the heat mode.
Additional information
A PR has be open in Home Assistant Core to add the support using climate entity : https://github.com/home-assistant/core/pull/113059
To use the climate entity, user will needed to pass the device in wire pilot mode by toggling the new switch entity : wire pilot mode

Checklist

[x] The changes are tested and work correctly
[x] pre-commit checks pass / the code has been formatted using Black
[ ] Tests have been added to verify that the new code works

After the cluster changes are cleaned up we should look at converting this to a v2 quirk instead

After the cluster changes are cleaned up we should look at converting this to a v2 quirk instead which would remove the need to open a PR in HA.

try this:
legrand.patch

After the cluster changes are cleaned up we should look at converting this to a v2 quirk instead which would remove the need to open a PR in HA.

legrand.patch

@dmulcahey How does it work with translation_key ? Where the translations file should be located?

@dmulcahey How does it work with translation_key ? Where the translations file should be located?

Translations will default to the attribute name. Strings.json will still need a HA PR

I updated to quirk v2.
I didn't add the enum to create the select entity because of multiple reason :

entity_type seems to not work with standard. Also, why is it called entity_type instead of entity_category? Standard is not a category, the category should be set to None instead.
the ZCL select entity replace _ by spaces in Home Assistant that make hard the usage of entity translations. IMO, it should convert the enum in lowercase and keep the _.
What do you think @dmulcahey?

tests will pass after the Zigpy bump I think.

entity_type seems to not work with standard. Also, why is it called entity_type instead of entity_category? Standard is not a category, the category should be set to None instead

Yeah, some classes like ZCLEnumSelectEntity (in ZHA) override the entity category if it's None for now.
The main use case is to provide config entities via quirks v2. I think this would be the first case where we'd have a select entity that's not a config entity.
https://github.com/zigpy/zha-device-handlers/issues/3030 even mentions that this device could provide a climate entity in HA. This is not possible via quirks v2, but might be worth considering?
FYI, the metadata and entity type is matched a ZHA class here.

the ZCL select entity replace _ by spaces in Home Assistant that make hard the usage of entity translations. IMO, it should convert the enum in lowercase and keep the _.

Yeah, the enum states aren't translatable at the moment. There's this PR: https://github.com/home-assistant/core/pull/109309, but I see some issues with state restoration when coming from an old version (due to _/ ) for ZHAEnumSelectEntity (used for non-ZCL stuff like IasWd).
That would need to be addressed (and the test for quirks v2 to see if translation keys are provided would need to be expanded).
It's still something I plan on looking at/working on, but the enums (split between quirks and ZHA atm) would all stay the same at least. Like you mentioned, ZHA would just lower-case them for the translation keys.

I also have an issue with tests

A helper for creating a quirk v2 device will be added.

https://github.com/zigpy/zha-device-handlers/issues/3030 even mentions that this device could provide a climate entity in HA. This is not possible via quirks v2, but might be worth considering?

Yes I was considering this too. I'm not sure my python level is enough for that but I can give a try 🙂
The idea is to map the 6 heat mode into 2 hvac mode and 5 presets :

heat - splitted into 5 presets :

comfort preset
comfort-1 preset
comfort-2 preset
eco preset
away preset

off

I already did something similar in my home assistant qubino custom component : https://github.com/piitaya/home-assistant-qubino-wire-pilot

Yes I was considering this too. [...] As I know, there is no standard attribute for the preset in the thermostat cluster right?

Correct, at least not one that's mapped to HA presets for the "generic thermostat implementation" in ZHA.
Some thermostats are implemented like this for presets: homeassistant/components/zha/climate.py#L578-L667 (and further below are some other examples).
The "comfort -1" and "comfort -2" presets might be an issue though?
(Also, other devices like the Aqara E1 thermostat currently just implements the preset mode (manual, auto, away) as a config select entity. Of course, it would be better if it were added to the climate entity though.)

#3030 even mentions that this device could provide a climate entity in HA. This is not possible via quirks v2, but might be worth considering?

Yes I was considering this too. I'm not sure my python level is enough for that but I can give a try 🙂 As I know, there is no standard attribute for the preset in the thermostat cluster right?
The idea is to map the 6 heat mode into 2 hvac modes and 5 presets :

heat - splitted into 5 presets :

comfort preset
comfort-1 preset
comfort-2 preset
eco preset
away preset

off

I already did something similar in my home assistant qubino custom component : https://github.com/piitaya/home-assistant-qubino-wire-pilot

Just my 2 cents :
pilot wire has 6 modes: comfort, comfort-1, comfort-2, eco, away and off (in my experience comfort-1 and -2 aren't used very often)
The off order is a "soft off" ie the heater stops heating but it's still powered.
Legrand 064882 cable outlet provides a "hard off" state, by toggling the switch in standard mode, that completely turns off the power (ie no power on the L wire)
It's a big advantage compared to the other devices I tried because, for example:

you can completely switch off the power over summer to prevent your kids to turn the heater on unintentionally, convenient if the heater doesn't have a physical switch
you can avoid electric smog when you don't absolutely need to heat (heaters have huge electric field >100V/m at 30 cm) still present in the soft off pilot wire state, and if you would like to turn it off automatically in the inter-season without toggling the circuit breaker once or twice a day !

What I'm trying to say is that you maybe should keep the 2 different off modes, mapping it for example like that;

heat - splitted into 4 (or 6 presets ?) :

comfort preset
comfort-1 preset?
comfort-2 preset?
eco preset
away preset
off preset (soft off)

off (hard off mode)

IMHO, it feels strange to have a climate entity for a device you can't actually set the temperature, just the mode.
On some heaters (like mine), you set up the comfort temp yourself, the solution can't be universal.
Also, that would give more intelligence than the device provides (you can't get the actual temperature for example, you don't know when it's heating or not unless you look at the consumption). That goes a little against HA mindset: stick to what the device provides. Otherwise, we should also add the total power consumption for the energy dashboard directly in the quirk.
A custom integration that handles that creates the climate for this particular device seems a better choice IMO.

IMHO, it feels strange to have a climate entity for a device you can't actually set the temperature, just the mode. On some heaters (like mine), you set up the comfort temp yourself, the solution can't be universal. Also, that would give more intelligence than the device provides (you can't get the actual temperature for example, you don't know when it's heating or not unless you look at the consumption). That goes a little against HA mindset: stick to what the device provides. Otherwise, we should also add the total power consumption for the energy dashboard directly in the quirk. A custom integration that handles that creates the climate for this particular device seems a better choice IMO.

My suggestion https://github.com/zigpy/zha-device-handlers/issues/3030 was inspired by the solution I'm actually using: a custom integration for the Heatzy Pilote device. It creates a climate entity (I agree it's weird without temperature setting!).

I'm also using this convenient Heatzy Pilote custom card

It just have to be ergonomic for the end user I guess, regardless of the entity domain 😉

It just have to be ergonomic for the end user I guess, regardless of the entity domain 😉

Having that useless big slider, a wrong information (heating, with this device we don't know when it's actually heating) and 2 clicks to do what the device is supposed to do (change a mode) is not what I can call ergonomic.
TBH, and as I said directly to @piitaya, if this entity would be a climate instead of a select, user should not use the climate card, just a tile card with the presets features, the climate card with this device is a non-sens to me.

Having that useless big slider, a wrong information (heating, with this device we don't know when it's actually heating) and 2 clicks to do what the device is supposed to do (change a mode) is not what I can call ergonomic. TBH, and as I said directly to @piitaya, if this entity would be a climate instead of a select, user should not use the climate card, just a tile card with the presets features, the climate card with this device is a non-sens to me.

I agree that a climate card is not designed for this case scenario, however we must be sure that giving the wrong class (ie not climate) to a device supposed to drive a heater wouldn't lead to disadvantages in the HA ecosystem, for example in the interactions with other integrations supposed to deal with climate entities (voice assistants, cards or custom cards, or custom integrations designed to work around climate management, etc...)

I agree that a climate card is not designed for this case scenario, however we must be sure that giving the wrong class (ie not climate) to a device supposed to drive a heater wouldn't lead to disadvantages in the HA ecosystem, for example in the interactions with other integrations supposed to deal with climate entities (voice assistants, cards or custom cards, or custom integrations designed to work around climate management, etc...)

Yeah, talking with Paul I realized my only issue is finally the climate card and the more info dialog. If the auto-generated dashboard use a tile card in this situation instead of a climate, then I'm fine with it.

I removed the thermostat cluster, the zha climate integration uses the manufacturer cluster.

Hi, will this PR be merged some day, or is there a way to test its current progress ?
Thanks!

I need to write tests in ha core but I don't have much time at the moment. I keep you updated 😊

Great ! Thanks 😉

Hi, any update on this one? Winter is coming ... 🥶

@luke7101 Yeah exactly ! I stopped a bit since it was summer but I'm going to work on it because I'll need it too 😅

Hey guys,
Any update on this ? Seems linked to the issue I'm trying to solve. https://github.com/zigpy/zha-device-handlers/issues/3499
Cheers
Erik

Hello,
I also need this fix.
Thanks for the great work on the project.

I'm also interested, and would be happy to help 🙁

Hello @piitaya, qu'est-ce que ça donne le développement ? J'ai vu des interactions et une citation ici https://github.com/zigpy/zha-device-handlers/issues/3553

I'm busy right now so I don't have enough time for that 😅 I will try to take a look soon as I also need it for my personal usage 😅

Hey, I saw some progress here! Where are we up to ? 😊

Just missing some code to get the climate entity working in HA. But I'm busy with the next 2025.1 as I also work for the frontend. I hope I can have this for 2025.2 release 🙂


Phase 2 Enhancements

Taquito lesson

[ ] we would need to figure out how to add a piece of code that will tell us that code was originated from cryptocodeschool
[ ] Print statement output in a new line.
[x] Make javascript/python code snippet color-coded.

SmartPy Compiler

[ ]  Loading indicator when running the code.
[ ]  Debug code for inter-contract calling.
[ ] Make compile-time errors more descriptive.
[x] Increase transition duration for Michelson pane.
[ ] Handle edge case where the compiler isn't fully loaded yet
[ ] Only load in modules where it's being used.

Learning interface editor

[ ] Remove/fix the [control + z] command for undoing, it doesn't update the values.

Remove/fix the [control + z] command for undoing, it doesn't update the values.
Where do you want me to remove this from? Module-4?

When I make a change to the editor and hit (control + z) command for
undoing the change. It doesn't register changes for shortcuts, only when I
type something that it updates it.
On Tue, 10 Nov, 2020, 1:36 pm manangouhari<EMAIL_ADDRESS>wrote:

Remove/fix the [control + z] command for undoing, it doesn't update the
values.
Where do you want me to remove this from? Module-4?
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/buidl-labs/crypto-code-school-inside-tezos/issues/134#issuecomment-724534916,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AD6YATYWV3PZMZP52ZOIQFTSPDX75ANCNFSM4TMOLI5Q
.

When I make a change to the editor and hit (control + z) command for undoing the change. It doesn't register changes for shortcuts, only when I type something that it updates it.
…
On Tue, 10 Nov, 2020, 1:36 pm manangouhari, @.***> wrote: Remove/fix the [control + z] command for undoing, it doesn't update the values. Where do you want me to remove this from? Module-4? — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub <#134 (comment)>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AD6YATYWV3PZMZP52ZOIQFTSPDX75ANCNFSM4TMOLI5Q .

Got it.

@manangouhari please check if all the issues on this thread are closed.
If yes, close this issue with a relevant comment.
If no, this is important even for Reddit launch and hence filing it under the Project "Ready for launch on Reddit" will make sense.


u_reg used for convert decorators

Currently one standard unit registry is used by the conversion decorators. This needs to either be passed in (potentially by another decorator?) or the u_reg needs to have all additions for all expected units. Currently just has 'TODO: find more elegant way to do this with all definitions'

Currently uses domains.registry_adds_list() for turbidity and salinity (includes pct_list). The only definitions from registry_adds_list() not added to the decorator u_reg is bacteria_list, and none of those have existing conversion functions in convert module.
This could be made more expandable.


[ignore] trigger Docker Hub build/push (latest) 3

PR for triggering build/push action in latest branch. Not meant for merge (duplicate on a new branch due to merge conflicts on previous one)

/canary

:broken_heart: Test Failed - ci-test


Add globbing and lists to netstat whitelist support

it appears that successes are also being reported in failure..?

Whoops. Fixed.

Looks much better. Thanks!


[6.8] [logstash] add rbac custom annotations (#764)

Backports the following commits to 6.8:

[logstash] add rbac custom annotations (#764)

jenkins test this please


[flink][cdc] Add operator and transformation name for cdc pipeline

Purpose

A tiny refactor for better experience on Flink UI.

Tests

API and Format

Documentation

+1


Weave and IPv6

Hi,
I tried a deployment, everything is going well but I have the message "Nothing to show".
I activated debug mode and I notice this behavior on the weave scope agents:
<probe> DEBU: 2020/03/23 13:46:20.521538 background /proc reader: full pass took 5.764523576s
<probe> DEBU: 2020/03/23 13:46:20.521590 background /proc reader: new rate limit period 500ms
<probe> DEBU: 2020/03/23 13:46:20.870727 DNSSnooper: caught DNS lookup: XXX -> map[192.168.X.X:{}]
<probe> DEBU: 2020/03/23 13:46:20.870811 DNSSnooper: caught DNS lookup: XXX -> map[192.168.X.X:{}]
<probe> DEBU: 2020/03/23 13:46:20.870832 DNSSnooper: caught DNS lookup: XXX -> map[192.168.X.X:{}]
<probe> DEBU: 2020/03/23 13:46:21.054612 DNSSnooper: caught DNS lookup: weave-scope-app.weave.svc.cluster.local -> map[]
<probe> DEBU: 2020/03/23 13:46:21.054704 DNSSnooper: caught DNS lookup: weave-scope-app.weave.svc.cluster.local -> map[]
<probe> DEBU: 2020/03/23 13:46:21.054737 DNSSnooper: caught DNS lookup: weave-scope-app.weave.svc.cluster.local -> map[]

In a container,
host weave-scope-app.weave.svc.cluster.local
weave-scope-app.weave.svc.cluster.local has IPv6 address fd00:10:96::XX

Does Weave Scope work with a Kubernetes cluster in IPv6?

I'm pretty sure it needs some work to handle IPv6. The code that interprets network connections is hard-coded for IPv4 in places, e.g. https://github.com/weaveworks/scope/blob/7c838affaaa0ca12f8510c2d28f1e1853fa85d2e/probe/endpoint/four_tuple.go#L14


vtkPNGWriter.h file not found

I am getting a vtkPNGWriter.h file not found error in irtkVolumeToMesh.cc. My VTK version is 6.3, other VTK headers are found. The header file is present in my VTK directory.
This compilation error is caused by a missing vtkIOImage component. But on the other hand, it occurs in a C++ module which for now should be removed (cf. #3).

Next I am also missing vtkOpenGLRenderer which is also used only by irtkVolumeToMesh.

Will close this issue by resolving #3 via removing the offending source files from IRTK.


Feature/show2 1085 release the remaining components

Why

clean up code and release the remaining components.

[x] CollapsibleTabView
[x] TabView
[x] ClampText
[x] InfiniteScrollList
[x] Haptics

upgrade react-native-reanimated to v2.10.0.

How
About TabView
I split it into 2 components:
CollapsibleTabView is a 'pure' component, It doesn't depend on our design system. the default style is react-native-tab-view .
TabView is use our design-system style, we can add many features to it.
this way will make it easy to customize, developers can choose the components they want.
Test Plan

check if List/Tabs etc components work on web/native.

expo storybook preview should be fixed after this is merged
https://github.com/showtime-xyz/showtime-frontend/pull/1419


Add the  tag

The <x-expr> tag is an alternative to the inline {...} syntax whose purpose is to:

Support multi-line expressions.
Support expressions that contain braces.

Addressed in #12.


use N trace

I know you did not make a choice on this but. went ahead and made the PR. I do see some perf improvements when i can "remove" all the loggings in production

I would prefer basicdom to have no knowledge of nativescript, hence the logger injection. We could use the logger's enabled property instead, but I am having trouble seeing a perf improvement (or even significant difference) over what is there now
https://jsben.ch/htd3K

@halfnelson the perf comes from removing "all logs" through tree shaking. Right now with your debug system it really hard to do so.
If you dont want basicdom to have any knowledge of N i can simply import and export Trace inside Logger.
I also think it would be great for all N community to handle logs the same way. At the end we as N could provide an official way to remove all logs in prod which when you do it for all plugins + core makes a difference (code size but also a lot less if tests method calls).


Rename file (NBitcoin/UInt2561.cs -> NBitcoin/UInt256.cs)

I don't know why the diff is crazy.
With Hide whitespace changes on https://github.com/MetacoSA/NBitcoin/pull/853/files?diff=unified&w=1

We should just remove this tt file.

We should just remove this tt file.

Done, but I can't fix the conflicts.

just did it

just did it

The tt file is still on master, and shouldn't we rename the UInt2561 file?

I did it; I think I messed up my merge before


duplicate para

last para in https://learn.microsoft.com/en-us/azure/active-directory/saas-apps/aws-single-sign-on-tutorial?toc=https%3A%2F%2Flearn.microsoft.com%2Fen-us%2Fazure%2Farchitecture%2Ftoc.json&bc=https%3A%2F%2Flearn.microsoft.com%2Fen-us%2Fazure%2Farchitecture%2Fbread%2Ftoc.json#add-aws-iam-identity-center-from-the-gallery is nearly a duplicate of the second last

Document Details
⚠ Do not edit this section. It is required for learn.microsoft.com ➟ GitHub issue linking.

ID: f8e131bf-99d7-a850-a597-ac02b9f6c3a9
Version Independent ID: a27625d3-cf35-ffaf-5734-d1a2bbcdd60c
Content: Tutorial: Azure AD SSO integration with AWS IAM Identity Center (successor to AWS Single Sign-On) - Microsoft Entra
Content Source: articles/active-directory/saas-apps/aws-single-sign-on-tutorial.md
Service: active-directory
Sub-service: saas-app-tutorial
GitHub Login: @jeevansd
Microsoft Alias: jeedes

@joycepg
Thanks for your feedback! We will investigate and update as appropriate.

@joycepg
Thanks for pointing this out. I have performed the required changes and it will reflect in the document soon.


Add support for orangepi-plus2e

Signed-off-by: Alex J Lennon<EMAIL_ADDRESS>

Can one of the admins verify this patch?

@resin-jenkins ok to test

Hi @ajlennon thanks for the PR.
I have a few things to ask you.
Can you follow the contributions guideline from https://github.com/balena-os/balena-allwinner#pull-requests? (most notable, we need at least 1 Changelog-entry in one of your commits in this PR)
Also, can you split the PR in multiple commits, one for each file change?
Also, can you add community in the coffee file like in https://github.com/balena-os/balena-allwinner/blob/master/orange-pi-zero.coffee#L11?

Will do! Thanks for the feedback

https://github.com/balena-os/balena-allwinner/pull/71


Sticky Top Bar not working after 6.5.3

What should happen?
Top bar should be sticky when page scrolled.
What happens instead?
Nothing.
Test Case and/or Steps to Reproduce (for bugs)
I was following to tutorials on the documentation and I couldn't manage to work sticky top bar. Then I downgraded 6.4.3 and it started to work.
Here is the test case, I only changed the version numbers.
Foundation 6.4.3 (Working)
https://codepen.io/ecabuk/pen/JjoYNMq
Foundation 6.6.0 (Not working)
https://codepen.io/ecabuk/pen/LYEpyew

6.5.3:
https://codepen.io/DanielRuf/pen/PowPmrj

Seems to work here: https://codepen.io/DanielRuf/pen/KKwdmOx?editors=1010

Works here too:
https://codepen.io/DanielRuf/pen/XWJmgWL

These are different:
<EMAIL_ADDRESS>https://cdnjs.cloudflare.com/ajax/libs/foundation/6.6.0/js/foundation.min.js
The Cloudflare version works.

Ugh, this is 6.5.3: https://cdnjs.cloudflare.com/ajax/libs/foundation/6.6.0/js/foundation.min.js
cc @rafibomb @joeworkman

Found the culprit using git bisect.
git bisect bad
3fb505600fa8e61e7ef76c5f6b8b999650f99192 is the first bad commit
commit 3fb505600fa8e61e7ef76c5f6b8b999650f99192
Author: Nicolas Coden<EMAIL_ADDRESS>Date:   Mon Aug 6 23:55:30 2018 +0200

    fix: validate "MediaQuery.is()" input and returns an error for invalid modifiers

 js/foundation.util.mediaQuery.js | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

Got this error:
Error:
      invalid breakpoint passed to MediaQuery.is().
      Expected a breakpoint breakpoint name formatted like "<size> <modifier>", got "medium".

Updated to 6.6.1 but the problem is still here...

Probably some cache.

using 6.6.1 but issue is still there.
@kevinmu17  what file did you do your changes in?

@guyvanbael please provide the URL of the file that you have sued. On cdnjs the version 6.6.1 contains the code of 6.5.3.

@DanielRuf my project was created using the cli.
<div data-sticky data-options="stickyOn: small; marginTop:1;" style="width:100%;" id="pageStart">
It seems to work when marginTop is set to 1, but then you have a margin of course. So i worked around it by adding an id and setting margin-top to 0


Documentation Supplement

Looking forward to this project.
Can you provide more complete best practice documents?  Including: installation setup, configuration instructions, production environment recommendations  etc.

We are working hard to clean up the code and the documentation work is going on. Hope to be ready in the next two weeks.

@Donghui0 the Chinese documentation is almost ready, but the English version is still in progress.
https://deepflow.yunshan.net/metaflow-docs/zh/install/overview/


TCK: Replace LRAClientOps#isLRAFinished with SPI call

As per Gitter discussion, replace the current way of checking of active LRA in the TCK (try enlisting) with direct SPI.

+1

Changed the title of issue after the discussion in the PR #320


Is it recommended to use @babel/parse or @putout/babel?

Version (npm -v): 9.6.4
Node Version node -v: 20.1.0
OS (uname -a on Linux): Mac
Browser name/version: N/A
Used Command Line Parameters: N/A

Hey, in the Example section you recommend using @babel/parser however I faced some issues, for example when printing code like this:
type test = {
fn: () => void
}

Output:
type test = {
fn: () =>
}

Note: No void keyword printed.
It took me some time to figure out what's going on, only after looking at your tests I realized that you are using @putout/babel.  Not sure whether it's a bug or just README has to be tweaked.

Recommended way is using @putout/babel, this is Babel 8 bundled to CommonJS

Is it works for you?

@coderaiser Yes, it worked out 👍


Gpu grid layer7 rename

For #2084

Background

Re-name GridLayer to CPUGridLayer
Re-name NewGridLayer to GridLayer
Re-name _GPUGridLayer to GPUGridLayer, make it non experimental export.
Update docs/tests etc.

Change List

Rename: GridLayer to CPUGridLayer

Coverage increased (+0.006%) to 62.089% when pulling 53a9bca1a1eebb64ac38b5de4f115f278b645a42 on GPUGridLayer7_Rename into 44c2c80fd46904ae9b2fd7c508c45f11ff334b58 on GPUGridLayer6_docs.


Removing No-SQL options

Since JSON is perfectly supported in Azure SQL DB and SQL Server

Learn Build status updates of commit efccd8d:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

docs/sql-server/end-of-support/sql-server-end-of-support-overview.md
:white_check_mark:Succeeded

For more details, please refer to the build report.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
For any questions, please:Try searching the learn.microsoft.com contributor guidesPost your question in the Learn support channel

#sign-off


required documents table

Kyc documents table
Fix #92
Test URLs:

Before: https://main--piramal--aemsites.hlx.page/home-loans
After: https://issue-97-table--piramal--aemsites.hlx.page/home-loans

@asthabh23 done

a lint issue exists for duplicate rule

Fixed, forgot to push it before

@mind-adobe , PAN card text is shifted next to Mandatory Documents
can you pls recheck?


is-pwa check.

 Not sure what you want to replace here

Fixed it.

We're restarting the project, so I'm closing this

👍


[DEV] Register Button on Homepage Doesn't Redirect Correctly

Development Task 🔧
What? ❓
Clicking the "Register" button on the home page should open the Create Your Account version of the login page, could you please change the implementation to support this?

@LeonardoKamino not high priority right now, but could you look at this in the next week or so please? Thanks!


Content Aware Friendly Name not working on group names.

I tried this:
group.verlichting_woonkamer:
  friendly_name: Verlichting Woonkamer
  friendly_names:
    group.verlichting: Woonkamer
    group.woonkamer: Verlichting

Which doesn't seem to work.
It does work (as expected) on lights within groups.

Could you post you whole customize section?
Are you enabling custom UI via
customize_glob:
    "*.*":
      custom_ui_state_card: custom-ui

?

Don't know when it started working (have upgraded to 0.45 in the meantime) but it does now. Now lets try the new release!


lv_img_decoder.c Wrap filesystem calls in LV_USE_FILESYSTEM macro

I don't use the lv filesystem, so i cannot verify this correctness; but i just wrapped all the fs-related called in LV_USE_FILESYSTEM. Should be fine. Also fixed misc compiler warnings/errors.

Looks fine to me!


Update stake-requirements.md

So in this document it shows the minimum requirement to run Mainnet Sapphire Node is to be in Active Validator Set that required to be staked at least 5,000,000 ROSE https://docs.oasis.io/get-involved/run-node/paratime-node/#mainnet-requirements But here it only shows 50,000 ROSE and doesn't talk about to be in the active validator set.

Related https://github.com/oasisprotocol/docs/issues/978


Seperate Types submodule into own crate

Similarly to postgres-types which is part of the rust-postgres crate bundle. This would allow to just have the types as a dependency, namely the ToSql Trait. This would for example help in making a query builder crate such as sea-query. Adding all of rusqlite would be too much. See https://github.com/SeaQL/sea-query/issues/15.

Hmm, not really sure I follow. In what situation would someone want to depend on rusqlite-types when they don't want to depend on rusqlite itself.
That is, if they do want to depend on rusqlite, then the whole dependency makes sense.
If they don't, then even the rusqlite-types dependency is pointless and should be behind a cargo feature.
Putting things in a separate crate is somewhat limiting, as it means we have to worry about the orphan rule/coherence more.

The idea is to not require the entirety of rusqlite with all the batteries included and need to deal with all the other features that are not type specific that it provides. With the old cargo feature resolver this is less of an issue, but with the new feature resolver this can become quite the head ache and lead to binary bloat.
Not only that but having the types module into its own crate can speed up incremental compilation since it will be its own compilation unit.
While I agree that they will eventually need to depend on the full rusqlite crate at one point in the chain, this reduces the size of dependencies that only really need the ToSql trait.
Regarding the orphan rule, I completely understand, however from #942 it seems already really well isolated.

Hmm, my experience with the new feature resolver is that it leads to less bloat, so I'm confused by your assertion there.
It may speed up incremental compilation slightly, but total compilation time scales with the size of your dependency graph more than the size of the code in it, so I'm not sure I consider that especially convincing.

I would have though having duplicates of the same dependency with different features would lead to more bloat.

I missed this comment.

I would have though having duplicates of the same dependency with different features would lead to more bloat.

Features are still unified. You won't have two copies of the same crate with different features in your crate graph (unless they're different semver versions, which doesn't really apply to rusqlite because of linking with sqlite).
The difference is that now if you have a feature turned on by a build-dependency, it won't be turned on for the runtime dependency.

That being said, I think I've softened on this a lot.
The biggest benefit to me is that rusqlite-types would likely be more semver-stable than rusqlite. Unfortunately, taking advantage of this has a downside in that it might confuse if rusqlite-types and rusqlite versions aren't always the same, but since most users would just access -types via rusqlite::types, it's hopefully fine.
That said, I think it probably needs slightly more considered handling than including just being the types module (Or maybe not — I'd like to give it more thought though). For example, it's possible that the types in params.rs should be included in it too... (Or maybe they shouldn't? It's hard for me to say...)
I'll think about this a bit more, though.

I agree about the dangers of mismatched versions of rusqlite-types and rusqlite - it's a real problem with some popular crates after a few breaking semver releases.
You could do this in one crate with feature resolution, but it would be the opposite. A crate could include rusqlite = { Version = ..., default-features = false } to nuke its transitive dependencies and runtime logic (it would be up to that crate to decide if it still wants to place the rusqlite dependency behind a feature gate or not); in rusqlite, a default-enabled feature (basic) would enable all the current code and bring in all the current dependencies.

Yeah, I don't think there's a reason to do this in one crate with feature resolution? What would the benefit be? I also think the request was brought by a misunderstanding of how resolver=2 functions.
Given that, I think I'm going to close this.


Need to adjust markers to represent more information clearer, specifically....

Last location vs. last several locations.
Change size & transparency so underlaying map can be seen.
Make sure color works with color blindness.
Make color not same as floodplain, so something other than blue.

Done https://github.com/JustinGOSSES/spoken-floodplain/commit/2dcfa659b34205df2ca93c5dedf84bdaae44d49a


Allow uploading images

For some music it makes sense to use text, but for others you want sheet music. Allow uploading images.

Fixed in 1c7cf54af2cb837b1b160d90ae8666bc1b3e09a2

Fixed in 1c7cf54af2cb837b1b160d90ae8666bc1b3e09a2


:bug: Remove mainpage.md requirement in doxygen.conf

This should resolve the bug where docs fail.

Merging anyway. CI downloads doxygen file from main. Created #5 to hold this info.


Pathconf names

Implementation for os.pathconf_names  resolves #4494

Let me know if I did something incorrectly -- I see as part my pull requesets commits authored by others....   The two changes I'm looking to pull in for pathconf_names are https://github.com/RustPython/RustPython/pull/4508/commits/d8fe7787bf9690d86bb7c57885d7fa0b0f1fb8be and https://github.com/RustPython/RustPython/pull/4508/commits/df482663717dd84b570cb7e7e0007f3b8ede021b

After CI completes, feel free to do a git rebase ... followed by a git push --force.

I rebased it. git rebase is very useful tool to send patches.
https://docs.gitlab.com/ee/topics/git/git_rebase.html

I rebased it. git rebase is very useful tool to send patches. https://docs.gitlab.com/ee/topics/git/git_rebase.html

Thanks -- I was looking at trying to do that but it didn't seem to look right as I still ended up with 2 additional changes -- I was thinking my baseline wasn't quite right or I did something incorrectly.

I'm looking at the error --    I found an online free online macos simlulator and was able to get the error 22 manually trying the command os.pathconf('/',21)   but that isn't conclusive.   (pathconf worked for indexes 0-20).
I'd like to check the the PathconfVar entries for darwin...   but darwin doesn't seem to be a confguration check within PathconfVar
It looks like there are some platforms which may have pathconf indexes that are greater then 20  (e.g.  in libc
libc:   src/unix/haiku/mod.rs:pub const _PC_REC_MAX_XFER_SIZE: ::c_int = 32;
though on linux the same parameter is index 15.
libc    src/unix/linux_like/linux/mod.rs:pub const _PC_REC_MAX_XFER_SIZE: ::c_int = 15;
I suppose this is more a of libc specfic question does anyone know how can I tell which of the libc flavor will be used on macos/darwin? (and therefore which pathconf indexes value will show up in PathconfVar)

Thank you for contributing!


Error: manifest does not contain exactly

Output of helm version: 3.5.0
Output of kubectl version: v1.19.9
Cloud Provider/Platform (AKS, GKE, Minikube etc.):

I execute helm3 chart list ,resoult error :  Error: manifest does not contain exactly   ,but sometimes other server without this error

Hi @Ruimingwang. In order to determine next steps we actually need some way to test and verify this error. That way we can determine a cause and a possible fix. Please provide more information necessary to reproduce the error. Thanks.


Add code formatting with Prettier

Add Prettier config and dependencies for better code formatting for .ts and .tsx.
Closes #187
Options: https://prettier.io/docs/en/options.html
Thoughts:

I used "singleQuote": true but in some files, we have double quotes. I'm not sure how that'll affect those/if the double quotes are necessary? If yes, I'll change to false.
How do we want to config arrowParens? Read in options link.

To enable Pretter in VS Code:

Download the extension
Add "editor.formatOnSave": true to workspace settings.

Note: We should add the npm run lint to deployment scripts in case someone isn't using VS Code to auto format or isn't using auto format.
Also relates to #175, we should include a setup for VS Code in the README.

I would prefer  always for arrow links

@erickzhao should we wait for #176 to be merged before merging this one?
After this goes through, we should probably do another PR with all the files reformatted with this config

@erickzhao should we wait for #176 to be merged before merging this one?
After this goes through, we'll probably have another PR with all files reformatted with this config

@erickzhao should we wait for #176 to be merged before merging this one?

I think so.

After this goes through, we'll probably have another PR with all files reformatted with this config

Definitely! Also maybe add Travis back in to make sure unlinted code doesn't get PRed.

@hackmcgill/dev @hackmcgill/directors
As an aside, can we agree to have these options enabled to TRUE?

Motivation: https://robots.thoughtbot.com/no-newline-at-end-of-file

Added folder-specific vs code settings. Downside to this is that it's forced on anyone who clones/works on the repo. Upside is auto formatting?
Can't force extensions to be downloaded but at the very least, they can show up as recommended extensions 🤷♀


Enable nullable

This PR

Enables nullable
Replaces == null with is null
Seals a few internal classes
Remove a single allocation by creating a static byte array

Nullable is disabled in various classes with initialization patterns that don't work well with nullable until C# v9.

@adamhathcock Ready for review.
If things look good, I'll do another PR that focused on eliminating allocations. I spotted at least 20 spots that could be optimized but didn't want this PR to get to big.

I should have read your general disabling comment.  I can't wait for C#9 improving general usage.  I didn't bother turning on nullables in this because it was a lot of work.


Ensure that BYTE_ORDER is set

The BYTE_ORDER C preprocessor macro is needed by lwip, but the lwip includes (and -contrib packages) don't always include the correct system includes to pick up a definition of BYTE_ORDER. It turns out that there is no standard include file for getting BYTE_ORDER, so this PR relies on a cmake variable, but only if BYTE_ORDER is not already defined.

closes #534


graphql_multipart_request: Must provide query string.

Trying to add product image. Running into:
Exception: Must provide a query string.  extensions: {'exception': {'code': 'ValueError', 'stacktrace': ['ValueError: Must provide a query string.']}}
Here's my data I'm sending.
<MultipartEncoder: {'operations': '{"query": "mutation ProductImageCreate($product: ID!, $image: Upload!, $alt: String) {\\n            productImageCreate(input: {alt: $alt, image: $image, product: $product}) {\\n                image{\\n                    id\\n                }\\n                productErrors {\\n                    field\\n                    message\\n                }\\n            }\\n        }", "variables": {"product": "UHJvZHVjdFZhcmlhbnQ6MjE1Mg==", "image": "0", "alt": ""}}', 'map': '{"0": ["variables.image"]}', '0': ('image_placeholder.jpg', <_io.BufferedReader name='/path/image_placeholder.jpg'>, 'image/png')}>

Hi, so I went ahead and used a package aiogqlc to make the multipart request, made everything work smoothly. The only difference is you need a JWT auth-token in your headers.
Here's my code:
from aiogqlc import GraphQLClient
import asyncio

headers = {
    'Authorization': "JWT Token Information"
}

client = GraphQLClient('http://localhost:8000/graphql/', headers=headers)

query = """
    mutation ProductImageCreate($product: ID!, $image: Upload!, $alt: String) {
            productImageCreate(input: {alt: $alt, image: $image, product: $product}) {
                image{
                    id
                }
                productErrors {
                    field
                    message
                }
            }
        }
"""

variables = {
    "product": 'product_id',
    'image': open('ImagePath.jpg, 'rb'),
    'alt': ''
}

async def foo():
    response = await client.execute(query, variables=variables)
    print(response)

if __name__ == '__main__':
    asyncio.get_event_loop().run_until_complete(foo())


Create test.md

Here is a result of fact-checking:
On September 12, 2023, CoinEx experienced a massive security breach due to a private key compromise. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
The attacker exploited CoinEx's hot wallets and extracted approximately $20 million worth of assets across 9 different chains. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
Lazarus Group is suspected to be behind the theft. :white_check_mark:
https://www.elliptic.co/blog/how-the-lazarus-group-is-stepping-up-crypto-hacks-and-changing-its-tactics
CoinEx lost $52,847,077 in total across different chains. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx suspended services temporarily. :white_check_mark:
https://twitter.com/coinexcom/status/1701651414991397176
CoinEx announced the resumption of deposit and withdrawal services on September 21, 2023. :white_check_mark:
https://announcement.coinex.com/hc/en-us/articles/19319131621908-CoinEx-Will-Resume-Deposit-and-Withdrawal-Services-of-BTC-ETH-USDT-USDC-etc-Estimated-on-Sep-21-2023

Here is a result of fact-checking:
CoinEx, a crypto trading platform, experienced a massive security breach on September 12, 2023. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
The attacker exploited CoinEx's hot wallets and extracted approximately $20 million worth of assets across 9 different chains. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
The Lazarus Group is suspected to be behind the CoinEx security breach. :white_check_mark:
https://www.elliptic.co/blog/how-the-lazarus-group-is-stepping-up-crypto-hacks-and-changing-its-tactics
CoinEx lost $52,847,077 in total across various chains. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx announced the resumption of deposit and withdrawal services on September 21, 2023. :white_check_mark:
https://announcement.coinex.com/hc/en-us/articles/19319131621908-CoinEx-Will-Resume-Deposit-and-Withdrawal-Services-of-BTC-ETH-USDT-USDC-etc-Estimated-on-Sep-21-2023

Here is a result of fact-checking:
On September 12, 2023, CoinEx experienced a massive security breach due to a private key compromise. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
The attacker exploited CoinEx's hot wallets and extracted approximately $20 million worth of assets across 9 different chains. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
Lazarus Group is suspected to be behind the theft. :white_check_mark:
https://www.elliptic.co/blog/how-the-lazarus-group-is-stepping-up-crypto-hacks-and-changing-its-tactics
The stolen funds were transferred to specific addresses on different blockchains. :white_check_mark:
Multiple sources
CoinEx lost $52,847,077 in total across multiple chains. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx suspended its services temporarily after the security breach. :white_check_mark:
https://twitter.com/coinexcom/status/1701651414991397176
Elliptic Research confirmed the onchain connection between CoinEx and Stake.com hacks. :white_check_mark:
https://www.elliptic.co/blog/how-the-lazarus-group-is-stepping-up-crypto-hacks-and-changing-its-tactics
CoinEx announced the resumption of deposit and withdrawal services on September 21, 2023. :white_check_mark:
https://announcement.coinex.com/hc/en-us/articles/19319131621908-CoinEx-Will-Resume-Deposit-and-Withdrawal-Services-of-BTC-ETH-USDT-USDC-etc-Estimated-on-Sep-21-2023
The primary cause of the security breach was the compromise of CoinEx's private key for hot wallets. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
The Lazarus Group's attack methodology of choice is social engineering. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/

Here is a result of fact-checking:
On September 12, 2023, CoinEx experienced a massive security breach due to a private key compromise. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
The attacker exploited CoinEx's hot wallets and extracted approximately $20 million worth of assets across 9 different chains. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
Lazarus Group is suspected to be behind the theft. :white_check_mark:
https://www.elliptic.co/blog/how-the-lazarus-group-is-stepping-up-crypto-hacks-and-changing-its-tactics
The stolen funds were transferred to various addresses and laundered via distribution between multiple addresses and smart contracts. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $52,847,077 in total across multiple chains. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $18,324,848 in Ethereum. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $6,286,018 in Binance Smart Chain. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $288,072 in Polygon. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $11,119,353 in Tron. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $2,496,432 in Solana. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $6,082,389 in Bitcoin. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $447,574 in Bitcoin Cash. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $6,113,201 in Ripple. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $1,689,190 in XDAG. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
Funds were drained from CoinEx's Ethereum hot wallet for 408,741 DAI on September 12, 2023, 01:21 PM UTC. :white_check_mark:
https://etherscan.io/tx/0x9e8d4d98d815a1725031f7f5f92de42f999045bef70eedc64baf6c15ca230eaa
CoinEx temporarily suspended services on September 12, 2023, 05:38 PM UTC. :white_check_mark:
https://twitter.com/coinexcom/status/1701651414991397176
Elliptic Research confirmed the onchain connection between CoinEx and Stake.com hacks. :white_check_mark:
https://www.elliptic.co/blog/how-the-lazarus-group-is-stepping-up-crypto-hacks-and-changing-its-tactics
CoinEx announced the resumption of deposit and withdrawal services on September 20, 2023, 09:17 AM UTC. :white_check_mark:
https://announcement.coinex.com/hc/en-us/articles/19319131621908-CoinEx-Will-Resume-Deposit-and-Withdrawal-Services-of-BTC-ETH-USDT-USDC-etc-Estimated-on-Sep-21-2023

Here is a result of fact-checking:
On September 12, 2023, CoinEx experienced a massive security breach due to a private key compromise. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
The attacker exploited CoinEx's hot wallets and extracted approximately $20 million worth of assets across 9 different chains. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
Lazarus Group is suspected to be behind the theft. :white_check_mark:
https://www.elliptic.co/blog/how-the-lazarus-group-is-stepping-up-crypto-hacks-and-changing-its-tactics
The stolen funds were transferred to the attacker's addresses and then laundered via distribution between multiple addresses and smart contracts. :white_check_mark:
https://www.elliptic.co/blog/how-the-lazarus-group-is-stepping-up-crypto-hacks-and-changing-its-tactics
CoinEx lost $52,847,077 in total across multiple chains. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $18,324,848 in Ethereum. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $6,286,018 in Binance Smart Chain. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $288,072 in Polygon. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $11,119,353 in Tron. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $2,496,432 in Solana. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $6,082,389 in Bitcoin. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $447,574 in Bitcoin Cash. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $6,113,201 in Ripple. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $1,689,190 in XDAG. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
Funds were drained from CoinEx's Ethereum hot wallet for 408,741 DAI on September 12, 2023, 01:21 PM UTC. :white_check_mark:
https://etherscan.io/tx/0x9e8d4d98d815a1725031f7f5f92de42f999045bef70eedc64baf6c15ca230eaa
CoinEx temporarily suspended services on September 12, 2023, 05:38 PM UTC. :white_check_mark:
https://twitter.com/coinexcom/status/1701651414991397176
CoinEx announced the resumption of deposit and withdrawal services on September 20, 2023, 09:17 AM UTC. :white_check_mark:
https://announcement.coinex.com/hc/en-us/articles/19319131621908-CoinEx-Will-Resume-Deposit-and-Withdrawal-Services-of-BTC-ETH-USDT-USDC-etc-Estimated-on-Sep-21-2023
Lazarus Group is suspected to be behind the theft of funds from CoinEx. :white_check_mark:
https://www.elliptic.co/blog/how-the-lazarus-group-is-stepping-up-crypto-hacks-and-changing-its-tactics

Here is a result of fact-checking:
CoinEx, a crypto trading platform, experienced a massive security breach on September 12, 2023. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
The security breach resulted in the loss of approximately $20 million worth of assets. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
The stolen funds were transferred to the attacker's addresses and then laundered. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
Lazarus Group is suspected to be behind the theft. :white_check_mark:
https://www.elliptic.co/blog/how-the-lazarus-group-is-stepping-up-crypto-hacks-and-changing-its-tactics
The stolen funds were transferred to multiple addresses and smart contracts. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
The stolen funds were transferred to the following addresses: :white_check_mark:
https://etherscan.io/address/0xCC1AE485b617c59a7c577C02cd07078a2bcCE454, https://etherscan.io/address/0x8bf8cd7F001D0584F98F53a3d82eD0bA498cC3dE, https://etherscan.io/address/0x483D88278Cbc0C9105c4807d558E06782AEFf584, https://bscscan.com/address/0x6953704e753C6FD70Eb6B083313089e4FC258A20, https://polygonscan.com/address/0x4515bE0067E60d8e49b2425D37e61c791C9B95e9, https://tronscan.org/#/address/TPFUjxQzG88Vwynrpj2W61ZAkQ9W2QYgAQ, https://explorer.solana.com/address/G3udanrxk8stVe8Se2zXmJ3QwU8GSFJMn28mTfn8t1kq, https://www.blockchain.com/btc/address/1BHNb9UJy4cWFB5wywZkTVgoNB4JbFmswH, https://explorer.bitcoin.com/bch/address/qrgxyhj8rzl4l7fgauu6q6vtu2grct4jeyrnaq2s75, https://xrpscan.com/account/rpQxVcjVF2fC23r3xKyJS53jw8d5SRhZQf, https://explorer.xdag.io/block/15VY3MadZvLpXhjzFXwCUmtZcHszju6L9, https://polygonscan.com/address/0x75497999432b8701330fb68058bd21918c02ac59
CoinEx lost $52,847,077 in total across 9 different chains. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $18,324,848 in Ethereum. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $6,286,018 in Binance Smart Chain. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $288,072 in Polygon. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $11,119,353 in Tron. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $2,496,432 in Solana. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $6,082,389 in Bitcoin. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $447,574 in Bitcoin Cash. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $6,113,201 in Ripple. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $1,689,190 in XDAG. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
Funds were drained from CoinEx's Ethereum hot wallet on September 12, 2023, for 408,741 DAI. :white_check_mark:
https://etherscan.io/tx/0x9e8d4d98d815a1725031f7f5f92de42f999045bef70eedc64baf6c15ca230eaa
CoinEx temporarily suspended services on September 12, 2023. :white_check_mark:
https://twitter.com/coinexcom/status/1701651414991397176
Elliptic Research confirmed the onchain relation between CoinEx and Stake.com hacks. :white_check_mark:
https://www.elliptic.co/blog/how-the-lazarus-group-is-stepping-up-crypto-hacks-and-changing-its-tactics
CoinEx announced the resumption of deposit and withdrawal services on September 21, 2023. :white_check_mark:
https://announcement.coinex.com/hc/en-us/articles/19319131621908-CoinEx-Will-Resume-Deposit-and-Withdrawal-Services-of-BTC-ETH-USDT-USDC-etc-Estimated-on-Sep-21-2023
The primary cause of the security breach was the compromise of CoinEx's private key for hot wallets. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
The Lazarus Group's attack methodology of choice is social engineering. :white_check_mark:
https://www.elliptic.co/blog/how-the-lazarus-group-is-stepping-up-crypto-hacks-and-changing-its-tactics

Here is a result of fact-checking:
On September 12, 2023, CoinEx experienced a massive security breach due to a private key compromise. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
The attacker exploited CoinEx's hot wallets and extracted approximately $20 million worth of assets across 9 different chains. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
Lazarus Group is suspected to be behind the theft. :white_check_mark:
https://www.elliptic.co/blog/how-the-lazarus-group-is-stepping-up-crypto-hacks-and-changing-its-tactics
The stolen funds were transferred to the attacker's addresses and then laundered via distribution between multiple addresses and smart contracts. :white_check_mark:
https://www.elliptic.co/blog/how-the-lazarus-group-is-stepping-up-crypto-hacks-and-changing-its-tactics
CoinEx lost $52,847,077 in total across 9 different chains. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $18,324,848 in Ethereum. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $6,286,018 in Binance Smart Chain. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $288,072 in Polygon. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $11,119,353 in Tron. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $2,496,432 in Solana. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $6,082,389 in Bitcoin. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $447,574 in Bitcoin Cash. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $6,113,201 in Ripple. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $1,689,190 in XDAG. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
Funds were drained from CoinEx's Ethereum hot wallet on September 12, 2023, for 408,741 DAI. :white_check_mark:
https://etherscan.io/tx/0x9e8d4d98d815a1725031f7f5f92de42f999045bef70eedc64baf6c15ca230eaa
CoinEx temporarily suspended services on September 12, 2023. :white_check_mark:
https://twitter.com/coinexcom/status/1701651414991397176
CoinEx announced the resumption of deposit and withdrawal services on September 21, 2023. :white_check_mark:
https://announcement.coinex.com/hc/en-us/articles/19319131621908-CoinEx-Will-Resume-Deposit-and-Withdrawal-Services-of-BTC-ETH-USDT-USDC-etc-Estimated-on-Sep-21-2023

Here is a result of fact-checking:
On September 12, 2023, CoinEx experienced a massive security breach due to a private key compromise. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
The attacker exploited CoinEx's hot wallets and extracted approximately $20 million worth of assets across 9 different chains. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
Lazarus Group is suspected to be behind the theft. :white_check_mark:
https://www.elliptic.co/blog/how-the-lazarus-group-is-stepping-up-crypto-hacks-and-changing-its-tactics
The stolen funds were transferred to multiple addresses and smart contracts. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $52,847,077 in total across various chains. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $18,324,848 in Ethereum. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $6,286,018 in Binance Smart Chain. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $288,072 in Polygon. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $11,119,353 in Tron. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $2,496,432 in Solana. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $6,082,389 in Bitcoin. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $447,574 in Bitcoin Cash. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $6,113,201 in Ripple. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
CoinEx lost $1,689,190 in XDAG. :x:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
On September 12, 2023, funds were drained from CoinEx's Ethereum hot wallet for 408,741 DAI. :white_check_mark:
https://etherscan.io/tx/0x9e8d4d98d815a1725031f7f5f92de42f999045bef70eedc64baf6c15ca230eaa
On September 12, 2023, CoinEx temporarily suspended services. :white_check_mark:
https://twitter.com/coinexcom/status/1701651414991397176
Elliptic Research confirmed the onchain connection between CoinEx and Stake.com hacks. :white_check_mark:
https://www.elliptic.co/blog/how-the-lazarus-group-is-stepping-up-crypto-hacks-and-changing-its-tactics
On September 21, 2023, CoinEx announced the resumption of deposit and withdrawal services. :white_check_mark:
https://announcement.coinex.com/hc/en-us/articles/19319131621908-CoinEx-Will-Resume-Deposit-and-Withdrawal-Services-of-BTC-ETH-USDT-USDC-etc-Estimated-on-Sep-21-2023
The primary cause of the security breach was the compromise of CoinEx's private key for hot wallets. :white_check_mark:
https://www.bleepingcomputer.com/news/security/hackers-steal-53-million-worth-of-cryptocurrency-from-coinex/
The Lazarus Group's attack methodology of choice is social engineering. :white_check_mark:
https://www.elliptic.co/blog/how-the-lazarus-group-is-stepping-up-crypto-hacks-and-changing-its-tactics


docs/getting-started: formatting fixes, add macOS troubleshooting

make build can fail on macOS if pg_config isn't installed, which
it isn't by default.
This patch updates the docs to include troubleshooting steps for
installing pg_config (via libpq via brew) on macOS.
It also fixes a couple of formatting nits (incorrect block alignment, a broken link, a mis-spaced comma).

See also https://github.com/pypa/warehouse/issues/6782, although the efficient cause of the error there is different.

Can you please rebase? I'm unable to update the branch, likely due to a setting on your fork.

Can you please rebase? I'm unable to update the branch, likely due to a setting on your fork.

Whoops, I'll see if I can fix that.

Weird -- normally there's a checkbox allowing the upstream to modify the branch here:

Might be because this is an old fork...


include primary_key for upsert to avoid ValueError

When syncing a single column table from dolt to mysql,
sqlalchemy will throw a ValueError complaining about an empty update_dict
CREATE TABLE authority (
name varchar(50) NOT NULL,
PRIMARY KEY (name)
) ENGINE=InnoDB DEFAULT
CHARSET=utf8;
https://github.com/zzzeek/sqlalchemy/blob/857adaaf867df54d4a023cf19f618fdf1d0f60c9/lib/sqlalchemy/dialects/mysql/dml.py#L150

Codecov Report

Merging #143 (d1183e8) into master (e7dfa97) will decrease coverage by 13.37%.
The diff coverage is 65.90%.

@@             Coverage Diff             @@
##           master     #143       +/-   ##
===========================================
- Coverage   55.06%   41.69%   -13.38%
===========================================
  Files          25       23        -2
  Lines        1718      957      -761
===========================================
- Hits          946      399      -547
+ Misses        772      558      -214

Impacted Files
Coverage Δ

doltpy/sql/__init__.py
100.00% <ø> (ø)

doltpy/sql/sync/__init__.py
0.00% <0.00%> (ø)

doltpy/sql/sync/dolt.py
0.00% <0.00%> (ø)

doltpy/sql/sync/mysql.py
0.00% <0.00%> (ø)

doltpy/sql/sql.py
77.05% <66.66%> (+0.09%)
:arrow_up:

doltpy/cli/__init__.py
100.00% <100.00%> (ø)

doltpy/cli/dolt.py
100.00% <100.00%> (+46.16%)
:arrow_up:

doltpy/cli/read.py
100.00% <100.00%> (ø)

doltpy/cli/write.py
100.00% <100.00%> (ø)

doltpy/etl/loaders.py
86.89% <100.00%> (ø)

... and 4 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 52b5622...d1183e8. Read the comment docs.

Hi @max-hoffman , I don't know how to increase the code coverage yet. Please kindly advise.

The diff coverage would probably look OK if you merged master, a one line change wouldn't have that big of an effect.


In version 1.25, multiple processes cannot be started.

In version 1.25, multiple processes cannot be started. After multiple devices are connected, only one process can be started. In the previous version, version 1.21, everything is normal.
Windows 10 system
[server] INFO: Device: samsung SM-G955U1 (Android 9)
[server] DEBUG: Using encoder: 'OMX.qcom.video.encoder.avc'
[server] DEBUG: Screen streaming stopped
[server] DEBUG: Device message sender stopped
[server] DEBUG: Controller stopped
DEBUG: Interrupting socket
DEBUG: Server disconnected
DEBUG: Server terminated
ERROR: Server connection failed

Apparently, this is the same as #3398. But I could not reproduce the problem, I can start multiple process and mirror multiple devices.


Replicator fails if specified log file location does not exist

If a log file location is provided but the location does not exist then no error is reported and replicator simply stops. Need to trap bad file spec error and report appropriate error.

If attached to a terminal the replicator now reports the problem opening the log before terminating. If not attached to a terminal the error is reported in the system log.


Convert Chat Service to non-blocking kitteh irc

This changes the chat service implementation to use kitteh irc library which utilizes netty and is non-blocking. I have observed significant decreases in both cpu and gpu load with this implemented. This also allows us to move away from the modified pircbotx library

This should also definitely close #1892

This should also definitely close #1892

Hmm it is lower at over time but am running into a high startup cost for some reason

Hmm it is lower at over time but am running into a high startup cost for some reason

Was able to fix the high startup. It was querying who for every channel on join and I just set the logic to do that to false.

Nice!


p2p transport: use stremio-p2p:// protocol

rather than ipfs/ipns, use a special stremio-p2p:// protocol
the reasons we want this distinction

we might want our own naming system
we don't only access through IPFS, but we also send requests to the supernodes

closing for now, as this issue is irrelevant for this repo - the idea of a stremio-custom protocol/transport is still relevant though, but not sure in what way (possibly for our own naming system defined in the supernode)


avoid loading pantahub.config in local mode; stop supporting deprecated ph.config keys

This PR moves the loading of pantahub.config out of the early init so we can decide whether to load it or not based on Pantavisor being in remote or local mode. The idea is to only load the config file after bootup or transition once. Then, it is saved only after registration.
List of changes:

config: stop supporting deprecated pantahub.config keys
config: remove pantahub.config load from early init
config: improve logs for load/save pantahub.config
pantahub: remove loading of pantahub.config
pantavisor: load pantahub.config in state RUN only

would like to cut 019 today/tomorrow and then we can land such a change without feeling too bad :)


Add a link to get a vega wallet on the Associate page intro copy

If a user clicks around too quickly they miss links to get a Vega wallet Wallet.
We should Ideally have a link to get a wallet everywhere there is a link to connect Vega wallet. But particularly priority is to add it to the /associate page as this is the first place you have to have it (the user could side step the button on the staking page with the new button in the side bar to associate)
see also : https://github.com/vegaprotocol/token-frontend/issues/919
which intends to be a landing page for people learning Vega wallet

Link now available from the wallet side bar


influx-integration.spec.js - fix delayed deactivation of tests

The deactivateAfter was changed from a parameter to an option.
Update live tests to reflect that.

cc: @dmajda

+1


403, message='Forbidden',

Hello ,
I have this error since today, the connection via the mobile application or from a browser works. I reset the credentials, the connection is OK but no other commands pass, do you have this type of problem?
aiohttp.client_exceptions.ClientResponseError: 403, message='Forbidden', url=URL('https://api-wired-prod-1-euw1.wrd-aws.com/commerce/v1/persons/8b0e5117-33af-4872-a9f0-c6a017d57924?country=FR')

Duplicate of #555


Prudently Paranoid Settings

...for the prudently paranoid user.
Use case:

User has disabled: Xpub export, Show Xpub Details, and/or one of two new settings "Seed backup", and "Address Explorer" (which removes these options from the seeds menu)... because these steps have already been done long ago.
Now the user is moving about, with seedsigner on a battery pack, collecting seeds without turning it off, and continuing on to load more seeds.
The user's threat model is rapidly experiencing increased susceptibility to a "surprise" violent attack, as they load each additional seed.

As a solution: Some security-sensitive settings could raise an exception whenever these settings are toggled from disabled to enabled w/ loaded seeds, alerting the user with "You must discard all seeds before enabling this option!"
Thoughts?
P.S. as I work through my own thoughts on this, any progress I have will be here
(update!)
This seems to be working now, at the link above.
3 settings are defined as "prudently paranoid", which means you cannot toggle them from disabled to enabled while seeds are loaded; "Exception: Please discard all seeds before enabling this option!".   The 3 settings, for now are: "Xpub export", "Seed backup" and "Address explorer".
I'm going to sleep on it.

After sleeping on this, I've gone on to expand what is covered by Prudently Paranoid Settings, including sig-types and script-types, but the initial idea hasn't changed.  It's the seedsigner assumption, always erring on the side of caution, that "disabled means disabled and I won't relax these privacy/security settings while keys are loaded."
I've implemented this using existing/new settings definitions, and a new method "settings.is_enabled(a_setting)" that can be used like a question (returning True or False) or like an assertion (raising an exception if disabled).  Within low-level views that arguably should not be accessible when a particular setting is disabled, they'll use settings.is_enabled(a_setting, assert_=True) to raise an ugly exception, disrupting continued flow.  To spare the user from seeing these, higher level views will ask "is_enabled(a_setting)" to avoid offering navigation to functionality that is disabled.

Can you explain the use-case of traveling around and collecting seeds? To sign a transaction, you can just use partially signed bitcoin transactions (PSBT), one seed after another.

Key material is split in pieces (seedxor style), physically separated (perhaps on the same property, perhaps a short walk, maybe a short drive).
This use case starts at loading seed #0, from the moment you load it into seedsigner and could have had a chance to secure it by putting your seed-qr back in the safe and locking it, to the point you shutdown/pull-power.  With prudently_paranoid_settings: you might have seed-backup, address-explorer, and export-xpub disabled... meaning these tools would not leak their info... and seedsigner would still be capable to sign a PSBT from a known wallet... less capable to attacker who doesn't already know your utxos.

I also like what it does to the assumption of:
If you see someone with a seedsigner who just had it turned on... they've got full knowledge, or recorded seed material on them at this very moment.
  A better assumption would be that I'm not even capable of loading my keys without running around in front of public cameras... and even if you can take my seedsigner from me while it's still turned on... you won't learn more than my fingerprint.

As far as sig_type and script_type being included... which add a little bit of clumsy granularity, this was just me fleshing out the idea to its extremes... that are likely not so useful.   It'd be a stretch to imagine the usefulness of a completely disabled seedsigner.   Anyways, for me to propose ideas as complete as I can + an implementation, and for others to pick and choose.

Concept NACK.

[added]: Consider the amount of seconds in the lifetime that seedsigner is running with any particular seed loaded.

This is the most compelling part of the argument. But I keep coming back to two basic counterpoints:

I don't like the idea of relying on UI settings as a form of security. We do allow for an increasingly flexible way of turning features on or off in Settings, but that's meant to alter the user flows to customize it for experts vs noobs. Using the UI as a security barrier does provide some value but isn't strong enough to live up to more naive users' expectations. Even with all the appropriate warnings, I'm still hesitant to encourage anything that could create a false sense of security. Plus if the most likely use case is during the short time the seed is loaded, then the seed backup words/SeedQR would be in the vicinity and would remain the bigger risk vector.

but if among all that time you get distracted...

I've thought for a while that we should have an optional "Wipe after X time" Setting. Right now a SeedSigner will hold any seeds in memory for as long as it sits plugged in. A configurable option to wipe after 5 min, 10 min, X hrs, etc of idle time would be a nice safety measure that should probably default to ON. And/or a secondary setting that powers down the SeedSigner after X time.

I've thought for a while that we should have an optional "Wipe after X time" Setting. Right now a SeedSigner will hold any seeds in memory for as long as it sits plugged in. A configurable option to wipe after 5 min, 10 min, X hrs, etc of idle time would be a nice safety measure that should probably default to ON. And/or a secondary setting that powers down the SeedSigner after X time.

This was discussed in issue #142.


Add FS(Must)?(Byte|String) helper functions.

Hi Matt,
I like esc better than all the alternatives, and here are some helper functions to get assets directly.
Use case: storing more complex templates in external files that are going to be embedded, e.g.
pageTemplateStr := FSMustString(false, "/page.html")
pageTemplate = template.Must(template.New("page").Parse(pageTemplateStr))

If you don't like the names, feel free to change to whatever you think is best.

While I think your approach will work, I think it can be improved. The approach above would needlessly create io.Readers when we already have the raw []byte. I like the API, but I think it could access the underlying data itself, which would be faster.

Yes, that makes sense. Thanks for the feedback.
I will clean it up and resubmit.

Replaced with #8.


Added logs to .gitignore

Shouldn't it be logs/* ?

@groud it is equivalent actually, unless you un-ignore some specific file later on.

I don't get it. Is the folder itself ignored or only its content then?

I don't get it. Is the folder itself ignored or only its content then?

Folders don't exist in git. logs/ in .gitignore means everything in ./logs/, so it's the same as using a wildcard.


what's the difference between by phonegap itself "device.uuid"

the plugin is work perfect
so I just want to ask
what's the difference between by phonegap itself "device.uuid"
according to this
https://github.com/apache/cordova-plugin-device/blob/c6e23d8a61793c263443794d66d40723b4d04377/doc/index.md
for example my ASUS Zenfone A500KL
phonegap itself device.uuid = > 9ea488bd-..........-03361
your plugin's uuid = > 9ea488bd-..........-20328

cordova-plugin-device uses AndroidID which has some problem (not always unique). This plugin uses a combo of android id, device id and sim id.

got it
thanks @Paldom

Does the generated UUID change, when the operating system is being updated?