@mediamonks/canopy-cli 0.7.27 → 0.7.28
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/dist/docs/cli-index.md +1 -1
- package/dist/docs/getting-started.md +1 -1
- package/dist/docs/platform-egress.md +25 -0
- package/dist/{docs-CuS9nIXm.mjs → docs-DMFMPnxG.mjs} +1 -1
- package/dist/{feedback-DormOsQa.mjs → feedback-OMAkwHpR.mjs} +1 -1
- package/dist/index.mjs +5 -5
- package/dist/{package-CsmBH_fN.mjs → package-BL6hRqtr.mjs} +1 -1
- package/dist/skill/canopy/SKILL.md +1 -1
- package/dist/{skill-DX18WOap.mjs → skill-C83Za5BU.mjs} +1 -1
- package/dist/templates/spa/.github/workflows/canopy-deploy.yml +3 -3
- package/dist/templates/worker/.github/workflows/canopy-deploy.yml +3 -3
- package/dist/{upgrade-PfdH0NPe.mjs → upgrade-BjQguwG6.mjs} +1 -1
- package/package.json +1 -1
package/dist/docs/cli-index.md
CHANGED
|
@@ -7,7 +7,7 @@ Everything on Canopy is driven by one command-line tool: `canopy`. It scaffolds
|
|
|
7
7
|
|
|
8
8
|
## Install
|
|
9
9
|
|
|
10
|
-
The CLI is published on npm as `@mediamonks/canopy-cli`. You need Node.js
|
|
10
|
+
The CLI is published on npm as `@mediamonks/canopy-cli`. You need Node.js 24 or newer; then install it globally:
|
|
11
11
|
|
|
12
12
|
```bash
|
|
13
13
|
npm install -g @mediamonks/canopy-cli
|
|
@@ -24,7 +24,7 @@ Confirm it's on your PATH:
|
|
|
24
24
|
canopy --version
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
If `npm` isn't available, install Node.js
|
|
27
|
+
If `npm` isn't available, install Node.js 24+ first (https://nodejs.org), then
|
|
28
28
|
re-run the install.
|
|
29
29
|
|
|
30
30
|
## 2. Sign in
|
|
@@ -112,6 +112,31 @@ Switching back is one command (`canopy egress mode allowlist`), and the
|
|
|
112
112
|
dashboard offers to **seed the allowlist from the observed hosts** so
|
|
113
113
|
tightening up later doesn't break the app.
|
|
114
114
|
|
|
115
|
+
## Allowlisting Canopy on the other side
|
|
116
|
+
|
|
117
|
+
Some external services only accept calls from IP addresses you register with
|
|
118
|
+
them first — a partner API, a corporate database, a payment provider's
|
|
119
|
+
allowlist. Projects hosted on **Google Cloud** (the `gcp-pilot` site,
|
|
120
|
+
`canopy.monks.zone`) make every outbound request from a fixed pair of
|
|
121
|
+
addresses, so you can hand them over:
|
|
122
|
+
|
|
123
|
+
| Address |
|
|
124
|
+
| ---------------- |
|
|
125
|
+
| `34.187.107.103` |
|
|
126
|
+
| `34.158.168.43` |
|
|
127
|
+
|
|
128
|
+
Register **both**. Traffic may leave from either one, and the second gives the
|
|
129
|
+
platform room to grow without asking you to update your allowlist. These
|
|
130
|
+
addresses are shared by every project on that site, so registering them lets
|
|
131
|
+
any Canopy project on Google Cloud reach the service — the other service's own
|
|
132
|
+
authentication (API keys, tokens) still decides who gets in.
|
|
133
|
+
|
|
134
|
+
The addresses are a platform commitment: they will not change without notice
|
|
135
|
+
and a migration period. Projects hosted on Cloudflare have **no** fixed
|
|
136
|
+
outbound address (requests leave from Cloudflare's shared edge), so if a
|
|
137
|
+
service you depend on insists on IP allowlisting, run that project on the
|
|
138
|
+
Google Cloud site.
|
|
139
|
+
|
|
115
140
|
## The outbound traffic log
|
|
116
141
|
|
|
117
142
|
In both modes, the platform keeps a per-project log of the hosts the worker
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as version } from "./package-
|
|
1
|
+
import { t as version } from "./package-BL6hRqtr.mjs";
|
|
2
2
|
import { n as siteConfig } from "./site-DM2J10CB.mjs";
|
|
3
3
|
import { i as latestKnownVersion, r as compareSemver } from "./version-check-CcsA1QjI.mjs";
|
|
4
4
|
import { r as reportErrors } from "./ui-DR-siu2S.mjs";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as version } from "./package-
|
|
1
|
+
import { t as version } from "./package-BL6hRqtr.mjs";
|
|
2
2
|
import { a as projectDirArgs, c as resolveProject, d as tryResolveProject, n as siteConfig, u as tryReadCanopyJson } from "./site-DM2J10CB.mjs";
|
|
3
3
|
import { c as apiDownload, l as apiRequest, r as reportErrors, t as formatDateTime, u as apiUpload } from "./ui-DR-siu2S.mjs";
|
|
4
4
|
import { defineCommand } from "citty";
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { t as version } from "./package-
|
|
2
|
+
import { t as version } from "./package-BL6hRqtr.mjs";
|
|
3
3
|
import { r as siteHeaderLine, t as setInvocationProfile } from "./site-DM2J10CB.mjs";
|
|
4
4
|
import { a as notifyOfUpdate, o as runRefresh } from "./version-check-CcsA1QjI.mjs";
|
|
5
5
|
import { defineCommand, runMain } from "citty";
|
|
@@ -77,13 +77,13 @@ const main = defineCommand({
|
|
|
77
77
|
egress: () => import("./egress-Cn-P46O3.mjs").then((m) => m.egressCommand),
|
|
78
78
|
secrets: () => import("./secrets-BD3DaTih.mjs").then((m) => m.secretsCommand),
|
|
79
79
|
schedule: () => import("./schedule-Buu71RWQ.mjs").then((m) => m.scheduleCommand),
|
|
80
|
-
feedback: () => import("./feedback-
|
|
80
|
+
feedback: () => import("./feedback-OMAkwHpR.mjs").then((m) => m.feedbackCommand),
|
|
81
81
|
db: () => import("./db-DVMwCLlU.mjs").then((m) => m.dbCommand),
|
|
82
82
|
usage: () => import("./usage-81JSiWIx.mjs").then((m) => m.usageCommand),
|
|
83
83
|
open: () => import("./open-rS1ARzOy.mjs").then((m) => m.openCommand),
|
|
84
|
-
docs: () => import("./docs-
|
|
85
|
-
skill: () => import("./skill-
|
|
86
|
-
upgrade: () => import("./upgrade-
|
|
84
|
+
docs: () => import("./docs-DMFMPnxG.mjs").then((m) => m.docsCommand),
|
|
85
|
+
skill: () => import("./skill-C83Za5BU.mjs").then((m) => m.skillCommand),
|
|
86
|
+
upgrade: () => import("./upgrade-BjQguwG6.mjs").then((m) => m.upgradeCommand),
|
|
87
87
|
logs: () => import("./logs-CfDINw7U.mjs").then((m) => m.logsCommand)
|
|
88
88
|
}
|
|
89
89
|
});
|
|
@@ -30,7 +30,7 @@ canopy whoami # is there a valid login?
|
|
|
30
30
|
npm install -g @mediamonks/canopy-cli
|
|
31
31
|
```
|
|
32
32
|
|
|
33
|
-
(Needs Node.js
|
|
33
|
+
(Needs Node.js 24+. If `npm` is missing, tell the user to install Node first.)
|
|
34
34
|
|
|
35
35
|
- **`canopy whoami` says not logged in / expired** → run:
|
|
36
36
|
```bash
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as version } from "./package-
|
|
1
|
+
import { t as version } from "./package-BL6hRqtr.mjs";
|
|
2
2
|
import { r as reportErrors } from "./ui-DR-siu2S.mjs";
|
|
3
3
|
import { defineCommand } from "citty";
|
|
4
4
|
import { cpSync, existsSync, mkdirSync, rmSync, symlinkSync, writeFileSync } from "node:fs";
|
|
@@ -18,10 +18,10 @@ jobs:
|
|
|
18
18
|
env:
|
|
19
19
|
CANOPY_DEPLOY_TOKEN: ${{ secrets.CANOPY_DEPLOY_TOKEN }}
|
|
20
20
|
steps:
|
|
21
|
-
- uses: actions/checkout@
|
|
22
|
-
- uses: actions/setup-node@
|
|
21
|
+
- uses: actions/checkout@v7
|
|
22
|
+
- uses: actions/setup-node@v7
|
|
23
23
|
with:
|
|
24
|
-
node-version:
|
|
24
|
+
node-version: 24
|
|
25
25
|
- name: Install dependencies
|
|
26
26
|
if: env.CANOPY_DEPLOY_TOKEN != ''
|
|
27
27
|
run: |
|
|
@@ -18,10 +18,10 @@ jobs:
|
|
|
18
18
|
env:
|
|
19
19
|
CANOPY_DEPLOY_TOKEN: ${{ secrets.CANOPY_DEPLOY_TOKEN }}
|
|
20
20
|
steps:
|
|
21
|
-
- uses: actions/checkout@
|
|
22
|
-
- uses: actions/setup-node@
|
|
21
|
+
- uses: actions/checkout@v7
|
|
22
|
+
- uses: actions/setup-node@v7
|
|
23
23
|
with:
|
|
24
|
-
node-version:
|
|
24
|
+
node-version: 24
|
|
25
25
|
- name: Install dependencies
|
|
26
26
|
if: env.CANOPY_DEPLOY_TOKEN != ''
|
|
27
27
|
run: |
|
|
@@ -112,7 +112,7 @@ const upgradeCommand = defineCommand({
|
|
|
112
112
|
const spec = `${PACKAGE_NAME}@${args.version ?? "latest"}`;
|
|
113
113
|
const command = pmCommand(pm);
|
|
114
114
|
const cmd = installArgs(pm, spec);
|
|
115
|
-
const { skillInstalled } = await import("./skill-
|
|
115
|
+
const { skillInstalled } = await import("./skill-C83Za5BU.mjs");
|
|
116
116
|
const { homedir } = await import("node:os");
|
|
117
117
|
const refreshGlobal = skillInstalled(homedir());
|
|
118
118
|
const refreshRepo = process.cwd() !== homedir() && skillInstalled(process.cwd());
|