Skip to main content

v0.0.44

Summary

This new release wasn’t strictly scheduled for today, but funnily enough, it marks Juno’s second anniversary. Happy two years! 🥳

Making your applications secure and resilient is one of Juno’s core missions. While this release might not seem to introduce many visible changes—no new endpoints, for example—several improvements have been made under the hood, particularly in user management for your Satellites.

Notably, the default technical collection that synchronizes user data has been modified to reject updates unless provided by the controller. This allows for extending it with new administrative attributes, enabling features such as banning (or unbanning) users in your dApps. Banned users will no longer be able to retrieve, create, update, or delete any documents. Note that users can still delete their own subscription if they choose to.

Similarly, collections in Datastore and Storage now include a new logical attribute that lets you define a maximum number of changes (create, edit, delete) per user. This is particularly useful for preventing spam and excessive data generation. For example, in an app where users create posts, you can limit them to a maximum of 10,000 posts, preventing bad actors from generating millions of unnecessary entries.

Lastly, a new configuration option for authentication has been introduced, which can be useful if you want to reuse the same derivation origin across multiple Satellites.

[!IMPORTANT]
When updating your Satellite, if you use Datastore and Storage, we strongly recommend updating to the latest JavaScript libraries in your dApps as well.

banned

details

Overview

ModuleVersionBreaking changes
Satellite0.0.22⚠️
CratesVersionBreaking changes
junobuild-satellitev0.0.22
junobuild-storagev0.0.15
junobuild-collectionsv0.0.11
junobuild-sharedv0.0.24
junobuild-macrosv0.0.4
LibraryVersionBreaking changes
@junobuild/corev0.1.7
@junobuild/core-standalonev0.1.7
@junobuild/adminv0.1.5
@junobuild/analyticsv0.1.2
@junobuild/storagev0.1.3
@junobuild/consolev0.1.4
@junobuild/cli-toolsv0.1.1
@junobuild/configv0.1.1
@junobuild/config-loaderv0.1.1
@junobuild/utilsv0.1.0⚠️ ️
@junobuild/errorsv0.0.4🆕
CLIVersionBreaking changes
@junobuild/cliv0.1.5
PluginsVersionBreaking changes
@junobuild/vite-pluginv0.0.19
@junobuild/nextjs-pluginv0.0.13
TemplatesVersionBreaking changes
create-junov0.1.11
satellite-templatev0.0.4
observatory-templatesv0.0.3
DockerVersionBreaking changes
@junobuild/satellitev0.0.46
@junobuild/consolev0.0.46
@junobuild/actionv0.0.38

Changes

Here is a list of changes included in this release:

Console (Backend)

No changes.

Console (Frontend)

The console UI/UX has been improved as follows:

Features

  • Support new collection option "Max changes per user" – i.e. make the field editable in collections.
  • Add the ability to ban (or unban) users.
  • Introduce a new modal that displays user details.
  • Display changes made by both users and collections.
  • Show a warning when max usage is reached.
  • Support the new external alternative origins configuration option.
  • Add a "Copy" function in the navbar for quick access to Wallet IDs.
  • Migrate remaining collections to Svelte v5.
  • Sort domains by created_at.
  • Move the memory selection to the advanced options in collections.

Styles

  • Fix launchpad cockpit overflow on mobile.
  • Fix canister row display in monitoring.
  • Review collapsible icons and alignment.
  • Ensure "error" text has white contrast for better readability.
  • Fix modal height on iOS.
  • Use only monochrome icon logos for II and NFID.
  • Improve the layout of "More options" by centering the call to action.

Fixes

  • Fix USD value not displaying in production due to KongSwap API changes.
  • Ensure toasts close automatically after timeout (Svelte v5 migration issue).
  • Prevent default strategy from being used if monitoring is disabled when creating modules.
  • Show submit button when a collection is set as immutable.

Build

  • Update dependencies.
  • Adapt Vitest reporters due to classic deprecation.

Satellite

The Satellite has been updated as follows:

Breaking Changes

  • Disallow users from editing their entries in the technical system collection #user.
  • Modify error messages to improve their structure in the form of a standardized namespace.

Features

  • Track (anonymous) user usage per collection. In other words, every change made by users to collections (except system collections) will be counted (and capped to avoid overflow). This requires the introduction of a new system collection #user-admin.
  • Delete entries in #user-admin when a user is deleted.
  • Implement assertions that prevent users from making any changes (create, edit, or delete) in the Datastore or Storage if the collection option "Max changes per user" is reached.
  • Introduce a new banned flag field within user data.
  • Implement guards to prevent banned users from querying or making any changes in the Datastore or Storage.
  • Improve user data validation by introducing deserialization assertions.
  • Add optional external alternative origins support to the authentication configuration.

Refactoring

  • Use store function to get_controllers in guards.
  • Rename inner() to into_inner().
  • Move various modules, functions, and constants to improve the structure of the crates and, by extension, their maintainability.

Build

  • Bump all dependencies.

Mission Control

No changes.

Orbiter

No changes.

Observatory

No changes.

Library

Please refer to the releases for details.

CLI

Please refer to the releases for details.

Plugins

Please refer to the releases for details.

Templates

Please refer to the create-juno and satellite-template releases for details.

GitHub Action

Please refer to the releases for details.

Docker

Please refer to the releases for details.

Proxy

Please refer to the releases for details.

Repo Tooling

The local development tools of this repo and pipelines have been updated as follows.

Features

  • Introduce the flag --cfg getrandom_backend="custom" required by getrandom in all build scripts.
  • Simplify touch in the Docker build.
  • Refactor the workspace to group tests and introduce test_satellite as a fixture that uses Serverless Functions.

Build

  • Bump Rust version.

Serverless Functions

If you are using Serverless Functions, you can upgrade the following crates accordingly:

[dependencies]
candid = "0.10.13"
ic-cdk = "0.17.1"
ic-cdk-macros = "0.17.1"
serde = "1.0.217"
serde_cbor = "0.11.2"
junobuild-satellite = "0.0.22"
junobuild-macros = "0.0.4"
junobuild-utils = "0.0.4"

Note that we have migrated getrandom to v0.3.0, which includes breaking changes. As a result, you will also need to make sure to upgrade your Juno CLI to v0.1.5.

If you encounter any compatibility issues with third-party dependencies you are using, feel free to reach out. I'm not opposed to downgrading getrandom if necessary.