diff --git a/.gitignore b/.gitignore index 1951ebb..74b9dd6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -hello-world.s9pk +robosats.s9pk image.tar scripts/*.js .DS_Store diff --git a/Dockerfile b/Dockerfile index f5925f7..22e2329 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,14 @@ -FROM start9/hello-world +FROM recksato/robosats-client +RUN apt-get update && apt-get install wget curl sudo bash tini -y \ + && wget https://github.com/mikefarah/yq/releases/download/v4.25.1/yq_linux_arm.tar.gz -O - |\ + tar xz && mv yq_linux_arm /usr/bin/yq -RUN apk add --no-cache curl && \ - rm -f /var/cache/apk/* +ENV APP_HOST robosats.embassy +ENV APP_PORT 12596 +ENV TOR_PROXY_IP embassy +ENV TOR_PROXY_PORT 9050 ADD ./docker_entrypoint.sh /usr/local/bin/docker_entrypoint.sh -RUN chmod a+x /usr/local/bin/docker_entrypoint.sh +ADD check-web.sh /usr/local/bin/check-web.sh +RUN chmod a+x /usr/local/bin/*.sh +RUN chmod a+x *.sh diff --git a/Makefile b/Makefile index 2a27443..ac9e765 100644 --- a/Makefile +++ b/Makefile @@ -10,7 +10,7 @@ all: verify verify: $(PKG_ID).s9pk embassy-sdk verify s9pk $(PKG_ID).s9pk -install: +install: all embassy-cli package install $(PKG_ID).s9pk clean: @@ -24,5 +24,5 @@ scripts/embassy.js: $(TS_FILES) image.tar: Dockerfile docker_entrypoint.sh docker buildx build --tag start9/$(PKG_ID)/main:$(PKG_VERSION) --platform=linux/arm64 -o type=docker,dest=image.tar . -$(PKG_ID).s9pk: manifest.yaml instructions.md icon.png LICENSE scripts/embassy.js image.tar +$(PKG_ID).s9pk: check-web.sh manifest.yaml instructions.md icon.png LICENSE scripts/embassy.js image.tar embassy-sdk pack diff --git a/README.md b/README.md index 179a0cd..cc81bfc 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# Wrapper for hello-world +# Wrapper for RoboSats -`hello-world` is a simple, minimal project to serve as a template for creating an app for the Embassy. Learn more about service packaging in [Developer Docs](https://start9.com/latest/developer-docs/). +RoboSats is a simple and private bitcoin exchange ## Dependencies @@ -54,15 +54,15 @@ cd embassy-os/backend/ ./install-sdk.sh embassy-sdk init ``` -Now you are ready to build your **hello-world** service +Now you are ready to build your **robosats** service ## Cloning Clone the project locally. ``` -git clone https://github.com/Start9Labs/hello-world-wrapper.git -cd hello-world-wrapper +git clone https://github.com/Start9Labs/robosats-wrapper.git +cd robosats-wrapper ``` ## Building @@ -81,9 +81,9 @@ Run the following commands to determine successful install: ``` embassy-cli auth login #Enter your embassy password -embassy-cli --host https://embassy-q1w2e3r4.local package install hello-world.s9pk +embassy-cli --host https://embassy-q1w2e3r4.local package install robosats.s9pk ``` -**Tip:** You can also install the hello-world.s9pk using **Sideload Service** under the **Embassy > SETTINGS** section. +**Tip:** You can also install the robosats.s9pk using **Sideload Service** under the **Embassy > SETTINGS** section. ## Verify Install Go to your Embassy Services page, select **Hello World**, configure and start the service. diff --git a/check-web.sh b/check-web.sh new file mode 100644 index 0000000..1a39721 --- /dev/null +++ b/check-web.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +DURATION=$(/dev/null + WEB_RES=$? + if [ $WEB_RES != 0 ]; then + echo "RoboSats UI is unreachable, please wait" >&2 + exit 61 + fi +fi \ No newline at end of file diff --git a/docker_entrypoint.sh b/docker_entrypoint.sh index aab61f3..cccd657 100755 --- a/docker_entrypoint.sh +++ b/docker_entrypoint.sh @@ -1,3 +1,6 @@ -#!/bin/sh +#!/bin/bash -exec tini hello-world +set -ea + +echo "Starting RoboSats..." +exec tini -s ./robosats-client.sh diff --git a/icon.png b/icon.png index 15d4ec4..5f1e931 100644 Binary files a/icon.png and b/icon.png differ diff --git a/instructions.md b/instructions.md index c636962..8208df6 100644 --- a/instructions.md +++ b/instructions.md @@ -1,4 +1,4 @@ -# Instructions for Hello World +# Instructions for RoboSats Instructions go here. These appear to the user in the UI on the Service page under **Instructions**. diff --git a/manifest.yaml b/manifest.yaml index 2d27d7a..408d546 100644 --- a/manifest.yaml +++ b/manifest.yaml @@ -1,32 +1,32 @@ # Example written in yaml (toml and json are also acceptable) # The package identifier used by the OS. This must be unique amongst all other known packages -id: hello-world +id: robosats # A human readable service title -title: "Hello World" +title: "RoboSats" # Service version - accepts up to four digits, where the last confirms to revisions necessary for EmbassyOS - see documentation: https://github.com/Start9Labs/emver-rs. This value will change with each release of the service. -version: 1.0.0.0 +version: 0.1.0 # Release notes for the update - can be a string, paragraph or URL -release-notes: "Revamped for EmabssyOS 0.3.2" +release-notes: "Initial Release for EmabssyOS" # The type of license for the project. Include the LICENSE in the root of the project directory. A license is required for a Start9 package. license: mit # The Start9 wrapper repository URL for the package. This repo contains the manifest file (this), any scripts necessary for configuration, backups, actions, or health checks (more below). This key must exist. But could be embedded into the source repository. -wrapper-repo: "https://github.com/Start9Labs/hello-world-wrapper" +wrapper-repo: "https://github.com/Start9Labs/robosats-wrapper" # The original project repository URL. There is no upstream repo in this example -upstream-repo: "https://github.com/Start9Labs/hello-world" +upstream-repo: "https://github.com/Reckless-Satoshi/robosats" # URL to the support site / channel for the project. This key can be omitted if none exists, or it can link to the original project repository issues. -support-site: "https://docs.start9.com/" +support-site: "https://github.com/Reckless-Satoshi/robosats/issues" # URL to the marketing site for the project. This key can be omitted if none exists, or it can link to the original project repository. -marketing-site: "https://start9.com/" +marketing-site: "https://learn.robosats.com/" # The series of commands to build the project into an s9pk for arm64/v8. In this case we are using a Makefile with the simple build command "make". build: ["make"] # Human readable descriptors for the service. These are used throughout the EmbassyOS user interface, primarily in the marketplace. description: # This is the first description visible to the user in the marketplace. - short: Example service + short: A simple and private bitcoin exchange # This description will display with additional details in the service's individual marketplace page long: | - Hello World is a bare-bones service that launches a web interface to say "Hello World", and nothing more. + RoboSats is a simple and private way to exchange bitcoin for national currencies. Robosats simplifies the peer-to-peer user experience and uses lightning hold invoices to minimize custody and trust requirements. The deterministically generated avatars help users stick to best privacy practices. # These assets are static files necessary for packaging the service for Start9 (into an s9pk). Each value is a path to the specified asset. If an asset is missing from this list, or otherwise denoted, it will be defaulted to the values denoted below. assets: # Default = LICENSE.md @@ -52,8 +52,21 @@ main: # Specifies where on the service's file system its persistence directory should be mounted prior to service startup main: /root # Health checks -health-checks: {} -config: ~ +health-checks: + main: + name: Web Interface + success-message: The RoboSats UI is ready to visit in a web browser + type: docker + image: main + entrypoint: check-web.sh + args: [] + io-format: json + inject: true +config: + get: + type: script + set: + type: script properties: ~ # type: script # This denotes any data, asset, or pointer volumes that should be connected when the "docker run" command is invoked @@ -72,12 +85,8 @@ interfaces: tor-config: # Port mappings are from the external port to the internal container port port-mapping: - 80: "80" + 80: "12596" # Port mappings are from the external port to the internal container port - lan-config: - 443: - ssl: true - internal: 80 # Denotes if the service has a user interface to display ui: true # Denotes the protocol specifications used by this interface @@ -85,6 +94,9 @@ interfaces: - tcp - http dependencies: {} +alerts: + start: | + ATTENTION: You must have a Tor supported browser to use this service. # Specifies how backups should be run for this service. The default EmbassyOS provided option is to use the duplicity backup library on a system image (compat) backup: create: diff --git a/scripts/procedures/getConfig.ts b/scripts/procedures/getConfig.ts index d90ab5d..6251614 100644 --- a/scripts/procedures/getConfig.ts +++ b/scripts/procedures/getConfig.ts @@ -2,4 +2,31 @@ import { compat, types as T } from "../deps.ts"; -export const getConfig: T.ExpectedExports.getConfig = compat.getConfig({}); +export const getConfig: T.ExpectedExports.getConfig = compat.getConfig({ + "tor-address": { + "name": "Tor Address", + "description": "The Tor address of the network interface", + "type": "pointer", + "subtype": "package", + "package-id": "robosats", + "target": "tor-address", + "interface": "main", + }, + "lan-address": { + "name": "LAN Address", + "description": "The LAN address of the network interface", + "type": "pointer", + "subtype": "package", + "package-id": "robosats", + "target": "lan-address", + "interface": "main", + }, + "rs-hash": { + "type": "string", + "name": "Robosats Unique Hash", + "description": "TBD", + "nullable": true, + "copyable": true, + "masked": false, + } +}); diff --git a/scripts/procedures/migrations.ts b/scripts/procedures/migrations.ts index df6356e..5986c61 100644 --- a/scripts/procedures/migrations.ts +++ b/scripts/procedures/migrations.ts @@ -1,4 +1,4 @@ import { compat, types as T } from "../deps.ts"; export const migration: T.ExpectedExports.migration = compat.migrations - .fromMapping({}, "1.0.0.0" ); + .fromMapping({}, "0.1.0" );