@scribe-platform/cli 0.9.1 → 0.10.0
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 +1 -1
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +4 -2
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/content.d.ts.map +1 -1
- package/dist/commands/content.js +5 -1
- package/dist/commands/content.js.map +1 -1
- package/dist/commands/proof.d.ts.map +1 -1
- package/dist/commands/proof.js +6 -6
- package/dist/commands/proof.js.map +1 -1
- package/dist/commands/prospect.d.ts.map +1 -1
- package/dist/commands/prospect.js +4 -2
- package/dist/commands/prospect.js.map +1 -1
- package/dist/commands/request.d.ts.map +1 -1
- package/dist/commands/request.js +8 -4
- package/dist/commands/request.js.map +1 -1
- package/dist/commands/schema.js +1 -1
- package/dist/commands/schema.js.map +1 -1
- package/dist/commands/site.d.ts.map +1 -1
- package/dist/commands/site.js +5 -2
- package/dist/commands/site.js.map +1 -1
- package/dist/commands/submission.d.ts.map +1 -1
- package/dist/commands/submission.js +4 -1
- package/dist/commands/submission.js.map +1 -1
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/user.d.ts +11 -0
- package/dist/commands/user.d.ts.map +1 -0
- package/dist/commands/user.js +88 -0
- package/dist/commands/user.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/client.d.ts +37 -0
- package/dist/lib/client.d.ts.map +1 -1
- package/dist/lib/client.js +22 -7
- package/dist/lib/client.js.map +1 -1
- package/dist/lib/proof-folder.d.ts.map +1 -1
- package/dist/lib/proof-folder.js +10 -3
- package/dist/lib/proof-folder.js.map +1 -1
- package/dist/lib/proof-preview.d.ts.map +1 -1
- package/dist/lib/proof-preview.js.map +1 -1
- package/dist/lib/proof-push.d.ts.map +1 -1
- package/dist/lib/proof-push.js +6 -1
- package/dist/lib/proof-push.js.map +1 -1
- package/dist/lib/skill.js +1 -1
- package/package.json +2 -2
- package/skills/scribe-site-builder/SKILL.md +4 -3
- package/skills/scribe-site-builder/recipes/README.md +6 -4
- package/skills/scribe-site-builder/recipes/client-logins.md +74 -0
- package/skills/scribe-site-builder/recipes/domains.md +4 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proof-push.js","sourceRoot":"","sources":["../../src/lib/proof-push.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC1F,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAIxD;;;;;;;;GAQG;AAEH,uGAAuG;AACvG,MAAM,kBAAkB,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"proof-push.js","sourceRoot":"","sources":["../../src/lib/proof-push.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/skill.js
CHANGED
|
@@ -95,7 +95,7 @@ export function reportSkillInstall() {
|
|
|
95
95
|
console.log(`Skill: installed scribe-site-builder to ${tildify(skill.dest)}.`);
|
|
96
96
|
}
|
|
97
97
|
else if (skill.status === 'missing-source') {
|
|
98
|
-
console.warn(
|
|
98
|
+
console.warn('Skill: this install is missing its bundled copy of scribe-site-builder — tell Dave.');
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
101
|
//# sourceMappingURL=skill.js.map
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scribe-platform/cli",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Command-line interface for Scribe CMS
|
|
3
|
+
"version": "0.10.0",
|
|
4
|
+
"description": "Command-line interface for Scribe CMS \u2014 scaffold sites, edit content, and triage form submissions from the terminal",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Dave Weaver",
|
|
7
7
|
"homepage": "https://github.com/scribe-platform/scribe/tree/main/packages/cli#readme",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: scribe-site-builder
|
|
3
|
-
description: Guides building a website on Scribe CMS end to end — designing the Astro site freely against Scribe as its backend, editing the `.scribe.yml` schema, adding one or many forms, the local dev loop, pushing content, and deploying — using the `scribe` CLI and the recipes in `recipes/`. Also the reference for working an existing Scribe site (adding fields/collections, publishing content, triaging form submissions and inquiries, renaming, archiving, restoring or deleting a site), for taking a site live on a custom domain — checking whether a client has a domain, buying one, DNS/CNAME setup, GitHub Pages domain config, HTTPS — for the queue of requests clients have sent the agency (triaging, claiming, replying, closing), for the agency's prospect pipeline (logging calls, follow-ups, won/lost), and for proofs — sending a client work to review (logo boards, mockups, colour schemes), reading what they said, and sending the next version. Use whenever the user wants to build/create/start a new website or site with Scribe, add a form to a site, work on an existing Scribe site, publish/launch/go live with a site, point a site at a domain, set up or fix a custom domain or DNS for a Scribe site, work the inquiries a site has received, triage or reply to a client's request for work, log a call or follow-up with a prospect or client, wants to send a client something to look at or approve (logo ideas, mockups, options, a proof), asks what a client said about work they were sent, wants to do another round or version of something a client reviewed, or asks about the `scribe` CLI.
|
|
3
|
+
description: Guides building a website on Scribe CMS end to end — designing the Astro site freely against Scribe as its backend, editing the `.scribe.yml` schema, adding one or many forms, the local dev loop, pushing content, and deploying — using the `scribe` CLI and the recipes in `recipes/`. Also the reference for working an existing Scribe site (adding fields/collections, publishing content, triaging form submissions and inquiries, renaming, archiving, restoring or deleting a site), for taking a site live on a custom domain — checking whether a client has a domain, buying one, DNS/CNAME setup, GitHub Pages domain config, HTTPS — for the queue of requests clients have sent the agency (triaging, claiming, replying, closing), for the agency's prospect pipeline (logging calls, follow-ups, won/lost), and for proofs — sending a client work to review (logo boards, mockups, colour schemes), reading what they said, and sending the next version. Use whenever the user wants to build/create/start a new website or site with Scribe, add a form to a site, work on an existing Scribe site, publish/launch/go live with a site, point a site at a domain, set up or fix a custom domain or DNS for a Scribe site, work the inquiries a site has received, triage or reply to a client's request for work, log a call or follow-up with a prospect or client, wants to send a client something to look at or approve (logo ideas, mockups, options, a proof), asks what a client said about work they were sent, wants to do another round or version of something a client reviewed, wants to give a client a login or sign-in for their own site, set someone up to edit their own content, re-send or fix a sign-in link that expired or didn't arrive, or asks about the `scribe` CLI.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Building a site with Scribe
|
|
@@ -79,6 +79,7 @@ instead of reading all of them:
|
|
|
79
79
|
| [`recipes/requests.md`](./recipes/requests.md) | working the queue of jobs clients have asked the agency for |
|
|
80
80
|
| [`recipes/prospects.md`](./recipes/prospects.md) | logging calls and follow-ups on prospects (not site-building) |
|
|
81
81
|
| [`recipes/proofs.md`](./recipes/proofs.md) | sending a client work to review — logo boards, mockups, options — and working the rounds |
|
|
82
|
+
| [`recipes/client-logins.md`](./recipes/client-logins.md) | giving a client's own people a sign-in, and fixing a link that expired or never arrived |
|
|
82
83
|
|
|
83
84
|
[`recipes/README.md`](./recipes/README.md) lists the five things that are a hard
|
|
84
85
|
contract (because Scribe writes into the repo) as opposed to advice.
|
|
@@ -384,8 +385,8 @@ scribe request status <id> <open|in-progress|waiting-on-you|done|cancelled>
|
|
|
384
385
|
lossless, with each submission's events nested under it.
|
|
385
386
|
- `submission delete` is permanent, cascades the submission's history, and needs a
|
|
386
387
|
**staff** role — a site user's API key gets a 403. It prompts for the id unless
|
|
387
|
-
`--yes` is passed.
|
|
388
|
-
|
|
388
|
+
`--yes` is passed. Staff also have a **Delete** button on a submission's page in the
|
|
389
|
+
admin app (site users don't); either way, confirm with Ashley before deleting.
|
|
389
390
|
- **`scribe request` is the other queue, and the opposite direction.** A submission is
|
|
390
391
|
a Visitor contacting the *client*; a Request is the **client contacting the agency**
|
|
391
392
|
to ask for work. One cross-site queue, staff-only, nothing in any repo. Three things
|
|
@@ -20,11 +20,13 @@ generated config to keep in sync.
|
|
|
20
20
|
| [`requests.md`](./requests.md) | working the queue of jobs clients have asked the agency for |
|
|
21
21
|
| [`prospects.md`](./prospects.md) | recording and nurturing prospects in the calling pipeline |
|
|
22
22
|
| [`proofs.md`](./proofs.md) | sending a client work to review (logo boards, mockups) and working the rounds |
|
|
23
|
+
| [`client-logins.md`](./client-logins.md) | giving a client's own people a sign-in, and fixing a link that didn't work |
|
|
23
24
|
|
|
24
|
-
`requests.md`, `prospects.md` and `
|
|
25
|
-
about the agency's own work (its queue, its sales pipeline,
|
|
26
|
-
sends clients to review
|
|
27
|
-
here because the `scribe` CLI is the interface
|
|
25
|
+
`requests.md`, `prospects.md`, `proofs.md` and `client-logins.md` are the odd
|
|
26
|
+
ones out — they're about the agency's own work (its queue, its sales pipeline,
|
|
27
|
+
the work it sends clients to review, and who can sign in) rather than anything
|
|
28
|
+
in a Site's repo, and they live here because the `scribe` CLI is the interface
|
|
29
|
+
for all of it.
|
|
28
30
|
|
|
29
31
|
## The part that isn't advice
|
|
30
32
|
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Recipe: client logins
|
|
2
|
+
|
|
3
|
+
> **The commands below are yours to run, not hers to read.** If she's asking
|
|
4
|
+
> what this is or how to do it, answer it the way *Who you're talking to* in
|
|
5
|
+
> [`../SKILL.md`](../SKILL.md) says to: what it is, what she'd say to get it,
|
|
6
|
+
> what's her call, and an offer to do it now.
|
|
7
|
+
|
|
8
|
+
Giving a Client's own people a sign-in, so they can edit their Site's content
|
|
9
|
+
and work their own inquiries. Her guide for this is *Client logins*.
|
|
10
|
+
|
|
11
|
+
## 1. The rule that matters
|
|
12
|
+
|
|
13
|
+
**No password is ever created, shown, or sent.** Creating a Site user mints a
|
|
14
|
+
set-your-password **link**; the person redeems it and chooses their own. There
|
|
15
|
+
is no path where Ashley reads a credential to a client, and there should not
|
|
16
|
+
be one.
|
|
17
|
+
|
|
18
|
+
If she asks for "his password", that is the one request to answer with the
|
|
19
|
+
thing rather than the literal ask: she wants him able to sign in, and a fresh
|
|
20
|
+
link is how. Say so plainly — it takes one sentence and it is the whole point
|
|
21
|
+
of the design.
|
|
22
|
+
|
|
23
|
+
## 2. The commands
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
scribe user list <site>
|
|
27
|
+
|
|
28
|
+
scribe user add <site> --name "Mark Pawling" --email mark@pawlingmasonry.com
|
|
29
|
+
|
|
30
|
+
scribe user invite <site> mark@pawlingmasonry.com # a fresh link
|
|
31
|
+
scribe user invite <site> mark@pawlingmasonry.com --send-email
|
|
32
|
+
|
|
33
|
+
scribe user extend <site> mark@pawlingmasonry.com # revive the link he already has
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
`add` creates the account and prints a link. `invite` issues another link for
|
|
37
|
+
somebody who already has an account. Both take `--json`.
|
|
38
|
+
|
|
39
|
+
**`--send-email` is opt-in, and that is deliberate — never add it unless she
|
|
40
|
+
asked.** Everything else here is reversible; emailing a real client is not. If
|
|
41
|
+
she hasn't said how she wants it delivered, hand her the link and ask.
|
|
42
|
+
|
|
43
|
+
## 3. What to tell her when a link doesn't work
|
|
44
|
+
|
|
45
|
+
Three failures, three different answers, and getting them the right way round
|
|
46
|
+
saves a phone call:
|
|
47
|
+
|
|
48
|
+
| She says | What happened | What to do |
|
|
49
|
+
|---|---|---|
|
|
50
|
+
| "He never got the email" | Spam, most likely | Give her the link to text. **Any link already sent still works** — a new one does not cancel it |
|
|
51
|
+
| "His link expired" | Past 7 days | `scribe user extend` — the link already in his messages starts working again, so nothing has to be re-sent |
|
|
52
|
+
| "It says already used" | He has a password | He needs **Forgot your password?** on the sign-in page. `extend` reports 0 here, which is the same answer |
|
|
53
|
+
|
|
54
|
+
Extending is the one worth reaching for first when the link is already out
|
|
55
|
+
there: a new link means she has to deliver it again, an extension doesn't.
|
|
56
|
+
|
|
57
|
+
## 4. Why several live links is fine
|
|
58
|
+
|
|
59
|
+
Issuing an invite does **not** revoke earlier ones. The raw token only exists
|
|
60
|
+
at the moment it is created — everything stored is a bcrypt hash — so a link
|
|
61
|
+
she has already texted can never be shown again, and superseding it would
|
|
62
|
+
silently strand it.
|
|
63
|
+
|
|
64
|
+
Redeeming any one link burns all the others for that person, so a spare can
|
|
65
|
+
never set the password a second time. That property is what makes multiple live
|
|
66
|
+
links safe, and it is worth not breaking.
|
|
67
|
+
|
|
68
|
+
## 5. Scope
|
|
69
|
+
|
|
70
|
+
A Site user sees their own Site and nothing else — never another Client, never
|
|
71
|
+
the agency's own pages. One person needing access to **two** Clients' Sites is
|
|
72
|
+
not this recipe: it crosses RFC 0006's client-group invariant, `grantSiteAccess`
|
|
73
|
+
will refuse it, and it is a conversation with Dave rather than a command to
|
|
74
|
+
find.
|
|
@@ -111,7 +111,10 @@ certificate, and promote will refuse with a `cloudflare-proxied` message.
|
|
|
111
111
|
`www` is not automatic. If a bare domain is the target and the client also wants
|
|
112
112
|
`www.example.com` to work, add a `www` CNAME → `<org>.github.io` at the
|
|
113
113
|
registrar; GitHub then redirects it to the apex on its own. Nothing in Scribe
|
|
114
|
-
needs to change for that.
|
|
114
|
+
needs to change for that. Promote (and `--dns-only`) checks it for a bare
|
|
115
|
+
domain and prints a `!` warning naming the record to add if `www` is missing
|
|
116
|
+
or still answered by a registrar's parking wildcard. The site is live either
|
|
117
|
+
way; add the record, and `www` works once DNS catches up — no re-run needed.
|
|
115
118
|
|
|
116
119
|
## Re-running is the fix
|
|
117
120
|
|