265 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Cap'n Proto
		
	
	
	
	
	
			
		
		
	
	
			265 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Cap'n Proto
		
	
	
	
	
	
| @0xbc169f81a53d625c;
 | |
| 
 | |
| using Spk = import "/sandstorm/package.capnp";
 | |
| # This imports:
 | |
| #   $SANDSTORM_HOME/latest/usr/include/sandstorm/package.capnp
 | |
| # Check out that file to see the full, documented package definition format.
 | |
| 
 | |
| const pkgdef :Spk.PackageDefinition = (
 | |
|   # The package definition. Note that the spk tool looks specifically for the
 | |
|   # "pkgdef" constant.
 | |
| 
 | |
|   id = "8x12h6p0x0nrzk73hfq6zh2jxtgyzzcty7qsatkg7jfg2mzw5n90",
 | |
|   # Your app ID is actually its public key. The private key was placed in
 | |
|   # your keyring. All updates must be signed with the same key.
 | |
| 
 | |
|   manifest = (
 | |
|     # This manifest is included in your app package to tell Sandstorm
 | |
|     # about your app.
 | |
| 
 | |
|     appTitle = (defaultText = "HLedger Web"),
 | |
| 
 | |
|     appVersion = 3,  # Increment this for every release.
 | |
| 
 | |
|     appMarketingVersion = (defaultText = "1.9.2"),
 | |
|     # Human-readable representation of appVersion. Should match the way you
 | |
|     # identify versions of your app in documentation and marketing.
 | |
| 
 | |
|     actions = [
 | |
|       # Define your "new document" handlers here.
 | |
|       ( title = (defaultText = "New Ledger"),
 | |
|         command = .myCommand
 | |
|         # The command to run when starting for the first time. (".myCommand"
 | |
|         # is just a constant defined at the bottom of the file.)
 | |
|       )
 | |
|     ],
 | |
| 
 | |
|     continueCommand = .myCommand,
 | |
|     # This is the command called to start your app back up after it has been
 | |
|     # shut down for inactivity. Here we're using the same command as for
 | |
|     # starting a new instance, but you could use different commands for each
 | |
|     # case.
 | |
| 
 | |
|     metadata = (
 | |
|       # Data which is not needed specifically to execute the app, but is useful
 | |
|       # for purposes like marketing and display.  These fields are documented at
 | |
|       # https://docs.sandstorm.io/en/latest/developing/publishing-apps/#add-required-metadata
 | |
|       # and (in deeper detail) in the sandstorm source code, in the Metadata section of
 | |
|       # https://github.com/sandstorm-io/sandstorm/blob/master/src/sandstorm/package.capnp
 | |
|       icons = (
 | |
|         # Various icons to represent the app in various contexts.
 | |
|         appGrid = (svg = embed "appGrid.svg"),
 | |
|         grain = (svg = embed "grain.svg"),
 | |
|         market = (svg = embed "market.svg"),
 | |
|         #marketBig = (svg = embed "path/to/market-big-300x300.svg"),
 | |
|       ),
 | |
| 
 | |
|       website = "http://hledger.org",
 | |
|       # This should be the app's main website url.
 | |
| 
 | |
|       codeUrl = "https://github.com/simonmichael/hledger",
 | |
|       # URL of the app's source code repository, e.g. a GitHub URL.
 | |
|       # Required if you specify a license requiring redistributing code, but optional otherwise.
 | |
| 
 | |
|       license = (openSource = gpl3),
 | |
|       # The license this package is distributed under.  See
 | |
|       # https://docs.sandstorm.io/en/latest/developing/publishing-apps/#license
 | |
| 
 | |
|       categories = [office, productivity],
 | |
|       # A list of categories/genres to which this app belongs, sorted with best fit first.
 | |
|       # See the list of categories at
 | |
|       # https://docs.sandstorm.io/en/latest/developing/publishing-apps/#categories
 | |
| 
 | |
|       author = (
 | |
|         # Fields relating to the author of this app.
 | |
| 
 | |
|         contactEmail = "inbox@jacobweisz.com",
 | |
|         # Email address to contact for any issues with this app. This includes end-user support
 | |
|         # requests as well as app store administrator requests, so it is very important that this be a
 | |
|         # valid address with someone paying attention to it.
 | |
| 
 | |
|         pgpSignature = embed "pgp-signature",
 | |
|         # PGP signature attesting responsibility for the app ID. This is a binary-format detached
 | |
|         # signature of the following ASCII message (not including the quotes, no newlines, and
 | |
|         # replacing <app-id> with the standard base-32 text format of the app's ID):
 | |
|         #
 | |
|         # "I am the author of the Sandstorm.io app with the following ID: <app-id>"
 | |
|         #
 | |
|         # You can create a signature file using `gpg` like so:
 | |
|         #
 | |
|         #     echo -n "I am the author of the Sandstorm.io app with the following ID: <app-id>" | gpg --sign > pgp-signature
 | |
|         #
 | |
|         # Further details including how to set up GPG and how to use keybase.io can be found
 | |
|         # at https://docs.sandstorm.io/en/latest/developing/publishing-apps/#verify-your-identity
 | |
| 
 | |
|         upstreamAuthor = "HLedger Team",
 | |
|         # Name of the original primary author of this app, if it is different from the person who
 | |
|         # produced the Sandstorm package. Setting this implies that the author connected to the PGP
 | |
|         # signature only "packaged" the app for Sandstorm, rather than developing the app.
 | |
|         # Remove this line if you consider yourself as the author of the app.
 | |
|       ),
 | |
| 
 | |
|       pgpKeyring = embed "pgp-keyring",
 | |
|       # A keyring in GPG keyring format containing all public keys needed to verify PGP signatures in
 | |
|       # this manifest (as of this writing, there is only one: `author.pgpSignature`).
 | |
|       #
 | |
|       # To generate a keyring containing just your public key, do:
 | |
|       #
 | |
|       #     gpg --export <key-id> > keyring
 | |
|       #
 | |
|       # Where `<key-id>` is a PGP key ID or email address associated with the key.
 | |
| 
 | |
|       description = (defaultText = embed "description.md"),
 | |
|       # The app's description description in Github-flavored Markdown format, to be displayed e.g.
 | |
|       # in an app store. Note that the Markdown is not permitted to contain HTML nor image tags (but
 | |
|       # you can include a list of screenshots separately).
 | |
| 
 | |
|       shortDescription = (defaultText = "Web-based Accounting"),
 | |
|       # A very short (one-to-three words) description of what the app does. For example,
 | |
|       # "Document editor", or "Notetaking", or "Email client". This will be displayed under the app
 | |
|       # title in the grid view in the app market.
 | |
| 
 | |
|       screenshots = [
 | |
|         # Screenshots to use for marketing purposes.  Examples below.
 | |
|         # Sizes are given in device-independent pixels, so if you took these
 | |
|         # screenshots on a Retina-style high DPI screen, divide each dimension by two.
 | |
| 
 | |
|         (width = 1920, height = 1040, png = embed "screenshot1.png"),
 | |
|         (width = 1920, height = 1040, png = embed "screenshot2.png"),
 | |
|         (width = 1920, height = 1040, png = embed "screenshot3.png")
 | |
|       ],
 | |
|       changeLog = (defaultText = embed "changelog.md"),
 | |
|       # Documents the history of changes in Github-flavored markdown format (with the same restrictions
 | |
|       # as govern `description`). We recommend formatting this with an H1 heading for each version
 | |
|       # followed by a bullet list of changes.
 | |
|     ),
 | |
|   ),
 | |
| 
 | |
|   sourceMap = (
 | |
|     # Here we defined where to look for files to copy into your package. The
 | |
|     # `spk dev` command actually figures out what files your app needs
 | |
|     # automatically by running it on a FUSE filesystem. So, the mappings
 | |
|     # here are only to tell it where to find files that the app wants.
 | |
|     searchPath = [
 | |
|       ( sourcePath = "." ),  # Search this directory first.
 | |
|       ( sourcePath = "/",    # Then search the system root directory.
 | |
|         hidePaths = [ "home", "proc", "sys",
 | |
|                       "etc/passwd", "etc/hosts", "etc/host.conf",
 | |
|                       "etc/nsswitch.conf", "etc/resolv.conf" ]
 | |
|         # You probably don't want the app pulling files from these places,
 | |
|         # so we hide them. Note that /dev, /var, and /tmp are implicitly
 | |
|         # hidden because Sandstorm itself provides them.
 | |
|       )
 | |
|     ]
 | |
|   ),
 | |
| 
 | |
|   fileList = "sandstorm-files.list",
 | |
|   # `spk dev` will write a list of all the files your app uses to this file.
 | |
|   # You should review it later, before shipping your app.
 | |
| 
 | |
|   alwaysInclude = [],
 | |
|   # Fill this list with more names of files or directories that should be
 | |
|   # included in your package, even if not listed in sandstorm-files.list.
 | |
|   # Use this to force-include stuff that you know you need but which may
 | |
|   # not have been detected as a dependency during `spk dev`. If you list
 | |
|   # a directory here, its entire contents will be included recursively.
 | |
| 
 | |
|   bridgeConfig = (
 | |
|     # Used for integrating permissions and roles into the Sandstorm shell
 | |
|     # and for sandstorm-http-bridge to pass to your app.
 | |
|     # Uncomment this block and adjust the permissions and roles to make
 | |
|     # sense for your app.
 | |
|     # For more information, see high-level documentation at
 | |
|     # https://docs.sandstorm.io/en/latest/developing/auth/
 | |
|     # and advanced details in the "BridgeConfig" section of
 | |
|     # https://github.com/sandstorm-io/sandstorm/blob/master/src/sandstorm/package.capnp
 | |
|     viewInfo = (
 | |
|       # For details on the viewInfo field, consult "ViewInfo" in
 | |
|       # https://github.com/sandstorm-io/sandstorm/blob/master/src/sandstorm/grain.capnp
 | |
| 
 | |
|       permissions = [
 | |
|       # Permissions which a user may or may not possess.  A user's current
 | |
|       # permissions are passed to the app as a comma-separated list of `name`
 | |
|       # fields in the X-Sandstorm-Permissions header with each request.
 | |
|       #
 | |
|       # IMPORTANT: only ever append to this list!  Reordering or removing fields
 | |
|       # will change behavior and permissions for existing grains!  To deprecate a
 | |
|       # permission, or for more information, see "PermissionDef" in
 | |
|       # https://github.com/sandstorm-io/sandstorm/blob/master/src/sandstorm/grain.capnp
 | |
|         (
 | |
|           name = "view",
 | |
|           # Name of the permission, used as an identifier for the permission in cases where string
 | |
|           # names are preferred.  Used in sandstorm-http-bridge's X-Sandstorm-Permissions HTTP header.
 | |
| 
 | |
|           title = (defaultText = "view"),
 | |
|           # Display name of the permission, e.g. to display in a checklist of permissions
 | |
|           # that may be assigned when sharing.
 | |
| 
 | |
|           description = (defaultText = "grants ability to view the ledger"),
 | |
|           # Prose describing what this role means, suitable for a tool tip or similar help text.
 | |
|         ),
 | |
|         (
 | |
|           name = "add",
 | |
|           title = (defaultText = "add"),
 | |
|           description = (defaultText = "grants ability to append transactions to the ledger"),
 | |
|         ),
 | |
|         (
 | |
|           name = "manage",
 | |
|           title = (defaultText = "manage"),
 | |
|           description = (defaultText = "grants ability to modify or replace the entire ledger"),
 | |
|         ),
 | |
|       ],
 | |
|       roles = [
 | |
|         # Roles are logical collections of permissions.  For instance, your app may have
 | |
|         # a "viewer" role and an "editor" role
 | |
|         (
 | |
|           title = (defaultText = "manager"),
 | |
|           # Name of the role.  Shown in the Sandstorm UI to indicate which users have which roles.
 | |
| 
 | |
|           permissions  = [true, true, true],
 | |
|           # An array indicating which permissions this role carries.
 | |
|           # It should be the same length as the permissions array in
 | |
|           # viewInfo, and the order of the lists must match.
 | |
| 
 | |
|           verbPhrase = (defaultText = "has full access to the ledger"),
 | |
|           # Brief explanatory text to show in the sharing UI indicating
 | |
|           # what a user assigned this role will be able to do with the grain.
 | |
| 
 | |
|           description = (defaultText = "managers can modify the ledger in any way."),
 | |
|           # Prose describing what this role means, suitable for a tool tip or similar help text.
 | |
|         ),
 | |
|         (
 | |
|           title = (defaultText = "editor"),
 | |
|           permissions  = [true, true, false],
 | |
|           verbPhrase = (defaultText = "can append new transactions"),
 | |
|           description = (defaultText = "editors can view the ledger or append new transactions to it."),
 | |
|         ),
 | |
|         (
 | |
|           title = (defaultText = "viewer"),
 | |
|           permissions  = [true, false, false],
 | |
|           verbPhrase = (defaultText = "can view the ledger"),
 | |
|           description = (defaultText = "viewers can only view the ledger."),
 | |
|         ),
 | |
|       ],
 | |
|     ),
 | |
|     #apiPath = "/api",
 | |
|     # Apps can export an API to the world.  The API is to be used primarily by Javascript
 | |
|     # code and native apps, so it can't serve out regular HTML to browsers.  If a request
 | |
|     # comes in to your app's API, sandstorm-http-bridge will prefix the request's path with
 | |
|     # this string, if specified.
 | |
|   ),
 | |
| );
 | |
| 
 | |
| const myCommand :Spk.Manifest.Command = (
 | |
|   # Here we define the command used to start up your server.
 | |
|   argv = ["/sandstorm-http-bridge", "8000", "--", "/opt/app/.sandstorm/launcher.sh"],
 | |
|   environ = [
 | |
|     # Note that this defines the *entire* environment seen by your app.
 | |
|     (key = "PATH", value = "/usr/local/bin:/usr/bin:/bin"),
 | |
|     (key = "SANDSTORM", value = "1"),
 | |
|     # Export SANDSTORM=1 into the environment, so that apps running within Sandstorm
 | |
|     # can detect if $SANDSTORM="1" at runtime, switching UI and/or backend to use
 | |
|     # the app's Sandstorm-specific integration code.
 | |
|   ]
 | |
| );
 |