@tomato414941/foundation 0.7.0 → 0.8.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/guide.mjs CHANGED
@@ -113,6 +113,10 @@ export function guide(connectors) {
113
113
  ' to register one: they make it at the service (redirect URL <this server>/oauth/<connector id>/callback) and',
114
114
  ' type its client ID and secret on the page. result.app_id names it. You never see or handle its secret.',
115
115
  ' GET /v1/connectors says which connectors take apps (apps.fields: what registering one asks for).',
116
+ ' A service with no connector of its own is reached through "oauth2": the owner registers an app for it naming the',
117
+ ' service and where it authorizes and hands out tokens (and, if it has them, where it says who authorized and',
118
+ ' where it takes a token back). Ask for that with {"kind":"app","input":{"connector":"oauth2"}} and steps that say',
119
+ ' where those are for that service. Connections through it yield OAUTH_ACCESS_TOKEN.',
116
120
  ' To reconnect, add "connection_id":"<existing id>" inside input. This updates that connection and keeps its id,',
117
121
  ' its scopes (add more with scopes) and the app it was made through.',
118
122
  ' Without connection_id, authorization creates a separate connection, even for the same service user. List and use',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tomato414941/foundation",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "description": "Foundation CLI: make a key, and hand what is kept to a command without it passing through the agent.",
5
5
  "type": "module",
6
6
  "engines": {
package/runtime.mjs CHANGED
@@ -109,7 +109,7 @@ Commands:
109
109
  Run a command with saved values in its environment.
110
110
  exec --inputs '<json>' -- <command> The same, with files, structured inputs, or a connected grant by id.
111
111
  exec --output '<json>' -- <command> Also save a file the command writes.
112
- guide The API guide: what Foundation keeps, and how to ask it for things.
112
+ guide Read the server's API guide (bundled reference when offline).
113
113
  version Print the version.
114
114
 
115
115
  Environment:
@@ -126,15 +126,18 @@ async function main() {
126
126
  const configured = process.env.FOUNDATION_URL || await savedUrl();
127
127
  if (action === '--help' || action === '-h' || action === 'help' || !action) { console.log(HELP); return; }
128
128
  if (action === 'guide') {
129
- let connectors;
130
129
  if (configured) {
131
130
  try {
132
- const response = await fetch(new URL('/v1/connectors', configured), { redirect: 'error', signal: AbortSignal.timeout(5_000) });
133
- const catalog = await response.json();
134
- if (response.ok && Array.isArray(catalog.connectors)) connectors = catalog.connectors;
131
+ const response = await fetch(new URL('/start', serverUrl(configured)), { redirect: 'error', signal: AbortSignal.timeout(5_000) });
132
+ if (!response.ok || response.headers.get('content-type')?.split(';')[0].trim() !== 'text/plain') throw new Error('Guide unavailable');
133
+ const instructions = await response.text();
134
+ if (!instructions.trim()) throw new Error('Empty guide');
135
+ console.log(instructions.trimEnd());
136
+ return;
135
137
  } catch {}
136
138
  }
137
- console.log(guide(connectors));
139
+ console.error(`${configured ? 'Could not read the server guide.' : 'No Foundation server configured.'} Using the bundled reference from CLI ${VERSION}; it may differ from your server.`);
140
+ console.log(guide());
138
141
  return;
139
142
  }
140
143
  const separatorAt = args.indexOf('--'), command = separatorAt >= 0 ? args.slice(separatorAt + 1) : [];