@every-app/sdk 0.2.0 → 0.3.0-rc.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.
Files changed (113) hide show
  1. package/README.md +608 -2
  2. package/dist/cloudflare/index.d.ts +22 -0
  3. package/dist/cloudflare/index.d.ts.map +1 -0
  4. package/dist/cloudflare/index.js +21 -0
  5. package/dist/cloudflare/sentinel.d.ts +69 -0
  6. package/dist/cloudflare/sentinel.d.ts.map +1 -0
  7. package/dist/cloudflare/sentinel.js +50 -0
  8. package/dist/cloudflare/worker.d.ts +511 -0
  9. package/dist/cloudflare/worker.d.ts.map +1 -0
  10. package/dist/cloudflare/worker.js +738 -0
  11. package/dist/dev/index.d.ts +8 -0
  12. package/dist/dev/index.d.ts.map +1 -0
  13. package/dist/dev/index.js +7 -0
  14. package/dist/dev/keypair.d.ts +24 -0
  15. package/dist/dev/keypair.d.ts.map +1 -0
  16. package/dist/dev/keypair.js +60 -0
  17. package/dist/internal/aiProviders.d.ts +67 -0
  18. package/dist/internal/aiProviders.d.ts.map +1 -0
  19. package/dist/internal/aiProviders.js +220 -0
  20. package/dist/internal/appSettings.d.ts +237 -0
  21. package/dist/internal/appSettings.d.ts.map +1 -0
  22. package/dist/internal/appSettings.js +374 -0
  23. package/dist/internal/capabilities.d.ts +1344 -0
  24. package/dist/internal/capabilities.d.ts.map +1 -0
  25. package/dist/internal/capabilities.js +1521 -0
  26. package/dist/internal/devProviders.d.ts +49 -0
  27. package/dist/internal/devProviders.d.ts.map +1 -0
  28. package/dist/internal/devProviders.js +62 -0
  29. package/dist/internal/email.d.ts +280 -0
  30. package/dist/internal/email.d.ts.map +1 -0
  31. package/dist/internal/email.js +613 -0
  32. package/dist/internal/events.d.ts +182 -0
  33. package/dist/internal/events.d.ts.map +1 -0
  34. package/dist/internal/events.js +324 -0
  35. package/dist/internal/gatewaySettings.d.ts +82 -0
  36. package/dist/internal/gatewaySettings.d.ts.map +1 -0
  37. package/dist/internal/gatewaySettings.js +209 -0
  38. package/dist/internal/identity.d.ts +18 -3
  39. package/dist/internal/identity.d.ts.map +1 -1
  40. package/dist/internal/identity.js +53 -14
  41. package/dist/internal/index.d.ts +17 -1
  42. package/dist/internal/index.d.ts.map +1 -1
  43. package/dist/internal/index.js +17 -1
  44. package/dist/internal/members.d.ts +35 -0
  45. package/dist/internal/members.d.ts.map +1 -0
  46. package/dist/internal/members.js +7 -0
  47. package/dist/internal/oauthClient.d.ts +63 -0
  48. package/dist/internal/oauthClient.d.ts.map +1 -0
  49. package/dist/internal/oauthClient.js +194 -0
  50. package/dist/internal/oauthScopes.d.ts +117 -0
  51. package/dist/internal/oauthScopes.d.ts.map +1 -0
  52. package/dist/internal/oauthScopes.js +416 -0
  53. package/dist/internal/organizationName.d.ts +18 -0
  54. package/dist/internal/organizationName.d.ts.map +1 -0
  55. package/dist/internal/organizationName.js +24 -0
  56. package/dist/internal/protocol.d.ts +86 -2
  57. package/dist/internal/protocol.d.ts.map +1 -1
  58. package/dist/internal/protocol.js +112 -1
  59. package/dist/internal/providerApps.d.ts +75 -0
  60. package/dist/internal/providerApps.d.ts.map +1 -0
  61. package/dist/internal/providerApps.js +59 -0
  62. package/dist/internal/providerRegistry.d.ts +147 -0
  63. package/dist/internal/providerRegistry.d.ts.map +1 -0
  64. package/dist/internal/providerRegistry.js +262 -0
  65. package/dist/internal/providerSpec.d.ts +55 -0
  66. package/dist/internal/providerSpec.d.ts.map +1 -0
  67. package/dist/internal/providerSpec.js +746 -0
  68. package/dist/internal/remoteMcp.d.ts +188 -0
  69. package/dist/internal/remoteMcp.d.ts.map +1 -0
  70. package/dist/internal/remoteMcp.js +543 -0
  71. package/dist/internal/tools.d.ts +115 -0
  72. package/dist/internal/tools.d.ts.map +1 -0
  73. package/dist/internal/tools.js +80 -0
  74. package/dist/server/attribution.d.ts +39 -0
  75. package/dist/server/attribution.d.ts.map +1 -0
  76. package/dist/server/attribution.js +67 -0
  77. package/dist/server/authorizeUrl.d.ts +43 -0
  78. package/dist/server/authorizeUrl.d.ts.map +1 -0
  79. package/dist/server/authorizeUrl.js +110 -0
  80. package/dist/server/emit.d.ts +63 -0
  81. package/dist/server/emit.d.ts.map +1 -0
  82. package/dist/server/emit.js +101 -0
  83. package/dist/server/everyApp.d.ts +38 -12
  84. package/dist/server/everyApp.d.ts.map +1 -1
  85. package/dist/server/everyApp.js +92 -28
  86. package/dist/server/gatewayFetch.d.ts +24 -8
  87. package/dist/server/gatewayFetch.d.ts.map +1 -1
  88. package/dist/server/gatewayFetch.js +81 -36
  89. package/dist/server/index.d.ts +10 -1
  90. package/dist/server/index.d.ts.map +1 -1
  91. package/dist/server/index.js +8 -1
  92. package/dist/server/integrationFetch.d.ts +131 -0
  93. package/dist/server/integrationFetch.d.ts.map +1 -0
  94. package/dist/server/integrationFetch.js +526 -0
  95. package/dist/server/listMembers.d.ts +32 -0
  96. package/dist/server/listMembers.d.ts.map +1 -0
  97. package/dist/server/listMembers.js +74 -0
  98. package/dist/server/nodeServer.d.ts +48 -0
  99. package/dist/server/nodeServer.d.ts.map +1 -0
  100. package/dist/server/nodeServer.js +45 -0
  101. package/dist/server/sendEmail.d.ts +39 -0
  102. package/dist/server/sendEmail.d.ts.map +1 -0
  103. package/dist/server/sendEmail.js +114 -0
  104. package/dist/server/tools.d.ts +184 -0
  105. package/dist/server/tools.d.ts.map +1 -0
  106. package/dist/server/tools.js +347 -0
  107. package/dist/server/toolsEndpoint.d.ts +32 -0
  108. package/dist/server/toolsEndpoint.d.ts.map +1 -0
  109. package/dist/server/toolsEndpoint.js +231 -0
  110. package/package.json +30 -17
  111. package/dist/server/mcp.d.ts +0 -66
  112. package/dist/server/mcp.d.ts.map +0 -1
  113. package/dist/server/mcp.js +0 -147
@@ -0,0 +1,188 @@
1
+ import { type ToolRisk } from "./tools.js";
2
+ export declare const REMOTE_MCP_AUTH_KINDS: readonly ["none", "bearer", "header", "basic", "oauth"];
3
+ export type RemoteMcpAuthKind = (typeof REMOTE_MCP_AUTH_KINDS)[number];
4
+ /**
5
+ * How the Gateway authenticates to the server. `secret` is the name of
6
+ * the Gateway setting holding the value ({@link remoteMcpSecretName}),
7
+ * never the value. `oauth` is recorded so the app can say what the server
8
+ * wants; it is not served (the design's section 10).
9
+ */
10
+ export type RemoteMcpAuth = {
11
+ kind: "none";
12
+ }
13
+ /** `Authorization: Bearer <value>`. */
14
+ | {
15
+ kind: "bearer";
16
+ secret: string;
17
+ }
18
+ /** `<header>: <prefix><value>`. */
19
+ | {
20
+ kind: "header";
21
+ secret: string;
22
+ header: string;
23
+ prefix?: string;
24
+ }
25
+ /** The value is `user:password`; sent as `Authorization: Basic <base64>`. */
26
+ | {
27
+ kind: "basic";
28
+ secret: string;
29
+ } | {
30
+ kind: "oauth";
31
+ };
32
+ /**
33
+ * How a tool's risk is decided for the app. `annotations`: from the
34
+ * server's hints ({@link remoteToolRisk}); `read` or `write`: every tool,
35
+ * whatever it says. A per-tool override wins over all three.
36
+ */
37
+ export declare const REMOTE_MCP_RISK_DEFAULTS: readonly ["annotations", "read", "write"];
38
+ export type RemoteMcpRiskDefault = (typeof REMOTE_MCP_RISK_DEFAULTS)[number];
39
+ /** The operator's say about one tool, keyed by the server's own tool name. */
40
+ export interface RemoteMcpToolOverride {
41
+ risk?: ToolRisk;
42
+ /** False: left out of the Gateway's catalog; a call answers Unknown tool. */
43
+ enabled?: boolean;
44
+ }
45
+ export interface RemoteMcpBlock {
46
+ /** The one address the Gateway fetches and sends the credential to. */
47
+ url: string;
48
+ auth: RemoteMcpAuth;
49
+ risk: RemoteMcpRiskDefault;
50
+ tools: Record<string, RemoteMcpToolOverride>;
51
+ /** Bumped on every change of the block, so the snapshot re-lists. */
52
+ rev: number;
53
+ }
54
+ /** The manifest a remote MCP app's row stores. */
55
+ export interface RemoteMcpManifest {
56
+ id: string;
57
+ name: string;
58
+ description: string;
59
+ remote: RemoteMcpBlock;
60
+ }
61
+ /** The manifest fields the Gateway reads, as a stored manifest has them. */
62
+ export interface RemoteMcpManifestLike {
63
+ readonly remote?: unknown;
64
+ }
65
+ /** The default credential name for an app id: `treg` → `TREG_MCP_TOKEN`. */
66
+ export declare function remoteMcpSecretName(id: string): string;
67
+ /** Whether `id` can be a remote MCP app's id (kebab-case, at most 32, not reserved, not a built-in's). */
68
+ export declare function remoteMcpIdProblem(id: string): string | null;
69
+ /**
70
+ * An app id from the server's URL: the host's registrable name, `www`,
71
+ * `mcp` and `api` dropped (`https://mcp.deepwiki.com/mcp` → `deepwiki`,
72
+ * `https://treg.to/mcp/` → `treg`); null when nothing usable is left (an
73
+ * IP, `localhost`), in which case the caller asks for `--name`.
74
+ */
75
+ export declare function remoteMcpIdFromUrl(url: string): string | null;
76
+ export interface RemoteMcpUrlEnv {
77
+ /** The Gateway's own URL (`GATEWAY_URL`): its origin is refused, and `http://` opens local dev. */
78
+ gatewayUrl: string;
79
+ /** The apps' domain (`APP_BASE_DOMAIN`): every host under it is refused. */
80
+ appBaseDomain?: string | null;
81
+ /** The hosted third-party apps' domain (`THIRD_PARTY_DOMAIN`): likewise. */
82
+ thirdPartyDomain?: string | null;
83
+ }
84
+ /** The hosts whose keys the Gateway holds: a remote server is never one of them. */
85
+ export declare function reservedUpstreamHosts(): string[];
86
+ /**
87
+ * Why `url` can't be a remote MCP server's address, or null when it can:
88
+ * `https:` (or `http:` and loopback hosts only while the Gateway itself
89
+ * runs on `http://`, local dev), a host name rather than an address, no
90
+ * credentials or fragment in it, not the Gateway's own origin or one of
91
+ * its app hosts, and not a provider whose key the Gateway holds. The
92
+ * Gateway checks the stored URL again before every fetch, so a row edited
93
+ * by hand is refused the same way.
94
+ */
95
+ export declare function remoteMcpUrlProblem(url: string, env: RemoteMcpUrlEnv): string | null;
96
+ /** The credential name's problem, or null: in the family, and bounded. */
97
+ export declare function remoteMcpSecretProblem(name: unknown): string | null;
98
+ /** The auth block's problem, or the block as typed. */
99
+ export declare function parseRemoteMcpAuth(raw: unknown): {
100
+ ok: true;
101
+ auth: RemoteMcpAuth;
102
+ } | {
103
+ ok: false;
104
+ problem: string;
105
+ };
106
+ /**
107
+ * The `remote` block of a stored manifest, checked field by field (a row
108
+ * edited by hand must not make the Gateway send a credential anywhere the
109
+ * rules refuse), or why it can't be read. The URL is checked against the
110
+ * Gateway's environment by the caller ({@link remoteMcpUrlProblem}).
111
+ */
112
+ export declare function parseRemoteMcpBlock(raw: unknown): {
113
+ ok: true;
114
+ block: RemoteMcpBlock;
115
+ } | {
116
+ ok: false;
117
+ problem: string;
118
+ };
119
+ /**
120
+ * The `remote` block of a stored manifest, or null when the manifest has
121
+ * none (a built-in provider app's, a deployed app's) or it can't be read
122
+ * (such a row is a provider row the Gateway serves nothing for and lists
123
+ * as needing setup, see app-setup).
124
+ */
125
+ export declare function remoteMcpOf(manifest: unknown): RemoteMcpBlock | null;
126
+ /** Whether a stored manifest declares a remote MCP server at all (well-formed or not). */
127
+ export declare function hasRemoteMcpBlock(manifest: unknown): boolean;
128
+ /** The credential's setting name the block declares, if its kind takes one. */
129
+ export declare function remoteMcpSecretOf(auth: RemoteMcpAuth): string | null;
130
+ /**
131
+ * A description for a row that gave none: the server's origin, read as a
132
+ * sentence. The origin only: a path or query may carry something the
133
+ * registrar meant for the server alone, and the description reaches every
134
+ * member with access and every AI client.
135
+ */
136
+ export declare function remoteMcpDefaultDescription(name: string, url: string): string;
137
+ /**
138
+ * The operator's override for a server tool: by the server's name, or by
139
+ * a name that becomes the same ToolBus name ({@link normalizeRemoteToolName}),
140
+ * so a server that renames `send-mail` to `send_mail` can't bring a tool the
141
+ * operator turned off back under the same listed name.
142
+ */
143
+ export declare function remoteToolOverride(block: Pick<RemoteMcpBlock, "tools">, upstreamName: string): RemoteMcpToolOverride | undefined;
144
+ /** Whether a server's tool name can travel in an HTTP header (`Mcp-Name`): visible ASCII, bounded. */
145
+ export declare function isHeaderSafeToolName(name: string): boolean;
146
+ /** The manifest a remote MCP app's row stores, from what the registrar gave. */
147
+ export declare function remoteMcpAppManifest(input: {
148
+ id: string;
149
+ name?: string | null;
150
+ description?: string | null;
151
+ remote: RemoteMcpBlock;
152
+ }): RemoteMcpManifest;
153
+ /** How a tool got its risk: the server's hint, the app's default, the operator's override, or the fallback. */
154
+ export type RemoteToolRiskSource = "hint" | "app" | "override" | "default";
155
+ /**
156
+ * A tool's risk for the Gateway. An override wins; then the app's `read`
157
+ * or `write` default; then the server's hints, read conservatively: an
158
+ * explicit `readOnlyHint: true` is `read`, an explicit `destructiveHint:
159
+ * true` is `destructive` (hidden until approvals exist), and anything
160
+ * else, a missing hint included, is `write`. The spec's missing-means-true
161
+ * default for `destructiveHint` is not followed: it would hide every
162
+ * unhinted tool.
163
+ */
164
+ export declare function remoteToolRisk(hints: {
165
+ readOnlyHint?: unknown;
166
+ destructiveHint?: unknown;
167
+ } | undefined, block: Pick<RemoteMcpBlock, "risk" | "tools">, upstreamName: string): {
168
+ risk: ToolRisk;
169
+ source: RemoteToolRiskSource;
170
+ };
171
+ /** Whether the operator left the tool on (the default). */
172
+ export declare function remoteToolEnabled(block: Pick<RemoteMcpBlock, "tools">, upstreamName: string): boolean;
173
+ /**
174
+ * A server's tool name as the ToolBus lists it: lowercase snake_case, at
175
+ * most 48 characters (`TOOL_NAME_PATTERN`). camelCase is split
176
+ * (`getUser` → `get_user`), `-`, `.`, `/` and spaces become `_`, anything
177
+ * else is dropped, runs of `_` collapse, and a leading digit gets a `t_`
178
+ * in front. Null when nothing usable is left.
179
+ */
180
+ export declare function normalizeRemoteToolName(name: string): string | null;
181
+ /**
182
+ * The request headers that carry the credential for `auth`, from the
183
+ * setting's value. The value never appears anywhere else.
184
+ */
185
+ export declare function remoteMcpAuthHeaders(auth: RemoteMcpAuth, value: string): Record<string, string>;
186
+ /** Plain words for an auth kind, for lists and dialogs. */
187
+ export declare function remoteMcpAuthLabel(auth: RemoteMcpAuth): string;
188
+ //# sourceMappingURL=remoteMcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remoteMcp.d.ts","sourceRoot":"","sources":["../../src/internal/remoteMcp.ts"],"names":[],"mappings":"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"}