mirror of
https://github.com/fluencelabs/examples
synced 2025-04-25 02:32:16 +00:00
79 lines
2.6 KiB
Plaintext
79 lines
2.6 KiB
Plaintext
import "@fluencelabs/aqua-lib/builtin.aqua"
|
|
import "@fluencelabs/aqua-ipfs/ipfs.aqua"
|
|
import "process_files.aqua"
|
|
|
|
alias PeerId : string
|
|
alias CID : string
|
|
alias Multiaddr : string
|
|
alias Hash : string
|
|
alias ServiceID : string
|
|
|
|
service StringOp("op"):
|
|
-- function that wraps string in array
|
|
array(s: string) -> []string
|
|
|
|
-- Add module to node
|
|
func add_module(name: string, path: string) -> Hash:
|
|
config <- Dist.default_module_config(name)
|
|
module_hash <- Dist.add_module_from_vault(path, config)
|
|
<- module_hash
|
|
|
|
-- Add service blueprint to node
|
|
func add_blueprint(module_hash: Hash) -> string:
|
|
prefixed_hash <- Op.concat_strings("hash:", module_hash)
|
|
dependencies <- StringOp.array(prefixed_hash)
|
|
blueprint <- Dist.make_blueprint("process_files", dependencies)
|
|
blueprint_id <- Dist.add_blueprint(blueprint)
|
|
<- blueprint_id
|
|
|
|
-- Download single .wasm module from IPFS and create a service from it
|
|
func deploy_service(relay: PeerId, cid: CID, ipfs: Multiaddr, error: string, string -> ()) -> ?ServiceID:
|
|
service_id: *ServiceID
|
|
on relay:
|
|
-- Download .wasm from IPFS to node
|
|
get_result <- Ipfs.get_from(cid, ipfs)
|
|
if get_result.success:
|
|
module_hash <- add_module("process_files", get_result.path)
|
|
blueprint_id <- add_blueprint(module_hash)
|
|
service_id <- Srv.create(blueprint_id)
|
|
else:
|
|
co error("Ipfs.get_from failed", get_result.error)
|
|
|
|
<- service_id
|
|
|
|
-- Download file from IPFS, and write it's size to file in IPFS
|
|
func put_file_size(
|
|
relay: PeerId,
|
|
cid: CID,
|
|
ipfs: Multiaddr,
|
|
service_id: ServiceID,
|
|
logSize: u32 -> (),
|
|
error: string, string -> ()
|
|
) -> ?IpfsPutResult:
|
|
result: *IpfsPutResult
|
|
ProcessFiles service_id
|
|
on relay:
|
|
get <- Ipfs.get_from(cid, ipfs)
|
|
if get.success:
|
|
size <- ProcessFiles.file_size(get.path)
|
|
if size.success:
|
|
-- report file size in background
|
|
co logSize(size.size)
|
|
-- write file size to disk
|
|
write <- ProcessFiles.write_file_size(size.size)
|
|
if write.success:
|
|
-- upload file to ipfs
|
|
result <- Ipfs.put(write.path)
|
|
else:
|
|
co error("ProcessFiles.write_file_size failed", write.error)
|
|
else:
|
|
co error("ProcessFiles.file_size failed", size.error)
|
|
else:
|
|
co error("Ipfs.get_from failed", get.error)
|
|
<- result
|
|
|
|
func remove_service(relay: PeerId, service_id: ServiceID) -> bool:
|
|
on relay:
|
|
Srv.remove(service_id)
|
|
<- true
|