trace_event.h status?

What is the status of the trace_event.h work happening with V8? Is that in a state yet where we can start integrating it with node?
If anyone working on V8 is available to attend the collaborator summit, I'd love to work together to get the development effort of this kicked off.
cc: @ofrobots @natduca

Thanks for poking on this. trace-event.h hasn't merged into V8 yet (@fmeawad is hoping to get it into 4.5) however, I don't think we need to wait for it to land before building upon it.
I did manage to get some time to play with it a little bit. Here are the next steps in getting trace-event into node, as I see them. This is my understanding of trace-event, so @fmeawad and @natduca can keep me honest here.

trace_event.h – This is a bunch of C macros that provide a low-overhead (single test) mechanism to add traces around your code.  This file is going to be merged into V8, but in the interim nothing is stopping us from copying this into io.js and prototyping. That's how I was playing with this.
A mechanism to define, enable and disable Categories and Category Filters. These filters control which traces are active. This code is present in chromium in base/trace_event/trace_event_impl.[h|cc]. We can copy it from there.
A buffer that gathers traces and then asynchronously flushes them a sink. This is implemented by TraceBuffer and its subclasses in chromium. We can copy the code from there.
A sink. File, Network, etc. V8 sends these to v8.log presently. We (node) can figure out what makes sense here.

Beyond this, we will need to do a few things in JavaScript:

Expose the trace-event API in JavaScript so that node-core and user-space can start adding traces to their code.
Re-implement debug() logging on top of the trace-event API.

The great thing, once this is done is that we'll get traces from the whole stack (V8, node-core, user-space) consolidated into the same place.
I started hacking on branch with the above a while back but got side-tracked. I can create the branch on github if there are people who want to collaborate and hack together at this.

To clarify, the stats are buffered and delivered async. Is the processing of those stats expected to be done off the main thread to prevent blocking? If so, how would this work with exposing a JS API that would force blocking the main thread?

Can you elaborate what you mean by 'stats'? How are those different from a 'trace'? I know 'trace' can mean different things to different people and in different context, but this is what I mean in this context:
var debug = util.debuglog('net');
//...
debug('createConnection', args);

Or this:
code-creation,LazyCompile,0,0x6e7cbf21420,436,"BIT_OR native runtime.js:157:16",0x195af1c3c0,

The JS Trace API needs to do minimal work to create the packet of information and then call trace-event to deposit it to the buffer. This would be synchronous.
I do expect the TraceBuffer is would be implementing the flushing as a separate thread, or some other concurrency mechanism that is off the main thread.
BTW, the util.debuglog is a decent API for one-shot events (trace-event calls these 'INSTANT' events). We will need more to describe other types of traces, e.g. matched being/end, async flows, etc.

Sorry. By "stats" I was talking about the "packet of information" collected and stored in the buffer to be processed asynchronously.

I think the tracing API should be synchronous. It needs to be near-zero cost (single test) when the trace-category is not enabled. It needs to be very cheap when trace category is enabled. All processing should be done off the main thread.

I've gotten a bit swamped so am not able to keep pace here right now, but @fmeawad indicated he's planning a reply for this bug shortly :)

I would like to apologize that trace_event.h has not landed yet in V8. We still think that this is the right direction. We found that we needed more support on the chrome side to support the same things the v8.log currently supports. Therefore it got lowered in priority for a while, but we are still trying to get it landed in 4.5.

Does it need to be included in V8 for the macros to be used in node?

I think you need another copy of it in node to be able to use it. And it does not conflict. @ofrobots can comment better since I believe has a prototype.

What I was getting at is, if the interface is stable could we start using it in node before it's been integrated into V8?

The interface is very stable, and it has been used in chrome and blink among other places for a long time now.

Then let's begin discussions on how it should be integrated into node. How would we like to proceed?

I think the file can be immediately copied into node. We can remove it once it lands in v8 and start including it from there. Until that happens, we won't be getting traces from V8, but that should be fine.

Sounds good. That will give us time to work on the JS interface. I'd like to explore integration with AsyncWrap.


Game crashes?

My game will crash when I enter in an instance (raid, dungeon etc) and during pulls it may crash randomly too. My CPU usage spikes too for some reason. Disabled all other plugins and it's only this one crashed. What should I do?

At very least - please upload the logs, maybe there's something wrong there. If not - no idea, works fine for me :)


Performance of transit.toJSON - vs - JSON.stringify?

Perhaps this is a nonsensical question, but I saw this library recommended by a member of the immutable-js team for performance over JSON.stringify(m.toJS()).
Is transit.toJSON(m) any different in terms of performance?
Thanks!

It's not something i've benchmarked, and if this is important to you I suggest you do some of your own benchmarking to confirm.
It is possible for transit to be faster for two reasons:

it doesn't require an intermediary conversion to plain JS types
it is able to improve compression by referencing repeated items in the data

@glenjamin thanks very much for letting me know it's not an outright absurd idea. If I get a chance to do some testing I'll share it here.


Custom scrapers

Hello, is it/would it be possible to write your own scrapers, or to extend existing scrapers?
Currently trying to inherit from FacebookSkraper but this doesn't seem possible right now.
Thank you!

Hey, @ZueFe!
Well, you are always able to use kotlin delegation for this overriding for non-open classes.
https://kotlinlang.org/docs/reference/delegation.html
But I think It's ok to open all implementations.

Available in 0.5.1.
Thanks for the issue!

Thanks I will check it out :)


APP-1472: Increasing HTTP timeouts and keep provisioning all APPs even if one is broken (provisioning-tool).

Codecov Report

Merging #156 into dev will decrease coverage by 0.64%.
The diff coverage is 75%.

@@            Coverage Diff            @@
##              dev    #156      +/-   ##
=========================================
- Coverage   90.25%   89.6%   -0.65%
=========================================
  Files         141     171      +30
  Lines        2688    3407     +719
  Branches      254     318      +64
=========================================
+ Hits         2426    3053     +627
- Misses        204     269      +65
- Partials       58      85      +27

Impacted Files
Coverage Δ

...n/provisioning/IntegrationProvisioningService.java
79.43% <75%> (ø)

...on/provisioning/service/AuthenticationService.java
96% <0%> (ø)

...ng/exception/ApplicationProvisioningException.java
100% <0%> (ø)

...tegration/provisioning/service/KeyPairService.java
91.66% <0%> (ø)

.../exception/ConfigurationProvisioningException.java
50% <0%> (ø)

.../integration/provisioning/service/UserService.java
94.59% <0%> (ø)

...sioning/exception/CompanyCertificateException.java
100% <0%> (ø)

...visioning/exception/UsernameMismatchException.java
100% <0%> (ø)

...provisioning/properties/ApplicationProperties.java
0% <0%> (ø)

... and 21 more

Continue to review full report at Codecov.

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


Style Guide and Diataxis Review - Hornet I

<!---
# Description

Updated documentation in line with TW style guide and diataxis. Sections include:

- Getting started
- Nodes 101
- Security 101

Fixes #(issue)

## Type of change

Please delete options that are not relevant.

- [x] Documentation Fix

# Checklist:
- [x] I have made corresponding changes to the documentation
- [x] I have selected the `develop` branch as the target branch

@iotaledger/tech-writers

@aleksei-korolev and @lucas-tortora, accidentally pushed more updates to this branch but...it's all technically in the same section of the wiki🤷.
In the files changed, you can stop as soon as you get to nodes 101.

Changes will be merged with #1376


How to create multiple users?

With the puppet-module for mysql, is there a way to create unique users for each database?

Yes, you can use the mysql::user define to create users and mysql::grant define to manage permissions.

Sorry, I was not very descriptive. I need to be able to setup multiple users so, I used this:
    mysql::user { "db1":
            mysql_password_hash => "db1",
            mysql_user => "db1",
            mysql_host => "%"
    }
    mysql::grant { "db1":
            mysql_privileges => "ALL",
            mysql_password => "pwd",
            mysql_db => "db1",
            mysql_user => "db1",
            mysql_host => "host"
    }

But, if I use the same for db2, it won't work since mysql::user would be repeated twice. I guess, I'm looking for a way to handle multiple users for multiple databases more gracefully.

Uhm, not so sure I've understood well, but you should be able to create 2 different users for the same db with just 2 different mysql::grant :
mysql::grant { "db1":
mysql_privileges => "ALL",
mysql_password => "pwd",
mysql_db => "db1",
mysql_user => "db1",
mysql_host => "host"
}
mysql::grant { "db2":
mysql_privileges => "ALL",
mysql_password => "pwd",
mysql_db => "db1",
mysql_user => "db2",
mysql_host => "host"
}
or maybe I still haven't understood  what you need :-)
Anyway, take a look at the templates user by these defines:
mysql::grant uses this:
<% if mysql_db != "" then %>
CREATE DATABASE IF NOT EXISTS <%= mysql_db %> ;
<% end %>
GRANT <%= mysql_privileges %> ON <%= mysql_db %>. TO '<%= mysql_user %>'@'<%= mysql_host %>' IDENTIFIED BY '<%= mysql_password %>';
FLUSH PRIVILEGES ;
mysql::user uses this:
GRANT USAGE ON .
TO '<%= mysql_user %>'@'<%= mysql_host %>'
IDENTIFIED BY
<% if has_variable?('mysql_password_hash') && mysql_password_hash then %>
PASSWORD '<%= mysql_password_hash %>'
<% else %>
'<%= mysql_password %>';
<% end %>
;
FLUSH PRIVILEGES ;
So actually mysql::user is somehow a subset of mysql::grant


Organizations feature Go Live

Needs to go live with the feature go-live on 4/17

:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

docs/TOC.md
:white_check_mark:Succeeded

docs/reference/media/org-add-new-option.png
:white_check_mark:Succeeded

docs/reference/media/org-add-new-page.png
:white_check_mark:Succeeded

docs/reference/media/org-apikey-option.png
:white_check_mark:Succeeded

docs/reference/media/org-manage-option.png
:white_check_mark:Succeeded

docs/reference/media/org-manage-packages-option.png
:white_check_mark:Succeeded

docs/reference/media/org-remove-self-option.png
:white_check_mark:Succeeded

docs/reference/media/org-transform-option.png
:white_check_mark:Succeeded

docs/reference/media/org-transform-page.png
:white_check_mark:Succeeded

docs/reference/media/org-upload-option.png
:white_check_mark:Succeeded

docs/reference/nuget-config-file.md
:white_check_mark:Succeeded

docs/reference/organizations-on-nuget-org.md
:white_check_mark:Succeeded

docs/tools/cli-ref-sign.md
:white_check_mark:Succeeded

For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.


fix compatibility with boost 1.83

[Bugfix] Fix incorrect disconnect call for static functions
Problem:
When using uiInterface.NotifyBlockTip.disconnect(BlockNotifyGenesisWait) to disconnect a static function, the compilation fails because boost::signals2::disconnect requires the exact type signature match of the slot. Using the function name directly doesn't resolve to the correct function pointer for static functions.
Solution:
The fix explicitly uses &BlockNotifyGenesisWait to pass the function pointer. This resolves the compilation error.
Impact:
Only affects the disconnect mechanism for static functions in uiInterface.NotifyBlockTip.

@patricklodder Can you review this patch for me?

Looking forward to your review and test results.

This test looks good.


"Route not found" issue when adding path to ROOT_URL

Hello
I am using Mongoclient as a boundled node.js application (using meteor build)
(The application is built using the meteor version installed by the meteor installation script which is <IP_ADDRESS> as this moment)
As mongoclient is intended to be used behind a reverse proxy, the environment variable ROOT_URL have been set with "ROOT_URL='http://localhost/mongoclient' aka domain/path
(tests using address translation do not work)
The other environment variable are also defined properly and work well.
However, when using the root URL, mongoclient loads and show a "route not found' error message.

No previously defined connections to mongo db  are available in the connect menu.

When clicking on the Go to Dashboard, the URL appears to be changed to http://localhost/databaseStats and mongoclient  works properly.
The configured connections are again available.

Accessing directly
http://localhost/ or http://localhost/databaseStats
or http://localhost/mongoclient/databaseStats return a 404 error
(this is an expected behaviour :+1: )

The health check works also as intended :http://localhost/mongoclient/healthcheck :+1:

When changing ROOT_URL to a simplier url like http://localhost/, mongodb works fine.

This behaviour have been observed both is javascript mode and websocket mode
This is an issue as it is not suitable for production use.
Regards,
Aal.

Thanks for the detailed explanation, gotta findout what's the issue

It seems like, iron router have this issue. #563, #154
Gotta try to find a workaround or pass to flow:router

Hello @aalaesar,
could you please kindly try again, I've moved to flowrouter from ironrouter, and please notify me if you encounter any issue.
Thanks

hello @rsercano
I have rebuilt the application using branch master and tested with the same environment.
the issue has disapeared and urls are properly used.

Thank you for your very quick and efficient support :+1:
I see you added the 1.5.0 milestone for this issue.
is it going to be released soon ?
If it's not the case, will you add an intermediate version ? (1.4.1 )
Best regards
Aalaesar.

I'm glad your issue is gone @aalaesar, unfortunately I've added some features to be planned for 1.5.0 and not planning to do any bugfix release soon. Are you using docker ? If not can you keep using master branch ? Soon (probably at mid december) I'm planning to release 1.5.0
Cheers


need to add support for ARM MSB (ARMEB) relocations

Currently missing support for relocations on ARM MSB platforms.

Fixed in 2.2.2672-dev


Failed to find bot installation data

I'm using Bolt with Flask and I can't make it work. I'm using it with passenger and nginx. I've alread configured /slack/events but when I try to make the app react to app_home_opened I get this:

App 5912 output: [ pid=5912, time=2020-10-28 22:20:40,851 ]: Failed to find bot installation data for enterprise: none, team: T027KNX9B: [Errno 2] No such file or directory: './data/none-T027KNX9B/bot-latest'
App 5912 output: [ pid=5912, time=2020-10-28 22:20:40,851 ]: auth.test API call result is unexpectedly None

Reproducible in:
pip freeze | grep slack
python --version
sw_vers && uname -v # or `ver`

The slack_bolt version
slack-bolt==0.9.5b0
slack-sdk==3.0.0rc1
Python runtime version
Python 3.6.8
OS info
Ubuntu 18.04
Steps to reproduce:
App code:
import logging
import os
from slack_bolt import App
from slack_bolt.adapter.flask import SlackRequestHandler
from slack_bolt.oauth.oauth_settings import OAuthSettings
from slack_sdk.oauth.installation_store import FileInstallationStore
from slack_sdk.oauth.state_store import FileOAuthStateStore

logging.basicConfig(level=logging.DEBUG)

oauth_settings = OAuthSettings(
    client_id=os.environ["SLACK_CLIENT_ID"],
    client_secret=os.environ["SLACK_CLIENT_SECRET"],
    scopes=["channels:read", "groups:read", "chat:write"],
    redirect_uri=None,
    install_path="/slack/install",
    redirect_uri_path="/slack/oauth_redirect",
    state_store=FileOAuthStateStore(expiration_seconds=600, base_dir="./data")
)

app = App(
    signing_secret=os.environ["SLACK_SIGNING_SECRET"],
    installation_store=FileInstallationStore(base_dir="./data"),
    oauth_settings=oauth_settings
)

@app.middleware  # or app.use(log_request)
def log_request(logger, body, next):
    logger.debug(body)
    return next()

@app.event("app_mention")
def event_test(body, say, logger):
    logger.info(body)
    say("What's up?")

@app.event("message")
def handle_message():
    pass

from flask import Flask, request

BotApp = Flask(__name__)
handler = SlackRequestHandler(app)

@BotApp.route("/slack/events", methods=["POST"])
def slack_events():
    return handler.handle(request)

@BotApp.route("/slack/install", methods=["GET"])
def install():
    return handler.handle(request)

@BotApp.route("/slack/oauth_redirect", methods=["GET"])
def oauth_redirect():
    return handler.handle(request)

@app.event("app_home_opened")
def open_modal(client, event, logger):
  try:
    # view.publish is the method that your app uses to push a view to the Home tab
    client.views_publish(
      # the user that opened your app's app home
      user_id = event["user"],
      # the view object that appears in the app home
      view={
        "type": "home",
        "callback_id": "home_view",

        # body of the view
        "blocks": [
          {
            "type": "section",
            "text": {
              "type": "mrkdwn",
              "text": "*Welcome to your _App's Home_* :tada:"
            }
          },
          {
            "type": "divider"
          },
          {
            "type": "section",
            "text": {
              "type": "mrkdwn",
              "text": "This button won't do much for now but you can set up a listener for it using the `actions()` method and passing its unique `action_id`. See an example in the `examples` folder within your Bolt app."
            }
          },
          {
            "type": "actions",
            "elements": [
              {
                "type": "button",
                "text": {
                  "type": "plain_text",
                  "text": "Click me!"
                }
              }
            ]
          }
        ]
      }
    )
  except Exception as e:
    logger.error(f"Error opening modal: {e}")

if __name__ == "__main__":
	BotApp.run()

Expected result:
app reacted to the event
Actual result:
It fails, I think somehow it's not saving the OAuth data but I don't know why

Hi @Redithion, I guess you've installed the Slack app from the Install button in your Slack app configuration page: Settings > Install App (The URL should be https://api.slack.com/apps/{your app id}/install-on-team) and then you're trying to get the OAuth enabled app work with the workspace.
An installation from the admin page works only with a single bot token. In this case, you can pass as token in the App's constructor args in the way the Getting Started guide does. https://slack.dev/bolt-python/tutorial/getting-started
If you use the client_id/client_secret for app initialization, the app requires Slack's OAuth flow installation, not the easy way from the admin page. Installing the app into your workspace from https://{your domain}/slack/install beforehand. By completing this process, the app can store issued bot token in your local file system.

Thanks for your answer!
I'm just starting with this and I forgot to mention that when I tried /slack/install I got this:

I did install it in Settings > Install App (I have the Bot User OAuth Access Token)
Also, I tried changing the authentication method following the tutorial but I get

App 11766 output: [ pid=11766, time=2020-10-29 00:24:18,026 ]: As you gave installation_store/authorize as well, token will be unused.

I don't mind using the Bot Token, I will only use this app internally.

Thanks for sharing this. Probably, the reason why you get the invalid_browser error is that you are not using https URL.

As you gave installation_store/authorize as well, token will be unused.

This means your local host has the env variable named SLACK_BOT_TOKEN as well. You can unset the env variable if you don't need it.
Also, if you run your app only for a single workspace, it's totally fine to skip handling the OAuth flow (=this means simply initializing your app with only token and signing secret).

Good to know about https (a fight for another day though)

App 11766 output: [ pid=11766, time=2020-10-29 00:24:18,026 ]: As you gave installation_store/authorize as well, token will be unused.

You were right about this, I am not longer setting that variable and that message does not show anymore, but...I still get this:

App 13019 output: [ pid=13019, time=2020-10-29 00:38:20,165 ]: Failed to find bot installation data for enterprise: none, team: T027KNX9B: [Errno 2] No such file or directory: '/home/ubuntu/.bolt-app-installation/none-T027KNX9B/bot-latest'
App 13019 output: [ pid=13019, time=2020-10-29 00:38:20,165 ]: auth.test API call result is unexpectedly None

I've just figured that I also need to remove SLACK_CLIENT_SECRET
Thanks for all your help, I REALLY appreciate it

I am getting the same issue today, should I open a new issue?
My app installation becomes invalid after a few hours
Is it because after some time heroku sleeps or because heroku filesystems are not permanent? I am able to use the bot again ones i install via my url/slack/install.
I currently have the following env variables set:
SLACK_CLIENT_ID
SLACK_CLIENT_SECRET
SLACK_SCOPES
SLACK_SIGNING_SECRET
Do i need to pass something like
oauth_settings = OAuthSettings(
...
)
when I initialize the app too? I haven't exactly found the documentation for this.

@Techno-Disaster

should I open a new issue?

No, I don't think so. This is a simple question I can reply here.

Is it because after some time heroku sleeps or because heroku filesystems are not permanent?

The Heroku filesystem is ephemeral. Consider using database or storage service for storing installation data (available options).
See also: https://help.heroku.com/K1PPS2WM/why-are-my-file-uploads-missing-deleted

@seratch
Hi,
I have the same issues for my FastAPI transport based async app with enabled OAuth and public distribution:

Slack button/URL from App settings page does not work
I get Failed to find an installation data... log message, but the app is authorizing and working in any workspace

I have setup my app for using OAuth something like this:
oauth_settings = AsyncOAuthSettings(
    client_id=secrets.slack_client_id,
    client_secret=secrets.slack_client_secret,
    scopes=scopes,
    user_scopes=[],
    redirect_uri=None,
    install_path=oauth_config.install_path,
    redirect_uri_path=oauth_config.redirect_uri_path,
    installation_store=FileInstallationStore(
        base_dir=installation_base_dir,
        client_id=secrets.slack_client_id,
    ),
    state_store=FileOAuthStateStore(
        expiration_seconds=oauth_config.state_store_expiration_seconds,
        base_dir=installation_base_dir,
        client_id=secrets.slack_client_id,
    ),

...

app = App(
    ...
    oauth_settings=oauth_settings,
    ...
)

...

@api.get(oauth_settings.install_path)
async def install(req: Request):
    return await app_handler.handle(req)

@api.get(oauth_settings.redirect_uri_path)
async def oauth_redirect(req: Request):
    return await app_handler.handle(req)

I can install my app in any workspace but only use URL button from my my.app.domain/install path, the button from App settings does not work. I get an error: "invalid browser". The url from App settings does not have state query parameter. The url from /install path has something like this: https://slack.com/oauth/v2/authorize?state=638c1eb1-d6d1-43b0-8a88-9d605d2c4802
For every request from Slack I get the warning in the logs: Failed to find an installation data... with non-existing file: installer-U02U97PGYBZ-latest for example, but in the directory I have the file with other ID installer-...-latest and the app works.
I do not quite understand what is going on. Could you explain what I'm doing wrong?
Thanks!

Hi @seratch and @Redithion , I wonder if there is a way to install an org-wide app via console (api.slack.com/apps) and still authenticate with OAuth (using OAuthSettings) with Bolt framework?
My main objective is to enable built-in token rotation without the hustle of going through OAuth programmatically because my app is org-wide and will only be installed once by an org owner in an enterprise grid.
THANK YOU!

@gfang-work Installation from the admin page does not support token rotation. To use token rotation, your app needs to run the OAuth flow endpoints, and an installing user has to go through the OAuth flow.

@seratch This is a light-speed response.... I really appreciate it. (And sorry I created and deleted a dup question issue)
Is that still true when the installation through admin page is done via OAuth? It's just that the OAuth flow wasn't initiated by the code. Also, can the installation_store be AWS secret manager?

@gfang-work

Is that still true when the installation through admin page is done via OAuth? It's just that the OAuth flow wasn't initiated by the code.

Yes, the process also generates OAuth access tokens but when you install your app from the button in the admin page, the Slack server-side does everything for you, so that your Bolt app's OAuth flow is never used. If your app implement the OAuth flow, I don't recommend using the installation flow from the admin page. Such an installation won't be managed by the InstallationStore.

Also, can the installation_store, an argument of OAuthSettings, be AWS secret manager?

We don't have any built-in support but if you implement a kind of adapter between the two (meaning InstallationStore and AWS Secret Manager). That being said, since we are not AWS experts, it may be possible. But we are unable to help you regarding this topic.


Add Computer History

I'm not sure if "Learn" is the right section for computer history videos and texts. I considered the "Miscellaneous" section as well, but since this list have lot of learning material and since we should always learn from history, I added it here. Let me know if you have a better place for it :smiley:

The Learn section is correct. This list is very interesting.
Can you add a contributing.md file per https://github.com/sindresorhus/awesome/blob/master/awesome.md#include-contribution-guidelines?

@sindresorhus added - thanks :smiley:


Handling Window Loaded event

Added a RoutedEventHandler to be subscribed to window.loaded event and unsubscribed it after the event is handled.

Also, this is needed. or else we will keep adding the handlers again for no reason.


Build errors when trying to run MyBot without changing anything from when downloading it.

When I tried running MyBot without changing anything from when I downloaded the base code, it said there were build errors. I tried deleting and reinstalling but that didn't work.

Can you be more specific? i.e., errors, screenshots, IDE version, etc.


Meeting: February 15, 2023

Attendees

Frank Kilcommins
Kevin Duffey
David O'Neill
Nick Denny

Minutes / Topics

Reviewed last round of updates to the spec by Frank
Discussed next steps regarding bring the spec forward towards the OAI TSC and seeking wider community feedback
Discussed adding more contextual examples to the repo to aid the presentation of the spec capabilities
There is a thought that the spec might not handle callback situations appropriately, this will be discussed through example in a future meeting

Actions

[ ] @frankkilcommins to add FAPI example to the working branch
[ ] @frankkilcommins to merge working branch into main
[ ] @ndenny to review Frank's enhancements on the Parameter Object through more examples
all attendees to seek wider feedback on the spec
start a discussion thread on agreed decisions (mainly focused on what will not be covered by the initial spec version)

`openapi: '3.0.0'
info:
version: '1.0.0'
title: 'Authentication API'
description: |
##  OAuth2 and OpenID Connect are used to handle the security flows relating to API access.
These interfaces are used as part of the PSD2 API journeys there is a
[Getting Started Guide](https://developer.example.com)
and use case focussed developer documentation is available for the following cases:
1. [Delegated SCA](https://developer.example.com)
2. [Redirect based Account Access](https://developer.example.com)
3. [Redirect based Payments](https://developer.example.com)

The OAuth2 and OpenID interfaces are used in three sequences depending on the particular
requirements of the use cases.

When the third party app needs to get access without end-user involvement the Token
endpoint is used to get an access token.  This is called the "Client Credentials Grant" of
OAuth2.  The result of this is an access token than can be used to call some functional APIs.

When user interaction is required the "Authorization Code" grant is used.  In this
implementation it consists of a sequence of calls.

*how far do we take this? include Create Consent and Init Payment at the start? include account and payment APIs at the end?*

1. PAR - Pushed Authorization Request - API Call
2. Authorize - A web interaction that needs to be passed to a user agent (such as a browser)
3. Token - An API call requesting the tokens

![sequence](https://lh3.googleusercontent.com/fBWv0qA9a-HFCXSpEQrUDyFj-xSSFDw4UmG2ACqnvaC8aClExjE9gmDsdgonSHZBGQ_CZ9T-mYB31w=w3000-h886)

This sequence of calls returns an Access token, ID_Token and potentially a refresh token.
The access token provided as a result of the authorization code grant can access other APIs.

The refresh token can be used to request replacement access tokens with the same level of access.
This request is

### References
* [RFC6749 OAuth 2.0 Authorization Framework](https://tools.ietf.org/html/rfc6749)
* [RFC6750 The OAuth 2.0 Authorization Framework: Bearer Token Usage](https://tools.ietf.org/html/rfc6750)
* [OpenID Connect Core 1.0 incorporating errata set 1](https://openid.net/specs/openid-connect-core-1_0.html)
* [Financial-grade API Security Profile 1.0 - Part 1: Baseline](https://openid.net/specs/openid-financial-api-part-1-1_0.html)
* [Financial-grade API Security Profile 1.0 - Part 2: Advanced](https://openid.net/specs/openid-financial-api-part-2-1_0.html)
* [OAuth 2.0 Pushed Authorization Requests draft-ietf-oauth-par-07](https://tools.ietf.org/html/draft-ietf-oauth-par-07)
* [JOSE Related specs (including JWT, JWT, JWE)](https://datatracker.ietf.org/wg/jose/documents/)

servers:

url: https://api.uat.example.com/
description: Sandbox -  Test Server for registered external parties to use for testing and development
url: https://api.example.com
description: Production - Live Server providing APIs to registered third parties

paths:
/.well-known/openid-configuration:
get:
summary: RFC 8414 Well known OAuth 2.0 configuration endpoint
description: |
The standard "OAuth 2.0 Authorization Server Metadata" describing
the configuration including endpoint addresses.  The content of this
file is used by clients to confirm details of the configuration of
the OpenID Provider.
Generally speaking the OpenID configuration is not directly required for delivery of use cases.
externalDocs:
url: https://tools.ietf.org/html/rfc8414
security: []
operationId: WellKnown
tags:
- OAuth2
responses:
200:
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/WellKnown"
/public/jwks:
get:
summary: JSON Web Key set
description: |
Retrieve the public server JSON Web Key (JWK) to verify the signature of an issued
token or to encrypt request objects to it.
externalDocs:
url: https://datatracker.ietf.org/doc/rfc7517/
operationId: JWKS
tags:
- OAuth2
responses:
200:
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/JWKResponse'
404:
description: Not Found
500:
description: Internal Server Error
/as/par.oauth2:
post:
summary: Submits the OAuth 2.0 authorisation request parameters to obtain a request_uri handle for use at the authorisation endpoint.
description: |
A Pushed Authorization request is used to set the parameters for the subsequent Authorization call
    The OAuth2 client sends the signed request object in the POST to the PAR interface to avoid leakage of request parmeters.

    ![PAR](https://lh3.googleusercontent.com/bxiF_yvjeIIDFHxWR8Avae0efhqigSAOPM0t1XzuBihfFWv_yEyZwz1uMCejR7RCl1ytUcvxmFWhVw=w3000-h886)

    This implementation requires PAR to be used.

    **Mutual TLS client authentication is required to access this endpoint**

    As stated in the draft spec : "The pushed authorization request can be composed of any of the parameters
    applicable for use at authorization endpoint including those defined
    in [RFC6749] as well as all applicable extensions."

    For the purposes of the implementation there are a set of
    parameters that will be required for a successful authorization request and
    these are listed below in the request object parameter.

    The `consent_id` key in the request body is found in response to the "Init Payment"
    or "Create Consent" APIs
  externalDocs:
    url: https://tools.ietf.org/html/draft-ietf-oauth-par-07
  operationId: Par
  tags:
    - OAuth2
  parameters:
    - name: Content-Type
      in: header
      schema:
        type: string
        default: application/x-www-form-urlencoded
        enum:
          - application/x-www-form-urlencoded
      required: true
    - name: client_id
      in: query
      required: true
      description: The identifier of the third party provider OAuth client. ClientId is returned during the TPP registration.
      schema:
        type: string

    - name: client_assertion_type
      in: query
      required: true
      description: Type of assertion be used. In this case it must be "urn:ietf:params:oauth:grant-type:jwt-bearer"
      schema:
        type: string
        default: urn:ietf:params:oauth:grant-type:jwt-bearer
        enum:
          - urn:ietf:params:oauth:grant-type:jwt-bearer
      allowEmptyValue: false
    - name: client_assertion
      in: query
      description: |
        Used for PAR client authentication.  The assertion contains a JWS, in this an object (base64(JWS))
        signed with JWT signing private key related to the TPP OAuth client. See the Model and the Assertion
        object for a detailed description of the content.
      required: true
      content:
        application/json:
          schema:
            type: object
            properties:
              iss:
                type: string
              sub:
                type: string
              aud:
                type: string
              exp:
                type: string
              iat:
                type: string
              jti:
                type: string
  requestBody:
    description: |
      parameters that comprise an authorization request are sent directly to the
      pushed authorization request endpoint in the request body

      [PAR Request](https://tools.ietf.org/html/draft-ietf-oauth-par-07#section-2.1)
    required: true
    content:
        application/json:
          schema:
            type: object
            properties:
              response_type:
                type: string
              client_id:
                type: string
              sub:
                type: string
              scope:
                type: string
              prompt:
                type: string
              code_challenge_method:
                type: string
              code_challenge:
                type: string
              state:
                type: string
              nonce:
                type: string
              redirect_uri:
                type: string
              consent_id:
                type: string
  responses:
    200:
      description: OK
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ParResponse'

      links:
        PAR_returned_request_uri:
          operationId: Authorization
          parameters:
            request_uri: '$response.body#/request_uri'
          description: >
            The `request_uri` value returned in the response MUST be used as
            the `request_uri` input parameter in `GET /as/authorize.oauth2` when
            using the authorization code flow, before it expires.
    400:
      description: Bad Request
    401:
      description: Unauthorized
    500:
      description: Internal Server Error

/as/authorize.oauth2:
get:
summary: OAuth 2.0 Authorization endpoint
description: |
The OAuth 2.0 authorisation endpoint is where the end-user is redirected to Perform SCA using their browser.
    **This is a Web interface not a REST API**

    This is the standard RFC 6749 authorization endpoint. In this case the request parameters
    are pushed in via the PAR endpoint prior to the authorize call and only the request_uri
    returned from the PAR request and the client_id is given as input parameters to this call.
    The call is normally triggered from the backend via browser based redirect to the
    authorization server authorize endpoint.

    ![Authorize](https://lh5.googleusercontent.com/G7vvCF3kSwI5IFleYNjBPBVUB-4tYkfnhHr7FUfsGTL9ffxMr8EzH6CQ_V76YYb1qdfTuZ3-emqnMw=w3000-h886)

    ### External Documentation:
    [OpenID Connect Core](https://openid.net/specs/openid-connect-core-1_0.html)

    [OAuth2](https://tools.ietf.org/html/rfc6749)
  security: []
  operationId: Authorization
  tags:
    - OAuth2
  parameters:
    - name: request_uri
      in: query
      required: true
      description: This parameter is returned by the preceeding /as/par.oauth2 call
      schema:
        type: string
    - name: client_id
      in: query
      required: true
      description: The Client ID issued when the app was registered in the developer portal
      schema:
        type: string
  responses:
    302:
      description: |
        Redirect to defined redirect uri with the authorization code as a standard OIDC response.

        >**https://**_{your app redirect_uri}_

        >**?code=**_{Arbirary String}_

        >**&state=**_{state value from authorization request}_

        >**&iss=**_https://api.example.com_
      links:
        Authorization_Response:
          description: >
            The `code` value returned in the response MUST be used as
            the `request_uri` input parameter in `GET /as/authorize.oauth2` when
            using the authorization code flow, before it expires.
          operationId: Token
          parameters:
            code: '$response.path#/code'
    500:
      description: Internal Server Error

/as/token.oauth2:
post:
summary: Token endpoint with client authentication
description: |
There are three different cases where the token endpoint is used
1. Client Credentials Grant
2. Authorisation Code Grant
3. Refresh Grant
    As a result there are different types of token endpoint request and response
    There are three request types and two response types.  All of these types use the same
    interaction but with different request and responses

    ![token](https://lh3.googleusercontent.com/3W6rTo7zGvIj2O0Dm0sTnItr9EDKC6WEn_fN9b8E0hv1vPSNfdyewPzUJBJLuoGMaVNyLnW1PNVA0w=w3000-h886)

    **Mutual TLS client authentication is required to access this endpoint**

    When the **client credentials grant** is being used the Token request has no other calls as pre-requisities.

    When the authorization code grant or refresh grant are being exercised there are dependancies on previous calls.

    In the implementation the **Authorization code flow** depends upon previous calls to:
    - /as/par.oauth2
    - /as/authorize.oauth2

    **The Refresh grant** depends on there being a previous authorization code flow that returned a refresh token.

  operationId: Token
  tags:
    - OAuth2
  parameters:
    - name: Content-Type
      in: header
      schema:
        type: string
        default: application/x-www-form-urlencoded
        enum:
          - application/x-www-form-urlencoded
      required: true
    - name: client_id
      in: query
      required: true
      description: The identifier of the third party provider OAuth client. ClientId is returned during the TPP registration.
      schema:
        type: string
    - name: client_assertion_type
      in: query
      required: true
      description: Type of assertion be used. In this case it must be "urn:ietf:params:oauth:grant-type:jwt-bearer"
      schema:
        type: string
        default: urn:ietf:params:oauth:grant-type:jwt-bearer
        enum:
          - urn:ietf:params:oauth:grant-type:jwt-bearer
      allowEmptyValue: false
    - name: client_assertion
      in: query
      description: |
        Used for PAR client authentication.  The assertion contains a JWS, in this an object (base64(JWS))
        signed with JWT signing private key related to the TPP OAuth client. See the Model and the Assertion
        object for a detailed description of the content.
      required: true
      content:
        application/json:
          schema:
            type: object
            properties:
              iss:
                type: string
              sub:
                type: string
              aud:
                type: string
              exp:
                type: string
              iat:
                type: string
              jti:
                type: string
  requestBody:
    description: |
      Body of the request made to the Token endpoint - 3 schemas available for different flows
    required: true
    content:
      application/json:
        schema:
          oneOf:
            - $ref: '#/components/schemas/TokenClientCredsRequest'
            - $ref: '#/components/schemas/TokenAuthzCodeRequest'
            - $ref: '#/components/schemas/TokenRefreshRequest'
  responses:
    200:
      description: OK
      content:
        application/json:
          schema:
            oneOf:
              - $ref: '#/components/schemas/TokenClientCredsResponse'
              - $ref: '#/components/schemas/TokenAuthzResponse'
    400:
      description: Bad Request with a token error code
    401:
      description: Unauthorized with a token error code
    500:
      description: Internal Server Error

components:
schemas:
WellKnown:
required:
- issuer
- authorization_endpoint
- token_endpoint
- response_types_supported
properties:
issuer:
type: string
authorization_endpoint:
type: string
token_endpoint:
type: string
revocation_endpoint:
type: string
userinfo_endpoint:
type: string
introspection_endpoint:
type: string
jwks_uri:
type: string
registration_endpoint:
type: string
ping_revoked_sris_endpoint:
type: string
ping_end_session_endpoint:
type: string
device_authorization_endpoint:
type: string
scopes_supported:
type: string
claims_supported:
type: string
response_types_supported:
type: string
response_modes_supported:
type: string
grant_types_supported:
type: string
subject_types_supported:
type: string
id_token_signing_alg_values_supported:
type: string
token_endpoint_auth_methods_supported:
type: string
token_endpoint_auth_signing_alg_values_supported:
type: string
claim_types_supported:
type: string
claims_parameter_supported:
type: string
request_parameter_supported:
type: string
request_uri_parameter_supported:
type: string
request_object_signing_alg_values_supported:
type: string
id_token_encryption_alg_values_supported:
type: string
id_token_encryption_enc_values_supported:
type: string
backchannel_authentication_endpoint:
type: string
backchannel_token_delivery_modes_supported:
type: string
backchannel_authentication_request_signing_alg_values_supported:
type: string
backchannel_user_code_parameter_supported:
type: string
tls_client_certificate_bound_access_tokens:
type: string
mtls_endpoint_aliases:
type: string
JWKResponse:
  description: |
    A JSON object containing the server public JWK set in the form of an array of
  properties:
    keys:
      type: array
      items:
        type: object
        properties:
          kty:
            type: string
          use:
            type: string
          key_ops:
            type: string
          alg:
            type: string
          kid:
            type: string
          x5c:
            type: string
          x5u:
            type: string
          x5t:
            type: string
          x5t#s256:
            type: string

ParResponse:
  properties:
    expires_in:
      type: string
      description: The expires in parameter defines the number of seconds when the reference uri expires.
    request_uri:
      type: string
      description: The request uri to the request object in the request to the par endpoint.

AuthCodeRequest:
  required:
    - test
  properties:
    expires_in:
      type: string
      description: The expires in paremeter defines the number of seconds when the reference uri expires.
    request_uri:
      type: string
      description: The request uri to the request object in the request to the par endpoint.

AuthCodeResponse1:
  properties:
    code:
      type: string
      description: The authorization code that will be used when making the subsequent request to the /as/token.oauth endpoint
    state:
      type: string
      description: The request uri to the request object in the request to the par endpoint.
    iss:
      type: string
      description: The request uri to the request object in the request to the par endpoint.

TokenClientCredsRequest:
  description: Request Schema for the token endpoint in the context of a Client Credentials OAuth2 flow
  required:
    - grant_type
    - scope
  properties:
    grant_type:
      type: string
      description: String that defines which OAuth2 grant this request is part of
      enum:
        - client_credentials
      default: client_credentials
    scope:
      type: string
      description: Space delimited list of OAuth2 scopes

TokenAuthzCodeRequest:
   description: Request Schema for the token endpoint in the context of an OAuth2 Authorization code  flow
   required:
     - grant_type
     - code
     - redirect_uri
     - code_verifier
   properties:
    grant_type:
      description: String that defines which OAuth2 grant this request is part of
      type: string
      default: authorization_code
    code:
      type: string
      description: The authorization code provided as a parameter in the redirect back from the preceeding /as/authorize.oauth2 call
    redirect_uri:
      type: string
      description: The value of the redirect URI that was used in the preceeding /as/authorize.oauth2 call
    code_verifier:
      type: string
      description: The code verifier Proof Key of Code Exchange (PKCE).

TokenRefreshRequest:
  description: Request Schema for the token endpoint in the context of an OAuth2 Refresh flow
  required:
    - grant_type
    - refresh_token
  properties:
    grant_type:
      description: String that defines which OAuth2 grant this request is part of
      type: string
      enum:
        - refresh_token
      default: refresh_token
    refresh_token:
      type: string
      description: The refresh_token provided as a parameter in the response from a preceeding /as/token.oauth2 call
    scope:
      type: string
      description: OPTIONAL - space delimited list of scopes that is equal to or a subset of the scopes requested by the preceeding authorization code flow

TokenClientCredsResponse:
  required:
    - access_token
    - token_type
  properties:
    access_token:
      type: string
      description: The access token issued by the server.
    token_type:
      type: string
      description: "bearer"
    expires_in:
      type: integer
      description: The expires in paremeter defines the number of seconds when the access token expires.
    scope:
      type: string
      description: space delimited list of scopes

TokenAuthzResponse:
  required:
    - access_token
    - token_type
  properties:
    access_token:
      type: string
      description: The access token issued by the server.
    refresh_token:
      type: string
      description: The refresh token issued by the server.
    token_type:
      type: string
      description: "bearer"
    expires_in:
      type: integer
      description: The expires in paremeter defines the number of seconds when the access token expires.
    scope:
      type: string
      description: space delimited list of scopes
    id_token:
      type: string
      description: The id token issued by the server.

x-workflow-sig:
procedures:
PAR+OIDCauthzcode:
summary: PAR, Authorization and Token workflow
procedureID: OIDC-PAR-AuthzCode
description: |
PAR - Pushed Authorization Request - API Call - https://www.rfc-editor.org/rfc/rfc9126.html
Authorize - A web interaction that needs to be passed to a user agent (such as a browser) https://openid.net/specs/openid-connect-core-1_0.html
Token - An API call requesting the tokens
participants:
- server
description: ""
- client_app
- user_agent
variables:
- name: client_id
description: The identifier of the third party provider OAuth client. ClientId is returned during the TPP registration.
schema:
type: string
- name: client_assertion
description: |
Used for PAR client authentication.  The assertion contains a JWS, in this an object (base64(JWS))
signed with JWT signing private key related to the TPP OAuth client. See the Model and the Assertion
object for a detailed description of the content.
content:
application/json:
schema:
type: object
properties:
iss:
type: string
sub:
type: string
aud:
type: string
exp:
type: string
iat:
type: string
jti:
type: string
- name: redirect_uri
description: The value of the redirect URI that was used in the preceeding /as/authorize.oauth2 call
schema:
type: string
- name: code_verifier
description: The code verifier Proof Key of Code Exchange (PKCE)
schema:
type: string
  PARrequestBody:
    description: |
      parameters that comprise an authorization request are sent directly to the
      pushed authorization request endpoint in the request body
      [PAR Request](https://tools.ietf.org/html/draft-ietf-oauth-par-07#section-2.1)
    required: true
    content:
        application/json:
          schema:
            type: object
            properties:
              response_type:
                type: string
              client_id:
                type: string
              sub:
                type: string
              scope:
                type: string
              prompt:
                type: string
              code_challenge_method:
                type: string
              code_challenge:
                type: string
              state:
                type: string
              nonce:
                type: string
              redirect_uri:
                type: string
              consent_id:
                type: string

  steps:
    - stepId: PARStep
      operationId: Par
      description: Pushed Authorization Request
      source: client_app
      destination: server
      parameters:
        - Content-Type:
          in: header
          schema:
            type: string
            value: "application/x-www-form-urlencoded"
        - client_id:
          in: query
          schema:
            type: string
            value: $variables.client_id
        - client_assertion_type:
          in: query
          schema:
            type: string
            value: "urn:ietf:params:oauth:grant-type:jwt-bearer"
        - client_assertion:
          schema:
            type: object
            value: $variables.client_assertion
      requestBody:
          schema:
            type: object
            value: $variables.PARrequestBody
      success:
        - $response.code == 200

    - stepId: AuthzCodeStep
      operationId: Authorization
      description: OIDC Authorization code request
      source: user-agent
      destination: server
      parameters:
        - RequestUri:
          in: query
          schema:
            type: string
            value: $steps.PARstep.response.200.body.request_uri
        - client_id:
          in: query
          schema:
            type: string
            value: $variables.client_id
      success:
        - $response.code == 302

    - stepId: TokenStep
      operationId: Token
      description: OIDC Token endpoint
      source: client_app
      destination: server
      parameters:
        - Content-Type:
          in: header
          schema:
            type: string
            value: "application/x-www-form-urlencoded"
        - client_id:
          in: query
          schema:
            type: string
            value: $variables.client_id
        - client_assertion_type:
          in: query
          schema:
            type: string
            value: "urn:ietf:params:oauth:grant-type:jwt-bearer"
        - client_assertion:
          schema:
            type: object
            value: $variables.client_assertion
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                grant_type:
                  value: "authorization_code"
                code:
                  type: $steps.AuthzCodeStep.response.302.query.code
                redirect_uri:
                  type: $variables.redirect_uri
                code_verifier:
                  type: $variables.code_verifier
      success:
        - $response.code == 200
  outputs:
    TokenResponse: $steps.TokenStep.responses.200

`

AuthenticationAPI-v3.0.0-procedure-PAR&OIDCalpha2.txt

@Macke I've converted your examples to the current spec version for review. You can find them at:
https://github.com/OAI/sig-workflows/tree/draft-version-minor-enrichment/examples/1.0.0
I've a few questions about the OpenAPI definition as I don't believe it conforms with the PAR RFC for some of the requests (mainly around JSON bodies versus application/x-www-form-urlencoded params) but lets discuss in slack.


Fixed a capitalisation issue preventing the project from compiling on Linux

The project only need this two small changes to compile on Linux using Monodevelop. However, there is issues with the check-boxes inside a TreeView: they do not update visually. I could not find any fixes though. It might be a problem with Mono and fixed in a future release.

Thanks!


[Publisher] [UI] API overview page inconsistencies

Looking at following page there seems to be couple of inconsistencies and oddities,

There's too much information there, is it possible to refactor and simplify?
Endpoints, Resources and some parts of Configuration section repeats at the left hand menu. However, not everything. Why? May be we can collapse everything to the left menu?
Some information can be changed, like for example Transports, Endpoints. Some information cannot be changed - the version, context. There's no visual (or textual) indication that there's a difference
Some information, I feel can be simplified and made a little easy to read. For example Provider can be renamed as 'Created By'
Workflow Status seems out of place. There's no information to indicate the presences (or lack of) workflow configuration. Should we detect whether workflow engine is configured and display status here?

Hi @chintana ,
There's too much

information there, is it possible to refactor and simplify?

Could you please point of the fields that you think it's not fitting here?

Endpoints, Resources and some parts of Configuration section repeats at the left hand menu. However, not everything. Why? May be we can collapse everything to the left menu?

If we show all the resources and endpoint details here, There would be too much information on the overview page. Idea was to show the essential information here.

Some information can be changed, like for example Transports, Endpoints. Some information cannot be changed - the version, context. There's no visual (or textual) indication that there's a difference

This is a read-only page, If user want's to change any parameter they need to navigate to respective pages. IMO showing editable and non-editable (or immutable API properties) in overview page might confuse the user

Some information, I feel can be simplified and made a little easy to read. For example Provider can be renamed as 'Created By'

Agree

Workflow Status seems out of place. There's no information to indicate the presences (or lack of) workflow configuration. Should we detect whether workflow engine is configured and display status here?

Agree, We can hide the workflow status field if they haven't enabled workflow.

First off, we need to ask the question "what information is absolutely necessary for the end user that's looking at this overview page". To me it looks like a summary. If that's true, then we need to be able to show this in a much more user friendly manner. May be we can hide sections to reveal additional info.
If we're showing a summary, then we also need to ask the question, by showing that section, what user can/cannot do. Just by showing the rest resources have meaning/usefulness here? User can always click on Resources on the left menu and go there to view the full resource list.
The point I'm trying to make here is that we seem to have shown the exact same information that was in previous UI. We haven't thought about the actual user experience of this UIs. Please do correct me if I'm wrong

Yes this is a summary page. And from my judgement, this contains the bare minimum information of an API that is important to view at first glance for an API developer. We can probably remove 'workflow status' and 'endpoint security' from this page. But other than that the other information is quite useful IMO. For example, the resources are the "meat" of the API. That's essentially where the operations of the API are defined in. While its true that one can view the resources in its own tab, giving a first glance at the resources I think is absolutely necessary because that is what gives an indication of what this API does. And as you can see we don't show all resources here, its only a few because the intention here is to provide a quick glance at the API and not display all the detail, which are available in their respective tabs.

Yes this is a summary page. And from my judgement, this contains the bare minimum information of an API that is important to view at first glance for an API developer. We can probably remove 'workflow status' and 'endpoint security' from this page.

IMO this page needs to be redesigned from a UX point of view.

But other than that the other information is quite useful IMO. For example, the resources are the "meat" of the API. That's essentially where the operations of the API are defined in. While its true that one can view the resources in its own tab, giving a first glance at the resources I think is absolutely necessary because that is what gives an indication of what this API does. And as you can see we don't show all resources here, its only a few because the intention here is to provide a quick glance at the API and not display all the detail, which are available in their respective tabs.

What this glance of resources trying to show? Is it the most used resources? If there are 10 resources, what do we show here? If it's arbitrary then it's of no value.
As a developer, you care about how your API is being used, who is using it, from what applications, who changed it, what changed last (was there any new resources added, who added them etc...), were there any errors, what's the error rate, response times from the backend and so on.
Yes, most of these you can find from the stats page. However, that's more useful for the API developer as the overview page. You come to an API and you see a summary of useful info.

My 2¢

"tags" should be in the left, because it's just a different way to describe API. It really shouldn't be under "Configuration".
Metadata should contain, if this API version is default or not. That is IMO mandatory property.
I agree with @nuwand , I would remove Endpoint Security and Workflow Status, but the rest is just fine.


Update discord-rare-drop-notificater

Add support for pickpocket loot, AND instead of OR for value+rarity, cox/tob common loot
The owner(s) of the plugin have been MIA for a few months and they never pushed some of the changes that were made since then. I'm making a pull request in their stead. I'm a contributor on the repo.

I'll tag them just in case they pop in: @MasterKenth @BossHuso

Thanks for tagging me @thefungus, didn't notice it, was logged out on github somehow..

Just checked, since i didn't get any notifications before. Seems there are no open pull requests, just forgot to commit a update to the hub.


I encountered an error, but I don't know how to solve it.

Can you tell me how to solve this error? Thank you very much!

@alanjustalan Do you have your OpenAI API key in a .env.local file?

是的，my OpenAI API in .env.local file

Ah I see! Get rid of the < and >. Sorry for the confusion there. That should fix it!

thanks~

"Get rid of the < and >" what does that mean? Please open mind, there's first day python learner here, haha. Please elaborate, thanks.


YouTube embedded videos are visible without consent and tracking in AA is not working

My colleague Ewa is trying to track YouTube videos in Adobe Analytics but it doesn't seem it's working and additional to that we noticed that the consent manager doesn't block YouTube videos from being shown before accepting the consent.
@sdmcraft @bosschaert

Hello @meejain
I have asked my colleague Ewa to check if we could track Video events with AA and it didn't work for the videos which are embedded in the fragments.

Thank you.

This issue is being worked upon via - https://github.com/sunstar-foundation/sunstar-foundation/pull/41


[MENU] Resolves #6581 Changed push/splice to concat/slice immutable s…

…tructures

[X]  linted.
[X] Commit and PR titles begin with [ComponentName], and are in imperative form: "[Component] Fix leaky abstraction".
[X] Description explains the issue / use-case resolved, and auto-closes the related issue(s) (http://tr.im/vFqem).

Resolves issue with passing immutable structure to MENU component.  MENU is now able to handle immutable via concat and slice methods.

Disregard.  Immutable Value and conflict with redux-form.  Which has been solved.  Sorry about that.


Abjad

Description of changes
Two changes:

The abjad build was broken with a ModuleNotFoundError, so I added the relative module to dependencies.
The --replace option was deprecated, so I replaced it with --replace-fail for robustness.

Note: I seem to be unable to run nixpkgs_review; the nix-env -qaP command (with some extra flags) required for the script seems to fail and I'm not sure why.

Things done

Built on platform(s)

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

For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)

[ ] sandbox = relaxed
[ ] sandbox = true

[ ] Tested, as applicable:

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

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

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[x] Fits CONTRIBUTING.md.

Add a :+1: reaction to pull requests you find important.

Hello all, not sure what the process is for this, but how do I go about pinging people for review? I realize now this has been open for more than a month and I'd like to get it merged if possible

Normally you would ask on the NixOS discourse, on a thread such as PRs ready for review. That will usually bring your PR to attention.

This pull request has been mentioned on NixOS Discourse. There might be relevant details there:
https://discourse.nixos.org/t/prs-ready-for-review/3032/4154

Hey I just realised your branch has conflicts with the master branch, meaning it can't be merged into it cleanly. Rebase against nixpkgs master and solve the conflicts from there. Force-push to your PR branch and you should be good to go.

Done I think!

Since this package is a python library, please write the commit messages and PR title starting with python311Packages.abjad.

Done!


springfox-data-rest: fix EntitySearchExtractor return type

What's this PR do/fix?
This is a fix for #2311
Are there unit tests? If not how should this be manually tested?
declaration-spring-data-rest contract has been updated to reflect the changed behavior.
Any background context you want to provide?
findAll and search methods should return the same type of result.
What are the relevant issues?
#2311

Thank you @iles-2e


How to use onChange without nexrender/api?

I probably misunderstood something, but don't know what..
It's written in readme that with @nexrender/api I can just do this:
result.on('created', job => console.log('project has been created'))
result.on('started', job => console.log('project rendering started'))
result.on('finished', job => console.log('project rendering finished'))
result.on('error', err => console.log('project rendering error', err))

But I communicate with nexrender-server via http, using php>guzzle>curl.
So in my case - pure json string is sent in request body, which can't hold functions in it..
Tried in same way it's in docs:
{
    "template": {
       ...
    },
    "assets": [],
    "actions": {
        "prerender": [],
        "postrender": [],
    },
    "onChange": function(render) {
        console.log(render.uid)
        console.log(render.state)
    },
    "onRenderProgress": Function
}

and get invalid json error in response.

Thanks for any help.

Well, you see the api module has a polling mechanism
https://github.com/inlife/nexrender/blob/master/packages/nexrender-api/src/job.js#L3-L30
The simplest way to explain is that it just constantly fetching update about a job.


Detect Maven GroupId and version at runtime

https://github.com/sormuras/junit-platform-isolator/blob/master/junit-platform-isolator-base-8/src/main/java/de/sormuras/junit/platform/isolator/Configuration.java#L20-L25
Group Id and version should match with those provided by the "current" JAR, i.e. junit-platform-isolator.jar

https://stackoverflow.com/questions/2712970/get-maven-artifact-version-at-runtime
https://stackoverflow.com/questions/3697449/retrieve-version-from-maven-pom-xml-in-code


🐛 [backplane-2.7] fix the mca override cma configs issues

Summary
Related issue(s)
Cherry pick https://github.com/open-cluster-management-io/ocm/pull/649
Fixes https://issues.redhat.com/browse/ACM-14863

/hold

/retest-required

/approve
/lgtm

/unhold


[CROSSDATA-324] Session managament

:+1 Great work team, a "small" PR for Crossdata, a big step for the humanity

+1 I love comments


Continuous Delivery

This would be a good first contribution. If anyone is interested in setting this up then I'd take a look at how we do it in Chicory https://github.com/dylibso/chicory


VirtualFileResult throws FileNotFoundException

I did an experiment (https://github.com/aspnet/AuthSamples/pull/37) where I re-implemented some of StaticFiles using MVC in order to add auth support. VirtualFileResult was not well suited for this.
I started with File(virtualPath, ...) but it throws a FileNotFoundException if the virtualPath does not exist. A 404 would be more appropriate. So I took my IFileProvider, looked up the IFileInfo, and checked if it existed. But now there's no File(...) overload that accepts my IFileInfo. There's also no overload that accepts an IFileProvider.
I ended up with code like this:
        [Authorize]
        [Route("Authorized/{*file}")]
        public IActionResult Get(string file)
        {
            // VirtualFileResult throws if the file doesn't exist.
            var fileInfo = Files.GetFileInfo(file);
            if (!fileInfo.Exists)
            {
                // https://github.com/aspnet/Home/issues/2537
                return ServeDirectory(file);
            }

            if (_contentTypes.TryGetContentType(file, out var contentType))
            {
                var fileResult = File(file, contentType);
                fileResult.FileProvider = Files;
                return fileResult;
            }

            return NotFound();
        }

The code I would rather write would be something like this:
        [Authorize]
        [Route("Authorized/{*file}")]
        public IActionResult Get(string file)
        {
            var fileInfo = Files.GetFileInfo(file);
            if (fileInfo.IsDirectory)
            {
                return ServeDirectory(file);
            }

            if (_contentTypes.TryGetContentType(file, out var contentType))
            {
                return File(fileInfo, contentType);
            }

            return NotFound();
        }

@javiercn @jbagga

This seems to be a whole new feature request, which will be "add support for MVC to act like a file server". So far we haven't received any ask like that, so closing this for now.


Mapbox Classic will be deprecated

Hi, I have a project using "classic" Mapbox imagery layers, which will be deprecated,
¿Is there any plans to migrate to the new Mapbox?

Thanks for the report.  Do you have a link with more info on the deprecation?

I asked to mapbox support and they told me they will keep such "classic" version "for the forseeable future". I still think cesium should migrate to the new style, which announcement is in https://www.mapbox.com/blog/mapbox-studio-tiles-static/

Here's the API for getting raster tiles from a style:
https://www.mapbox.com/api-documentation/#retrieve-raster-tiles-from-styles
The URI should look like this:
https://api.mapbox.com/styles/v1/{username}/{style_id}/tiles/{tileSize}?/{z}/{x}/{y}?access_token={access_token}

Hi.
I'm using Cesium.UrlTemplateImageryProvider like following code.
var MAPBOX_ACCESS_TOKEN = 'YOUR_ACCESS_TOKEN';
var MAPBOX_STYLE_ID = 'YOUR_STYLE_ID';
var MAPBOX_USERNAME = 'YOUR_USERNAME';

var viewer = new Cesium.Viewer('cesiumContainer');
var layers = viewer.imageryLayers;

// Mapbox api url
var url = 'https://api.mapbox.com/styles/v1/' + MAPBOX_USERNAME + '/' + MAPBOX_STYLE_ID + '/tiles/256/{z}/{x}/{y}?access_token=' + MAPBOX_ACCESS_TOKEN;

var customImageryProvider = new Cesium.UrlTemplateImageryProvider({
  url : url
});
layers.addImageryProvider(customImageryProvider);

It works for me.

@hpinkos do you refer to the additional options that should be passed to MapboxImageryProvider, right?

Thanks again for the issue, @rominavarela!  Would you like to make the update to Cesium?  For info on contributing, see CONTRIBUTING.md.  Thanks!

Is this still valid?

@bampakoa we haven't made any changes here.  I believe this is something we still want to do, but Mapbox hasn't removed support for the old API for fetching tiles so it hasn't been a priority for us to update to use styles instead.

@hpinkos I would be happy to help on that if that's ok. Maybe submit a proposal PR for an additional imagery provider?

Yes, thanks @bampakoa!


Cannot read property 'openContactSelection' of undefined

I have been unable to get this working, even using your exact example code. I get the error:
Cannot read property 'openContactSelection' of undefined

Probably just an import configuration issue.  Here is how we are exporting: https://github.com/streem/react-native-select-contact/blob/master/index.js#L106
You might try importing differently:
import SelectContact from 'react-native-select-contact'
...
SelectContact.openContactSelection()

We use typescript, and it works as expected.  Please report back here if it works for you.  Thanks!

Thanks. I ended up using something else, but thanks for the reply nonetheless.

I am getting same error 'openContactSelection' is undefined and I am not able to access this function from any method.

You may get this error if you forget to link

@bhagwandas answer works for me, thank you


Start HTTP request before changing browser history

Tests still pass, LMK if this breaks things.
Chrome Timeline after this patch - network requests begin 20ms earlier.

Thank you!


Get a list of all subscribers in a channel

Hello,
Is it possible to get a list of all subscribers in a channel? Like a list of all sockets in a room?
I took a look into the channel.watchers() but its a list of functions and not of subscribers.
Is there any way to achieve this? If not, I'm planning to write my own code and then send you a pull request.
Thanks

What you're talking about here is a presence service - This is outside of the immediate scope of SC because there are too many ways to implement this (no one-size fits all).
What if you have multiple SC instances/servers? Then where should you store the the list of socket IDs? You will need to store it in an external service which all your SC instances/servers can share (so the implementation of this feature would be different).
This specific case (for a single-server scenario) might make a good server-side plugin though... Your plugin could attach a new method to the server-side SCSocket object e.g. socket.getSubscribedSockets(channelName, callback) where callback could be in the form callback(err, data).
Then if someone needs to scale their app beyond a single server, they could just use a different plugin (maybe one which exposes the same getSubscribedSockets method that way they won't have to change their code).

What you want to do is cache the users activity to a db (I use redis) and then organize the table how you'd like. I recommend using redis because it has great pub/sub functions.
Here's an example from one of my projects:
server.post( '/geo/toggle_active', function ( req, res ) {
	var data = req.body

	// req.xid = the username of the request
	// data.uname = the username the requester would like to toggle from their channel
	redis.sismember( 'groups:' + req.xid, data.uname ).then( function ( doc ) {
		if ( doc == 1 ) {
			redis.srem( 'groups:' + req.xid, data.uname )
			inGroup( false )
		} else {
			redis.sadd( 'groups:' + req.xid, data.uname )
			inGroup( true )
		}
	} )

	var inGroup = function ( bool ) {
		if ( bool == true ) {
			redis.sadd( 'ingroup:' + data.uname, req.xid )
		} else {
			redis.srem( 'ingroup:' + data.uname, req.xid )
		}

		var _data = {}
		_data.xid = req.xid
		_data.uname = data.uname
		_data.data = bool
		redis.publish( 'actives', JSON.stringify( _data ) )
		return res.send( bool )
	}

} )

The user requests to toggle another out of their group and now we can access the usernames 'groups' table in redis to get the users in that channel.


Gui Image Condition

Describe the bug
Within the Gui, you are meant to be able to apply a condition to determine whether or the image is visible.  However even thought it accepts my procedure, which I have confirmed works in MCreator (without the plugin) the image displays regardless of conditions.
Details

OS: Windows
MCreator version 2020.5
Generator type: forge-1.12.2

1.12 generator not working->
SharableWorkspace.zip
1.15 version that works ->
SharableWorkspace2.zip

I forgot to mention I have the R and G buttons set aside to open the gui, and change the value.  so you can see that the image will toggle on and off on 1.15, but not with the 1.12 generator

I may have something like this?
I tried to make a guidebook but the pictures won't show up

I don't think conditions are supported in the 1.12.2 generator so this is the reason for this.


Website link on front page is broken

It should point to https://github.com/catppuccin/catppuccin/blob/main/docs/port-creation.md.

Oh yeah, thanks! Just fixed it.


Fixed power plant element key

Description
Wrong casing...

References

#0000

A test is failing, remember to fix before merge :)


Search history link does not work well

Two issues with the links in the search history table:

You can click on a blank query and be directed to a url like /search/goodreads;query=;fields=null;sort=null;highlight=null - this should just be /search/goodreads
Clicking on a query with a filter does include the filter in the url, but the filter is not actually selected in the interface when loading the page.

These may be related (i.e. the badly formulated URL is not parsed properly).

This was observed on the 4.0 release and is resolved in 4.1, probably by #1060


Update 2024-08-15-newcomers-meeting.md

Notes for Reviewers
This PR fixes #
Signed commits

[ ] Yes, I signed my commits.

🚀 Preview for commit 8da70523d0da9a2423caf1d6d69ea97d61909199 at: https://66bdff65c2c00429b1c03600--meshery-docs-preview.netlify.app


GOPRIVATE='*' results in std build failures

> env GOPRIVATE='*'
> garble build  -o bin ./standalone
[stderr]
# runtime/internal/atomic
H.go:943629617: undefined: unsafe.ZrMmYd1lg
H.go:943629618: undefined: unsafe.ZrMmYd1lg
K.go:869597725: undefined: unsafe.ZrMmYd1lg
n.go:1008063807: undefined: unsafe.ZrMmYd1lg
exit status 2
# internal/bytealg
o.go:655810508: undefined: unsafe.ZoVArZxRC
6.go:127173979: undefined: unsafe.ZoVArZxRC
exit status 2

This was spotted by @pagran on Slack a few days ago, and I've just run into it again.

How to reproduce?

See the commented out TODO in testdata/scripts/goprivate.txt. I've already fixed two bugs there, but there's a third bug still blocking it from working.


Inconsistency in highlighting \section and \section*

I noticed that there is a slight inconsistency in highlighting numbered and non-numbered sections (and subsections) in a LaTeX document. The non-numbered section has no highlighting, in contrast to the numbered section.
Screenshot:

Fixed downstream: https://github.com/nvim-treesitter/nvim-treesitter/pull/1455 (this was not a problem with the parser but the queries).


Unity 6 namespace error

Hello,
Unity 6 (6000.0.7f1) shows this error.

Could you support this preview version?

Hey, thanks for the report. I pushed a new package version with a fix (1.4.3)


Reducing dependencies using extensions

It looks like roughly half the package load time is due to the DataFrames dependency alone. For users who want to load Stan draws in a different format, this dependency is unnecessary. Could extensions be used to turn any of the package dependencies (especially DataFrames) into weak dependencies?

Yes, this is a valid question and certainly doable. So is a related point made by Brian Ward in Issue 2. The current implementation is kind of interwoven with (nested) DataFrames as was in fact my intention with implementing Brian's Python solution.
All of this is part of a decision I made a few years ago: Focus on Stan[Sample, Diagnose, Optimise]/DataFrames/Makie(Graphs)/CausalInference/"a psis option" for the Pluto notebooks of Statistical Rethinking and Regression And Other Stories. But even with those constraints, I am simply running out of cycles.
So I'm hoping someone else is able to step in. If not, I will try to look into a single NamedTuple option after completing a few non-Julia projects.


Fixes #153: handle false negatives when adding a VM to AG

Please describe the change you are making
This PR fixes #153 and adds handling for false negatives on older oVirt versions.
Are you the owner of the code you are sending in, or do you have permission of the owner?
Yes
The code will be published under the BSD 3 clause license. Have you read and understood this license?
Yes

Merging without review due to lacking review capacity.


Counting Cards

Challenge Counting Cards has an issue.
User Agent is: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36.
Please describe how to reproduce this issue, and include links to screenshots if possible.
My code:

var count = 0;

function cc(card) {
  // Only change code below this line

  switch(card){
    case 2:
    case 3:
    case 4:
    case 5:
    case 6: count+=1;
      break;
    case 7:
    case 8:
    case 9: count+=0;
      break;
    case 10:
    case 'J':
    case 'Q':
    case 'k':
    case 'A': count-=1;
  }
  if(count>0){
    return count+" Bet";
  } else
  return count+" Hold";

  // Only change code above this line
}

// Add/remove calls to test your function.
// Note: Only the last will display
cc(10); cc('J'); cc('Q'); cc('K'); cc('A');

```I cannot find the solution of this challenge

Your code is incorrect (you have a capitalization error).
Please use the Help Chat to ask for assistance when writing code; issues are for reporting problems with the challenges or website.
Happy coding!

Your code is incorrect (you have a capitalization error).
'k' 'K'
Please use the Help Chat to ask for assistance when writing code; issues are for reporting problems with the challenges or website.
Happy coding!


App permissions should include user/org context

When assigning permissions to an app, an optional context (where context is an org) will help teams other than the Owners team become meaningful. Team access rights should be in Lastuser, not in individual apps. Org as context solves for the most common, recurring problem scenario.
These permissions should be assignable by an Org owner, and org owners should not be able to assign permissions like 'siteadmin', so:

Apps should declare a safe list of permissions that can be assigned to teams or users with org context,
Since this data is an app resource, apps should get a new API endpoint for retrieving this data, and
This data should also be supplied in the userinfo on login.

As a consequence, apps that have limited use for the Team model can now lose it.

Deprecated since we've decided against hosting contexts in Lastuser. Even organizations are going away from Lastuser as of #232.


Scraping email

The documentation that explains what one must do to scrape email from a Gmail account is very unclear.

I assume (but am not sure) that the credentials file I download from Google needs to be re-named 'credentials.json' and placed in /scrapper
you mention scripts in the 'scrapper' directory, as well as 'final.sh' and 'makefileforingestion.sh'
there's a vague reference that 'makefileforingestion.sh' may need to be given execution permissions
does the 'makefileforingestion.sh' need to be run BEFORE restarting with the 'poetry run … ' command to start privategpt?
in the repo there is a file /scrapper/threads.txt which appears to be the results of a previous scraping session

Oh yeah thanks for raising the issue, I removed my data 😭

I will update the documentation , I forgot to mention how that python file works.

Basically I mentioned TMux because the final.sh can't be run on a single terminal windows that's why you need new sessions and TMux is used for that.

But you can just manually run the scripts to make it work.

Yes Makefileforingestion is supposed to run before because that would ingest the data into model, (the scrapped data). there's also another script inside scrapper, I will soon update the docs.

Thank you so much for letting me know about data.

It's done now, lmk if you are getting any error now.


Update incremental annotation compilation documentation: Immutables added support in v2.7.4

N/A: Updates documentation
Context
Updates documentation
Contributor Checklist

[ ] Review Contribution Guidelines
[ ] Make sure that all commits are signed off to indicate that you agree to the terms of Developer Certificate of Origin.
[ ] Check "Allow edit from maintainers" option in pull request so that additional changes can be pushed by Gradle team
[ ] Provide integration tests (under <subproject>/src/integTest) to verify changes from a user perspective
[ ] Provide unit tests (under <subproject>/src/test) to verify logic
[ ] Update User Guide, DSL Reference, and Javadoc for public-facing changes
[ ] Ensure that tests pass locally: ./gradlew <changed-subproject>:check

Gradle Core Team Checklist

[ ] Verify design and implementation
[ ] Verify test coverage and CI build status
[ ] Verify documentation
[ ] Recognize contributor in release notes

Hi @cdeszaq - could you fix the DCO check? We require signed off commits.
Thanks!

Please feel free to resubmit this PR once you've signed off your commits.


ADMIN_PASS not being set by AWS secret

Description
I am trying to use f5-bigip-runtime-init to set my ADMIN_PASS from a AWS secret. It appears that f5-bigip-runtime-init finishes successfully but my admin password is not updated to the value of my AWS secret.
I am not sure what to expect when I log into the device, but after I change the password via command line and log into the GUI, I still see the Setup Utility. I need to click through the license page and resource provisioning, where only LTM is checked by default (despite my configuring ASM in the yaml file). Is the runtime-init configuration actually working? Interestingly:

there are no mentions of failures in the log file, and the log file finishes by seeing TEEM report of success.
the Automation Toolchain RPMs are already installed when I log in after deployment. So it is at least partly working.

What am I doing wrong?
Documentation questions
In this example of setting a password via AWS secret manager, you refer to a Terraform secret version (ie, the secret version and not the secret itself). I have found that I need to pass the ARN of the AWS secret (ie, not the "name" of the secret but the "id" or the "arn") and this must be the secret, not the secret version. Does that make sense? I think the documentation could be clearer here, both that the ARN needs to be provided in the YAML file and that it's the secret, not the secret version.
Troubleshooting done
I'm using silly log levels and cannot find any failures and I believe the following:

I am using a string that I know is okay to use as a BIG-IP admin password. I can change the password to this value via TMSH, and I can also have this password change automated by using a python script to pull it from AWS Secrets Manager and setting this via user_data. But I would prefer to put as much onboarding in bigip-runtime-init as possible.
I can see that BIG-IP is making an API call to retrieve secret value from AWS. CloudTrail shows that the Ec2 instance retrieves the value of the secret, and this API call appears to be successful. So I believe that fetching the value of the secret is not the problem.
The IAM role that is attached to the EC2 instance only allows the action secretsmanager:GetSecretValue on the resource required. This is enough for me to use other methods (AWS cmd line tool and python script) to get the secret value, and I can see via CloudTrail that when using runtime-init, the API calls to get the secret appear successful.
/var/log/cloud/bigIpRuntimeInit.log shows a failure to find MAC address for interfaces 1.1 and 1.2 - is this a concern?

My IAM role policy document
data "aws_iam_policy_document" "bigip_policy" {
  version = "2012-10-17"
  statement {
    actions = [
      "secretsmanager:GetSecretValue"
    ]

    resources = [
      aws_secretsmanager_secret.bigip_password.arn
    ]
  }
}

My YAML file
---
runtime_parameters:
  - name: HOST_NAME
    type: metadata
    metadataProvider:
        environment: aws
        type: compute
        field: hostname
  - name: ADMIN_PASS
    type: secret
    secretProvider:
      environment: aws
      type: SecretsManager
      version: AWSCURRENT
      secretId: ${secret_id}
pre_onboard_enabled:
  - name: provision_rest
    type: inline
    commands:
      - /usr/bin/setdb provision.extramb 500
      - /usr/bin/setdb restjavad.useextramb true
  - name: provision_modules
    type: inline
    commands:
      - echo 'sys provision asm { level nominal }' >> bigip_base.conf
extension_packages:
  install_operations:
    - extensionType: do
      extensionVersion: 1.15.0
    - extensionType: as3
      extensionVersion: 3.20.0
    - extensionType: ts
      extensionVersion: 1.14.0
    - extensionType: cf
      extensionVersion: 1.5.0

    - extensionType: ilx
      extensionUrl: https://github.com/F5Networks/f5-appsvcs-templates/releases/download/v1.3.0/f5-appsvcs-templates-1.3.0-1.noarch.rpm
      extensionVersion: 1.3.0
      extensionVerificationEndpoint: /mgmt/shared/fast/info
extension_services:
  service_operations: []

Hi,
Anyone able to help with this? I can't seem to get around this on my own. I've redeployed a few times, and from my logs it looks like the secret is successfully pulled from AWS secrets manager, but the password does not work when I try to log into BIG-IP. I see the log with "runtime_params":{"secrets":1,"metadata":1},"vaults":{"aws":1,"azure":0,"gcp":0} so it looks to me like the secret is successfully pulled from the secrets manager.
Here is the last line in my log file. A SUCCESS message appears to be sent in f5-teem report.
2020-11-13T21:56:29.824Z [19676]: debug: F5 TEEM Payload: {"platform":{"platform":"BIG-IP","platformVersion":"15.1.1","platformId":"Z100","system":{"cpuCount":4,"memory":16047,"diskSize":77824},"nicCount":3,"regKey":"[removed]","deployment":{"cloud":"aws"},"modules":{"ltm":"nominal"},"packages":{"f5-service-discovery-1.2.9-2.noarch":"1.2.9","f5-declarative-onboarding-1.15.0-3.noarch":"1.15.0","f5-cloud-failover-1.5.0-0.noarch":"1.5.0","f5-appsvcs-3.20.0-3.noarch":"3.20.0","f5-telemetry-1.14.0-2.noarch":"1.14.0","f5-appsvcs-templates-1.3.0-1.noarch":"1.3.0"},"environment":{"pythonVersion":"Python 2.7.5","pythonVersionDetailed":"2.7.5 (default, Oct  8 2020, 01:41:11) \n[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)]","nodeVersion":"v6.9.1","libraries":{"ssh":"OpenSSH_7.4p1, OpenSSL 1.0.2s-fips  28 May 2019"}}},"product":{"version":"1.0.0","locale":"en-US","installDate":"2020-11-13T21:56:29.823Z","installationId":"[removed]","installedComponents":{"commander":"^4.1.0","winston":"^3.3.3","get-user-locale":"^1.4.0","uuid":"^8.2.0","@f5devcentral/f5-teem":"^1.4.6","js-yaml":"^3.13.1","mustache":"^4.0.0","request":"^2.88.0","aws-sdk":"^2.610.0","lodash.where":"^3.1.0"}},"operation":{"clientRequestId":"[removed]","rawCommand":"f5-runtime-init -c /config/cloud/cloud_config.yaml","pre_onboard_enabled":{"commands":2},"runtime_params":{"secrets":1,"metadata":1},"vaults":{"aws":1,"azure":0,"gcp":0},"userAgent":"f5-bigip-runtime-init/1.0.0","extension_packages":{"do":"1.15.0","as3":"3.20.0","ts":"1.14.0","cf":"1.5.0","ilx":"1.3.0"},"extension_services":{},"post_onboard_enabled":{"commands":0,"postHooks":0},"result":"SUCCESS","resultSummary":"Configuration Successful","startTime":"2020-11-13T21:55:56.897Z","endTime":"2020-11-13T21:56:28.141Z"}}

I have finally worked this out and it's my fault. I thought my cloud_config.yaml file, outlined above, was sufficient to set the password on BIG-IP, but I had not included a reference to a DO declaration that would set my password to {{ADMIN_PASS}}. I mistakenly thought that simply pulling the aws secret was enough to set the password, but I see I need a DO declaration to accompany this. I've created a DO declaration, referenced the url in my service_operations section of my yaml file, and this now works. I re-read the documentation many times before it finally clicked for me, sorry! I'll close this issue now.

Closing this issue as explained above, I needed to include a DO declaration


ARROW-13782: [C++] Add skip_nulls/min_count to tdigest/mode/quantile

Thanks for the review @cyb70289!


Discussion: Strategy to remove shell-exec from compilation path

TinyGo's current behavior is to handle module -> component conversion for -target wasip2.
Where is shell exec today?
wit-bindgen-go
https://github.com/bytecodealliance/wasm-tools-go/blob/main/wit/load.go#L54
wit: parsing / world resolver
Uses wasm-tools to convert wit -> resolved world json.
The resulting json is converted into structs for codegen.
TinyGo
https://github.com/tinygo-org/tinygo/blob/release/builder/build.go#L864
wit: parsing / world resolver
wasm metadata: attach wit to wasm (wasm-tools component embed)
wasm component encoder: convert wasm module to component ( wasm-tools component new )
Uses wasm-tools to adapt a wasm module to component.
Discussion
Should TinyGo / Go generate core wasm modules and leave metadata/component encoding to 3rd party tools; or should they be part of a wasi target ( or goos/goarch combination )?
Assuming we implement wit parsing / wasm patching in Go:

How do we keep up with wit spec?
In what sequence we'd create these packages?

we chatted about it during BA's meeting and no decisive actions other than researching what wasm-tools is actually doing under the hood and follow up next meeting.
We identified a few options to pass down wit:

Continue with wit directory so wasm-tools (or something else) can perform embedding
Nuke the wit directory and rely on information from generated code in downstream tooling. Options:

go embed per package: Attaching each interface wit to its corresponding go package
go embed per project: Attach the whole wit to the entrypoint package under compilation
A combination of go:wasm{import,export} and markers to carry type information, so the wit can be discarded after codegen

With respect to tooling and compilation, what if TinyGo skipped the wasm-tools component steps, and generated a https://github.com/WebAssembly/component-model/pull/378 form suitable for consumption by wasm-tools or conforming runtimes?

This is a 🔑  point. We touched briefly on the point wrt making TinyGo / BigGo emit wasm32 module and leave wasm-tools steps to other tools. It would allow us to defer implementations based on upstream stability  ( and yes, I'm looking at you WIT spec! 😂  )
The interesting bit here is wasm-tools-go is already a requirement, so something like this is not far from reality:
# generate bindings
go run wasm-tools/cmd/wit-bindgen-go

# compile module ( core wasm )
tinygo build ... -o module.wasm

# componetize it
go run wasm-tools/cmd/assemble-component -in module.wasm -out component.wasm

wasm-tools-go as pre & post compilation steps, having wit-bindgen-go and assemble-component defining their own api / data passing mechanism.
The first incarnation of assemble-component could be a full shell exec into wasm-tools, and feels this is a pattern acceptable in Big Go.
again, no decisions made but wanted to relay the discussion.

I have WIT generation working with tree shaking in a branch, so we can emit minimal WIT files containing a single world to a world's Go package directory.
wasm-tools-go is only a prerequisite for code generation, so it's not really required to compile and build a Go program. This is similar to other tools used by big Go projects like protoc or avo.

Work is progressing here:

@Mossaka has put up a draft PR to run wasm-tools as a WASI 0.1 module inside of wit-bindgen-go: #252
@lukewagner is working on WebAssembly/component-model/pull/378, and @alexcrichton merged early support into wasm-tools: bytecodealliance/wasm-tools/pull/1828

Merged #272. wasm-tools is now vendored as a WebAssembly module into package internal/wasmtools. Thanks @mossaka!


Validation issue prioritization

Checklist

[x] Appropriate branch selected (all PRs must first be merged to dev before they can be merged to master)
[x] Any modified or new methods or classes have helpful JSDoc and code is thoroughly commented
[x] The description lists all applicable issues this PR seeks to resolve
[x] The description lists any configuration setting(s) that differ from the default settings
[x] All tests and CI builds passing

Description
This PR seeks to fix #477 by modifying the version validation error viewer in two ways:

it will sort errors based off of priority level and then alphabetically
it shows different icons based on error severity

This PR depends on the https://github.com/ibi-group/datatools-server/pull/275 PR to datatools-server that uses the version of gtfs-lib that includes the graphQL changes.

Other PRs have been merged in. Good to go, @landonreed?

:tada: This PR is included in version 4.1.0 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


update Home page

please change the home page playground size and the images need to be at container and use the image attached it ll work better with white and dark mode.
no need to add Threefold logo it is already at the nav

need to be like this

Verified on devnet.
The landing page was updated with the provided images. and the text, map now don't exceed the mentioned boundaries.

And the extra threefold logo was removed.

@MohamedElmdary Perfect Thanks Rabie :)


Solve readthedocs settings.py conflict

Research how to fix the problem with requiring default values during documentation buiding.

http://read-the-docs.readthedocs.org/en/latest/faq.html


Page loads with Black Screen

I just installed the docker container. When I navigate to the page, I see a flash of the default screen and then it goes to a black screen.
Did I mess something up?

Closing as the issue is the need for firebase. Loaded v1 and it works.


Switching to the new toolset compiler - 2.6.0-beta2-62211-02

This brings support for the final syntax of "ref readonly" and some bug fixes.
Noticeable changes:

use in at declaration of "in" parameters, not ref readonly
ref comes before partial when declaring partial ref structs.
unboxing conversions for ref-like types are statically rejected as impossible to succeed

The corresponding VSIX to match these compiler bits with IDE experience is -
https://dotnet.myget.org/F/roslyn/vsix/0b48e25b-9903-4d8b-ad39-d4cca196e3c7-<IP_ADDRESS>21102.vsix

test Innerloop Windows_NT Debug Build and Test please

@jaredpar @OmarTawfik  - FYI

will reset the build/test once just to make sure it works.

test this please


Modified min passcode length to admin configurable value

added env variable MIN_PASSCODE_LENGTH in .env.example (to be set by admin in .env)
added config variable for MIN_PASSCODE_LENGTH (default value = 6)
added decorator for performing passcode length check
decorated elections_voting_page()

Tested.
Works as advertised.
Two changes:

Add text to the description text of the passphrase box that gives the min length
move MIN_PASSCODE_LENGTH to end of first group of variables in .env.example