Added new videos to the list

This is in response to the issue at https://github.com/kubeflow/kubeflow/issues/4904
I have added the videos to the list, in reverse chronological order. I have removed the start times from the URLs, as I think these may have been a mistake.

/assign
/ok-to-test

Preview: https://deploy-preview-1879--competent-brattain-de2d6d.netlify.com/docs/examples/videos/

Thanks @browningjp!
/lgtm
/approve


fetchpatch2: init

allows us to use the new features of patchutils without having to reset
all fetchpatch hashes in nixpkgs
https://github.com/NixOS/nixpkgs/issues/32084
Description of changes

Things done

Built on platform(s)

[ ] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
22.11 Release Notes (or backporting 22.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module
[ ] (Release notes changes) Ran nixos/doc/manual/md-to-db.sh to update generated release notes

[ ] Fits CONTRIBUTING.md.

In principle I like the approach.  Before merging, we perhaps should think if there's some other potentially hash-changing... change that we might want to have as well.

In principle I like the approach. Before merging, we perhaps should think if there's some other potentially hash-changing... change that we might want to have as well.

https://github.com/NixOS/nixpkgs/issues/48567 is the only issue I've found, but can be largely resolved by hashing parameters into a name prefix or suffix. That's not a content hash changing operation though, so there's no benefit in bundling that one.

perhaps we should do the the downloading in a fod and then the patchutils stuff in a non fod to prevent hash incompabilities when we update patchutils

The main point of fetchpatch is making FOD for generated patches that can change.


+++ b/src/helix/endpoints/points/get_custom_reward_redemption.rs
@@ -55,12 +55,12 @@ pub struct GetCustomRewardRedemptionRequest<'a> {
     /// Provided broadcaster_id must match the user_id in the auth token
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub broadcaster_id: &'a types::UserIdRef,
+    pub broadcaster_id: Cow<'a, types::UserIdRef>,

     /// When ID is not provided, this parameter returns paginated Custom Reward Redemption objects for redemptions of the Custom Reward with ID reward_id
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub reward_id: Option<&'a types::RewardIdRef>,
+    pub reward_id: Option<Cow<'a, types::RewardIdRef>>,

     /// When id is not provided, this param is required and filters the paginated Custom Reward Redemption objects for redemptions with the matching status. Can be one of UNFULFILLED, FULFILLED or CANCELED
     #[cfg_attr(feature = "typed-builder", builder(default, setter(into)))]
@@ -77,9 +77,9 @@ pub struct GetCustomRewardRedemptionRequest<'a> {

 impl<'a> GetCustomRewardRedemptionRequest<'a> {
     /// Reward to fetch
-    pub fn broadcaster_id(broadcaster_id: impl Into<&'a types::UserIdRef>) -> Self {
+    pub fn broadcaster_id(broadcaster_id: impl types::IntoCow<'a, types::UserIdRef> + 'a) -> Self {
         Self {
-            broadcaster_id: broadcaster_id.into(),
+            broadcaster_id: broadcaster_id.to_cow(),
             reward_id: None,
             status: Default::default(),
             after: Default::default(),
@@ -88,8 +88,11 @@ impl<'a> GetCustomRewardRedemptionRequest<'a> {
     }

     /// Specific reward to query
-    pub fn reward_id(mut self, reward_id: impl Into<&'a types::RewardIdRef>) -> Self {
-        self.reward_id = Some(reward_id.into());
+    pub fn reward_id(
+        mut self,
+        reward_id: impl types::IntoCow<'a, types::RewardIdRef> + 'a,
+    ) -> Self {
+        self.reward_id = Some(reward_id.to_cow());
         self
     }

diff --git a/src/helix/endpoints/points/mod.rs b/src/helix/endpoints/points/mod.rs
index 2faf987d1..891500019 100644
--- a/src/helix/endpoints/points/mod.rs
+++ b/src/helix/endpoints/points/mod.rs
@@ -25,6 +25,7 @@ use crate::{
     types,
 };
 use serde::{Deserialize, Serialize};
+use std::borrow::Cow;

 pub mod create_custom_rewards;
 pub mod delete_custom_reward;
diff --git a/src/helix/endpoints/points/update_custom_reward.rs b/src/helix/endpoints/points/update_custom_reward.rs
index 4f4bed859..194a4db73 100644
--- a/src/helix/endpoints/points/update_custom_reward.rs
+++ b/src/helix/endpoints/points/update_custom_reward.rs
@@ -73,22 +73,22 @@ pub struct UpdateCustomRewardRequest<'a> {
     /// Provided broadcaster_id must match the user_id in the auth token
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub broadcaster_id: &'a types::UserIdRef,
+    pub broadcaster_id: Cow<'a, types::UserIdRef>,
     /// ID of the Custom Reward to update, must match a Custom Reward on broadcaster_id’s channel.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub id: &'a types::RewardIdRef,
+    pub id: Cow<'a, types::RewardIdRef>,
 }

 impl<'a> UpdateCustomRewardRequest<'a> {
     /// Update a Custom Reward created on the broadcaster's channel
     pub fn new(
-        broadcaster_id: impl Into<&'a types::UserIdRef>,
-        id: impl Into<&'a types::RewardIdRef>,
+        broadcaster_id: impl types::IntoCow<'a, types::UserIdRef> + 'a,
+        id: impl types::IntoCow<'a, types::RewardIdRef> + 'a,
     ) -> Self {
         Self {
-            broadcaster_id: broadcaster_id.into(),
-            id: id.into(),
+            broadcaster_id: broadcaster_id.to_cow(),
+            id: id.to_cow(),
         }
     }
 }
diff --git a/src/helix/endpoints/points/update_redemption_status.rs b/src/helix/endpoints/points/update_redemption_status.rs
index 8c6a8fa37..94d611c98 100644
--- a/src/helix/endpoints/points/update_redemption_status.rs
+++ b/src/helix/endpoints/points/update_redemption_status.rs
@@ -79,30 +79,30 @@ pub struct UpdateRedemptionStatusRequest<'a> {
     /// Provided broadcaster_id must match the user_id in the auth token.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub broadcaster_id: &'a types::UserIdRef,
+    pub broadcaster_id: Cow<'a, types::UserIdRef>,

     /// ID of the Custom Reward the redemptions to be updated are for.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub reward_id: &'a types::RewardIdRef,
+    pub reward_id: Cow<'a, types::RewardIdRef>,

     /// ID of the Custom Reward Redemption to update, must match a Custom Reward Redemption on broadcaster_id’s channel
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub id: &'a types::RedemptionIdRef,
+    pub id: Cow<'a, types::RedemptionIdRef>,
 }

 impl<'a> UpdateRedemptionStatusRequest<'a> {
     /// Update the status of Custom Reward Redemption object on a channel that are in the UNFULFILLED status.
     pub fn new(
-        broadcaster_id: impl Into<&'a types::UserIdRef>,
-        reward_id: impl Into<&'a types::RewardIdRef>,
-        id: impl Into<&'a types::RedemptionIdRef>,
+        broadcaster_id: impl types::IntoCow<'a, types::UserIdRef> + 'a,
+        reward_id: impl types::IntoCow<'a, types::RewardIdRef> + 'a,
+        id: impl types::IntoCow<'a, types::RedemptionIdRef> + 'a,
     ) -> Self {
         Self {
-            broadcaster_id: broadcaster_id.into(),
-            reward_id: reward_id.into(),
-            id: id.into(),
+            broadcaster_id: broadcaster_id.to_cow(),
+            reward_id: reward_id.to_cow(),
+            id: id.to_cow(),
         }
     }
 }
diff --git a/src/helix/endpoints/polls/create_poll.rs b/src/helix/endpoints/polls/create_poll.rs
index c3a01a0b6..0ca12b744 100644
--- a/src/helix/endpoints/polls/create_poll.rs
+++ b/src/helix/endpoints/polls/create_poll.rs
@@ -66,11 +66,10 @@
 //! You can also get the [`http::Request`] with [`request.create_request(&token, &client_id)`](helix::RequestPost::create_request)
 //! and parse the [`http::Response`] with [`CreatePollRequest::parse_response(None, &request.get_uri(), response)`](CreatePollRequest::parse_response)

-use std::borrow::Cow;
-use std::marker::PhantomData;
-
 use super::*;
 use helix::RequestPost;
+use std::marker::PhantomData;
+
 /// Query Parameters for [Create Poll](super::create_poll)
 ///
 /// [`create-poll`](https://dev.twitch.tv/docs/api/reference#create-poll)
@@ -98,7 +97,7 @@ pub struct CreatePollBody<'a> {
     /// The broadcaster running polls. Provided broadcaster_id must match the user_id in the user OAuth token.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub broadcaster_id: &'a types::UserIdRef,
+    pub broadcaster_id: Cow<'a, types::UserIdRef>,
     /// Question displayed for the poll. Maximum: 60 characters.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
@@ -145,13 +144,13 @@ impl<'a> CreatePollBody<'a> {

     /// Poll settings
     pub fn new(
-        broadcaster_id: impl Into<&'a types::UserIdRef>,
+        broadcaster_id: impl types::IntoCow<'a, types::UserIdRef> + 'a,
         title: &'a str,
         duration: i64,
         choices: impl Into<Cow<'a, [NewPollChoice<'a>]>>,
     ) -> Self {
         Self {
-            broadcaster_id: broadcaster_id.into(),
+            broadcaster_id: broadcaster_id.to_cow(),
             title,
             duration,
             choices: choices.into(),
diff --git a/src/helix/endpoints/polls/end_poll.rs b/src/helix/endpoints/polls/end_poll.rs
index 44726ef72..cd166a896 100644
--- a/src/helix/endpoints/polls/end_poll.rs
+++ b/src/helix/endpoints/polls/end_poll.rs
@@ -87,11 +87,11 @@ pub struct EndPollBody<'a> {
     /// The broadcaster running polls. Provided broadcaster_id must match the user_id in the user OAuth token.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub broadcaster_id: &'a types::UserIdRef,
+    pub broadcaster_id: Cow<'a, types::UserIdRef>,
     /// ID of the poll.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub id: &'a types::PollIdRef,
+    pub id: Cow<'a, types::PollIdRef>,
     /// The poll status to be set.
     ///
     /// Valid values:
@@ -103,13 +103,13 @@ pub struct EndPollBody<'a> {
 impl<'a> EndPollBody<'a> {
     /// End a poll that is currently active.
     pub fn new(
-        broadcaster_id: impl Into<&'a types::UserIdRef>,
-        id: impl Into<&'a types::PollIdRef>,
+        broadcaster_id: impl types::IntoCow<'a, types::UserIdRef> + 'a,
+        id: impl types::IntoCow<'a, types::PollIdRef> + 'a,
         status: PollStatus,
     ) -> Self {
         Self {
-            broadcaster_id: broadcaster_id.into(),
-            id: id.into(),
+            broadcaster_id: broadcaster_id.to_cow(),
+            id: id.to_cow(),
             status,
         }
     }
diff --git a/src/helix/endpoints/polls/get_polls.rs b/src/helix/endpoints/polls/get_polls.rs
index a481afe82..dc89fe82d 100644
--- a/src/helix/endpoints/polls/get_polls.rs
+++ b/src/helix/endpoints/polls/get_polls.rs
@@ -39,7 +39,6 @@

 use super::*;
 use helix::RequestGet;
-use std::borrow::Cow;
 pub use types::{PollChoice, PollStatus};

 /// Query Parameters for [Get polls](super::get_polls)
@@ -52,7 +51,7 @@ pub struct GetPollsRequest<'a> {
     /// The broadcaster running polls. Provided broadcaster_id must match the user_id in the user OAuth token.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub broadcaster_id: &'a types::UserIdRef,
+    pub broadcaster_id: Cow<'a, types::UserIdRef>,
     /// ID of a poll. Filters results to one or more specific polls. Not providing one or more IDs will return the full list of polls for the authenticated channel.
     #[cfg_attr(feature = "typed-builder", builder(default, setter(into)))]
     #[serde(borrow)]
@@ -67,9 +66,9 @@ pub struct GetPollsRequest<'a> {

 impl<'a> GetPollsRequest<'a> {
     /// The broadcaster running polls.
-    pub fn broadcaster_id(broadcaster_id: impl Into<&'a types::UserIdRef>) -> Self {
+    pub fn broadcaster_id(broadcaster_id: impl types::IntoCow<'a, types::UserIdRef> + 'a) -> Self {
         Self {
-            broadcaster_id: broadcaster_id.into(),
+            broadcaster_id: broadcaster_id.to_cow(),
             id: Default::default(),
             after: Default::default(),
             first: Default::default(),
diff --git a/src/helix/endpoints/polls/mod.rs b/src/helix/endpoints/polls/mod.rs
index 7e4316141..2f4bdf2f7 100644
--- a/src/helix/endpoints/polls/mod.rs
+++ b/src/helix/endpoints/polls/mod.rs
@@ -6,6 +6,7 @@ use crate::{
     types,
 };
 use serde::{Deserialize, Serialize};
+use std::borrow::Cow;

 pub mod create_poll;
 pub mod end_poll;
diff --git a/src/helix/endpoints/predictions/create_prediction.rs b/src/helix/endpoints/predictions/create_prediction.rs
index d0415fe89..57b501d45 100644
--- a/src/helix/endpoints/predictions/create_prediction.rs
+++ b/src/helix/endpoints/predictions/create_prediction.rs
@@ -93,7 +93,7 @@ pub struct CreatePredictionBody<'a> {
     /// The broadcaster running Predictions. Provided broadcaster_id must match the user_id in the user OAuth token.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub broadcaster_id: &'a types::UserIdRef,
+    pub broadcaster_id: Cow<'a, types::UserIdRef>,
     /// Title for the Prediction. Maximum: 45 characters.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
@@ -107,13 +107,13 @@ pub struct CreatePredictionBody<'a> {
 impl<'a> CreatePredictionBody<'a> {
     /// Create a Channel Points Prediction for a specific Twitch channel.
     pub fn new(
-        broadcaster_id: impl Into<&'a types::UserIdRef>,
+        broadcaster_id: impl types::IntoCow<'a, types::UserIdRef> + 'a,
         title: &'a str,
         outcomes: (NewPredictionOutcome<'a>, NewPredictionOutcome<'a>),
         prediction_window: i64,
     ) -> Self {
         Self {
-            broadcaster_id: broadcaster_id.into(),
+            broadcaster_id: broadcaster_id.to_cow(),
             title,
             outcomes,
             prediction_window,
diff --git a/src/helix/endpoints/predictions/end_prediction.rs b/src/helix/endpoints/predictions/end_prediction.rs
index 05dcc0028..0514c91f0 100644
--- a/src/helix/endpoints/predictions/end_prediction.rs
+++ b/src/helix/endpoints/predictions/end_prediction.rs
@@ -86,11 +86,11 @@ pub struct EndPredictionBody<'a> {
     /// The broadcaster running predictions. Provided broadcaster_id must match the user_id in the user OAuth token.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub broadcaster_id: &'a types::UserIdRef,
+    pub broadcaster_id: Cow<'a, types::UserIdRef>,
     /// ID of the prediction.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub id: &'a types::PredictionIdRef,
+    pub id: Cow<'a, types::PredictionIdRef>,
     /// The Prediction status to be set. Valid values:
     ///
     /// [`RESOLVED`](types::PredictionStatus): A winning outcome has been chosen and the Channel Points have been distributed to the users who predicted the correct outcome.
@@ -100,19 +100,19 @@ pub struct EndPredictionBody<'a> {
     /// ID of the winning outcome for the Prediction. This parameter is required if status is being set to [`RESOLVED`](types::PredictionStatus).
     #[cfg_attr(feature = "typed-builder", builder(default, setter(into)))]
     #[serde(borrow)]
-    pub winning_outcome_id: Option<&'a types::PredictionIdRef>,
+    pub winning_outcome_id: Option<Cow<'a, types::PredictionIdRef>>,
 }

 impl<'a> EndPredictionBody<'a> {
     /// End given prediction that is currently active.
     pub fn new(
-        broadcaster_id: impl Into<&'a types::UserIdRef>,
-        id: impl Into<&'a types::PredictionIdRef>,
+        broadcaster_id: impl types::IntoCow<'a, types::UserIdRef> + 'a,
+        id: impl types::IntoCow<'a, types::PredictionIdRef> + 'a,
         status: impl Into<types::PredictionStatus>,
     ) -> Self {
         Self {
-            broadcaster_id: broadcaster_id.into(),
-            id: id.into(),
+            broadcaster_id: broadcaster_id.to_cow(),
+            id: id.to_cow(),
             status: status.into(),
             winning_outcome_id: None,
         }
@@ -123,9 +123,9 @@ impl<'a> EndPredictionBody<'a> {
     /// This parameter is required if status is being set to [`RESOLVED`](types::PredictionStatus).
     pub fn winning_outcome_id(
         mut self,
-        winning_outcome_id: impl Into<&'a types::PredictionIdRef>,
+        winning_outcome_id: impl types::IntoCow<'a, types::PredictionIdRef> + 'a,
     ) -> Self {
-        self.winning_outcome_id = Some(winning_outcome_id.into());
+        self.winning_outcome_id = Some(winning_outcome_id.to_cow());
         self
     }
 }
diff --git a/src/helix/endpoints/predictions/get_predictions.rs b/src/helix/endpoints/predictions/get_predictions.rs
index bc24bbfbc..8d9b15f83 100644
--- a/src/helix/endpoints/predictions/get_predictions.rs
+++ b/src/helix/endpoints/predictions/get_predictions.rs
@@ -39,7 +39,6 @@

 use super::*;
 use helix::RequestGet;
-use std::borrow::Cow;
 pub use types::{PredictionOutcome, PredictionOutcomeId, PredictionStatus};

 /// Query Parameters for [Get predictions](super::get_predictions)
@@ -52,7 +51,7 @@ pub struct GetPredictionsRequest<'a> {
     /// The broadcaster running Predictions. Provided broadcaster_id must match the user_id in the user OAuth token.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub broadcaster_id: &'a types::UserIdRef,
+    pub broadcaster_id: Cow<'a, types::UserIdRef>,
     /// ID of a Prediction. Filters results to one or more specific Predictions.
     /// Not providing one or more IDs will return the full list of Predictions for the authenticated channel.
     ///
@@ -70,9 +69,9 @@ pub struct GetPredictionsRequest<'a> {

 impl<'a> GetPredictionsRequest<'a> {
     /// Get information about predictions for this broadcasters channel.
-    pub fn broadcaster_id(broadcaster_id: impl Into<&'a types::UserIdRef>) -> Self {
+    pub fn broadcaster_id(broadcaster_id: impl types::IntoCow<'a, types::UserIdRef> + 'a) -> Self {
         Self {
-            broadcaster_id: broadcaster_id.into(),
+            broadcaster_id: broadcaster_id.to_cow(),
             id: Cow::Borrowed(&[]),
             after: Default::default(),
             first: Default::default(),
diff --git a/src/helix/endpoints/predictions/mod.rs b/src/helix/endpoints/predictions/mod.rs
index 715a54c54..5b58a8f01 100644
--- a/src/helix/endpoints/predictions/mod.rs
+++ b/src/helix/endpoints/predictions/mod.rs
@@ -5,6 +5,7 @@ use crate::{
     types,
 };
 use serde::{Deserialize, Serialize};
+use std::borrow::Cow;

 pub mod create_prediction;
 pub mod end_prediction;
diff --git a/src/helix/endpoints/raids/cancel_a_raid.rs b/src/helix/endpoints/raids/cancel_a_raid.rs
index 746451fd5..486b04add 100644
--- a/src/helix/endpoints/raids/cancel_a_raid.rs
+++ b/src/helix/endpoints/raids/cancel_a_raid.rs
@@ -49,14 +49,14 @@ pub struct CancelARaidRequest<'a> {
     /// The ID of the broadcaster that sent the raiding party.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub broadcaster_id: &'a types::UserIdRef,
+    pub broadcaster_id: Cow<'a, types::UserIdRef>,
 }

 impl<'a> CancelARaidRequest<'a> {
     /// Cancel a pending raid on this broadcasters channel
-    pub fn broadcaster_id(broadcaster_id: impl Into<&'a types::UserIdRef>) -> Self {
+    pub fn broadcaster_id(broadcaster_id: impl types::IntoCow<'a, types::UserIdRef> + 'a) -> Self {
         Self {
-            broadcaster_id: broadcaster_id.into(),
+            broadcaster_id: broadcaster_id.to_cow(),
         }
     }
 }
diff --git a/src/helix/endpoints/raids/mod.rs b/src/helix/endpoints/raids/mod.rs
index b5af0a66b..c211a295c 100644
--- a/src/helix/endpoints/raids/mod.rs
+++ b/src/helix/endpoints/raids/mod.rs
@@ -5,6 +5,7 @@ use crate::{
     types,
 };
 use serde::{Deserialize, Serialize};
+use std::borrow::Cow;

 pub mod cancel_a_raid;
 pub mod start_a_raid;
diff --git a/src/helix/endpoints/raids/start_a_raid.rs b/src/helix/endpoints/raids/start_a_raid.rs
index 2743794da..a29b91497 100644
--- a/src/helix/endpoints/raids/start_a_raid.rs
+++ b/src/helix/endpoints/raids/start_a_raid.rs
@@ -47,22 +47,22 @@ pub struct StartARaidRequest<'a> {
     /// The ID of the broadcaster that’s sending the raiding party.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    from_broadcaster_id: &'a types::UserIdRef,
+    from_broadcaster_id: Cow<'a, types::UserIdRef>,
     /// The ID of the broadcaster to raid.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    to_broadcaster_id: &'a types::UserIdRef,
+    to_broadcaster_id: Cow<'a, types::UserIdRef>,
 }

 impl<'a> StartARaidRequest<'a> {
     /// Create a new [`StartARaidRequest`]
     pub fn new(
-        from_broadcaster_id: impl Into<&'a types::UserIdRef>,
-        to_broadcaster_id: impl Into<&'a types::UserIdRef>,
+        from_broadcaster_id: impl types::IntoCow<'a, types::UserIdRef> + 'a,
+        to_broadcaster_id: impl types::IntoCow<'a, types::UserIdRef> + 'a,
     ) -> Self {
         Self {
-            from_broadcaster_id: from_broadcaster_id.into(),
-            to_broadcaster_id: to_broadcaster_id.into(),
+            from_broadcaster_id: from_broadcaster_id.to_cow(),
+            to_broadcaster_id: to_broadcaster_id.to_cow(),
         }
     }
 }
diff --git a/src/helix/endpoints/schedule/create_channel_stream_schedule_segment.rs b/src/helix/endpoints/schedule/create_channel_stream_schedule_segment.rs
index a7de354c4..1014250e4 100644
--- a/src/helix/endpoints/schedule/create_channel_stream_schedule_segment.rs
+++ b/src/helix/endpoints/schedule/create_channel_stream_schedule_segment.rs
@@ -25,7 +25,7 @@
 //! # use twitch_api::helix::schedule::create_channel_stream_schedule_segment;
 //! let body =
 //!     create_channel_stream_schedule_segment::CreateChannelStreamScheduleSegmentBody::builder()
-//!         .start_time(&*twitch_api::types::Timestamp::try_from("2021-07-01T18:00:00Z").unwrap())
+//!         .start_time(&twitch_api::types::Timestamp::try_from("2021-07-01T18:00:00Z").unwrap())
 //!         .timezone("America/New_York")
 //!         .is_recurring(false)
 //!         .duration("60")
@@ -54,7 +54,7 @@
 //!     .build();
 //! let timestamp = twitch_api::types::Timestamp::try_from("2021-07-01T18:00:00Z")?;
 //! let body = create_channel_stream_schedule_segment::CreateChannelStreamScheduleSegmentBody::builder()
-//!     .start_time(&*timestamp)
+//!     .start_time(&timestamp)
 //!     .timezone("America/New_York")
 //!     .is_recurring(false)
 //!     .duration("60")
@@ -81,14 +81,14 @@ pub struct CreateChannelStreamScheduleSegmentRequest<'a> {
     /// User ID of the broadcaster who owns the channel streaming schedule. Provided broadcaster_id must match the user_id in the user OAuth token.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub broadcaster_id: &'a types::UserIdRef,
+    pub broadcaster_id: Cow<'a, types::UserIdRef>,
 }

 impl<'a> CreateChannelStreamScheduleSegmentRequest<'a> {
     /// Create a single scheduled broadcast or a recurring scheduled broadcast for a channel’s [stream schedule](https://help.twitch.tv/s/article/channel-page-setup#Schedule).
-    pub fn broadcaster_id(broadcaster_id: impl Into<&'a types::UserIdRef>) -> Self {
+    pub fn broadcaster_id(broadcaster_id: impl types::IntoCow<'a, types::UserIdRef> + 'a) -> Self {
         Self {
-            broadcaster_id: broadcaster_id.into(),
+            broadcaster_id: broadcaster_id.to_cow(),
         }
     }
 }
@@ -103,7 +103,7 @@ pub struct CreateChannelStreamScheduleSegmentBody<'a> {
     /// Start time for the scheduled broadcast specified in RFC3339 format.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub start_time: &'a types::TimestampRef,
+    pub start_time: Cow<'a, types::TimestampRef>,
     // FIXME: specific braid?
     /// The timezone of the application creating the scheduled broadcast using the IANA time zone database format.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
@@ -118,7 +118,7 @@ pub struct CreateChannelStreamScheduleSegmentBody<'a> {
     /// Game/Category ID for the scheduled broadcast.
     #[cfg_attr(feature = "typed-builder", builder(default, setter(into)))]
     #[serde(skip_serializing_if = "Option::is_none", borrow)]
-    pub category_id: Option<&'a types::CategoryIdRef>,
+    pub category_id: Option<Cow<'a, types::CategoryIdRef>>,
     /// Title for the scheduled broadcast. Maximum: 140 characters.
     #[cfg_attr(feature = "typed-builder", builder(default, setter(into)))]
     #[serde(skip_serializing_if = "Option::is_none", borrow)]
@@ -128,12 +128,12 @@ pub struct CreateChannelStreamScheduleSegmentBody<'a> {
 impl<'a> CreateChannelStreamScheduleSegmentBody<'a> {
     /// Create a single scheduled broadcast or a recurring scheduled broadcast for a channel’s [stream schedule](https://help.twitch.tv/s/article/channel-page-setup#Schedule).
     pub fn new(
-        start_time: impl Into<&'a types::TimestampRef>,
+        start_time: impl types::IntoCow<'a, types::TimestampRef> + 'a,
         timezone: impl Into<&'a str>,
         is_recurring: bool,
     ) -> Self {
         Self {
-            start_time: start_time.into(),
+            start_time: start_time.to_cow(),
             timezone: timezone.into(),
             is_recurring,
             duration: Default::default(),
@@ -173,7 +173,7 @@ fn test_request() {
     let ts = types::Timestamp::try_from("2021-07-01T18:00:00Z").unwrap();
     let body = CreateChannelStreamScheduleSegmentBody {
         duration: Some("60"),
-        category_id: Some("509670".into()),
+        category_id: Some(types::IntoCow::to_cow("509670")),
         title: Some("TwitchDev Monthly Update // July 1, 2021"),
         ..CreateChannelStreamScheduleSegmentBody::new(&*ts, "America/New_York", false)
     };
diff --git a/src/helix/endpoints/schedule/delete_channel_stream_schedule_segment.rs b/src/helix/endpoints/schedule/delete_channel_stream_schedule_segment.rs
index 1a672786a..33bbca537 100644
--- a/src/helix/endpoints/schedule/delete_channel_stream_schedule_segment.rs
+++ b/src/helix/endpoints/schedule/delete_channel_stream_schedule_segment.rs
@@ -54,22 +54,22 @@ pub struct DeleteChannelStreamScheduleSegmentRequest<'a> {
     /// User ID of the broadcaster who owns the channel streaming schedule. Provided broadcaster_id must match the user_id in the user OAuth token.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub broadcaster_id: &'a types::UserIdRef,
+    pub broadcaster_id: Cow<'a, types::UserIdRef>,
     /// The ID of the streaming segment to delete.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub id: &'a types::StreamSegmentIdRef,
+    pub id: Cow<'a, types::StreamSegmentIdRef>,
 }

 impl<'a> DeleteChannelStreamScheduleSegmentRequest<'a> {
     /// Delete a single scheduled broadcast or a recurring scheduled broadcast for a channel’s [stream schedule](https://help.twitch.tv/s/article/channel-page-setup#Schedule).
     pub fn new(
-        broadcaster_id: impl Into<&'a types::UserIdRef>,
-        id: impl Into<&'a types::StreamSegmentIdRef>,
+        broadcaster_id: impl types::IntoCow<'a, types::UserIdRef> + 'a,
+        id: impl types::IntoCow<'a, types::StreamSegmentIdRef> + 'a,
     ) -> Self {
         Self {
-            broadcaster_id: broadcaster_id.into(),
-            id: id.into(),
+            broadcaster_id: broadcaster_id.to_cow(),
+            id: id.to_cow(),
         }
     }
 }
diff --git a/src/helix/endpoints/schedule/get_channel_stream_schedule.rs b/src/helix/endpoints/schedule/get_channel_stream_schedule.rs
index fdf1053e6..2e5a94e67 100644
--- a/src/helix/endpoints/schedule/get_channel_stream_schedule.rs
+++ b/src/helix/endpoints/schedule/get_channel_stream_schedule.rs
@@ -51,15 +51,15 @@ pub struct GetChannelStreamScheduleRequest<'a> {
     /// User ID of the broadcaster who owns the channel streaming schedule. Provided broadcaster_id must match the user_id in the user OAuth token.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub broadcaster_id: &'a types::UserIdRef,
+    pub broadcaster_id: Cow<'a, types::UserIdRef>,
     /// The ID of the stream segment to return. Maximum: 100.
     #[cfg_attr(feature = "typed-builder", builder(default, setter(into)))]
     #[serde(borrow)]
-    pub id: Option<&'a types::StreamSegmentIdRef>,
+    pub id: Option<Cow<'a, types::StreamSegmentIdRef>>,
     /// A timestamp in RFC3339 format to start returning stream segments from. If not specified, the current date and time is used.
     #[cfg_attr(feature = "typed-builder", builder(default, setter(into)))]
     #[serde(borrow)]
-    pub start_time: Option<&'a types::TimestampRef>,
+    pub start_time: Option<Cow<'a, types::TimestampRef>>,
     /// A timezone offset for the requester specified in minutes. This is recommended to ensure stream segments are returned for the correct week. For example, a timezone that is +4 hours from GMT would be “240.” If not specified, “0” is used for GMT.
     #[cfg_attr(feature = "typed-builder", builder(default, setter(into)))]
     #[serde(borrow)]
@@ -74,9 +74,9 @@ pub struct GetChannelStreamScheduleRequest<'a> {

 impl<'a> GetChannelStreamScheduleRequest<'a> {
     /// Get a broadcasters schedule
-    pub fn broadcaster_id(broadcaster_id: impl Into<&'a types::UserIdRef>) -> Self {
+    pub fn broadcaster_id(broadcaster_id: impl types::IntoCow<'a, types::UserIdRef> + 'a) -> Self {
         Self {
-            broadcaster_id: broadcaster_id.into(),
+            broadcaster_id: broadcaster_id.to_cow(),
             id: Default::default(),
             start_time: Default::default(),
             utc_offset: Default::default(),
@@ -86,14 +86,17 @@ impl<'a> GetChannelStreamScheduleRequest<'a> {
     }

     /// Set the id for the request.
-    pub fn id(mut self, id: impl Into<&'a types::StreamSegmentIdRef>) -> Self {
-        self.id = Some(id.into());
+    pub fn id(mut self, id: impl types::IntoCow<'a, types::StreamSegmentIdRef> + 'a) -> Self {
+        self.id = Some(id.to_cow());
         self
     }

     /// Set the start_time for the request.
-    pub fn start_time(mut self, start_time: impl Into<&'a types::TimestampRef>) -> Self {
-        self.start_time = Some(start_time.into());
+    pub fn start_time(
+        mut self,
+        start_time: impl types::IntoCow<'a, types::TimestampRef> + 'a,
+    ) -> Self {
+        self.start_time = Some(start_time.to_cow());
         self
     }

diff --git a/src/helix/endpoints/schedule/mod.rs b/src/helix/endpoints/schedule/mod.rs
index 3abf3ebbb..6bceba272 100644
--- a/src/helix/endpoints/schedule/mod.rs
+++ b/src/helix/endpoints/schedule/mod.rs
@@ -4,6 +4,7 @@ use crate::{
     types,
 };
 use serde::{Deserialize, Serialize};
+use std::borrow::Cow;

 pub mod create_channel_stream_schedule_segment;
 pub mod delete_channel_stream_schedule_segment;
diff --git a/src/helix/endpoints/schedule/update_channel_stream_schedule.rs b/src/helix/endpoints/schedule/update_channel_stream_schedule.rs
index 4fea71883..a62dfaf49 100644
--- a/src/helix/endpoints/schedule/update_channel_stream_schedule.rs
+++ b/src/helix/endpoints/schedule/update_channel_stream_schedule.rs
@@ -53,18 +53,18 @@ pub struct UpdateChannelStreamScheduleRequest<'a> {
     /// User ID of the broadcaster who owns the channel streaming schedule. Provided broadcaster_id must match the user_id in the user OAuth token.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub broadcaster_id: &'a types::UserIdRef,
+    pub broadcaster_id: Cow<'a, types::UserIdRef>,
     /// Indicates if Vacation Mode is enabled. Set to true to add a vacation or false to remove vacation from the channel streaming schedule.
     #[cfg_attr(feature = "typed-builder", builder(default, setter(into)))]
     pub is_vacation_enabled: Option<bool>,
     /// Start time for vacation specified in RFC3339 format. Required if is_vacation_enabled is set to true.
     #[cfg_attr(feature = "typed-builder", builder(default, setter(into)))]
     #[serde(borrow)]
-    pub vacation_start_time: Option<&'a types::TimestampRef>,
+    pub vacation_start_time: Option<Cow<'a, types::TimestampRef>>,
     /// End time for vacation specified in RFC3339 format. Required if is_vacation_enabled is set to true.
     #[cfg_attr(feature = "typed-builder", builder(default, setter(into)))]
     #[serde(borrow)]
-    pub vacation_end_time: Option<&'a types::TimestampRef>,
+    pub vacation_end_time: Option<Cow<'a, types::TimestampRef>>,
     /// The timezone for when the vacation is being scheduled using the IANA time zone database format. Required if is_vacation_enabled is set to true.
     #[cfg_attr(feature = "typed-builder", builder(default, setter(into)))]
     #[serde(borrow)]
@@ -73,9 +73,9 @@ pub struct UpdateChannelStreamScheduleRequest<'a> {

 impl<'a> UpdateChannelStreamScheduleRequest<'a> {
     /// Update the settings for a channel’s stream schedule.
-    pub fn broadcaster_id(broadcaster_id: impl Into<&'a types::UserIdRef>) -> Self {
+    pub fn broadcaster_id(broadcaster_id: impl types::IntoCow<'a, types::UserIdRef> + 'a) -> Self {
         Self {
-            broadcaster_id: broadcaster_id.into(),
+            broadcaster_id: broadcaster_id.to_cow(),
             is_vacation_enabled: Default::default(),
             vacation_start_time: Default::default(),
             vacation_end_time: Default::default(),
@@ -149,8 +149,8 @@ fn test_request() {
     let end = types::Timestamp::try_from("2021-05-23T00:00:00Z").unwrap();
     let req = UpdateChannelStreamScheduleRequest {
         is_vacation_enabled: Some(true),
-        vacation_start_time: Some(&start),
-        vacation_end_time: Some(&end),
+        vacation_start_time: Some(types::IntoCow::to_cow(&start)),
+        vacation_end_time: Some(types::IntoCow::to_cow(&end)),
         timezone: Some("America/New_York"),
         ..UpdateChannelStreamScheduleRequest::broadcaster_id("141981764")
     };
diff --git a/src/helix/endpoints/schedule/update_channel_stream_schedule_segment.rs b/src/helix/endpoints/schedule/update_channel_stream_schedule_segment.rs
index 3b6c33546..d6f6690f3 100644
--- a/src/helix/endpoints/schedule/update_channel_stream_schedule_segment.rs
+++ b/src/helix/endpoints/schedule/update_channel_stream_schedule_segment.rs
@@ -68,22 +68,22 @@ pub struct UpdateChannelStreamScheduleSegmentRequest<'a> {
     /// User ID of the broadcaster who owns the channel streaming schedule. Provided broadcaster_id must match the user_id in the user OAuth token.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub broadcaster_id: &'a types::UserIdRef,
+    pub broadcaster_id: Cow<'a, types::UserIdRef>,
     /// The ID of the streaming segment to update.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub id: &'a types::StreamSegmentIdRef,
+    pub id: Cow<'a, types::StreamSegmentIdRef>,
 }

 impl<'a> UpdateChannelStreamScheduleSegmentRequest<'a> {
     /// Update a single scheduled broadcast or a recurring scheduled broadcast for a channel’s [stream schedule](https://help.twitch.tv/s/article/channel-page-setup#Schedule).
     pub fn new(
-        broadcaster_id: impl Into<&'a types::UserIdRef>,
-        id: impl Into<&'a types::StreamSegmentIdRef>,
+        broadcaster_id: impl types::IntoCow<'a, types::UserIdRef> + 'a,
+        id: impl types::IntoCow<'a, types::StreamSegmentIdRef> + 'a,
     ) -> Self {
         Self {
-            broadcaster_id: broadcaster_id.into(),
-            id: id.into(),
+            broadcaster_id: broadcaster_id.to_cow(),
+            id: id.to_cow(),
         }
     }
 }
@@ -106,7 +106,7 @@ pub struct UpdateChannelStreamScheduleSegmentBody<'a> {
     /// Game/Category ID for the scheduled broadcast.
     #[cfg_attr(feature = "typed-builder", builder(default, setter(into)))]
     #[serde(skip_serializing_if = "Option::is_none", borrow)]
-    pub category_id: Option<&'a types::CategoryIdRef>,
+    pub category_id: Option<Cow<'a, types::CategoryIdRef>>,
     /// Title for the scheduled broadcast. Maximum: 140 characters.
     #[cfg_attr(feature = "typed-builder", builder(default, setter(into)))]
     #[serde(skip_serializing_if = "Option::is_none", borrow)]
diff --git a/src/helix/endpoints/search/mod.rs b/src/helix/endpoints/search/mod.rs
index 08bfe5430..79f074bf8 100644
--- a/src/helix/endpoints/search/mod.rs
+++ b/src/helix/endpoints/search/mod.rs
@@ -22,6 +22,7 @@ use crate::{
     types,
 };
 use serde::{Deserialize, Serialize};
+use std::borrow::Cow;

 pub mod search_categories;
 pub mod search_channels;
diff --git a/src/helix/endpoints/search/search_categories.rs b/src/helix/endpoints/search/search_categories.rs
index 3e1941d8e..3134405f9 100644
--- a/src/helix/endpoints/search/search_categories.rs
+++ b/src/helix/endpoints/search/search_categories.rs
@@ -50,7 +50,7 @@ pub struct SearchCategoriesRequest<'a> {
     /// URI encoded search query
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub query: &'a str,
+    pub query: Cow<'a, str>,
     /// Cursor for forward pagination: tells the server where to start fetching the next set of results, in a multi-page response. The cursor value specified here is from the pagination response field of a prior query.
     #[cfg_attr(feature = "typed-builder", builder(default))]
     pub after: Option<helix::Cursor>,
@@ -67,7 +67,7 @@ impl<'a> SearchCategoriesRequest<'a> {
     /// Search categories with the following query.
     pub fn query(query: impl Into<&'a str>) -> Self {
         Self {
-            query: query.into(),
+            query: query.into().into(),
             after: None,
             before: None,
             first: None,
diff --git a/src/helix/endpoints/streams/get_followed_streams.rs b/src/helix/endpoints/streams/get_followed_streams.rs
index d9f4efc2d..48158e58f 100644
--- a/src/helix/endpoints/streams/get_followed_streams.rs
+++ b/src/helix/endpoints/streams/get_followed_streams.rs
@@ -50,7 +50,7 @@ pub struct GetFollowedStreamsRequest<'a> {
     /// Returns streams broadcast by one or more specified user IDs. You can specify up to 100 IDs.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub user_id: &'a types::UserIdRef,
+    pub user_id: Cow<'a, types::UserIdRef>,
     /// Cursor for forward pagination: tells the server where to start fetching the next set of results, in a multi-page response. The cursor value specified here is from the pagination response field of a prior query.
     #[cfg_attr(feature = "typed-builder", builder(default))]
     pub after: Option<helix::Cursor>,
@@ -69,9 +69,9 @@ impl<'a> GetFollowedStreamsRequest<'a> {
     /// Requires token with scope [`user:read:follows`](twitch_oauth2::Scope::UserReadFollows).
     ///
     /// See also [`HelixClient::get_followed_streams`](crate::helix::HelixClient::get_followed_streams).
-    pub fn user_id(user_id: impl Into<&'a types::UserIdRef>) -> Self {
+    pub fn user_id(user_id: impl types::IntoCow<'a, types::UserIdRef> + 'a) -> Self {
         Self {
-            user_id: user_id.into(),
+            user_id: user_id.to_cow(),
             after: Default::default(),
             before: Default::default(),
             first: Default::default(),
diff --git a/src/helix/endpoints/streams/get_stream_tags.rs b/src/helix/endpoints/streams/get_stream_tags.rs
index f8941a275..044b226c7 100644
--- a/src/helix/endpoints/streams/get_stream_tags.rs
+++ b/src/helix/endpoints/streams/get_stream_tags.rs
@@ -51,14 +51,14 @@ pub struct GetStreamTagsRequest<'a> {
     /// ID of the stream whose tags are going to be fetched
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub broadcaster_id: &'a types::UserIdRef,
+    pub broadcaster_id: Cow<'a, types::UserIdRef>,
 }

 impl<'a> GetStreamTagsRequest<'a> {
     /// ID of the stream whose tags are going to be fetched
-    pub fn broadcaster_id(broadcaster_id: impl Into<&'a types::UserIdRef>) -> Self {
+    pub fn broadcaster_id(broadcaster_id: impl types::IntoCow<'a, types::UserIdRef> + 'a) -> Self {
         Self {
-            broadcaster_id: broadcaster_id.into(),
+            broadcaster_id: broadcaster_id.to_cow(),
         }
     }
 }
diff --git a/src/helix/endpoints/streams/get_streams.rs b/src/helix/endpoints/streams/get_streams.rs
index c882a949b..b8a51247f 100644
--- a/src/helix/endpoints/streams/get_streams.rs
+++ b/src/helix/endpoints/streams/get_streams.rs
@@ -41,7 +41,6 @@

 use super::*;
 use helix::RequestGet;
-use std::borrow::Cow;

 /// Query Parameters for [Get Streams](super::get_streams)
 ///
diff --git a/src/helix/endpoints/streams/mod.rs b/src/helix/endpoints/streams/mod.rs
index 919f9e12d..d2061f5ec 100644
--- a/src/helix/endpoints/streams/mod.rs
+++ b/src/helix/endpoints/streams/mod.rs
@@ -24,6 +24,7 @@ use crate::{
     types,
 };
 use serde::{Deserialize, Serialize};
+use std::borrow::Cow;

 #[doc(inline)]
 pub use get_followed_streams::GetFollowedStreamsRequest;
diff --git a/src/helix/endpoints/streams/replace_stream_tags.rs b/src/helix/endpoints/streams/replace_stream_tags.rs
index 538acd02c..43783a0da 100644
--- a/src/helix/endpoints/streams/replace_stream_tags.rs
+++ b/src/helix/endpoints/streams/replace_stream_tags.rs
@@ -60,7 +60,6 @@
 //! and parse the [`http::Response`] with [`ReplaceStreamTagsRequest::parse_response(None, &request.get_uri(), response)`](ReplaceStreamTagsRequest::parse_response)
 use super::*;
 use helix::RequestPut;
-use std::borrow::Cow;

 /// Query Parameters for [Replace Stream Tags](super::replace_stream_tags)
 ///
@@ -72,14 +71,14 @@ pub struct ReplaceStreamTagsRequest<'a> {
     /// ID of the stream for which tags are to be replaced.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub broadcaster_id: &'a types::UserIdRef,
+    pub broadcaster_id: Cow<'a, types::UserIdRef>,
 }

 impl<'a> ReplaceStreamTagsRequest<'a> {
     /// ID of the stream for which tags are to be replaced.
-    pub fn broadcaster_id(broadcaster_id: impl Into<&'a types::UserIdRef>) -> Self {
+    pub fn broadcaster_id(broadcaster_id: impl types::IntoCow<'a, types::UserIdRef> + 'a) -> Self {
         Self {
-            broadcaster_id: broadcaster_id.into(),
+            broadcaster_id: broadcaster_id.to_cow(),
         }
     }
 }
diff --git a/src/helix/endpoints/subscriptions/check_user_subscription.rs b/src/helix/endpoints/subscriptions/check_user_subscription.rs
index 8c5fd1637..9f5fd4593 100644
--- a/src/helix/endpoints/subscriptions/check_user_subscription.rs
+++ b/src/helix/endpoints/subscriptions/check_user_subscription.rs
@@ -38,7 +38,6 @@
 //! and parse the [`http::Response`] with [`CheckUserSubscriptionRequest::parse_response(None, &request.get_uri(), response)`](CheckUserSubscriptionRequest::parse_response)
 use super::*;
 use helix::RequestGet;
-use std::borrow::Cow;

 /// Query Parameters for [Check User Subscription](super::check_user_subscription)
 ///
@@ -50,7 +49,7 @@ pub struct CheckUserSubscriptionRequest<'a> {
     /// User ID of the broadcaster. Must match the User ID in the Bearer token.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub broadcaster_id: &'a types::UserIdRef,
+    pub broadcaster_id: Cow<'a, types::UserIdRef>,
     /// Unique identifier of account to get subscription status of. Accepts up to 100 values.
     #[cfg_attr(feature = "typed-builder", builder(default))]
     #[serde(borrow)]
@@ -59,9 +58,9 @@ pub struct CheckUserSubscriptionRequest<'a> {

 impl<'a> CheckUserSubscriptionRequest<'a> {
     /// Checks subscribed users to this specific channel.
-    pub fn broadcaster_id(broadcaster_id: impl Into<&'a types::UserIdRef>) -> Self {
+    pub fn broadcaster_id(broadcaster_id: impl types::IntoCow<'a, types::UserIdRef> + 'a) -> Self {
         Self {
-            broadcaster_id: broadcaster_id.into(),
+            broadcaster_id: broadcaster_id.to_cow(),
             user_id: Cow::Borrowed(&[]),
         }
     }
diff --git a/src/helix/endpoints/subscriptions/get_broadcaster_subscriptions.rs b/src/helix/endpoints/subscriptions/get_broadcaster_subscriptions.rs
index 39f26ce21..ce53f3cee 100644
--- a/src/helix/endpoints/subscriptions/get_broadcaster_subscriptions.rs
+++ b/src/helix/endpoints/subscriptions/get_broadcaster_subscriptions.rs
@@ -39,7 +39,7 @@

 use super::*;
 use helix::RequestGet;
-use std::borrow::Cow;
+
 /// Query Parameters for [Get Broadcaster Subscriptions](super::get_broadcaster_subscriptions)
 ///
 /// [`get-broadcaster-subscriptions`](https://dev.twitch.tv/docs/api/reference#get-broadcaster-subscriptions)
@@ -50,7 +50,7 @@ pub struct GetBroadcasterSubscriptionsRequest<'a> {
     /// User ID of the broadcaster. Must match the User ID in the Bearer token.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub broadcaster_id: &'a types::UserIdRef,
+    pub broadcaster_id: Cow<'a, types::UserIdRef>,
     /// Unique identifier of account to get subscription status of. Accepts up to 100 values.
     #[cfg_attr(feature = "typed-builder", builder(default))]
     #[serde(borrow)]
@@ -65,9 +65,9 @@ pub struct GetBroadcasterSubscriptionsRequest<'a> {

 impl<'a> GetBroadcasterSubscriptionsRequest<'a> {
     /// Get a broadcasters subscribers
-    pub fn broadcaster_id(broadcaster_id: impl Into<&'a types::UserIdRef>) -> Self {
+    pub fn broadcaster_id(broadcaster_id: impl types::IntoCow<'a, types::UserIdRef> + 'a) -> Self {
         Self {
-            broadcaster_id: broadcaster_id.into(),
+            broadcaster_id: broadcaster_id.to_cow(),
             user_id: Cow::Borrowed(&[]),
             after: Default::default(),
             first: Default::default(),
diff --git a/src/helix/endpoints/subscriptions/get_broadcaster_subscriptions_events.rs b/src/helix/endpoints/subscriptions/get_broadcaster_subscriptions_events.rs
index 6d843ff1a..8a80212fc 100644
--- a/src/helix/endpoints/subscriptions/get_broadcaster_subscriptions_events.rs
+++ b/src/helix/endpoints/subscriptions/get_broadcaster_subscriptions_events.rs
@@ -46,7 +46,6 @@

 use super::*;
 use helix::RequestGet;
-use std::borrow::Cow;

 /// Query Parameters for [Get Broadcaster Subscriptions Events](super::get_broadcaster_subscriptions_events)
 ///
@@ -58,7 +57,7 @@ pub struct GetBroadcasterSubscriptionsEventsRequest<'a> {
     /// Must match the User ID in the Bearer token.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub broadcaster_id: &'a types::UserIdRef,
+    pub broadcaster_id: Cow<'a, types::UserIdRef>,
     /// Filters the results and only returns a status object for users who have a subscribe event in this channel and have a matching user_id.
     /// Maximum: 100
     #[cfg_attr(feature = "typed-builder", builder(default))]
@@ -78,9 +77,9 @@ pub struct GetBroadcasterSubscriptionsEventsRequest<'a> {

 impl<'a> GetBroadcasterSubscriptionsEventsRequest<'a> {
     /// Get events for this broadcaster
-    pub fn broadcaster_id(broadcaster_id: impl Into<&'a types::UserIdRef>) -> Self {
+    pub fn broadcaster_id(broadcaster_id: impl types::IntoCow<'a, types::UserIdRef> + 'a) -> Self {
         Self {
-            broadcaster_id: broadcaster_id.into(),
+            broadcaster_id: broadcaster_id.to_cow(),
             user_id: Cow::Borrowed(&[]),
             after: Default::default(),
             first: Default::default(),
diff --git a/src/helix/endpoints/subscriptions/mod.rs b/src/helix/endpoints/subscriptions/mod.rs
index e1c3a41ab..e401405e7 100644
--- a/src/helix/endpoints/subscriptions/mod.rs
+++ b/src/helix/endpoints/subscriptions/mod.rs
@@ -26,6 +26,7 @@ use crate::{
     types,
 };
 use serde::{Deserialize, Serialize};
+use std::borrow::Cow;

 pub mod check_user_subscription;
 pub mod get_broadcaster_subscriptions;
diff --git a/src/helix/endpoints/tags/get_all_stream_tags.rs b/src/helix/endpoints/tags/get_all_stream_tags.rs
index 1c53d2d09..aa3f434b7 100644
--- a/src/helix/endpoints/tags/get_all_stream_tags.rs
+++ b/src/helix/endpoints/tags/get_all_stream_tags.rs
@@ -38,7 +38,6 @@

 use super::*;
 use helix::RequestGet;
-use std::borrow::Cow;

 /// Query Parameters for [Get All Stream Tags](super::get_all_stream_tags)
 ///
diff --git a/src/helix/endpoints/tags/mod.rs b/src/helix/endpoints/tags/mod.rs
index 698d1c979..61a2a8e09 100644
--- a/src/helix/endpoints/tags/mod.rs
+++ b/src/helix/endpoints/tags/mod.rs
@@ -22,6 +22,7 @@ use crate::{
     types,
 };
 use serde::{Deserialize, Serialize};
+use std::borrow::Cow;
 use std::collections::HashMap;

 pub mod get_all_stream_tags;
diff --git a/src/helix/endpoints/teams/get_channel_teams.rs b/src/helix/endpoints/teams/get_channel_teams.rs
index 94cc1ead0..6c956ea3b 100644
--- a/src/helix/endpoints/teams/get_channel_teams.rs
+++ b/src/helix/endpoints/teams/get_channel_teams.rs
@@ -48,14 +48,14 @@ pub struct GetChannelTeamsRequest<'a> {
     /// Team ID.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub broadcaster_id: &'a types::UserIdRef,
+    pub broadcaster_id: Cow<'a, types::UserIdRef>,
 }

 impl<'a> GetChannelTeamsRequest<'a> {
     /// Get the team of this specific broadcaster
-    pub fn broadcaster_id(broadcaster_id: impl Into<&'a types::UserIdRef>) -> Self {
+    pub fn broadcaster_id(broadcaster_id: impl types::IntoCow<'a, types::UserIdRef> + 'a) -> Self {
         Self {
-            broadcaster_id: broadcaster_id.into(),
+            broadcaster_id: broadcaster_id.to_cow(),
         }
     }
 }
diff --git a/src/helix/endpoints/teams/get_teams.rs b/src/helix/endpoints/teams/get_teams.rs
index 0a00c006c..6b9f0018d 100644
--- a/src/helix/endpoints/teams/get_teams.rs
+++ b/src/helix/endpoints/teams/get_teams.rs
@@ -48,7 +48,7 @@ pub struct GetTeamsRequest<'a> {
     /// Team ID.
     #[cfg_attr(feature = "typed-builder", builder(default, setter(into)))]
     #[serde(borrow)]
-    pub id: Option<&'a types::TeamIdRef>,
+    pub id: Option<Cow<'a, types::TeamIdRef>>,
     /// Team name.
     #[cfg_attr(feature = "typed-builder", builder(default, setter(into)))]
     #[serde(borrow)]
@@ -57,9 +57,9 @@ pub struct GetTeamsRequest<'a> {

 impl<'a> GetTeamsRequest<'a> {
     /// Get team with this [`TeamId`](types::TeamId)
-    pub fn id(id: impl Into<&'a types::TeamIdRef>) -> Self {
+    pub fn id(id: impl types::IntoCow<'a, types::TeamIdRef> + 'a) -> Self {
         Self {
-            id: Some(id.into()),
+            id: Some(id.to_cow()),
             name: None,
         }
     }
diff --git a/src/helix/endpoints/teams/mod.rs b/src/helix/endpoints/teams/mod.rs
index 6b949b4e9..ba9ed304f 100644
--- a/src/helix/endpoints/teams/mod.rs
+++ b/src/helix/endpoints/teams/mod.rs
@@ -5,6 +5,7 @@ use crate::{
     types,
 };
 use serde::{Deserialize, Serialize};
+use std::borrow::Cow;

 pub mod get_channel_teams;
 pub mod get_teams;
diff --git a/src/helix/endpoints/users/block_user.rs b/src/helix/endpoints/users/block_user.rs
index 88de0bb3c..933bfadd4 100644
--- a/src/helix/endpoints/users/block_user.rs
+++ b/src/helix/endpoints/users/block_user.rs
@@ -56,7 +56,7 @@ pub struct BlockUserRequest<'a> {
     /// User ID of the follower
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub target_user_id: &'a types::UserIdRef,
+    pub target_user_id: Cow<'a, types::UserIdRef>,
     /// Source context for blocking the user. Valid values: "chat", "whisper".
     #[cfg_attr(feature = "typed-builder", builder(default, setter(into)))]
     pub source_context: Option<SourceContext>,
@@ -67,9 +67,9 @@ pub struct BlockUserRequest<'a> {

 impl<'a> BlockUserRequest<'a> {
     /// Block a user
-    pub fn block_user(target_user_id: impl Into<&'a types::UserIdRef>) -> Self {
+    pub fn block_user(target_user_id: impl types::IntoCow<'a, types::UserIdRef> + 'a) -> Self {
         Self {
-            target_user_id: target_user_id.into(),
+            target_user_id: target_user_id.to_cow(),
             source_context: None,
             reason: None,
         }
diff --git a/src/helix/endpoints/users/get_user_block_list.rs b/src/helix/endpoints/users/get_user_block_list.rs
index 4cac7f2c2..2dfeddc8c 100644
--- a/src/helix/endpoints/users/get_user_block_list.rs
+++ b/src/helix/endpoints/users/get_user_block_list.rs
@@ -48,7 +48,7 @@ pub struct GetUserBlockListRequest<'a> {
     /// User ID for a Twitch user.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub broadcaster_id: &'a types::UserIdRef,
+    pub broadcaster_id: Cow<'a, types::UserIdRef>,
     /// Cursor for forward pagination: tells the server where to start fetching the next set of results, in a multi-page response. The cursor value specified here is from the pagination response field of a prior query.
     #[cfg_attr(feature = "typed-builder", builder(default))]
     pub after: Option<helix::Cursor>,
@@ -59,9 +59,9 @@ pub struct GetUserBlockListRequest<'a> {

 impl<'a> GetUserBlockListRequest<'a> {
     /// Get a specified user’s block list
-    pub fn broadcaster_id(broadcaster_id: impl Into<&'a types::UserIdRef>) -> Self {
+    pub fn broadcaster_id(broadcaster_id: impl types::IntoCow<'a, types::UserIdRef> + 'a) -> Self {
         Self {
-            broadcaster_id: broadcaster_id.into(),
+            broadcaster_id: broadcaster_id.to_cow(),
             after: Default::default(),
             first: Default::default(),
         }
diff --git a/src/helix/endpoints/users/get_users.rs b/src/helix/endpoints/users/get_users.rs
index 153115e5d..e85ed4a14 100644
--- a/src/helix/endpoints/users/get_users.rs
+++ b/src/helix/endpoints/users/get_users.rs
@@ -41,7 +41,6 @@

 use super::*;
 use helix::RequestGet;
-use std::borrow::Cow;

 /// Query Parameters for [Get Users](super::get_users)
 ///
diff --git a/src/helix/endpoints/users/get_users_follows.rs b/src/helix/endpoints/users/get_users_follows.rs
index 994541578..048a9b362 100644
--- a/src/helix/endpoints/users/get_users_follows.rs
+++ b/src/helix/endpoints/users/get_users_follows.rs
@@ -53,38 +53,38 @@ pub struct GetUsersFollowsRequest<'a> {
     /// User ID. The request returns information about users who are being followed by the from_id user.
     #[cfg_attr(feature = "typed-builder", builder(default, setter(into)))]
     #[serde(borrow)]
-    pub from_id: Option<&'a types::UserIdRef>,
+    pub from_id: Option<Cow<'a, types::UserIdRef>>,
     /// User ID. The request returns information about users who are following the to_id user.
     #[cfg_attr(feature = "typed-builder", builder(default, setter(into)))]
     #[serde(borrow)]
-    pub to_id: Option<&'a types::UserIdRef>,
+    pub to_id: Option<Cow<'a, types::UserIdRef>>,
 }

 impl<'a> GetUsersFollowsRequest<'a> {
     /// Get the broadcasters that `from_id` is following
-    pub fn following(from_id: impl Into<&'a types::UserIdRef>) -> Self {
+    pub fn following(from_id: impl types::IntoCow<'a, types::UserIdRef> + 'a) -> Self {
         Self {
-            from_id: Some(from_id.into()),
+            from_id: Some(from_id.to_cow()),
             ..Self::empty()
         }
     }

     /// Get the followers of `to_id`
-    pub fn followers(to_id: impl Into<&'a types::UserIdRef>) -> Self {
+    pub fn followers(to_id: impl types::IntoCow<'a, types::UserIdRef> + 'a) -> Self {
         Self {
-            to_id: Some(to_id.into()),
+            to_id: Some(to_id.to_cow()),
             ..Self::empty()
         }
     }

     /// Check if user follows a specific broadcaster
     pub fn follows(
-        user_id: impl Into<&'a types::UserIdRef>,
-        broadcaster_id: impl Into<&'a types::UserIdRef>,
+        user_id: impl types::IntoCow<'a, types::UserIdRef> + 'a,
+        broadcaster_id: impl types::IntoCow<'a, types::UserIdRef> + 'a,
     ) -> Self {
         Self {
-            from_id: Some(user_id.into()),
-            to_id: Some(broadcaster_id.into()),
+            from_id: Some(user_id.to_cow()),
+            to_id: Some(broadcaster_id.to_cow()),
             ..Self::empty()
         }
     }
diff --git a/src/helix/endpoints/users/mod.rs b/src/helix/endpoints/users/mod.rs
index 76539ac4b..9007f03d0 100644
--- a/src/helix/endpoints/users/mod.rs
+++ b/src/helix/endpoints/users/mod.rs
@@ -24,6 +24,7 @@ use crate::{
     types,
 };
 use serde::{Deserialize, Serialize};
+use std::borrow::Cow;

 pub mod block_user;
 pub mod get_user_block_list;
diff --git a/src/helix/endpoints/users/unblock_user.rs b/src/helix/endpoints/users/unblock_user.rs
index bb806fd10..34894ee95 100644
--- a/src/helix/endpoints/users/unblock_user.rs
+++ b/src/helix/endpoints/users/unblock_user.rs
@@ -49,14 +49,14 @@ pub struct UnblockUserRequest<'a> {
     /// User ID of the follower
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub target_user_id: &'a types::UserIdRef,
+    pub target_user_id: Cow<'a, types::UserIdRef>,
 }

 impl<'a> UnblockUserRequest<'a> {
     /// Create a new unblock request
-    pub fn unblock_user(target_user_id: impl Into<&'a types::UserIdRef>) -> Self {
+    pub fn unblock_user(target_user_id: impl types::IntoCow<'a, types::UserIdRef> + 'a) -> Self {
         Self {
-            target_user_id: target_user_id.into(),
+            target_user_id: target_user_id.to_cow(),
         }
     }
 }
diff --git a/src/helix/endpoints/videos/delete_videos.rs b/src/helix/endpoints/videos/delete_videos.rs
index e0c073602..0a2abcbab 100644
--- a/src/helix/endpoints/videos/delete_videos.rs
+++ b/src/helix/endpoints/videos/delete_videos.rs
@@ -40,7 +40,6 @@

 use super::*;
 use helix::RequestDelete;
-use std::borrow::Cow;

 // FIXME: One of id, user_id or game_id needs to be specified. typed_builder should have enums. id can not be used with other params
 /// Query Parameters for [Delete Videos](super::delete_videos)
diff --git a/src/helix/endpoints/videos/get_videos.rs b/src/helix/endpoints/videos/get_videos.rs
index 5481df4cb..6f1b76c8c 100644
--- a/src/helix/endpoints/videos/get_videos.rs
+++ b/src/helix/endpoints/videos/get_videos.rs
@@ -39,7 +39,6 @@

 use super::*;
 use helix::RequestGet;
-use std::borrow::Cow;

 // FIXME: One of id, user_id or game_id needs to be specified. typed_builder should have enums. id can not be used with other params
 /// Query Parameters for [Get Videos](super::get_videos)
@@ -59,11 +58,11 @@ pub struct GetVideosRequest<'a> {
     /// ID of the user who owns the video.
     #[cfg_attr(feature = "typed-builder", builder(default, setter(into)))]
     #[serde(borrow)]
-    pub user_id: Option<&'a types::UserIdRef>,
+    pub user_id: Option<Cow<'a, types::UserIdRef>>,
     /// ID of the game the video is of.
     #[cfg_attr(feature = "typed-builder", builder(default, setter(into)))]
     #[serde(borrow)]
-    pub game_id: Option<&'a types::CategoryIdRef>,
+    pub game_id: Option<Cow<'a, types::CategoryIdRef>>,
     /// Cursor for forward pagination: tells the server where to start fetching the next set of results, in a multi-page response. The cursor value specified here is from the pagination response field of a prior query.
     #[cfg_attr(feature = "typed-builder", builder(default))]
     pub after: Option<helix::Cursor>,
@@ -100,17 +99,17 @@ impl<'a> GetVideosRequest<'a> {
     }

     /// ID of the user who owns the video.
-    pub fn user_id(user_id: impl Into<&'a types::UserIdRef>) -> Self {
+    pub fn user_id(user_id: impl types::IntoCow<'a, types::UserIdRef> + 'a) -> Self {
         Self {
-            user_id: Some(user_id.into()),
+            user_id: Some(user_id.to_cow()),
             ..Self::default()
         }
     }

     /// ID of the game the video is of.
-    pub fn game_id(game_id: impl Into<&'a types::CategoryIdRef>) -> Self {
+    pub fn game_id(game_id: impl types::IntoCow<'a, types::CategoryIdRef> + 'a) -> Self {
         Self {
-            game_id: Some(game_id.into()),
+            game_id: Some(game_id.to_cow()),
             ..Self::default()
         }
     }
diff --git a/src/helix/endpoints/videos/mod.rs b/src/helix/endpoints/videos/mod.rs
index f4dcf326a..cca77322c 100644
--- a/src/helix/endpoints/videos/mod.rs
+++ b/src/helix/endpoints/videos/mod.rs
@@ -23,6 +23,7 @@ use crate::{
     types,
 };
 use serde::{Deserialize, Serialize};
+use std::borrow::Cow;

 pub mod delete_videos;
 pub mod get_videos;
diff --git a/src/helix/endpoints/whispers/mod.rs b/src/helix/endpoints/whispers/mod.rs
index 6420e8285..fc2d53d1c 100644
--- a/src/helix/endpoints/whispers/mod.rs
+++ b/src/helix/endpoints/whispers/mod.rs
@@ -6,6 +6,7 @@ use crate::{
     types,
 };
 use serde::{Deserialize, Serialize};
+use std::borrow::Cow;

 pub mod send_whisper;

diff --git a/src/helix/endpoints/whispers/send_whisper.rs b/src/helix/endpoints/whispers/send_whisper.rs
index 6c256b0b2..3ebfe9e5b 100644
--- a/src/helix/endpoints/whispers/send_whisper.rs
+++ b/src/helix/endpoints/whispers/send_whisper.rs
@@ -63,19 +63,22 @@ pub struct SendWhisperRequest<'a> {
     /// The ID of the user sending the whisper. This user must have a verified phone number.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub from_user_id: &'a types::UserIdRef,
+    pub from_user_id: Cow<'a, types::UserIdRef>,
     /// The ID of the user to receive the whisper.
     #[cfg_attr(feature = "typed-builder", builder(setter(into)))]
     #[serde(borrow)]
-    pub to_user_id: &'a types::UserIdRef,
+    pub to_user_id: Cow<'a, types::UserIdRef>,
 }

 impl<'a> SendWhisperRequest<'a> {
     /// Create a new [`SendWhisperRequest`]
-    pub fn new(from: impl Into<&'a types::UserIdRef>, to: impl Into<&'a types::UserIdRef>) -> Self {
+    pub fn new(
+        from: impl types::IntoCow<'a, types::UserIdRef> + 'a,
+        to: impl types::IntoCow<'a, types::UserIdRef> + 'a,
+    ) -> Self {
         Self {
-            from_user_id: from.into(),
-            to_user_id: to.into(),
+            from_user_id: from.to_cow(),
+            to_user_id: to.to_cow(),
         }
     }
 }
diff --git a/twitch_types b/twitch_types
index 4d303a84a..547c624ec 160000
--- a/twitch_types
+++ b/twitch_types
@@ -1 +1 @@
-Subproject commit 4d303a84a748abea87c08b1f2670412f44d01e00
+Subproject commit 547c624ec3f9d9ce0cb20a7f8c61fb0706d50485

apply this diff and we should be good

Done. Btw I wouldn't mind if you committed these changes on my branch.

@Nerixyz what do you think about my other changes. Does this work for you?

Works for me 👍 Thanks for making these changes!

lets do it!
bors r+


error: IF_MAX_STRING_SIZE undeclared

Version: libuv-1.x
Platform: MINGW32_NT-6.0

I tried to build libuv with MSYS2, but It fails.
log:
src/win/getaddrinfo.c:79:33: error: 'IF_MAX_STRING_SIZE' undeclared (first use in this function)
How should I define it?

Libuv looks for NDIS_IF_MAX_STRING_SIZE and IF_MAX_STRING_SIZE.  Apparently msys2 provides neither?  Does it work when you #include <ifdef.h> directly in getaddrinfo.c?

/d/item/libuv-1.x $ make CC     src/win/libuv_la-getaddrinfo.lo src/win/getaddrinfo.c:22:19: fatal error: ifdef.h: No such file or directory compilation terminated. make: *** [src/win/libuv_la-getaddrinfo.lo] Error 1
To correct my questions,I use msys instead of msys2.
Now I using msys2 and it can work.


hyperion-v4l2: taking screenshot results in memory access error

[x] I confirm that this is an issue rather than a question.

Bug report
Using hyperion-v4l2 (2.0.17-beta.1) to take a screenshot results in memory access error.
hyperiond is running fine.
I don't think it's related, but brightness, contrast, saturation is supposedly set to 0.
v4l2-ctl -d /dev/video0 --list-ctrls
User Controls
                 brightness 0x00980900 (int)    : min=0 max=1023 step=1 default=448 value=448 flags=slider
                   contrast 0x00980901 (int)    : min=0 max=1023 step=1 default=464 value=464 flags=slider
                 saturation 0x00980902 (int)    : min=0 max=1023 step=1 default=512 value=512 flags=slider
                        hue 0x00980903 (int)    : min=-3583 max=3583 step=1 default=0 value=0 flags=slider
                  sharpness 0x0098091b (int)    : min=0 max=255 step=1 default=96 value=96 flags=slider

Steps to reproduce
./hyperion-v4l2 --device /dev/video0 --input 0 --video-standard PAL --signal-detection-disabled --screenshot --debug
hyperion-v4l2:
Version   : 2.0.17-beta.1 (master (GitHub-49c346e0/d5438acb-1712087086))
build time: Apr 12 2024 20:14:04
2024-04-12T20:16:54.062 || V4L2              :  Grabber.cpp:142:setWidthHeight() | Set new width: 640, height: 480 for capture
2024-04-12T20:16:54.067 || V4L2              :  Set flipmode to NO_CHANGE
2024-04-12T20:16:54.077 || V4L2              :  V4L2Grabber.cpp:151:init() | Set device (path) to: usbtv (/dev/video0)
2024-04-12T20:16:54.078 || V4L2              :  Grabber.cpp:142:setWidthHeight() | Set new width: 720, height: 576 for capture
2024-04-12T20:16:54.080 || V4L2              :  V4L2Grabber.cpp:488:init_device() | Set device input to: Composite
2024-04-12T20:16:54.093 || V4L2              :  V4L2Grabber.cpp:507:init_device() | Video standard=PAL
2024-04-12T20:16:54.093 || V4L2              :  V4L2Grabber.cpp:614:init_device() | Set resolution to width=720 height=576
2024-04-12T20:16:54.095 || V4L2              :  V4L2Grabber.cpp:651:init_device() | Set brightness to 0
2024-04-12T20:16:54.096 || V4L2              :  V4L2Grabber.cpp:660:init_device() | Set contrast to 0
2024-04-12T20:16:54.097 || V4L2              :  V4L2Grabber.cpp:669:init_device() | Set saturation to 0
2024-04-12T20:16:54.097 |__| V4L2              :  V4L2Grabber.cpp:707:init_device() | Pixel format=YUYV
QObject::connect(EncoderThreadManager, V4L2Grabber): invalid nullptr parameter
Speicherzugriffsfehler
What is expected?
screenshot is saved
What is actually happening?
hyperion-v4l2 crashes
System

Hyperion Server:

Build:             master (GitHub-49c346e0/d5438acb-1712087086)
Build time:        Apr 12 2024 20:12:23
Git Remote:        https://github.com/hyperion-project/hyperion.ng.git
Version:           2.0.17-beta.1
UI Lang:           de (BrowserLang: de)
UI Access:         expert
Avail Screen Cap.: dispmanx,framebuffer,qt
Avail Video  Cap.: v4l2
Avail Audio  Cap.: audio
Avail Services:    boblight,cec,effectengine,forwarder,flatbuffer,protobuffer,mDNS,SSDP,borderdetection
Config path:       /home/pi/.hyperion
Database:          read/write
Mode:              Non-GUI

Hyperion Server OS:

Distribution:      Raspbian GNU/Linux 11 (bullseye)
Architecture:      arm
CPU Model:         ARMv7 Processor rev 4 (v7l)
CPU Type:          Raspberry Pi Zero 2 W Rev 1.0
CPU Revision:      902120
CPU Hardware:      BCM2835
Kernel:            linux (6.1.21-v7+ (WS: 32))
Root/Admin:        false
Qt Version:        5.15.2
Python Version:    3.9.2
Browser:           Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0

@Thinner77 Thanks for reporting.
This is a confirmed bug. We will look into it.

Thank you, works.


[ NEW PAGE ] Using the Clifford Simulator

What the new page should cover:
Non-trivial example of using Clifford Simulator
SME collaborators (involve for planning and review):
Shelly Garion
Existing resources to build upon

There are actually two distinct and unrelated Clifford simulator implementations:

qiskit.quantum_info.StabilizerState
The "stabilizer" simulation method of Qiskit Aer

Which one of these should the new page be about? Should we write about both of them?

I think that probably both of them should be documented, and a good starting point could be this blog:
https://medium.com/qiskit/explore-the-clifford-group-a-crucial-tool-for-benchmarking-error-correction-and-more-b9fdca16bb46
However, I also think that Qiskit Aer simulator is more powerful in several ways:
First, as it's written in C++ it should be more efficient and scalable than the Python quantum_info classes.
Second, Qiskit Aer also includes the Extended Stabilizer simulator that can simulate circuits containing some non-Clifford gates.
Third, one can use Qiskit Aer noise model to simulate Clifford circuits with additional Pauli noise using the Stabilizer simulator.
Perhaps there may be some interesting use-cases for Quantum Error Correction (https://github.com/qiskit-community/qiskit-qec)?

Note that the StabilizerState class can be useful in preparing an initial stabilizer state as part of a circuit (or a final Clifford for Randomized Benchmarking). There are some efficient synthesis algorithms for it:
https://qiskit.org/documentation/apidoc/synthesis.html#qiskit.synthesis.synth_stabilizer_depth_lnn


BitmapData.alphaMask does not work in IE9

Hi,
I am doing a puzzle game, where I load the image to reproduce & a serie of masks (in black and white) to apply for the pieces' shape.
The following snippet work as intended in all browsers but IE9 :
var bmd = game.make.bitmapData(330, 250);
var bmdMask = game.add.bitmapData(330, 250).load('mask1');
bmdMask.replaceRGB(255, 255, 255, 255, 0, 0, 0, 0, 255);   // replace white by alpha = 0 for the mask
bmd.alphaMask('original', bmdMask);
In IE9, it just displays the original image in bmd. IE10 seems to work in my tests.
My investigations lead me that it would be setPixels32 that does not work correctly for IE9 : by displaying bmdMask in a sprite, it shows the white color instead of transparency.
NB : I tried the processPixelRGB API, with the same results.

Could you please try using the IE9 polyfill found in the Resources folder. Just include it before Phaser in your page and see what happens. My guess is replaceRGB doesn't work because IE9 doesn't support Typed Arrays, so the polyfill should hopefully get around this.

Thank you for your suggestion.
I included dataview-polyfill, and got exact same results...

Still no solution in my sight. Any other suggestion ?

Going to close this one off, as it's old, and more than likely a browser limitation. All alphaMask does is draw 2 images using blend mode 'source atop': https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation - nothing more I'm afraid, it's literally just a few lines of code. Maybe try another blend mode, to see if you get better / different results?


vowpalwabbit: fix build against boost-python.

Patch setup.py to look for libboost_python{Major}{Minor}. This fixes the build in unstable and 18.09.
Motivation for this change
Going through the list of #45960 I found that the Vowpal Wabbit Python module does not compile. This fixes compilation with Python 2.7 and 3.6.
Note: for some reason, boost is added to the build environment without boost-python, unless I explicitly add python.pkgs.boost as a dependency.
Things done

[x] Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS)
Built on platform(s)

[x] NixOS
[ ] macOS
[ ] other Linux distributions

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nox --run "nox-review wip"
[x] Tested execution of all binary files (usually in ./result/bin/)
[ ] Determined the impact on package closure size (by running nix path-info -S before and after)
[x] Fits CONTRIBUTING.md.

Failure on aarch64-linux (full log)
Attempted: python2Packages.vowpalwabbit, python3Packages.vowpalwabbit
Partial log (click to expand)
    self._build_extensions_serial()
  File "/nix/store/sb88r9crdhinhkm6vpxwzf5zmij86p8v-python3-3.6.6/lib/python3.6/distutils/command/build_ext.py", line 473, in _build_extensions_serial
    self.build_extension(ext)
  File "setup.py", line 115, in build_extension
    subprocess.check_call(['make', 'python'], cwd=path.join(here, 'src'), env=env)
  File "/nix/store/sb88r9crdhinhkm6vpxwzf5zmij86p8v-python3-3.6.6/lib/python3.6/subprocess.py", line 291, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['make', 'python']' returned non-zero exit status 2.
builder for '/nix/store/yyryl97m3xcpzk5a524rf0jk4qsgvbn1-python3.6-vowpalwabbit-8.5.0.drv' failed with exit code 1
error: build of '/nix/store/9p5k6dq76kvpdzgcjbzr35lmw99wrk94-python2.7-vowpalwabbit-8.5.0.drv', '/nix/store/yyryl97m3xcpzk5a524rf0jk4qsgvbn1-python3.6-vowpalwabbit-8.5.0.drv' failed

Failure on x86_64-darwin (full log)
Attempted: python2Packages.vowpalwabbit, python3Packages.vowpalwabbit
Partial log (click to expand)
    self._build_extensions_serial()
  File "/nix/store/dlswl7xjvh3bsfydygqzi2n0f82p5d9p-python3-3.6.6/lib/python3.6/distutils/command/build_ext.py", line 473, in _build_extensions_serial
    self.build_extension(ext)
  File "setup.py", line 114, in build_extension
    env['PYTHON_LIBS'] = '-l {}'.format(find_boost())
  File "setup.py", line 39, in find_boost
    raise Exception('Could not find boost python library')
Exception: Could not find boost python library
builder for '/nix/store/vfvjr3lfs9c10gp5yddlzhfmx4fr7gjw-python3.6-vowpalwabbit-8.5.0.drv' failed with exit code 1
error: build of '/nix/store/fq9xcrp3x7lwlg30j73cfq5yalwcj88i-python2.7-vowpalwabbit-8.5.0.drv', '/nix/store/vfvjr3lfs9c10gp5yddlzhfmx4fr7gjw-python3.6-vowpalwabbit-8.5.0.drv' failed

Success on x86_64-linux (full log)
Attempted: python2Packages.vowpalwabbit, python3Packages.vowpalwabbit
Partial log (click to expand)
shrinking RPATHs of ELF executables and libraries in /nix/store/4jqjjk5cdcs6psha5wrpb41xn0fqxryf-python3.6-vowpalwabbit-8.5.0
shrinking /nix/store/4jqjjk5cdcs6psha5wrpb41xn0fqxryf-python3.6-vowpalwabbit-8.5.0/lib/python3.6/site-packages/pylibvw.cpython-36m-x86_64-linux-gnu.so
strip is /nix/store/h0lbngpv6ln56hjj59i6l77vxq25flbz-binutils-2.30/bin/strip
stripping (with command strip and flags -S) in /nix/store/4jqjjk5cdcs6psha5wrpb41xn0fqxryf-python3.6-vowpalwabbit-8.5.0/lib
patching script interpreter paths in /nix/store/4jqjjk5cdcs6psha5wrpb41xn0fqxryf-python3.6-vowpalwabbit-8.5.0
checking for references to /build in /nix/store/4jqjjk5cdcs6psha5wrpb41xn0fqxryf-python3.6-vowpalwabbit-8.5.0...
running install tests
running check
/nix/store/n6qm2ygsvb25nr7rmsq6rpkmhs6cvxfp-python2.7-vowpalwabbit-8.5.0
/nix/store/4jqjjk5cdcs6psha5wrpb41xn0fqxryf-python3.6-vowpalwabbit-8.5.0

The added commit should also fix the build on Darwin (tested on macOS 10.14 beta).

@GrahamcOfBorg build python2Packages.vowpalwabbit python3Packages.vowpalwabbit

Failure on aarch64-linux (full log)
Attempted: python2Packages.vowpalwabbit, python3Packages.vowpalwabbit
Partial log (click to expand)
    self._build_extensions_serial()
  File "/nix/store/sb88r9crdhinhkm6vpxwzf5zmij86p8v-python3-3.6.6/lib/python3.6/distutils/command/build_ext.py", line 473, in _build_extensions_serial
    self.build_extension(ext)
  File "setup.py", line 113, in build_extension
    subprocess.check_call(['make', 'python'], cwd=path.join(here, 'src'), env=env)
  File "/nix/store/sb88r9crdhinhkm6vpxwzf5zmij86p8v-python3-3.6.6/lib/python3.6/subprocess.py", line 291, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['make', 'python']' returned non-zero exit status 2.
builder for '/nix/store/68w132wx8hfhpiq0b3rfqrfz5z02wik9-python3.6-vowpalwabbit-8.5.0.drv' failed with exit code 1
error: build of '/nix/store/68w132wx8hfhpiq0b3rfqrfz5z02wik9-python3.6-vowpalwabbit-8.5.0.drv', '/nix/store/827xwn1q8ygmvy0pa2gya2x13kvqr0lp-python2.7-vowpalwabbit-8.5.0.drv' failed

This never built on aarch64 according to hydra logs, so would you please mark it as broken on aarch64 to get rid of one more failure?

Success on x86_64-linux (full log)
Attempted: python2Packages.vowpalwabbit, python3Packages.vowpalwabbit
Partial log (click to expand)
shrinking RPATHs of ELF executables and libraries in /nix/store/lh0ri1z0wv5b88rm4qxzrhwagk8sh1j2-python3.6-vowpalwabbit-8.5.0
shrinking /nix/store/lh0ri1z0wv5b88rm4qxzrhwagk8sh1j2-python3.6-vowpalwabbit-8.5.0/lib/python3.6/site-packages/pylibvw.cpython-36m-x86_64-linux-gnu.so
strip is /nix/store/h0lbngpv6ln56hjj59i6l77vxq25flbz-binutils-2.30/bin/strip
stripping (with command strip and flags -S) in /nix/store/lh0ri1z0wv5b88rm4qxzrhwagk8sh1j2-python3.6-vowpalwabbit-8.5.0/lib
patching script interpreter paths in /nix/store/lh0ri1z0wv5b88rm4qxzrhwagk8sh1j2-python3.6-vowpalwabbit-8.5.0
checking for references to /build in /nix/store/lh0ri1z0wv5b88rm4qxzrhwagk8sh1j2-python3.6-vowpalwabbit-8.5.0...
running install tests
running check
/nix/store/jy6d5va2gbm7dhj42lvyx09pjf3h1a3y-python2.7-vowpalwabbit-8.5.0
/nix/store/lh0ri1z0wv5b88rm4qxzrhwagk8sh1j2-python3.6-vowpalwabbit-8.5.0

Success on x86_64-darwin (full log)
Attempted: python2Packages.vowpalwabbit, python3Packages.vowpalwabbit
Partial log (click to expand)
Successfully installed vowpalwabbit-8.5.0
~
post-installation fixup
strip is /nix/store/df6k4mgdjxciy0f637lryp7c9ln7n1m3-cctools-binutils-darwin/bin/strip
stripping (with command strip and flags -S) in /nix/store/jp3cdh73crchd25d2m26d3g75yhmp0bz-python3.6-vowpalwabbit-8.5.0/lib
patching script interpreter paths in /nix/store/jp3cdh73crchd25d2m26d3g75yhmp0bz-python3.6-vowpalwabbit-8.5.0
running install tests
running check
/nix/store/94i1pvdzkbl5f8jyrik01m01n3s8jh0d-python2.7-vowpalwabbit-8.5.0
/nix/store/jp3cdh73crchd25d2m26d3g75yhmp0bz-python3.6-vowpalwabbit-8.5.0

Ok, marked it broken on aarch64.

backported in  46f4a934dcc..b4479796e30


feat: Implement byop

@JefeDavis You seem to be missing the operator-builder-tools entry in go.mod.  Needs to be added in internal/plugins/workload/v1/scaffolds/templates/gomod.go
Also, won't I need to use your add-phases branch of operator-builder-tools?

Here's what I did:

clone github.com/JefeDavis/operator-builder-tools and check out add-phases branch
Run make func-test on JefeDavis:implement-byop (which fails as expected)
Add the go.mod replace statement to point to local JefeDavis/operator-builder-tools:add-phases
Re-run make

Here's the error I get:
❯ make
/home/lander2k2/Projects/src/github.com/lander2k2/acme-webstore-mgr/bin/controller-gen object:headerFile="hack/boilerplate.go.txt" paths="./..."
go fmt ./...
go vet ./...
# github.com/acme/acme-cnp-mgr/controllers/apps
controllers/apps/webstore_controller.go:209:3: r.InitializePhases undefined (type *WebStoreReconciler has no field or method InitializePhases)
# github.com/acme/acme-cnp-mgr/controllers/apps
vet: controllers/apps/webstore_controller.go:209:4: r.InitializePhases undefined (type *WebStoreReconciler has no field or method InitializePhases)
make: *** [Makefile:50: vet] Error 2

OK working now.  LGTM


Fix

SonarQube analysis reported 2 issues

 2 major

Watch the comments in this conversation to review them.
1 extra issue
Note: The following issues were found on lines that were not modified in the pull request. Because these issues can't be reported as line comments, they are summarized here:

 creator.py#L46: Remove those useless parentheses

SonarQube analysis reported 5 issues
Note: The following issues were found on lines that were not modified in the pull request. Because these issues can't be reported as line comments, they are summarized here:

 formatter.py#L47: Function has a complexity of 11 which is greater than 10 authorized.
 formatter.py#L47: This function has 7 returns or yields, which is more than the 3 allowed.
 init.py#L13: Invalid object 'SagaFormatter' in all, must contain only strings
 init.py#L13: Invalid object 'get_logger' in all, must contain only strings
 formatter.py#L27: as argument

SonarQube analysis reported 12 issues

 2 major
 10 minor

Watch the comments in this conversation to review them.
3 extra issues
Note: The following issues were found on lines that were not modified in the pull request. Because these issues can't be reported as line comments, they are summarized here:

 formatter.py#L47: Function has a complexity of 11 which is greater than 10 authorized.
 formatter.py#L47: This function has 7 returns or yields, which is more than the 3 allowed.
 formatter.py#L27: as argument

SonarQube analysis reported 2 issues

 1 major
 1 minor

Watch the comments in this conversation to review them.

 xs:(logger-py) get name and version

SonarQube analysis reported 4 issues

 3 major
 1 minor

Watch the comments in this conversation to review them.

SonarQube analysis reported 1 issue

 1 minor

Watch the comments in this conversation to review them.


Get rid of OPLA_BACKEND_DOMAIN

What is the purpose of this env variable / config entry in default.json ?
It apparently tells the frontend where our backend api sits. From experience, this leads to hell in deployments configurations, etc.
Alternative : just use the relative api/ in frontends. We will take care of routing that properly.

Closing, irrelevant now.


Document about how to implement own plugins

I read the docs, but I can't find the tutorials to implement a custom plugin, such as Resource Provider.

Thanks for the feedback. You may find this blog post helpful depending on what you're trying to do: https://www.pulumi.com/blog/dynamic-providers/

Closing as dupe of https://github.com/pulumi/docs/issues/595.


[New game]: MCQ type quiz game for HTML, CSS, JS

🎮 Game Request
Game logic and basic description
Creating an MCQ type quiz game for HTML,CSS,JS.
Point down the features
Game points
The user has to choose one option among the multiple options for a given question.
The score will be printed at the end of the quiz.

Thank you for raising an issue 💗
You can self assign the issue by commenting /assign in comment 😀
Make sure you follow CODE OF CONDUCT and CONTRIBUTING GUIDELINES 🚀
Don’t Forget to ⭐ our GameZone🎮
Make sure you join our Discord🕹

Hey @Nikita06211 ! Thank you so much for your raising the issue💗
It’s all yours, you can come anytime again and make some contributions! 🚀
Alone, we can do little, but together we can do so much! 😇


[BUG] Score stops updating if unicode in steam name

Score stops updating if unicode in steam name.
It has to do with get5_eventapi when it happens the bot has an error.
Traceback (most recent call last):
  File "C:\Users\penalte\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\aiohttp\web_protocol.py", line 418, in start
    resp = await task
  File "C:\Users\penalte\Desktop\5vs5\discord-10man-master\utils\server.py", line 109, in _handler
    gotv = server.get_gotv()
  File "C:\Users\penalte\Desktop\5vs5\discord-10man-master\utils\csgo_server.py", line 50, in get_gotv
    status: str = valve.rcon.execute((self.server_address, self.server_port), self.RCON_password, 'status')
  File "C:\Users\penalte\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\valve\rcon.py", line 631, in execute
    return rcon(command)
  File "C:\Users\penalte\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\valve\rcon.py", line 346, in __call__
    raise RCONMessageError("Couldn't decode response: {}".format(exc))
valve.rcon.RCONMessageError: Couldn't decode response: 'ascii' codec can't decode byte 0xe2 in position 602: ordinal not in range(128)

Looks like if players have non ascii characters in their name, when I use status to get the GOTV port, it will break.
Options:
a) enforce player names through get5
b) add a catch for decode error in get_gotv
c) see if there is a different way to get the port other than status

Will do b) and c)
instead of using status, I will use tv_port


npm run dev errors out in windows machines with "Cannot find module '--require/package.json'"

What version of Remix are you using?
1.14.1
Are all your remix dependencies & dev-dependencies using the same version?

[X] Yes

Steps to Reproduce
I was trying to follow the "Blog Tutorial(short)" from here.

Run the create-remix command npx create-remix@latest --template remix-run/indie-stack blog-tutorial
Select Typescript
Answer Y for ? Do you want me to run npm install? Yes
Open the created folder in VSCode with "I trust the author" settings.
Run npm run dev

Expected Behavior
I expect it to start the server and I should be able to navigate to http://localhost:3000/ and see the following image.

Actual Behavior
Command exits with the following output,
C:\SKR\throwaway\blog-tutorial-skr\node_modules\resolve\lib\sync.js:113
    throw err;
    ^

Error: Cannot find module '--require/package.json' from 'C:\SKR\throwaway\blog-tutorial-skr'
    at Function.resolveSync [as sync] (C:\SKR\throwaway\blog-tutorial-skr\node_modules\resolve\lib\sync.js:111:15)
    at Object.<anonymous> (C:\SKR\throwaway\blog-tutorial-skr\node_modules\binode\bin.js:21:28)
    at Module._compile (node:internal/modules/cjs/loader:1275:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1329:10)
    at Module.load (node:internal/modules/cjs/loader:1133:32)
    at Module._load (node:internal/modules/cjs/loader:972:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:83:12)
    at node:internal/main/run_main_module:23:47 {
  code: 'MODULE_NOT_FOUND'
}

Node.js v19.7.0
ERROR: "dev:remix" exited with 1.

OS Version
# systeminfo | findstr /B /C:"OS Name" /B /C:"OS Version"
OS Name:                   Microsoft Windows 11 Home
OS Version:                10.0.22000 N/A Build 22000

create-remix  version
# npx create-remix --version
1.14.1

Node & npm Version
# node --version
v19.7.0
# npm --version
8.4.0

Hey @senthil-sprint1 👋🏼
Are you still able to reproduce this issue?


[zh] Localize 'self_healing'

[ ] Localize the content/en/self_healing.md to content/zh-cn/ in dev-zh.

I'd like to be assigned to work on this issue if that's ok!

@EmilyXinyi Hi, plz go ahead ;)

@Jacob953 thanks! Could you please assign me to this issue? I don't see a self-assigning button :)

I think this term is already localized by this PR #1525 but was never linked to this issue.
@Jacob953 Could you please take a look?
Note: this term is only localized on the dev-zh branch but not on main, so I am guessing that dev-tw and main haven't merged yet.

Sorry about that, I'll correct the status of this progress.
And yep, the dev-zh branch does only focus on content of Chinese(Simplified).
Thx for your contribution! ;)


feat: abortable fetches

This change is not really the most important but I added it for my use case.
Users of my app can quickly navigate to different "captures" on a 2D map. They can click on a point marker to bring up basic information of their 3D capture. Part of this modal displays their modal in a 3D viewer preview (Potree or GaussianSplats3D).
Given how big some plys can be, I wanted to be able to abort the http request if the user closed the modal.

https://developer.mozilla.org/en-US/docs/Web/API/AbortController
plyLoader
      .loadFromURL(
        url,
        loadingProgress,
        compressionLevel,
        splatAlphaRemovalThreshold,
        controller.signal
      )
      .then((splatBuffer: any) => {
        viewer
          .loadSplatBuffer(splatBuffer, {
            splatAlphaRemovalThreshold: 5, // out of 255
            halfPrecisionCovariancesOnGPU: true,
          })
          .then(() => {
            requestAnimationFrame(update);
            setLoading(false);
          });
      })
      .catch((e: any) => {
        if (e.name === 'AbortError') {
          return;
        }
        setError(PlyErrors.UNKNOWN);
      });

    const resize = () => {
      if (!divRef.current) return;
      renderer.setSize(divRef.current.offsetWidth, divRef.current.offsetHeight);
      camera.aspect = divRef.current.offsetWidth / divRef.current.offsetHeight;
      camera.updateProjectionMatrix();
    };

    window.addEventListener('resize', resize);

    return () => {
      window.removeEventListener('resize', resize);
      controller.abort();
      while (_scene.children.length > 0) {
        _scene.remove(_scene.children[0]);
      }

      viewer.stop();
      viewer = undefined as any;
      plyLoader = undefined as any;
      renderer.dispose();
    };

I've actually been planning on revamping the loading system to be more robust, or to possibly utilize the THREE.LoadingManager, but it will have to be after the current release I'm working on. Can you hold out until then for this capability?

Yes, definitely can.

So I worked out a different way to abort file loads and I've got a PR for it here: #75
The code I've tested it with looks like:
const abortablePromise = viewer.loadFiles([
    {
      'path': '<path to first file>',
    },
    {
      'path': '<path to second file>',
    }
]);
abortablePromise.then(() => {
    console.log("Done");
})
.catch((error) => {
    console.log("Aborted");
});

window.setTimeout(() => {
    abortablePromise.abort();
}, 2000);

I went this route because it avoided adding any new parameters to any of the various load functions. Let me know if that will work for you.

Sorry for late reply, LTGM. Thank you


[GHSA-w9p3-5cr8-m3jj] Deserialization of Untrusted Data in Log4j 1.x

Updates

Affected products

Comments
This is similar to https://github.com/github/advisory-database/pull/2844 that was already merged.
org.zenframework.z8.dependencies.commons:log4j-1.2.17 (https://mvnrepository.com/artifact/org.zenframework.z8.dependencies.commons/log4j-1.2.17) is a "forked" version of log4j-1.2.17. Their digest are the same:

log4j-1.2.17-2.0.jar.sha1: 5af35056b4d257e4b64b9e8069c0746e8b08629f (https://repo1.maven.org/maven2/org/zenframework/z8/dependencies/commons/log4j-1.2.17/2.0/log4j-1.2.17-2.0.jar.sha1)
log4j-1.2.17.jar.sha1: 5af35056b4d257e4b64b9e8069c0746e8b08629f (https://repo1.maven.org/maven2/log4j/log4j/1.2.17/log4j-1.2.17.jar.sha1)

This suggests that these two packages are identical, and therefore this vulnerability would apply to this package as well. The sources of this package are not easily found, but for the sake of checking, I have decompiled the jar file (https://repo1.maven.org/maven2/org/zenframework/z8/dependencies/commons/log4j-1.2.17/2.0/log4j-1.2.17-2.0.jar). The vulnerable JMSSink class has not been modified (as expected) and therefore this vulnerability should apply to this package as well.
The description does not need to be modified as the mitigation ("Users should upgrade to Log4j 2 as it addresses numerous other issues from the previous versions.") also applies in this case.

👋 This pull request has been marked as stale because it has been open with no activity.  If you do nothing this pull request will be closed eventually by the stale bot. Please see CONTRIBUTING.md for more policy details.


malcontent: 0.4.0 → 0.6.0

At the moment fails due to cyclic dependency https://gitlab.freedesktop.org/pwithnall/malcontent/issues/16
Motivation for this change

https://gitlab.freedesktop.org/pwithnall/malcontent/-/tags/0.5.0
https://gitlab.freedesktop.org/pwithnall/malcontent/-/tags/0.6.0

Things done

[ ] Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS linux)
Built on platform(s)

[ ] NixOS
[ ] macOS
[ ] other Linux distributions

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review wip"
[ ] Tested execution of all binary files (usually in ./result/bin/)
[ ] Determined the impact on package closure size (by running nix path-info -S before and after)
[ ] Ensured that relevant documentation is up to date
[x] Fits CONTRIBUTING.md.

 I guess the only solution for that, as you mentioned there, is to split the projects up.

It seems @hedning just dropped it from flatpak https://github.com/hedning/nixpkgs/commit/cdf3594507a66aad27e8831e7ae45a24218bd53c.
Also heads up @hedning, @jtojnar has already done the bump to 0.6.0 here https://github.com/hedning/nixpkgs/commit/60a3fbcaa14b54995909bf23e0a6722e4dfb8305.

Yeah, I didn't want to mess around too much. Checked fedora which doesn't enable the malcontent option in flatpak either.

Let’s just remove it from flatpak for now. Having the module is more convenient for me for testing.


PFT-1249: Ref - collateral price id const

Closing this PR as the required changes are included in #22


Sometimes maker stops sending the heartbeat

During today's testing on master (debug mode), I realised that sometimes maker stops sending heartbeats to the taker; this results in a taker being in stuck in a connect -> disconnect -> connect loop every 20s.
This seems to be an error uncovered, but not caused by #906. More logs or debugging is needed to see where does maker get stuck (I wasn't able to update cfd offer either, which might indicate a more serious problem).
After restart, everything carried on without a problem.

Likely outdated.


Azure IPAM: invalid re-use of addresses bound by azure-vnet

Currently, there is nothing that prevents Azure IPAM from allocating an IP that's already been allocated by azure-vnet.
This might go unnoticed when the impacted workload doesn't factor network connectivity into its health check (ie. as a container serving static content). In my case, the coredns-autoscaler deployment that comes pre-installed on AKS was allocated the <IP_ADDRESS> address by azure-vnet.
Then, Cilium was installed in Azure IPAM mode, and the Pod started crashing:
λ  ~  kc get pods -n kube-system -o wide
NAME                                  READY   STATUS             RESTARTS   AGE     IP            NODE                                NOMINATED NODE   READINESS GATES
coredns-autoscaler-868b684fd4-r59j8   0/1     CrashLoopBackOff   1801       4d17h   <IP_ADDRESS>   aks-nodepool1-11146431-vmss000001   <none>           <none>

E0119 10:53:40.528410       1 reflector.go:125] github.com/kubernetes-incubator/cluster-proportional-autoscaler/pkg/autoscaler/k8sclient/k8sclient.go:96: Failed to list *v1.Node: Get https://aks-timo-aks-timo-da2a1f-e5c00dc8.hcp.westeurope.azmk8s.io:443/api/v1/nodes: dial tcp: lookup aks-timo-aks-timo-da2a1f-e5c00dc8.hcp.westeurope.azmk8s.io on <IP_ADDRESS>:53: read udp <IP_ADDRESS>:36881-><IP_ADDRESS>:53: i/o timeout
In the mean time, <IP_ADDRESS> was able to be claimed by one of the dummy Pods I deployed:
λ  ~  kc get pods --all-namespaces -o wide | grep \.56
default       dummy-79d88bc74c-snfsx                                   1/1     Running            0          3d21h   <IP_ADDRESS>   aks-nodepool1-11146431-vmss000001   <none>           <none>
kube-system   coredns-autoscaler-868b684fd4-r59j8                      0/1     CrashLoopBackOff   1805       4d17h   <IP_ADDRESS>   aks-nodepool1-11146431-vmss000001   <none>           <none>

Quick and dirty jq to get all pod IPs filtering out my cluster's node IPs:
λ  ~ kc get pods --all-namespaces -o json | jq '.items[].status.podIP' | grep -v null | grep -v '\.35' | grep -v '\.4' | sort | uniq -c
...
      2 "<IP_ADDRESS>"

Possible solutions, ignoring the bring-your-own CNI approach:

implement a mechanism for Cilium to detect and ignore existing allocations made by azure-vnet
instruct the user to restart all Pods in the cluster after deploying Cilium in Azure IPAM mode
add these default Pods (including tunnelfront and metrics-server, which suffer the same fate) to the list of Pods for Cilium to restart after deployment

The fact that I exhausted the IPAM pool on purpose accellerates this reproducer, but I've seen it happen with few Pods in the cluster too. When this happens to CoreDNS pods, there is cluster-wide DNS resolution impact.

This still needs to be investigated further.


Typescript intellisense not updating for translations.json in i18n.ts file

Description
Typescript compilation of translations data in i18n.ts have some problem, and not happening while changes are made in translation.json file.
Steps to reproduce
Steps to reproduce the behavior:

Just add new translations in translation.json of en folder and try with different objects with different properties&values combination.
Go to i18n.ts and check value of en file object by hovering over it's usage area, and you will see mismatch of typescript intellisense.

Expected behavior
It should update the intellisense and basically typescript compilation should work fine in project
Screenshots
If applicable, add screenshots to help explain your problem.

Above was exact copy, and now we see original file

Versions

react-boilerplate-cra-template: 1.0.2
Node/NPM: 12.18.4
Browser: not_applicable

I dont know why. It has nothing to do with boilerplate. Its purely typescript related isn't it?

it is for sure typescript related, but because translations as feature are provided in this boilerplate.
we will have to entertain this bug somehow, to improve boilerplate usage and adoption.

Its a very very minor thing. If yu can fix it then it would be great and PR welcome but I won't focus on this issue in my limited time for this project