@zackbart/connecta 0.15.0 → 0.15.1
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/CHANGELOG.md +27 -0
- package/dist/providers/cloudflare.d.ts +5 -1
- package/dist/providers/cloudflare.d.ts.map +1 -1
- package/dist/providers/cloudflare.js +203 -70
- package/dist/providers/cloudflare.js.map +1 -1
- package/dist/providers/linear.d.ts.map +1 -1
- package/dist/providers/linear.js +4 -3
- package/dist/providers/linear.js.map +1 -1
- package/dist/providers/mixpanel.d.ts.map +1 -1
- package/dist/providers/mixpanel.js +4 -3
- package/dist/providers/mixpanel.js.map +1 -1
- package/dist/providers/stripe.d.ts.map +1 -1
- package/dist/providers/stripe.js +4 -3
- package/dist/providers/stripe.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/documentation/cloudflare.md +37 -19
- package/documentation/connectors.md +9 -7
- package/documentation/linear.md +6 -7
- package/documentation/mixpanel.md +6 -7
- package/documentation/stripe.md +12 -12
- package/ethos.md +1 -1
- package/package.json +1 -1
- package/src/providers/cloudflare.ts +275 -79
- package/src/providers/linear.ts +4 -3
- package/src/providers/mixpanel.ts +4 -3
- package/src/providers/stripe.ts +4 -3
- package/src/version.ts +1 -1
- package/templates/node/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripe.js","sourceRoot":"","sources":["../../src/providers/stripe.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,GAEV,MAAM,6BAA6B,CAAC;AAcrC,iFAAiF;AACjF,MAAM,CAAC,MAAM,mBAAmB,GAAG,yBAAyB,CAAC;AA2B7D;;;;;;;;;GASG;AACH,MAAM,gBAAgB,GAElB;IACF,UAAU,EAAE;QACV,KAAK,EAAE;YACL;gBACE,cAAc,EAAE,CAAC;gBACjB,cAAc,EAAE,KAAK;gBACrB,YAAY,EAAE,KAAK;gBACnB,MAAM,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE;aACnE;SACF;KACF;IACD,OAAO,EAAE;QACP,KAAK,EAAE;YACL;gBACE,cAAc,EAAE,CAAC;gBACjB,cAAc,EAAE,KAAK;gBACrB,YAAY,EAAE,KAAK;gBACnB,MAAM,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;aAClE;SACF;KACF;CACF,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,mBAAmB;IACnB,oBAAoB;IACpB,iBAAiB;IACjB,yBAAyB;IACzB,qBAAqB;IACrB,6BAA6B;IAC7B,+BAA+B;CAChC,CAAC,CAAC;AAEH;;;;;;;;;GASG;AACH,MAAM,WAAW,GAAoD,IAAI,GAAG,CAAC;IAC3E,CAAC,kBAAkB,EAAE,aAAa,CAAC;IACnC,CAAC,eAAe,EAAE,aAAa,CAAC;IAChC,CAAC,eAAe,EAAE,UAAU,CAAC;IAC7B,CAAC,0BAA0B,EAAE,UAAU,CAAC;CACzC,CAAC,CAAC;AAEH
|
|
1
|
+
{"version":3,"file":"stripe.js","sourceRoot":"","sources":["../../src/providers/stripe.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
|
@@ -4,5 +4,5 @@
|
|
|
4
4
|
* a bump that forgets this file fails the build rather than shipping a stale
|
|
5
5
|
* version to `/health` and to downstream MCP handshakes.
|
|
6
6
|
*/
|
|
7
|
-
export declare const CONNECTA_VERSION = "0.15.
|
|
7
|
+
export declare const CONNECTA_VERSION = "0.15.1";
|
|
8
8
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
|
@@ -23,6 +23,18 @@ const edge = cloudflare("cloudflare_prod", {
|
|
|
23
23
|
});
|
|
24
24
|
```
|
|
25
25
|
|
|
26
|
+
Use the legacy user-scoped Global API Key when an existing deployment needs it:
|
|
27
|
+
|
|
28
|
+
```ts
|
|
29
|
+
const legacyEdge = cloudflare("cloudflare_legacy", {
|
|
30
|
+
purpose: "Legacy account administration",
|
|
31
|
+
authentication: "globalApiKey",
|
|
32
|
+
});
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
The operator UI then asks for the Cloudflare user email and Global API Key as
|
|
36
|
+
separate fields. The default remains a scoped API token.
|
|
37
|
+
|
|
26
38
|
The `id` owns the ordinary connector namespaces; use a different id for every
|
|
27
39
|
Cloudflare account or estate. `purpose` is required because an agent choosing
|
|
28
40
|
between a production and a staging instance needs to know which one answers the
|
|
@@ -40,7 +52,7 @@ dependency would cost is real — an optional peer with its own install step and
|
|
|
40
52
|
version skew, an import that never belongs in the root graph, and a second
|
|
41
53
|
opinion about what a Cloudflare call looks like.
|
|
42
54
|
|
|
43
|
-
The API itself does not need one. It is
|
|
55
|
+
The API itself does not need one. It is authenticated `fetch` with a uniform
|
|
44
56
|
`{ success, errors, messages, result, result_info }` response envelope. JSON,
|
|
45
57
|
raw bytes, and multipart request bodies all use Web APIs, which keeps the
|
|
46
58
|
provider Workers-clean and means `@zackbart/connecta/providers/cloudflare`
|
|
@@ -51,10 +63,16 @@ must be relative.
|
|
|
51
63
|
|
|
52
64
|
## Credentials
|
|
53
65
|
|
|
54
|
-
The
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
66
|
+
The default credential is a scoped Cloudflare API token, sent as
|
|
67
|
+
`Authorization: Bearer <token>`. Create it under My Profile → API Tokens →
|
|
68
|
+
Create Token.
|
|
69
|
+
|
|
70
|
+
Set `authentication: "globalApiKey"` to use the legacy user-scoped scheme. The
|
|
71
|
+
credential form stores two encrypted fields and sends them as `X-Auth-Email`
|
|
72
|
+
and `X-Auth-Key`. The Global API Key has the same access as its Cloudflare user
|
|
73
|
+
across every account and zone that user can reach. It cannot be scoped, only
|
|
74
|
+
one can exist per user, and it has no expiry or IP limits. Cloudflare recommends
|
|
75
|
+
API tokens for new use, but existing Global API Keys remain supported.
|
|
58
76
|
|
|
59
77
|
Grant only what the deployment needs:
|
|
60
78
|
|
|
@@ -83,10 +101,9 @@ scope. "Cache Purge" is a single permission with no Read/Write split, and
|
|
|
83
101
|
Cloudflare's own reference renders a few labels differently between its
|
|
84
102
|
Dashboard and API tabs.
|
|
85
103
|
|
|
86
|
-
`verify_api_token` needs no permission beyond the token existing
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
stored.
|
|
104
|
+
`verify_api_token` needs no permission beyond the token existing. In legacy
|
|
105
|
+
mode, `verify_global_api_key` reads `/user` to confirm the email and key pair.
|
|
106
|
+
The `/credentials` Test action runs the matching check before storage.
|
|
90
107
|
|
|
91
108
|
Cloudflare rate-limits *authentication failures* aggressively and separately
|
|
92
109
|
from the global limit: a few requests with a bad token return HTTP 429 with
|
|
@@ -146,7 +163,8 @@ method classification into user input:
|
|
|
146
163
|
default; `responseType: "text" | "base64"` retrieves scripts, logs, R2
|
|
147
164
|
objects, and media bodies without pretending they have a JSON envelope.
|
|
148
165
|
- `cloudflare_api_mutate` accepts JSON POST, PUT, PATCH, and DELETE. It is always
|
|
149
|
-
destructive, even when a particular POST is merely additive.
|
|
166
|
+
destructive, even when a particular POST is merely additive. It preserves
|
|
167
|
+
ordinary non-envelope JSON from endpoints such as `/graphql`.
|
|
150
168
|
- `cloudflare_api_upload` accepts POST or PUT plus exactly one of raw text,
|
|
151
169
|
base64 bytes, or multipart fields/files. It is always destructive and reads
|
|
152
170
|
no local files.
|
|
@@ -160,7 +178,7 @@ Paths are relative to `/client/v4`. Absolute URLs, protocol-relative paths,
|
|
|
160
178
|
`..` traversal, fragments, and embedded query strings are refused locally;
|
|
161
179
|
query parameters are explicit name/value pairs. These tools reuse the same
|
|
162
180
|
credential, admission budget, abort signal, envelope parsing, and typed failure
|
|
163
|
-
mapping as named tools. They do not widen the
|
|
181
|
+
mapping as named tools. They do not widen the configured credential's access.
|
|
164
182
|
|
|
165
183
|
This is intentionally not OpenAPI ingestion: it creates three stable tools,
|
|
166
184
|
not one tool per Cloudflare operation. For example, an agent can list Images at
|
|
@@ -271,8 +289,8 @@ official table mapping error codes to causes, so that set is assembled from
|
|
|
271
289
|
community reports and probing, not from documentation. The same goes for the
|
|
272
290
|
claim below that `10000` is overloaded — that is an observation about responses
|
|
273
291
|
seen in practice. Treat both as well-supported readings that Cloudflare could
|
|
274
|
-
invalidate without notice
|
|
275
|
-
when a diagnosis
|
|
292
|
+
invalidate without notice. Prefer `verify_api_token` or
|
|
293
|
+
`verify_global_api_key`, as configured, when a diagnosis matters.
|
|
276
294
|
|
|
277
295
|
Two ordering decisions are deliberate. The 429 branch is checked before the
|
|
278
296
|
authentication codes, because Cloudflare reuses the generic `10000` code on
|
|
@@ -280,15 +298,15 @@ throttled responses and reading a rate limit as an auth failure would tell an
|
|
|
280
298
|
agent to stop when it should wait. And `10000` is *not* itself treated as an
|
|
281
299
|
auth code: Cloudflare returns it for "Authentication error" but also for
|
|
282
300
|
ordinary validation failures like "Invalid pagination cursor" and
|
|
283
|
-
"domain_name is required", so routing on it would tell an agent its
|
|
301
|
+
"domain_name is required", so routing on it would tell an agent its credential was
|
|
284
302
|
broken when its arguments were. Genuine `10000` auth failures arrive with 401
|
|
285
303
|
or 403 and are caught by status.
|
|
286
304
|
|
|
287
305
|
Because the connection declares an operator-managed credential rather than an
|
|
288
306
|
OAuth flow, an `auth_required` failure resolves to the `operator_config`
|
|
289
|
-
recovery mode — the fix is a human updating the
|
|
290
|
-
URL the agent can open. A missing
|
|
291
|
-
made.
|
|
307
|
+
recovery mode — the fix is a human updating the credential, not an authorization
|
|
308
|
+
URL the agent can open. A missing credential fails that way before any request
|
|
309
|
+
is made.
|
|
292
310
|
|
|
293
311
|
Some failures never reach Cloudflare at all. A blank scope id, a `purge_cache`
|
|
294
312
|
call with no variant or two, and an `update_dns_record` with nothing to change
|
|
@@ -309,5 +327,5 @@ enforcement of it. Each runtime keeps its own counter, so N Worker isolates or
|
|
|
309
327
|
Node processes serving one deployment can each admit up to 1,200 — and the
|
|
310
328
|
dashboard traffic of a human sharing the account is counted by Cloudflare but
|
|
311
329
|
not by Connecta. `maxConcurrency` is the bound that actually protects a shared
|
|
312
|
-
|
|
313
|
-
window notices.
|
|
330
|
+
credential, because a single `execute_code` program can fan out far faster than
|
|
331
|
+
the window notices.
|
|
@@ -47,13 +47,15 @@ choice does not grant the connection different runtime privileges. Two
|
|
|
47
47
|
instances of the same provider are isolated in exactly the same way as two
|
|
48
48
|
hand-written connectors with different ids.
|
|
49
49
|
|
|
50
|
-
A prebuilt connection's vetted annotations
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
50
|
+
A prebuilt connection's vetted annotations fill in downstream silence and
|
|
51
|
+
otherwise preserve explicit annotations. This includes an explicit
|
|
52
|
+
`destructiveHint: true` or `readOnlyHint: false` on a vetted read, and an
|
|
53
|
+
explicit `readOnlyHint: true` on a name no release has classified. One narrow
|
|
54
|
+
exception stays fail-closed: a release-reviewed destructive classification
|
|
55
|
+
overrides a contradictory `readOnlyHint: true`, because Connecta has
|
|
56
|
+
independently established that the tool mutates existing state. Silence on an
|
|
57
|
+
unclassified name still means not read-only. The authoring path never weakens
|
|
58
|
+
the fail-closed read-only invariant.
|
|
57
59
|
|
|
58
60
|
Prebuilt means preferred when available, not mandatory. A deployment may mix
|
|
59
61
|
prebuilt connections, custom `remoteMcp()` connections, and custom `api()`
|
package/documentation/linear.md
CHANGED
|
@@ -83,18 +83,17 @@ The wrapper classifies Linear's documented `list_*`, `get_*`, and
|
|
|
83
83
|
downstream leaves unannotated fails closed onto `call_destructive_tool` until a
|
|
84
84
|
Connecta release reviews it.
|
|
85
85
|
|
|
86
|
-
That classification
|
|
87
|
-
|
|
88
|
-
annotation in neither direction. A tool on the read allowlist arriving with
|
|
86
|
+
That classification fills in downstream silence and otherwise preserves
|
|
87
|
+
explicit annotations. A tool on the read allowlist arriving with
|
|
89
88
|
`destructiveHint: true` or `readOnlyHint: false` keeps exactly what the
|
|
90
89
|
downstream said and stays behind `call_destructive_tool`. A tool on neither
|
|
91
90
|
maintained list arriving with `readOnlyHint: true` keeps that too, and stays
|
|
92
91
|
callable from `execute_code`. Both are the downstream telling you this
|
|
93
92
|
release's allowlist is stale, and on a name no release has reviewed its word is
|
|
94
|
-
the only evidence there is.
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
93
|
+
the only evidence there is. One narrow fail-closed exception applies to a name
|
|
94
|
+
this release reviewed and filed destructive: a `save_*` tool claiming
|
|
95
|
+
`readOnlyHint: true` is a downstream bug rather than news, and stays on the
|
|
96
|
+
approval path.
|
|
98
97
|
|
|
99
98
|
One detail of Linear's own design shapes the classification: **`save_*` tools
|
|
100
99
|
are upserts.** Omitting a record id creates; supplying one updates in place.
|
|
@@ -49,18 +49,17 @@ documented create, update, edit, merge, dismiss, duplicate, and delete tools as
|
|
|
49
49
|
writes. An unfamiliar tool the downstream leaves unannotated fails closed onto
|
|
50
50
|
`call_destructive_tool` until a Connecta release reviews it.
|
|
51
51
|
|
|
52
|
-
That classification
|
|
53
|
-
|
|
54
|
-
annotation in neither direction. A tool on the read allowlist arriving with
|
|
52
|
+
That classification fills in downstream silence and otherwise preserves
|
|
53
|
+
explicit annotations. A tool on the read allowlist arriving with
|
|
55
54
|
`destructiveHint: true` or `readOnlyHint: false` keeps exactly what the
|
|
56
55
|
downstream said and stays behind `call_destructive_tool`. A tool on neither
|
|
57
56
|
maintained list arriving with `readOnlyHint: true` keeps that too, and stays
|
|
58
57
|
callable from `execute_code`. Both are the downstream telling you this
|
|
59
58
|
release's allowlist is stale, and on a name no release has reviewed its word is
|
|
60
|
-
the only evidence there is.
|
|
61
|
-
|
|
62
|
-
`
|
|
63
|
-
|
|
59
|
+
the only evidence there is. One narrow fail-closed exception applies to a name
|
|
60
|
+
this release reviewed and filed destructive: a `Delete-Dashboard` claiming
|
|
61
|
+
`readOnlyHint: true` is a downstream bug rather than news, and stays on the
|
|
62
|
+
approval path. Maintained writes that only create
|
|
64
63
|
something new (`Create-Dashboard`, `Create-Cohort`, `Create-Metric`, and the
|
|
65
64
|
rest) leave `destructiveHint` unset; `readOnlyHint: false` already routes them
|
|
66
65
|
through the destructive path, and asserting destruction only inflates the
|
package/documentation/stripe.md
CHANGED
|
@@ -137,18 +137,18 @@ exists rather than a fresh object appearing beside it. Additive writes
|
|
|
137
137
|
`readOnlyHint: false` already routes them through `call_destructive_tool`, and
|
|
138
138
|
asserting destruction only inflates the approval copy the host shows a human.
|
|
139
139
|
|
|
140
|
-
That classification
|
|
141
|
-
the annotations Stripe leaves unset — Stripe
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
140
|
+
That classification fills in downstream silence and otherwise preserves
|
|
141
|
+
explicit annotations. It supplies the annotations Stripe leaves unset — Stripe
|
|
142
|
+
documents no MCP annotations at all. A tool on the read allowlist arriving with
|
|
143
|
+
`destructiveHint: true` or `readOnlyHint: false` keeps exactly what the
|
|
144
|
+
downstream said and stays behind `call_destructive_tool`. A tool on neither
|
|
145
|
+
maintained list arriving with `readOnlyHint: true` keeps that too, and stays
|
|
146
|
+
callable from `execute_code`. Both are the downstream telling you this release's
|
|
147
|
+
allowlist is stale, and on a name no release has reviewed its word is the only
|
|
148
|
+
evidence there is. One narrow fail-closed exception applies to a name this
|
|
149
|
+
release reviewed and filed destructive: a `create_refund` claiming
|
|
150
|
+
`readOnlyHint: true` is a downstream bug rather than news, and stays on the
|
|
151
|
+
approval path.
|
|
152
152
|
|
|
153
153
|
An unfamiliar tool that annotates nothing fails closed onto
|
|
154
154
|
`call_destructive_tool` until a Connecta release reviews it. That is not
|
package/ethos.md
CHANGED
|
@@ -69,7 +69,7 @@ proposing one without a new argument is not.
|
|
|
69
69
|
| Multi-tenancy / account model | refused | one deployment per tenant; deploy again instead |
|
|
70
70
|
| Policy engine, approvals, pauses | refused | the host asks the human; connecta only annotates |
|
|
71
71
|
| Runtime connector registration | refused | config-as-code is the security model |
|
|
72
|
-
| Prebuilt connections as the preferred authoring path | accepted | an a-la-carte provider constructor, imported and constructed in the deployment file, encodes maintained defaults for providers connecta actually uses — preferred *when maintained*, with no promise of one per provider; it returns exactly one ordinary `Connector` with no extra privileges — never a bundle, a group, a preset, or a registry — its tools are hand-written or proxied from a downstream MCP catalog, never generated from a schema document; its vetted annotations classify what the downstream leaves unannotated and
|
|
72
|
+
| Prebuilt connections as the preferred authoring path | accepted | an a-la-carte provider constructor, imported and constructed in the deployment file, encodes maintained defaults for providers connecta actually uses — preferred *when maintained*, with no promise of one per provider; it returns exactly one ordinary `Connector` with no extra privileges — never a bundle, a group, a preset, or a registry — its tools are hand-written or proxied from a downstream MCP catalog, never generated from a schema document; its vetted annotations classify what the downstream leaves unannotated and otherwise preserve explicit annotations, with one fail-closed exception: a release-reviewed destructive classification outranks a contradictory downstream `readOnlyHint: true`, because Connecta has independently established that the tool mutates existing state; `remoteMcp()` and `api()` stay first-class ([#297](https://github.com/zackbart/connecta/issues/297), [#315](https://github.com/zackbart/connecta/issues/315)) |
|
|
73
73
|
| Guarded raw REST escape hatches in a prebuilt connection | accepted | a large, fast-moving provider cannot be honestly represented by a small frozen list: a GET-only tool may expose provider-relative reads, while JSON mutations and explicit-content uploads stay separate and always cross the destructive boundary; the connector owns authentication, rate limits, error mapping, URL confinement, and safe method classification, while the provider token remains the capability boundary — this is not schema ingestion, runtime connector registration, or permission widening |
|
|
74
74
|
| Provider registry / integration marketplace | refused | prebuilt connections are imports, not listings; discovery happens in documentation, never at runtime ([#297](https://github.com/zackbart/connecta/issues/297)) |
|
|
75
75
|
| Protocol sessions & server push | refused | stateless per request |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zackbart/connecta",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"description": "One MCP to rule them all — a single MCP endpoint aggregating many downstream connectors behind a code-first surface of seven meta-tools.",
|