text:
#209 better drive switcher

PR Checklist:

[ ] Link to related issue
[ ] Add changelog entry linking to issue
[ ] Added tests (if needed)
[ ] (If new feature) added in description / readme

please rebase first on main, your PR contains many of the same changes

ok, good stuff! Switcher is definitely an improvement. But it's not done:

[ ] WebSocket shows disconnected on full page reload (add a test for this)
[ ] Some default drives (such as localhost) look a bit weird if they don't work. Perhaps we should hide these defaults if they are offline, or only show them if the user is in fact visiting from localhost (add a test for this)
[ ] The order of the list changes, the current one is always at the top. I think the order needs to be stable.
[ ] Maybe add the new button to the dropdown list?
[ ] If the user is not signed in, they should be told that they should, because then they can save their drives!
[ ] We need some sort of explanation on what a Drive is. This is also missing in the docs.

ok, good stuff! Switcher is definitely an improvement. But it's not done:

[ ]  WebSocket shows disconnected on full page reload (add a test for this)
[ ]  Some default drives (such as localhost) look a bit weird if they don't work. Perhaps we should hide these defaults if they are offline, or only show them if the user is in fact visiting from localhost (add a test for this)
[ ]  The order of the list changes, the current one is always at the top. I think the order needs to be stable.
[ ]  Maybe add the new button to the dropdown list?
[ ]  If the user is not signed in, they should be told that they should, because then they can save their drives!
[ ]  We need some sort of explanation on what a Drive is. This is also missing in the docs.
[ ]  The button consistency is off. The drive switcher button is round with a border, the SideBarItem buttons are rounded and filled with an overlay.
[ ]  The alignment of the rows is off. Top item has too much padding, text is not centrally aligned.

Localhost is only visible in development, localhost:5137 is just the origin so it would not look weird in production. The only case where a drive would look weird (eg, a red url) would be when a user manually adds a broken drive or other resource to their agents drives property.

The order of the list changes because it is a history of drives with a max of 5 drives. Maybe this can be better indicated by using a clock icon instead of the checkbox.

I don't think making a new drive will be that common of a use-case to have a dedicated option in the dropdown.

4 & 5) Good point

Damnit forgot to fix it again 😅

Oops

authors: Polleps joepio

repo: atomicdata-dev/atomic-data-browser


text:
How to use the epos reader properly?

I am trying to use the epos reader.
when I create an epos object using the reader class, I correctly get the number of events
>>> epos.number_of_events
6596033

However, when I am trying to get values in the file, I get this error for all the available methods.
>>> m = epos.get_mass_to_charge_state_ratio()
>>> m.values
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NxField' object has no attribute 'values'

Am I doing something wrong? Any help would be greatly appreciated.

Dear @skatnagallu:
Which version of the ifes_apt_tc_data_modeling library are you using? I suppose you use some.
I have done heavy refactoring of this library last month and just today merged and pushed that new version on pypi.
Today is my first day after the parental leave vacation.
Using >=v0.2 reading should work like this: See an example here how it is done in paraprobe:
https://gitlab.com/paraprobe/paraprobe-toolbox/-/blob/main/code/transcoder/src/python/paraprobe_transcoder.py?ref_type=heads line 134 and following.
If the issue persist, let's meet for a short zoom to get it working for you and if necessary I can then fix it immediately.
As you will be likely using the multiplicities and so on it would be good if you also have a critical look into this function
https://github.com/atomprobe-tc/ifes_apt_tc_data_modeling/blob/main/ifes_apt_tc_data_modeling/epos/epos_reader.py
and confirm or suggest changes where the description is incorrect.
Thank you very much, Markus

Indeed I was using the older version. I will use the new version and keep you posted.

source: gharchive/issue

authors: mkuehbach skatnagallu

license_type: permissive

license_source: github-api


text:
Request and response going through well-known paths

Lead: @kalluriramkumar (please update if labeled incorrectly)
Is your feature request related to a problem? Please describe.
Right now the marshaling and unmarshalling of requests and responses do not happen through well-defined code paths.
Describe the solution you'd like
**Define abstractions and provide the implementations
Describe alternatives you've considered
None
Additional context
This task came as a result of the maintainability and testability of the SDK code
** Subtasks

[x] Propose new abstractions for request and response parsers and design review
[x] Implement response parsing abstractions
[x] Implement request parsing abstractions
[x]  Write unit tests
[x] Plug in the transformers in the SDK

Sub tasks

[ ] Propose new abstractions for request and response parsers and design review
[ ] Implement request parsing abstractions
[ ] Implement response parsing abstractions

Completed coding for Response Transformers and for getAtkeys method on at_client_impl

@kalluriramkumar can you update the subtasks section in the main issue description above please?

Added request - response transformers to enable all requests/responses go through a single path. Integrated the code with get method and put method. The get method changes are published to pub.dev packages in at_client: 3.0.9. The put method changes are completed and yet to be published.

authors: VJag gkc kalluriramkumar


text:
flickr/slurp: Treat fail as an error

Reject the promise when we get a fail status.

This makes it clear why the cron job is failing... "Invalid auth token"!

LGTM

@aboodman as suspected

source: gharchive/pull-request

authors: arv kalman

repo: attic-labs/noms


text:
Sysex

handles sysex receiving

Thanks!

authors: aure eljeff

repo: audiokit/AudioKit

license: mit

license_source: bigquery


text:
Whiteboard Enhancement

Resolved issue #12: Added Undo/Redo
Resolved issue #15: event.originalEvent.touches fails on event.type = touchend
Resolved issue #16: Whiteboard erase adds another color to image

Awesome, thanks @sumansaurabh !

authors: aullman sumansaurabh

repo: aullman/opentok-whiteboard


text:
输出文件按日期生成文件夹保存

直播平台
全平台
需求描述
生成日期命名的文件夹，让输出的文件可以保存在对应日期的文件夹中，如D：\output\date***.mp4 ，特别时直播流断断续续的时候同日期的文件太多了，保存在同一个文件夹中有点乱
操作步骤（可选）

...
需求截图（可选）
No response

文件整理的功能不属于一个直播录制软件该有的功能，如确有需要按日期分类存放录制文件这种特殊需求，请自行修改以下代码，将日期添加到模板字符串中
https://github.com/auqhjjqdo/LiveRecorder/blob/4a83c9485487abff4ac36cbfdce7abe74bbf03dd/live_recorder.py#L149

repo: auqhjjqdo/LiveRecorder

license: MIT


text:
App bundle including Aurelia modules

So the latest blog post demonstrates how to create two bundles, one for the app and one for Aurelia, along the lines of this:
var config = {
  ...
  bundles: {
    "dist/app-build": {
      includes: [
        '*',
        ...
      ],
      ...
    },
    "dist/aurelia": {
      includes: [
        'aurelia-bootstrapper',
        'aurelia-fetch-client',
        ...
      ],
      ...
    }
  }
};

What I'm running into is that when the app is bundled, the bundler tries to walk the Aurelia modules and fails with the following error:
Error on fetch for aurelia-framework at file:///Volumes/Data/Temp/aurelia-bundle-error/app/aurelia-framework.js
	Error: ENOENT, open '/Volumes/Data/Temp/aurelia-bundle-error/app/aurelia-framework.js'
    at Error (native)

Where the app.js looks like this:
var framework = require('aurelia-framework');
...

I found I could limit the scope of the app bundle by using the module syntax as described here:
var config = {
  ...
  bundles: {
    "dist/app-build": {
      includes: [
        '[*]',
        ...
      ],
      ...
    },
    ...
};

Anyways, I'm wondering if I'm doing something wrong, something has changed or if the blog post is not right. I pushed a repo that demonstrates this here.
Thx for all the help BTW. Aurelia rocks!

Something that was confusing to me (And this is not necessarily an Aurelia thing) are the paths in config.js and the bundle includes. Originally I was thinking the paths in the config.js were globs but they are not. Then I thought the bundler includes were globs, and they kinda are but you can't include extensions (Which evidently is a new thing). And then what's the relationship between the config.js path and the bundler includes? It's starting to become clearer but it's hard to track down info on this stuff and on top of it things are changing so fast. So what you think you understand today no longer applies to tomorrow (Literally today and tomorrow... O_o).
Anyways, point is that although Aurelia has been really straight forward, the underlying bits (Like SystemJS/jspm) have not been. I think it would really help uptake if the upcoming Aurelia documentation covered some of these details in addition to the Aurelia specific stuff.

@mikeobrien Aurelia bundle does not support [..] pattern yet. But we do support excludes : [ ] just like includes.
So here is one way to do what you are trying:

var aureliaLibs = [
        'aurelia-bootstrapper',
        'aurelia-fetch-client',
        ...
 ];

var config = {
  bundles: {
    "dist/app-build": {
      includes: [
        '*',
      ],
      excludes : aureliaLIbs.
    },
    "dist/aurelia": {
      includes: aureliaLibs,
      ...
    }
  }
};

Hmmm, I'm using the module syntax with the latest bits and it's working. AFAICT the bundle config is passed directly to the SystemJS bundler so Aurelia is not involved at that point. I could be missing something tho.

Yes, some of expression will work. For example:
var config = {
  bundles: {
    "dist/app-build": {
      includes: [
        'app/**/*',
      ],
      excludes : [ '[app/**/*]' ].
    }
};

This will create an app bundle excluding any external libraries.

What I'm seeing with the latest bits is that the following is creating an app bundle excluding any external libraries:
var config = {
  bundles: {
    "dist/app-build": {
      includes: [
        '[app/**/*]',
      ]
    }
};

No need for the exclude. In fact your config above will only include the external libraries, the opposite of what I'm trying to accomplish. This is consistent with what I'm seeing in the SystemJS docs.
Anyways, here's the point:

If I'm doing something wrong and you don't need to use the module syntax (As demonstrated in the blog post), I'd love to know what I'm doing wrong so I can fix it.
If you do need to use the module syntax above, the blog post needs to be updated otherwise people will get the error I mentioned.
If things have changed since the blog post and you now need to use the module syntax, again the blog post needs to be changed.

Bottom line is I'm trying to figure out if the blog post is wrong or if I'm doing something wrong and one of the two needs fixed.

You are right.

This will create an app bundle excluding any external libraries.

That's a wrong conclusion from my part. Apologies. I was not probably in my right mind.
var config = {
  bundles: {
    "dist/app-build": {
      includes: [
        'app/**/*',
      ],
      excludes : [ '[app/**/*]' ].
    }
};

This configuration should technically produce an aurelia bundle. app/**/* includes all the app module including the dependencies. [app/**/*] includes just the app modules. So the above configuration should produce a bundle of the dependencies only. (app/**/* - [app/**/*]).
But, in case of Aurelia it will not quite do that because all the Aurelia dependencies cannot be detected by static analysis of import or require statements. In some cases Aurelia loads modules dynamically. As of now those modules must be explicitly included in the bundle configuration.
So to answer your original question, you have this bundle config:
var config = {
  ...
  bundles: {
    "dist/app-build": {
      includes: [
        '*',
        ...
      ],
      ...
    },
    "dist/aurelia": {
      includes: [
        'aurelia-bootstrapper',
        'aurelia-fetch-client',
        ...
      ],
      ...
    }
  }
};

* here means everything in the app folder because you have a path config like:
 paths: {
    "*": "app/*",

Now, your app/app.js looks like:
var framework = require('aurelia-framework');

As you are requiring  aurelia-framework, that means one of two things here as long as module resolving is concern.

You have a map configuration in config.js that maps aurelia-framework to an installed module with version. eg: map : { "aurelia-framework" :  "github:aurelia-framework@0.16.0"}. or
You have module in app/aurelia-framework because you have * : app/* path configured.

As, you don't have any file like app/aurelia-framewok and the map configuration is not there too, the bundler is throwing error.
What you probably want is to create a map in config.js with for aurelia-framework
It's not a bundler issue necessarily. Your app will not run with this configuration because SystemJS will fail to find aurelia-framework

Aaaahhh, ok that makes sense now. So when I was referencing aurelia-framework my config.js looked like this with no alias mapped to aurelia-framework:
system.config({
  ...
  map: {
    "aurelia-bootstrapper": "github:aurelia/bootstrapper@0.17.0",
    ...
    "github:aurelia/framework@0.16.0": { ...
    }
});

I was thinking that that since the Aurelia framework module was downloaded as a dependency of the bootstrapper that the aurelia-framework alias would be automatically mapped but obviously that's not the case.
Also, makes sense now why you have to include the github:* modules in the bundle config. Didn't realize those were dynamically loaded.
Thanks for clarifying all that!

authors: ahmedshuhel mikeobrien

repo: aurelia/bundler


text:
Scss require issue in view

I'm submitting a feature request

Aurelia Skeleton Version
skeleton-esnext-webpack 1.0.2

Framework Version:
aurelia-framework 1.0.6

Please tell us about your environment:

Operating System:
OSX 10.11.6

Node Version:
6.7.0

NPM Version:
3.10.8

JSPM OR Webpack AND Version
webpack 2.1.0-beta.22

Browser:
all

Language:
ESNext

Current behavior:
We have 2 versions of style import in view: one for SASS and one for SCSS (@easy-webpack/config-sass was added in webpack configuration)
<require from="./style1.sass"></require>
<require from="./style1.scss"></require>
webpack config:
require('@easy-webpack/config-css')         ({ filename: 'styles.css', allChunks: true, sourceMap: false }),
 require('@easy-webpack/config-sass')         ({ filename: 'styles.css', allChunks: true, sourceMap: false }),
SASS import works successfully but for SCSS it doesn't work at all:
Unhandled rejection Error: Cannot find module './style1.scss.html'.     at webpackContextResolve (http://localhost:9000/app.bundle.js:521:9)     at webpackContext (http://localhost:9000/app.bundle.js:516:29)     at http://localhost:9000/aurelia-bootstrap.bundle.js:15802:48
The reason is "*.scss.html" in file extension.
Expected/desired behavior:

Please advise why aurelia add unnecessary extension "html" to the module path.
What do we need to do for valid SCSS import?
Thanks in advance.

Both imports (SASS and SCSS) doesn't work for now, right? what configuration is needed?

There is a work around for this as you can switch to normal webpack instead of easy webpack and import sass inside javascrpit.
Detail at #626

@bigopon You can import SASS inside JavaScript using Easy Webpack, no problem. Just use easy-webpack/config-sass, or add the loader yourself.

@niieani  I realized my stupidity after hitting send button, deleted that comment.

authors: ApRoland andlebed bigopon niieani

repo: aurelia/skeleton-navigation


text:
Update ExecutionResult to SubmitResult with the new binary format

Updates the schema to align with https://github.com/aurora-is-near/aurora-engine/pull/218
Includes a few sanity tests to make sure it works.

Related: https://github.com/aurora-is-near/aurora-relayer/pull/22

authors: artob birchmd


text:
Add CI jobs for Windows

The job builds a single-file version of the Au library, and runs a
simple test.  This test is enough to reproduce the errors in #143:
https://github.com/aurora-opensource/au/actions/runs/5496101666/job/14882361539
It also catches another few compiler errors on other versions of MSVC,
which we fix here.  The issue is that function parameters can't be used
in a constexpr context in general.  These particular parameters are
monovalue types
(https://aurora-opensource.github.io/au/main/reference/detail/monovalue_types/),
so the compiler's being a little pedantic in enforcing this rule, but
this also means that it's easy to fix the error.
With this PR, we go from 0 to 1 in terms of CI jobs for "best effort"
platforms.  This gives us a pattern we can use for future new platforms.
Helps #144.

Since these new jobs are the first in the "best effort" tier, technically they don't have to always be passing.  However, I think we want to make, well, our best effort to keep them passing, so I'll make them blocking unless and until something forces us to let them fail.

repo: aurora-opensource/au


text:
Failed to build ublox_dgnss_node on Rolling/Humble

This package is failing to build on the buildfarm for Rolling and Humble, one example is: https://build.ros2.org/job/Hbin_uJ64__ublox_dgnss_node__ubuntu_jammy_amd64__binary/9/consoleFull .
The problem ends up being this:
00:01:22.492 CMake Error at /usr/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
00:01:22.492   Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)

The containers that the ROS buildfarm uses only install things that are listed in the package.xml.  In this case, the package.xml does not list a dependency on pkg-config, and so that executable is not available for CMake to find.  If you add a <build_depend>pkg-config</build_depend> to your package.xml and do a new release, that should fix this problem.

It’s exactly the same as I used for galactic. Have no idea what is missing?

@clalancette its exactly the same as what I’m using to build it on galactic … where is this requirement listed?

@clalancette i don’t use pkg-config and it compiles/builds successfully on my local environment. This seems to be an build-farm configuration issue?

https://github.com/aussierobots/ublox_dgnss/blob/120c4c89db9e5bf993c9e091da5bce158b537d9e/ublox_dgnss_node/CMakeLists.txt#L28-L29
?

@clalancette that was to include libusb-1.0 only … works everywhere else. Is libusb-1.0 library available still on the buildfarm virtual machines for humble on Ubuntu jammy?

I would agree with @clalancette: this is more likely a problem with you not stating that dependency in your manifest than with the buildfarm config or whether Jammy introduced some sort of change.
Regardless of whether your package happened to build previously, you should list all your dependencies explicitly. Avoid transitively depending on something, as this can lead to problems with your immediate dependencies change their dependencies.

@gavanderhoorn it’s a cmake module https://cmake.org/cmake/help/latest/module/FindPkgConfig.html .. libusb-1.0 is the actual dependency.

So CMake tries to use Pkg-Config to find libusb, as you ask it to do here:
https://github.com/aussierobots/ublox_dgnss/blob/120c4c89db9e5bf993c9e091da5bce158b537d9e/ublox_dgnss_node/CMakeLists.txt#L28-L29
if Pkg-Config is not present on the system where CMake tries to do that, you'll get this error:
Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)

which is the error you find in your buildfarm build log.
So even though your code depends on libusb, your build additionally depends on pkg-config.
If you don't state that dependency, your build will fail.

@gavanderhoorn @clalancette change made but I cant bloom-release it
==> Checking on GitHub for a fork to make the pull request from...
Could not find a fork of ros/rosdistro on the hortovanyi GitHub account.
Would you like to create one now?
Continue [Y/n]?
Aborting pull request: HTTP Error 401: Unauthorized (https://api.github.com/repos/ros/rosdistro/forks)
The release of your packages was successful, but the pull request failed.
Please manually open a pull request by editing the file here: 'https://raw.githubusercontent.com/ros/rosdistro/master/humble/distribution.yaml'
<== No pull request opened.

Project building successfully now thank you @gavanderhoorn @clalancette for your help

authors: clalancette gavanderhoorn hortovanyi


text:
config file not being read?

it appears the config file is not being read, even though I'm passing in a parameter for it at the command line.
$ flare_beacon -c configs/elasticsearch.ini
[SUCCESS] Connected to elasticsearch on localhost:9200
$ grep port configs/elasticsearch.ini
es_port=9201
shouldn't the first one connect on 9201?

I identified the bug. The connection was being established to 9201, but the message was not being displayed properly.
I have updated the code. Please pull down the new code and try again.
https://github.com/austin-taylor/flare/commit/68fa618085cda96f7339155cef68e8afea36b974

Confirmed fix on local instance. Thank you for submitting the bug!

authors: austin-taylor raleel

repo: austin-taylor/flare


text:
Create  and plot temperature delta statistics

create data that contains general statistics of the temperature delta information

min, max, mean, median, std, var, etc.

plot this data as a function time

start with yearly plots, then monthly, then daily

plot this as a function of ambient temperature once mirror cooling is off

Temperature delta data has been created and is stored in a pickled pandas DataFrame.

This can be found in py/desiforecast/data/temp_delta.pkl

Late update: I was able to produce the plots of the temperature delta statistics using the unfiltered telemetry data. It took a bit of tweaking because the unfiltered data has lots of null values.

The data can be found in doc/nb/time_plots/temp_statistics.

Plot time to thermalize as a function of start and end temperature delta

Update
Over the past couple of days I was able to get some plots of the response time as a function of the temperature delta variance. These plots have a colorbar which indicates the final ambient temperature, which is what it would be just before observations. An example of one such plot is shown below:


text:
Add the LanguageIETF tag

Matroska v4 introduces a new language tag which contains an ASCII string.

I also wanted to say thanks for the crate! It has been very useful.

Thanks for the contribution!  I'm glad it's been helpful.

authors: austinleroy robmikh

repo: austinleroy/webm-iterable


text:
Ability to invoke handleRedirectCallback() from the useAuth0 hook

Please do not report security vulnerabilities here. The Responsible Disclosure Program details the procedure for disclosing security issues.
Thank you in advance for helping us to improve this library! Your attention to detail here is greatly appreciated and will help us respond as quickly as possible. For general support or usage questions, use the Auth0 Community or Auth0 Support. Finally, to avoid duplicates, please search existing Issues before submitting one here.
By submitting an Issue to this repository, you agree to the terms within the Auth0 Code of Conduct.
Describe the problem you'd like to have solved

I am currently building a Capacitor App that generates a link using buildAuthoriseUrl, navigates to that link using a popover Capacitor Browser window and then allows the user to sign in. An authorisation code is generated, however I need to manually invoke handleRedirectCallback to authenticate the user.

It would be great if the handleRedirectCallback method could be accessed anywhere using the useAuth0 hook.

Thanks!
Describe the ideal solution

Allow the handleRedirectCallback method to be accessed through the useAuth0 hook (similar to how buildAuthoriseUrl can).

Alternatives and current work-arounds

A clear and concise description of any alternatives you've considered or any work-arounds that are currently in place.

None at this stage.

Add any other context or screenshots about the feature request here.

I have forked the repo to achieve the functionality I want (available here).
Would you be interested in merging this feature?

Hey @benandrew - loginWithPopup accepts a custom config.popup option, which looks compatible with the Capacitor Browser API - would this work for you?

Hey @benandrew - loginWithPopup accepts a custom config.popup option, which looks compatible with the Capacitor Browser API - would this work for you?

Hey @adamjmcgrath, cheers for the response. Unfortunately, loginWithPopup doesn't appear to give the functionality I need. I currently have a listener setup that checks whether the Capacitor Browser navigates to the ./?code=XXX&state=XXX address (after successful authentication), and upon receiving that call, fires the handleRedirectCallback() to finalise the authentication process.
I tried implementing it using loginWithPopup but unfortunately it seemed to stop after generating the ./?code=XXX&state=XXX address.
Appreciate the help!

Hey @benandrew - I was planning on having a go at using loginWithPopup with Capacitor myself, but I haven't gotten round to it yet. I should have some time next week

Hey @ben-hunter-andrew-robertson - we're going to do some work to expose the handleRedirectCallback for this use case. I'll update this thread when we have a PR ready

Fantastic, thank you very much @adamjmcgrath!


text:
Application Sessions for Multiple organizations on client

Please do not report security vulnerabilities here. The Responsible Disclosure Program details the procedure for disclosing security issues.
Thank you in advance for helping us to improve this library! Please read through the template below and answer all relevant questions. Your additional work here is greatly appreciated and will help us respond as quickly as possible. For general support or usage questions, use the Auth0 Community or Auth0 Support. Finally, to avoid duplicates, please search existing Issues before submitting one here.
By submitting an Issue to this repository, you agree to the terms within the Auth0 Code of Conduct.
Describe the problem

Provide a clear and concise description of the issue

Hi,
Here is the situation I am dealing with--
Lets suppose that we have two organizations org1 and org2. Both these orgs have a common connection of logging in via google besides other connections as well. Let's also assume that user1 is already a part of both these orgs.
Now when the user logs into org1 Auth0 takes the user successfully through the entire log in flow and everything works smoothly. Once the user has successfully logged into org1 Auth0 saves a cookie called auth0.is.authenticated on the browser. Now whenever I visit any route Auth0 at the background calls the /authorize endpoint with prompt=None.
When the user now tries to log into org2 the user is not taken through the log in flow and is directly logged into the organization and I also receive a token.
My question is why is this behavior happening? How do I override this behavior? I would like the user to sign in every time they visit an organization for the first time(even if two orgs share a common connection and the user is already a member of both orgs).How do I maintain an application session for every organization the user is a part of on the client side?
Is it possible to dynamically change the organization parameter being passed into the Auth0Provider for different organizations?
I am new to using Auth0 and have tried a lot from my end but can't seem to get the desired behavior I am expecting of having the user log into an org if they do not have a valid session.
I would highly appreciate some guidance on the above scenario. I have also tried to go through the library source code but cannot figure out why this is happening.
Thanks!
Environment

Please provide the following:

Version of auth0-react used: 1.6.0
Which browsers have you tested in? Google Chrome
Which framework are you using, if applicable (Angular, React, etc): React
Other modules/plugins/libraries that might be involved: auth0-spa-js(used internally by auth0-react)

When the user now tries to log into org2 the user is not taken through the log in flow and is directly logged into the organization and I also receive a token.
My question is why is this behavior happening?

This is happening because you already have a session on auth0.com so the authorization server doesn't have to prompt you again to login. You can force the login prompt by passing prompt: 'login' on your login request (see https://auth0.github.io/auth0-react/interfaces/auth0_context.redirectloginoptions.html#prompt and https://auth0.com/docs/brand-and-customize/text-customization-new-universal-login/prompt-login)

Is it possible to dynamically change the organization parameter being passed into the Auth0Provider for different organizations?

You can't dynamically change this field on the fly, but you can dynamically initialise the Auth0Provider with an org id on page load - which should be ok for logging into different orgs with loginWithRedirect

authors: PuravManojShah adamjmcgrath


text:
AWS Load Balancer Auth

AWS recently added the functionality to authenticate a user on the load balancer and have a authenticated and hydrated user details in the request header.
I wasn't able to decode the object that comes from the load balancer even though it will decode on jwt.io. The example AWS give is in python but should be straight forward enough to decode the token.
https://docs.aws.amazon.com/elasticloadbalancing/latest/application/listener-authenticate-users.html
Has anyone attempted to decode the x-amzn-oidc-data header using jwt.decode?

Interesting!
Could you provide the code that you tried that did not work?
Off the top of my head it should be pretty easy, and would be something along the lines of:
// this should always work
console.log(jwt.decode(token));

const pubKey = fs.readFileSync('/path/to/publickey'); // replace this line with the HTTP request to get the key

jwt.verify(token, pubKey, (err, decoded) => {
  console.log('err:', err);
  console.log(decoded);
});

@MitMaro
This is what I was trying to do but I've even tried your example and it still didn't work. The only thing I added was the { algorithms: [ 'ES256' ]}.
const verifyJwt = async (token, db) => {
  const encoded_jwt_header = token.split('.')[0];
  const decoded_jwt = JSON.parse(base64.decode(encoded_jwt_header));
  const request = await fetch(
    `https://public-keys.auth.elb.us-west-2.amazonaws.com/${decoded_jwt.kid}`,
  );
  const cert = await request.text();  // -----BEGIN PUBLIC KEY----...

  return new Promise((resolve, reject) => {
    jwt.verify(
      token,
      cert,
      { algorithms: ['ES256'] },
      async (err, decoded) => {
        if (err) {
          reject(err);
        }

        resolve(decoded);
      },
    );
  });
};

@MitMaro

Same data added to jwt.io

@MitMaro figured it out and found this:
https://github.com/brianloveswords/node-jws/pull/84

That's a common mistake but Amazon should know better. Should be easy to do a simple string replace to work around the problem.

@jreeter ,
Amazon is using base64 to encode the tokens, which has a different character set than base64url, which is what the JWT specification requires.
Specifically, the + character is replaced with -, the / character is replaced with _ and the trailing =s are optional. You can do a basic string replace on the invalid tokens to make them valid base64url encoded tokens.
Untested Code, but the basic idea would be:
const correctToken = token.replace(/+/g, '-').replace(/\//g, '_');

@daerion I found a way to make this work, but it's not pretty......
Basically, the verify method in this library won't work, but the signature can be verified using the underlying node-jwa library. Then you just have to check things like is the token still valid (I am only checking if token is not expired):
const base64Url = require("base64url");
const jwt = require("jsonwebtoken");
const jws = require("jws");
const fetch = require("node-fetch").default;

async function verifyToken(token) {
  var base64UrlToken = base64Url.fromBase64(token);
  const decoded = jwt.decode(base64UrlToken, { complete: true });

  const { kid, signer } = decoded.header;
  const region = signer.split(":")[3];

  const uri = `https://public-keys.auth.elb.${region}.amazonaws.com/${kid}`;

  console.log(`Fetching key at: ${uri}`);

  const response = await fetch(uri);
  const key = await response.text();

  console.log(key);

  try {
    const verify = jws.verify(token, "ES256", key);
    if (!verify) {
      return null;
    }

    var clockTimestamp = Math.floor(Date.now() / 1000);
    if (clockTimestamp >= decoded.header.exp) {
      // Token expired.
      return null;
    }
  } catch (err) {
    console.error(err);
    throw err;
  }

  return decoded.payload;
}

@morganabel Thanks for sharing your implementation :)

Just ran into the same issue...

authors: MitMaro daerion delianides morganabel trallnag


text:
Supporting Multi-tenant Use Cases

Summary
The purpose of this issue is to start a discussion around supporting multi-tenant use cases in spicedb. Spicedb today does not support a multi-tenant topology - meaning that there is no representation of independent tenants or any form of tenant isolation mechanisms.
Motivation
The motivation behind this work is to facilitate the administration of and deployment of a spicedb server that can serve more than one tenant at a time and respect/honor common asks from organizations in a multi-tenant architecture. These include but are not limited to:

Tenant isolation - it's common for organizations sharing infrastructure to request database instance, database within an instance, or schema level isolation.
Tenant authorization - facilitate operations over relations and permissions scoped to a single tenant and enforce/restrict actions against spicedb resources or APIs for those tenants. For example, restricting write/read access for relation tuples in a namespace within a specific tenant.
Multi-tenant development - support for one or more development environments to assist in the QA process of promoting software from a development environment to a production environment.
etc..

Use Cases

As an organizations using spicedb within my platform, I want to be able to separate my customers/tenants permissions from one another to facilitate tenant isolation and to promote performance for a single tenant (e.g. reduce shared table contention by separating the tenants by database or schema or table level constructs).
As a client I would like spicedb to enforce access controls on top of the spicedb API to ensure only certain parties can mutate the contents of a namespace or a namespace's configuration and to limit/restrict read access to relationships/permissions within a namespace within my tenant. This will help ensure that untrusted parties cannot erroneously or maliciously mutate the relationships pertaining to my namespace.
As a client integrating with spicedb on behalf of some tenant, I want to see relation tuple changes only for the namespaces within my tenant that I care about, not across the whole system.
As an administrator within an organization integrating with spicedb, I'd like to be able to manage all of the tenants in the spicedb system including provisioning new tenants dynamically when new customers/tenants have signed up for my organizaton's platform.

I have some really good detailed design ideas around these things, but I wanted to start with an open discussion first. We can provide more concrete design details once we've settled on a strategy/plan for the degree of support we want to introduce.

Any update here?  How much of this can be done with schema design and/or identifier prefixing (examples welcome)?  Any where the "really good detailed design ideas" have been posted?  Is this getting discussed somewhere else?  Thanks!

In our experience, logical multi-tenancy as a solution for isolation is not that compelling and, often times, has significant performance impacts.
If you need fully isolated permission systems, it is highly recommended to run distinct clusters, which is easy to do via tools such as the SpiceDB Operator. This ensures that there is no chance of one system impacting the other, whether from security or performance perspectives.
If you need permission systems to share resources, this implies that you have, in fact, a single permission system, and it is recommended to use prefixes to provide logical identification of the resource types for each "portion" of the permission system. This also typically involves having each team submit their portion of the schema, and having tooling to combine the schema (usually via CI) to produce the final schema that will be used overall.
For this combined use case, we have work coming in the new year that will allow for fine-grained access, to ensure that API calls are restricted to the portion of the overall permission system that is necessary.

In our experience, logical multi-tenancy as a solution for isolation is not that compelling and, often times, has significant performance impacts.
If you need fully isolated permission systems, it is highly recommended to run distinct clusters, which is easy to do via tools such as the SpiceDB Operator. This ensures that there is no chance of one system impacting the other, whether from security or performance perspectives.
If you need permission systems to share resources, this implies that you have, in fact, a single permission system, and it is recommended to use prefixes to provide logical identification of the resource types for each "portion" of the permission system. This also typically involves having each team submit their portion of the schema, and having tooling to combine the schema (usually via CI) to produce the final schema that will be used overall.
For this combined use case, we have work coming in the new year that will allow for fine-grained access, to ensure that API calls are restricted to the portion of the overall permission system that is necessary.

@josephschorr any progress on the "combined use case"?

Our user case is different from above.
We have multiple products, each product designs its own permission, but all products share the same account. Just like a Google account can be used accross all google products, and thoese products share some account information, some of the shared information is stored outside spicedb (such as username, password, avatar...), Some of the shared information is stored within spicedb (such as, orgnization structure, user groups, corporation-membership...).
So if we deploy each product into a distinct spicedb, those shared spicedb data need be replicated accross spicedb, this is not easy to maintain the data integrity.
So we want to adopt the "schema combination" method, that is each product design its own schema and then combine all schemas into a united one. To avoid name conflication, a distinct prefix will be enfored to all object defintions. But the difficult for this method is to parse the schema file syntax and correctly prefix the object. So if authzed itself supports such kind of prefixing or schema combination that would be easy.

@josephschorr any progress on the "combined use case"?

Yes, the paid offering of SpiceDB has support for fine-grained authorization tokens: https://authzed.com/docs/spicedb-enterprise/fgam

But the difficult for this method is to parse the schema file syntax and correctly prefix the object.

Presumably you'd have each team name it with a prefix matching the team. SpiceDB supports prefixes (with arbitrary nesting) on definitions ala definition foo/bar/baz { ... }

authors: enthal jonwhitty josephschorr yyscamper

repo: authzed/spicedb


text:
🛑 Automat eshop § obchod.auto-mat.cz is down

In 8f26ea6, Automat eshop § obchod.auto-mat.cz (https://obchod.auto-mat.cz/) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Automat eshop § obchod.auto-mat.cz is back up in 5df7b64.

repo: auto-mat/automat-statuspage


text:
Bump version

Why are these changes needed?

Bump version to 0.3.2
Minor change in readme

Related issue number

Checks

[x] I've included any doc changes needed for https://autogenhub.github.io/autogen/. See https://autogenhub.github.io/autogen/docs/Contribute#documentation to build and test documentation locally.
[ ] I've added tests (if relevant) corresponding to the changes introduced in this PR.
[ ] I've made sure all auto checks have passed.

Shall we comment out the banner for the NuGet package and recover the # downloads/month banner for pyautogen? Also comment out the news for AutoGen.NET? They can be moved to a new separate repo for .NET.

Agreed on the nuget package and AutoGen.NET commenting out.

Are we going back to Aug as the date (instead of Oct)?

I am fine either way. The autogen-ai org was created in Aug, and on Oct we moved here.

authors: marklysze qingyun-wu

repo: autogenhub/autogen


text:
Exporting as data/URL failed in live website

Description of the bug
User was unable to import a project they exported to themselves.
This didn't work in testing and wasn't working until halfway through writing this issue. The tester used to same machine as the one I am using on the same day with the same browser. It is working now but please keep a lookout for it. I don't know what happened.
To reproduce
Steps the user took:

Go to live website
Open/create any project, preferable add a state
Go to File -> Export -> Export as URL/Raw Data...
Copy either (link is easier)
Return to the projects page
Delete the shared project
Import the project

Expected behavior
I get the project that I exported.
Additional information
No response

Can confirm exporting from Firefox (123.0) to Edge (124.0.2478.51) works fine, and exporting from the same versions of Edge to Firefox also works fine. Is it a specific machine issue? If so, do you still have that machine?

I've installed a different OS on the machine so I wouldn't say I have the same machine anymore. I should've mentioned more clearly in the issue that it never happened again with the same system (Windows) with the same browser (whatever version of Firefox at the time).
There were no other reports of it happening for anyone else, but this was a thing that happened during user testing so I had to document it somehow in case it cropped up elsewhere.

Looking at this now it seems like this was the same issue as #489 where the root cause was the share URL/raw data not refreshing - this has been fixed in #490

authors: anioncat s3897720 tdib

repo: automatarium/automatarium


text:
Add tests

homepage performance
lead generation & management
login and signup
search functionality
shopping experience
checkout and purchase experience
cart sharing functionality

Checkout Test
// create a product with a price < $1 (declined payment)

import { addProductFromPage, checkCart, existingUserEmailLogin, fillForm, logOut } from "../utils"

const customer1 = {
  full_name: "John Doe",
  email: "johndoe@doejohn.com",
  phone_number: "+50766887744"
}
const address1 = {
  street_1: "coconut st, bldg 1, apt 2",
  city: "Panama City",
  state: "panama_ciudad",
  zip: "00000",
  country: "panama"
}
const customer2 = {
  full_name: "Sally Smith",
  email: "sally@smithsally.com",
  phone_number: "+50766887744",
}
const address2 = {
  address_1: "ocean st, bldg 2, apt 1",
  address_2: "by the stairwell",
  city: "Panama City",
  state: "panama_ciudad",
  zip: "00000",
  country: "panama"
}
const validMasterCard = {
  ccNumber: "5431111111111111",
  ccExp: "10/25",
  cvv: "999"
}
const validVisa = {
  ccNumber: "4111111111111111",
  ccExp: "10/25",
  cvv: "999"
}
const invalidVisa = {
  ccNumber: "4111111231111411",
  ccExp: "10/25",
  cvv: "999"
}

describe('A lead tests the functionality of the checkout process', () => {
  before(() => {
    Cypress.session.clearAllSavedSessions()
    cy.clearAllCookies()
  })
  beforeEach(() => {
    cy.session('lead', () => {
      cy.visit('localhost:3000')
      .wait(500)
      cy.getCookie('leadId').then(leadId => {
        cy.setCookie('leadId', leadId.value, {httpOnly: true})
      })
    }, {cacheAcrossSpecs: true})
  })
  it('Adds products to the cart', () => {
    addProductFromPage('chair-gamer-prodigy-gr', 2)
    addProductFromPage('frame-3stage-wh', 1)
  })
  /* it('tests lead signin during checkout', () => {
    const customerInfo = 'informacion_de_contacto'
    cy.log('Tests lead signin during checkout !!')
    cy.visit('localhost:3000/checkout')
    cy.get('#login').click()
    cy.url().should('include', '/login')
    cy.log('navigate to login page')
    existingUserEmailLogin(customer1.email, 'checkout')
    cy.url().should('include', '/checkout')
    cy.get(`#${customerInfo}`).should('be.visible')
    cy.get(`#${customerInfo}`).find(`input[name="full_name"]`)
    .should('have.value', customer1.full_name)
    cy.get(`#${customerInfo}`).find(`input[name="email"]`)
    .should('have.value', customer1.email)
    logOut()
  }) */
  it('tests the billing is same as shipping checkbox', () => {
    const steps = [
      'direccion_de_envio',
      'direccion_de_facturacion',
      'informacion_del_pago'
    ]
    cy.visit('localhost:3000/checkout')
    cy.get(`#${steps[0]}-btn`).click()
    cy.get(`#${steps[0]}`).should('be.visible')
    fillForm(steps[0], address1, ['state'])
    cy.get(`#${steps[1]}`).should('be.visible')
    cy.get(`#same_as_shipping`).click()
    Object.keys(address1).map(k => {
      cy.get(`#${steps[1]} input[name="${k}"]`).should('have.value', address1[k])
    })
    // the payment form should be visible after ticking the checkbox
    //cy.get(`#${steps[2]}`).should('be.visible')
  })
  it('tests the appllication of a valid coupon', () => {})
})

describe('A new lead makes a succesful order', () => {
  before(() => {
    Cypress.session.clearAllSavedSessions()
    cy.clearAllCookies()
  })
  beforeEach(() => {
    cy.session('lead', () => {
      cy.visit('localhost:3000')
      .wait(500)
      cy.getCookie('leadId').then(leadId => {
        cy.setCookie('leadId', leadId.value, {httpOnly: true})
      })
    }, {cacheAcrossSpecs: true})
  })

  it('Adds products to the cart', () => {
    addProductFromPage('chair-gamer-prodigy-gr', 2)
    addProductFromPage('frame-3stage-wh', 1)
  })

  it('Checks cart', () => {
    cy.visit('localhost:3000/cart')
    .wait(1000)
    cy.get(`#lead_id`).should("be.visible").invoke('text')
    .then(text => {
      expect(text.trim().length).to.be.greaterThan(8);
    });
    const expectedStock = {
      'chair-gamer-prodigy-gr': 2,
      'frame-3stage-wh': 1
    }
    checkCart(Object.keys(expectedStock).length, expectedStock)
    cy.get('#checkoutBtn').click()
    cy.url().should('include', '/checkout')
  })

  it('Fills out checkout', () => {
    const steps = [
      'informacion_de_contacto',
      'direccion_de_envio',
      'direccion_de_facturacion',
      'informacion_del_pago'
    ]
    cy.visit('localhost:3000/checkout')
    // validate subtotal, tax, delivery and total
    cy.get(`#${steps[0]}`).should('be.visible')
    steps.map((s, i) => cy.get(`#${s}`).should(i===0? 'be.visible': 'not.be.visible'))
    fillForm(steps[0], customer1)
    cy.get(`#${steps[1]}`).should('be.visible')
    fillForm(steps[1], address1, ['state'])
    cy.get(`#${steps[2]}`).should('be.visible')
    fillForm(steps[2], address1, ['state'])
    cy.get(`#${steps[3]}`).should('be.visible')
    fillForm(steps[3], {...validMasterCard, name: customer1.full_name})
    cy.get('#mastercard-logo').should('be.visible')
    // validate subtotal, tax, delivery and total
    cy.get('#checkout-btn').click()
    //const success_msg = '¡Gracias por tu compra!'
    //cy.contains(success_msg).should("be.visible")
    cy.url().should('include', '/order_confirmation?order=')
    cy.task('getLastEmail', customer1.email).then((email:{body:string, html:string})=> {
      cy.log('EMAIl ', email)
      const body = email.body.toString()
      const orderId = body.split('identificador unico de tu orden es: ')[1]
      expect(orderId).to.not.be.empty
      expect(orderId).to.not.equal('undefined')
    })
  })
})

//ERRORS
// test form validations
describe('A lead tries to make a purchase without filling out all the required inputs', () => {})
//empty order
describe('A lead tries to submit an empty order', () => {})
// invalid coupon
describe('A lead tries to use an invalid coupon', () => {})
// payment declined
describe('A lead tries to pay with a credit card that is declined', () => {})
// invalid card
describe('A lead tries to pay with an invalid credit card', () => {})
// reduced stock
describe('A lead tries to submit an order but one of the porducts has less stock than the cartItem qty', () => {})
// invalid amount
describe('A lead tries to submit an order but total doesnt match backend validation', () => {})

Test for Lead generation
import { clearLocalStorage } from '../utils'

before(() => {
  cy.log('CLEARING COOKIES ...')
  Cypress.session.clearAllSavedSessions()
  cy.clearAllCookies()
})

beforeEach(() => {
  //cy.clearCookies()
  cy.session('lead', () => {
    cy.visit('localhost:3000')
    .wait(500)
    cy.getCookie('leadId').then(leadId => {
      cy.log('LEAD ID ****** ', leadId.value)
      cy.setCookie('leadId', leadId.value, {httpOnly: true})
    })
  }, {cacheAcrossSpecs: true})
})

describe('Home Page Loads with Acceptable Performance', () => {
  it('loads succesfully', () => {
    cy.visit('localhost:3000')
  })
  //add stuff for performance testing
})

describe('New Person Enters the Site', () => {
  it(`should:
    1. create a new lead
    2. set the local lead id
    3. create a shopping cart w/ the correct lead id`,
  () => {
    cy.clearCookies()
    cy.visit('localhost:3000')
    .wait(1500)
    cy.getCookie('leadId').then(leadId => {
      expect(leadId).to.not.be.null
      cy.request('http://localhost:3000/api/trpc/lead.getOne?input='+encodeURIComponent(`{"json":"${leadId}"}`))
      .then(response => expect(response.body).to.not.be.empty)
    })
    /* cy.getLocalStorage('ergonomica_cart_id').then(cartId => {
      expect(cartId).to.not.be.null
      cy.request('http://localhost:3000/api/trpc/cart.getOne?input='+encodeURIComponent(`{"json":"${cartId}"}`))
      .then(response => expect(response.body).to.not.be.empty)
    }) */
  })
})

/* describe('Person Enters the Site with a Fake Lead ID', () => {
  clearLocalStorage()
  localStorage.setItem('ergonomica_lead_id', 'random_lead_id')
  it(`should:
    1. create a new lead
    2. overwrite the current local lead id
    3. create a shopping cart w/ the correct lead id`,
  () => {
    cy.visit('localhost:3000')
    .wait(1500)
    cy.getLocalStorage('ergonomica_lead_id').then(leadId => {
      expect(leadId).to.not.be.null
      expect(leadId).to.not.be.equal('random_lead_id')
      cy.request('http://localhost:3000/api/trpc/lead.getOne?input='+encodeURIComponent(`{"json":"${leadId}"}`))
      .then(response => expect(response.body.result.data.json).to.not.be.null)
    })
    cy.getLocalStorage('ergonomica_cart_id').should('not.be.null')
  })
}) */

describe('Returning Person Enters the Site with a real lead ID and an Active Cart', () => {
  it(`should setup local lead_id and cart_id for an existing lead`, () => {
    cy.clearCookies()
    cy.session('leadId', ()=>{
      cy.request('http://localhost:3000/api/trpc/lead.getFirst')
      .then(response => {
        expect(response.body.result.data.json).to.not.be.null
        const lead = response.body.result.data.json
        cy.setCookie('leadId', lead.id, {httpOnly: true})
        cy.request('http://localhost:3000/api/trpc/cart.getActiveCartByUser?input='+encodeURIComponent(`{"json":"${lead.id}"}`))
        .then(response => {
          expect(response.body.result.data.json).to.not.be.null
        })
      })
    })
  })
  it(`should:
    1. maintain local lead_id and cart_id
    2. not create a new lead
    3. not create a new shopping cart`,
  () => {
    cy.request('http://localhost:3000/api/trpc/lead.getCount')
    .then(response => {
      expect(response.body.result.data.json).to.not.be.null
      const firstLeadCount = response.body.result.data.json
      cy.request('http://localhost:3000/api/trpc/cart.getCount')
      .then(response => {
        expect(response.body.result.data.json).to.not.be.null
        //const firstCartCount = response.body.result.data.json
        cy.visit('localhost:3000')
        .wait(1500)
        cy.getCookie('leadId').then(leadId => {
          expect(leadId).to.not.be.null
          cy.request('http://localhost:3000/api/trpc/lead.getCount').then(response => {
            expect(response.body.result.data.json).to.equal(firstLeadCount)
          })
        })
        /* cy.getLocalStorage('ergonomica_cart_id').then(cartId => {
          expect(cartId).to.not.be.null
          cy.request('http://localhost:3000/api/trpc/cart.getCount').then(response => {
            expect(response.body.result.data.json).to.equal(firstCartCount)
          })
        }) */
      })
    })
  })
})

// needs seeded user data with purchased carts but no active cart
describe('Returning Person Enters the Site with a real lead ID and no Active Carts', () => {
  it('loads succesfully', () => {
    cy.visit('localhost:3000')
  })
  //add stuff for performance testing
})

Test search functionality
describe('Home Page Loads with Acceptable Performance', () => {
    it('loads succesfully', () => {
      cy.visit('localhost:3000')
    })
    //add stuff for performance testing
  })

describe('Search functionality works as expected', () => {
    it('performs the search query on large screen', ()=> {
        cy.viewport(1300, 800)
        cy.visit('localhost:3000')
        .wait(1500)
        cy.get('#search')
        .type('sillas')
        .should('have.value', 'sillas')
        .type('{enter}')
        cy.url().should('include', '/products')
    })
    it('performs the search query on small screen', ()=> {
        cy.visit('localhost:3000')
        .wait(1500)
        cy.get('#sidemenu-collapse').click()
        cy.get('#search')
        .type('sillas')
        .should('have.value', 'sillas')
        .type('{enter}')
        cy.url().should('include', '/products')
    })
  })

  describe('Search for an existing product with spaces', () => {
    it('performs the search query on large screen', ()=> {
        cy.viewport(1300, 800)
        cy.visit('localhost:3000')
        .wait(1500)
        cy.get('#search')
        .type('silla phaser')
        .should('have.value', 'silla phaser')
        .type('{enter}')
        cy.url().should('include', '/products')
        cy.get('#products').children().should('have.lengthOf', 1)
        cy.get('#chair-phaser-bl').click()
        cy.url().should('include', '/products/chair-phaser-bl')
    })
  })

repo: automate-sales/automate-commerce


text:
Update Issue - 44629374

default description
URL tested: http://ci.bsstag.com/welcome
Open URL on Browserstack

Property
Value

Browser
Chrome 76.0

Operating System
Windows 7

Resolution
1024x612

Screenshot Attached
Screenshot URL

Click here to reproduce the issue on Browserstack

Updated Screenshot Attached

repo: automationbs/testbugreporting


text:
False positive with new style gradle test suite definition

Build scan link

Plugin version
2.0.2
Gradle version
8.10.1
JDK version
17
(Optional) Kotlin and Kotlin Gradle Plugin (KGP) version
NA
(Optional) Android Gradle Plugin (AGP) version
NA
(Optional) reason output for bugs relating to incorrect advice
warns junit -jupiter not needed at by testImplementation, but that dep is not explicitly present, nor is it shown by depedency-tree output.
Advice for root project
Unused dependencies which should be removed:
   testImplementation 'org junit jupiter: junit-jupiter:5.11.0'

Describe the bug
Gradle now offers "suite" concept for configuring junit with
testing {
  suites {
     configureEach {
      useJunitJupiter(junitVersion)

**To Reproduce**
Steps to reproduce the behavior:
1. ... run buildHealth

**Expected behavior**
health passes

**Additional context**
<!-- Add any other context about the problem here. -->

The plugin doesn't currently have any support for the jvm test suites stuff.

Duplicates https://github.com/autonomousapps/dependency-analysis-gradle-plugin/issues/1273

Do you have a minimal reproducer?

authors: autonomousapps gregallen


text:
Retrigger timing

Inconsistencies in behaviour of retrigger mode
Choose the delay more carefully. Maybe trigger delay from conductor ?

Answer : let the user choose


text:
feat(interpolation): add curvature calculation

Signed-off-by: Takayuki Murooka takayuki5168@gmail.com
Description
updated interpolation package for the refactoring PR of obstacle_avoidance_planner https://github.com/autowarefoundation/autoware.universe/pull/2796
feat: Curvature calculation is added with a unit test.

for point
https://github.com/autowarefoundation/autoware.universe/blob/b2715d051a419724d1308a3c6272c5cb06e0f91b/common/interpolation/src/spline_interpolation_points_2d.cpp#L172-L190

for points
https://github.com/autowarefoundation/autoware.universe/blob/b2715d051a419724d1308a3c6272c5cb06e0f91b/common/interpolation/src/spline_interpolation_points_2d.cpp#L192-L200

Pre-review checklist for the PR author
The PR author must check the checkboxes below when creating the PR.

[x] I've confirmed the contribution guidelines.
[x] The PR follows the pull request guidelines.

In-review checklist for the PR reviewers
The PR reviewers must check the checkboxes below before approval.

[ ] The PR follows the pull request guidelines.

Post-review checklist for the PR author
The PR author must check the checkboxes below before merging.

[ ] There are no open discussions or they are tracked via tickets.

After all checkboxes are checked, anyone who has write access can merge the PR.

@rej55 @kosuke55 Could you approve the PR. I confirmed that the unit test for curvature calculation has passed.


text:
feat(map): add launch_pointcloud_map_loader

Description

loading pcd map and map_hight_fitter with pointcloud ara time consuming (e.g. 3sec for initial pose).
they are not necessary for planning simulator, so add launch_pointcloud_map_loader to disable that
(I also feel it's not a good way)
Tests performed

put initial pose in psim with following
ros2 launch autoware_launch planning_simulator.launch.xml vehicle_model:=lexus sensor_model:=aip_xx1 map_path:=/home/kosuke55/data/map/odaiba launch_pointcloud_map_loader:=false

ros2 launch autoware_launch planning_simulator.launch.xml vehicle_model:=lexus sensor_model:=aip_xx1 map_path:=/home/kosuke55/data/map/odaiba launch_pointcloud_map_loader:=true

Effects on system behavior

Not applicable.
Pre-review checklist for the PR author
The PR author must check the checkboxes below when creating the PR.

[x] I've confirmed the contribution guidelines.
[x] The PR follows the pull request guidelines.

In-review checklist for the PR reviewers
The PR reviewers must check the checkboxes below before approval.

[ ] The PR follows the pull request guidelines.

Post-review checklist for the PR author
The PR author must check the checkboxes below before merging.

[ ] There are no open discussions or they are tracked via tickets.

After all checkboxes are checked, anyone who has write access can merge the PR.

@KYabuuchi will think better way!!


text:
Adoption of Changelog Enforcer GitHub Action in Autoware Repositories

Checklist

[X] I've read the contribution guidelines.
[X] I've searched other issues and no duplicate issues were found.
[X] I've agreed with the maintainers that I can plan this task.

Description
To improve the management and tracking of changes across the Autoware repositories, I propose the adoption of the Changelog Enforcer GitHub Action.
This action will ensure that every pull request includes a changelog update, helping us maintain a clear and consistent record of changes.
We will also enforce the https://keepachangelog.com/en/1.0.0/ format.
We aim to start this with the autoware.universe repository and, if successful, expand to other repositories like autoware_launch and autoware_msgs.
Purpose
The primary goals of implementing this action are:

Ensuring Consistency: Each PR should contribute to the changelog, making it easier to track changes over time.
Improving Transparency: Clear documentation of changes enhances transparency for both developers and users.
Simplifying Release Process: With quarterly releases planned using CalVer, a well-maintained changelog will streamline the release process.

Possible approaches

Gradual Implementation: Start with autoware.universe, assess the effectiveness, and then proceed to other repositories.
Automate Changelog Entries: Utilize the Changelog Enforcer to automate the inclusion of changelog updates in PRs.
Quarterly Sync with CalVer: Align the changelog updates with our quarterly CalVer release cycle, ensuring that each release has a comprehensive changelog.
Centralized Changelog for Main Autoware Folder: Compile changes from the child repositories' changelogs into the main Autoware folder's changelog for each release.

Definition of done

[ ] Agreement on the adoption of the Changelog Enforcer GitHub Action.
[ ] Successful implementation and testing in the autoware.universe repository.
[ ] Development of a clear guideline for contributors on how to update the changelog.
[ ] Establishment of a process for syncing the main Autoware folder's changelog with child repositories.
[ ] Review and adjust the process after the first quarterly release cycle.

cc. @mitsudome-r @yukkysaito @isamu-takagi @TakaHoribe

There is also an automated way of doing it using github-changelog-generator.
It generates CHANGELOG.md files like this.
There is also Github Releases.

automatically-generated-release-notes

I will investigate these options more and also share my findings. Please don't hesitate to add your inputs.

https://github.com/googleapis/release-please#release-please

Release Please automates CHANGELOG generation, the creation of GitHub releases, and version bumps for your projects.

https://github.com/google-github-actions/release-please-action

@xmfcx I strongly support this activity. Moreover, it should be linked with future releases of Autoware.
One question: is it required to modify the changelog file in all PRs? Or, the changelog is updated automatically from the PR's description?

@TakaHoribe thank you!

is it required to modify the changelog file in all PRs? Or, the changelog is updated automatically from the PR's description?

For the https://github.com/marketplace/actions/changelog-enforcer mentioned in the first issue, you must manually edit the changelog.
But if we use https://github.com/googleapis/release-please#release-please then it is completely automated (from Commit Message.
It generates ChangeLogs like this: https://github.com/googleapis/gapic-generator/blob/master/CHANGELOG.md
release-please seems very popular and also maintained by Google(?) for now it is the most promising option. And it requires the least additional effort from the contributors.

@xmfcx Interesting investigation!
Actually, we TIER IV has already automated changelog here.
They are created by generate-changelog CI which wraps git-cliff.
I'm curious if changelog-enforcer and other changelog generator are better than our current automated changelog.

authors: TakaHoribe shmpwk xmfcx

repo: autowarefoundation/autoware


text:
fix: use sim time option

Signed-off-by: tanaka3 ttatcoder@outlook.jp
Description
Without this PR, we cannot designate use_sim_time by ros2 launch
With this PR fix use sim time option for planning simulator and logging simulator
I confirm use sim time is correctly set with simulation clock rviz plugin
https://user-images.githubusercontent.com/65527974/181677348-ada9f356-d719-4f0f-b884-0012e23a630b.mp4
Pre-review checklist for the PR author
The PR author must check the checkboxes below when creating the PR.

[x] I've confirmed the contribution guidelines.
[x] The PR follows the pull request guidelines.

In-review checklist for the PR reviewers
The PR reviewers must check the checkboxes below before approval.

[ ] The PR follows the pull request guidelines.

Post-review checklist for the PR author
The PR author must check the checkboxes below before merging.

[ ] There are no open discussions or they are tracked via tickets.

After all checkboxes are checked, anyone who has write access can merge the PR.

LGTM.
@kenji-miyake Could you check this PR.

Hmm? I guess it already exists.

diff

I've confirm current change works with use sim time
https://user-images.githubusercontent.com/65527974/182082442-9be6bc07-007a-4a9f-9559-9a5a9241e7e3.mp4


text:
менять путь до настроек

Добавить метод/параметр конструктора для поделки, в который можно передать каталог/путь к файлу с настройками

Ещё и сами настройки, да

repo: autumn-library/autumn


text:
Fix gitcop link to contribution guidelines

As pointed out in #79, the link to the contribution guidelines is broken since it links to the develop branch.
The correct link should be:
https://github.com/autumnai/leaf/blob/master/CONTRIBUTING.md#git-commit-guidelines

Gitcop is updated with the link to the master branch

authors: MichaelHirn hobofan

repo: autumnai/leaf


text:
Corrigi para o python 3 segue o código, não consegui subir no git, pois ta negando

No init.py o nome da lib esta minusculo e necessario mudar para Correios e também instalar o Beautifysoup4
-- coding: utf-8 --
"""
correios.py
Api para usar dados dos Correios
"""
from urllib.request import urlopen
version = '0.1.0'
author = {
'Thiago Avelino': 'thiagoavelinoster@gmail.com',
'Dilan Nery': 'dnerylopes@gmail.com',
}
from urllib import parse,request,response,error
import re
from xml.dom import minidom
try:
from bs4 import BeautifulSoup
except ImportError:
raise Exception('Você não tem o modulo BeautifulSoup execute pip install beautifulsoup4', ImportError)
class Correios(object):
PAC = 41106
SEDEX = 40010
SEDEX_10 = 40215
SEDEX_HOJE = 40290
E_SEDEX = 81019
OTE = 44105
NORMAL = 41017
SEDEX_A_COBRAR = 40045

def __init__(self):
    self.status = 'OK'

def _getDados(self, tags_name, dom):
    dados = {}

    for tag_name in tags_name:
        try:
            dados[tag_name] = dom.getElementsByTagName(tag_name)[0]
            dados[tag_name] = dados[tag_name].childNodes[0].data
        except:
            dados[tag_name] = ''

    return dados

# Vários campos viraram obrigatórios para cálculo de frete:
# http://www.correios.com.br/webServices/PDF/SCPP_manual_implementacao_calculo_remoto_de_precos_e_prazos.pdf (páginas 2 e 3)
def frete(self, cod, GOCEP, HERECEP, peso, formato,
          comprimento, altura, largura, diametro, mao_propria='N',
          valor_declarado='0', aviso_recebimento='N',
          empresa='', senha='', toback='xml'):

    base_url = "http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx"

    fields = [
        ('nCdEmpresa', empresa),
        ('sDsSenha', senha),
        ('nCdServico', cod),
        ('sCepOrigem', HERECEP),
        ('sCepDestino', GOCEP),
        ('nVlPeso', peso),
        ('nCdFormato', formato),
        ('nVlComprimento', comprimento),
        ('nVlAltura', altura),
        ('nVlLargura', largura),
        ('nVlDiametro', diametro),
        ('sCdMaoPropria', mao_propria),
        ('nVlValorDeclarado', valor_declarado),
        ('sCdAvisoRecebimento', aviso_recebimento),
        ('StrRetorno', toback),
    ]

    url = base_url + "?" + parse.urlencode(fields)
    dom = minidom.parse(urlopen(url))

    tags_name = ('MsgErro',
                 'Erro',
                 'Codigo',
                 'Valor',
                 'PrazoEntrega',
                 'ValorMaoPropria',
                 'ValorValorDeclarado',
                 'EntregaDomiciliar',
                 'EntregaSabado',)

    return self._getDados(tags_name, dom)

def cep(self, numero):
    url = 'http://cep.republicavirtual.com.br/web_cep.php?formato=' \
          'xml&cep=%s' % str(numero)
    dom = minidom.parse(urlopen(url))

    tags_name = ('uf',
                 'cidade',
                 'bairro',
                 'tipo_logradouro',
                 'logradouro',)

    resultado = dom.getElementsByTagName('resultado')[0]
    resultado = int(resultado.childNodes[0].data)
    if resultado != 0:
        return self._getDados(tags_name, dom)
    else:
        return {}

def encomenda(self, numero):
    # Usado como referencia o codigo do Guilherme Chapiewski
    # https://github.com/guilhermechapiewski/correios-api-py

    url = 'http://websro.correios.com.br/sro_bin/txect01$.QueryList?' \
          'P_ITEMCODE=&P_LINGUA=001&P_TESTE=&P_TIPO=001&P_COD_UNI=%s' % \
          str(numero)

    html = urlopen(url).read()
    table = re.search(r'<table.*</TABLE>', html, re.S).group(0)

    parsed = BeautifulSoup(table)
    dados = []

    for count, tr in enumerate(parsed.table):
        if count > 4 and str(tr).strip() != '':
            if re.match(r'\d{2}/\d{2}/\d{4} \d{2}:\d{2}',
                        tr.contents[0].string):

                dados.append({
                    'data': str(tr.contents[0].string),
                    'local': str(tr.contents[1].string),
                    'status': str(tr.contents[2].font.string)
                })

            else:
                dados[len(dados) - 1]['detalhes'] = str(
                    tr.contents[0].string)

    return dados

@nospelon consegue mandar PR corrigindo?

authors: avelino nospelon

repo: avelino/pycorreios


text:
Support page and page_size  parameter in Text Analysis Export

Is your feature request related to a problem? Please describe.
The product API has the two fields page and pageSize that can be used to limit the results. Currently, these arguments are not accepted by our API.
Describe the solution you'd like
The function export_text_analysis(self, annotation_types: str = None) -> dict: should accept these two parameters.
Describe alternatives you've considered
None

Should be page_size?

I added an implementation of page and page_size and tested it on 50 documents in a live product.
client = Client("localhost:8800")
project = client.get_project("test")
collection = project.get_document_collection("Codex_50Train")
process = collection.get_process("discharge")

print("Batchwise export documents (page_size=4):")
for page in range(1,15):
    print(f"Page (Batch) number {page}")
    out = process.export_text_analysis(page_size=4, page=page)
    for d in out['textAnalysisResultDtos']:
        print("Document name: " + d["documentName"])

It works as it should, only the order of the documents does not seem to follow any pattern.
Batchwise export documents (page_size=4):
Page (Batch) number 1
Document name: Arztbrief (10).txt
Document name: Arztbrief (14).txt
Document name: Arztbrief (11).txt
Document name: Arztbrief (17).txt
Page (Batch) number 2
Document name: Arztbrief (21).txt
Document name: Arztbrief (20).txt
Document name: Arztbrief (18).txt
Document name: Arztbrief (2).txt
Page (Batch) number 3
Document name: Arztbrief (29).txt
Document name: Arztbrief (31).txt
Document name: Arztbrief (26).txt
Document name: Arztbrief (23).txt
Page (Batch) number 4
Document name: Arztbrief (33).txt
Document name: Arztbrief (28).txt
Document name: Arztbrief (4).txt
Document name: Arztbrief (34).txt
Page (Batch) number 5
Document name: Arztbrief (41).txt
Document name: Arztbrief (43).txt
Document name: Arztbrief (47).txt
Document name: Arztbrief (44).txt
Page (Batch) number 6
Document name: Arztbrief (48).txt
Document name: Arztbrief (46).txt
Document name: Arztbrief (51).txt
Document name: Arztbrief (45).txt
Page (Batch) number 7
Document name: Arztbrief (59).txt
Document name: Arztbrief (53).txt
Document name: Arztbrief (6).txt
Document name: Arztbrief (52).txt
Page (Batch) number 8
Document name: Arztbrief (60).txt
Document name: Arztbrief (69).txt
Document name: Arztbrief (7).txt
Document name: Arztbrief (66).txt
Page (Batch) number 9
Document name: Arztbrief (71).txt
Document name: Arztbrief (73).txt
Document name: Arztbrief (74).txt
Document name: Arztbrief (72).txt
Page (Batch) number 10
Document name: Arztbrief (8).txt
Document name: Arztbrief (76).txt
Document name: Arztbrief (79).txt
Document name: Arztbrief (78).txt
Page (Batch) number 11
Document name: Arztbrief (90).txt
Document name: Arztbrief (85).txt
Document name: Arztbrief (84).txt
Document name: Arztbrief (83).txt
Page (Batch) number 12
Document name: Arztbrief (95).txt
Document name: Arztbrief (94).txt
Document name: Arztbrief (98).txt
Document name: Arztbrief (91).txt
Page (Batch) number 13
Document name: Arztbrief (99).txt
Document name: Arztbrief (96).txt
Page (Batch) number 14
Traceback (most recent call last):
  File "/home/huebner/src/python/averbis-python-api/tests/david2.py", line 18, in <module>
    out = process.export_text_analysis(page_size=4, page=page)
  File "/home/huebner/src/python/averbis-python-api/averbis/core/_rest_client.py", line 794, in export_text_analysis
    return self.project.client._export_text_analysis(
  File "/home/huebner/src/python/averbis-python-api/averbis/core/_rest_client.py", line 2047, in _export_text_analysis
    response = self.__request_with_json_response(
  File "/home/huebner/src/python/averbis-python-api/averbis/core/_rest_client.py", line 1412, in __request_with_json_response
    self.__handle_error(raw_response)
  File "/home/huebner/src/python/averbis-python-api/averbis/core/_rest_client.py", line 2489, in __handle_error
    raise RequestException(error_msg)
requests.exceptions.RequestException: 400 Server Error: 'Bad Request' for url: 'http://ecstasy.averbis.intern:8702/health-discovery/rest/v1/textanalysis/projects/test/documentSources/Codex_50Train/processes/discharge/export?page=14&pageSize=4'.
Endpoint error message is: 'The requested page '14' is bigger than the last page '13''

Closed after merge from https://github.com/averbis/averbis-python-api/pull/99

authors: DavidHuebner reckart

repo: averbis/averbis-python-api


text:
Fixed use of '++' operator

Hello,
In my investigation for JuliaLang/julia#11686 I found a usage of ++ in your package, which I'm pretty sure was an incorrect translation from C/C++. Now that it's merged, it causes a syntax error, so hopefully this the correct functionality you were hoping to have.

Thanks @phobon ! Appreciate this.

authors: aviks phobon


text:
Rock, Paper & Scissors Game

Aim

Rock, Paper & Scissors Game

Details

The Goal is to create a command-line game where a user is given a chance to choose between rock, paper, and scissors and if the user wins the score is added, and at the end when the user finishes the game the score is shown to the user.

plss assign me this issue @avinashkranjan sir

plss assign me this issue @avinashkranjan sir

Assigned to you  @Ayush7614

Assigned to you  @Ayush7614

Okk No Problem sir @avinashkranjan

Okk No Problem sir @avinashkranjan

repo: avinashkranjan/Amazing-Python-Scripts


text:
Accept CompletionStage class as until method parameter

In JDK8 you can use CompletionStage to work on other non-blocking threads - like in Play! Framework.
It will be very good to implement this functionality to help with unit tests over this interface.

No importance at all.
Closing this issue.

repo: awaitility/awaitility


text:
curl: fix CVE-2023-38545

see https://curl.se/docs/CVE-2023-38545.html

Thanks for getting to this so quickly!

repo: awakesecurity/nixpkgs


text:
npm version bump

Looks like the latest version available on npm is still 1.1.2, while 1.1.3 and 1.1.4 have been released.

1.1.5 is on npm now :+1:

authors: davidvanleeuwen jimf


text:
Dynamic group subscriptions

Description of changes
Add support for dynamic groups in subscriptions with enhanced filtering

Issue #, if available

Description of how you validated changes
E2E, unit, manual testing
Checklist

[ ] PR description included
[ ] yarn test passes
[ ] Tests are changed or added
[ ] Relevant documentation is changed or added (and PR referenced)
[ ] New AWS SDK calls or CloudFormation actions have been added to relevant test and service IAM policies

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

Closing this PR in favor of https://github.com/aws-amplify/amplify-category-api/pull/944, which is on a branch multiple folks on the team can iterate on.

authors: alharris-at marcvberg

repo: aws-amplify/amplify-category-api


text:
Removing @searchable causes unintended impacts on unrelated Elasticsearch endpoints

Note: If your issue/bug is regarding the AWS Amplify Console service, please log it in the
Amplify Console GitHub Issue Tracker

Describe the bug
I had 2 projects using amplify-cli (Project1 and Project2), both using the @searchable keyword on a schema object and so both having an Elasticsearch domain.  I removed the @searchable tag from the schema on Project1 and pushed the change.  Subsequently, not only was the Elasticsearch domain for Project1 deleted, but also the Elasticsearch domain for Project2 was impacted with loss of all data and loss of a customized index mapping.
Amplify CLI Version
4.10.0
Expected behavior
Expected no impact on the Elasticsearch domain for Project2
Desktop (please complete the following information):

OS: Mac Catalina 10.15.7
Node Version. 12.19.0

@scowie This seems concerning. How was the other ES domain configured?
When you remove the @searchable directive, only the ElasticSearch domain configured using the CloudFormation stack by the CLI should be removed and impacted.

@kaustavghosh06 The ES domain was configured to allow searching for activities by location (map bounding box) as follows:  1) Created a new mapping type property to have "type": "geo-point", 2) Deleted the index "activity" which had been created by the amplify cli for the searchable graphql type "Activity", 3) Re-created the "activity" index on the elasticsearch domain to include use of the new "geo-point" property.
I will also note that the elasticsearch domain that was deleted from Project1 was configured the same way with a "activity" index having been created from a searchable graphql "Activity" type.  Both projects were working and had activities in elasticsearch domains.  Then I removed the searchable from Project1 because it was no longer needed.  The next time I loaded Project2 I noticed all of the activities were gone and I had to repeat the 3 steps that I mentioned above to get it working again.

re-adding pending triage until repro steps are provided.

Hey @scowie :wave: unforunately I'm unable to reproduce this using the following steps on the latest version of the CLI, 4.50.2:

in two separate directories, project1/ and project2/:
initialize Amplify project with amplify init -y
add a GraphQL API with amplify add api and accepting defaults
modify the Todo schema with

```graphql
type Todo @model @key(fields: ["name"]) @searchable {
  name: String!
  description: String
}
```

run amplify push and follow the prompts
Using the GraphQL API, add a few sample data items
Confirm searchable queries are functional
Remove @searchable from schema in project1
run amplify push and follow the prompts
confirm searchable queries are not valid in project1
confirm searchable queries still function in project2

Please let me know if there are any differences between what you experienced and the procedure noted above (with the updated CLI), and if applicable provide a sample of the GraphQL schema used when this issue occurred.

authors: attilah josefaidt kaustavghosh06 scowie

repo: aws-amplify/amplify-cli


text:
feat: support for cta labels

Issue #, if available:
Updates FormDefinition and StudioForm to accept StudioFormButtons to customize CTA label names, visibility, and row position.
Description of changes:
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

This change shouldn't affect the other components in the integ tests. Maybe a rebase should address it?

authors: SwaySway scottyoung

repo: aws-amplify/amplify-codegen-ui


text:
AWS Console has broken pages for projects with unsuccessful builds

Describe the bug
For the past couple weeks, I have noticed many of our amplify builds (Gatsby projects) getting stuck at the "Provisioning" stage.  When that happens, I would need to click on the "Build" link, then click the "Cancel" button, and then click the "Redeploy This Version" button.
I'm still seeing many builds stuck in the provisioning stage, but now when I click on the "Build" button, the AWS Console page is broken, and doesn't render all the way.  I've reproduced this on Safari and Chrome.  There's an error in the browser's javascript console that says:
TypeError: null is not an object (evaluating 'r.summary.startTime.getTime') in main.js
To Reproduce
See above
Expected behavior
You should see a page like this that has the indicated button:

Screenshots
Here's a screenshot of the pages with the error above:

Desktop (please complete the following information):

OS: Mac OS 10.15.7
Browser: Chrome and Safari

Thank you for reporting this. In regard to the many builds being stuck in the provisioning stage, are you potentially hit the limit of 5 concurrent builds documented here: https://docs.aws.amazon.com/general/latest/gr/amplify.html

Thank you for reporting this. In regard to the many builds being stuck in the provisioning stage, are you potentially hit the limit of 5 concurrent builds documented here: https://docs.aws.amazon.com/general/latest/gr/amplify.html

Thanks, perhaps so. Is there a way to increase that quota?  Still need the
UI bug addressed, though, so I can restart the builds manually. --
Aaron Campos
CEO, Dhamira Inc.
805-910-7829

Thanks, perhaps so. Is there a way to increase that quota?  Still need the
UI bug addressed, though, so I can restart the builds manually. --
Aaron Campos
CEO, Dhamira Inc.
805-910-7829

@aaroncampos We will prioritize fixing this but so that you can manually restart builds.  Also note that the builds will eventually run without intervention once the number of concurrent builds is less than 5.

@aaroncampos We will prioritize fixing this but so that you can manually restart builds.  Also note that the builds will eventually run without intervention once the number of concurrent builds is less than 5.

authors: aaroncampos hsspain nimacks

repo: aws-amplify/amplify-console


text:
AWS amplify not rendering image while local build render image correctly

Please describe which feature you have a question about?
I'm currently using AWS amplify to run one of my react app. I added one image in my react public folder so I can use that as a background. When I test it in my local, the image shows correctly. However, after I push my code to git and use AWS amplify to build it, I found the image is missing. Based on the build log, seems the image is never copy to the build directory. Is there anything I need to do to make sure the image is correct uploaded?
Provide additional details
My git branch: https://github.com/andreling01/mltd-ranking
My app id: d3azsbdqn01xd0
What AWS Services are you utilizing?
AWS amplify
Provide additional details e.g. code snippets
I also make sure the manifest file is changed and added with my new image information.

Hi @andreling01 👋🏽 thanks for raising this question. I was able to reproduce and find a solution for you. 🙂 We have a rewrite rule for SPA applications that routes all files to index.html. We use regular expressions to identify the different file extensions that we rewrite:

Your background image is a jpeg which we did not add to the regex. If you add |jpeg| like so ,  then you should be able to see your background image.
Workaround:

In the console, navigate to your app and select Rewrites and redirects
Select Edit and replace the source address with </^[^.]+$|\.(?!(css|gif|ico|jpg|jpeg|js|png|txt|svg|woff|ttf|map|json)$)([^.]+$)/>
Save and refresh your hosted page.

Please let us know that this works for you.

Thanks! That solved my problem!

repo: aws-amplify/amplify-hosting


text:
chore(datastore): Temporal performance enhancements

Issue #, if available:
Addresses:
#1734
Partially addresses:
#1579
#1428
Description of changes:
Performance Improvements
Re-write of Temporal implementation details relating to String <-> Date conversion to cache DateFormatters. The public API surface remains mostly the same (with a few minor exceptions documented below).
Current situation:
Every String -> Date conversion currently creates up to 4 separate DateFormatters. This is due to this API supporting the conversion of String -> Date when the exact format isn't known, but still limited to a maximum of 4 different formats per TemporalSpec conforming type (Temporal.Date, Temporal.DateTime, Temporal.Time).
DateFormatter instantiation isn't a particularly cheap process.
With this change:
These changes cache DateFormatters for reuse in a thread safe way, up to a maximum of 14, using a Random Replacement (RR) eviction policy. It also adds lower level utility converters (Date -> String and String -> Date) leveraged by the new implementation.
API Changes

Temporal was previously a namespace struct with a private init. It's now a namespace (caseless) enum. This change has no potential to break client code.
~The TemporalSpec protocol requirement init(iso8601String: String) throws is now init(iso8601String: String, format: Format) throws. Every concrete type conforming to TemporalSpec (Temporal.Date, Temporal.DateTime, Temporal.Time) has a default argument for format to prevent any possibility of breakage. This is an improvement in the API, because while there are cases where we don't know the exact dateFormat, there are other cases where we do know it. This eliminates the need to attempt to convert based on various different formats if the format is known.~ Added a separate init(iso8601String:format:) with a default implementation, so no breaking.
TemporalFormat in the previous implementation was an enum. This has been changed to a struct with static members. This change does have the possibility to break client code, although the likelihood is exceedingly low. The only situation this could happen is if client code is switching over all cases exhaustively; the change to a struct means that this check would no longer be exhaustive. Switching over the formats as they exist today would serve no purpose. Even if this is happening somewhere, the fix is adding a default case to the end of the switch. The main reason behind this change is to support the future expansion of further date formats as documented in #1583 and #1713, without breaking client code.
Deprecates TemporalUnit, a public protocol that was not used anywhere within Amplify.
~Adds AnyTemporalSpec, a type-erasing existential that provides access to iso8601String and is needed due to the introduction of an associatedtype in the TemporalSpec protocol.~ Change reverted

Performance Wins:
Micro and Macro performance testing was conducted to accurately test and improvements or regressions these changes introduce.
Micro testing consisted of calling Temporal.Date(iso8601String:), Temporal.DateTime(iso8601String:), and Temporal.Time(iso8601String:) 50 times for each of the applicable iso8601String supported formats.
Macro testing consisted of decoding an array of 100 Model conforming objects, each with 50 child models. The parent contained (among other primitives) two Temporal.x properties, and each child contained one.
Results:
*All times displayed in seconds.
Micro

Temporal.Date
short (yyyy-MM-dd)
medium / long / full (yyyy.MM.ddZZZZ)

Old
0.027
0.007

New
0.005
0.003

Δ Absolute
0.022
0.004

Δ %
440%
133%

Temporal.DateTime
short (yyyy-MM-dd'T'HH:mm)
medium (yyyy-MM-dd'T'HH:mm:ss)
long (yyyy-MM-dd'T'HH:mm:ssZZZZZ)
full (yyyy-MM-dd'T'HH:mm:ssSSSZZZZZ)

Old
0.027
0.021
0.013
0.007

New
0.009
0.007
0.004
0.002

Δ Absolute
0.018
0.014
0.009
0.005

Δ %
200%
200%
225%
250%

Temporal.Time
short (HH:mm)
medium (HH:mm:ss)
long (HH:mm:ss.SSS)
full (HH:mm:ss.SSSZZZZZ)

Old
0.025
0.020
0.015
0.010

New
0.007
0.006
0.005
0.004

Δ Absolute
0.018
0.014
0.010
0.006

Δ %
257%
233%
200%
150%

Macro

Old
1.517

New
0.553

Δ Absolute
0.964

Δ %
174%

Check points: (check or cross out if not relevant)

[ ] ~Added new tests to cover change, if needed~
[x] Build succeeds with all target using Swift Package Manager
[x] All unit tests pass
[x] All integration tests pass
[x] Security oriented best practices and standards are followed (e.g. using input sanitization, principle of least privilege, etc)
[x] Documentation update for the change if required
[x] PR title conforms to conventional commit style
[ ] If breaking change, documentation/changelog update with migration instructions

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

@lawmicha can you provide any insights into the failing DataStore tests? I can't seem to reproduce them failing locally and from what I can tell the tests have nothing to do with these temporal changes.

Despite the tests passing, there's an underlying issue here. In local tests, running testUpdatedModelNoLongerMatchesPredicateRemovedFromSnapshot repeatedly 100 times results in failures. main passes, as does the commit before these changes. So this requires some more investigation before approving / merging.

@lawmicha can you provide any insights into the failing DataStore tests? I can't seem to reproduce them failing locally and from what I can tell the tests have nothing to do with these temporal changes.

I added a commit onto this PR https://github.com/aws-amplify/amplify-ios/pull/1760/commits/c384882a1ff99050c6f5ea756faf0ec838a03d26 for fixing the test that failed on "run repeatedly". The race condition was adding the operation to the operation queue while publishing events to the publisher. Not really sure why it was not appearing before the changes in this PR, as the only code path that changed was the initialization of createdAt field in MutationEvent using .now(). The test started failing when the events were published first, then a thread picked up the operation from the operation queue. Since the observe query operation started running after the events that were published from the test logic, it would not receive them.

Locally I'm going to run a few API integration tests to exercise the decoding of strings to Temporal types, and also enabled the integration test workflow in this separate PR to get more visibility into the test results: https://github.com/aws-amplify/amplify-ios/pull/1827

Will investigate the flaky test https://app.circleci.com/pipelines/github/aws-amplify/amplify-ios/4953/workflows/23e03ca6-e27c-4a90-9f43-7b5aa9c13d93/jobs/42782 testSentModelWithNilVersion_Reconciled

authors: atierian lawmicha

repo: aws-amplify/amplify-ios


text:
fix(datastore): Fix ModelSyncedEventEmitter, add lifecycle events logging

Issue #, if available:
Description of changes:
Check points: (check or cross out if not relevant)

[ ] Added new tests to cover change, if needed
[ ] Build succeeds with all target using Swift Package Manager
[ ] All unit tests pass
[ ] All integration tests pass
[ ] Security oriented best practices and standards are followed (e.g. using input sanitization, principle of least privilege, etc)
[ ] Documentation update for the change if required
[ ] PR title conforms to conventional commit style
[ ] If breaking change, documentation/changelog update with migration instructions

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

Codecov Report

Merging #2022 (13e3c90) into feat/datastore-custom-pk (b6171b1) will decrease coverage by 0.60%.
The diff coverage is 54.54%.

@@                     Coverage Diff                      @@
##           feat/datastore-custom-pk    #2022      +/-   ##
============================================================
- Coverage                     59.52%   58.92%   -0.61%
============================================================
  Files                           719      660      -59
  Lines                         22544    20845    -1699
============================================================
- Hits                          13420    12282    -1138
+ Misses                         9124     8563     -561

Flag
Coverage Δ

API_plugin_unit_test
62.47% <ø> (ø)

AWSPluginsCore
?

Amplify
48.23% <ø> (ø)

Analytics_plugin_unit_test
71.09% <ø> (ø)

Auth_plugin_unit_test
78.33% <ø> (ø)

DataStore_plugin_unit_test
75.65% <54.54%> (-0.07%)
:arrow_down:

Geo_plugin_unit_test
?

Predictions_plugin_unit_test
26.81% <ø> (ø)

Storage_plugin_unit_test
58.04% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

...WSDataStoreCategoryPlugin/AWSDataStorePlugin.swift
75.17% <0.00%> (-1.64%)
:arrow_down:

...gin/Sync/InitialSync/InitialSyncOrchestrator.swift
75.19% <0.00%> (-0.59%)
:arrow_down:

...goryPlugin/Sync/InitialSync/SyncEventEmitter.swift
92.10% <0.00%> (-2.49%)
:arrow_down:

...gin/Sync/InitialSync/ModelSyncedEventEmitter.swift
90.72% <100.00%> (+1.13%)
:arrow_up:

...Engine+IncomingEventReconciliationQueueEvent.swift
51.02% <100.00%> (+1.02%)
:arrow_up:

...ataStoreCategoryPlugin/Sync/RemoteSyncEngine.swift
94.50% <100.00%> (+0.02%)
:arrow_up:

...tionSync/AWSIncomingEventReconciliationQueue.swift
57.50% <0.00%> (-1.67%)
:arrow_down:

...gin/Subscribe/DataStoreObserveQueryOperation.swift
74.64% <0.00%> (-0.94%)
:arrow_down:

...LocationGeoPlugin/AWSLocationGeoPlugin+Reset.swift

...e/AWSPluginsCore/Auth/AWSAuthServiceBehavior.swift

... and 59 more

:mega: Codecov can now indicate which changes are the most critical in Pull Requests. Learn more

authors: codecov-commenter lawmicha


text:
Having issue with refresh token, getting Nil while calling awsmobileclient.default().gettokens in swift

Describe the bug
while calling this method in swift on Xcode "awsmobileclient.default().gettokens" I am getting nil value.
I am calling after the successful login with Amplify.Auth.signIn
after that when I am trying to call any mutation I'm getting Auth error
Steps To Reproduce
Steps to reproduce the behavior:
1. Login with amplify Amplify.Auth.signIn
2. after successfully login call awsmobileclient.default().gettokens
3. in the result I'm getting Nil instead of token

Expected behavior
There should be an token in the return
Amplify Framework Version
2.25.0
Amplify Categories
API, Auth
Dependency manager
Swift PM
Swift version
5.8
CLI version
10.8.1
Xcode version
15.0.1
Relevant log output
<details>
<summary>Log Messages</summary>

Error: notSignedIn(message: "User is not signed in to Cognito User Pool, please sign in to use this API.")

```
Is this a regression?
Yes
Regression additional context
No response
Platforms
iOS
OS Version
iOS 17.0
Device
iPhone 14 Pro Max
Specific to simulators
No response
Additional context
No response

I'm also experiencing this issue

I see you're using Amplify version 2.25.0
After calling Amplify.Auth.signIn(), you may fetch the credentials/tokens by following the documentation here:
https://docs.amplify.aws/swift/build-a-backend/auth/accessing-credentials/

I see you're using Amplify version 2.25.0 - AWSMobileClient is no longer used in Amplify v2.
After calling Amplify.Auth.signIn(), you may fetch the credentials/tokens by following the documentation here:
https://docs.amplify.aws/swift/build-a-backend/auth/accessing-credentials/

After calling the documentation method I'm unable to call any mutation with this method
appDelegate.appSyncClient?.fetch(query: query, cachePolicy: .fetchIgnoringCacheData)  { [weak self] (result, error) in
after getting the token AWSMobileClient is setting the auth token and can we do in the amplify V2 ?

After calling Amplify.Auth.signIn(), Amplify automatically fetches tokens from Cognito UserPool and Identity Pool and saves it in Keychain.
To get the aws credentials/cognito user tokens, you can call like this:
import AWSPluginsCore

do {
    let session = try await Amplify.Auth.fetchAuthSession()

    // Get user sub or identity id
    if let identityProvider = session as? AuthCognitoIdentityProvider {
        let usersub = try identityProvider.getUserSub().get()
        let identityId = try identityProvider.getIdentityId().get()
        print("User sub - \(usersub) and identity id \(identityId)")
    }

    // Get AWS credentials
    if let awsCredentialsProvider = session as? AuthAWSCredentialsProvider {
        let credentials = try awsCredentialsProvider.getAWSCredentials().get()
        // Do something with the credentials
    }

    // Get cognito user pool token
    if let cognitoTokenProvider = session as? AuthCognitoTokensProvider {
        let tokens = try cognitoTokenProvider.getCognitoTokens().get()
        // Do something with the JWT tokens
    }
} catch let error as AuthError {
    print("Fetch auth session failed with error - \(error)")
} catch {
}

I'm facing a similar issue, when doing:
    // Get cognito user pool token
    if let cognitoTokenProvider = session as? AuthCognitoTokensProvider {
        let tokens = try cognitoTokenProvider.getCognitoTokens().get()
        // Do something with the JWT tokens
    }

the cast on the iflet cognitoTokenProvider is nil so it won't work, but interesting thing is that if i debug it and do it in the debugger the cast works

Hi @IvanSolaris , If you have enabled guest user in Cognito Identity Pool and no user is signed in, you will be able to access only identityId and AWS credentials. All other session details will give you an error.

authors: IvanSolaris Montchat abdurrazax thisisabhash

repo: aws-amplify/amplify-swift


text:
Update aws_signature to 0.3.1

It looks like only the AWS.Signature uses the aws_signature package, and only the sign_v4 function which seems to maintain it's function signature between the versions.
However it would be nice to be able to use this package along with the new options in sign_v4_query_params/8.

@0urobor0s thank you! :purple_heart:

repo: aws-beam/aws-elixir