@modelprofile.com/flexharness-providers 7.0.1 → 8.1.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.
@@ -22,11 +22,15 @@ const utf8ByteLength = (valueArg) => textEncoder.encode(valueArg).byteLength;
22
22
  export class OpenAiChatGptAuthError extends Error {
23
23
  status;
24
24
  body;
25
+ requestOutcome;
26
+ retryAfterMs;
25
27
  constructor(message, options = {}) {
26
28
  super(message);
27
29
  this.name = 'OpenAiChatGptAuthError';
28
30
  this.status = options.status;
29
31
  this.body = options.body;
32
+ this.requestOutcome = options.requestOutcome;
33
+ this.retryAfterMs = options.retryAfterMs;
30
34
  }
31
35
  }
32
36
  function getFetch(options) {
@@ -148,10 +152,27 @@ async function readJson(response, context, options) {
148
152
  : `${context} returned invalid JSON: ${error.message}`, options, { status: response.status, body });
149
153
  }
150
154
  }
155
+ const parseRetryAfterMs = (headerArg) => {
156
+ if (!headerArg || headerArg.length > 128)
157
+ return undefined;
158
+ const maximumDelayMs = 24 * 60 * 60 * 1000;
159
+ if (/^\d{1,10}$/.test(headerArg)) {
160
+ return Math.min(Number(headerArg) * 1000, maximumDelayMs);
161
+ }
162
+ const retryAt = Date.parse(headerArg);
163
+ if (!Number.isFinite(retryAt))
164
+ return undefined;
165
+ return Math.min(Math.max(0, retryAt - Date.now()), maximumDelayMs);
166
+ };
151
167
  async function runFetch(url, init, options, responseHandlerArg, timeoutMsArg = AUTH_REQUEST_TIMEOUT_MS) {
152
- throwIfAborted(options);
168
+ if (options.signal?.aborted) {
169
+ throw new OpenAiChatGptAuthError('OpenAI ChatGPT authentication was aborted.', {
170
+ requestOutcome: 'notSent',
171
+ });
172
+ }
153
173
  const controller = new AbortController();
154
174
  let response;
175
+ let requestStarted = false;
155
176
  const onExternalAbort = () => controller.abort();
156
177
  const onRequestAbort = () => {
157
178
  void response?.body?.cancel().catch(() => undefined);
@@ -170,7 +191,9 @@ async function runFetch(url, init, options, responseHandlerArg, timeoutMsArg = A
170
191
  try {
171
192
  return await Promise.race([
172
193
  (async () => {
173
- response = await getFetch(options)(url, {
194
+ const fetchImplementation = getFetch(options);
195
+ requestStarted = true;
196
+ response = await fetchImplementation(url, {
174
197
  ...init,
175
198
  redirect: 'error',
176
199
  signal: controller.signal,
@@ -185,13 +208,28 @@ async function runFetch(url, init, options, responseHandlerArg, timeoutMsArg = A
185
208
  ]);
186
209
  }
187
210
  catch (error) {
188
- if (error instanceof OpenAiChatGptAuthError)
189
- throw error;
211
+ const requestOutcome = requestStarted
212
+ ? 'outcomeUnknown'
213
+ : 'notSent';
214
+ const retryAfterMs = response ? parseRetryAfterMs(response.headers.get('retry-after')) : undefined;
215
+ if (error instanceof OpenAiChatGptAuthError) {
216
+ throw new OpenAiChatGptAuthError(error.message, {
217
+ ...(error.status !== undefined ? { status: error.status }
218
+ : response ? { status: response.status } : {}),
219
+ ...(error.body !== undefined ? { body: error.body } : {}),
220
+ requestOutcome,
221
+ ...(retryAfterMs !== undefined ? { retryAfterMs } : {}),
222
+ });
223
+ }
190
224
  if (!usesSafeErrors(options))
191
225
  throw error;
192
- throw authError(options.signal?.aborted
226
+ throw new OpenAiChatGptAuthError(options.signal?.aborted
193
227
  ? 'OpenAI ChatGPT authentication was aborted.'
194
- : 'OpenAI ChatGPT authentication request failed.', options);
228
+ : 'OpenAI ChatGPT authentication request failed.', {
229
+ requestOutcome,
230
+ ...(response ? { status: response.status } : {}),
231
+ ...(retryAfterMs !== undefined ? { retryAfterMs } : {}),
232
+ });
195
233
  }
196
234
  finally {
197
235
  clearTimeout(timer);
@@ -281,7 +319,9 @@ export function parseOpenAiChatGptTokenInfo(token) {
281
319
  chatgptUserId: asOptionalString(auth?.chatgpt_user_id) ?? asOptionalString(auth?.user_id),
282
320
  chatgptAccountId: asOptionalString(auth?.chatgpt_account_id),
283
321
  chatgptAccountIsFedramp: auth?.chatgpt_account_is_fedramp === true,
284
- expiresAt: expiresAtSeconds ? new Date(expiresAtSeconds * 1000).toISOString() : undefined,
322
+ expiresAt: expiresAtSeconds !== undefined
323
+ ? new Date(expiresAtSeconds * 1000).toISOString()
324
+ : undefined,
285
325
  rawJwt: token,
286
326
  };
287
327
  }
@@ -577,14 +617,28 @@ export async function revokeOpenAiChatGptToken(token, options) {
577
617
  });
578
618
  }
579
619
  export function createOpenAiChatGptProviderSettings(credentials) {
580
- const tokenAccountId = credentials.tokenInfo?.chatgptAccountId;
620
+ const currentTokenInfo = parseOpenAiChatGptTokenInfo(credentials.accessToken);
621
+ if (currentTokenInfo.expiresAt === undefined
622
+ || Date.parse(currentTokenInfo.expiresAt) <= Date.now()) {
623
+ throw new OpenAiChatGptAuthError('OpenAI ChatGPT access token has no valid future expiry.');
624
+ }
625
+ const tokenAccountId = currentTokenInfo.chatgptAccountId;
581
626
  if (credentials.accountId !== undefined
582
- && tokenAccountId !== undefined
583
627
  && credentials.accountId !== tokenAccountId) {
584
628
  throw new OpenAiChatGptAuthError('OpenAI ChatGPT account ID does not match the token claim.');
585
629
  }
586
- const accountId = tokenAccountId ?? credentials.accountId;
587
- const isFedrampAccount = credentials.tokenInfo?.chatgptAccountIsFedramp === true;
630
+ if (credentials.tokenInfo !== undefined
631
+ && (credentials.tokenInfo.chatgptAccountId !== tokenAccountId
632
+ || credentials.tokenInfo.chatgptAccountIsFedramp !== currentTokenInfo.chatgptAccountIsFedramp)) {
633
+ throw new OpenAiChatGptAuthError('OpenAI ChatGPT token information does not match the current access token.');
634
+ }
635
+ if (credentials.isFedrampAccount !== undefined
636
+ && (typeof credentials.isFedrampAccount !== 'boolean'
637
+ || credentials.isFedrampAccount !== currentTokenInfo.chatgptAccountIsFedramp)) {
638
+ throw new OpenAiChatGptAuthError('OpenAI ChatGPT FedRAMP status does not match the token claim.');
639
+ }
640
+ const accountId = tokenAccountId;
641
+ const isFedrampAccount = currentTokenInfo.chatgptAccountIsFedramp;
588
642
  const headers = {
589
643
  originator: credentials.originator ?? OPENAI_CHATGPT_DEFAULT_ORIGINATOR,
590
644
  };
@@ -600,4 +654,4 @@ export function createOpenAiChatGptProviderSettings(credentials) {
600
654
  headers,
601
655
  };
602
656
  }
603
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhaS5hdXRoLm9wZW5haS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX29wZW5haV9hdXRoL3NtYXJ0YWkuYXV0aC5vcGVuYWkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUJBLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLHlCQUF5QixDQUFDO0FBQ3BFLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLDhCQUE4QixDQUFDO0FBQ3ZFLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLHVDQUF1QyxDQUFDO0FBQ3JGLE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUFHLFNBQVMsQ0FBQztBQUUzRCxNQUFNLHNCQUFzQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzlDLE1BQU0sdUJBQXVCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUMxQyxNQUFNLG9CQUFvQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDdkMsTUFBTSxpQ0FBaUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ25ELE1BQU0seUJBQXlCLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLE1BQU0sdUJBQXVCLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbEMscUNBQXFDO0lBQ3JDLHFDQUFxQztDQUN0QyxDQUFDLENBQUM7QUFDSCxNQUFNLFlBQVksR0FBRywrRUFBK0UsQ0FBQztBQUNyRyxNQUFNLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDO0FBQzVDLE1BQU0sV0FBVyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7QUFDdEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUV0QyxNQUFNLGNBQWMsR0FBRyxDQUFDLFVBQXFDLEVBQVcsRUFBRSxDQUN4RSxVQUFVLENBQUMsVUFBVSxLQUFLLEtBQUss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
657
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhaS5hdXRoLm9wZW5haS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX29wZW5haV9hdXRoL3NtYXJ0YWkuYXV0aC5vcGVuYWkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBa0JBLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLHlCQUF5QixDQUFDO0FBQ3BFLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLDhCQUE4QixDQUFDO0FBQ3ZFLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLHVDQUF1QyxDQUFDO0FBQ3JGLE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUFHLFNBQVMsQ0FBQztBQUUzRCxNQUFNLHNCQUFzQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzlDLE1BQU0sdUJBQXVCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUMxQyxNQUFNLG9CQUFvQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDdkMsTUFBTSxpQ0FBaUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ25ELE1BQU0seUJBQXlCLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLE1BQU0sdUJBQXVCLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbEMscUNBQXFDO0lBQ3JDLHFDQUFxQztDQUN0QyxDQUFDLENBQUM7QUFDSCxNQUFNLFlBQVksR0FBRywrRUFBK0UsQ0FBQztBQUNyRyxNQUFNLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDO0FBQzVDLE1BQU0sV0FBVyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7QUFDdEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUV0QyxNQUFNLGNBQWMsR0FBRyxDQUFDLFVBQXFDLEVBQVcsRUFBRSxDQUN4RSxVQUFVLENBQUMsVUFBVSxLQUFLLEtBQUss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
@@ -0,0 +1,4 @@
1
+ import type { IOpenAiModelConnection } from '@modelprofile.com/flexharness-providers/openai';
2
+ import type { IOpenAiChatGptAuthCredentials, IOpenAiChatGptDynamicModelConnectionOptions } from './interfaces.js';
3
+ export declare const createOpenAiChatGptModelConnection: (credentialsArg: IOpenAiChatGptAuthCredentials) => IOpenAiModelConnection;
4
+ export declare const createOpenAiChatGptDynamicModelConnection: (optionsArg: IOpenAiChatGptDynamicModelConnectionOptions) => IOpenAiModelConnection;
@@ -0,0 +1,98 @@
1
+ import { createOpenAiChatGptProviderSettings, OPENAI_CHATGPT_CODEX_BASE_URL, OpenAiChatGptAuthError, } from './smartai.auth.openai.js';
2
+ import { createOpenAiChatGptInstructionsMiddleware } from './smartai.middleware.openai.js';
3
+ const codexBaseUrl = new URL(OPENAI_CHATGPT_CODEX_BASE_URL);
4
+ function assertCodexRequestUrl(normalizedUrlArg) {
5
+ const url = new URL(normalizedUrlArg);
6
+ const isCodexPath = url.pathname === codexBaseUrl.pathname
7
+ || url.pathname.startsWith(`${codexBaseUrl.pathname}/`);
8
+ if (url.origin !== codexBaseUrl.origin
9
+ || url.username !== ''
10
+ || url.password !== ''
11
+ || !isCodexPath) {
12
+ throw new OpenAiChatGptAuthError('OpenAI ChatGPT inference URL is outside the Codex endpoint.');
13
+ }
14
+ }
15
+ function requireExpectedIdentity(optionsArg) {
16
+ const expectedIdentity = optionsArg.expectedIdentity;
17
+ if (!expectedIdentity
18
+ || (expectedIdentity.accountId !== undefined
19
+ && (typeof expectedIdentity.accountId !== 'string' || expectedIdentity.accountId.length === 0))
20
+ || typeof expectedIdentity.isFedrampAccount !== 'boolean') {
21
+ throw new OpenAiChatGptAuthError('OpenAI ChatGPT expected access identity is invalid.');
22
+ }
23
+ return Object.freeze({
24
+ accountId: expectedIdentity.accountId,
25
+ isFedrampAccount: expectedIdentity.isFedrampAccount,
26
+ });
27
+ }
28
+ function assertExpectedIdentity(settingsArg, expectedIdentityArg) {
29
+ const accountId = settingsArg.headers['ChatGPT-Account-ID'];
30
+ const isFedrampAccount = settingsArg.headers['X-OpenAI-Fedramp'] === 'true';
31
+ if (accountId !== expectedIdentityArg.accountId
32
+ || isFedrampAccount !== expectedIdentityArg.isFedrampAccount) {
33
+ throw new OpenAiChatGptAuthError('OpenAI ChatGPT resolved access identity does not match the connection.');
34
+ }
35
+ }
36
+ function applyAccessHeaders(headersArg, settingsArg) {
37
+ headersArg.set('Authorization', `Bearer ${settingsArg.apiKey}`);
38
+ headersArg.set('originator', settingsArg.headers.originator);
39
+ for (const name of ['ChatGPT-Account-ID', 'X-OpenAI-Fedramp']) {
40
+ const value = settingsArg.headers[name];
41
+ if (value === undefined) {
42
+ headersArg.delete(name);
43
+ }
44
+ else {
45
+ headersArg.set(name, value);
46
+ }
47
+ }
48
+ }
49
+ export const createOpenAiChatGptModelConnection = (credentialsArg) => ({
50
+ settings: createOpenAiChatGptProviderSettings(credentialsArg),
51
+ middleware: createOpenAiChatGptInstructionsMiddleware(),
52
+ });
53
+ export const createOpenAiChatGptDynamicModelConnection = (optionsArg) => {
54
+ if (!optionsArg || typeof optionsArg.resolveAccess !== 'function') {
55
+ throw new OpenAiChatGptAuthError('OpenAI ChatGPT access resolver is required.');
56
+ }
57
+ const expectedIdentity = requireExpectedIdentity(optionsArg);
58
+ const resolveAccess = optionsArg.resolveAccess;
59
+ const originator = optionsArg.originator;
60
+ const transport = optionsArg.fetch ?? globalThis.fetch;
61
+ if (typeof transport !== 'function') {
62
+ throw new OpenAiChatGptAuthError('fetch is not available for OpenAI ChatGPT inference.');
63
+ }
64
+ const fetchWithCurrentAccess = async (inputArg, initArg) => {
65
+ const request = new Request(inputArg, {
66
+ ...initArg,
67
+ redirect: 'error',
68
+ });
69
+ assertCodexRequestUrl(request.url);
70
+ request.signal.throwIfAborted();
71
+ const access = await resolveAccess({ signal: request.signal });
72
+ request.signal.throwIfAborted();
73
+ const settings = createOpenAiChatGptProviderSettings({
74
+ accessToken: access.accessToken,
75
+ originator,
76
+ });
77
+ if (settings.baseURL !== OPENAI_CHATGPT_CODEX_BASE_URL) {
78
+ throw new OpenAiChatGptAuthError('OpenAI ChatGPT inference endpoint is invalid.');
79
+ }
80
+ assertExpectedIdentity(settings, expectedIdentity);
81
+ const headers = new Headers(request.headers);
82
+ applyAccessHeaders(headers, settings);
83
+ const authenticatedRequest = new Request(request, {
84
+ headers,
85
+ });
86
+ authenticatedRequest.signal.throwIfAborted();
87
+ return transport(authenticatedRequest);
88
+ };
89
+ return {
90
+ settings: {
91
+ apiKey: '',
92
+ baseURL: OPENAI_CHATGPT_CODEX_BASE_URL,
93
+ fetch: fetchWithCurrentAccess,
94
+ },
95
+ middleware: createOpenAiChatGptInstructionsMiddleware(),
96
+ };
97
+ };
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhaS5jb25uZWN0aW9uLm9wZW5haS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX29wZW5haV9hdXRoL3NtYXJ0YWkuY29ubmVjdGlvbi5vcGVuYWkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxFQUNMLG1DQUFtQyxFQUNuQyw2QkFBNkIsRUFDN0Isc0JBQXNCLEdBQ3ZCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFFLHlDQUF5QyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFM0YsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQztBQUU1RCxTQUFTLHFCQUFxQixDQUFDLGdCQUF3QjtJQUNyRCxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEtBQUssWUFBWSxDQUFDLFFBQVE7V0FDckQsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxZQUFZLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUMxRCxJQUNFLEdBQUcsQ0FBQyxNQUFNLEtBQUssWUFBWSxDQUFDLE1BQU07V0FDL0IsR0FBRyxDQUFDLFFBQVEsS0FBSyxFQUFFO1dBQ25CLEdBQUcsQ0FBQyxRQUFRLEtBQUssRUFBRTtXQUNuQixDQUFDLFdBQVcsRUFDZixDQUFDO1FBQ0QsTUFBTSxJQUFJLHNCQUFzQixDQUFDLDZEQUE2RCxDQUFDLENBQUM7SUFDbEcsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLHVCQUF1QixDQUFDLFVBQXVEO0lBSXRGLE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLGdCQUFnQixDQUFDO0lBQ3JELElBQ0UsQ0FBQyxnQkFBZ0I7V0FDZCxDQUNELGdCQUFnQixDQUFDLFNBQVMsS0FBSyxTQUFTO2VBQ3JDLENBQUMsT0FBTyxnQkFBZ0IsQ0FBQyxTQUFTLEtBQUss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
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "author": "Task Venture Capital GmbH",
3
3
  "license": "MIT",
4
4
  "name": "@modelprofile.com/flexharness-providers",
5
- "version": "7.0.1",
5
+ "version": "8.1.0",
6
6
  "type": "module",
7
7
  "description": "Model providers, authentication, account management, media and research integrations in one package.",
8
8
  "main": "./dist_ts_providers/index.js",
@@ -75,7 +75,7 @@
75
75
  "@ai-sdk/provider": "^4.0.8",
76
76
  "@ai-sdk/xai": "^4.0.44",
77
77
  "@anthropic-ai/sdk": "0.95.2",
78
- "@modelprofile.com/flexharness-models": "7.0.1",
78
+ "@modelprofile.com/flexharness-models": "8.1.0",
79
79
  "ai": "^7.0.79",
80
80
  "openai": "^6.37.0",
81
81
  "proper-lockfile": "^4.1.2"
package/readme.md CHANGED
@@ -36,7 +36,11 @@ Provider SDKs are installed together. Authentication, file access and vendor med
36
36
  are separate entrypoints and are not imported by the provider factory root. For
37
37
  ChatGPT authentication, pass
38
38
  `connection: createOpenAiChatGptModelConnection(credentials)` from `/auth` to the
39
- OpenAI model options. API-key inference needs no authentication setup.
39
+ OpenAI model options. Delegated runtimes use
40
+ `createOpenAiChatGptDynamicModelConnection({ expectedIdentity, resolveAccess })`
41
+ instead; it resolves current access at every provider HTTP request while keeping
42
+ account and residency identity fixed for the connection. API-key inference
43
+ needs no authentication setup.
40
44
 
41
45
  The package includes the applicable OpenAI Codex license and third-party notices.
42
46
 
@@ -11,6 +11,58 @@ pnpm add @modelprofile.com/flexharness-providers
11
11
  See the [toolbox usage and migration guide](https://code.foss.global/modelprofile.com/flexharness#readme)
12
12
  for composition examples and the SmartAI/SmartAgent migration map.
13
13
 
14
+ ## Authority-managed access
15
+
16
+ `OpenAiProviderAdapter.listModels()` and `getAccountRateLimits()` accept an
17
+ `IOpenAiChatGptAccessCredential` resolved by a separate account authority:
18
+
19
+ ```typescript
20
+ import {
21
+ OpenAiProviderAdapter,
22
+ type IOpenAiChatGptAccessCredential,
23
+ } from '@modelprofile.com/flexharness-providers/accounts';
24
+
25
+ async function readAccount(grant: {
26
+ accessToken: string;
27
+ accountId: string;
28
+ isFedrampAccount: boolean;
29
+ }) {
30
+ const adapter = new OpenAiProviderAdapter();
31
+ const access: IOpenAiChatGptAccessCredential = {
32
+ kind: 'chatgptAccess',
33
+ providerId: 'openai',
34
+ accessToken: grant.accessToken,
35
+ accountId: grant.accountId,
36
+ isFedrampAccount: grant.isFedrampAccount,
37
+ };
38
+ try {
39
+ return {
40
+ models: await adapter.listModels(access),
41
+ usage: await adapter.getAccountRateLimits(access),
42
+ };
43
+ } finally {
44
+ await adapter.dispose();
45
+ }
46
+ }
47
+ ```
48
+
49
+ The authority verifies the account ID and FedRAMP flag against the current token,
50
+ owns refresh, and supplies a fresh access grant before each operation. A rejected
51
+ token returns `CREDENTIAL_REFRESH_REQUIRED` to the caller; the adapter does not
52
+ refresh it. Access-only grants cannot be serialized as provider credential
53
+ envelopes. Login, refresh and logout still require the full OAuth credential.
54
+
55
+ For inference, `createOpenAiChatGptModelConnection()` from `/auth` accepts
56
+ `{ accessToken, accountId, isFedrampAccount }` without a refresh token.
57
+
58
+ `refreshCredential()` failures report `requestOutcome: 'notSent'` only when the
59
+ call was rejected before a fetch invocation. All failures after a fetch invocation,
60
+ including HTTP 429, timeout, and a malformed successful response, report
61
+ `outcomeUnknown`: the provider might have rotated the refresh token. A failure
62
+ may also contain a numeric `responseStatus` and a bounded `retryAfterMs` from an
63
+ observed HTTP response. These are scheduling facts, not permission to replay
64
+ the old refresh token. Provider response bodies are never returned in this API.
65
+
14
66
  ## Issue Reporting and Security
15
67
 
16
68
  Report issues and security concerns through [community.foss.global](https://community.foss.global).
@@ -1,3 +1,5 @@
1
+ import type { TOpenAiChatGptRequestOutcome } from '@modelprofile.com/flexharness-providers/auth';
2
+
1
3
  export type TSmartAiProviderId = string;
2
4
  export type TSmartAiProviderLoginFlow = 'browser' | 'device';
3
5
  export type TSmartAiProviderInputModality = 'text' | 'image' | 'audio';
@@ -24,6 +26,21 @@ export interface IOpenAiChatGptOAuthCredential {
24
26
  lastRefreshAt?: string;
25
27
  }
26
28
 
29
+ /** A short-lived, authority-resolved access grant for read and inference operations. */
30
+ export interface IOpenAiChatGptAccessCredential {
31
+ kind: 'chatgptAccess';
32
+ providerId: 'openai';
33
+ accessToken: string;
34
+ /** The verified ChatGPT workspace/account ID, not an email address. */
35
+ accountId: string;
36
+ isFedrampAccount: boolean;
37
+ }
38
+
39
+ /** Access grants are deliberately excluded from stored provider credential envelopes. */
40
+ export type TOpenAiChatGptReadCredential =
41
+ | IOpenAiChatGptOAuthCredential
42
+ | IOpenAiChatGptAccessCredential;
43
+
27
44
  export type TSmartAiProviderCredential =
28
45
  | ISmartAiProviderApiKeyCredential
29
46
  | IOpenAiChatGptOAuthCredential;
@@ -117,6 +134,12 @@ export interface ISmartAiProviderRefreshFailure {
117
134
  success: false;
118
135
  credential: IOpenAiChatGptOAuthCredential;
119
136
  errorCode: TSmartAiProviderCredentialOperationErrorCode | 'REFRESH_FAILED';
137
+ /** Never replay a rotating grant when this is outcomeUnknown. */
138
+ requestOutcome: TOpenAiChatGptRequestOutcome;
139
+ /** The response status, when an HTTP response was observed. */
140
+ responseStatus?: number;
141
+ /** Bounded Retry-After delay from the observed response. */
142
+ retryAfterMs?: number;
120
143
  }
121
144
 
122
145
  export type TSmartAiProviderRefreshResult =
@@ -201,11 +224,11 @@ export interface ISmartAiProviderAdapter {
201
224
  options?: ISmartAiProviderOperationOptions,
202
225
  ): Promise<TSmartAiProviderRefreshResult>;
203
226
  listModels(
204
- credential: IOpenAiChatGptOAuthCredential,
227
+ credential: TOpenAiChatGptReadCredential,
205
228
  options?: ISmartAiProviderModelListOptions,
206
229
  ): Promise<TSmartAiProviderModelListResult>;
207
230
  getAccountRateLimits(
208
- credential: IOpenAiChatGptOAuthCredential,
231
+ credential: TOpenAiChatGptReadCredential,
209
232
  options?: ISmartAiProviderOperationOptions,
210
233
  ): Promise<TSmartAiProviderAccountRateLimitsResult>;
211
234
  logoutCredential(