@blotout/qinto-cli 0.1.28 → 0.1.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -504,6 +504,16 @@ What a publish does, in order:
504
504
  Publishing installs nothing. Install the new version with `qinto app install` (below); the last line of the output
505
505
  prints that command with the version filled in.
506
506
 
507
+ **Source snapshot.** Every publish also uploads the app's source with the version: the text files in the app directory, without
508
+ what a `.gitignore` names (in the app directory, a folder below it, or the enclosing git repository), dot-prefixed folders and files (`.git`, `.qinto`, `.env`), `node_modules`, binary files, and symbolic links. The
509
+ owners and developers of the app's organization can read it in the Qinto platform. When you submit the version to the app store,
510
+ the Blotout reviewers can read it too. A source above 10 MiB is refused, and the error names the largest files so that you can
511
+ add them to `.gitignore`.
512
+
513
+ The snapshot is the record of the source a version was built from. A version without a source snapshot cannot be submitted to
514
+ the app store. A version that an older CLI published has none: [update the CLI](#stay-up-to-date), publish again, and submit
515
+ the new version.
516
+
507
517
  | Flag | What it does |
508
518
  | --- | --- |
509
519
  | `--bump <level>` | `patch` (default), `minor`, or `major`, from the highest ready version. |
@@ -593,6 +603,81 @@ serialized bytes, and one variable's values across every install of that app on
593
603
  manifest, the publish, the install, and the runtime envelope — is listed in
594
604
  [Qinto app limits](https://docs.blotout.io).
595
605
 
606
+ ## Install an app from the app store
607
+
608
+ The app store lists the apps that Blotout approved for every team. The `store` commands find an app there and install it on
609
+ one of your team's sites. They need a login and no developer organization.
610
+
611
+ ```sh
612
+ qinto store search consent # apps that match a word
613
+ qinto store show my-app # the store listing and its approved versions
614
+ qinto store install my-app --site example.com # the newest approved version
615
+ ```
616
+
617
+ To put your own app in the app store, publish a version with `qinto app publish`, then fill in the store listing and submit the
618
+ version in the Qinto platform. [Qinto app limits](https://docs.blotout.io) gives the listing limits, the submission rules, and
619
+ when a submission needs a review by a person.
620
+
621
+ ### Search — `qinto store search [query...]`
622
+
623
+ `search` lists the apps in the app store, sorted A to Z by name, 50 to a page. Without a query it lists every app. With a
624
+ query, an app matches when its name contains every word, or when its tagline and description together contain every word. A
625
+ query word matches a whole word and not the start of one, and common endings are ignored: `purchases` finds `purchase`, but
626
+ `cons` does not find `consent`.
627
+
628
+ Each row gives the slug, the name, the publisher, the categories, and the tagline. When more apps match, the last line prints the
629
+ `--cursor` value for the next page.
630
+
631
+ | Flag | What it does |
632
+ | --- | --- |
633
+ | `--category <category>` | List only the apps in one category: `advertising`, `analytics`, `consent_privacy`, `customer_data`, `email_sms`, `personalization`, `security`, or `developer_tools`. |
634
+ | `--limit <limit>` | Page size, 1 to 200 (default 50). |
635
+ | `--cursor <cursor>` | Start after the page that printed this cursor. |
636
+ | `--json` | Print the apps and the next cursor as JSON. |
637
+
638
+ ### Show — `qinto store show <slug>`
639
+
640
+ `show` prints one store listing: the name, the publisher, the tagline, the description, the features, and the facts the Qinto
641
+ platform reads from the newest approved version. The facts are the consent category, the Site API scopes, the event data, the flows, the
642
+ vendors, the AI tools, and the roles. A table of the approved versions follows, newest first, with at most 50 versions. `--json`
643
+ prints the listing as JSON.
644
+
645
+ `show` exits with an error for an app that is not in the app store, even when the app exists. An app is
646
+ not in the app store after its developer or Blotout removes it from the app store, while Blotout has the app suspended, and
647
+ when it has no approved version at or above the minimum version that Blotout set for the app.
648
+
649
+ ### Install — `qinto store install <slug> --site <site>`
650
+
651
+ `store install` puts an app from the app store on a site. It takes the flags of [`qinto app install`](#install--qinto-app-install-slug---site-site),
652
+ and it asks for the same acceptances. Without `--version` it installs the newest version the site may run.
653
+
654
+ ```sh
655
+ qinto store install my-app --site example.com # the newest approved version
656
+ qinto store install my-app --site example.com --version 1.4.1 # a specific approved version
657
+ ```
658
+
659
+ The first install of an app on a site records how the site got the app, and that record decides which versions the site may
660
+ run afterwards:
661
+
662
+ - When a member of the app's organization installs the app, the site may run every ready version.
663
+ - When the site manager installs through the developer's install link, the site may run every ready version.
664
+ - When the site gets the app from the app store, the site may run only approved versions.
665
+
666
+ The Qinto platform checks these in that order, and `qinto app install` and `qinto store install` go through the same check. A
667
+ member of the app's organization who runs `store install` therefore gets a site that may run every ready version. When the
668
+ manager of a store site later installs through the developer's install link, the site may run every ready version from then on.
669
+
670
+ The install fails when the site may not run the version, and the CLI prints the reason the Qinto platform gives. The Qinto
671
+ API returns status 409 with one of these error kinds:
672
+
673
+ | Error | Meaning |
674
+ | --- | --- |
675
+ | `version_not_approved` | The site got the app from the app store, and the named version is not approved. `qinto store show <slug>` lists the approved versions. |
676
+ | `version_below_minimum` | Blotout set a minimum version for the app, and the named version is below it. |
677
+ | `version_not_offered` | Blotout has suspended the app, and the named version was published during the suspension. |
678
+ | `app_suspended` | Blotout has suspended the app. No site can install it until Blotout lifts the suspension. |
679
+ | `app_taken_down` | Blotout has taken the app down. It takes no new install. |
680
+
596
681
  ## Built for humans and agents alike
597
682
 
598
683
  Every interactive path has a non-interactive equivalent. This is a standing rule for every current and future command: