- Fixes an issue with the capabilities system which prevented ODD apps from receiving the capabilities.
- Increases the default life time of a UCAN.
- Adds browser extension support
- Moves events onto top-level program and renames them. For example, the
local-change
is nowfileSystem:local-change
. - Adds session create and destroy events
- Rename Webnative SDK to ODD SDK and update external URLs
Now parses DAG-JSON formatted CIDs.
Allow symlinks to other file systems to be created.
Fixes an issue with the CID log, which, in certain scenarios, caused Webnative to load the wrong version of an account's file system.
- Removes the
fs.add
andfs.cat
functions, usefs.read
andfs.write
instead. - Renames
program.loadFileSystem()
toprogram.fileSystem.load()
- Adds an event emitter interface so you can listen to various events. This release comes with two events:
fileSystem.local-change
for listening to file system changes andfileSystem.publish
to listen for successful publishes. - Adds
program.fileSystem.recover({ newUsername, oldUsername, readKey })
shorthand method so apps will no longer have to implement the file system recovery flow manually. - Adds
program.accountDID(username)
shorthand method to retrieve the root DID of a given account username. - Adds the file system data functions as shorthand methods.
- Injects programs into the global namespace when in debug mode. Can be disabled via the configuration.
- Introduces stricter types for paths to restrict the paths you can use with various functions and also to guide you a bit more.
- Improved Program type.
- Fixes persistance issue with
fs.mv()
- Fixes various issues with file/directory history.
Fixes issue with the types of the path.appData
function. Now has the correct overloads.
- Fixes
waitForRootDid
retry issues. The function did not make enough attempts nor did it make them frequently enough. - Moves
shareLink
function tocommon/fission
for reachability. - Improve capabilities documentation.
Full rewrite of webnative. 🎉
Components
We've moved to a component system to make webnative more customizable and indepent of Fission infrastructure. The system removes all global state, avoiding bundler issues. We previously had dependency injection; this is basically more of the same without global state.
The documentation should give you some information on how the various components fit together. If you want to write implementations for a component, see the directories in src/components
(or the lib folder). All existing components have been expanded and refactored, and we've introduced the following:
- Introduction of a
depot
component: All IPFS functionality has been moved into here. Can now be swapped out with something else. Note that webnative still uses CIDs & IPLD. - Introduction of a
reference
component: Data root lookups & updating, DID root lookups, DNS and various repositories (cid log & UCANs) have been moved in here. - Introduction of a
manners
component: Debug functionality has moved to here. - Introduction of a
capabilities
components: Responsible for accepting UCANs and filesystem secrets from external sources (eg. Fission Lobby)
Improvements
- The
program
function now serves as the single entrypoint. You can customise all components and configuration via this function. It'll give you aProgram
with possibly aSession
(and many other things) instead of theState
we had before. Basically, when you get a session you're "logged in", otherwise you're not. - Webnative can now have many apps run on the same domain without any conflicts. This should help a lot when developing apps on the same localhost port. All storage and filesystems are namespaced by default.
- When loading a filesystem the data root is tried multiple times (to get around the DNS issue)
- Multiple filesystems can be loaded at the same time (conflicts with identifiers have been resolved), which allows for a temporary filesystem (progressive login).
(Re)moved
- Removal of various confusing filesystem parameters, all data and read keys are
Uint8Array
s now. - Removal of the
webnative.initialise
,app
andpermissionedApp
functions. These have been replaced by theprogram
function mentioned above. - Removal of the
fs.appPath
function, replaced with theappData
function located in the path module. - Removal of the
fs.addPublicExchangeKey
andfs.hasPublicExchangeKey
functions, replaced with non-class-instance functions located infs/data.js
.
- Fixes
LinkError: import object field '__wbg_putBlock_88cdb3be9020efb7' is not a Function
when loading WASM.
- Fixes the depedency-injected
lookupDnsLink
function - Fixes issue with IPFS peer-list storage
- Removes Vite warning caused by a dynamic import
Enable new EXPERIMENTAL public file system version 3.0.0 using rs-wnfs. Use this for experimentation. File system verion 3.0.0 will have breaking changes.
-
Add
setup.fsVersion
setting for configuring the default version for new file systems, can be3.0.0
or2.0.0
. -
Add
setup.wnfsWasmLookup
setting for configuring from where and how to load the rs-wnfs WASM blob. By default it uses the https://unpkg.com CDN. -
Add
WASM_WNFS_VERSION
constant, which is the dependency version for thewnfs
npm package. -
Adds app owned WNFS
-
Separates initialize into
app
andpermissionedApp
entrypoints -
Make email optional at registration
-
Add reset option to bootstrapFileSystem
-
Add dependency-injected DNS lookup implementation
-
No longer uses a locally-shared IPFS client (was originally using a shared worker). This fixes various error messages you may have seen relating to CIDs.
Adds app owned account linking.
Fixes issue with loading private shares.
Updated ipfs-related dependencies.
Move madge
and typedoc-plugin-missing-exports
from dependencies
into devDependencies
.
Fixes circular dependencies.
- Encrypts the filesystem using AES-GCM instead of AES-CTR. Also wraps the filesystem blocks with some information about the encryption algorithm used. Users will need to migrate their filesystems to be able to load apps with this webnative version. Apps will need to update to this webnative version to load migrated/new filesystems.
- CID strings have been replaced with CID class instances from the multiformats library.
- Adds ability to share private files.
- Adds soft/symbolic links.
- Adds dependency injection for initialising and registering accounts.
- Make webnative work across more environments and bundlers (upgrade one-webcrypto to 1.0.3)
- Make full API URL configurable (not just API host).
- Fix version checking failing on old filesystems which are missing a
version
tag.
- Check the wnfs version field when initialising a filesystem and alert users about outdated filesystems or outdated apps.
- Make version mismatch errors configurable through
setup.userMessages(...)
.
- Upgrade js-ipfs libraries to the versions corresponding to the 0.58 release.
- Update API endpoints to v2 and add setup parameter to specify API version.
- No longer uses
ipfs-message-port-client
andipfs-message-port-protocol
forks which sometimes caused weird dependency conflicts.
- Fixed bundling issues with older bundlers, ie. bundlers that did not yet support the
exports
map inpackage.json
. - Switch from noble-ed25519 to tweetnacl. Tweetnacl has been audited and can be used in a wider range of environments.
- Added the
fs.addPublicExchangeKey()
function which adds the public exchange key of that domain/browser/device to your filesystem at/public/.well-known/exchange/DID_KEY
. Along with thefs.hasPublicExchangeKey()
to check if it's there. - Made the login low more resilient. Should work better with extensions triggering
postMessage
s now. - Updated keystore-idb to v0.15.0, which renamed
publicReadKey()
topublicExchangeKey()
(among other functions). The read key-pair is now properly named the exchange key-pair.
- Fixed
webnative.apps.index()
, and now returns a list of domains, along with theirinsertedAt
andmodifiedAt
ISO8601 timestamps. - Fixed
webnative.apps.deleteByDomain()
so it aligns with backend changes.
- Add
extraLobbyParams
toredirectToLobby
. Extra lobby params are transformed into query params that may be read by the auth lobby. (#273)
- Bring back the UMD build (#261)
- Bugfix: Internal
keystore-idb/*
imports were extensionless. Only some bundlers like esbuild and vite handle this fine. We added*.js
extensions. (#265)
- Export maps, you can now import
webnative/path
instead ofwebnative/dist/path
- Move library files from
dist
tolib
- Use a better and faster build system
- Fix issues with
Buffer
fs.write
on the public side now takes raw objects, arrays and numeric values as well- Use the IPFS types from
ipfs-core
- Switch from the borc library to cborg
Typescript output to dist/
instead of dist/src/
Fix naming for minified UMD build
- Allow raw UCANs
- Expose functions for looking up stored UCANs
- Add function to look up user's root DID
- Default browser build to minified UMD
- Build CJS & ES5 for node
Fixed issue with browser detection, didn't work in web/service workers.
Fix a couple of bugs in dependency injection
- Dependency injection for crypto and storage functions to allow for use in Node.js
- Fix race condition in private tree that would occasionally drop filesystem nodes
- Improved path management (
webnative.path
module) - Add support for Ed25519 & BLS DIDs
- Allow permissioning of files
Don't keep old UCANs around.
More detailed error message for NoPermissionError.
- UCAN permission system and improved security.
- Show alert when leaving the page while publishing changes, to avoid data loss.
- Fix issue with urls that were too long while redirecting back from the lobby.
- Better usage of the
Ucan
type in the UCAN functions. - Data root update function returns
{ success }
boolean. - Improved username validation
Fix regex of username validation and allow non-prefixed underscores in usernames.
Does not cancel data-root updates anymore, slightly increasing the performance of concurrent writes.
- IPFS connection and pinning improvements
- Don't show the "failed to update dnslink" debug message when cancelling a dnslink update
fs.mv
will no longer overwrite existing files, but instead throw an error.initialise
will return a rejected Promise if the browser, or context, is not supported.- DNSLink updated debug statement will no longer be shown if it failed to update.
- Hide iframe completely
Fix issue with leave
function, withoutRedirect
option should not be required.
Local IPFS data is shared across all browser tabs through the use of a shared web worker.
Adds the read
and write
methods to trees.
Fix mv
issue.
Re-enable the mv
filesystem function.
Fixed dependency loading issue.
Added versioning info to the README.
- Adds versioning
- Allows for concurrent filesystem operations
- Adds facts
fct
to the UCANs (v0.3.1) - Update IPFS to v0.51.0
- Fixes
isUsernameAvailable
function (was broken due to adjusteddataRoot.lookup
behaviour) - Fixes issue with clearing data from browser.
- Tries reconnecting to Fission gateway if initial connection fails
- Removes
yarn
as a dependency (should've been devDependency)
Support the decoding of the url-safe base64 encoded read-key from the auth lobby.
The expiration timestamp of a UCAN cannot exceed that of its proof.
Bugfix: clear all data when using the leave
function.
Bugfix: updates to files on public side were failing.
Bugfix: changes to public tree were not being reflected in pretty tree.
Don't error on failed pins.
Do not recursively pin content.
Permissions should be optional for redirectToLobby
and loadFileSystem
as well.
- Reliability & performance improvements
- Permissions are now optional
Added proofs to JWT for app routes (index, create & delete)
- Renamed
publicise
/publicize
topublish
- Renamed
prerequisites
topermissions
- The
app
andfs
params toinitialise
are now grouped together by passing thepermissions
parameter. - Decrypt
readKey
from auth lobby (behind the scenes)
Upgrade to js-ipfs v0.50
Connect to signaling server to find your other devices more easily.
Upgrade to CIDv1.
-
initialise
now accepts two additional options, named "prerequisites":const { prerequisites, scenario, state } = await wn.initialise({ // Will ask the user permission to store // your apps data in `private/Apps/Nullsoft/Winamp` app: { name: "Winamp", creator: "Nullsoft", }, // Ask the user permission for additional filesystem paths fs: { privatePaths: ["Music"], publicPaths: ["Mixtapes"], }, });
-
Those prerequisites are passed to the
wn.redirectToLobby
function. (So the auth lobby has the correct parameters to determine the permissions to ask the user) -
Adds the ability to use multiple apps with one file system (closes #73)
-
The SDK now handles multiple UCANs
-
Works offline (fixes #82)
-
Added
initialize
(american spelling) as an alias forinitialise
-
Adds ability to set the potency
ptc
of a UCAN -
Uses the Fission gateway as a delegate node
- File system actions (ie. POSIX interface methods) throw an error when they are missing the necessary permissions (read UCAN)
- Does no longer automatically call the
fs.publicise()
method. You have to call this yourself from now on. - Changed the
fs.appPath
function (see README) - Renamed
scenario.isAuthenticated
toscenario.isAuthorised
- Renamed
scenario.continuum
toscenario.continuation
- The first parameter to
redirectToLobby
has now become the second parameter. - Replaced
deauthenticate
withleave
, which now redirects to the auth lobby automatically, so you can "sign out" there as well.
- Fixed issue with private trees
- Improved connectivity
- Switched from AES-128 read keys to AES-256
- Big rewrite of filesystem
- private side derives names using bloomfilters and stores nodes in an MMPT
- reorganize header info on public side and store metadata/skeleton as cbor data
- Improved
fs.write
method, is an alias foradd
now (becauseadd
overwrites by default) - Improved file system loading and saving
- Skipped because of a botched npm publish
- Added apps API
apps.create
,apps.index
,apps.deleteByURL
- Improved DNSLink lookup error handling
- Reduced time-to-save for the file system to 3 seconds instead of 5
- Removed unnecessary
console.log
calls - Updated default
js-ipfs
tov0.48.1
(wasv0.48.0
)
Removed the default import from the index file. Now you use the SDK as follows, browser stays the same.
import * as sdk from "fission-sdk";
import { initialise } from "fission-sdk";
sdk.initialise();
initialise();
- Renamed
isAuthenticated
toinitialise
initialise
will return an instance of the file system (can be disabled in case you use web workers)- Adds
loadFileSystem
to load a file system (called automatically frominitialise
unless disabled). This function is responsible for caching the file system locally and making a file system if the user hasn't got one yet. - Adds the
fs.appPath.private
andfs.appPath.public
function to build paths. - Adds the
fs.exists
,fs.read
andfs.write
file system methods