Skip to content

Interesting Widget code, but can't fetch API

Solved Customisation
26 2 11.2k 1
  • wrote on last edited by Panda
    #1

    I added some code to a Widget that uses an OctoAI API call to generate AI Image.
    For some reason the API fetch returns in under a second, with empty reponse.
    The same code runs outside a widget, takes a few seconds and returns the data.
    Here you can try the js code
    https://ccccc555.github.io/oc/

    Is there a fundemental reason why a fetch command cant work in a nodebb widget?

  • I added some code to a Widget that uses an OctoAI API call to generate AI Image.
    For some reason the API fetch returns in under a second, with empty reponse.
    The same code runs outside a widget, takes a few seconds and returns the data.
    Here you can try the js code
    https://ccccc555.github.io/oc/

    Is there a fundemental reason why a fetch command cant work in a nodebb widget?

    wrote on last edited by phenomlab
    #2

    @Panda can you provide the actual code here?

  • @Panda can you provide the actual code here?

    wrote on last edited by
    #3
  • wrote on last edited by
    #4

    @Panda are there any errors in the browser console?

  • @Panda are there any errors in the browser console?

    wrote on last edited by Panda
    #5

    @phenomlab
    Unfortunately cant check, as in France, on mobile.
    Ive tried a few methods to view console in mobile browser but none have ever worked!
    Maybe you can look?
    https://aignite.nodebb.com/category/10/3d
    You will see it returns much more quickly than that code normally would, but doesn’t return with error code

  • @phenomlab
    Unfortunately cant check, as in France, on mobile.
    Ive tried a few methods to view console in mobile browser but none have ever worked!
    Maybe you can look?
    https://aignite.nodebb.com/category/10/3d
    You will see it returns much more quickly than that code normally would, but doesn’t return with error code

    wrote on last edited by
    #6

    @Panda looking at the code, it fires an alert prompt asking for a parameter to be entered. This script requires interaction, so that it why it returns immediately with nothing.

    The widget is executing the script, but without a response, it returns null.

  • @Panda looking at the code, it fires an alert prompt asking for a parameter to be entered. This script requires interaction, so that it why it returns immediately with nothing.

    The widget is executing the script, but without a response, it returns null.

    wrote on last edited by Panda
    #7

    @phenomlab
    Dont think its any problem with that flow, because the prompt comes first

    var promp holds the entered string, and thats used in the octo() function which calls the API
    It works as stand alone code

    Are you saying the prompt command wont stop the code flow like it would outside of a widget?

  • @phenomlab
    Dont think its any problem with that flow, because the prompt comes first

    var promp holds the entered string, and thats used in the octo() function which calls the API
    It works as stand alone code

    Are you saying the prompt command wont stop the code flow like it would outside of a widget?

    wrote on last edited by
    #8

    @Panda said in Interesting Widget code, but can’t fetch API:

    Dont think its any problem with that flow, because the prompt comes first

    That’s correct, but the prompt is interactive in the sense that it waits for user input.

    fetch('https://stable-diffusion-demo-8yn9n69web73.octoai.cloud/predict', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Authorization': `Bearer ${apiKey}`
      },
      body: JSON.stringify({
        'prompt': promp,
      // 'num_inference_steps': '30',
        'sheduler': 'DPMSolverMultistep'
      })
    })
    

    As you can see from above, the original promp value is passed to the JSON function. As that value is never entered, the value is returned NULL.

  • @Panda said in Interesting Widget code, but can’t fetch API:

    Dont think its any problem with that flow, because the prompt comes first

    That’s correct, but the prompt is interactive in the sense that it waits for user input.

    fetch('https://stable-diffusion-demo-8yn9n69web73.octoai.cloud/predict', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Authorization': `Bearer ${apiKey}`
      },
      body: JSON.stringify({
        'prompt': promp,
      // 'num_inference_steps': '30',
        'sheduler': 'DPMSolverMultistep'
      })
    })
    

    As you can see from above, the original promp value is passed to the JSON function. As that value is never entered, the value is returned NULL.

    wrote on last edited by Panda
    #9

    @phenomlab
    There may be some confusion here as descriptions to AI art generators are called prompts. So that ‘prompt’ value in Json body is set to my variable promp.

    promp is set by a JS prompt command at the bottom of the code. Its a global variable so available to the octo() function when called.

    Function octo() has the API fetch, comes after the prompt is entered

    Screenshot_20230625_011227_Chrome~2.jpg

  • @phenomlab
    There may be some confusion here as descriptions to AI art generators are called prompts. So that ‘prompt’ value in Json body is set to my variable promp.

    promp is set by a JS prompt command at the bottom of the code. Its a global variable so available to the octo() function when called.

    Function octo() has the API fetch, comes after the prompt is entered

    Screenshot_20230625_011227_Chrome~2.jpg

    wrote on last edited by phenomlab
    #10

    @Panda yes, but if you run the code directly in the browser a popup prompt asks for a value and won’t proceed until one is provided.

  • @Panda yes, but if you run the code directly in the browser a popup prompt asks for a value and won’t proceed until one is provided.

    wrote on last edited by Panda
    #11

    @phenomlab yes exactly, and why would it be any different in a widget?
    The JS prompt command is async so will halt the flow till value is entered?

  • @phenomlab yes exactly, and why would it be any different in a widget?
    The JS prompt command is async so will halt the flow till value is entered?

    wrote on last edited by
    #12

    @Panda it’s not. If I visit the page you sent me, the popup appears, but no image is returned. This is why I need the console error as there will be one.

  • @Panda it’s not. If I visit the page you sent me, the popup appears, but no image is returned. This is why I need the console error as there will be one.

    wrote on last edited by
    #13

    @phenomlab ah you mean the nodebb console log, not browser inspect console?
    Its nodebb hosted, can you view if you login?

  • @phenomlab ah you mean the nodebb console log, not browser inspect console?
    Its nodebb hosted, can you view if you login?

    wrote on last edited by
    #14

    @Panda no, the browser console. There is likely a JS error there I need to see.

  • @Panda no, the browser console. There is likely a JS error there I need to see.

    wrote on last edited by
    #15

    @phenomlab
    I sent link to the aignite.nodebb.com forum above, its on 3d category
    Incidentally a blank prompt string will still generate a random image, so the problems not with the input

  • @phenomlab
    I sent link to the aignite.nodebb.com forum above, its on 3d category
    Incidentally a blank prompt string will still generate a random image, so the problems not with the input

    wrote on last edited by
    #16

    @Panda yes, but you are missing the point here. I need to see the output of the browser console or at least insert something like the below to return it

    alert(console.log)

    It’s 1:17am here and I’m not in front of a PC, but will check tomorrow.

  • @Panda yes, but you are missing the point here. I need to see the output of the browser console or at least insert something like the below to return it

    alert(console.log)

    It’s 1:17am here and I’m not in front of a PC, but will check tomorrow.

    wrote on last edited by
    #17

    To eliminate any confusion I made a simpler widget which just does hardcoded API call for image of a cat. No user input etc
    Again it runs stand alone, but returns quickly, empty, as a widget
    This example sits on aignite.nodebb.com category 8 (‘Diamond’)
    First example is still in category 10 (‘3d’)

  • To eliminate any confusion I made a simpler widget which just does hardcoded API call for image of a cat. No user input etc
    Again it runs stand alone, but returns quickly, empty, as a widget
    This example sits on aignite.nodebb.com category 8 (‘Diamond’)
    First example is still in category 10 (‘3d’)

    wrote on last edited by phenomlab
    #18

    @Panda the result=undefined says it all. It still returns null and we need to see the error in the browser console.

  • To eliminate any confusion I made a simpler widget which just does hardcoded API call for image of a cat. No user input etc
    Again it runs stand alone, but returns quickly, empty, as a widget
    This example sits on aignite.nodebb.com category 8 (‘Diamond’)
    First example is still in category 10 (‘3d’)

    wrote on last edited by phenomlab
    #19

    @Panda Just looking at this, and it seems that the service expects authentication

    49e50e3b-9744-49ef-b524-197f00c07c0b-image.png

    I also see the below in the console

    Failed to load resource: the server responded with a status of 401 (Unauthorized)
    GET data:image/png;base64,undefined net::ERR_INVALID_URL
    {"code":401,"message":"error occurred during proxy authentication: no token in request"}
    
  • wrote on last edited by
    #20

    Yes. There is a key included and the exact code works as stand-alone, thats why Im wonderinging why not working in a widget


Did this solution help you?
Did you find the suggested solution useful? Support 💗 Sudonix with a coffee ☕
If your organisation needs deeper expertise around infrastructure, security, or technology leadership, learn more about Phenomlab Ltd. Many of the deeper technical guides behind Sudonix are published there.

Related Topics
  • What’s going on with NodeBB?

    Performance nodebb script die
    20
    8 Votes
    20 Posts
    6k Views
    phenomlab
    @cagatay The most reliable way to upgrade Node.js on Ubuntu depends on how you originally installed it. Method 1: Using NVM (Recommended) If you already use Node Version Manager (NVM), upgrading is simple. NVM allows you to keep both versions and switch between them if needed. Install Node 22: nvm install 22 Switch to Node 22: nvm use 22 Set it as your default: nvm alias default 22 Verify the change: node -v Method 2: Using NodeSource (PPA) If you installed Node.js via apt using the NodeSource repository, you need to update the repository script to point to the new version. Remove the old NodeSource list (optional but cleaner): sudo rm /etc/apt/sources.list.d/nodesource.list Download and run the NodeSource setup script for Node 22: curl -fsSL [https://deb.nodesource.com/setup_22.x](https://deb.nodesource.com/setup_22.x) | sudo -E bash - Install/Upgrade Node.js: sudo apt-get install -y nodejs Verify the installation: node -v Method 3: Using the ‘n’ Package If you have npm installed, you can use the n interactive manager. Clear the npm cache: sudo npm cache clean -f Install the ‘n’ helper: sudo npm install -g n Install Node 22: sudo n 22 Update your shell: hash -r Troubleshooting Permission Denied: If you see permission errors using Method 2 or 3, ensure you are using sudo. Path Issues: If node -v still shows version 20 after upgrading via NVM, restart your terminal or run source ~/.bashrc. Conflicts: Avoid mixing these methods. If you switch from apt to nvm, it is best to sudo apt remove nodejs first to avoid path conflicts.
  • Nodebb and emails

    Solved Configure nodebb
    27
    5 Votes
    27 Posts
    11k Views
    phenomlab
    @Panda it will use SMTP. In all cases, I never use any plugin to send email. I’ll always send it raw.
  • NodeBB socket with CloudFlare

    Solved Performance socket cloudflare nodebb
    24
    3 Votes
    24 Posts
    14k Views
    DownPW
    Solved. Tuto here and here
  • Following the API docs but its not clear ...

    Solved Customisation api nodebb
    8
    2 Votes
    8 Posts
    3k Views
    phenomlab
    @Panda you’d be surprised. If you consider that you’d need to use the API to be able to populate a WordPress widget for example (which in turn would of course be PHP), taking this route is still immensely popular.
  • What is this bar called?

    Solved Customisation nodebb
    92
    1
    36 Votes
    92 Posts
    42k Views
    DownPW
    This is good
  • build nodebb Warning in entrypoint size limit

    Solved Performance nodebb
    2
    0 Votes
    2 Posts
    1k Views
    phenomlab
    @eeeee they are nothing to worry about, and can be ignored.
  • How to downgrade plugin version on NodeBB

    Solved Customisation downgrade nodebb
    11
    3 Votes
    11 Posts
    4k Views
    phenomlab
    @cagatay no problems
  • How to fix header side as boxed

    Solved Customisation header boxed sudonix nodebb
    10
    1
    6 Votes
    10 Posts
    3k Views
    cagatay
    @phenomlab yes it caused a problem for mobile users. thank you for helping …