[bug] unable to connect

Unable to connect to Livekit "cloud" dashboard
To reproduce

clone repo
flutter pub get
flutter run --dart-define=URL=ws://{domain from "dashboard"}:7880 --dart-define=TOKEN={token generated in "settings"}
(app runs on external device)
press "connect"
hangs for a few minutes with a spinner and then reports "failed to connect"

Expected behavior
Some kind of connection.  Anything.  I know I'm doing it wrong, but at this point I'm very frustrated.  I've tried to use this product at least 4 times over the last 5 months.  Tried installing servers on VMs, my local machine, etc.  Each time I'm unable to get a connection going or to even begin debugging what the heck is going on.

Flutter console log:

I/flutter (20691): 12:51:48: SignalClient connecting with url: ws://uvai.livekit.cloud:7880/rtc?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjY4MzE2MTgsImlzcyI6IkFQSXpVSkpBcE5NNjZkYiIsIm5iZiI6MTY2Njc0NTIxOCwic3ViIjoidXNlci01YmYwYzNjMCIsInZpZGVvIjp7InJvb20iOiJyb29tLTcwNDIxNzA0Iiwicm9vbUpvaW4iOnRydWV9fQ.8Qjnmx10jr96k7V6PWV45tKoGlA55N3JHa8Q9RCEgpw&auto_subscribe=1&adaptive_stream=0&protocol=8&sdk=flutter&version=1.0.0&network=wifi&os=android&os_version=11&device_model=Pixel+2
I/flutter (20691): 12:51:48: SignalClient ConnectionState disconnected -> connecting
I/flutter (20691): 12:51:48: [SignalClient#723860707] cleanUp()
I/flutter (20691): 12:51:48: [SignalEvent] SignalConnectionStateUpdatedEvent(newState: connecting, didReconnect: false, disconnectReason: null)
I/flutter (20691): 12:51:48: [WebSocketIO] Connecting(uri: ws://uvai.livekit.cloud:7880/rtc?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjY4MzE2MTgsImlzcyI6IkFQSXpVSkpBcE5NNjZkYiIsIm5iZiI6MTY2Njc0NTIxOCwic3ViIjoidXNlci01YmYwYzNjMCIsInZpZGVvIjp7InJvb20iOiJyb29tLTcwNDIxNzA0Iiwicm9vbUpvaW4iOnRydWV9fQ.8Qjnmx10jr96k7V6PWV45tKoGlA55N3JHa8Q9RCEgpw&auto_subscribe=1&adaptive_stream=0&protocol=8&sdk=flutter&version=1.0.0&network=wifi&os=android&os_version=11&device_model=Pixel+2)...
I/flutter (20691): 12:53:55: [WebSocketIO] did throw SocketException: Connection timed out (OS Error: Connection timed out, errno = 110), address = uvai.livekit.cloud, port = 41091
I/flutter (20691): 12:56:03: SignalClient ConnectionState connecting -> disconnected
I/flutter (20691): 12:56:03: Connect Error Failed to connect
I/flutter (20691): 12:56:03: Engine ConnectionState connecting -> disconnected
I/flutter (20691): Could not connect Failed to connect
I/flutter (20691): 12:56:03: [SignalEvent] SignalConnectionStateUpdatedEvent(newState: disconnected, didReconnect: false, disconnectReason: null)
I/flutter (20691): 12:56:03: [EngineEvent] Engine#100113504 EngineConnectionStateUpdatedEvent(newState: disconnected, didReconnect: false, disconnectReason: null)
I/flutter (20691): 12:56:03: [Room#497044879] cleanUp()
I/flutter (20691): 12:56:03: onDisconnected state:ConnectionState.disconnected reason:signal
I/flutter (20691): 12:56:03: [Engine#100113504] Already disconnected... DisconnectReason.signal
I/flutter (20691): 12:56:03: [Engine#100113504] cleanUp()
I/flutter (20691): 12:56:03: [SignalClient#723860707] cleanUp()
I/flutter (20691): 12:56:03: [RoomEvent] RoomDisconnectedEvent(), will notifyListeners()

Try using wss://domain.livekit.cloud instead, noting the wss scheme and no port specified.

Well, this time it immediately reported "Failed to connect"
I/flutter (27777): 13:31:45: SignalClient connecting with url: wss://uvai.livekit.cloud/rtc?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjY4MzE2MTgsImlzcyI6IkFQSXpVSkpBcE5NNjZkYiIsIm5iZiI6MTY2Njc0NTIxOCwic3ViIjoidXNlci01YmYwYzNjMCIsInZpZGVvIjp7InJvb20iOiJyb29tLTcwNDIxNzA0Iiwicm9vbUpvaW4iOnRydWV9fQ.8Qjnmx10jr96k7V6PWV45tKoGlA55N3JHa8Q9RCEgpw&auto_subscribe=1&adaptive_stream=0&protocol=8&sdk=flutter&version=1.0.0&network=wifi&os=android&os_version=11&device_model=Pixel+2
I/flutter (27777): 13:31:45: SignalClient ConnectionState disconnected -> connecting
I/flutter (27777): 13:31:45: [SignalClient#930837099] cleanUp()
I/flutter (27777): 13:31:45: [SignalEvent] SignalConnectionStateUpdatedEvent(newState: connecting, didReconnect: false, disconnectReason: null)
I/flutter (27777): 13:31:45: [WebSocketIO] Connecting(uri: wss://uvai.livekit.cloud/rtc?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjY4MzE2MTgsImlzcyI6IkFQSXpVSkpBcE5NNjZkYiIsIm5iZiI6MTY2Njc0NTIxOCwic3ViIjoidXNlci01YmYwYzNjMCIsInZpZGVvIjp7InJvb20iOiJyb29tLTcwNDIxNzA0Iiwicm9vbUpvaW4iOnRydWV9fQ.8Qjnmx10jr96k7V6PWV45tKoGlA55N3JHa8Q9RCEgpw&auto_subscribe=1&adaptive_stream=0&protocol=8&sdk=flutter&version=1.0.0&network=wifi&os=android&os_version=11&device_model=Pixel+2)...
I/flutter (27777): 13:31:45: [WebSocketIO] did throw WebSocketException: Connection to 'https://uvai.livekit.cloud:0/rtc?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjY4MzE2MTgsImlzcyI6IkFQSXpVSkpBcE5NNjZkYiIsIm5iZiI6MTY2Njc0NTIxOCwic3ViIjoidXNlci01YmYwYzNjMCIsInZpZGVvIjp7InJvb20iOiJyb29tLTcwNDIxNzA0Iiwicm9vbUpvaW4iOnRydWV9fQ.8Qjnmx10jr96k7V6PWV45tKoGlA55N3JHa8Q9RCEgpw&auto_subscribe=1&adaptive_stream=0&protocol=8&sdk=flutter&version=1.0.0&network=wifi&os=android&os_version=11&device_model=Pixel+2#' was not upgraded to websocket
I/flutter (27777): 13:31:46: SignalClient ConnectionState connecting -> disconnected
I/flutter (27777): 13:31:46: Connect Error Failed to connect
I/flutter (27777): 13:31:46: Engine ConnectionState connecting -> disconnected
I/flutter (27777): Could not connect Failed to connect
I/flutter (27777): 13:31:46: [SignalEvent] SignalConnectionStateUpdatedEvent(newState: disconnected, didReconnect: false, disconnectReason: null)
I/flutter (27777): 13:31:46: [EngineEvent] Engine#652276274 EngineConnectionStateUpdatedEvent(newState: disconnected, didReconnect: false, disconnectReason: null)
I/flutter (27777): 13:31:46: [Room#532712229] cleanUp()
I/flutter (27777): 13:31:46: onDisconnected state:ConnectionState.disconnected reason:signal
I/flutter (27777): 13:31:46: [Engine#652276274] Already disconnected... DisconnectReason.signal
I/flutter (27777): 13:31:46: [Engine#652276274] cleanUp()
I/flutter (27777): 13:31:46: [SignalClient#930837099] cleanUp()
I/flutter (27777): 13:31:46: [RoomEvent] RoomDisconnectedEvent(), will notifyListeners()

I opened your URL with a browser and it seems the token has expired.

Good catch!   I refreshed it but got the same "Failed to connect" result.   ...I'm not even sure what success will look like though
Here is the output:
An Observatory debugger and profiler on Pixel 2 is available at: http://<IP_ADDRESS>:60328/ypwfeAb9Jks=/
I/Gralloc4(31738): mapper 4.x is not supported
W/Gralloc3(31738): mapper 3.x is not supported
The Flutter DevTools debugger and profiler on Pixel 2 is available at:
http://<IP_ADDRESS>:9100?uri=http://<IP_ADDRESS>:60328/ypwfeAb9Jks=/
I/flutter (31738): Connecting with url: wss://uvai.livekit.cloud:7880, token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjcyODQ0NzksImlzcyI6IkFQSUVZZ1VYWFg2Y0NyTCIsIm5iZiI6MTY2NzI4MzQ3OSwidmlkZW8iOnsiY2FuUHVibGlzaCI6dHJ1ZSwiY2FuUHVibGlzaERhdGEiOmZhbHNlLCJjYW5TdWJzY3JpYmUiOnRydWUsInJvb21Kb2luIjp0cnVlfX0.tMbrP4TS9vWgxj1s3o-c7gxHc_XNrvvnVn_mpRdraKI...
I/flutter (31738): 23:47:54: Engine ConnectionState disconnected -> connecting
I/flutter (31738): 23:47:54: [EngineEvent] Engine#461642345 EngineConnectionStateUpdatedEvent(newState: connecting, didReconnect: false, disconnectReason: null)
I/flutter (31738): 23:47:54: SignalClient connecting with url: wss://uvai.livekit.cloud:7880/rtc?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjcyODQ0NzksImlzcyI6IkFQSUVZZ1VYWFg2Y0NyTCIsIm5iZiI6MTY2NzI4MzQ3OSwidmlkZW8iOnsiY2FuUHVibGlzaCI6dHJ1ZSwiY2FuUHVibGlzaERhdGEiOmZhbHNlLCJjYW5TdWJzY3JpYmUiOnRydWUsInJvb21Kb2luIjp0cnVlfX0.tMbrP4TS9vWgxj1s3o-c7gxHc_XNrvvnVn_mpRdraKI&auto_subscribe=1&adaptive_stream=0&protocol=8&sdk=flutter&version=1.0.0&network=wifi&os=android&os_version=11&device_model=Pixel+2
I/flutter (31738): 23:47:54: SignalClient ConnectionState disconnected -> connecting
I/flutter (31738): 23:47:54: [SignalClient#318726160] cleanUp()
I/flutter (31738): 23:47:54: [SignalEvent] SignalConnectionStateUpdatedEvent(newState: connecting, didReconnect: false, disconnectReason: null)
I/flutter (31738): 23:47:54: [WebSocketIO] Connecting(uri: wss://uvai.livekit.cloud:7880/rtc?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjcyODQ0NzksImlzcyI6IkFQSUVZZ1VYWFg2Y0NyTCIsIm5iZiI6MTY2NzI4MzQ3OSwidmlkZW8iOnsiY2FuUHVibGlzaCI6dHJ1ZSwiY2FuUHVibGlzaERhdGEiOmZhbHNlLCJjYW5TdWJzY3JpYmUiOnRydWUsInJvb21Kb2luIjp0cnVlfX0.tMbrP4TS9vWgxj1s3o-c7gxHc_XNrvvnVn_mpRdraKI&auto_subscribe=1&adaptive_stream=0&protocol=8&sdk=flutter&version=1.0.0&network=wifi&os=android&os_version=11&device_model=Pixel+2)...
...time passes...
I/flutter (31738): 23:50:02: [WebSocketIO] did throw SocketException: Connection timed out (OS Error: Connection timed out, errno = 110), address = uvai.livekit.cloud, port = 49573
I/flutter (31738): 23:52:09: SignalClient ConnectionState connecting -> disconnected
I/flutter (31738): 23:52:09: Connect Error Failed to connect
I/flutter (31738): 23:52:09: Engine ConnectionState connecting -> disconnected
I/flutter (31738): Could not connect Failed to connect
I/flutter (31738): 23:52:09: [SignalEvent] SignalConnectionStateUpdatedEvent(newState: disconnected, didReconnect: false, disconnectReason: null)
I/flutter (31738): 23:52:09: [EngineEvent] Engine#461642345 EngineConnectionStateUpdatedEvent(newState: disconnected, didReconnect: false, disconnectReason: null)
I/flutter (31738): 23:52:09: [Room#320355780] cleanUp()
I/flutter (31738): 23:52:09: onDisconnected state:ConnectionState.disconnected reason:signal
I/flutter (31738): 23:52:09: [Engine#461642345] Already disconnected... DisconnectReason.signal
I/flutter (31738): 23:52:09: [Engine#461642345] cleanUp()
I/flutter (31738): 23:52:09: [SignalClient#318726160] cleanUp()
I/flutter (31738): 23:52:09: [RoomEvent] RoomDisconnectedEvent(), will notifyListeners()

okay, I updated example/README, here you should use wss://uvai.livekit.cloud, no need :7880

???     But I still get an immediate "Failed to connect"
$ flutter run --dart-define=URL=wss://uvai.livekit.cloud --dart-define=TOKEN=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjcyODQ0NzksImlzcyI6IkFQSUVZZ1VYWFg2Y0NyTCIsIm5iZiI6MTY2NzI4MzQ3OSwidmlkZW8iOnsiY2FuUHVibGlzaCI6dHJ1ZSwiY2FuUHVibGlzaERhdGEiOmZhbHNlLCJjYW5TdWJzY3JpYmUiOnRydWUsInJvb21Kb2luIjp0cnVlfX0.tMbrP4TS9vWgxj1s3o-c7gxHc_XNrvvnVn_mpRdraKI
output -->
I/Gralloc4( 8908): mapper 4.x is not supported
W/Gralloc3( 8908): mapper 3.x is not supported
I/flutter ( 8908): Connecting with url: wss://uvai.livekit.cloud, token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjcyODQ0NzksImlzcyI6IkFQSUVZZ1VYWFg2Y0NyTCIsIm5iZiI6MTY2NzI4MzQ3OSwidmlkZW8iOnsiY2FuUHVibGlzaCI6dHJ1ZSwiY2FuUHVibGlzaERhdGEiOmZhbHNlLCJjYW5TdWJzY3JpYmUiOnRydWUsInJvb21Kb2luIjp0cnVlfX0.tMbrP4TS9vWgxj1s3o-c7gxHc_XNrvvnVn_mpRdraKI...
I/flutter ( 8908): 05:38:33: Engine ConnectionState disconnected -> connecting
I/flutter ( 8908): 05:38:33: [EngineEvent] Engine#1015938651 EngineConnectionStateUpdatedEvent(newState: connecting, didReconnect: false, disconnectReason: null)
I/flutter ( 8908): 05:38:33: SignalClient connecting with url: wss://uvai.livekit.cloud/rtc?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjcyODQ0NzksImlzcyI6IkFQSUVZZ1VYWFg2Y0NyTCIsIm5iZiI6MTY2NzI4MzQ3OSwidmlkZW8iOnsiY2FuUHVibGlzaCI6dHJ1ZSwiY2FuUHVibGlzaERhdGEiOmZhbHNlLCJjYW5TdWJzY3JpYmUiOnRydWUsInJvb21Kb2luIjp0cnVlfX0.tMbrP4TS9vWgxj1s3o-c7gxHc_XNrvvnVn_mpRdraKI&auto_subscribe=1&adaptive_stream=0&protocol=8&sdk=flutter&version=1.0.0&network=wifi&os=android&os_version=11&device_model=Pixel+2
I/flutter ( 8908): 05:38:33: SignalClient ConnectionState disconnected -> connecting
I/flutter ( 8908): 05:38:33: [SignalClient#253944847] cleanUp()
I/flutter ( 8908): 05:38:33: [SignalEvent] SignalConnectionStateUpdatedEvent(newState: connecting, didReconnect: false, disconnectReason: null)
I/flutter ( 8908): 05:38:33: [WebSocketIO] Connecting(uri: wss://uvai.livekit.cloud/rtc?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjcyODQ0NzksImlzcyI6IkFQSUVZZ1VYWFg2Y0NyTCIsIm5iZiI6MTY2NzI4MzQ3OSwidmlkZW8iOnsiY2FuUHVibGlzaCI6dHJ1ZSwiY2FuUHVibGlzaERhdGEiOmZhbHNlLCJjYW5TdWJzY3JpYmUiOnRydWUsInJvb21Kb2luIjp0cnVlfX0.tMbrP4TS9vWgxj1s3o-c7gxHc_XNrvvnVn_mpRdraKI&auto_subscribe=1&adaptive_stream=0&protocol=8&sdk=flutter&version=1.0.0&network=wifi&os=android&os_version=11&device_model=Pixel+2)...
I/flutter ( 8908): 05:38:34: [WebSocketIO] did throw WebSocketException: Connection to 'https://uvai.livekit.cloud:0/rtc?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjcyODQ0NzksImlzcyI6IkFQSUVZZ1VYWFg2Y0NyTCIsIm5iZiI6MTY2NzI4MzQ3OSwidmlkZW8iOnsiY2FuUHVibGlzaCI6dHJ1ZSwiY2FuUHVibGlzaERhdGEiOmZhbHNlLCJjYW5TdWJzY3JpYmUiOnRydWUsInJvb21Kb2luIjp0cnVlfX0.tMbrP4TS9vWgxj1s3o-c7gxHc_XNrvvnVn_mpRdraKI&auto_subscribe=1&adaptive_stream=0&protocol=8&sdk=flutter&version=1.0.0&network=wifi&os=android&os_version=11&device_model=Pixel+2#' was not upgraded to websocket
I/flutter ( 8908): 05:38:34: SignalClient ConnectionState connecting -> disconnected
I/flutter ( 8908): 05:38:34: Connect Error Failed to connect
I/flutter ( 8908): 05:38:34: Engine ConnectionState connecting -> disconnected
I/flutter ( 8908): Could not connect Failed to connect
I/flutter ( 8908): 05:38:34: [SignalEvent] SignalConnectionStateUpdatedEvent(newState: disconnected, didReconnect: false, disconnectReason: null)
I/flutter ( 8908): 05:38:34: [EngineEvent] Engine#1015938651 EngineConnectionStateUpdatedEvent(newState: disconnected, didReconnect: false, disconnectReason: null)
I/flutter ( 8908): 05:38:34: [Room#1040479753] cleanUp()
I/flutter ( 8908): 05:38:34: onDisconnected state:ConnectionState.disconnected reason:signal
I/flutter ( 8908): 05:38:34: [Engine#1015938651] Already disconnected... DisconnectReason.signal
I/flutter ( 8908): 05:38:34: [Engine#1015938651] cleanUp()
I/flutter ( 8908): 05:38:34: [SignalClient#253944847] cleanUp()
I/flutter ( 8908): 05:38:34: [RoomEvent] RoomDisconnectedEvent(), will notifyListeners()
I/flutter ( 8908): Connecting with url: wss://uvai.livekit.cloud, token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjcyODQ0NzksImlzcyI6IkFQSUVZZ1VYWFg2Y0NyTCIsIm5iZiI6MTY2NzI4MzQ3OSwidmlkZW8iOnsiY2FuUHVibGlzaCI6dHJ1ZSwiY2FuUHVibGlzaERhdGEiOmZhbHNlLCJjYW5TdWJzY3JpYmUiOnRydWUsInJvb21Kb2luIjp0cnVlfX0.tMbrP4TS9vWgxj1s3o-c7gxHc_XNrvvnVn_mpRdraKI...
I/flutter ( 8908): 05:41:00: Engine ConnectionState disconnected -> connecting
I/flutter ( 8908): 05:41:00: [EngineEvent] Engine#761417782 EngineConnectionStateUpdatedEvent(newState: connecting, didReconnect: false, disconnectReason: null)
I/flutter ( 8908): 05:41:00: SignalClient connecting with url: wss://uvai.livekit.cloud/rtc?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjcyODQ0NzksImlzcyI6IkFQSUVZZ1VYWFg2Y0NyTCIsIm5iZiI6MTY2NzI4MzQ3OSwidmlkZW8iOnsiY2FuUHVibGlzaCI6dHJ1ZSwiY2FuUHVibGlzaERhdGEiOmZhbHNlLCJjYW5TdWJzY3JpYmUiOnRydWUsInJvb21Kb2luIjp0cnVlfX0.tMbrP4TS9vWgxj1s3o-c7gxHc_XNrvvnVn_mpRdraKI&auto_subscribe=1&adaptive_stream=1&protocol=8&sdk=flutter&version=1.0.0&network=wifi&os=android&os_version=11&device_model=Pixel+2
I/flutter ( 8908): 05:41:00: SignalClient ConnectionState disconnected -> connecting
I/flutter ( 8908): 05:41:00: [SignalClient#658290134] cleanUp()
I/flutter ( 8908): 05:41:00: [SignalEvent] SignalConnectionStateUpdatedEvent(newState: connecting, didReconnect: false, disconnectReason: null)
I/flutter ( 8908): 05:41:00: [WebSocketIO] Connecting(uri: wss://uvai.livekit.cloud/rtc?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjcyODQ0NzksImlzcyI6IkFQSUVZZ1VYWFg2Y0NyTCIsIm5iZiI6MTY2NzI4MzQ3OSwidmlkZW8iOnsiY2FuUHVibGlzaCI6dHJ1ZSwiY2FuUHVibGlzaERhdGEiOmZhbHNlLCJjYW5TdWJzY3JpYmUiOnRydWUsInJvb21Kb2luIjp0cnVlfX0.tMbrP4TS9vWgxj1s3o-c7gxHc_XNrvvnVn_mpRdraKI&auto_subscribe=1&adaptive_stream=1&protocol=8&sdk=flutter&version=1.0.0&network=wifi&os=android&os_version=11&device_model=Pixel+2)...
I/flutter ( 8908): 05:41:01: [WebSocketIO] did throw WebSocketException: Connection to 'https://uvai.livekit.cloud:0/rtc?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjcyODQ0NzksImlzcyI6IkFQSUVZZ1VYWFg2Y0NyTCIsIm5iZiI6MTY2NzI4MzQ3OSwidmlkZW8iOnsiY2FuUHVibGlzaCI6dHJ1ZSwiY2FuUHVibGlzaERhdGEiOmZhbHNlLCJjYW5TdWJzY3JpYmUiOnRydWUsInJvb21Kb2luIjp0cnVlfX0.tMbrP4TS9vWgxj1s3o-c7gxHc_XNrvvnVn_mpRdraKI&auto_subscribe=1&adaptive_stream=1&protocol=8&sdk=flutter&version=1.0.0&network=wifi&os=android&os_version=11&device_model=Pixel+2#' was not upgraded to websocket
I/flutter ( 8908): 05:41:01: SignalClient ConnectionState connecting -> disconnected
I/flutter ( 8908): 05:41:01: Connect Error Failed to connect
I/flutter ( 8908): 05:41:01: Engine ConnectionState connecting -> disconnected
I/flutter ( 8908): Could not connect Failed to connect
I/flutter ( 8908): 05:41:01: [SignalEvent] SignalConnectionStateUpdatedEvent(newState: disconnected, didReconnect: false, disconnectReason: null)
I/flutter ( 8908): 05:41:01: [EngineEvent] Engine#761417782 EngineConnectionStateUpdatedEvent(newState: disconnected, didReconnect: false, disconnectReason: null)
I/flutter ( 8908): 05:41:01: [Room#928816817] cleanUp()
I/flutter ( 8908): 05:41:01: onDisconnected state:ConnectionState.disconnected reason:signal
I/flutter ( 8908): 05:41:01: [Engine#761417782] Already disconnected... DisconnectReason.signal
I/flutter ( 8908): 05:41:01: [Engine#761417782] cleanUp()
I/flutter ( 8908): 05:41:01: [SignalClient#658290134] cleanUp()
I/flutter ( 8908): 05:41:01: [RoomEvent] RoomDisconnectedEvent(), will notifyListeners()

Your token had expired. Expiration time is at<PHONE_NUMBER>
{"exp":1667284479,"iss":"xxxx","nbf":1667283479,"video":{"canPublish":true,"canPublishData":false,"canSubscribe":true,"roomJoin":true}}

The Token is a JWT: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjcyODQ0NzksImlzcyI6IkFQSUVZZ1VYWFg2Y0NyTCIsIm5iZiI6MTY2NzI4MzQ3OSwidmlkZW8iOnsiY2FuUHVibGlzaCI6dHJ1ZSwiY2FuUHVibGlzaERhdGEiOmZhbHNlLCJjYW5TdWJzY3JpYmUiOnRydWUsInJvb21Kb2luIjp0cnVlfX0.tMbrP4TS9vWgxj1s3o-c7gxHc_XNrvvnVn_mpRdraKI
The middle section is a base64 encoded string of the JSON grant: eyJleHAiOjE2NjcyODQ0NzksImlzcyI6IkFQSUVZZ1VYWFg2Y0NyTCIsIm5iZiI6MTY2NzI4MzQ3OSwidmlkZW8iOnsiY2FuUHVibGlzaCI6dHJ1ZSwiY2FuUHVibGlzaERhdGEiOmZhbHNlLCJjYW5TdWJzY3JpYmUiOnRydWUsInJvb21Kb2luIjp0cnVlfX0

Can you generate a new token with a long timeout for testing? (give it a week of expiration). then paste your logs here if it still fails to connect.

So, here's what I'm getting at the moment:
$ flutter run --dart-define=URL=wss://uvai.livekit.cloud --dart-define=TOKEN=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjczMDc3MzksImlzcyI6IkFQSUVZZ1VYWFg2Y0NyTCIsIm5iZiI6MTY2NzMwNjczOSwidmlkZW8iOnsiY2FuUHVibGlzaCI6dHJ1ZSwiY2FuUHVibGlzaERhdGEiOmZhbHNlLCJjYW5TdWJzY3JpYmUiOnRydWUsInJvb21Kb2luIjp0cnVlfX0.vUg-9usFAHJxRD_m0WVWdMMuC7YVc9aAj6Xdd_NyqRY
output --->
I/flutter (14230): Connecting with url: wss://uvai.livekit.cloud, token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjczMDc3MzksImlzcyI6IkFQSUVZZ1VYWFg2Y0NyTCIsIm5iZiI6MTY2NzMwNjczOSwidmlkZW8iOnsiY2FuUHVibGlzaCI6dHJ1ZSwiY2FuUHVibGlzaERhdGEiOmZhbHNlLCJjYW5TdWJzY3JpYmUiOnRydWUsInJvb21Kb2luIjp0cnVlfX0.vUg-9usFAHJxRD_m0WVWdMMuC7YVc9aAj6Xdd_NyqRY...
I/flutter (14230): 05:50:47: Engine ConnectionState disconnected -> connecting
I/flutter (14230): 05:50:47: [EngineEvent] Engine#346483590 EngineConnectionStateUpdatedEvent(newState: connecting, didReconnect: false, disconnectReason: null)
I/flutter (14230): 05:50:47: SignalClient connecting with url: wss://uvai.livekit.cloud/rtc?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjczMDc3MzksImlzcyI6IkFQSUVZZ1VYWFg2Y0NyTCIsIm5iZiI6MTY2NzMwNjczOSwidmlkZW8iOnsiY2FuUHVibGlzaCI6dHJ1ZSwiY2FuUHVibGlzaERhdGEiOmZhbHNlLCJjYW5TdWJzY3JpYmUiOnRydWUsInJvb21Kb2luIjp0cnVlfX0.vUg-9usFAHJxRD_m0WVWdMMuC7YVc9aAj6Xdd_NyqRY&auto_subscribe=1&adaptive_stream=1&protocol=8&sdk=flutter&version=1.0.0&network=wifi&os=android&os_version=11&device_model=Pixel+2
I/flutter (14230): 05:50:47: SignalClient ConnectionState disconnected -> connecting
I/flutter (14230): 05:50:47: [SignalClient#639652923] cleanUp()
I/flutter (14230): 05:50:47: [SignalEvent] SignalConnectionStateUpdatedEvent(newState: connecting, didReconnect: false, disconnectReason: null)
I/flutter (14230): 05:50:47: [WebSocketIO] Connecting(uri: wss://uvai.livekit.cloud/rtc?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjczMDc3MzksImlzcyI6IkFQSUVZZ1VYWFg2Y0NyTCIsIm5iZiI6MTY2NzMwNjczOSwidmlkZW8iOnsiY2FuUHVibGlzaCI6dHJ1ZSwiY2FuUHVibGlzaERhdGEiOmZhbHNlLCJjYW5TdWJzY3JpYmUiOnRydWUsInJvb21Kb2luIjp0cnVlfX0.vUg-9usFAHJxRD_m0WVWdMMuC7YVc9aAj6Xdd_NyqRY&auto_subscribe=1&adaptive_stream=1&protocol=8&sdk=flutter&version=1.0.0&network=wifi&os=android&os_version=11&device_model=Pixel+2)...
I/flutter (14230): 05:50:48: [WebSocketIO] did throw WebSocketException: Connection to 'https://uvai.livekit.cloud:0/rtc?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjczMDc3MzksImlzcyI6IkFQSUVZZ1VYWFg2Y0NyTCIsIm5iZiI6MTY2NzMwNjczOSwidmlkZW8iOnsiY2FuUHVibGlzaCI6dHJ1ZSwiY2FuUHVibGlzaERhdGEiOmZhbHNlLCJjYW5TdWJzY3JpYmUiOnRydWUsInJvb21Kb2luIjp0cnVlfX0.vUg-9usFAHJxRD_m0WVWdMMuC7YVc9aAj6Xdd_NyqRY&auto_subscribe=1&adaptive_stream=1&protocol=8&sdk=flutter&version=1.0.0&network=wifi&os=android&os_version=11&device_model=Pixel+2#' was not upgraded to websocket
I/flutter (14230): 05:50:48: SignalClient ConnectionState connecting -> disconnected
I/flutter (14230): 05:50:48: Connect Error Failed to connect
I/flutter (14230): 05:50:48: Engine ConnectionState connecting -> disconnected
I/flutter (14230): Could not connect Failed to connect
I/flutter (14230): 05:50:48: [SignalEvent] SignalConnectionStateUpdatedEvent(newState: disconnected, didReconnect: false, disconnectReason: null)
I/flutter (14230): 05:50:48: [EngineEvent] Engine#346483590 EngineConnectionStateUpdatedEvent(newState: disconnected, didReconnect: false, disconnectReason: null)
I/flutter (14230): 05:50:48: [Room#996090564] cleanUp()
I/flutter (14230): 05:50:48: onDisconnected state:ConnectionState.disconnected reason:signal
I/flutter (14230): 05:50:48: [Engine#346483590] Already disconnected... DisconnectReason.signal
I/flutter (14230): 05:50:48: [Engine#346483590] cleanUp()
I/flutter (14230): 05:50:48: [SignalClient#639652923] cleanUp()
I/flutter (14230): 05:50:48: [RoomEvent] RoomDisconnectedEvent(), will notifyListeners()
I/flutter (14230): Connecting with url: wss://uvai.livekit.cloud, token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjczMDc3MzksImlzcyI6IkFQSUVZZ1VYWFg2Y0NyTCIsIm5iZiI6MTY2NzMwNjczOSwidmlkZW8iOnsiY2FuUHVibGlzaCI6dHJ1ZSwiY2FuUHVibGlzaERhdGEiOmZhbHNlLCJjYW5TdWJzY3JpYmUiOnRydWUsInJvb21Kb2luIjp0cnVlfX0.vUg-9usFAHJxRD_m0WVWdMMuC7YVc9aAj6Xdd_NyqRY...
I/flutter (14230): 05:51:34: Engine ConnectionState disconnected -> connecting
I/flutter (14230): 05:51:34: [EngineEvent] Engine#974615238 EngineConnectionStateUpdatedEvent(newState: connecting, didReconnect: false, disconnectReason: null)
I/flutter (14230): 05:51:34: SignalClient connecting with url: wss://uvai.livekit.cloud/rtc?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjczMDc3MzksImlzcyI6IkFQSUVZZ1VYWFg2Y0NyTCIsIm5iZiI6MTY2NzMwNjczOSwidmlkZW8iOnsiY2FuUHVibGlzaCI6dHJ1ZSwiY2FuUHVibGlzaERhdGEiOmZhbHNlLCJjYW5TdWJzY3JpYmUiOnRydWUsInJvb21Kb2luIjp0cnVlfX0.vUg-9usFAHJxRD_m0WVWdMMuC7YVc9aAj6Xdd_NyqRY&auto_subscribe=1&adaptive_stream=1&protocol=8&sdk=flutter&version=1.0.0&network=wifi&os=android&os_version=11&device_model=Pixel+2
I/flutter (14230): 05:51:34: SignalClient ConnectionState disconnected -> connecting
I/flutter (14230): 05:51:34: [SignalClient#939128752] cleanUp()
I/flutter (14230): 05:51:34: [SignalEvent] SignalConnectionStateUpdatedEvent(newState: connecting, didReconnect: false, disconnectReason: null)
I/flutter (14230): 05:51:34: [WebSocketIO] Connecting(uri: wss://uvai.livekit.cloud/rtc?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjczMDc3MzksImlzcyI6IkFQSUVZZ1VYWFg2Y0NyTCIsIm5iZiI6MTY2NzMwNjczOSwidmlkZW8iOnsiY2FuUHVibGlzaCI6dHJ1ZSwiY2FuUHVibGlzaERhdGEiOmZhbHNlLCJjYW5TdWJzY3JpYmUiOnRydWUsInJvb21Kb2luIjp0cnVlfX0.vUg-9usFAHJxRD_m0WVWdMMuC7YVc9aAj6Xdd_NyqRY&auto_subscribe=1&adaptive_stream=1&protocol=8&sdk=flutter&version=1.0.0&network=wifi&os=android&os_version=11&device_model=Pixel+2)...
I/flutter (14230): 05:51:34: [WebSocketIO] did throw WebSocketException: Connection to 'https://uvai.livekit.cloud:0/rtc?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjczMDc3MzksImlzcyI6IkFQSUVZZ1VYWFg2Y0NyTCIsIm5iZiI6MTY2NzMwNjczOSwidmlkZW8iOnsiY2FuUHVibGlzaCI6dHJ1ZSwiY2FuUHVibGlzaERhdGEiOmZhbHNlLCJjYW5TdWJzY3JpYmUiOnRydWUsInJvb21Kb2luIjp0cnVlfX0.vUg-9usFAHJxRD_m0WVWdMMuC7YVc9aAj6Xdd_NyqRY&auto_subscribe=1&adaptive_stream=1&protocol=8&sdk=flutter&version=1.0.0&network=wifi&os=android&os_version=11&device_model=Pixel+2#' was not upgraded to websocket
I/flutter (14230): 05:51:34: SignalClient ConnectionState connecting -> disconnected
I/flutter (14230): 05:51:34: Connect Error Failed to connect
I/flutter (14230): 05:51:34: Engine ConnectionState connecting -> disconnected
I/flutter (14230): Could not connect Failed to connect
I/flutter (14230): 05:51:34: [SignalEvent] SignalConnectionStateUpdatedEvent(newState: disconnected, didReconnect: false, disconnectReason: null)
I/flutter (14230): 05:51:34: [EngineEvent] Engine#974615238 EngineConnectionStateUpdatedEvent(newState: disconnected, didReconnect: false, disconnectReason: null)
I/flutter (14230): 05:51:34: [Room#385886918] cleanUp()
I/flutter (14230): 05:51:34: onDisconnected state:ConnectionState.disconnected reason:signal
I/flutter (14230): 05:51:34: [Engine#974615238] Already disconnected... DisconnectReason.signal
I/flutter (14230): 05:51:34: [Engine#974615238] cleanUp()
I/flutter (14230): 05:51:34: [SignalClient#939128752] cleanUp()
I/flutter (14230): 05:51:34: [RoomEvent] RoomDisconnectedEvent(), will notifyListeners()

I/flutter (14230): Connecting with url: wss://uvai.livekit.cloud, token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjczMDc3MzksImlzcyI6IkFQSUVZZ1VYWFg2Y0NyTCIsIm5iZiI6MTY2NzMwNjczOSwidmlkZW8iOnsiY2FuUHVibGlzaCI6dHJ1ZSwiY2FuUHVibGlzaERhdGEiOmZhbHNlLCJjYW5TdWJzY3JpYmUiOnRydWUsInJvb21Kb2luIjp0cnVlfX0.vUg-9usFAHJxRD_m0WVWdMMuC7YVc9aAj6Xdd_NyqRY...
I/flutter (14230): 06:07:03: Engine ConnectionState disconnected -> connecting
I/flutter (14230): 06:07:03: [EngineEvent] Engine#116053094 EngineConnectionStateUpdatedEvent(newState: connecting, didReconnect: false, disconnectReason: null)
I/flutter (14230): 06:07:03: SignalClient connecting with url: wss://uvai.livekit.cloud/rtc?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjczMDc3MzksImlzcyI6IkFQSUVZZ1VYWFg2Y0NyTCIsIm5iZiI6MTY2NzMwNjczOSwidmlkZW8iOnsiY2FuUHVibGlzaCI6dHJ1ZSwiY2FuUHVibGlzaERhdGEiOmZhbHNlLCJjYW5TdWJzY3JpYmUiOnRydWUsInJvb21Kb2luIjp0cnVlfX0.vUg-9usFAHJxRD_m0WVWdMMuC7YVc9aAj6Xdd_NyqRY&auto_subscribe=1&adaptive_stream=1&protocol=8&sdk=flutter&version=1.0.0&network=wifi&os=android&os_version=11&device_model=Pixel+2
I/flutter (14230): 06:07:03: SignalClient ConnectionState disconnected -> connecting
I/flutter (14230): 06:07:03: [SignalClient#346796914] cleanUp()
I/flutter (14230): 06:07:03: [SignalEvent] SignalConnectionStateUpdatedEvent(newState: connecting, didReconnect: false, disconnectReason: null)
I/flutter (14230): 06:07:03: [WebSocketIO] Connecting(uri: wss://uvai.livekit.cloud/rtc?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjczMDc3MzksImlzcyI6IkFQSUVZZ1VYWFg2Y0NyTCIsIm5iZiI6MTY2NzMwNjczOSwidmlkZW8iOnsiY2FuUHVibGlzaCI6dHJ1ZSwiY2FuUHVibGlzaERhdGEiOmZhbHNlLCJjYW5TdWJzY3JpYmUiOnRydWUsInJvb21Kb2luIjp0cnVlfX0.vUg-9usFAHJxRD_m0WVWdMMuC7YVc9aAj6Xdd_NyqRY&auto_subscribe=1&adaptive_stream=1&protocol=8&sdk=flutter&version=1.0.0&network=wifi&os=android&os_version=11&device_model=Pixel+2)...
I/flutter (14230): 06:07:03: [WebSocketIO] did throw WebSocketException: Connection to 'https://uvai.livekit.cloud:0/rtc?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjczMDc3MzksImlzcyI6IkFQSUVZZ1VYWFg2Y0NyTCIsIm5iZiI6MTY2NzMwNjczOSwidmlkZW8iOnsiY2FuUHVibGlzaCI6dHJ1ZSwiY2FuUHVibGlzaERhdGEiOmZhbHNlLCJjYW5TdWJzY3JpYmUiOnRydWUsInJvb21Kb2luIjp0cnVlfX0.vUg-9usFAHJxRD_m0WVWdMMuC7YVc9aAj6Xdd_NyqRY&auto_subscribe=1&adaptive_stream=1&protocol=8&sdk=flutter&version=1.0.0&network=wifi&os=android&os_version=11&device_model=Pixel+2#' was not upgraded to websocket
I/flutter (14230): 06:07:03: SignalClient ConnectionState connecting -> disconnected
I/flutter (14230): 06:07:03: Connect Error Failed to connect
I/flutter (14230): 06:07:03: Engine ConnectionState connecting -> disconnected
I/flutter (14230): Could not connect Failed to connect
I/flutter (14230): 06:07:03: [SignalEvent] SignalConnectionStateUpdatedEvent(newState: disconnected, didReconnect: false, disconnectReason: null)
I/flutter (14230): 06:07:03: [EngineEvent] Engine#116053094 EngineConnectionStateUpdatedEvent(newState: disconnected, didReconnect: false, disconnectReason: null)
I/flutter (14230): 06:07:03: [Room#218216255] cleanUp()
I/flutter (14230): 06:07:03: onDisconnected state:ConnectionState.disconnected reason:signal
I/flutter (14230): 06:07:03: [Engine#116053094] Already disconnected... DisconnectReason.signal
I/flutter (14230): 06:07:03: [Engine#116053094] cleanUp()
I/flutter (14230): 06:07:03: [SignalClient#346796914] cleanUp()
I/flutter (14230): 06:07:03: [RoomEvent] RoomDisconnectedEvent(), will notifyListeners()

...I think the token is not expired?   I don't know how to check if it is or not.
...Unsure what "was not upgraded to websocket" means.
...Also, don't even know what to expect upon success.   Will I be shown a list of rooms?   Should I have another device connect using the same token?

This token expired at<PHONE_NUMBER>

Also, don't even know what to expect upon success. Will I be shown a list of rooms? Should I have another device connect using the same token?

You'll be connected to the Room. To connect as another participant on a separate device, you'd want to generate a separate token for it.

Aha, interesting.    I was generating the token from here:
cloud.livekit.io --> settings --> keys --> Generate Token
...and I was leaving the TTL field blank!   (It's not a required field).   Is the default TTL  zero seconds?
Regardless, when I put 1000000 in the TTL field I still get "Failed to Connect"
$ flutter run --dart-define=URL=wss://uvai.livekit.cloud --dart-define=TOKEN=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NzczMDg1OTcsImlzcyI6IkFQSUVZZ1VYWFg2Y0NyTCIsIm5iZiI6MTY2NzMwODU5NywidmlkZW8iOnsiY2FuUHVibGlzaCI6dHJ1ZSwiY2FuUHVibGlzaERhdGEiOmZhbHNlLCJjYW5TdWJzY3JpYmUiOnRydWUsInJvb21Kb2luIjp0cnVlfX0.Ou7PwsMtOAqQ9Qb3vpkI61qLeZjfRERz2NL2F9SMajU
output -->

I/flutter (20994): Connecting with url: wss://uvai.livekit.cloud, token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NzczMDg1OTcsImlzcyI6IkFQSUVZZ1VYWFg2Y0NyTCIsIm5iZiI6MTY2NzMwODU5NywidmlkZW8iOnsiY2FuUHVibGlzaCI6dHJ1ZSwiY2FuUHVibGlzaERhdGEiOmZhbHNlLCJjYW5TdWJzY3JpYmUiOnRydWUsInJvb21Kb2luIjp0cnVlfX0.Ou7PwsMtOAqQ9Qb3vpkI61qLeZjfRERz2NL2F9SMajU...
I/flutter (20994): 06:18:34: Engine ConnectionState disconnected -> connecting
I/flutter (20994): 06:18:34: [EngineEvent] Engine#723507270 EngineConnectionStateUpdatedEvent(newState: connecting, didReconnect: false, disconnectReason: null)
I/flutter (20994): 06:18:34: SignalClient connecting with url: wss://uvai.livekit.cloud/rtc?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NzczMDg1OTcsImlzcyI6IkFQSUVZZ1VYWFg2Y0NyTCIsIm5iZiI6MTY2NzMwODU5NywidmlkZW8iOnsiY2FuUHVibGlzaCI6dHJ1ZSwiY2FuUHVibGlzaERhdGEiOmZhbHNlLCJjYW5TdWJzY3JpYmUiOnRydWUsInJvb21Kb2luIjp0cnVlfX0.Ou7PwsMtOAqQ9Qb3vpkI61qLeZjfRERz2NL2F9SMajU&auto_subscribe=1&adaptive_stream=1&protocol=8&sdk=flutter&version=1.0.0&network=wifi&os=android&os_version=11&device_model=Pixel+2
I/flutter (20994): 06:18:34: SignalClient ConnectionState disconnected -> connecting
I/flutter (20994): 06:18:34: [SignalClient#1005153812] cleanUp()
I/flutter (20994): 06:18:34: [SignalEvent] SignalConnectionStateUpdatedEvent(newState: connecting, didReconnect: false, disconnectReason: null)
I/flutter (20994): 06:18:34: [WebSocketIO] Connecting(uri: wss://uvai.livekit.cloud/rtc?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NzczMDg1OTcsImlzcyI6IkFQSUVZZ1VYWFg2Y0NyTCIsIm5iZiI6MTY2NzMwODU5NywidmlkZW8iOnsiY2FuUHVibGlzaCI6dHJ1ZSwiY2FuUHVibGlzaERhdGEiOmZhbHNlLCJjYW5TdWJzY3JpYmUiOnRydWUsInJvb21Kb2luIjp0cnVlfX0.Ou7PwsMtOAqQ9Qb3vpkI61qLeZjfRERz2NL2F9SMajU&auto_subscribe=1&adaptive_stream=1&protocol=8&sdk=flutter&version=1.0.0&network=wifi&os=android&os_version=11&device_model=Pixel+2)...
I/flutter (20994): 06:18:35: [WebSocketIO] did throw WebSocketException: Connection to 'https://uvai.livekit.cloud:0/rtc?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NzczMDg1OTcsImlzcyI6IkFQSUVZZ1VYWFg2Y0NyTCIsIm5iZiI6MTY2NzMwODU5NywidmlkZW8iOnsiY2FuUHVibGlzaCI6dHJ1ZSwiY2FuUHVibGlzaERhdGEiOmZhbHNlLCJjYW5TdWJzY3JpYmUiOnRydWUsInJvb21Kb2luIjp0cnVlfX0.Ou7PwsMtOAqQ9Qb3vpkI61qLeZjfRERz2NL2F9SMajU&auto_subscribe=1&adaptive_stream=1&protocol=8&sdk=flutter&version=1.0.0&network=wifi&os=android&os_version=11&device_model=Pixel+2#' was not upgraded to websocket
I/flutter (20994): 06:18:35: SignalClient ConnectionState connecting -> disconnected
I/flutter (20994): 06:18:35: Connect Error Failed to connect
I/flutter (20994): 06:18:35: Engine ConnectionState connecting -> disconnected
I/flutter (20994): Could not connect Failed to connect
I/flutter (20994): 06:18:35: [SignalEvent] SignalConnectionStateUpdatedEvent(newState: disconnected, didReconnect: false, disconnectReason: null)
I/flutter (20994): 06:18:35: [EngineEvent] Engine#723507270 EngineConnectionStateUpdatedEvent(newState: disconnected, didReconnect: false, disconnectReason: null)
I/flutter (20994): 06:18:35: [Room#719072708] cleanUp()
I/flutter (20994): 06:18:35: onDisconnected state:ConnectionState.disconnected reason:signal
I/flutter (20994): 06:18:35: [Engine#723507270] Already disconnected... DisconnectReason.signal
I/flutter (20994): 06:18:35: [Engine#723507270] cleanUp()
I/flutter (20994): 06:18:35: [SignalClient#1005153812] cleanUp()
I/flutter (20994): 06:18:35: [RoomEvent] RoomDisconnectedEvent(), will notifyListeners()

Dammit, looks like it is still expired
{"exp":1677308597,"iss":"APIEYgUXXX6cCrL","nbf":1667308597,"video":{"canPublish":true,"canPublishData":false,"canSubscribe":true,"roomJoin":true}}

This is a valid token, "exp":<PHONE_NUMBER>

Ok, I generated the token using the CLI and it worked!
$ livekit-cli create-token \
    --api-key xxxxxxxx --api-secret xxxxxxxxxxxxxxxxxxxx \
    --join --room my-first-room --identity boa \
    --valid-for 24h

glad it worked!


Derive and Group combo produces wasm unreachable error with<EMAIL_ADDRESS>

What happened?
I was trying to upgrade from 0.8.1 to 0.9.4 and ran into a new error.
It seems the following conditions are needed for this to happen:

Target: sql.postgres (works fine with sql.generic or sql.mysql)
Derive a new field
Group by derived field
Use take in the group body (aggregating seems to work)

Happens on both @0.9.0 and @0.9.4.
Node version v18.14.1
I see the playground even throws an error if the target declaration is present.
PRQL input
prql target:sql.postgres

from [{a=1}, {a=2}]
derive {
  b = 1,
}
group b (
  take 1
)

SQL output
No sql, this instead:

error: Uncaught RuntimeError: unreachable
    at <anonymous> (wasm://wasm/00f087fe:1:3131561)
    at <anonymous> (wasm://wasm/00f087fe:1:3257088)
    at <anonymous> (wasm://wasm/00f087fe:1:3245743)
    at <anonymous> (wasm://wasm/00f087fe:1:147662)
    at <anonymous> (wasm://wasm/00f087fe:1:1766112)
    at <anonymous> (wasm://wasm/00f087fe:1:2922438)
    at <anonymous> (wasm://wasm/00f087fe:1:3126985)
...

Expected SQL output
No response
MVCE confirmation

[X] Minimal example
[X] New issue

Anything else?
No response

This maybe the same issue of #3111

Thanks for the report, sorry this isn't fixed.
I do think this is likely #3111, would you agree @syko ?
I'll comment there to see if we can get closer to a resolution

Yeah it looking at the latest example there it seems like it's the same issue. I'll go ahead and close this.


Docs are broken

Describe the bug
Go to any sub-page on https://wxt.dev and it's a 404.
EDIT 1: only seems to happen if navigating from the Get Started or Learn More buttons on the home page. The top nav menus seem to be OK.
EDIT 2: But, also happened from Google search results:

https://www.google.com/search?q=wxt+messaging

It seems maybe the getting-started and guide links are pointing at the wrong folders?
Get Started:

https://wxt.dev/guide/installation.html (link, broken)
https://wxt.dev/get-started/introduction.html (page)

EDIT 3: looks like #701 broke this, so fix needed + 301 redirects.

FWIW, I absolutely HATE the Nuxt "Key Concepts / Directory Structure / Going Further" approach; I feel it's "cart before the horse"; rather than thinking in terms of "what do I know about how extensions work" it starts with "these are the units of our framework" and the end result is a really fragmented reading experience from which you have to jump across multiple docs just to understand any single development arc.
IMHO:

Having separate "Get Started" and "Guide" results in fragmented and duplicated content
The "Directory Structure" approach has always felt like the most counter-intuitive way to introduce information
"Going Further" for most developers is the opposite; half of these things you would want to know at the start

I know VuePress pretty well (my site is built in it) and would be really happy to explore an alternative structure (I've lots of writing and docs experience). I actually think the previous docs were pretty solid, but understand that you want to organise the main guide page (which I'm now running locally).
FWIW I think the VitePress, Astro and Next docs are all excellent; straightforward and logical

Reproduction
https://wxt.dev/guide/installation.html

It seems maybe the getting-started and guide links are pointing at the wrong folders?
Get Started:

https://wxt.dev/guide/installation.html (link, broken)
https://wxt.dev/get-started/introduction.html (page)

Fixed links and added redirects in the short term. Should be working now. Just forgot to update the homepage lol.

Any thoughts on my thoughts?
Totally up for collaborating on docs, esp if it gives you more time on the code 😊

Sorry, woke up to several comments from people telling me the docs were broken lol, so my goal was to get that resolved first. Haven't had time to go through your comment in detail, will do it today after work!
Thanks for the in-depth comment though, and I appreciate your offer to help restructure it. I've been swamped with tickets and help requests on discord, and I haven't had time to actually work on the framework for a while.
So I needed to shake things up and try something else for the docs website. That's why I just did it out of the blue.

That sounds promising! OK, no hurry, have a great day

FWIW, I absolutely HATE the Nuxt "Key Concepts / Directory Structure / Going Further" approach; I feel it's "cart before the horse"; rather than thinking in terms of "what do I know about how extensions work" it starts with "these are the units of our framework" and the end result is a really fragmented reading experience from which you have to jump across multiple docs just to understand any single development arc.
IMHO:

Having separate "Get Started" and "Guide" results in fragmented and duplicated content
The "Directory Structure" approach has always felt like the most counter-intuitive way to introduce information
"Going Further" for most developers is the opposite; half of these things you would want to know at the start

I like the separate "Get Started" and "guide" sections, because no developer will be able to read through all the docs at once. There's too much. Instead, just read the smaller "Get Started" pages from start to finish so you have an understanding of the framework, then look at the guide for more details. I think duplicate content is just a side effect of this approach. I would prefer to avoid this if possible, but need help finding a better structure.

rather than thinking in terms of "what do I know about how extensions work" it starts with "these are the units of our framework"

I can't explain all of extension development in my docs, you have to assume a certain knowledge level, and my assumption is that you know how chrome extensions function. Not really sure how to improve this, but I have been getting too many basic questions below that knowledge level assumption, so any ideas you have around this would be great.

I know VuePress pretty well (my site is built in it) and would be really happy to explore an alternative structure (I've lots of writing and docs experience). I actually think the previous docs were pretty solid, but understand that you want to organise the main guide page (which I'm now running locally).
FWIW I think the VitePress, Astro and Next docs are all excellent; straightforward and logical

I actually HATE the vitepress docs, I can never find what I need, at least around customizing the default theme. The rest of their docs are pretty solid, but I never know if the default theme info is in the guide or the API reference. Usually in the API reference, but none of that code mentions any API.
Both Nuxt and Astro have a single section basically, where all the concepts are listed in the sidebar. Don't mind this, but isn't it too much for a first time reader? There's no way I can get through all that stuff. I'm gonna end up picking and choosing different pages as needed instead of getting a comprehensive overview of what I need to know.

Dave said:

Having separate "Get Started" and "Guide" results in fragmented and duplicated content

Aaron replied:

I like the separate "Get Started" and "guide" sections, because no developer will be able to read through all the docs at once.

So I'll toss this out: you both might enjoy this breakdown of documentation if you've not seen it before. In support of this issue but far beyond the scope of "just" this issue... it's a good read IMO. I always encourage folks to start on the right side of the axis and trend to the bottom. Universally, I think everyone needs reference and then when you work backwards from that how-to guides are the easiest to knock out.
https://diataxis.fr/

Hey @aklinker1,
Thanks for your notes!
I think we're actually aligned on the key points:

assume previous extension development knowledge
needs to straightforward to get up and running quickly
VitePress docs solid apart from customising default theme (I ended up ejecting mine; soooo much easier!)
unified docs á la Astro could work, if clearly structured to cater for first-time use

And I should like to say also, credit to your hard work; you've documented a lot and it is very nicely-written 🙏
Having gone through your new docs again I'm pretty sure I could build on what exists – so how about I just fork and iterate on a new structure?
I'm pretty sure I can find a route through that will work for both window-shoppers and those planning to make a more long-term investment in the framework, whilst addressing the key issues of discovery, fragmentation and duplication.
I could get a first pass up and running in the next couple of days, then go from there.
And @etrout – thanks! I think about docs quite a bit so will definitely have a read through.

And @etrout – thanks! Quite a lot to read through (almost need docs for the docs!) but they nailed my feelings about the shortcomings of the Nuxt docs in the "how-to guides" section:

How-to guides addressed to problems
How-to guides must be written from the perspective of the user, not of the machinery. A how-to guide represents something that someone needs to get done. It’s defined in other words by the needs of a user. Every how-to guide should answer to a human project, in other words. It should show what the human needs to do, with the tools at hand, to obtain the result they need.

And I should like to say also, credit to your hard work; you've documented a lot and it is very nicely-written 🙏

Thank you! Other than the typos 🙈 I've been using Zed lately, and it doesn't have a spell check extension yet... Or it didn't a month ago last time I checked.

VitePress docs solid apart from customising default theme (I ended up ejecting mine; soooo much easier!)

I've never done this, but I don't really want the overhead of maintaining what I imagine an injected setup would look like, so let's keep it vanilla for now.

so how about I just fork and iterate on a new structure?

@davestewart I think that's a great idea! LMK if you have any questions as you go through them more.
Only thing to point out is the doc/.old directory storing a file I didn't fully migrate to the new structure yet.

@leetrout Thanks for sharing! I've started reading through it, but it's like a small book lol. Haven't gotten to any actionable steps, just reading about the 4 different types of documentation. Hopefully we can apply some of those learnings on the upcoming improvements.

Hey @davestewart, I think I'm gonna start updating the structure a bit, and if you have time, I'd like your feedback!

And yes, this time I will be adding redirects so no old links break

Here's my plan:

Get rid of separate "get-started" sidebar, and merge it into the guide
Break the guide apart into different sections

I really like how astro just lays everything out - I'm going for something similar

Here's a rough outline of what the sections will be:

Get Started

Introduction
Installation
Migrate to WXT

Core Concepts

Project Structure
Entrypoints
Browser Support
Vite

Configuration

Main Config File
Manifest
Browser Startup
Environment variables
Runtime Config
Frontend Frameworks
TypeScript

Extension APIs

Storage
Messaging
Scripting
I18n
Types
Other

Assets

Images
CSS
WASM

Content Scripts

Overview
Content Script Context
UI

WXT Modules

Overview
Recipes

Maintain Your Project

Upgrading WXT
Unit Testing
E2E Testing
Debugging

Going to Production

Publishing
Bundle Remote Code
Testing Updates

Entrypoint Types

Resources

Examples
Compare
How WXT Works

I think that should cover everything for wxt.
I am beginning to release first-party packages you can use with WXT, like @wxt-dev/i18n that also need a place on the website. I'm considering adding a drop-down to the top navigation to select the package you're looking at, but am not convinced that's the way to go :/ If you have any ideas, I'd love to hear them!

Hey @aklinker1,
Sorry for the late reply and lack of input, work (and, actually some fun OSS, finally!) has been rather all-consuming over the last couple of months!
I think this sounds really good.
I might suggest the following though:

Configuration

Main Config File
Manifest
Browser Startup
Environment variables
Runtime Config
Frontend Frameworks
TypeScript

Assets

Images
CSS
WASM

Logic

Overview
Entrypoints
Content Script Context
UI

Extension APIs

Storage
Messaging
Scripting
I18n
Types
Other

WXT Modules

Overview
Recipes

In summary:

moved the more "config"-like content earlier
moved the more "code"-like stuff later
changed "Content Scripts" to be "Logic"
added "Entrypoints" (a more detailed version) here

Really, I'm just thinking though probably the development process I would go through when piecing together the parts of an extension I might build, i.e. the floor before the walls, etc.
My two main main beefs with the Nuxt docs were:

duplication of similar but subtly-different content across multiple sections (which it sounds like you are solving here)
the directories section, which is a really unhelpful inversion of folk's existing knowledge (cart before horse)

I think the "Entrypoints" section could easily be explained on a single page with a "concept" explainer, and either subsections, a table or two, or links to the API, for the various flavours.
FWIW I think a Quick Start section could still work:

it could just a page, and more of a jumping off point, rather than full guide
a way in for the developer looking to spend 5 minutes opening a GitHub repo and reading a couple of docs pages
filter users based on knowledge, such as:

noobie – discuss high-level concepts, point to Chrome docs, hello world example
experienced – quickly explain key architecture differences, point to main docs, intermediate example
window-shopper – explain the most interesting features, show a variety of example folders

don't repeat code, let well-commented example folders do the heavy lifting

@davestewart Thanks for the feedback! I worked on it the last few days, and a partial version of the new docs is live, with a few changes from what I originally posted.
https://deploy-preview-933--creative-fairy-df92c4.netlify.app/
I think it aligns with some of the changes you suggested

Hey @aklinker1,
Usual work stuff, but finally finding time to get back on OSS.
I also managed to do a lot of work on my OSS fork Spectre CSS including:

ditching my ejected theme
upgrading to the latest VitePress
enhancing the theme to toggle folders as you navigate them (I can PR this if you like it)

Also, I note that VitePress now lets you replace components on a per-use basis which is awesome! VuePress did not allow you to do this (and requests for this feature were rejected), hence my previous advice to eject the theme.

Anyway, will take a look!

Also, I note that VitePress now lets you replace components on a per-use basis which is awesome

Nice, that's really cool, could be useful.

enhancing the theme to toggle folders as you navigate them (I can PR this if you like it)

After moving everything around, I'm thinking about just having 3 sections, and none of them collapsed.

Get Started
Building with WXT
Other Resources

Basically everything would go in the "Building with WXT" section

Hey @aklinker1 ... just wanted to say I checked the latest docs and they really seem to be going in the right direction.
Well done! 🙏👏🙌


Not applying on startup

Despite having the option checked, the curve is only applied after launching the GUI.

I suspect it means 'apply on startup of the GUI', which is perhaps not what ppl would usually expect.

Try this: https://www.reddit.com/r/MouseAccel/comments/jow79w/make_rawaccel_startup/gbbtdpk/

The above two comments pretty much handle this.


(node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit.

Hi,
I am using Pool node-mysql 2.5.4 with express.js to query a database with connectionLimit=10.
and when I get around 12-16 connections (checking using ''netstat -an | grep <IP_ADDRESS>.*3306.*ESTABLISHED | wc -l") when many clients are connected, I get this message: "(node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit.". I have set req.setMaxListeners(0); ( http://nodejs.org/docs/latest/api/events.html#events_emitter_setmaxlisteners_n) in express request method, but still no effect.
I have three questions:

with connectionLimit=10, what is truly means? Does it limit the no. of current sessions to 10 max? That doesn't seem to be the case, because I see 12-16 connections on port 3306 (sometimes 18)

also, what is the recommended connectionLimit?

Is there a way to avoid that warning message?

Thanks

Can you point to what line in the source of this module is generating that message?

Here is the trace...  i think its the line: /apps/clink-prod/clink/ndt/node_modules/mysql/lib/protocol/Protocol.js:271:23
(node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit.
Trace
at Pool.addListener (events.js:160:15)
at MySqlClient.runQry (/apps/clink-prod/clink/ndt/modules/mysql_client.js:63:15)
at MySqlClient.getBundleNameByAssocIntfId [as getIntfBundleAssoc] (/apps/clink-prod/clink/ndt/modules/mysql_client.js:155:10)
at /apps/clink-prod/clink/ndt/nwmap/app.js:229:19
at runQryCb (/apps/clink-prod/clink/ndt/modules/mysql_client.js:104:20)
at Query._callback (/apps/clink-prod/clink/ndt/modules/mysql_client.js:79:20)
at Query.Sequence.end (/apps/clink-prod/clink/ndt/node_modules/mysql/lib/protocol/sequences/Sequence.js:96:24)
at Query._handleFinalResultPacket (/apps/clink-prod/clink/ndt/node_modules/mysql/lib/protocol/sequences/Query.js:143:8)
at Query.EofPacket (/apps/clink-prod/clink/ndt/node_modules/mysql/lib/protocol/sequences/Query.js:127:8)
at Protocol._parsePacket (/apps/clink-prod/clink/ndt/node_modules/mysql/lib/protocol/Protocol.js:271:23)

Your trace shows it's caused by whatever code you have at /apps/clink-prod/clink/ndt/modules/mysql_client.js:63:15

well, thats just the beginning trace... i don't have anything related to eventemitter in my code. i am just calling mysql lib in express.js, but not closing the pool ever. may be due to that?

Van you paste that file of yours I referenced?

In think its this line...
    this.pool.on('enqueue', function () {

I have removed some company specific stuff from the code, but here is the generic code...
/**
 * mysql_client
 */

// Import modules
var mysql = require('mysql');
var path = require('path');
var fs = require('fs');
var async = require('async');

// Export module with Namespace
var mysqlc = exports;

// Constants
var DEFAULT_MYSQL_PORT = 3306;
var DEFAULT_AUTOCOMMIT = false;
var DEFAULT_CONNLIMIT = 10;

/**
 * MySQL Class Wrapper
 * @param {string} user: user of database account
 * @param {string} password: password for database account
 * @param {string} database: database name
 * @param {string} host: hostname of server
 * @param {string} port: port of server
 * @param {boolean} autocommit: autocommit
 * @return {object} object
 */
mysqlc.MySqlClient = function MySqlClient(connProp) {
    "use strict";
    this.user = connProp.user;
    this.password = connProp.password;
    this.database = connProp.database;
    this.host = connProp.host;
    this.port = connProp.port || DEFAULT_MYSQL_PORT;
    this.autocommit = connProp.autocommit || DEFAULT_AUTOCOMMIT;
    this.connectionLimit = connProp.connectionLimit || DEFAULT_CONNLIMIT
    this.pool = null;

    this.connProp = {
            connectionLimit : this.connectionLimit,
            host            : this.host,
            port            : this.port,
            user            : this.user,
            password        : this.password,
            database        : this.database
    };
}

mysqlc.MySqlClient.prototype.runQry = function runQry(qry, args, callback) {
    this.pool.on('enqueue', function () {
        console.error('runQry-Waiting for available connection slot-ERROR');
        return callback('pool-not-empty');
    });
    console.log('running mysql qry:', qry);
    this.pool.getConnection(function(err, connection) {
        if (err) {
            console.error('runQry-cannot getConnection ERROR:', err);
            return callback(err);
        }
        connection.query(qry, args, function(err, rows) {
            if (err) {
                console.error('runQry-cannot run qry ERROR:', err);
                return callback(err);
            }
            connection.release();
            return callback(null, rows);
        });
    });
};

mysqlc.MySqlClient.prototype.connect = function connect(callback) {
    var pool = mysql.createPool(this.connProp);
    this.pool = pool;

    // verify connection
    pool.getConnection(function(err, connection) {
        console.log('connecting mysql');
        if (err) {
            console.error('ERROR connecting to mysql server with connProp:', this.connProp);
            return callback(err);
        }
        connection.release();
        return callback(null);
    });
};

mysqlc.MySqlClient.prototype.disconnect = function disconnect(callback) {
    var pool = this.pool;
    pool.getConnection(function(err, connection) {
        console.log('disconnecting mysql');
        if (err) {
            console.error('ERROR disconnecting to mysql server with connProp:', this.connProp);
            return callback(err);
        }
        connection.release();
        pool.end();
        return callback(null);
    });
}

Thanks! So the bug is in your code there. Every call made to runQry has the same pool (this is fine), but you add a listener on it every time. You only need to make 11 calls and you get that warning. You just need to stop adding the same listener over and over again.
In fact, it seems like all you're trying to do is make it an error for getConnect to queue; there is an option that will do this for you.

oh.. that makes sense.. in that case, i should simply add the enqueue listener in connect function. thanks a lot :+1:

No problem!


Estimation using backdoor.econml.orf.DMLOrthoForest causes ValueError: Expected 2D array, got scalar array instead: array=None.

I'm trying to use the DMLOrthoForest estimator from EconML, but I'm getting a ValueError. I have managed to get the method to work with a more complicated causal graph, so perhaps the error depends on the identified causal estimand?
Replication:
from dowhy import CausalModel
from sklearn.linear_model import LinearRegression
import pandas as pd
import numpy as np
import econml

# Random data
other_variables = ["X1", "X2", "X3"]
cols = [outcome] + [treatment] + other_variables
df = pd.DataFrame(np.random.rand(200, len(cols)), columns=cols)

causal_graph = "digraph{T->Y;X1->T;X1->Y;X2->T;X2->Y;X3->X2;}"
causal_model = CausalModel(df, treatment="T", outcome="Y", graph=causal_graph)
causal_estimand = causal_model.identify_effect(proceed_when_unidentifiable=True)
causal_estimate = causal_model.estimate_effect(causal_estimand,
                                               method_name="backdoor.econml.orf.DMLOrthoForest",
                                               method_params={"init_params": {"model_T": LinearRegression(),
                                                                              "model_Y": LinearRegression()},
                                                                              "fit_params":{}})

Error:
ValueError: Expected 2D array, got scalar array instead:
array=None.
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.

Update: I've found that the error only occurs when the causal graph does not contain an effect modifier.
For example, the following example in which the causal graph is changed from  "digraph{T->Y;X1->T;X1->Y;X2->T;X2->Y;X3->X2;}" to "digraph{T->Y;X1->T;X1->Y;X2->T;X2->Y;X3->Y;}" (i.e. to include effect modification on Y by X3) does not cause an error:
from dowhy import CausalModel
from sklearn.linear_model import LinearRegression
from sklearn.ensemble import GradientBoostingRegressor
import pandas as pd
import numpy as np
import econml

# Random data
treatment = "T"
outcome = "Y"
other_variables = ["X1", "X2", "X3", "X4"]
cols = [outcome] + [treatment] + other_variables
df = pd.DataFrame(np.random.rand(200, len(cols)), columns=cols)

causal_graph = "digraph{T->Y;X1->T;X1->Y;X2->T;X2->Y;X3->Y;}"
causal_model = CausalModel(df, treatment="T", outcome="Y", graph=causal_graph)
causal_model.view_model()
causal_estimand = causal_model.identify_effect(proceed_when_unidentifiable=True)
causal_estimate = causal_model.estimate_effect(causal_estimand,
                                               method_name="backdoor.econml.orf.DMLOrthoForest",
                                               method_params={"init_params": {"model_T": LinearRegression(),
                                                                              "model_Y": LinearRegression()},
                                                              "fit_params":{}})
print(causal_estimate)

Notice that if I change causal_model to to specify common_causes rather than the causal graph, the error occurs (since  no effect modifiers are specified).
causal_model = CausalModel(df, treatment="T", outcome="Y", common_causes=["X1, X2"])

Thanks @AndrewC19 Great to hear that you found the issue and it works now!


Places metadata for Colombia

There needs to be a CO_Places.csv file that needs the following columns

location
location_type
country
state_province
district_county_municipality
city
alt_name1
alt_name2

While cleaning the Colombia data, the department and municipality columns can be used to create the CO_Places.csv file
After A bit of cleaning I have this:

The first set of questions are:

How do I address the Municipio Desconocido which means "Unknown municipality". I believe they are unknown counts for a particular municipality, but I could be wrong
Does department map to state_province and municipality maps to district_county_municipality?

Next, there are 94 observations that look like the following:

Is BOGOTA a state and municipality?
would the [country]-[state/province]-[county/municipality/city] format then be: CO-Bogota-Bogota-Usaquen-Los Cedros?

would the hyphens between cities be confusing?
One option is to replace the hyphens in city names into underscores, or change the [country]-[state/province]-[county/municipality/city] to be [country]_[state/province]_[county/municipality/city]

First set:

Yes, I think all of the "Municipio Desconocido" have a known department, so you can create a "place" called Unknown Municipio in each department

Yes, department maps to state and municipio to municipality

Second set:

Treat Bogota as a department since that convention is used in the report. D.C. is Distrito Capital. You can remove it (and the other department names) from the Municipio names

I prefer option 2: replace the hyphens in city names into underscores. That will be consistent with the other Places files so that all can be parsed by hyphen

(3.) The alt_name columns are there in case there is some other useful version you would like to include, e.g. the hyphenated version


New-PSSession does not connect to a redirected URI when larger token-based authorization headers are provided

Steps to reproduce
The ConnectionURI passed to New-PSSession sometimes redirects to another URI. This was handled in for Linux in https://github.com/PowerShell/psl-omi-provider/issues/72. However, this does not seem to work when a token is used instead.
> $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "https://ps.compliance.protection.outlook.com/PowerShell-LiveId?BasicAuthToOAuthConversion=true" -Credential $Ctoken -Authentication Basic -AllowRedirection

New-PSSession : [ps.compliance.protection.outlook.com] Connecting to remote server
ps.compliance.protection.outlook.com failed with the following error message :
Basic Authorization failed for user<EMAIL_ADDRESS>For more information, see the about_Remote_Troubleshooting Help topic.
At line:1 char:12
+ $Session = New-PSSession -ConfigurationName Microsoft.Exchange -Conne ...
+            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : OpenError: (System.Manageme....RemoteRunspace:RemoteRunspace) [New-PSSession], PSRemotingTransportException
+ FullyQualifiedErrorId : 2,PSSessionOpenFailed

In this case, the redirect would have been to https://nam04b.ps.compliance.protection.outlook.com/PowerShell-LiveId?BasicAuthToOAuthConversion=true
Expected behavior
The connection should proceed to https://nam04b.ps.compliance.protection.outlook.com/PowerShell-LiveId?BasicAuthToOAuthConversion=true
The following warning should be displayed:
WARNING: Your connection has been redirected to the following URI:
"https://nam04b.ps.compliance.protection.outlook.com/PowerShell-LiveId?BasicAuthToOAuthConversion=true;PSVersion=6.1.0"

Actual behavior
The connection does not succeed.
I made the following observations:

Connecting directly to https://nam04b.ps.compliance.protection.outlook.com/PowerShell-LiveId?BasicAuthToOAuthConversion=true works fine with both an OAuth token as well as username/password auth.
Connecting via username/password basic auth instead of a token redirects fine with or without the query parameters, and includes the query parameters in the redirect.
At a network level, the error occurs before the connection to the redirected URL is ever attempted. The expected warning does not show up either.
Capturing the HTTP packet sent by New-PSSession and sending it manually shows that the
ps.compliance.protection.outlook.com server correctly responds with the redirect. mitmproxy shows the HTTP response was correctly received as well. I'm not sure why the error claims that "Basic Authorization failed" though.

Perhaps the header is too large and that messes up the redirect logic somehow? The Authorization header is "Basic ...<2300 characters here>..." when an OAuth token is used.
Environment data

Tested with the latest nightly build for Linux
> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      6.1.0-preview.10729
PSEdition                      Core
GitCommitId                    6.1.0-preview.10729
OS                             Linux 3.13.0-24-generic #47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014
Platform                       Unix
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
PSRemotingProtocolVersion      2.3
SerializationVersion           <IP_ADDRESS>
WSManStackVersion              3.0

@vinodc Could you please test on Windows system?

@iSazonov This does work fine on the PowerShell that comes with Windows Server 2016, but I haven't had a chance to test with the specific version I used on Linux. Is that necessary for this issue to be resolved?

@vinodc It could help to understand that the Issue is Linux only or not.

@iSazonov We've confirmed this works fine on Windows, so it appears to be a Linux issue.

cc @dantraMSFT

We hit the same issue. Here are the request and response on Linux. After receiving 302, no further request was sent out.
Request:
<s:Header><a:To>HTTPS://ps.compliance.protection.outlook.com:443/PowerShell-LiveId?BasicAuthToOAuthConversion=true;PSVersion=6.1.0</a:To>…
Response:
<s:Envelope xml:lang="en-US" xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:w="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd" xmlns:p="http://schemas.microsoft.com/wbem/wsman/1/wsman.xsd"><s:Header><a:Action>http://schemas.xmlsoap.org/ws/2004/09/transfer/DeleteResponse</a:Action><a:MessageID>uuid:13AC019D-CD80-4C3F-9563-89A18946C2C1</a:MessageID><p:ActivityId>F8FBAC6E-B1B0-0010-8986-6C70A64DD401</p:ActivityId><a:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:To><a:RelatesTo>uuid:230BC4FC-763D-0005-0000-000000BF0000</a:RelatesTo></s:Header><s:Body></s:Body></s:Envelope>
<s:Envelope xml:lang="en-US" xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:w="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd" xmlns:p="http://schemas.microsoft.com/wbem/wsman/1/wsman.xsd"><s:Header><a:Action>http://schemas.xmlsoap.org/ws/2004/09/transfer/DeleteResponse</a:Action><a:MessageID>uuid:13AC019D-CD80-4C3F-9563-89A18946C2C1</a:MessageID><p:ActivityId>F8FBAC6E-B1B0-0010-8986-6C70A64DD401</p:ActivityId><a:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:To><a:RelatesTo>uuid:230BC4FC-763D-0005-0000-000000BF0000</a:RelatesTo></s:Header><s:Body></s:Body></s:Envelope>
[Session: 4 Date: 2018-09-19 18:26:24.0547291Z]
HTTP/1.1 302 Found
Location: https://nam02b.ps.compliance.protection.outlook.com/PowerShell-LiveId?BasicAuthToOAuthConversion=true;PSVersion=6.1.0
Server: Microsoft-IIS/8.0
request-id: 944f34bf-832b-48e8-a1a8-33574cce62f3
X-Powered-By: ASP.NET
X-DiagInfo: BL2FFO11WS085
Date: Wed, 19 Sep 2018 18:26:24 GMT
Content-Length: 234
Object moved
Object moved to here.

cc @PaulHigin

Right. We've currently implemented a workaround to make the initial request and capture the 302 Location header, then redo the connection to that URI instead. Would still be great to have it auto-resolve redirects at some point in time.

How? I have the same problem.

Hi Guys,
Do you have any news about when it could be fixed ?

/cc @SteveL-MSFT
AFAIK WinRM/OMI bridge is deprecated and we are no longer supporting it.

This is a bit of a pickle if WinRM/OMI bride is deprecated yet there is claimed support in ExchangeOnlineManageme for linux in 2.0.5+.  The requirement to use WinRM is due to the nature of the workflow established when connect-ippssession is invoked.  I would LOVE not to use it, or its wsman equivalent in linux.  So, is this an issue with Powershell Core or the Microsoft Security and Protection folks, because its a pretty big deal in my organization, and I would love to get it solved and am willing to test and work with anyone in MSFT on it.

Hey
Can you drop an email to @.*** so that I can add you to the preview ?
From: toupeiro @.>
Sent: Wednesday, September 1, 2021 6:37 PM
To: PowerShell/PowerShell @.>
Cc: Navin Gupta @.>; Manual @.>
Subject: Re: [PowerShell/PowerShell] New-PSSession does not connect to a redirected URI when larger token-based authorization headers are provided (#7567)
This is a bit of a pickle if WinRM/OMI bride is deprecated yet there is claimed support in ExchangeOnlineManageme for linux in 2.0.5+. The requirement to use WinRM is due to the nature of the workflow established when connect-ippssession is invoked. I would LOVE not to use it, or its wsman equivalent in linux. So, is this an issue with Powershell Core or the Microsoft Security and Protection folks, because its a pretty big deal in my organization, and I would love to get it solved and am willing to test and work with anyone in MSFT on it.

You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHubhttps://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FPowerShell%2FPowerShell%2Fissues%2F7567%23issuecomment-910266718&data=04|01|Navin.Gupta%40microsoft.com|21429fbbb16e495e2fbe08d96d495a56|72f988bf86f141af91ab2d7cd011db47|0|0|637660984127337506|Unknown|TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D|1000&sdata=OlOaAWDZZ3YGezw4rKEUEczFAf9rnzpf%2FGYRII7%2Fjhk%3D&reserved=0, or unsubscribehttps://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fnotifications%2Funsubscribe-auth%2FAMFUVNM4DRW7AKUAEHFW72TT7YQONANCNFSM4FQLJ55Q&data=04|01|Navin.Gupta%40microsoft.com|21429fbbb16e495e2fbe08d96d495a56|72f988bf86f141af91ab2d7cd011db47|0|0|637660984127347496|Unknown|TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D|1000&sdata=IcvChI%2BmY4fI1%2FZ25liaYYH1lQAZjpmwajixCT7NN3w%3D&reserved=0.
Triage notifications on the go with GitHub Mobile for iOShttps://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fapps.apple.com%2Fapp%2Fapple-store%2Fid1477376905%3Fct%3Dnotification-email%26mt%3D8%26pt%3D524675&data=04|01|Navin.Gupta%40microsoft.com|21429fbbb16e495e2fbe08d96d495a56|72f988bf86f141af91ab2d7cd011db47|0|0|637660984127357492|Unknown|TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D|1000&sdata=5axBuUUFlXgrK32%2BAPKd1qASUoroyGFkV0XiiHZQhFk%3D&reserved=0 or Androidhttps://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fplay.google.com%2Fstore%2Fapps%2Fdetails%3Fid%3Dcom.github.android%26referrer%3Dutm_campaign%253Dnotification-email%2526utm_medium%253Demail%2526utm_source%253Dgithub&data=04|01|Navin.Gupta%40microsoft.com|21429fbbb16e495e2fbe08d96d495a56|72f988bf86f141af91ab2d7cd011db47|0|0|637660984127357492|Unknown|TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D|1000&sdata=8Q9pP2H474DzAIUlsSwQz1RypnWqZy3s0rfWsHQOFXI%3D&reserved=0.

Hey Can you drop an email to @.*** so that I can add you to the preview ? From: toupeiro @.> Sent: Wednesday, September 1, 2021 6:37 PM To: PowerShell/PowerShell @.> Cc: Navin Gupta @.>; Manual @.> Subject: Re: [PowerShell/PowerShell] New-PSSession does not connect to a redirected URI when larger token-based authorization headers are provided (#7567) This is a bit of a pickle if WinRM/OMI bride is deprecated yet there is claimed support in ExchangeOnlineManageme for linux in 2.0.5+. The requirement to use WinRM is due to the nature of the workflow established when connect-ippssession is invoked. I would LOVE not to use it, or its wsman equivalent in linux. So, is this an issue with Powershell Core or the Microsoft Security and Protection folks, because its a pretty big deal in my organization, and I would love to get it solved and am willing to test and work with anyone in MSFT on it. - You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHubhttps://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FPowerShell%2FPowerShell%2Fissues%2F7567%23issuecomment-910266718&data=04|01|Navin.Gupta%40microsoft.com|21429fbbb16e495e2fbe08d96d495a56|72f988bf86f141af91ab2d7cd011db47|0|0|637660984127337506|Unknown|TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D|1000&sdata=OlOaAWDZZ3YGezw4rKEUEczFAf9rnzpf%2FGYRII7%2Fjhk%3D&reserved=0, or unsubscribehttps://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fnotifications%2Funsubscribe-auth%2FAMFUVNM4DRW7AKUAEHFW72TT7YQONANCNFSM4FQLJ55Q&data=04|01|Navin.Gupta%40microsoft.com|21429fbbb16e495e2fbe08d96d495a56|72f988bf86f141af91ab2d7cd011db47|0|0|637660984127347496|Unknown|TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D|1000&sdata=IcvChI%2BmY4fI1%2FZ25liaYYH1lQAZjpmwajixCT7NN3w%3D&reserved=0. Triage notifications on the go with GitHub Mobile for iOShttps://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fapps.apple.com%2Fapp%2Fapple-store%2Fid1477376905%3Fct%3Dnotification-email%26mt%3D8%26pt%3D524675&data=04|01|Navin.Gupta%40microsoft.com|21429fbbb16e495e2fbe08d96d495a56|72f988bf86f141af91ab2d7cd011db47|0|0|637660984127357492|Unknown|TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D|1000&sdata=5axBuUUFlXgrK32%2BAPKd1qASUoroyGFkV0XiiHZQhFk%3D&reserved=0 or Androidhttps://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fplay.google.com%2Fstore%2Fapps%2Fdetails%3Fid%3Dcom.github.android%26referrer%3Dutm_campaign%253Dnotification-email%2526utm_medium%253Demail%2526utm_source%253Dgithub&data=04|01|Navin.Gupta%40microsoft.com|21429fbbb16e495e2fbe08d96d495a56|72f988bf86f141af91ab2d7cd011db47|0|0|637660984127357492|Unknown|TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D|1000&sdata=8Q9pP2H474DzAIUlsSwQz1RypnWqZy3s0rfWsHQOFXI%3D&reserved=0.

I'd love to but unfortunately the address was redacted. :(

Can someone who repros this confirm if https://www.powershellgallery.com/packages/PSWSMan resolves this problem?  cc @jborean93

I think it may still be a problem and not fixed even in my fork. I've yet to try and reproduce it myself but https://github.com/jborean93/omi/issues/36#issuecomment-907889875 seems like a similar problem.

Hey everyone, its 2022 and I'm still seeing a similar error on macOS where this redirect is not happening and a basic auth failure is returned. Can anyone confirm that this is still an active issue?
Name                           Value
----                           -----
PSVersion                      7.2.2
PSEdition                      Core
GitCommitId                    7.2.2
OS                             Darwin 21.4.0 Darwin Kernel Version 21.4.0: Fri Mar 18 00:45:05 PDT 2022; root:xnu-8020.101.4~15/RELEASE_X86_64
Platform                       Unix
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           <IP_ADDRESS>
WSManStackVersion              3.0

Error
VERBOSE: ExchangeEnvironment : O365Default
VERBOSE: ConnectionUri : https://ps.compliance.protection.outlook.com/PowerShell-LiveId
VERBOSE: AzureADAuthorizationEndpointUri : https://login.microsoftonline.com/organizations
VERBOSE: DelegatedOrganization :
VERBOSE: Prefix :
VERBOSE: FormatTypeName :*
VERBOSE: CommandName :*
VERBOSE: Importing cmdlet 'Add-EXOClientTelemetryWrapper'.
VERBOSE: Importing cmdlet 'New-EXOClientTelemetryFilepath'.
VERBOSE: Importing cmdlet 'Push-EXOTelemetryRecord'.
VERBOSE: Importing cmdlet 'Clear-ActiveToken'.
VERBOSE: Importing cmdlet 'New-ExoPSSession'.
VERBOSE: Importing cmdlet 'Test-ActiveToken'.
Exception: Connecting to remote server ps.compliance.protection.outlook.com failed with the following error message : Basic Authorization failed for user
<EMAIL_ADDRESS>For more information, see the about_Remote_Troubleshooting Help topic.

What the, is this MS, claiming to support Powershell EO management module on Linux but the dependencies are broke or deprecated and not supported..? Guess am back on the Windows host again... /sigh

Same issue. Can this be resolved?
PS /tmp> Connect-IPPSSession
Exception: Connecting to remote server ps.compliance.protection.outlook.com failed with the following error message : Basic Authorization failed for user<EMAIL_ADDRESS>For more information, see the about_Remote_Troubleshooting Help topic.

Seemingly running into this on setting authenticationpolicies now too.
Have done this on linux many times before without issues.
PS /home/freaky> get-user | Set-User -AuthenticationPolicy ALLOW-BasicAuth-SMTP
OperationStopped: Sending data to a remote command failed with the following error message: Basic Authorization failed for user<EMAIL_ADDRESS>For more information, see the about_Remote_Troubleshooting Help topic.


does not capture first keys, sometimes

Sometimes (frequently, though) when activating quicksilver and typing in the first letter is not captured by quicksilver (and instead written to whatever text input I was using). Extremely annoying because I have to do the quicksilver search again, and sometimes I don't realise I've modified the code I was editing...
This has been the behaviour for more than 1 month, but not sure how long. It didn't happen before.
I haven't done important changes in the configuration, that I recall.

It sounds like QS might be busy doing something when you call it up. Most of the changes in the past couple of months were about reducing these background freezes though, so that’s puzzling.
Which interface are you using (under Preferences → General → Appearance)? Have you noticed any pattern related to what’s selected when you invoke Quicksilver?

I use (always used) the Bezel (built in).
I'm not sure I understand what you mean with what's selected. I think it always has the last thing that I called (or the parent folder, when file is deleted).
If you mean what am I invoking when it fails: generally it is a script, but I think it is 1) what I call the most and 2) because in these scripts having or not having the first letter is critical to what is invoked. To clarify, script is "new safari", so invoked by 'nsa' vs 'sa' that calls regular safari instead (so I definitely realise it's not what I wanted); whereas 'saf' and 'af' both invoke safari.

I'm not sure I understand what you mean with what's selected. I think it always has the last thing that I called (or the parent folder, when file is deleted).

Yes, I mean what was the last thing selected (which is what will be there when you call QS back up)?
All of the data should be in memory for the selected thing, and I don’t think it does any processing before showing the UI, but I could be wrong. So for instance, if you see a delay when an image was selected, or a track in iTunes, that might give us somewhere to look for delays.
(I’m assuming the first keystroke is being missed because the UI hasn’t appeared when you start typing. Let me know if that’s not the case.)

Usually I have a script or an app in memory, and I've tried calling it with an image or an itunes track and it doesn't seem to make it more likely to happen (the opposite if anything, but it's probably chance).
Regarding whether the UI is there, I'm not sure. I've tried recording with quicktime but the letter that's not captured by Quicksilver and the quicksilver appear in the same frame, so no way tell quick one is there first. I press the keys very shortly after invoking Quicksilver, it's all very fast. But I'm sure that I first press the quicksilver invoking keys and then the search ones.
Also, I press the keys fast always, but the fastest are not necessarily the ones that fail or the slowest the ones that work.

I think this may be related to #2733


CloudWatch EMF Route Middleware

What?

Added support for middleware registration to the flask ActionProviderBlueprint class.
Classes may be provided at Blueprint instantiation time to register before, after, or
teardown functionality to wrap all view invocation.

Added a CloudWatchEMFLogger middleware class.
When attached to an ActionProviderBlueprint, it will emit request count, latency, and
response category (2xxs, 4xxs, 5xxs) count metrics through CloudWatch EMF. Metrics
are emitted both at the aggregate AP and at the individual route level.

Dimension Sets

{ActionProvider: <action-provider-name>}
{ActionProvider: <action-provider-name>, Route: <route-type>}

<route-type> in this case is provided by the library not the user view func, so it'll be "run", "release", "resume", etc.

Metrics:

Count - Count of invocations against an AP or route
2XXs - Count of invocations against an AP or route resulting in a 2XX
4XXs - Count of invocations against an AP or route resulting in a 4XX
5XXs - Count of invocations against an AP or route resulting in a 5XX
RequestLatency - Duration of invocation handling for an AP or route (in milliseconds)

Why?
Provide an easy mechanism for Action Providers to get usage metrics for both their aggregate Action Provider & specific routes of action providers
Usage

aptb = ActionProviderBlueprint(
    name="TrackedActionProvider",
    import_name=__name__,
    url_prefix="/tracked",
    provider_description=ap_description,
    middleware=[
        CloudWatchMetricEMFLogger(namespace="ActionProviders", action_provider_name="TrackedActionProvider")
    ],
)

Testing
unit tested

I know I'm jumping into a naming debate here, but I'd like us to avoid using "middleware" for this, specifically because Flask and Werkzeug already have a type of object they support called a "middleware".

Yeah I didn't expect that I'd get this one through undebated 😬.
My reasoning for sticking with Middleware was that while flask does reference the term middleware, their "support" for it isn't really support. It's "hey wrap our app with a class that can do stuff and make sure it calls the app as well; we'll conventionally call that thing Middleware!" (ref)
I believe the interface I've exposed (a class that taps into their builtin before_request, after_request, teardown_request hooks) actually fits more precisely with the term middleware.

So I'm trying to find an alternative name which means basically the same thing.
"Lifecycle Hooks" or something like that?
Observer? (Not quite right, the hooks can modify data...)
HookCollection?

RequestLifecycleHooks or APRequestLifeCycleHooks would probably be the only one that makes sense in that vein. Middleware is a more accurate naming, but to your point it may make sense to avoid any hint of conflict w/ Flask.

Agree with all of the above—"middleware" feels like the clearest, but the potential for confusion is high in this context. I like RequestLifecycleHooks quite a bit.

I ran this PR by Stephen Zimmerman & he had the same comment about Middlware as terminology but was content with RequestLifecycleHooks.
Updating in new rev

My reasoning for sticking with Middleware was that while flask does reference the term middleware, their "support" for it isn't really support. It's "hey wrap our app with a class that can do stuff and make sure it calls the app as well; we'll conventionally call that thing Middleware!" (ref)
I believe the interface I've exposed (a class that taps into their builtin before_request, after_request, teardown_request hooks) actually fits more precisely with the term middleware.

I agree with you, but I think the potential for confusion is real enough (e.g. me in 6 months) that we should use a slightly less optimal name because the best name was (rudely!) taken from us.
I'm on the RequestLifecycleHooks bandwagon now.
I'll circle back to do a real content-ful review later, but I think it's all good from a quick scan.
I scoffed at the fmt: off for a tick until I saw what it was wrapping, and felt like "okay, yeah, maybe we don't need to black-format everything". :wink: I'm sure you had a similar judgement which led you to turning it off.

I scoffed at the fmt: off for a tick until I saw what it was wrapping, and felt like "okay, yeah, maybe we don't need to black-format everything". 😉 I'm sure you had a similar judgement which led you to turning it off.

cough cough flows-logging cough cough


1.1rc2 - fullscreen game doesn't seem to have focus

If I launch a game in fullscreen and then try to click something in the game with my mouse, the click actually goes "through" the game, to Godot in the background, bringing it into focus. This is the Linux version, not sure if it does the same on Windows or Mac.

Which Linux distro? Which desktop environment?

Debian 8, GNOME

Sorry, I'm unable to reproduce this issue in my Ubuntu 14.04 & GNOME :(. Fullscreen works as expected. Maybe a video driver problem?

I've tried to reproduce with Windows, and found no problem

Can you try this project in Godot 1.1rc2 and see if you replicate the issue or not? At the game's title screen, when I click on an option, it goes through to Godot.
https://gitlab.com/shine-upon-thee/santa-sniper

there is still no problem under Windows 8.1 with 1.1rc2.current_head

Here's a video of the behavior: https://youtu.be/QdTHBkFw5u0

Game works without problems under Xubuntu 14.04 64-bit (XFCE window manager).

it must be something to do with your WIndows Manager have you change the default setting??,
doesn't have that issue on my Fedora 22 Beta (XFCE).

No, I haven't changed anything. All of my hundreds of Steam games work
fine. I am using GNOME, not XFce. This is a fresh Debian 8.0 install, with
the NVIDIA drivers installed from the repo and working fine, as I said, in
my hundreds of Steam games and all other fullscreen applications (VLC,
YouTube and Netflix in Chrome, etc).
On Fri, May 8, 2015 at 1:04 AM, Rizkie Yudha Pratama <
<EMAIL_ADDRESS>wrote:

it must be something to do with your WIndows Manager have you change the
default setting??,
doesn't have that issue on my Fedora 22 Beta (XFCE).
—
Reply to this email directly or view it on GitHub
https://github.com/okamstudio/godot/issues/1847#issuecomment-100101179.

@adolson I remember that in some versions of GNOME 3 (I'm on ubuntu-gnome) there was some bug with fullscreen youtube videos, and I think it can be related. I back then, fixed that issue by installing https://extensions.gnome.org/extension/851/flash-fullscreen-fix/ ...

I tried but can't reproduce either

OK, I'll just close it since I'm the only one seeing it.


Add pyproject.toml support for config (Issue #10)

I submit for your consideration a potential solution to issue #10 .
This adds two functions:

One to find the config file specified with the new --config option and compare it against a list of supported config files (currently only pyproject.toml).
A second function to read the contents of the config file into a dict which is returned to _main().

The dict is used to set default values in the add_argument() methods, thus ensuring command line options take precedence.  Adding additional config files (e.g., setup.cfg, tox.ini) should be reasonably trivial with these functions.
Four tests have been added to the test suite to test these two functions and a section added to the README to explain the use of pyproject.toml.  All tests pass as well as all static checks.  I've been successfully using my fork for my use cases; command line, key-mapped in IDE, pre-commit and GH actions.
Closes #10

Indeed. Most formatter and linters now support the [tool.X] section of pyproject.toml which avoids config proliferation in code trees. Could you please merge this and consider a new release 🙏 ?

I would be super cool to have pyproject.toml support for configuring docformatter. Which is the current status of this, @myint?

This project is abandonware, right?

@mdczaplicki I hope not, maybe @myint can give some info?

@dyve Would you be interested in becoming a maintainer?

@myint I'd be open to lending a hand to help get things moving again.

@weibullguy Welcome aboard! Thanks for sticking to this PR for a year. 🙈

@weibullguy
Would it possible to modify the explicit .toml extension check in the function reading the config file? It looks to me like the expected tool.docformatter section would work also inside setup.cfg and .ini config files.

@fmigneault
Since this request was made in 2016, it looked like the consensus was moving to pyproject.toml support.  Plus that's what I use in other projects (docformatter does now too!), so I may be biased.  At the moment, I want to focus on closing out the issues and merging PRs that have been around for these many years, then I plan to do a top-to-bottom refactoring.
I opened issue #92 to track this.  As far as I know, the toml library will only read *.toml files.  So, the function would need more work than removing the extension check.  I'm thinking all the configuration file stuff will end up in a class, but I'll figure that out when I refactor.

To everyone who's been waiting for some sort of config file support, I don't have the access rights to push tags or upload new releases to pypi.  For now for pyproject support, you'll need to:
git clone https://github.com/PyCQA/docformatter.git
cd docformatter
pip install .[tomli] or pip install --user .[tomli]

For adding git dependencies, see:
pyproject.toml
setup.py

@weibullguy Thanks! I hope this gets to PyPI and that the projects remains alive!

@dyve Would you be interested in becoming a maintainer?

@myint I don't have the time to take on another maintainer role, but I'd say @weibullguy is stepping up. Perhaps he can also get PyPI rights?

Done!


Fixed issue #27293

Change .list-group-item property position value from relative to static

This cannot change, sorry. It's used for positioning the list items themselves.


(UI Bug) "Select All" checkbox in container list page selects all non visible containers. causing potential data loss

Before you start please confirm the following.

[X] Yes, I've searched similar issues on GitHub.
[X] Yes, I've checked whether this issue is covered in the Portainer documentation or knowledge base.

Problem Description
On the container list page, the "select all rows" checkbox functionality currently selects all container items across all paginated pages, not just those visible on the current page. This behaviour does not align with the commonly accepted pattern for 'select all' check boxes in table interfaces (eg. gmail) in that it doesn't adhere to direct manipulation principles (where actions should only be made on items presented to the user (unless explicitly stated otherwise)). This can lead to unintended bulk actions on containers, potentially resulting in significant data loss. While the interface does state 'X item(s) selected' at the bottom of the table. The visual indication of checked items showing what is selected is more prominent therefore is the primary feedback of which items are selected.
Expected Behavior
The expected behaviour of the checkbox at the top of the rows is to select all of the items currently presented to the user. If the user wants to do a bulk action on a larger number of items or all items, It would be expected that they would use the 'Items per page' drop down to show more or all items that they can perform actions on. Alternatively if they have not discovered the 'items per page' drop down, they might repeat the bulk action per paginated page.
Actual Behavior
When the user checks the checkbox at the top left of the container list table, the feedback is that all currently shown items are selected. When an action is made on this selection such as delete and remove non persistent data, all containers on the system are deleted, not just the items that were shown to be selected.
Steps to Reproduce
Load 11 or more containers into the docker instance being managed by Portainer.
Navigate to the Containers page from the navigation menu.
Ensure the default 'items per page' drop down is set to 10.
Click the checkbox in the title row of the table that has the tooltip 'click to select all items'
Click page 2 at the bottom and notice that these items are selected.
Navigate back to page 1 and click the red Remove button.
Check 'Automatically remove non-persistent volumes' in the dialog and click Remove
Notice that all items are deleted.
Portainer logs or screenshots
No response
Portainer version
2.19.4
Portainer Edition
Community Edition (CE)
Platform and Version
Docker 20.10.17
OS and Architecture
Ubuntu 22.04
Browser
Brave 1.60
What command did you use to deploy Portainer?
portainer:
    container_name: portainer
    image: portainer/portainer:latest
    restart: unless-stopped
    command: -H unix:///var/run/docker.sock
    networks:
      - docker_network
    security_opt:
      - no-new-privileges:true
    ports:
      - "9000:9000"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - $DOCKERDIR/portainer/data:/data
    environment:
      - TZ=$TZ

Additional Information
No response

We're tracking this internally to improve the way this works in the future - no ETA as of yet.
Internal Ref: BE-11047


[DEVHAS-377] separate stage and prod deployments

We are refactoring our environment overlays to always deploy to stage and dev but we will not promote to prod until it's safe to do so.  Promotion to prod will be a manual effort for now.  Corresponding changes to the HAS repo will need to be made to coordinate with this change.
Changes:

The base folder now contains a new subfolder to organize remaining argcod related patches
Added a components folder to allow reuse of patches to avoid having to copy the same files across all environments
Refactored the environment folders into an overlays parent.  Updated their respective kustomization files to include all the deployment info from the base kustomization.yaml

Tests

Ran kustomize build before and after the changes and verified the outputs were the same across all environments

https://issues.redhat.com/browse/DEVHAS-377

Added a components folder to allow reuse of patches to avoid having to copy the same files across all environments

Why can't we keep the patches in base?

Added a components folder to allow reuse of patches to avoid having to copy the same files across all environments

Why can't we keep the patches in base?

The patches modify the deployment which no longer exist in base.  I would get an error saying the Deployment object could not be found if I kept them in base.

/retest

@kim-tsao What kustomize version is needed to use the Components type?
I get:
Error: json: unknown field "components"

When I run kustomize build. Have we verified this works with ArgoCD yet? IIRC, the kustomize it uses is back level? And we've had issues in the past getting newer features to work

@kim-tsao What kustomize version is needed to use the Components type?
I get:
Error: json: unknown field "components"

When I run kustomize build. Dunno what version I was on before, but moving up to latest resolved it.
Have we verified this works with ArgoCD yet? IIRC, the kustomize it uses is back level? And we've had issues in the past getting newer features to work. Since the development overlay doesn’t use components, it may not be seen in the CI if there’s an issue

Is there a way we can verify it works with ArgoCD?  When I was re-vamping our structure, I did notice they had a similar approach see their [k-components\https://github.com/redhat-appstudio/infra-deployments/tree/main/argo-cd-apps/k-components] folder

Ah, if they're already using Components then it should be fine.
Yeah, without tests against the staging overlays, and since bootstrap-cluster.sh uses the development overlays, I'm not sure how else we'd test otherwise (porting over changes?)

I did not add the new configmap yet because I need to make the corresponding changes in our HAS repo first.  I'll introduce the environment variable in https://github.com/redhat-appstudio/application-service/pull/344 and push that once this PR gets merged, then I'll make another change in this repo to add the new env var values

/test appstudio-e2e-tests

/retest

/retest

/test appstudio-e2e-tests

made some additional changes since I got a little confused with the pre and post review structure.  Since the base kustomization has all the content for dev, the preview.sh and util script to set the github org should point to base and not the development overlay since that is now just a reference to base.

/test appstudio-e2e-tests

/test appstudio-hac-e2e-tests

/test all

/test appstudio-hac-e2e-tests

/test appstudio-e2e-tests

/lgtm


Standard formatting

Switching from eslint to  standard: https://www.npmjs.com/package/standard
Less to configure than eslint and in Stencila we are using it already.

@michael @Integral you might change the linter setup in your editor. Look here: https://www.npmjs.com/package/standard#are-there-text-editor-plugins

Codecov Report

Merging #1197 into develop will decrease coverage by 0.03%.
The diff coverage is 73.33%.

@@             Coverage Diff             @@
##           develop    #1197      +/-   ##
===========================================
- Coverage    59.71%   59.67%   -0.04%
===========================================
  Files          392      392
  Lines        14806    14804       -2
===========================================
- Hits          8841     8835       -6
- Misses        5965     5969       +4

Impacted Files
Coverage Δ

packages/table/TableCell.js
100% <ø> (ø)
:arrow_up:

packages/image/DropImage.js
0% <ø> (ø)
:arrow_up:

packages/paragraph/ParagraphHTMLConverter.js
83.33% <ø> (ø)
:arrow_up:

model/DocumentSchema.js
100% <ø> (ø)
:arrow_up:

packages/list/ListItemHTMLConverter.js
66.66% <ø> (ø)
:arrow_up:

collab/CollabServerConfigurator.js
0% <ø> (ø)
:arrow_up:

packages/table/TablePackage.js
100% <ø> (ø)
:arrow_up:

packages/persistence/PersistencePackage.js
100% <ø> (ø)
:arrow_up:

packages/base/RedoCommand.js
0% <ø> (ø)
:arrow_up:

collab/ServerResponse.js
0% <ø> (ø)
:arrow_up:

... and 304 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 054412f...d920420. Read the comment docs.