@every-app/sdk 0.3.0-rc.8 → 0.3.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/README.md +75 -74
- package/dist/cloudflare/catalogSettings.generated.d.ts +20 -6
- package/dist/cloudflare/catalogSettings.generated.d.ts.map +1 -1
- package/dist/cloudflare/catalogSettings.generated.js +45 -14
- package/dist/cloudflare/index.d.ts +1 -1
- package/dist/cloudflare/index.d.ts.map +1 -1
- package/dist/cloudflare/sentinel.d.ts +3 -0
- package/dist/cloudflare/sentinel.d.ts.map +1 -1
- package/dist/cloudflare/sentinel.js +10 -0
- package/dist/cloudflare/worker.d.ts +67 -23
- package/dist/cloudflare/worker.d.ts.map +1 -1
- package/dist/cloudflare/worker.js +68 -32
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/internal/aiDefault.d.ts +36 -79
- package/dist/internal/aiDefault.d.ts.map +1 -1
- package/dist/internal/aiDefault.js +47 -149
- package/dist/internal/aiProviders.d.ts +1 -1
- package/dist/internal/aiProviders.d.ts.map +1 -1
- package/dist/internal/aiProviders.js +2 -2
- package/dist/internal/appSettings.d.ts +140 -89
- package/dist/internal/appSettings.d.ts.map +1 -1
- package/dist/internal/appSettings.js +264 -156
- package/dist/internal/capabilities.d.ts +145 -503
- package/dist/internal/capabilities.d.ts.map +1 -1
- package/dist/internal/capabilities.js +29 -550
- package/dist/internal/catalog/commerce.js +1 -1
- package/dist/internal/catalog/comms.d.ts +37 -0
- package/dist/internal/catalog/comms.d.ts.map +1 -1
- package/dist/internal/catalog/comms.js +43 -0
- package/dist/internal/catalog/index.d.ts +72 -0
- package/dist/internal/catalog/index.d.ts.map +1 -1
- package/dist/internal/catalog/infra.d.ts +35 -0
- package/dist/internal/catalog/infra.d.ts.map +1 -1
- package/dist/internal/catalog/infra.js +65 -0
- package/dist/internal/devProviders.d.ts +1 -19
- package/dist/internal/devProviders.d.ts.map +1 -1
- package/dist/internal/devProviders.js +7 -1
- package/dist/internal/events.d.ts +52 -1
- package/dist/internal/events.d.ts.map +1 -1
- package/dist/internal/events.js +66 -2
- package/dist/internal/gatewaySettings.d.ts +6 -16
- package/dist/internal/gatewaySettings.d.ts.map +1 -1
- package/dist/internal/gatewaySettings.js +6 -24
- package/dist/internal/index.d.ts +1 -0
- package/dist/internal/index.d.ts.map +1 -1
- package/dist/internal/index.js +1 -0
- package/dist/internal/mcpOAuth.d.ts +210 -0
- package/dist/internal/mcpOAuth.d.ts.map +1 -0
- package/dist/internal/mcpOAuth.js +735 -0
- package/dist/internal/oauthClient.d.ts +7 -47
- package/dist/internal/oauthClient.d.ts.map +1 -1
- package/dist/internal/oauthClient.js +1 -115
- package/dist/internal/oauthPresets.d.ts +356 -20
- package/dist/internal/oauthPresets.d.ts.map +1 -1
- package/dist/internal/oauthPresets.js +183 -861
- package/dist/internal/oauthScopes.d.ts +43 -155
- package/dist/internal/oauthScopes.d.ts.map +1 -1
- package/dist/internal/oauthScopes.js +82 -475
- package/dist/internal/oauthSpec.d.ts +28 -71
- package/dist/internal/oauthSpec.d.ts.map +1 -1
- package/dist/internal/oauthSpec.js +172 -448
- package/dist/internal/protocol.d.ts +39 -15
- package/dist/internal/protocol.d.ts.map +1 -1
- package/dist/internal/protocol.js +40 -7
- package/dist/internal/providerApps.d.ts +2 -2
- package/dist/internal/providerApps.js +2 -2
- package/dist/internal/providerRegistry.d.ts +5 -64
- package/dist/internal/providerRegistry.d.ts.map +1 -1
- package/dist/internal/providerRegistry.js +19 -118
- package/dist/internal/providerSpec.d.ts.map +1 -1
- package/dist/internal/providerSpec.js +14 -36
- package/dist/internal/remoteMcp.d.ts +191 -47
- package/dist/internal/remoteMcp.d.ts.map +1 -1
- package/dist/internal/remoteMcp.js +338 -133
- package/dist/internal/signInProviders.d.ts +1 -1
- package/dist/internal/signInProviders.d.ts.map +1 -1
- package/dist/internal/tools.d.ts +15 -8
- package/dist/internal/tools.d.ts.map +1 -1
- package/dist/internal/tools.js +9 -8
- package/dist/manifest.d.ts +96 -28
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +1 -1
- package/dist/server/ai.d.ts +1 -93
- package/dist/server/ai.d.ts.map +1 -1
- package/dist/server/ai.js +17 -111
- package/dist/server/attribution.d.ts +10 -1
- package/dist/server/attribution.d.ts.map +1 -1
- package/dist/server/attribution.js +7 -1
- package/dist/server/connectUrl.d.ts +4 -9
- package/dist/server/connectUrl.d.ts.map +1 -1
- package/dist/server/connectUrl.js +17 -14
- package/dist/server/context.d.ts +12 -14
- package/dist/server/context.d.ts.map +1 -1
- package/dist/server/context.js +23 -25
- package/dist/server/emit.d.ts.map +1 -1
- package/dist/server/emit.js +2 -2
- package/dist/server/env.d.ts +3 -0
- package/dist/server/env.d.ts.map +1 -1
- package/dist/server/eventsEndpoint.d.ts +48 -0
- package/dist/server/eventsEndpoint.d.ts.map +1 -0
- package/dist/server/eventsEndpoint.js +145 -0
- package/dist/server/everyApp.d.ts +16 -26
- package/dist/server/everyApp.d.ts.map +1 -1
- package/dist/server/everyApp.js +22 -46
- package/dist/server/gatewayFetch.d.ts +19 -1
- package/dist/server/gatewayFetch.d.ts.map +1 -1
- package/dist/server/gatewayFetch.js +45 -3
- package/dist/server/index.d.ts +6 -9
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +4 -8
- package/dist/server/integrationFetch.d.ts +60 -72
- package/dist/server/integrationFetch.d.ts.map +1 -1
- package/dist/server/integrationFetch.js +124 -397
- package/dist/server/listMembers.d.ts.map +1 -1
- package/dist/server/listMembers.js +2 -2
- package/dist/server/refusal.d.ts +0 -9
- package/dist/server/refusal.d.ts.map +1 -1
- package/dist/server/refusal.js +0 -22
- package/dist/server/sendEmail.d.ts.map +1 -1
- package/dist/server/sendEmail.js +2 -2
- package/dist/server/tools.d.ts +17 -6
- package/dist/server/tools.d.ts.map +1 -1
- package/dist/server/tools.js +14 -4
- package/dist/server/toolsEndpoint.d.ts +2 -1
- package/dist/server/toolsEndpoint.d.ts.map +1 -1
- package/dist/server/toolsEndpoint.js +4 -3
- package/dist/server/webhooks.d.ts +56 -0
- package/dist/server/webhooks.d.ts.map +1 -0
- package/dist/server/webhooks.js +205 -0
- package/dist/testing/index.d.ts +2 -3
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +2 -6
- package/package.json +6 -1
- package/dist/server/aiBinding.d.ts +0 -68
- package/dist/server/aiBinding.d.ts.map +0 -1
- package/dist/server/aiBinding.js +0 -294
- package/dist/server/authorizeUrl.d.ts +0 -43
- package/dist/server/authorizeUrl.d.ts.map +0 -1
- package/dist/server/authorizeUrl.js +0 -106
- package/dist/server/emailBinding.d.ts +0 -72
- package/dist/server/emailBinding.d.ts.map +0 -1
- package/dist/server/emailBinding.js +0 -124
- package/dist/server/fromMcpTools.d.ts +0 -89
- package/dist/server/fromMcpTools.d.ts.map +0 -1
- package/dist/server/fromMcpTools.js +0 -192
|
@@ -8,17 +8,20 @@
|
|
|
8
8
|
* (`providers`) and a capability (`capabilities`) are the Gateway's: their
|
|
9
9
|
* keys and clients live on the Gateway Worker, set once for every app
|
|
10
10
|
* with `everyapp secret set <NAME>`. The app's own secrets (`secrets`)
|
|
11
|
-
* live on its Worker, set from its directory.
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
11
|
+
* live on its Worker, set from its directory. Everything the manifest
|
|
12
|
+
* lists at its top level is required: the app doesn't open until it is
|
|
13
|
+
* set. The rest is grouped into features (`features`): each a named set of
|
|
14
|
+
* secrets, settings and the Gateway capabilities and providers it needs,
|
|
15
|
+
* with numbered setup steps. A required feature's values are required; an
|
|
16
|
+
* optional feature is all or nothing, never blocking: off while none of
|
|
17
|
+
* its own values is set, incomplete while some are, ready once all are.
|
|
18
|
+
* Each declaration may say `why` it is needed, where it comes from
|
|
19
|
+
* (`docs`, an https URL) and, for an app's own value, `how` to get it;
|
|
20
|
+
* for providers and capabilities the registries here supply a default. An
|
|
21
|
+
* app's plain settings (`settings`: a host, a project id, a region) are
|
|
22
|
+
* held like its secrets, on its Worker, but are values rather than keys:
|
|
23
|
+
* each says what it takes (a URL, a number, one of a list) and may give a
|
|
24
|
+
* default.
|
|
22
25
|
*
|
|
23
26
|
* Everything in this module is pure and tenant-neutral: a manifest ships
|
|
24
27
|
* in a release, and what is set is asked of the caller (`isSet`), which
|
|
@@ -27,27 +30,40 @@
|
|
|
27
30
|
*/
|
|
28
31
|
import { type ApiKeyCapability, type CapabilityLookup } from "./capabilities.js";
|
|
29
32
|
import { type IsSet } from "./aiDefault.js";
|
|
30
|
-
/** A provider as `providers` lists it: its id, or an entry with
|
|
33
|
+
/** A provider as `providers` lists it: its id, or an entry with why and docs. */
|
|
31
34
|
export interface ProviderEntry extends SettingNeedFields {
|
|
32
35
|
id: string;
|
|
33
36
|
}
|
|
34
|
-
/**
|
|
35
|
-
export interface
|
|
37
|
+
/** Where one of the app's own values comes from, for whoever sets it. */
|
|
38
|
+
export interface OwnValueFields {
|
|
39
|
+
/** Where the value lives and what permission it needs (200 characters at most); may hold `{appUrl}` and `{gatewayUrl}`. */
|
|
40
|
+
how?: string;
|
|
41
|
+
/**
|
|
42
|
+
* The feature the value belongs to (its `features` key); absent for one
|
|
43
|
+
* the manifest lists at its top level.
|
|
44
|
+
*/
|
|
45
|
+
feature?: string;
|
|
46
|
+
}
|
|
47
|
+
/** A secret as `secrets` (or a feature's `secrets`) lists it: its name, or an entry. */
|
|
48
|
+
export interface SecretEntry extends SettingNeedFields, OwnValueFields {
|
|
36
49
|
name: string;
|
|
50
|
+
/** `everyapp configure` (and the deploy, for a top-level one) makes it: 32 random bytes, base64url. */
|
|
51
|
+
generate?: boolean;
|
|
52
|
+
/** The value is a file's contents (a .pem): the prompt takes a path. */
|
|
53
|
+
file?: boolean;
|
|
37
54
|
}
|
|
38
55
|
/** What a plain setting's value is: text by default, or a URL, a number, a switch. */
|
|
39
56
|
export type SettingValueType = "text" | "url" | "number" | "boolean";
|
|
40
57
|
/**
|
|
41
|
-
* An app's plain setting as `settings` lists it: a value
|
|
42
|
-
* secret (a PostHog host, a project id, a region) and differs
|
|
43
|
-
* install, set like a secret with `everyapp configure <app>` and read
|
|
58
|
+
* An app's plain setting as `settings` (or a feature's) lists it: a value
|
|
59
|
+
* that isn't a secret (a PostHog host, a project id, a region) and differs
|
|
60
|
+
* per install, set like a secret with `everyapp configure <app>` and read
|
|
44
61
|
* from `env` as a string.
|
|
45
62
|
*/
|
|
46
|
-
export interface SettingEntry {
|
|
63
|
+
export interface SettingEntry extends OwnValueFields {
|
|
47
64
|
name: string;
|
|
48
65
|
why?: string;
|
|
49
66
|
docs?: string;
|
|
50
|
-
optional?: boolean;
|
|
51
67
|
/** What it takes; `text` when not given. */
|
|
52
68
|
type?: SettingValueType;
|
|
53
69
|
/** The values it may take, for a `text` setting that is one of a list. */
|
|
@@ -55,33 +71,32 @@ export interface SettingEntry {
|
|
|
55
71
|
/** What the deploy sets it to while nobody has set it. */
|
|
56
72
|
default?: string;
|
|
57
73
|
}
|
|
74
|
+
/** One feature as the manifest declares it (`features.<id>`). */
|
|
75
|
+
export interface FeatureEntry {
|
|
76
|
+
id: string;
|
|
77
|
+
/** What people read: "GitHub". */
|
|
78
|
+
name: string;
|
|
79
|
+
/** Required features keep the app closed until set; optional ones (the default) are all or nothing. */
|
|
80
|
+
required: boolean;
|
|
81
|
+
why?: string;
|
|
82
|
+
/** Short Markdown lines, in order; may hold `{appUrl}` and `{gatewayUrl}`. */
|
|
83
|
+
steps: string[];
|
|
84
|
+
/** The Gateway capabilities and providers it needs, by id (declared under `capabilities` and `providers` too). */
|
|
85
|
+
capabilities: string[];
|
|
86
|
+
providers: string[];
|
|
87
|
+
}
|
|
58
88
|
/** What a plain setting's value must be: what `configure` checks and every surface says. */
|
|
59
89
|
export interface SettingValueRule {
|
|
60
90
|
type: SettingValueType;
|
|
61
91
|
values?: string[];
|
|
62
92
|
default?: string;
|
|
63
93
|
}
|
|
64
|
-
/** What any declaration may say about
|
|
94
|
+
/** What any declaration may say about why it is needed. */
|
|
65
95
|
export interface SettingNeedFields {
|
|
66
96
|
/** Why the app needs it, for whoever sets it (200 characters at most). */
|
|
67
97
|
why?: string;
|
|
68
98
|
/** Where the key or client comes from: an https URL. */
|
|
69
99
|
docs?: string;
|
|
70
|
-
/** The app works without it; the feature using it says so where it is used. */
|
|
71
|
-
optional?: boolean;
|
|
72
|
-
/**
|
|
73
|
-
* For an app's own secret: its setup guide, relative to the everyapp
|
|
74
|
-
* skill (`setup/main-secret.md`). Providers and capabilities take theirs
|
|
75
|
-
* from the registries and can't override it.
|
|
76
|
-
*/
|
|
77
|
-
setup?: string;
|
|
78
|
-
/**
|
|
79
|
-
* The name of a group of which one set member is enough ("AI model").
|
|
80
|
-
* Only for an app that picks among the set members at run time: the
|
|
81
|
-
* gateway refuses a call to a provider whose key isn't set, whichever
|
|
82
|
-
* others are.
|
|
83
|
-
*/
|
|
84
|
-
anyOf?: string;
|
|
85
100
|
}
|
|
86
101
|
/** The manifest fields this module reads, as a stored or authored manifest has them. */
|
|
87
102
|
export interface SettingsManifestLike {
|
|
@@ -91,21 +106,34 @@ export interface SettingsManifestLike {
|
|
|
91
106
|
};
|
|
92
107
|
readonly secrets?: ReadonlyArray<string | SecretEntry>;
|
|
93
108
|
readonly settings?: ReadonlyArray<SettingEntry>;
|
|
109
|
+
/** Feature id → its name, need, steps and values (`features` in everyapp.config.ts). */
|
|
110
|
+
readonly features?: {
|
|
111
|
+
readonly [id: string]: unknown;
|
|
112
|
+
};
|
|
94
113
|
readonly ai?: {
|
|
95
|
-
readonly routes?: readonly string[];
|
|
96
114
|
/** The app needs the Gateway's default chat model (`/api/ai/default`): `true`, or an entry with its need. */
|
|
97
115
|
readonly chat?: boolean | SettingNeedFields;
|
|
98
116
|
};
|
|
99
|
-
/**
|
|
117
|
+
/**
|
|
118
|
+
* A remote MCP app's registration (./remoteMcp.ts). Its credential is
|
|
119
|
+
* the provider it lists under `capabilities`; a block that can't be read
|
|
120
|
+
* (one from before provider credentials) is a `remote-mcp` setting that
|
|
121
|
+
* is never set: remove the app and add it again.
|
|
122
|
+
*/
|
|
100
123
|
readonly remote?: unknown;
|
|
101
124
|
readonly name?: string;
|
|
102
125
|
}
|
|
103
126
|
export type SettingKind = "provider" | "capability" | "secret"
|
|
104
127
|
/** An app's plain setting (`settings`): a value on its Worker, not a key. */
|
|
105
|
-
| "setting"
|
|
128
|
+
| "setting"
|
|
106
129
|
/** The Gateway's default model provider (`ai.chat`): one key of any provider in the order, or the operator's choice. */
|
|
107
130
|
| "ai-default"
|
|
108
|
-
/**
|
|
131
|
+
/**
|
|
132
|
+
* A remote MCP app's registration that can't be read (./remoteMcp.ts:
|
|
133
|
+
* one from before provider credentials): no names, never set, fixed by
|
|
134
|
+
* removing the app and adding it again. A readable registration's
|
|
135
|
+
* credential is the provider under `capabilities`, a `capability`.
|
|
136
|
+
*/
|
|
109
137
|
| "remote-mcp";
|
|
110
138
|
/** Which Worker holds a setting: the Gateway's, or the app's own. */
|
|
111
139
|
export type SettingHolder = "gateway" | "app";
|
|
@@ -113,23 +141,18 @@ export type SettingNeed = {
|
|
|
113
141
|
kind: "required";
|
|
114
142
|
} | {
|
|
115
143
|
kind: "optional";
|
|
116
|
-
} | {
|
|
117
|
-
kind: "anyOf";
|
|
118
|
-
group: string;
|
|
119
144
|
};
|
|
120
145
|
/** What `appSettings` may be told about the Gateway, for the default model provider. */
|
|
121
146
|
export interface AppSettingsOptions {
|
|
122
|
-
/** The operator's stored default provider (`everyapp ai default`), or none. */
|
|
123
|
-
aiDefault?: string | null;
|
|
124
147
|
/** What is set, to put the configured provider first; absent, the order decides. */
|
|
125
148
|
isSet?: IsSet;
|
|
126
149
|
}
|
|
127
150
|
/** One thing the app needs set, as the manifest declares it. */
|
|
128
151
|
export interface AppSetting {
|
|
129
152
|
kind: SettingKind;
|
|
130
|
-
/** The provider id, capability id or secret name
|
|
153
|
+
/** The provider id, capability id or secret name. */
|
|
131
154
|
id: string;
|
|
132
|
-
/** "OpenRouter", "DataForSEO", "MAIN_SECRET"
|
|
155
|
+
/** "OpenRouter", "DataForSEO", "MAIN_SECRET". */
|
|
133
156
|
label: string;
|
|
134
157
|
holder: SettingHolder;
|
|
135
158
|
/** Every one of these must be set for the setting to count as set (or any one group of `alternatives`). */
|
|
@@ -146,13 +169,21 @@ export interface AppSetting {
|
|
|
146
169
|
why?: string;
|
|
147
170
|
docs?: string;
|
|
148
171
|
/**
|
|
149
|
-
*
|
|
150
|
-
* (`setup/dataforseo.md
|
|
151
|
-
*
|
|
152
|
-
*
|
|
153
|
-
*
|
|
172
|
+
* What an agent reads to set a Gateway setting up end to end: the
|
|
173
|
+
* registry's setup guide, relative to the agent docs (`setup/dataforseo.md`
|
|
174
|
+
* is https://everyapp.com/docs/agent/setup/dataforseo.md; in the checkout
|
|
175
|
+
* `landing-page/content/agent/setup/…`). An app's own value has its
|
|
176
|
+
* feature's steps and its `how` instead.
|
|
154
177
|
*/
|
|
155
178
|
setup?: string;
|
|
179
|
+
/** The feature it belongs to (a `features` key); absent for a top-level declaration. */
|
|
180
|
+
feature?: string;
|
|
181
|
+
/** For an app's own value: where it lives and what permission it needs, placeholders unfilled. */
|
|
182
|
+
how?: string;
|
|
183
|
+
/** An app's own secret `configure` makes when unset. */
|
|
184
|
+
generate?: boolean;
|
|
185
|
+
/** An app's own secret whose value is a file's contents. */
|
|
186
|
+
file?: boolean;
|
|
156
187
|
/**
|
|
157
188
|
* What the key is and where it comes from, in a sentence or three, from
|
|
158
189
|
* the provider's entry (its `hint`, and each secret's own after it):
|
|
@@ -175,45 +206,56 @@ export interface EvaluatedSetting extends AppSetting {
|
|
|
175
206
|
* Worker whose secret names were never recorded), which never blocks.
|
|
176
207
|
*/
|
|
177
208
|
set: boolean | null;
|
|
178
|
-
/** This setting keeps the app from opening: required and unset
|
|
209
|
+
/** This setting keeps the app from opening: required and unset. */
|
|
179
210
|
blocking: boolean;
|
|
180
211
|
}
|
|
181
|
-
/**
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
212
|
+
/**
|
|
213
|
+
* A feature's state: `off` while none of its own values is set (an
|
|
214
|
+
* optional feature that's off never blocks), `incomplete` while some are
|
|
215
|
+
* and others aren't (a warning, never a block, for an optional one),
|
|
216
|
+
* `ready` once every value and every Gateway setting it needs is set.
|
|
217
|
+
*/
|
|
218
|
+
export type FeatureState = "off" | "incomplete" | "ready";
|
|
219
|
+
/** A feature with its settings evaluated. */
|
|
220
|
+
export interface FeatureReport extends FeatureEntry {
|
|
221
|
+
state: FeatureState;
|
|
222
|
+
/** Its own values and the Gateway settings it needs, in manifest order. */
|
|
223
|
+
settings: EvaluatedSetting[];
|
|
186
224
|
}
|
|
187
225
|
/** What `evaluateAppSettings` finds: whether the app opens, and every setting's state. */
|
|
188
226
|
export interface AppSettingsReport {
|
|
189
|
-
/** No required setting is unset
|
|
227
|
+
/** No required setting is unset. */
|
|
190
228
|
ready: boolean;
|
|
191
|
-
/** Every setting, in manifest order: providers, capabilities,
|
|
229
|
+
/** Every setting, in manifest order: providers, capabilities, secrets, settings. */
|
|
192
230
|
settings: EvaluatedSetting[];
|
|
193
|
-
groups: AnyOfGroup[];
|
|
194
231
|
/** The settings that keep the app closed, in manifest order. */
|
|
195
232
|
unmet: EvaluatedSetting[];
|
|
233
|
+
/** Every feature, in manifest order. */
|
|
234
|
+
features: FeatureReport[];
|
|
196
235
|
}
|
|
197
|
-
/** The
|
|
198
|
-
export declare function
|
|
236
|
+
/** The features the manifest declares, in order, each read whatever a stored row holds. */
|
|
237
|
+
export declare function featureEntries(manifest: Pick<SettingsManifestLike, "features">): FeatureEntry[];
|
|
199
238
|
/** The providers the manifest lists, each as an entry whatever form it took. */
|
|
200
239
|
export declare function providerEntries(manifest: Pick<SettingsManifestLike, "providers">): ProviderEntry[];
|
|
201
240
|
/** The provider ids the manifest lists, in order. */
|
|
202
241
|
export declare function providerIds(manifest: Pick<SettingsManifestLike, "providers">): string[];
|
|
203
|
-
/**
|
|
204
|
-
|
|
242
|
+
/**
|
|
243
|
+
* The app's own secrets the manifest lists, each as an entry whatever form
|
|
244
|
+
* it took: the top-level ones, then each feature's (tagged with it).
|
|
245
|
+
*/
|
|
246
|
+
export declare function secretEntries(manifest: Pick<SettingsManifestLike, "secrets" | "features">): SecretEntry[];
|
|
205
247
|
/** The names of the app's own secrets, in order. */
|
|
206
|
-
export declare function secretNames(manifest: Pick<SettingsManifestLike, "secrets">): string[];
|
|
207
|
-
/** The app's plain settings the manifest lists, each as an entry. */
|
|
208
|
-
export declare function settingEntries(manifest: Pick<SettingsManifestLike, "settings">): SettingEntry[];
|
|
248
|
+
export declare function secretNames(manifest: Pick<SettingsManifestLike, "secrets" | "features">): string[];
|
|
249
|
+
/** The app's plain settings the manifest lists, each as an entry: the top-level ones, then each feature's. */
|
|
250
|
+
export declare function settingEntries(manifest: Pick<SettingsManifestLike, "settings" | "features">): SettingEntry[];
|
|
209
251
|
/** The names of the app's plain settings, in order. */
|
|
210
|
-
export declare function settingNames(manifest: Pick<SettingsManifestLike, "settings">): string[];
|
|
252
|
+
export declare function settingNames(manifest: Pick<SettingsManifestLike, "settings" | "features">): string[];
|
|
211
253
|
/**
|
|
212
254
|
* Every name the manifest puts on the app's own Workers: its secrets,
|
|
213
255
|
* then its plain settings. What `secret set` routes to the app and what
|
|
214
256
|
* `apps.secret_names` records.
|
|
215
257
|
*/
|
|
216
|
-
export declare function appWorkerNames(manifest: Pick<SettingsManifestLike, "secrets" | "settings">): string[];
|
|
258
|
+
export declare function appWorkerNames(manifest: Pick<SettingsManifestLike, "secrets" | "settings" | "features">): string[];
|
|
217
259
|
/** A plain setting's rule, from its entry. */
|
|
218
260
|
export declare function settingValueRule(entry: SettingEntry): SettingValueRule;
|
|
219
261
|
/**
|
|
@@ -228,8 +270,7 @@ export declare function settingValueTakes(rule: SettingValueRule): string;
|
|
|
228
270
|
export declare function settingValueProblem(rule: Pick<SettingValueRule, "type" | "values">, value: string): string | null;
|
|
229
271
|
/**
|
|
230
272
|
* Every setting the manifest declares, in manifest order: its AI
|
|
231
|
-
* providers, its capabilities, the
|
|
232
|
-
* asks for any, then the app's own secrets. A provider or capability the
|
|
273
|
+
* providers, its capabilities, then the app's own secrets. A provider or capability the
|
|
233
274
|
* gateway doesn't offer contributes nothing (the manifest validator refuses
|
|
234
275
|
* it elsewhere); so does a capability with nothing to set (`members`),
|
|
235
276
|
* which is always set. `lookup` is where ids are found: the catalog alone
|
|
@@ -244,38 +285,39 @@ export interface EvaluateOptions {
|
|
|
244
285
|
* to them.
|
|
245
286
|
*/
|
|
246
287
|
readiness?: (setting: AppSetting) => boolean | null | undefined;
|
|
288
|
+
/** The manifest's features ({@link featureEntries}), for their states; none by default. */
|
|
289
|
+
features?: readonly FeatureEntry[];
|
|
247
290
|
}
|
|
248
291
|
/**
|
|
249
292
|
* Every setting against what is set. `isSet` answers per holder and name:
|
|
250
293
|
* true, false, or null when it can't tell (the registry never recorded
|
|
251
|
-
* the app Worker's secret names), which never blocks.
|
|
252
|
-
*
|
|
253
|
-
* member blocks.
|
|
294
|
+
* the app Worker's secret names), which never blocks. A required setting
|
|
295
|
+
* that is unset blocks; an optional one (an optional feature's) never does.
|
|
254
296
|
*/
|
|
255
297
|
export declare function evaluateAppSettings(settings: readonly AppSetting[], isSet: (holder: SettingHolder, name: string) => boolean | null, options?: EvaluateOptions): AppSettingsReport;
|
|
256
298
|
/** The one command that opens the app. */
|
|
257
299
|
export interface SetupCommand {
|
|
258
300
|
/**
|
|
259
301
|
* `everyapp configure <app>`: asks for every required setting the app
|
|
260
|
-
* lacks, then offers
|
|
302
|
+
* lacks, feature by feature, then offers its optional features, and sets
|
|
303
|
+
* each where it is held.
|
|
261
304
|
*/
|
|
262
305
|
command: string;
|
|
263
306
|
}
|
|
264
307
|
/**
|
|
265
308
|
* What to run for an app that needs setup: `everyapp configure <app>`,
|
|
266
309
|
* which reads the app's manifest (from the registry, so it runs from
|
|
267
|
-
* anywhere), prompts for each unmet setting
|
|
268
|
-
*
|
|
310
|
+
* anywhere), prompts for each unmet setting, feature by feature, and sets
|
|
311
|
+
* them where they are held. Null when
|
|
269
312
|
* the app is ready. `cli` is how the operator runs everyapp (`pnpm
|
|
270
313
|
* everyapp` from a checkout). Scripts that set one name at a time use
|
|
271
314
|
* `everyapp secret set NAME [--app <id>]` instead.
|
|
272
315
|
*
|
|
273
316
|
* A provider app (`provider`: the gateway's own, with no Worker and no
|
|
274
317
|
* directory; `everyapp mcp on <id>`, an MCP app) has nothing to configure: its
|
|
275
|
-
* command is the `secret set` of its Gateway key
|
|
276
|
-
* unmet any-of group), as `mcp list` says it.
|
|
318
|
+
* command is the `secret set` of its Gateway key, as `mcp list` says it.
|
|
277
319
|
*/
|
|
278
|
-
export declare function setupCommand(report: Pick<AppSettingsReport, "unmet"
|
|
320
|
+
export declare function setupCommand(report: Pick<AppSettingsReport, "unmet">, { cli, appId, provider, }: {
|
|
279
321
|
cli: string;
|
|
280
322
|
appId: string;
|
|
281
323
|
provider?: boolean;
|
|
@@ -286,22 +328,25 @@ export type AppSetupSetting = Omit<EvaluatedSetting, "alsoReads">;
|
|
|
286
328
|
* An app's setup state as every surface shows it, the same on the
|
|
287
329
|
* gateway's app lists (`setup`), `everyapp status --json`
|
|
288
330
|
* (`apps[].setup`) and `everyapp secret list --json`: whether it opens,
|
|
289
|
-
* every setting with its state,
|
|
290
|
-
* that opens it, `everyapp configure <app>` (null when it is
|
|
291
|
-
* when whoever reads this can't run it: a shared app seen from
|
|
292
|
-
* organization).
|
|
331
|
+
* every setting with its state, every feature with its state, and the
|
|
332
|
+
* one command that opens it, `everyapp configure <app>` (null when it is
|
|
333
|
+
* ready, or when whoever reads this can't run it: a shared app seen from
|
|
334
|
+
* another organization).
|
|
293
335
|
*/
|
|
294
336
|
export interface AppSetup {
|
|
295
337
|
ready: boolean;
|
|
296
338
|
settings: AppSetupSetting[];
|
|
297
339
|
unmet: AppSetupSetting[];
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
met: boolean;
|
|
301
|
-
members: string[];
|
|
302
|
-
}>;
|
|
340
|
+
/** Each feature: its name, need, steps (placeholders unfilled), state, and its settings' ids. */
|
|
341
|
+
features: AppSetupFeature[];
|
|
303
342
|
command: SetupCommand | null;
|
|
304
343
|
}
|
|
344
|
+
/** One feature as `AppSetup` carries it. */
|
|
345
|
+
export interface AppSetupFeature extends FeatureEntry {
|
|
346
|
+
state: FeatureState;
|
|
347
|
+
/** The ids of its settings (in `settings`), in manifest order. */
|
|
348
|
+
settings: string[];
|
|
349
|
+
}
|
|
305
350
|
export declare function appSetupOf(report: AppSettingsReport, options: {
|
|
306
351
|
cli: string;
|
|
307
352
|
appId: string;
|
|
@@ -312,4 +357,10 @@ export declare function appSetupOf(report: AppSettingsReport, options: {
|
|
|
312
357
|
export declare function providerLabel(id: string, lookup?: CapabilityLookup): string;
|
|
313
358
|
/** The capability `id` names in `lookup`, as an API-key provider, or undefined. */
|
|
314
359
|
export declare function apiKeyCapabilityOf(id: string, lookup?: CapabilityLookup): ApiKeyCapability | undefined;
|
|
360
|
+
/**
|
|
361
|
+
* A fresh value for a secret the manifest marks `generate: true`: 32
|
|
362
|
+
* bytes from the platform's cryptographic random source, base64url
|
|
363
|
+
* without padding (43 characters).
|
|
364
|
+
*/
|
|
365
|
+
export declare function generatedSecret(): string;
|
|
315
366
|
//# sourceMappingURL=appSettings.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appSettings.d.ts","sourceRoot":"","sources":["../../src/internal/appSettings.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"appSettings.d.ts","sourceRoot":"","sources":["../../src/internal/appSettings.ts"],"names":[],"mappings":"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"}
|