Skip to content

Interesting Widget code, but can't fetch API

Solved Customisation
26 2 11.0k 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
  • Spam spam spam

    Solved Configure nodebb
    6
    2 Votes
    6 Posts
    3k Views
    phenomlab
    @Panda said in Spam spam spam: ok, yes Ive seen the queue, it shows IP, but doesnt have a field for comments from registrant. It’s not designed for that. It merely serves as a gateway between posts appearing on your form or not. @Panda said in Spam spam spam: It would be better if nodebb had this plugin included in ACP list, as not only then do you know its approved and should work, but many people cant or dont want to use CLI on the server That’s a question for the NodeBB devs but in all honesty you can’t not use the CLI when installing nodebb so to be this isn’t a big deal.
  • CSS code customization for the link preview plugin

    Solved Customisation css nodebb
    6
    2
    3 Votes
    6 Posts
    3k Views
    phenomlab
    @kadir-ay-0 marking as resolved based on https://community.nodebb.org/topic/17109/manual-build-a-night-mode-for-harmony/5 Please do not raise requests in two places - here and the NodeBB forums. All this does is create unnecessary load for both parties.
  • Page control arrows for PWA

    Solved Customisation nodebb
    27
    25 Votes
    27 Posts
    15k Views
    phenomlab
    @crazycells it is, yes - I think I’ll leave it as there is no specific PWA CSS classes I know of. Well, you could use something like the below, but this means multiple CSS files for different operating systems. /** * Determine the mobile operating system. * This function returns one of 'iOS', 'Android', 'Windows Phone', or 'unknown'. * * @returns {String} */ function getMobileOperatingSystem() { var userAgent = navigator.userAgent || navigator.vendor || window.opera; // Windows Phone must come first because its UA also contains "Android" if (/windows phone/i.test(userAgent)) { return "Windows Phone"; } if (/android/i.test(userAgent)) { return "Android"; } if (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) { return "iOS"; } return "unknown"; // return “Android” - one should either handle the unknown or fallback to a specific platform, let’s say Android } Once you’re in that rabbit hole, it’s impossible to get out of it.
  • CSS codes to prevent votes to disappear

    Solved Customisation nodebb
    3
    1 Votes
    3 Posts
    1k Views
    crazycells
    @phenomlab yes, it is thanks a lot…
  • 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.
  • Whitespace fixes in Nodebb

    Solved Customisation nodebb
    18
    2
    7 Votes
    18 Posts
    6k Views
    phenomlab
    @Panda Just circling back here with something of an update (which I think you’ll like). I’ve completely restructured the ranking system. There are now less ranks, with a higher point threshold to reach them. More importantly, if you reload the site, you’ll notice that the ranks are now icons. I also removed the “Author” badge, and made this a single icon, which (to me) looks much better.
  • Further Widgets question

    Solved Configure nodebb
    4
    1
    1 Votes
    4 Posts
    2k Views
    phenomlab
    @Panda category is for a category in its own, so for example, “fruit” whereas categories is the page that contains all categories as a list.
  • creating topic specific widgets

    Solved Customisation nodebb
    16
    10 Votes
    16 Posts
    7k Views
    phenomlab
    @crazycells said in creating topic specific widgets: Additionally if hide class exists, why are we re-defining it? We’re not 🤭 I misspelled it - it should be hidden