Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

ad4m-host

Package Overview
Dependencies
Maintainers
1
Versions
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ad4m-host

Self hosting ad4m service

  • 0.0.32
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
0
Maintainers
1
Weekly downloads
 
Created
Source

Ad4m Host

This is command-line program to host ad4m service and request to the service with build-in commands.

Usage

Dowload the latest program on the Release page, here take Mac os as example,

wget -O ad4m https://github.com/fluxsocial/ad4m-host/releases/download/v0.0.2/ad4m-macos-x64
chmod +x ./ad4m

Get help inforamtion for available commands,

./ad4m -h
./ad4m serve -h
./ad4m agent -h

Initialize the dependencies by coping the holochain binaries (Required),

# Initializes the ad4m-host with default config
./ad4m init

# Initalize ad4m-host with different environment using dataPath flag
./ad4m init --dataPath ad4m-host --networkBootstrapSeed ./custom_seed.json

# To override the environment you can use overrideConfig flag
./ad4m init --dataPath ad4m-host --networkBootstrapSeed ./custom_seed.json --overrideConfig

Run ad4m service with or without connecting to an existing running holochain process,

 # connect with existing running holochain process
./ad4m serve --connectHolochain 

# start its own holochain process (will use the default environment i.e ad4m)
./ad4m serve

# will start holochain process for this environment
./ad4m serve --dataPath environment_name

# Start server with only languageLanguage and ignore other languages
./ad4m serve --languageLanguageOnly

# Pass custom bootstrap languages & perspective
./ad4m serve --bootstrapLanguage ./bootstrap_language.json --bootstrapPerspective ./bootstrap_perspective.json

When running the AD4M executor for the very first time, we need to generate an agent (i.e. DID and keys) with:

./ad4m agent generate

After restart the ad4m service, it's usually necessary to check agent status and unlock the agent with passphrase,

./ad4m agent status
./ad4m agent unlock

Create an expression,

# show all the downloaded languages
./ad4m languages get --all

# install the note-ipfs language with its address
./ad4m languages get --address QmYVsrMpiFmV9S7bTWNAkUzSqjRJskQ8g4TWKKwKrHAPqL

# if got "not a trustedAgent error", try add a trusted agent with the language creator's did
./ad4m runtime addTrustedAgent --did "did:key:zQ3shfhvaHzE81hZqLorVNDmq971EpGPXq3nhyLF1JRP18LM3"

# create an expression with note-ipfs language, return the url of the expression
./ad4m expression create --content "This is a test note" --address QmYVsrMpiFmV9S7bTWNAkUzSqjRJskQ8g4TWKKwKrHAPqL

# get the expression with its url
./ad4m expression get --url "QmYVsrMpiFmV9S7bTWNAkUzSqjRJskQ8g4TWKKwKrHAPqL://QmSsCCtXMDAZXMpyiNLzwjGEU4hLmhG7fphidhEEodQ4Wy"

Publish a language,

# publish a template langauge by replacing the path and meta params. 
# you can also omit the path and meta params, and input them interactively.
# it should give the address of the language.
./ad4m languages publish --path "/Users/kaichaosun/github/holo/ad4m-languages/release/shortform/bundle.js" --meta '{"name":"shortform-expression","description":"Shortform expression for flux application","possibleTemplateParams":["uid","name"],"sourceCodeLink":"https://github.com/juntofoundation/ad4m-languages"}'

# check the metadata of the template language
./ad4m languages meta --address QmWN1LBR3Zzx3yE7mncf93BPna8RbwtkSrYxTETktfpUyJ

# publish a language by appling template data to a template language
# it should give the address of the templated language
./ad4m languages applyTemplateAndPublish --address QmWN1LBR3Zzx3yE7mncf93BPna8RbwtkSrYxTETktfpUyJ --templateData '{"uid":"123","name":"test-shortform-expression"}'

# check the metadata of the templated language
./ad4m languages meta --address QmX2e2MaN9ayWaoA4MRhjjVw72RqgxUh7v7SWNbU5Kebpq

Create a perspective, and turns it into a neighbourhood

# shall all perspectives
./ad4m perspective get --all

# add a new perspective
# it should give a random unique ID that is used to reference it
./ad4m perspective add --name "A new perspective"

# get a specific perspective
./ad4m perspective get --uuid "22bdcd2b-44c4-416b-a9b8-8db089a361b0"

# add link to a perspective
# link contains a source, target and optional predicate
# in this example, the source is root, target is the note-ipfs expression we just created
./ad4m perspective addLink --uuid "22bdcd2b-44c4-416b-a9b8-8db089a361b0" --link '{"source":"root","target":"QmYVsrMpiFmV9S7bTWNAkUzSqjRJskQ8g4TWKKwKrHAPqL://QmSsCCtXMDAZXMpyiNLzwjGEU4hLmhG7fphidhEEodQ4Wy"}'

# a perspective can be shared by publish it, aka turning it into a neighbourhood.
# we need a language to store links, here we use social-context link language by templating it.
# it should give the address of our link language.
./ad4m languages applyTemplateAndPublish --address QmbCKYo6fWgEP7PiqoYH1jKiJHWFCnGUmwxDfUUEjXQvXB --templateData '{"uid":"123","name":"test-social-context"}'

# check the metadata of our link language
./ad4m languages meta --address QmYHx1LzwWevEH2dkyEzF3c5ALCHc1PcyBHwukVUdBLFBU

# publish perspective into neighbourhood with perspective id and link language address
# it should give the url of the neighbourhood, and further used to join the neighbourhood by other users
./ad4m neighbourhood publishFromPerspective --uuid "22bdcd2b-44c4-416b-a9b8-8db089a361b0" --address "QmYHx1LzwWevEH2dkyEzF3c5ALCHc1PcyBHwukVUdBLFBU" --meta '{"links":[]}'

# another user can join a neighbourhood
# it should give the id of a new perspective
./ad4m neighbourhood joinFromUrl --url 'neighbourhood://QmQggyZvTNkPJQM8m3439kCse5ZRRDAdD7NDR64xv5gTjm'

# the link added to a neighbourhood will be synced to another user and available to query
# it should give the links which usually contains the expression url in target
./ad4m perspective queryLinks --uuid "ac9e5301-fbf0-4049-abf6-c26f0959d93e" --query "{}"

# query the expression via url
./ad4m expression get --url "QmYVsrMpiFmV9S7bTWNAkUzSqjRJskQ8g4TWKKwKrHAPqL://QmSsCCtXMDAZXMpyiNLzwjGEU4hLmhG7fphidhEEodQ4Wy"

Development

Install dependencies,

npm install

Prepare holochain binaries and bootstrap languages,

npm run prepare-dev

Local development without installing any binary,

npm run dev  # start ad4m service

To build the binary package,

npm run release-macos

Operate with GraphQL

A handly online GraphQL client, https://hoppscotch.io/graphql. You can also save the querys and import/export the collections.

You can also use this pre-exported collection.

Examples

query agent status,

query agentStatus {
  agentStatus {
    did
    didDocument
    error
    isInitialized
    isUnlocked
  }
}

unlock agent,

mutation agentUnlock($passphrase: String!) {
  agentUnlock(passphrase: $passphrase) {
    isInitialized
    isUnlocked
    did
    error
  }
}

variables,

{ "passphrase": "yourpassword" }

publish a language,

mutation languagePublish($languageMeta: LanguageMetaInput!, $languagePath: String!) {
  languagePublish(languageMeta: $languageMeta, languagePath: $languagePath) {
    name
    address
    author
    description
    possibleTemplateParams
    sourceCodeLink
    templateAppliedParams
    templateSourceLanguageAddress
    templated
  }
}

variables,

{ 
  "languageMeta": {
    "name": "shortform-expression",
    "description": "Shortform expression for flux application",
    "possibleTemplateParams": ["uid", "name"],
    "sourceCodeLink": "https://github.com/juntofoundation/ad4m-languages"
  },
  "languagePath": "your-language-path"
}

Keywords

FAQs

Package last updated on 04 Nov 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc