@zackbart/connecta 0.31.0 → 0.33.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/CHANGELOG.md +97 -0
- package/README.md +30 -20
- package/bin/connecta.mjs +25 -6
- package/bin/version.mjs +1 -1
- package/dist/access-tokens.d.ts +167 -23
- package/dist/access-tokens.js +676 -140
- package/dist/agent-identity.js +47 -0
- package/dist/auth/cloudflare-access.js +13 -5
- package/dist/auth-elicitation.js +1 -1
- package/dist/call-admission-context.js +15 -0
- package/dist/call-admission.js +30 -43
- package/dist/call-recovery.js +6 -2
- package/dist/catalog-service.js +7 -2
- package/dist/config-value-sources.js +14 -9
- package/dist/config.d.ts +58 -78
- package/dist/config.js +143 -47
- package/dist/connector-access.d.ts +4 -33
- package/dist/connector-access.js +15 -99
- package/dist/connector-caller.d.ts +7 -1
- package/dist/connector-caller.js +3 -2
- package/dist/connectors/api-connector.d.ts +27 -4
- package/dist/connectors/api-connector.js +2 -0
- package/dist/connectors/guarded-fetch.d.ts +9 -0
- package/dist/connectors/guarded-fetch.js +7 -0
- package/dist/connectors/remote-mcp.js +2 -0
- package/dist/describe-config.d.ts +32 -7
- package/dist/describe-config.js +9 -18
- package/dist/errors.d.ts +1 -1
- package/dist/errors.js +1 -0
- package/dist/execute.js +16 -14
- package/dist/index.d.ts +4 -3
- package/dist/index.js +30 -10
- package/dist/invocation.js +12 -7
- package/dist/membership.d.ts +51 -0
- package/dist/membership.js +121 -0
- package/dist/meta-tools.js +17 -19
- package/dist/module-contracts.d.ts +23 -6
- package/dist/operator-record.d.ts +2 -2
- package/dist/operator-record.js +2 -2
- package/dist/operator-ui/agents.d.ts +74 -0
- package/dist/operator-ui/agents.js +104 -0
- package/dist/operator-ui/contract.d.ts +151 -29
- package/dist/operator-ui/endpoints.js +192 -0
- package/dist/operator-ui/fix-prompts.js +4 -4
- package/dist/operator-ui/generated.js +5 -4
- package/dist/operator-ui/member-page.js +112 -0
- package/dist/operator-ui/model.d.ts +15 -7
- package/dist/operator-ui/view.d.ts +84 -19
- package/dist/operator-ui/view.js +83 -21
- package/dist/page-styles.js +1 -1
- package/dist/program-writes.js +2 -2
- package/dist/provider.d.ts +63 -11
- package/dist/provider.js +46 -7
- package/dist/providers/_shared/google/workspace.d.ts +53 -16
- package/dist/providers/_shared/google/workspace.js +31 -9
- package/dist/providers/_shared/rest/tools.js +2 -2
- package/dist/providers/_shared/rest/value-safety.d.ts +50 -0
- package/dist/providers/_shared/rest/value-safety.js +699 -7
- package/dist/providers/breeze/skill.generated.js +2 -2
- package/dist/providers/ccb/index.js +1 -1
- package/dist/providers/cloudflare/index.js +3 -3
- package/dist/providers/cloudflare/rest.js +25 -3
- package/dist/providers/cloudflare/skill.generated.js +2 -2
- package/dist/providers/cloudflare/value-safety.js +32 -0
- package/dist/providers/docs/index.d.ts +1 -1
- package/dist/providers/docs/index.js +5 -5
- package/dist/providers/docs/skill.generated.js +2 -2
- package/dist/providers/drive/index.d.ts +1 -1
- package/dist/providers/drive/index.js +4 -4
- package/dist/providers/drive/skill.generated.js +2 -2
- package/dist/providers/forms/index.d.ts +1 -1
- package/dist/providers/forms/index.js +5 -5
- package/dist/providers/forms/skill.generated.js +2 -2
- package/dist/providers/github/skill.generated.js +2 -2
- package/dist/providers/gmail/index.d.ts +1 -1
- package/dist/providers/gmail/index.js +279 -26
- package/dist/providers/gmail/skill.generated.js +2 -2
- package/dist/providers/linear/index.js +1 -1
- package/dist/providers/mixpanel/index.d.ts +27 -12
- package/dist/providers/mixpanel/index.js +58 -6
- package/dist/providers/mixpanel/operations.js +20 -0
- package/dist/providers/mixpanel/rest.js +603 -0
- package/dist/providers/mixpanel/skill.generated.js +3 -2
- package/dist/providers/mixpanel/value-safety.js +16 -0
- package/dist/providers/notion/index.d.ts +7 -0
- package/dist/providers/notion/index.js +116 -11
- package/dist/providers/notion/rest.js +183 -24
- package/dist/providers/notion/skill.generated.js +4 -4
- package/dist/providers/notion/value-safety.js +30 -5
- package/dist/providers/overflow/index.js +1 -1
- package/dist/providers/planning-center/index.d.ts +27 -0
- package/dist/providers/planning-center/index.js +287 -25
- package/dist/providers/planning-center/skill.generated.js +24 -4
- package/dist/providers/sheets/index.d.ts +4 -1
- package/dist/providers/sheets/index.js +9 -6
- package/dist/providers/sheets/skill.generated.js +2 -2
- package/dist/providers/slides/index.d.ts +1 -1
- package/dist/providers/slides/index.js +6 -6
- package/dist/providers/slides/skill.generated.js +2 -2
- package/dist/providers/stripe/rest.js +9 -2
- package/dist/providers/stripe/skill.generated.js +2 -2
- package/dist/providers/stripe/value-safety.js +22 -0
- package/dist/providers/vercel/index.js +2 -2
- package/dist/providers/vercel/rest.js +20 -2
- package/dist/providers/vercel/skill.generated.js +2 -2
- package/dist/providers/vercel/value-safety.js +22 -0
- package/dist/providers/wispr-flow/index.d.ts +14 -0
- package/dist/providers/wispr-flow/index.js +117 -0
- package/dist/providers/wispr-flow/skill.generated.js +8 -0
- package/dist/registry.d.ts +2 -3
- package/dist/registry.js +8 -9
- package/dist/routes/access-tokens.js +82 -75
- package/dist/routes/activity-disclosure.js +17 -18
- package/dist/routes/activity.js +34 -54
- package/dist/routes/actor-labels.js +33 -4
- package/dist/routes/agent-path.js +43 -0
- package/dist/routes/connect.js +16 -12
- package/dist/routes/credentials.js +16 -40
- package/dist/routes/mcp.js +155 -85
- package/dist/routes/oauth-management.js +11 -5
- package/dist/routes/oauth.js +3 -9
- package/dist/routes/operator.js +25 -17
- package/dist/routes/shared.d.ts +60 -20
- package/dist/routes/shared.js +187 -96
- package/dist/routes/ui-config.js +437 -97
- package/dist/routes/ui-data.js +2 -2
- package/dist/routes/ui.js +9 -16
- package/dist/runtime/call-admission.js +9 -0
- package/dist/server.js +8 -0
- package/dist/skills.js +5 -4
- package/dist/storage/keys.js +9 -1
- package/dist/tool-safety.js +13 -5
- package/dist/types.d.ts +12 -1
- package/dist/ui.d.ts +2 -2
- package/dist/ui.js +17 -15
- package/dist/usage-guide.js +3 -3
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/workspace-address.js +9 -0
- package/dist/workspace-subject.js +23 -0
- package/documentation/README.md +46 -22
- package/documentation/architecture.md +378 -58
- package/documentation/auth.md +806 -215
- package/documentation/code-mode.md +93 -81
- package/documentation/deploying.md +128 -26
- package/documentation/integrating.md +145 -22
- package/documentation/meta-tools.md +58 -46
- package/documentation/migration-0.33.md +344 -0
- package/documentation/operating.md +14 -9
- package/documentation/operator-tests.md +117 -31
- package/documentation/operator-ui.md +326 -55
- package/documentation/provider-auth-migration.md +42 -27
- package/documentation/provider-migration-0.29.md +3 -3
- package/examples/worker/AGENTS.md +35 -8
- package/examples/worker/README.md +92 -53
- package/examples/worker/src/connecta.config.ts +41 -20
- package/examples/worker/wrangler.jsonc +3 -0
- package/package.json +7 -2
- package/templates/node/.env.example +3 -0
- package/templates/node/AGENTS.md +33 -10
- package/templates/node/Dockerfile +2 -2
- package/templates/node/README.md +71 -44
- package/templates/node/docker-compose.yml +3 -2
- package/templates/node/package.json +4 -3
- package/templates/node/src/adopt-token.ts +23 -0
- package/templates/node/src/connecta.config.ts +33 -12
- package/templates/node/src/rotate-token.ts +17 -0
- package/dist/tool-safety.d.ts +0 -9
- package/templates/node/src/provision-token.ts +0 -17
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { skill } from "./skill.generated.js";
|
|
2
2
|
import { remoteMcp, withCredentialDefaults } from "../../connectors/remote-mcp.js";
|
|
3
3
|
import { reviewedCatalog } from "../../catalog-drift.js";
|
|
4
|
-
import { keys, optionsOf } from "../../config-schema.js";
|
|
4
|
+
import { keys, optionsOf, variants } from "../../config-schema.js";
|
|
5
5
|
import { PROVIDER_COMMON, REMOTE_MCP_AUTH } from "../../connectors/option-shapes.js";
|
|
6
6
|
import { defineProvider } from "../../provider.js";
|
|
7
|
+
import { apiConnector } from "../../connectors/api-connector.js";
|
|
8
|
+
import { mixpanelRest, MIXPANEL_API_ADMISSION } from "./rest.js";
|
|
7
9
|
export const MIXPANEL_MCP_ENDPOINTS = {
|
|
8
10
|
us: "https://mcp.mixpanel.com/mcp",
|
|
9
11
|
eu: "https://mcp-eu.mixpanel.com/mcp",
|
|
@@ -358,18 +360,39 @@ ${regionNote}
|
|
|
358
360
|
Account purpose: ${purpose}${skill.fragments.guide_1}${accountInstructions ? `\n## ${skill.instructionsHeading}\n\n${accountInstructions}\n` : ""}`;
|
|
359
361
|
}
|
|
360
362
|
/** The closed options mixpanel() accepts; see `assertKnownOptions`. */
|
|
361
|
-
const MIXPANEL_OPTIONS =
|
|
362
|
-
|
|
363
|
+
const MIXPANEL_OPTIONS = variants("via", {
|
|
364
|
+
mcp: optionsOf()({
|
|
365
|
+
...PROVIDER_COMMON,
|
|
366
|
+
...keys("region", "via"),
|
|
367
|
+
auth: REMOTE_MCP_AUTH,
|
|
368
|
+
}).shape,
|
|
369
|
+
api: optionsOf()({
|
|
370
|
+
...PROVIDER_COMMON,
|
|
371
|
+
...keys("region", "via", "defaultProjectId"),
|
|
372
|
+
auth: variants("type", { credential: optionsOf()(keys("type")).shape }),
|
|
373
|
+
}).shape,
|
|
374
|
+
}, "mcp");
|
|
375
|
+
/** Mixpanel hosted MCP by default, or service-account REST with via: "api". */
|
|
363
376
|
export const mixpanel = defineProvider({
|
|
364
377
|
name: "mixpanel",
|
|
365
378
|
title: "Mixpanel",
|
|
366
|
-
kind: "
|
|
379
|
+
kind: "dual",
|
|
367
380
|
readme: "Mixpanel",
|
|
368
|
-
bundle: {
|
|
381
|
+
bundle: {
|
|
382
|
+
baselineGzip: 205500,
|
|
383
|
+
maxGzip: 265500,
|
|
384
|
+
note: "./providers/mixpanel (#823) adds the REST connector, guarded transport, shared operation index and value-safety engine alongside the unchanged hosted MCP client. The nine-operation reviewed subset was shrunk to depth 3 without descriptions before remeasuring: operations.ts is 1355 B gzip. The provider remeasures at about 205500 B gzip, compared with the 131378 B MCP-only baseline; the cap follows baseline + 60000 B. No new runtime dependencies.",
|
|
385
|
+
},
|
|
369
386
|
skill,
|
|
370
387
|
options: MIXPANEL_OPTIONS,
|
|
371
388
|
classify: MIXPANEL_CLASSIFICATION,
|
|
372
|
-
create:
|
|
389
|
+
create: (id, options, provider) => {
|
|
390
|
+
const region = options.region ?? "us";
|
|
391
|
+
if (!Object.hasOwn(MIXPANEL_MCP_ENDPOINTS, region)) {
|
|
392
|
+
throw new Error('region must be "us", "eu", or "in".');
|
|
393
|
+
}
|
|
394
|
+
return options.via === "api" ? mixpanelApi(id, options, provider) : mixpanelConnector(id, options, provider);
|
|
395
|
+
},
|
|
373
396
|
});
|
|
374
397
|
function mixpanelConnector(id, options, provider) {
|
|
375
398
|
const purpose = options.purpose.trim();
|
|
@@ -412,5 +435,34 @@ function mixpanelConnector(id, options, provider) {
|
|
|
412
435
|
});
|
|
413
436
|
return connector;
|
|
414
437
|
}
|
|
438
|
+
function mixpanelApi(id, options, provider) {
|
|
439
|
+
if (options.auth?.type !== "credential")
|
|
440
|
+
throw new Error('via: "api" requires auth: { type: "credential" }.');
|
|
441
|
+
if (options.defaultProjectId !== undefined &&
|
|
442
|
+
(!Number.isSafeInteger(options.defaultProjectId) || options.defaultProjectId < 1)) {
|
|
443
|
+
throw new Error("defaultProjectId must be a positive safe integer.");
|
|
444
|
+
}
|
|
445
|
+
const region = options.region ?? "us";
|
|
446
|
+
const rest = mixpanelRest(region, options.defaultProjectId);
|
|
447
|
+
const instructions = options.instructions?.trim();
|
|
448
|
+
return apiConnector(id, {
|
|
449
|
+
...provider.connectorOptions,
|
|
450
|
+
title: options.title ?? `Mixpanel API (${region})`,
|
|
451
|
+
description: `Mixpanel service-account REST APIs (${region} residency): ${options.purpose}`,
|
|
452
|
+
credential: {
|
|
453
|
+
label: "Mixpanel service account",
|
|
454
|
+
description: "username:secret from Mixpanel organization settings. Import requires Owner or Admin on the target project.",
|
|
455
|
+
placeholder: "username:secret",
|
|
456
|
+
},
|
|
457
|
+
testCredential: rest.testCredential,
|
|
458
|
+
callAdmission: options.callAdmission === undefined ? MIXPANEL_API_ADMISSION : options.callAdmission,
|
|
459
|
+
usageGuide: {
|
|
460
|
+
content: `# Mixpanel API usage\n\nService-account REST, ${region} residency. Account purpose: ${options.purpose}\n\nDefault project: ${options.defaultProjectId ?? "none; supply project_id"}.${skill.fragments.api}${instructions ? `\n## ${skill.instructionsHeading}\n\n${instructions}\n` : ""}`,
|
|
461
|
+
summary: `${REGION_COPY[region]} residency, service-account REST. Raw export, user activity, profiles, reports and event import.`,
|
|
462
|
+
required: true,
|
|
463
|
+
},
|
|
464
|
+
tools: rest.tools,
|
|
465
|
+
});
|
|
466
|
+
}
|
|
415
467
|
/** @deprecated Read `mixpanel.definition.classify` instead. Kept for existing imports. */
|
|
416
468
|
export const MIXPANEL_VETTED_CATALOG = reviewedCatalog(mixpanel.definition.classify, 'defineProvider("mixpanel")');
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export const openapi = {
|
|
2
|
+
source: "https://docs.mixpanel.com/openapi/query.openapi.yaml",
|
|
3
|
+
revision: "reviewed-2026-10-14",
|
|
4
|
+
digest: "sha256:d9bbbbfa67f0a31f900b325932462b9cd541d287e55357d28e201df69a35e677",
|
|
5
|
+
version: "1.0.0",
|
|
6
|
+
servers: ["query", "export", "app", "ingestion"],
|
|
7
|
+
tags: ["Export", "Account", "Engage", "Funnels", "Insights", "Retention", "Activity Feed", "Events"],
|
|
8
|
+
ops: [
|
|
9
|
+
["GET", "/api/2.0/export", "raw-event-export", "Download Data", 0, 1],
|
|
10
|
+
["GET", "/api/app/me", "service-account-me", "Service-account identity and reachable projects", 1, 2],
|
|
11
|
+
["POST", "/api/query/engage", "engage-query", "Query Profiles", 2],
|
|
12
|
+
["GET", "/api/query/funnels", "funnels-query", "Query Saved Report", 3],
|
|
13
|
+
["GET", "/api/query/funnels/list", "funnels-list-saved", "List Saved Funnels", 3],
|
|
14
|
+
["GET", "/api/query/insights", "insights-query", "Query Saved Report", 4],
|
|
15
|
+
["GET", "/api/query/retention", "retention-query", "Query Retention Report", 5],
|
|
16
|
+
["GET", "/api/query/stream/query", "activity-stream-query", "Profile Event Activity", 6],
|
|
17
|
+
["POST", "/import", "import-events", "Import Events", 7, 3],
|
|
18
|
+
],
|
|
19
|
+
details: '{"d":[],"o":[[[["project_id","query",0,{"t":"integer"}],["from_date","query",1,{"t":"string"}],["to_date","query",1,{"t":"string"}],["limit","query",0,{"t":"integer"}],["event","query",0,{"t":"string"}],["where","query",0,{"t":"string"}],["time_in_ms","query",0,{"t":"boolean"}]],0],0,[[["project_id","query",1,{"t":"integer"}],["workspace_id","query",0,{"t":"integer"}]],["application/x-www-form-urlencoded",{"p":{"distinct_id":{"t":"string"},"distinct_ids":{"t":"string"},"data_group_id":{"t":"string"},"where":{"t":"string"},"output_properties":{"t":"array","i":{"t":"string"}},"session_id":{"t":"string"},"page":{"t":"integer"},"behaviors":{"t":"integer"},"as_of_timestamp":{"t":"integer"},"filter_by_cohort":{"t":"string"},"include_all_users":{"t":"boolean"}}}]],[[["project_id","query",1,{"t":"integer"}],["workspace_id","query",0,{"t":"integer"}],["funnel_id","query",1,{"t":"integer"}],["from_date","query",1,{"t":"string"}],["to_date","query",1,{"t":"string"}],["length","query",0,{"t":"integer"}],["length_unit","query",0,{"t":"string","e":["day","hour","minute","second"]}],["interval","query",0,{"t":"integer"}],["unit","query",0,{"t":"string","e":["day","week","month"]}],["on","query",0,{"t":"string"}],["where","query",0,{"t":"string"}],["limit","query",0,{"t":"integer"}]],0],[[["project_id","query",1,{"t":"integer"}],["workspace_id","query",0,{"t":"integer"}]],0],[[["project_id","query",1,{"t":"integer"}],["workspace_id","query",0,{"t":"integer"}],["bookmark_id","query",1,{"t":"integer"}]],0],[[["project_id","query",1,{"t":"integer"}],["workspace_id","query",0,{"t":"integer"}],["from_date","query",1,{"t":"string"}],["to_date","query",1,{"t":"string"}],["retention_type","query",0,{"t":"string","e":["birth","compounded"]}],["born_event","query",0,{"t":"string"}],["event","query",0,{"t":"string"}],["born_where","query",0,{"t":"string"}],["where","query",0,{"t":"string"}],["interval","query",0,{"t":"integer"}],["interval_count","query",0,{"t":"integer"}],["unit","query",0,{"t":"string","e":["day","week","month"]}],["unbounded_retention","query",0,{"t":"boolean"}],["on","query",0,{"t":"string"}],["limit","query",0,{"t":"integer"}]],0],[[["project_id","query",1,{"t":"integer"}],["workspace_id","query",0,{"t":"integer"}],["distinct_ids","query",1,{"t":"string"}],["from_date","query",1,{"t":"string"}],["to_date","query",1,{"t":"string"}]],0],[[["strict","query",1,{"t":"string","e":["0","1"]}],["project_id","query",1,{"t":"string"}]],["application/json",{"t":"array","i":{"t":"object","p":{"event":{"t":"string"},"properties":{"t":"object","p":{"time":{"t":"integer"},"distinct_id":{"t":"string"},"$insert_id":{"t":"string"}},"r":["time","$insert_id","distinct_id"],"m":{}}},"r":["event","properties"]}},1]]]}',
|
|
20
|
+
};
|