@every-app/sdk 0.2.0 → 0.3.0-rc.2
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/LICENSE +21 -0
- package/README.md +608 -2
- package/dist/cloudflare/index.d.ts +22 -0
- package/dist/cloudflare/index.d.ts.map +1 -0
- package/dist/cloudflare/index.js +21 -0
- package/dist/cloudflare/sentinel.d.ts +69 -0
- package/dist/cloudflare/sentinel.d.ts.map +1 -0
- package/dist/cloudflare/sentinel.js +50 -0
- package/dist/cloudflare/worker.d.ts +592 -0
- package/dist/cloudflare/worker.d.ts.map +1 -0
- package/dist/cloudflare/worker.js +817 -0
- package/dist/dev/index.d.ts +8 -0
- package/dist/dev/index.d.ts.map +1 -0
- package/dist/dev/index.js +7 -0
- package/dist/dev/keypair.d.ts +24 -0
- package/dist/dev/keypair.d.ts.map +1 -0
- package/dist/dev/keypair.js +60 -0
- package/dist/internal/aiProviders.d.ts +67 -0
- package/dist/internal/aiProviders.d.ts.map +1 -0
- package/dist/internal/aiProviders.js +220 -0
- package/dist/internal/appSettings.d.ts +237 -0
- package/dist/internal/appSettings.d.ts.map +1 -0
- package/dist/internal/appSettings.js +374 -0
- package/dist/internal/capabilities.d.ts +3249 -0
- package/dist/internal/capabilities.d.ts.map +1 -0
- package/dist/internal/capabilities.js +1532 -0
- package/dist/internal/catalog/commerce.d.ts +394 -0
- package/dist/internal/catalog/commerce.d.ts.map +1 -0
- package/dist/internal/catalog/commerce.js +477 -0
- package/dist/internal/catalog/comms.d.ts +338 -0
- package/dist/internal/catalog/comms.d.ts.map +1 -0
- package/dist/internal/catalog/comms.js +477 -0
- package/dist/internal/catalog/index.d.ts +1899 -0
- package/dist/internal/catalog/index.d.ts.map +1 -0
- package/dist/internal/catalog/index.js +19 -0
- package/dist/internal/catalog/inference.d.ts +356 -0
- package/dist/internal/catalog/inference.d.ts.map +1 -0
- package/dist/internal/catalog/inference.js +425 -0
- package/dist/internal/catalog/infra.d.ts +423 -0
- package/dist/internal/catalog/infra.d.ts.map +1 -0
- package/dist/internal/catalog/infra.js +543 -0
- package/dist/internal/catalog/search.d.ts +400 -0
- package/dist/internal/catalog/search.d.ts.map +1 -0
- package/dist/internal/catalog/search.js +463 -0
- package/dist/internal/devProviders.d.ts +49 -0
- package/dist/internal/devProviders.d.ts.map +1 -0
- package/dist/internal/devProviders.js +62 -0
- package/dist/internal/email.d.ts +280 -0
- package/dist/internal/email.d.ts.map +1 -0
- package/dist/internal/email.js +613 -0
- package/dist/internal/events.d.ts +182 -0
- package/dist/internal/events.d.ts.map +1 -0
- package/dist/internal/events.js +326 -0
- package/dist/internal/gatewaySettings.d.ts +83 -0
- package/dist/internal/gatewaySettings.d.ts.map +1 -0
- package/dist/internal/gatewaySettings.js +217 -0
- package/dist/internal/identity.d.ts +18 -3
- package/dist/internal/identity.d.ts.map +1 -1
- package/dist/internal/identity.js +53 -14
- package/dist/internal/index.d.ts +18 -1
- package/dist/internal/index.d.ts.map +1 -1
- package/dist/internal/index.js +18 -1
- package/dist/internal/members.d.ts +35 -0
- package/dist/internal/members.d.ts.map +1 -0
- package/dist/internal/members.js +7 -0
- package/dist/internal/oauthClient.d.ts +63 -0
- package/dist/internal/oauthClient.d.ts.map +1 -0
- package/dist/internal/oauthClient.js +194 -0
- package/dist/internal/oauthScopes.d.ts +117 -0
- package/dist/internal/oauthScopes.d.ts.map +1 -0
- package/dist/internal/oauthScopes.js +416 -0
- package/dist/internal/organizationName.d.ts +18 -0
- package/dist/internal/organizationName.d.ts.map +1 -0
- package/dist/internal/organizationName.js +24 -0
- package/dist/internal/protocol.d.ts +86 -2
- package/dist/internal/protocol.d.ts.map +1 -1
- package/dist/internal/protocol.js +112 -1
- package/dist/internal/providerApps.d.ts +75 -0
- package/dist/internal/providerApps.d.ts.map +1 -0
- package/dist/internal/providerApps.js +59 -0
- package/dist/internal/providerRegistry.d.ts +147 -0
- package/dist/internal/providerRegistry.d.ts.map +1 -0
- package/dist/internal/providerRegistry.js +266 -0
- package/dist/internal/providerSpec.d.ts +55 -0
- package/dist/internal/providerSpec.d.ts.map +1 -0
- package/dist/internal/providerSpec.js +758 -0
- package/dist/internal/remoteMcp.d.ts +188 -0
- package/dist/internal/remoteMcp.d.ts.map +1 -0
- package/dist/internal/remoteMcp.js +543 -0
- package/dist/internal/signInProviders.d.ts +104 -0
- package/dist/internal/signInProviders.d.ts.map +1 -0
- package/dist/internal/signInProviders.js +238 -0
- package/dist/internal/tools.d.ts +115 -0
- package/dist/internal/tools.d.ts.map +1 -0
- package/dist/internal/tools.js +80 -0
- package/dist/server/attribution.d.ts +39 -0
- package/dist/server/attribution.d.ts.map +1 -0
- package/dist/server/attribution.js +67 -0
- package/dist/server/authorizeUrl.d.ts +43 -0
- package/dist/server/authorizeUrl.d.ts.map +1 -0
- package/dist/server/authorizeUrl.js +110 -0
- package/dist/server/emit.d.ts +63 -0
- package/dist/server/emit.d.ts.map +1 -0
- package/dist/server/emit.js +101 -0
- package/dist/server/everyApp.d.ts +38 -12
- package/dist/server/everyApp.d.ts.map +1 -1
- package/dist/server/everyApp.js +92 -28
- package/dist/server/gatewayFetch.d.ts +24 -8
- package/dist/server/gatewayFetch.d.ts.map +1 -1
- package/dist/server/gatewayFetch.js +81 -36
- package/dist/server/index.d.ts +10 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +8 -1
- package/dist/server/integrationFetch.d.ts +131 -0
- package/dist/server/integrationFetch.d.ts.map +1 -0
- package/dist/server/integrationFetch.js +526 -0
- package/dist/server/listMembers.d.ts +32 -0
- package/dist/server/listMembers.d.ts.map +1 -0
- package/dist/server/listMembers.js +74 -0
- package/dist/server/nodeServer.d.ts +48 -0
- package/dist/server/nodeServer.d.ts.map +1 -0
- package/dist/server/nodeServer.js +45 -0
- package/dist/server/sendEmail.d.ts +39 -0
- package/dist/server/sendEmail.d.ts.map +1 -0
- package/dist/server/sendEmail.js +114 -0
- package/dist/server/tools.d.ts +184 -0
- package/dist/server/tools.d.ts.map +1 -0
- package/dist/server/tools.js +347 -0
- package/dist/server/toolsEndpoint.d.ts +32 -0
- package/dist/server/toolsEndpoint.d.ts.map +1 -0
- package/dist/server/toolsEndpoint.js +231 -0
- package/package.json +19 -6
- package/dist/server/mcp.d.ts +0 -66
- package/dist/server/mcp.d.ts.map +0 -1
- package/dist/server/mcp.js +0 -147
package/dist/server/mcp.d.ts
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `createMcpHandler()` — a stateless Streamable HTTP MCP server handler.
|
|
3
|
-
*
|
|
4
|
-
* const mcp = createMcpHandler({
|
|
5
|
-
* name: "my-app",
|
|
6
|
-
* tools: {
|
|
7
|
-
* list_items: {
|
|
8
|
-
* description: "List the user's items",
|
|
9
|
-
* inputSchema: { type: "object", properties: { limit: { type: "number" } } },
|
|
10
|
-
* handler: async (args, { user, env }) => listItems(user.id, args.limit),
|
|
11
|
-
* },
|
|
12
|
-
* },
|
|
13
|
-
* });
|
|
14
|
-
* export default everyApp((request, env, ctx, user) => {
|
|
15
|
-
* if (new URL(request.url).pathname === "/mcp") return mcp(request, env, ctx, user);
|
|
16
|
-
* ...
|
|
17
|
-
* }, manifest);
|
|
18
|
-
*
|
|
19
|
-
* The gateway authenticates the caller and injects the identity JWT; this
|
|
20
|
-
* handler only consumes the verified `EveryAppUser`. Each POST carries one
|
|
21
|
-
* self-contained JSON-RPC message (no sessions, no SSE), so any isolate can
|
|
22
|
-
* serve any request.
|
|
23
|
-
*/
|
|
24
|
-
import type { EveryAppUser } from "../internal/index.js";
|
|
25
|
-
import { type ExecutionContextLike } from "./everyApp.js";
|
|
26
|
-
export interface McpToolContext<TEnv = Record<string, unknown>> {
|
|
27
|
-
user: EveryAppUser;
|
|
28
|
-
env: TEnv;
|
|
29
|
-
request: Request;
|
|
30
|
-
ctx: ExecutionContextLike;
|
|
31
|
-
}
|
|
32
|
-
export interface McpToolDefinition<TEnv = Record<string, unknown>> {
|
|
33
|
-
description?: string;
|
|
34
|
-
/** JSON Schema for the tool's arguments. Defaults to an empty object schema. */
|
|
35
|
-
inputSchema?: Record<string, unknown>;
|
|
36
|
-
/**
|
|
37
|
-
* Scope required to list or call this tool, checked against the scopes the
|
|
38
|
-
* credential was granted (`user.scopes`). Omit to allow any authenticated user.
|
|
39
|
-
*/
|
|
40
|
-
scope?: string;
|
|
41
|
-
/**
|
|
42
|
-
* Tool implementation. Return a string or JSON-serializable value (wrapped as
|
|
43
|
-
* text content), or a full `{ content: [...] }` result. Thrown errors become
|
|
44
|
-
* `isError: true` tool results, not protocol errors.
|
|
45
|
-
*/
|
|
46
|
-
handler: (args: Record<string, unknown>, context: McpToolContext<TEnv>) => unknown;
|
|
47
|
-
}
|
|
48
|
-
export interface CreateMcpHandlerOptions<TEnv = Record<string, unknown>> {
|
|
49
|
-
/** Server name reported to MCP clients. */
|
|
50
|
-
name: string;
|
|
51
|
-
version?: string;
|
|
52
|
-
/** Optional usage hints surfaced to clients after initialize. */
|
|
53
|
-
instructions?: string;
|
|
54
|
-
/**
|
|
55
|
-
* Browser origins allowed to call this endpoint, in addition to the
|
|
56
|
-
* endpoint's own origin. Non-browser clients send no Origin header and are
|
|
57
|
-
* unaffected; any other present Origin is rejected with 403 (the Streamable
|
|
58
|
-
* HTTP spec's DNS-rebinding defense).
|
|
59
|
-
*/
|
|
60
|
-
allowedOrigins?: string[];
|
|
61
|
-
tools: Record<string, McpToolDefinition<TEnv>>;
|
|
62
|
-
}
|
|
63
|
-
/** Matches the everyApp() handler signature so it can be delegated to directly. */
|
|
64
|
-
export type McpRequestHandler<TEnv = Record<string, unknown>> = (request: Request, env: TEnv, ctx: ExecutionContextLike, user?: EveryAppUser | null) => Promise<Response>;
|
|
65
|
-
export declare function createMcpHandler<TEnv = Record<string, unknown>>(options: CreateMcpHandlerOptions<TEnv>): McpRequestHandler<TEnv>;
|
|
66
|
-
//# sourceMappingURL=mcp.d.ts.map
|
package/dist/server/mcp.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/server/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,eAAe,CAAC;AAUvB,MAAM,WAAW,cAAc,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC5D,IAAI,EAAE,YAAY,CAAC;IACnB,GAAG,EAAE,IAAI,CAAC;IACV,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,oBAAoB,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gFAAgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,OAAO,EAAE,CACP,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,KAC1B,OAAO,CAAC;CACd;AAED,MAAM,WAAW,uBAAuB,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACrE,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;CAChD;AAED,mFAAmF;AACnF,MAAM,MAAM,iBAAiB,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAC9D,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,IAAI,EACT,GAAG,EAAE,oBAAoB,EACzB,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI,KACvB,OAAO,CAAC,QAAQ,CAAC,CAAC;AAiDvB,wBAAgB,gBAAgB,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7D,OAAO,EAAE,uBAAuB,CAAC,IAAI,CAAC,GACrC,iBAAiB,CAAC,IAAI,CAAC,CA8IzB"}
|
package/dist/server/mcp.js
DELETED
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
import { getEveryAppUser, hasScope, } from "./everyApp.js";
|
|
2
|
-
/** Protocol revisions this handler accepts; initialize echoes the client's when supported. */
|
|
3
|
-
const SUPPORTED_PROTOCOL_VERSIONS = [
|
|
4
|
-
"2025-03-26",
|
|
5
|
-
"2025-06-18",
|
|
6
|
-
"2025-11-25",
|
|
7
|
-
];
|
|
8
|
-
const DEFAULT_PROTOCOL_VERSION = "2025-06-18";
|
|
9
|
-
function userHasScope(user, scope) {
|
|
10
|
-
return !scope || hasScope(user, scope);
|
|
11
|
-
}
|
|
12
|
-
function jsonRpcResult(id, result) {
|
|
13
|
-
return Response.json({ jsonrpc: "2.0", id, result });
|
|
14
|
-
}
|
|
15
|
-
function jsonRpcError(id, code, message) {
|
|
16
|
-
return Response.json({ jsonrpc: "2.0", id, error: { code, message } });
|
|
17
|
-
}
|
|
18
|
-
function accepted() {
|
|
19
|
-
return new Response(null, { status: 202 });
|
|
20
|
-
}
|
|
21
|
-
function toCallToolResult(value) {
|
|
22
|
-
if (value !== null &&
|
|
23
|
-
typeof value === "object" &&
|
|
24
|
-
Array.isArray(value.content)) {
|
|
25
|
-
return value;
|
|
26
|
-
}
|
|
27
|
-
const text = typeof value === "string" ? value : JSON.stringify(value ?? null);
|
|
28
|
-
return { content: [{ type: "text", text }] };
|
|
29
|
-
}
|
|
30
|
-
function negotiateProtocolVersion(params) {
|
|
31
|
-
const requested = params && typeof params === "object"
|
|
32
|
-
? params.protocolVersion
|
|
33
|
-
: undefined;
|
|
34
|
-
return typeof requested === "string" &&
|
|
35
|
-
SUPPORTED_PROTOCOL_VERSIONS.includes(requested)
|
|
36
|
-
? requested
|
|
37
|
-
: DEFAULT_PROTOCOL_VERSION;
|
|
38
|
-
}
|
|
39
|
-
export function createMcpHandler(options) {
|
|
40
|
-
const { name, version = "0.0.0", instructions, allowedOrigins = [], tools, } = options;
|
|
41
|
-
return async (request, env, ctx, user) => {
|
|
42
|
-
if (request.method !== "POST") {
|
|
43
|
-
return new Response(null, { status: 405, headers: { allow: "POST" } });
|
|
44
|
-
}
|
|
45
|
-
const origin = request.headers.get("origin");
|
|
46
|
-
if (origin &&
|
|
47
|
-
origin !== new URL(request.url).origin &&
|
|
48
|
-
!allowedOrigins.includes(origin)) {
|
|
49
|
-
return Response.json({ error: "forbidden_origin" }, { status: 403 });
|
|
50
|
-
}
|
|
51
|
-
const resolvedUser = user !== undefined ? user : await getEveryAppUser(request, env);
|
|
52
|
-
if (!resolvedUser) {
|
|
53
|
-
return Response.json({ error: "unauthenticated", message: "MCP requests require a user" }, { status: 401 });
|
|
54
|
-
}
|
|
55
|
-
const versionHeader = request.headers.get("mcp-protocol-version");
|
|
56
|
-
if (versionHeader &&
|
|
57
|
-
!SUPPORTED_PROTOCOL_VERSIONS.includes(versionHeader)) {
|
|
58
|
-
return Response.json({
|
|
59
|
-
error: "unsupported_protocol_version",
|
|
60
|
-
supported: SUPPORTED_PROTOCOL_VERSIONS,
|
|
61
|
-
}, { status: 400 });
|
|
62
|
-
}
|
|
63
|
-
let message;
|
|
64
|
-
try {
|
|
65
|
-
message = (await request.json());
|
|
66
|
-
}
|
|
67
|
-
catch {
|
|
68
|
-
return jsonRpcError(null, -32700, "parse error: body must be JSON");
|
|
69
|
-
}
|
|
70
|
-
if (Array.isArray(message)) {
|
|
71
|
-
return jsonRpcError(null, -32600, "batch requests are not supported");
|
|
72
|
-
}
|
|
73
|
-
if (message === null || typeof message !== "object") {
|
|
74
|
-
return jsonRpcError(null, -32600, "invalid JSON-RPC message");
|
|
75
|
-
}
|
|
76
|
-
if (message.jsonrpc !== "2.0") {
|
|
77
|
-
return jsonRpcError(null, -32600, 'jsonrpc must be "2.0"');
|
|
78
|
-
}
|
|
79
|
-
if ("id" in message &&
|
|
80
|
-
typeof message.id !== "string" &&
|
|
81
|
-
typeof message.id !== "number" &&
|
|
82
|
-
message.id !== null) {
|
|
83
|
-
return jsonRpcError(null, -32600, "id must be a string, number, or null");
|
|
84
|
-
}
|
|
85
|
-
// Notifications and client-side responses expect no reply body.
|
|
86
|
-
if (typeof message.method !== "string")
|
|
87
|
-
return accepted();
|
|
88
|
-
if (!("id" in message))
|
|
89
|
-
return accepted();
|
|
90
|
-
const id = message.id;
|
|
91
|
-
switch (message.method) {
|
|
92
|
-
case "initialize":
|
|
93
|
-
return jsonRpcResult(id, {
|
|
94
|
-
protocolVersion: negotiateProtocolVersion(message.params),
|
|
95
|
-
capabilities: { tools: { listChanged: false } },
|
|
96
|
-
serverInfo: { name, version },
|
|
97
|
-
...(instructions ? { instructions } : {}),
|
|
98
|
-
});
|
|
99
|
-
case "ping":
|
|
100
|
-
return jsonRpcResult(id, {});
|
|
101
|
-
case "tools/list": {
|
|
102
|
-
const visible = Object.entries(tools)
|
|
103
|
-
.filter(([, tool]) => userHasScope(resolvedUser, tool.scope))
|
|
104
|
-
.map(([toolName, tool]) => ({
|
|
105
|
-
name: toolName,
|
|
106
|
-
...(tool.description ? { description: tool.description } : {}),
|
|
107
|
-
inputSchema: tool.inputSchema ?? { type: "object", properties: {} },
|
|
108
|
-
}));
|
|
109
|
-
return jsonRpcResult(id, { tools: visible });
|
|
110
|
-
}
|
|
111
|
-
case "tools/call": {
|
|
112
|
-
const params = message.params && typeof message.params === "object"
|
|
113
|
-
? message.params
|
|
114
|
-
: {};
|
|
115
|
-
const toolName = typeof params.name === "string" ? params.name : "";
|
|
116
|
-
const tool = tools[toolName];
|
|
117
|
-
if (!tool) {
|
|
118
|
-
return jsonRpcError(id, -32602, `unknown tool: ${toolName}`);
|
|
119
|
-
}
|
|
120
|
-
if (!userHasScope(resolvedUser, tool.scope)) {
|
|
121
|
-
return jsonRpcError(id, -32602, `tool ${toolName} requires scope ${tool.scope}`);
|
|
122
|
-
}
|
|
123
|
-
const args = params.arguments && typeof params.arguments === "object"
|
|
124
|
-
? params.arguments
|
|
125
|
-
: {};
|
|
126
|
-
try {
|
|
127
|
-
const value = await tool.handler(args, {
|
|
128
|
-
user: resolvedUser,
|
|
129
|
-
env,
|
|
130
|
-
request,
|
|
131
|
-
ctx,
|
|
132
|
-
});
|
|
133
|
-
return jsonRpcResult(id, toCallToolResult(value));
|
|
134
|
-
}
|
|
135
|
-
catch (error) {
|
|
136
|
-
const text = error instanceof Error ? error.message : String(error);
|
|
137
|
-
return jsonRpcResult(id, {
|
|
138
|
-
content: [{ type: "text", text }],
|
|
139
|
-
isError: true,
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
default:
|
|
144
|
-
return jsonRpcError(id, -32601, `method not found: ${message.method}`);
|
|
145
|
-
}
|
|
146
|
-
};
|
|
147
|
-
}
|