Code Monkey home page Code Monkey logo

juno's Introduction

Juno

Juno is an open-source Blockchain-as-a-Service platform that makes building decentralized apps faster and easier than ever before ⚡️🚀🤯.

Unlike traditional Backend-as-a-Service (BaaS) platforms like Google Firebase or AWS Amplify, Juno runs entirely on the blockchain.

It allows you to outsource all the behind-the-scenes aspects of your web or mobile development, giving you the ability to focus on the frontend.

The platform operates without controlling your data or work. With Juno, you truly own your creations.

Links & Resources

Here are some useful links:

Contact

Find us on X/Twitter at @junobuild or email [email protected].

juno's People

Contributors

bytesun avatar cylim avatar galihlprakoso avatar jacmos3 avatar peterpeterparker avatar timmiedinnie avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

juno's Issues

Authentication pagination

It seems there is an issue in the pagination (display) of the users in the authentication tab when the last page is reached.
It display "No registered users" even though there are registered users.

bug: windows deploy

"juno deploy" on windows deploy assets with \ (\index.html) instead of / (/index.html) which makes the storage not able to provide resources on the web

Open asset url in another tab

On the storage page, when an asset is selected, display "somewhere" a button or link to open the asset url in another tab

Capture d’écran 2023-06-21 à 19 13 31

etag header

from certified asset

let (status_code, body) = if etags.contains(&enc.sha256) {
            (304, RcBytes::default())
        } else {
            headers.insert(
                "etag".to_string(),
                format!("\"{}\"", hex::encode(enc.sha256)),
            );
            (200, enc.content_chunks[chunk_index].clone())
        };

feat: list transactions with Index canister

Originally, I implemented an "observatory" canister that listed IC transactions (e.g. create a satellite) made on Juno.

After deploying it to mainnet, I noticed that its hearbeat was too clostly. I could had replace it with a timer which might have not been accurate but, as someday an ICP Index canister will be hopefully probably be proposed on mainnet, I could wait a bit until this happens or not.

"Observaroty" was removed in PR #6 and corresponding canister on mainnet was stopped.

Reuse controllers on login

On login, maybe the console can suggest the user to reuse existing controllers and apply those if not yet assigned to the satellite for which the login is performed.

typo and i18n if no collection

The sentence "No collection defined. Start one in Rules tab" is incorrect, it's in "Collections" tab.
Also an i18n key can be extracted.
Capture d’écran 2023-07-07 à 11 39 15

Drag and drop website

Easy solution:

Add an option (a button) to upload a site folder to a satellite. Basically what juno deploy does in the CLI within the console.

More complicated solution:

Build a dedicated dapp that does this - like the Netlify showcase https://app.netlify.com/drop/.

If the same UX is applied, this would make the solution more complicated because satellites would have to be created for unregistered users which can afterwards sign-in to claim their work.

feat: fine grain for "Read" and "Write" permissions

Currently "Read" permission sets the same permission for "Read - Get" and "List" actions. We can probably add some optional fine grain there.

Maybe same idea for "Write" into "Set / Update / Delete".

Let's see if anyone requires this.

Immutable and mutable collections

Currently, collections are mutable, which means developers can change permissions on the fly at any time. While this provides great flexibility, there might be cases where someone sets a collection as "Private" to protect their user data but still wants to ensure that the permission settings remain fixed for privacy reasons.

To address this, we discussed the idea of introducing a flag that defines a collection as either mutable (default) or immutable.

This way, developers can choose to lock the permissions of a collection, ensuring they cannot be changed later, which could be beneficial for certain use cases requiring strict data privacy.

QR code for mission control account identifier

It would be handy to have the ability to display a QR code representing the account identifier of the mission control.
That way one can display the QR code, scan it with NNS dapp and transfer easily icp.
I can imagine we can for example display the QR code in a modal.

Capture d’écran 2023-07-14 à 14 43 08

Option to rewrite all urls to /index.html

Context

Juno is expecting developers to use SSG / prerendering. For example, if an URL /marketplace/sales is requested and if there is no /marketplace/sales/index.html or /marketplace/sales.html available in the dapp, nothing is resolved and the URL ends in error.

Solution

Similar to Firebase, we can add an option "Configure as a single-page app (rewrite all urls to /index.html)?"

When set to true, if an URL /marketplace/sales would resolve no asset, then it should fallback to the root ./index.html.

Firebase

Firebase does more than "just" rewriting to ./index.html it also provide a configurable way to provide multiple rewrites.

https://firebase.google.com/docs/hosting/full-config#rewrites

Certified asset canister

This strategy exists for example on the IC in the certified asset canister.

See:

fix: asset query parameters

Using query parameters leads to certification issue. In other words, query parameters are not supported yet.

make security http headers optional?

Papy.rs is a special case and needs to be embedded in an iframe which is blocked by the default security policy of the satellite.

So should the security options be made optional or should developer be able to opt-out?

fn security_headers() -> Vec<HeaderField> {
    vec![
        HeaderField("X-Frame-Options".to_string(), "DENY".to_string()),
        HeaderField("X-Content-Type-Options".to_string(), "nosniff".to_string()),
        HeaderField(
            "Strict-Transport-Security".to_string(),
            "max-age=31536000 ; includeSubDomains".to_string(),
        ),
        // "Referrer-Policy: no-referrer" would be more strict, but breaks local dev deployment
        // same-origin is still ok from a security perspective
        HeaderField("Referrer-Policy".to_string(), "same-origin".to_string()),
    ]
}

feat: list documents and assets with Principal

@bytesun once mentionned that it would be useful to be able to filter list per owner. while it can be achieved using keys that contains the textual values of the user id, it would be easier to integrate it in the list of filters since it's a common use case.

#[derive(Default, CandidType, Deserialize, Clone)]
    pub struct ListParams {
        pub matcher: Option<String>,
        pub paginate: Option<ListPaginate>,
        pub order: Option<ListOrder>,
        pub owner: Option<UserId>,  // <-- new
    }

build: upgrade ic-cdk v0.4.0

A new version of ic-cdk has been released so the workaround pointing to github in toml files can be removed.

At the same time, maybe I can have a look how to define the common crates in the root Cargo.toml file instead of duplicating references in multiple files.

Stop / start satellites

It would be nice to be able to stop and start satellites.

Great to have it in the UI, not sure if I want to implement this in the Cli too (I don't want the Cli to become too complex).

Metadata for documents for filtering

A document is a blob in memory, therefore it is not easy to filter and list documents based on their content. Most of the work has to be done in the frontend or by tweaking keys or duplicating data.

To overcome the issue, this weekend idea discussed on Discord, is the addition of a hashmap/hashset or plaintext field for the documents.

export interface Doc<D> {
  key: string;
  data: D;
  owner?: string;
  created_at?: bigint;
  updated_at?: bigint;
  metadata?: ???? // <----- here something new
}

Canister information idle_cycles_burned_per_day

In addition to status, cycles and memory display also the idle_cycles_burned_per_day information.

  canister_status : (record {canister_id : canister_id}) -> (record {
      status : variant { running; stopping; stopped };
      settings: definite_canister_settings;
      module_hash: opt blob;
      memory_size: nat;
      cycles: nat;
      idle_cycles_burned_per_day: nat;
  });

Delete satellites and orbiters

“Delete” is not yet implemented. Long story short, there is no easy way on the IC to get to know how little cycles should be retained on a canister to be able to delete it - which annoys me - so I did not made yet the effort to research this (again). But we should implement a way to delete satellites and the remaining cycles (minus what's needed to delete the satellites) should be transferred to the mission control.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.