fission-suite/webnative-elm/6.1.0

NOTE: the latest version is 7.0.0

Renamed to fission-codes/webnative-elm. It is published under that name, and new versions come out there.

Versions published as fission-suite/webnative-elm still install under that name. 9 versions of 9 come from the new location (see their notes).

Rerouted (renamed, verified). The GitHub user or repository was renamed. The tag is still there, at the new name. The Lamdera package server serves a copy recovered from https://github.com/fission-codes/webnative-elm.

What we checked: The repo moved to github.com/fission-codes/webnative-elm. Rebuilt with git archive from commit db7e93f9be10 of https://github.com/fission-codes/webnative-elm (zip prefix fission-suite-webnative-elm-db7e93f/, America/Los_Angeles times): the zip is byte-identical to the one package.elm-lang.org recorded, SHA-1 fea834566663f075cf2af19f2498a313cde4a11e.

The Lamdera compiler uses this copy and prints a one-line notice saying so. elm itself fails to download this version.

Details ยท package.elm-lang.org's zip: https://github.com/fission-suite/webnative-elm/zipball/6.1.0/

Webnative

init : Permissions -> Request

๐Ÿš€ Start here

Check if we're authenticated, process any lobby query-parameters present in the URL, and initiate the user's filesystem if authenticated (can be disabled using initWithOptions).

See loadFileSystem if you want to load the user's filesystem yourself. NOTE, this only works on the main/ui thread, as it uses window.location.

See the README for an example.

initWithOptions : InitOptions -> Permissions -> Request

Initialise webnative, with options.

type alias InitOptions =
{ autoRemoveUrlParams : Bool
, loadFileSystem : Bool
}

Options for initWithOptions.

Setting autoRemoveUrlParams to True causes webnative to automatically remove the query parameters from the lobby.

Setting loadFileSystem to False disables the automatic loading of the filesystem during init.

defaultInitOptions : InitOptions

Default InitOptions.

initialise : Permissions -> Request

Alias for init.

initialize : Permissions -> Request

Alias for init.

Ports

Data flowing through the ports. See ๐Ÿš€ in the decodeResponse example on how to handle the result from init.

decodeResponse : (String -> Result String tag) -> Response -> DecodedResponse tag

Decode the result, the Response, from our Request. Connect this up with webnativeResponse subscription port.

subscriptions =
    Ports.webnativeResponse GotWebnativeResponse

And then in update use this function.

GotWebnativeResponse response ->
  case Webnative.decodeResponse tagFromString response of
    -----------------------------------------
    -- ๐Ÿš€
    -----------------------------------------
    Webnative ( Initialisation state ) ->
      if Webnative.isAuthenticated state then
        loadUserData
      else
        welcome


    -----------------------------------------
    -- ๐Ÿ’พ
    -----------------------------------------
    Wnfs ReadHelloTxt ( Utf8Content helloContents ) ->
      -- Do something with content from hello.txt


    Wnfs Mutation _ ->
      ( model
      , { tag = PointerUpdated }
          |> Wnfs.publish
          |> Ports.webnativeRequest
      )


    -----------------------------------------
    -- ๐Ÿฅต
    -----------------------------------------
    -- Do something with the errors,
    -- here we cast them to strings
    WebnativeError err -> Webnative.error err
    WnfsError err -> Wnfs.error err

See the README for the full example.

= Webnative Artifact
| WebnativeError Error
| Wnfs tag Artifact
| WnfsError Error

Request, or response, context.

= Initialisation State
| NoArtifact NoArtifact

Artifact we receive in the response.

= LoadedFileSystemManually
| RedirectingToLobby

Not really artifacts, but kind of. Part of the Artifact type.

type alias Request =
{ context : String
, tag : String
, method : String
, arguments : List Value
}

Request from webnative.

type alias Response =
{ context : String
, error : Maybe String
, tag : String
, method : String
, data : Value
}

Response from webnative.

type Error
= DecodingError String
| InvalidMethod String
| InsecureContext
| JavascriptError String
| UnsupportedBrowser

Possible errors.

error : Error -> String

Error message.

context : String

Request/Response context.

Authorisation

redirectToLobby : RedirectTo -> Permissions -> Request

Redirect to the authorisation lobby.

= CurrentUrl
| RedirectTo Url

Where the authorisation lobby should redirect to after authorisation.

type alias AppPermissions =
{ creator : String
, name : String
}

Application permissions.

{ private : BranchFileSystemPermissions
, public : BranchFileSystemPermissions
}

Filesystem permissions.

```elm
import Webnative.Path as Path


{ private =
    { directories = [ Path.directory [ "Audio", "Mixtapes" ] ]
    , files = [ Path.file [ "Audio", "Playlists", "Jazz.json" ] ]
    }
, public =
    { directories = []
    , files = []
    }
}
```
{ directories : List (Path Directory)
, files : List (Path File)
}

Filesystem permissions for a branch.

This is reused for the private and public permissions.

type alias Permissions =
{ app : Maybe AppPermissions
, fs : Maybe FileSystemPermissions
}

Permissions to ask the user. See AppPermissions and FileSystemPermissions on how to use these.

Authentication

Are we authenticated?

leave : Request

Leave the app and go the lobby. Removes all traces of the user. Use signOut instead if you don't want the redirect.

signOut : Request

Removes all traces of the user. Use leave instead if you want to go to the lobby immediately so the user can sign out there as well, if needed.

type State
= NotAuthorised
| AuthSucceeded AuthSucceededState
| AuthCancelled AuthCancelledState
| Continuation ContinuationState

Initialisation state, result from init.

type alias AuthSucceededState =
{ newUser : Bool
, throughLobby : Bool
, username : String
}

State attributes when auth has succeeded.

type alias AuthCancelledState =
{ cancellationReason : String
, throughLobby : Bool
}

State attributes when auth was cancelled.

type alias ContinuationState =
{ newUser : Bool
, throughLobby : Bool
, username : String
}

State attributes when continueing a session.

Filesystem

loadFileSystem : Permissions -> Request

Load in the filesystem manually.