@push.rocks/smartai 2.3.0 → 4.0.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.
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@push.rocks/smartai',
6
- version: '2.3.0',
6
+ version: '4.0.1',
7
7
  description: 'Provider registry and capability utilities for ai-sdk (Vercel AI SDK). Core export returns LanguageModel; subpath exports provide vision, audio, image, document and research capabilities.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxxQkFBcUI7SUFDM0IsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLDZMQUE2TDtDQUMzTSxDQUFBIn0=
@@ -1,10 +1,10 @@
1
1
  export { getModel, getModelSetup } from './smartai.classes.smartai.js';
2
- export type { IOpenAiProviderOptions, IOpenAiMaxAuthCredentials, IOpenAiMaxAuthOptions, IOpenAiMaxCompleteDeviceCodeOptions, IOpenAiMaxDeviceCode, IOpenAiMaxDeviceCodePollOptions, IOpenAiMaxIdTokenInfo, IOpenAiMaxTokenData, ISmartAiModelSetup, ISmartAiOptions, TOpenAiReasoningEffort, TOpenAiTextVerbosity, TProvider, TSmartAiProviderOptions, IOllamaModelOptions, LanguageModelV3, LanguageModelV3Prompt, } from './smartai.interfaces.js';
2
+ export type { IOpenAiProviderOptions, IOpenAiChatGptAuthCredentials, IOpenAiChatGptAuthOptions, IOpenAiChatGptCompleteDeviceCodeOptions, IOpenAiChatGptDeviceCode, IOpenAiChatGptDeviceCodePollOptions, IOpenAiChatGptTokenData, IOpenAiChatGptTokenInfo, ISmartAiModelSetup, ISmartAiOptions, TOpenAiReasoningEffort, TOpenAiTextVerbosity, TProvider, TSmartAiProviderOptions, IOllamaModelOptions, LanguageModelV3, LanguageModelV3Prompt, } from './smartai.interfaces.js';
3
3
  export { createAnthropicCachingMiddleware } from './smartai.middleware.anthropic.js';
4
4
  export { applySmartAiCacheProviderOptions, applySmartAiPromptCaching, createSmartAiCachingMiddleware, getSmartAiCacheProviderOptions, getSmartAiMessageCacheProviderOptions, mergeSmartAiProviderOptions, resolveSmartAiCacheProvider, } from './smartai.cache.js';
5
5
  export type { ISmartAiCacheOptions, TSmartAiCacheRetention, TSmartAiCacheSetting, TSmartAiMessageCacheProvider, } from './smartai.cache.js';
6
6
  export { createOllamaModel } from './smartai.provider.ollama.js';
7
- export { OPENAI_MAX_AUTH_ISSUER, OPENAI_MAX_CLIENT_ID, OPENAI_MAX_CODEX_BASE_URL, OPENAI_MAX_DEFAULT_ORIGINATOR, OpenAiMaxAuthError, completeOpenAiMaxDeviceCodeLogin, createOpenAiMaxProviderSettings, ensureOpenAiMaxWorkspaceAllowed, exchangeOpenAiMaxAuthorizationCode, parseOpenAiMaxIdToken, pollOpenAiMaxDeviceCode, refreshOpenAiMaxTokenData, requestOpenAiMaxDeviceCode, } from './smartai.auth.openai.js';
8
- export type { IOpenAiMaxAuthorizationCode } from './smartai.auth.openai.js';
7
+ export { OPENAI_CHATGPT_AUTH_ISSUER, OPENAI_CHATGPT_CLIENT_ID, OPENAI_CHATGPT_CODEX_BASE_URL, OPENAI_CHATGPT_DEFAULT_ORIGINATOR, OpenAiChatGptAuthError, completeOpenAiChatGptDeviceCodeLogin, createOpenAiChatGptProviderSettings, ensureOpenAiChatGptWorkspaceAllowed, exchangeOpenAiChatGptAuthorizationCode, parseOpenAiChatGptTokenInfo, pollOpenAiChatGptDeviceCode, refreshOpenAiChatGptTokenData, requestOpenAiChatGptDeviceCode, } from './smartai.auth.openai.js';
8
+ export type { IOpenAiChatGptAuthorizationCode } from './smartai.auth.openai.js';
9
9
  export { generateText, streamText, tool, jsonSchema } from 'ai';
10
10
  export type { ModelMessage, ToolSet, StreamTextResult } from 'ai';
package/dist_ts/index.js CHANGED
@@ -2,7 +2,7 @@ export { getModel, getModelSetup } from './smartai.classes.smartai.js';
2
2
  export { createAnthropicCachingMiddleware } from './smartai.middleware.anthropic.js';
3
3
  export { applySmartAiCacheProviderOptions, applySmartAiPromptCaching, createSmartAiCachingMiddleware, getSmartAiCacheProviderOptions, getSmartAiMessageCacheProviderOptions, mergeSmartAiProviderOptions, resolveSmartAiCacheProvider, } from './smartai.cache.js';
4
4
  export { createOllamaModel } from './smartai.provider.ollama.js';
5
- export { OPENAI_MAX_AUTH_ISSUER, OPENAI_MAX_CLIENT_ID, OPENAI_MAX_CODEX_BASE_URL, OPENAI_MAX_DEFAULT_ORIGINATOR, OpenAiMaxAuthError, completeOpenAiMaxDeviceCodeLogin, createOpenAiMaxProviderSettings, ensureOpenAiMaxWorkspaceAllowed, exchangeOpenAiMaxAuthorizationCode, parseOpenAiMaxIdToken, pollOpenAiMaxDeviceCode, refreshOpenAiMaxTokenData, requestOpenAiMaxDeviceCode, } from './smartai.auth.openai.js';
5
+ export { OPENAI_CHATGPT_AUTH_ISSUER, OPENAI_CHATGPT_CLIENT_ID, OPENAI_CHATGPT_CODEX_BASE_URL, OPENAI_CHATGPT_DEFAULT_ORIGINATOR, OpenAiChatGptAuthError, completeOpenAiChatGptDeviceCodeLogin, createOpenAiChatGptProviderSettings, ensureOpenAiChatGptWorkspaceAllowed, exchangeOpenAiChatGptAuthorizationCode, parseOpenAiChatGptTokenInfo, pollOpenAiChatGptDeviceCode, refreshOpenAiChatGptTokenData, requestOpenAiChatGptDeviceCode, } from './smartai.auth.openai.js';
6
6
  // Re-export commonly used ai-sdk functions for consumer convenience
7
7
  export { generateText, streamText, tool, jsonSchema } from 'ai';
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBb0J2RSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNyRixPQUFPLEVBQ0wsZ0NBQWdDLEVBQ2hDLHlCQUF5QixFQUN6Qiw4QkFBOEIsRUFDOUIsOEJBQThCLEVBQzlCLHFDQUFxQyxFQUNyQywyQkFBMkIsRUFDM0IsMkJBQTJCLEdBQzVCLE1BQU0sb0JBQW9CLENBQUM7QUFPNUIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDcEIseUJBQXlCLEVBQ3pCLDZCQUE2QixFQUM3QixrQkFBa0IsRUFDbEIsZ0NBQWdDLEVBQ2hDLCtCQUErQixFQUMvQiwrQkFBK0IsRUFDL0Isa0NBQWtDLEVBQ2xDLHFCQUFxQixFQUNyQix1QkFBdUIsRUFDdkIseUJBQXlCLEVBQ3pCLDBCQUEwQixHQUMzQixNQUFNLDBCQUEwQixDQUFDO0FBR2xDLG9FQUFvRTtBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sSUFBSSxDQUFDIn0=
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBb0J2RSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNyRixPQUFPLEVBQ0wsZ0NBQWdDLEVBQ2hDLHlCQUF5QixFQUN6Qiw4QkFBOEIsRUFDOUIsOEJBQThCLEVBQzlCLHFDQUFxQyxFQUNyQywyQkFBMkIsRUFDM0IsMkJBQTJCLEdBQzVCLE1BQU0sb0JBQW9CLENBQUM7QUFPNUIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUNMLDBCQUEwQixFQUMxQix3QkFBd0IsRUFDeEIsNkJBQTZCLEVBQzdCLGlDQUFpQyxFQUNqQyxzQkFBc0IsRUFDdEIsb0NBQW9DLEVBQ3BDLG1DQUFtQyxFQUNuQyxtQ0FBbUMsRUFDbkMsc0NBQXNDLEVBQ3RDLDJCQUEyQixFQUMzQiwyQkFBMkIsRUFDM0IsNkJBQTZCLEVBQzdCLDhCQUE4QixHQUMvQixNQUFNLDBCQUEwQixDQUFDO0FBR2xDLG9FQUFvRTtBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sSUFBSSxDQUFDIn0=
@@ -1,9 +1,9 @@
1
- import type { IOpenAiMaxAuthCredentials, IOpenAiMaxAuthOptions, IOpenAiMaxCompleteDeviceCodeOptions, IOpenAiMaxDeviceCode, IOpenAiMaxDeviceCodePollOptions, IOpenAiMaxIdTokenInfo, IOpenAiMaxTokenData } from './smartai.interfaces.js';
2
- export declare const OPENAI_MAX_AUTH_ISSUER = "https://auth.openai.com";
3
- export declare const OPENAI_MAX_CLIENT_ID = "app_EMoamEEZ73f0CkXaXp7hrann";
4
- export declare const OPENAI_MAX_CODEX_BASE_URL = "https://chatgpt.com/backend-api/codex";
5
- export declare const OPENAI_MAX_DEFAULT_ORIGINATOR = "smartai";
6
- export declare class OpenAiMaxAuthError extends Error {
1
+ import type { IOpenAiChatGptAuthCredentials, IOpenAiChatGptAuthOptions, IOpenAiChatGptCompleteDeviceCodeOptions, IOpenAiChatGptDeviceCode, IOpenAiChatGptDeviceCodePollOptions, IOpenAiChatGptTokenData, IOpenAiChatGptTokenInfo } from './smartai.interfaces.js';
2
+ export declare const OPENAI_CHATGPT_AUTH_ISSUER = "https://auth.openai.com";
3
+ export declare const OPENAI_CHATGPT_CLIENT_ID = "app_EMoamEEZ73f0CkXaXp7hrann";
4
+ export declare const OPENAI_CHATGPT_CODEX_BASE_URL = "https://chatgpt.com/backend-api/codex";
5
+ export declare const OPENAI_CHATGPT_DEFAULT_ORIGINATOR = "smartai";
6
+ export declare class OpenAiChatGptAuthError extends Error {
7
7
  status?: number;
8
8
  body?: string;
9
9
  constructor(message: string, options?: {
@@ -11,19 +11,19 @@ export declare class OpenAiMaxAuthError extends Error {
11
11
  body?: string;
12
12
  });
13
13
  }
14
- export interface IOpenAiMaxAuthorizationCode {
14
+ export interface IOpenAiChatGptAuthorizationCode {
15
15
  authorizationCode: string;
16
16
  codeChallenge: string;
17
17
  codeVerifier: string;
18
18
  }
19
- export declare function parseOpenAiMaxIdToken(idToken: string): IOpenAiMaxIdTokenInfo;
20
- export declare function requestOpenAiMaxDeviceCode(options?: IOpenAiMaxAuthOptions): Promise<IOpenAiMaxDeviceCode>;
21
- export declare function pollOpenAiMaxDeviceCode(deviceCode: IOpenAiMaxDeviceCode, options?: IOpenAiMaxDeviceCodePollOptions): Promise<IOpenAiMaxAuthorizationCode>;
22
- export declare function exchangeOpenAiMaxAuthorizationCode(authorizationCode: IOpenAiMaxAuthorizationCode, options?: IOpenAiMaxAuthOptions): Promise<IOpenAiMaxTokenData>;
23
- export declare function ensureOpenAiMaxWorkspaceAllowed(tokenData: IOpenAiMaxTokenData, forcedChatGptWorkspaceId?: string): void;
24
- export declare function completeOpenAiMaxDeviceCodeLogin(deviceCode: IOpenAiMaxDeviceCode, options?: IOpenAiMaxCompleteDeviceCodeOptions): Promise<IOpenAiMaxTokenData>;
25
- export declare function refreshOpenAiMaxTokenData(tokenData: IOpenAiMaxTokenData, options?: IOpenAiMaxAuthOptions): Promise<IOpenAiMaxTokenData>;
26
- export declare function createOpenAiMaxProviderSettings(credentials: IOpenAiMaxAuthCredentials): {
19
+ export declare function parseOpenAiChatGptTokenInfo(token: string): IOpenAiChatGptTokenInfo;
20
+ export declare function requestOpenAiChatGptDeviceCode(options?: IOpenAiChatGptAuthOptions): Promise<IOpenAiChatGptDeviceCode>;
21
+ export declare function pollOpenAiChatGptDeviceCode(deviceCode: IOpenAiChatGptDeviceCode, options?: IOpenAiChatGptDeviceCodePollOptions): Promise<IOpenAiChatGptAuthorizationCode>;
22
+ export declare function exchangeOpenAiChatGptAuthorizationCode(authorizationCode: IOpenAiChatGptAuthorizationCode, options?: IOpenAiChatGptAuthOptions): Promise<IOpenAiChatGptTokenData>;
23
+ export declare function ensureOpenAiChatGptWorkspaceAllowed(tokenData: IOpenAiChatGptTokenData, forcedChatGptWorkspaceId?: string): void;
24
+ export declare function completeOpenAiChatGptDeviceCodeLogin(deviceCode: IOpenAiChatGptDeviceCode, options?: IOpenAiChatGptCompleteDeviceCodeOptions): Promise<IOpenAiChatGptTokenData>;
25
+ export declare function refreshOpenAiChatGptTokenData(tokenData: IOpenAiChatGptTokenData, options?: IOpenAiChatGptAuthOptions): Promise<IOpenAiChatGptTokenData>;
26
+ export declare function createOpenAiChatGptProviderSettings(credentials: IOpenAiChatGptAuthCredentials): {
27
27
  apiKey: string;
28
28
  baseURL: string;
29
29
  headers: Record<string, string>;
@@ -1,12 +1,12 @@
1
- export const OPENAI_MAX_AUTH_ISSUER = 'https://auth.openai.com';
2
- export const OPENAI_MAX_CLIENT_ID = 'app_EMoamEEZ73f0CkXaXp7hrann';
3
- export const OPENAI_MAX_CODEX_BASE_URL = 'https://chatgpt.com/backend-api/codex';
4
- export const OPENAI_MAX_DEFAULT_ORIGINATOR = 'smartai';
1
+ export const OPENAI_CHATGPT_AUTH_ISSUER = 'https://auth.openai.com';
2
+ export const OPENAI_CHATGPT_CLIENT_ID = 'app_EMoamEEZ73f0CkXaXp7hrann';
3
+ export const OPENAI_CHATGPT_CODEX_BASE_URL = 'https://chatgpt.com/backend-api/codex';
4
+ export const OPENAI_CHATGPT_DEFAULT_ORIGINATOR = 'smartai';
5
5
  const DEVICE_CODE_TIMEOUT_MS = 15 * 60 * 1000;
6
- export class OpenAiMaxAuthError extends Error {
6
+ export class OpenAiChatGptAuthError extends Error {
7
7
  constructor(message, options = {}) {
8
8
  super(message);
9
- this.name = 'OpenAiMaxAuthError';
9
+ this.name = 'OpenAiChatGptAuthError';
10
10
  this.status = options.status;
11
11
  this.body = options.body;
12
12
  }
@@ -14,19 +14,19 @@ export class OpenAiMaxAuthError extends Error {
14
14
  function getFetch(options) {
15
15
  const fetchFunction = options.fetch ?? globalThis.fetch;
16
16
  if (!fetchFunction) {
17
- throw new OpenAiMaxAuthError('fetch is not available for OpenAI Max authentication.');
17
+ throw new OpenAiChatGptAuthError('fetch is not available for OpenAI ChatGPT authentication.');
18
18
  }
19
19
  return fetchFunction;
20
20
  }
21
21
  function getIssuer(options) {
22
- return (options.issuer ?? OPENAI_MAX_AUTH_ISSUER).replace(/\/+$/, '');
22
+ return (options.issuer ?? OPENAI_CHATGPT_AUTH_ISSUER).replace(/\/+$/, '');
23
23
  }
24
24
  function getClientId(options) {
25
- return options.clientId ?? OPENAI_MAX_CLIENT_ID;
25
+ return options.clientId ?? OPENAI_CHATGPT_CLIENT_ID;
26
26
  }
27
27
  function asString(value, name) {
28
28
  if (typeof value !== 'string' || value.length === 0) {
29
- throw new OpenAiMaxAuthError(`OpenAI Max auth response is missing ${name}.`);
29
+ throw new OpenAiChatGptAuthError(`OpenAI ChatGPT auth response is missing ${name}.`);
30
30
  }
31
31
  return value;
32
32
  }
@@ -36,14 +36,14 @@ function asOptionalString(value) {
36
36
  function asIntervalSeconds(value) {
37
37
  const interval = typeof value === 'number' ? value : Number.parseInt(String(value ?? ''), 10);
38
38
  if (!Number.isFinite(interval) || interval <= 0) {
39
- throw new OpenAiMaxAuthError('OpenAI Max device-code response has an invalid interval.');
39
+ throw new OpenAiChatGptAuthError('OpenAI ChatGPT device-code response has an invalid interval.');
40
40
  }
41
41
  return interval;
42
42
  }
43
43
  async function readJson(response, context) {
44
44
  const body = await response.text();
45
45
  if (!response.ok) {
46
- throw new OpenAiMaxAuthError(`${context} failed with status ${response.status}.`, {
46
+ throw new OpenAiChatGptAuthError(`${context} failed with status ${response.status}.`, {
47
47
  status: response.status,
48
48
  body,
49
49
  });
@@ -52,7 +52,7 @@ async function readJson(response, context) {
52
52
  return body ? JSON.parse(body) : {};
53
53
  }
54
54
  catch (error) {
55
- throw new OpenAiMaxAuthError(`${context} returned invalid JSON: ${error.message}`, {
55
+ throw new OpenAiChatGptAuthError(`${context} returned invalid JSON: ${error.message}`, {
56
56
  status: response.status,
57
57
  body,
58
58
  });
@@ -80,17 +80,17 @@ function sleep(ms) {
80
80
  function parseJwtPayload(jwt) {
81
81
  const parts = jwt.split('.');
82
82
  if (parts.length !== 3 || !parts[1]) {
83
- throw new OpenAiMaxAuthError('OpenAI Max auth returned an invalid ID token.');
83
+ throw new OpenAiChatGptAuthError('OpenAI ChatGPT auth returned an invalid token.');
84
84
  }
85
85
  try {
86
86
  return JSON.parse(Buffer.from(parts[1], 'base64url').toString('utf8'));
87
87
  }
88
88
  catch (error) {
89
- throw new OpenAiMaxAuthError(`OpenAI Max ID token could not be parsed: ${error.message}`);
89
+ throw new OpenAiChatGptAuthError(`OpenAI ChatGPT token could not be parsed: ${error.message}`);
90
90
  }
91
91
  }
92
- export function parseOpenAiMaxIdToken(idToken) {
93
- const claims = parseJwtPayload(idToken);
92
+ export function parseOpenAiChatGptTokenInfo(token) {
93
+ const claims = parseJwtPayload(token);
94
94
  const profile = claims['https://api.openai.com/profile'];
95
95
  const auth = claims['https://api.openai.com/auth'];
96
96
  const expiresAtSeconds = typeof claims.exp === 'number' ? claims.exp : undefined;
@@ -101,23 +101,29 @@ export function parseOpenAiMaxIdToken(idToken) {
101
101
  chatgptAccountId: asOptionalString(auth?.chatgpt_account_id),
102
102
  chatgptAccountIsFedramp: auth?.chatgpt_account_is_fedramp === true,
103
103
  expiresAt: expiresAtSeconds ? new Date(expiresAtSeconds * 1000).toISOString() : undefined,
104
- rawJwt: idToken,
104
+ rawJwt: token,
105
105
  };
106
106
  }
107
- function createTokenData(response) {
108
- const idToken = asString(response.id_token, 'id_token');
109
- const accessToken = asString(response.access_token, 'access_token');
110
- const refreshToken = asString(response.refresh_token, 'refresh_token');
111
- const idTokenInfo = parseOpenAiMaxIdToken(idToken);
107
+ function createTokenData(response, existingTokenData) {
108
+ const accessToken = asOptionalString(response.access_token) ?? existingTokenData?.accessToken;
109
+ const refreshToken = asOptionalString(response.refresh_token) ?? existingTokenData?.refreshToken;
110
+ const idToken = asOptionalString(response.id_token) ?? existingTokenData?.idToken;
111
+ if (!accessToken) {
112
+ throw new OpenAiChatGptAuthError('OpenAI ChatGPT auth response is missing access_token.');
113
+ }
114
+ if (!refreshToken) {
115
+ throw new OpenAiChatGptAuthError('OpenAI ChatGPT auth response is missing refresh_token.');
116
+ }
117
+ const tokenInfo = parseOpenAiChatGptTokenInfo(idToken ?? accessToken);
112
118
  return {
113
- idToken,
114
119
  accessToken,
115
120
  refreshToken,
116
- accountId: idTokenInfo.chatgptAccountId,
117
- idTokenInfo,
121
+ idToken,
122
+ accountId: tokenInfo.chatgptAccountId,
123
+ tokenInfo,
118
124
  };
119
125
  }
120
- export async function requestOpenAiMaxDeviceCode(options = {}) {
126
+ export async function requestOpenAiChatGptDeviceCode(options = {}) {
121
127
  const issuer = getIssuer(options);
122
128
  const response = await postJson(`${issuer}/api/accounts/deviceauth/usercode`, {
123
129
  client_id: getClientId(options),
@@ -129,7 +135,7 @@ export async function requestOpenAiMaxDeviceCode(options = {}) {
129
135
  intervalSeconds: asIntervalSeconds(response.interval),
130
136
  };
131
137
  }
132
- export async function pollOpenAiMaxDeviceCode(deviceCode, options = {}) {
138
+ export async function pollOpenAiChatGptDeviceCode(deviceCode, options = {}) {
133
139
  const issuer = getIssuer(options);
134
140
  const pollUrl = `${issuer}/api/accounts/deviceauth/token`;
135
141
  const timeoutMs = options.timeoutMs ?? DEVICE_CODE_TIMEOUT_MS;
@@ -154,7 +160,7 @@ export async function pollOpenAiMaxDeviceCode(deviceCode, options = {}) {
154
160
  }
155
161
  if (response.status !== 403 && response.status !== 404) {
156
162
  const body = await response.text();
157
- throw new OpenAiMaxAuthError(`OpenAI Max device-code polling failed with status ${response.status}.`, {
163
+ throw new OpenAiChatGptAuthError(`OpenAI ChatGPT device-code polling failed with status ${response.status}.`, {
158
164
  status: response.status,
159
165
  body,
160
166
  });
@@ -163,9 +169,9 @@ export async function pollOpenAiMaxDeviceCode(deviceCode, options = {}) {
163
169
  const remaining = timeoutMs - (Date.now() - startedAt);
164
170
  await sleepFunction(Math.min(deviceCode.intervalSeconds * 1000, Math.max(remaining, 0)));
165
171
  }
166
- throw new OpenAiMaxAuthError('OpenAI Max device-code login timed out.');
172
+ throw new OpenAiChatGptAuthError('OpenAI ChatGPT device-code login timed out.');
167
173
  }
168
- export async function exchangeOpenAiMaxAuthorizationCode(authorizationCode, options = {}) {
174
+ export async function exchangeOpenAiChatGptAuthorizationCode(authorizationCode, options = {}) {
169
175
  const issuer = getIssuer(options);
170
176
  const response = await postForm(`${issuer}/oauth/token`, new URLSearchParams({
171
177
  grant_type: 'authorization_code',
@@ -176,21 +182,21 @@ export async function exchangeOpenAiMaxAuthorizationCode(authorizationCode, opti
176
182
  }), options);
177
183
  return createTokenData(response);
178
184
  }
179
- export function ensureOpenAiMaxWorkspaceAllowed(tokenData, forcedChatGptWorkspaceId) {
185
+ export function ensureOpenAiChatGptWorkspaceAllowed(tokenData, forcedChatGptWorkspaceId) {
180
186
  if (!forcedChatGptWorkspaceId) {
181
187
  return;
182
188
  }
183
- if (tokenData.idTokenInfo.chatgptAccountId !== forcedChatGptWorkspaceId) {
184
- throw new OpenAiMaxAuthError(`OpenAI Max login is restricted to workspace ${forcedChatGptWorkspaceId}.`);
189
+ if (tokenData.tokenInfo.chatgptAccountId !== forcedChatGptWorkspaceId) {
190
+ throw new OpenAiChatGptAuthError(`OpenAI ChatGPT login is restricted to workspace ${forcedChatGptWorkspaceId}.`);
185
191
  }
186
192
  }
187
- export async function completeOpenAiMaxDeviceCodeLogin(deviceCode, options = {}) {
188
- const authorizationCode = await pollOpenAiMaxDeviceCode(deviceCode, options);
189
- const tokenData = await exchangeOpenAiMaxAuthorizationCode(authorizationCode, options);
190
- ensureOpenAiMaxWorkspaceAllowed(tokenData, options.forcedChatGptWorkspaceId);
193
+ export async function completeOpenAiChatGptDeviceCodeLogin(deviceCode, options = {}) {
194
+ const authorizationCode = await pollOpenAiChatGptDeviceCode(deviceCode, options);
195
+ const tokenData = await exchangeOpenAiChatGptAuthorizationCode(authorizationCode, options);
196
+ ensureOpenAiChatGptWorkspaceAllowed(tokenData, options.forcedChatGptWorkspaceId);
191
197
  return tokenData;
192
198
  }
193
- export async function refreshOpenAiMaxTokenData(tokenData, options = {}) {
199
+ export async function refreshOpenAiChatGptTokenData(tokenData, options = {}) {
194
200
  const issuer = getIssuer(options);
195
201
  const response = await postJson(`${issuer}/oauth/token`, {
196
202
  client_id: getClientId(options),
@@ -201,13 +207,13 @@ export async function refreshOpenAiMaxTokenData(tokenData, options = {}) {
201
207
  id_token: response.id_token ?? tokenData.idToken,
202
208
  access_token: response.access_token ?? tokenData.accessToken,
203
209
  refresh_token: response.refresh_token ?? tokenData.refreshToken,
204
- });
210
+ }, tokenData);
205
211
  }
206
- export function createOpenAiMaxProviderSettings(credentials) {
207
- const accountId = credentials.accountId ?? credentials.idTokenInfo?.chatgptAccountId;
208
- const isFedrampAccount = credentials.idTokenInfo?.chatgptAccountIsFedramp === true;
212
+ export function createOpenAiChatGptProviderSettings(credentials) {
213
+ const accountId = credentials.accountId ?? credentials.tokenInfo?.chatgptAccountId;
214
+ const isFedrampAccount = credentials.tokenInfo?.chatgptAccountIsFedramp === true;
209
215
  const headers = {
210
- originator: credentials.originator ?? OPENAI_MAX_DEFAULT_ORIGINATOR,
216
+ originator: credentials.originator ?? OPENAI_CHATGPT_DEFAULT_ORIGINATOR,
211
217
  };
212
218
  if (accountId) {
213
219
  headers['ChatGPT-Account-ID'] = accountId;
@@ -217,8 +223,8 @@ export function createOpenAiMaxProviderSettings(credentials) {
217
223
  }
218
224
  return {
219
225
  apiKey: credentials.accessToken,
220
- baseURL: credentials.baseUrl ?? OPENAI_MAX_CODEX_BASE_URL,
226
+ baseURL: credentials.baseUrl ?? OPENAI_CHATGPT_CODEX_BASE_URL,
221
227
  headers,
222
228
  };
223
229
  }
224
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhaS5hdXRoLm9wZW5haS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0YWkuYXV0aC5vcGVuYWkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcseUJBQXlCLENBQUM7QUFDaEUsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsOEJBQThCLENBQUM7QUFDbkUsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsdUNBQXVDLENBQUM7QUFDakYsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsU0FBUyxDQUFDO0FBRXZELE1BQU0sc0JBQXNCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFFOUMsTUFBTSxPQUFPLGtCQUFtQixTQUFRLEtBQUs7SUFJM0MsWUFBWSxPQUFlLEVBQUUsVUFBOEMsRUFBRTtRQUMzRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLG9CQUFvQixDQUFDO1FBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUM3QixJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDM0IsQ0FBQztDQUNGO0FBY0QsU0FBUyxRQUFRLENBQUMsT0FBOEI7SUFDOUMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDO0lBQ3hELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNuQixNQUFNLElBQUksa0JBQWtCLENBQUMsdURBQXVELENBQUMsQ0FBQztJQUN4RixDQUFDO0lBQ0QsT0FBTyxhQUFhLENBQUM7QUFDdkIsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLE9BQThCO0lBQy9DLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLHNCQUFzQixDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFB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
230
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhaS5hdXRoLm9wZW5haS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0YWkuYXV0aC5vcGVuYWkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcseUJBQXlCLENBQUM7QUFDcEUsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsOEJBQThCLENBQUM7QUFDdkUsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsdUNBQXVDLENBQUM7QUFDckYsTUFBTSxDQUFDLE1BQU0saUNBQWlDLEdBQUcsU0FBUyxDQUFDO0FBRTNELE1BQU0sc0JBQXNCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFFOUMsTUFBTSxPQUFPLHNCQUF1QixTQUFRLEtBQUs7SUFJL0MsWUFBWSxPQUFlLEVBQUUsVUFBOEMsRUFBRTtRQUMzRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLHdCQUF3QixDQUFDO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUM3QixJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDM0IsQ0FBQztDQUNGO0FBY0QsU0FBUyxRQUFRLENBQUMsT0FBa0M7SUFDbEQsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDO0lBQ3hELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNuQixNQUFNLElBQUksc0JBQXNCLENBQUMsMkRBQTJELENBQUMsQ0FBQztJQUNoRyxDQUFDO0lBQ0QsT0FBTyxhQUFhLENBQUM7QUFDdkIsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLE9BQWtDO0lBQ25ELE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLDBCQUEwQixDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFB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
@@ -1,7 +1,8 @@
1
1
  import * as plugins from './plugins.js';
2
2
  import { createOllamaModel } from './smartai.provider.ollama.js';
3
3
  import { createAnthropicCachingMiddleware } from './smartai.middleware.anthropic.js';
4
- import { createOpenAiMaxProviderSettings } from './smartai.auth.openai.js';
4
+ import { createOpenAiChatGptInstructionsMiddleware } from './smartai.middleware.openai.js';
5
+ import { createOpenAiChatGptProviderSettings } from './smartai.auth.openai.js';
5
6
  /**
6
7
  * Returns a LanguageModelV3 for the given provider and model.
7
8
  * This is the primary API — consumers use the returned model with AI SDK's
@@ -20,10 +21,16 @@ export function getModel(options) {
20
21
  });
21
22
  }
22
23
  case 'openai': {
23
- const p = plugins.createOpenAI(options.openAiMaxAuth
24
- ? createOpenAiMaxProviderSettings(options.openAiMaxAuth)
24
+ const p = plugins.createOpenAI(options.openAiChatGptAuth
25
+ ? createOpenAiChatGptProviderSettings(options.openAiChatGptAuth)
25
26
  : { apiKey: options.apiKey });
26
- return p(options.model);
27
+ const base = p(options.model);
28
+ return options.openAiChatGptAuth
29
+ ? plugins.wrapLanguageModel({
30
+ model: base,
31
+ middleware: createOpenAiChatGptInstructionsMiddleware(),
32
+ })
33
+ : base;
27
34
  }
28
35
  case 'google': {
29
36
  const p = plugins.createGoogleGenerativeAI({ apiKey: options.apiKey });
@@ -58,4 +65,4 @@ export function getModelSetup(options) {
58
65
  const model = getModel(options);
59
66
  return options.providerOptions ? { model, providerOptions: options.providerOptions } : { model };
60
67
  }
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhaS5jbGFzc2VzLnNtYXJ0YWkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydGFpLmNsYXNzZXMuc21hcnRhaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUV4QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNyRixPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUzRTs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxPQUF3QjtJQUMvQyxRQUFRLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QixLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDakIsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUM5RCxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBb0IsQ0FBQztZQUNqRCxJQUFJLE9BQU8sQ0FBQyxhQUFhLEtBQUssS0FBSztnQkFBRSxPQUFPLElBQUksQ0FBQztZQUNqRCxPQUFPLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztnQkFDL0IsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsVUFBVSxFQUFFLGdDQUFnQyxDQUMxQyxPQUFPLE9BQU8sQ0FBQyxhQUFhLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQzlFO2FBQ0YsQ0FBK0IsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ2QsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FDNUIsT0FBTyxDQUFDLGFBQWE7Z0JBQ25CLENBQUMsQ0FBQywrQkFBK0IsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO2dCQUN4RCxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUMvQixDQUFDO1lBQ0YsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBb0IsQ0FBQztRQUM3QyxDQUFDO1FBQ0QsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ2QsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQW9CLENBQUM7UUFDN0MsQ0FBQztRQUNELEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNaLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDekQsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBb0IsQ0FBQztRQUM3QyxDQUFDO1FBQ0QsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ2YsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUM1RCxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFvQixDQUFDO1FBQzdDLENBQUM7UUFDRCxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDWCxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ3hELE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQW9CLENBQUM7UUFDN0MsQ0FBQztRQUNELEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQztZQUNsQixNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDL0QsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBb0IsQ0FBQztRQUM3QyxDQUFDO1FBQ0QsS0FBSyxRQUFRO1lBQ1gsT0FBTyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQztZQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXNCLE9BQTJCLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNsRixDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxPQUF3QjtJQUNwRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDaEMsT0FBTyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ25HLENBQUMifQ==
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhaS5jbGFzc2VzLnNtYXJ0YWkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydGFpLmNsYXNzZXMuc21hcnRhaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUV4QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNyRixPQUFPLEVBQUUseUNBQXlDLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRixPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUvRTs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxPQUF3QjtJQUMvQyxRQUFRLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QixLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDakIsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUM5RCxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBb0IsQ0FBQztZQUNqRCxJQUFJLE9BQU8sQ0FBQyxhQUFhLEtBQUssS0FBSztnQkFBRSxPQUFPLElBQUksQ0FBQztZQUNqRCxPQUFPLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztnQkFDL0IsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsVUFBVSxFQUFFLGdDQUFnQyxDQUMxQyxPQUFPLE9BQU8sQ0FBQyxhQUFhLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQzlFO2FBQ0YsQ0FBK0IsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ2QsTUFBTSxD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
@@ -3,7 +3,7 @@ import type { ISmartAiCacheOptions } from './smartai.cache.js';
3
3
  export type TProvider = 'anthropic' | 'openai' | 'google' | 'groq' | 'mistral' | 'xai' | 'perplexity' | 'ollama';
4
4
  export type TOpenAiReasoningEffort = 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh';
5
5
  export type TOpenAiTextVerbosity = 'low' | 'medium' | 'high';
6
- export interface IOpenAiMaxIdTokenInfo {
6
+ export interface IOpenAiChatGptTokenInfo {
7
7
  email?: string;
8
8
  chatgptPlanType?: string;
9
9
  chatgptUserId?: string;
@@ -12,36 +12,35 @@ export interface IOpenAiMaxIdTokenInfo {
12
12
  expiresAt?: string;
13
13
  rawJwt: string;
14
14
  }
15
- export interface IOpenAiMaxAuthCredentials {
15
+ export interface IOpenAiChatGptAuthCredentials {
16
16
  accessToken: string;
17
17
  refreshToken?: string;
18
18
  idToken?: string;
19
19
  accountId?: string;
20
- idTokenInfo?: IOpenAiMaxIdTokenInfo;
20
+ tokenInfo?: IOpenAiChatGptTokenInfo;
21
21
  baseUrl?: string;
22
22
  originator?: string;
23
23
  }
24
- export interface IOpenAiMaxTokenData extends IOpenAiMaxAuthCredentials {
24
+ export interface IOpenAiChatGptTokenData extends IOpenAiChatGptAuthCredentials {
25
25
  refreshToken: string;
26
- idToken: string;
27
- idTokenInfo: IOpenAiMaxIdTokenInfo;
26
+ tokenInfo: IOpenAiChatGptTokenInfo;
28
27
  }
29
- export interface IOpenAiMaxDeviceCode {
28
+ export interface IOpenAiChatGptDeviceCode {
30
29
  verificationUrl: string;
31
30
  userCode: string;
32
31
  deviceAuthId: string;
33
32
  intervalSeconds: number;
34
33
  }
35
- export interface IOpenAiMaxAuthOptions {
34
+ export interface IOpenAiChatGptAuthOptions {
36
35
  issuer?: string;
37
36
  clientId?: string;
38
37
  fetch?: typeof fetch;
39
38
  }
40
- export interface IOpenAiMaxDeviceCodePollOptions extends IOpenAiMaxAuthOptions {
39
+ export interface IOpenAiChatGptDeviceCodePollOptions extends IOpenAiChatGptAuthOptions {
41
40
  timeoutMs?: number;
42
41
  sleep?: (ms: number) => Promise<void>;
43
42
  }
44
- export interface IOpenAiMaxCompleteDeviceCodeOptions extends IOpenAiMaxDeviceCodePollOptions {
43
+ export interface IOpenAiChatGptCompleteDeviceCodeOptions extends IOpenAiChatGptDeviceCodePollOptions {
45
44
  forcedChatGptWorkspaceId?: string;
46
45
  }
47
46
  export interface IOpenAiProviderOptions extends JSONObject {
@@ -86,7 +85,7 @@ export interface ISmartAiOptions {
86
85
  * OpenAI ChatGPT/Codex subscription credentials from the device-code auth flow.
87
86
  * Only used when provider === 'openai'.
88
87
  */
89
- openAiMaxAuth?: IOpenAiMaxAuthCredentials;
88
+ openAiChatGptAuth?: IOpenAiChatGptAuthCredentials;
90
89
  /**
91
90
  * Provider-specific AI SDK generation options.
92
91
  * Pass this to generateText()/streamText() alongside the model.
@@ -0,0 +1,6 @@
1
+ import type { LanguageModelV3Middleware } from '@ai-sdk/provider';
2
+ /**
3
+ * ChatGPT's Codex backend requires top-level Responses API instructions.
4
+ * The standard OpenAI provider otherwise serializes system prompts as input items.
5
+ */
6
+ export declare function createOpenAiChatGptInstructionsMiddleware(): LanguageModelV3Middleware;
@@ -0,0 +1,40 @@
1
+ const isNonEmptyString = (value) => typeof value === 'string' && value.trim().length > 0;
2
+ const getSystemInstructions = (prompt) => {
3
+ const instructions = prompt
4
+ .filter((message) => message.role === 'system')
5
+ .map((message) => message.content)
6
+ .filter(isNonEmptyString);
7
+ return instructions.length > 0 ? instructions.join('\n') : undefined;
8
+ };
9
+ /**
10
+ * ChatGPT's Codex backend requires top-level Responses API instructions.
11
+ * The standard OpenAI provider otherwise serializes system prompts as input items.
12
+ */
13
+ export function createOpenAiChatGptInstructionsMiddleware() {
14
+ return {
15
+ specificationVersion: 'v3',
16
+ transformParams: async ({ params }) => {
17
+ const instructions = getSystemInstructions(params.prompt);
18
+ if (!instructions) {
19
+ return params;
20
+ }
21
+ const providerOptions = params.providerOptions ?? {};
22
+ const openAiProviderOptions = providerOptions.openai ?? {};
23
+ if (isNonEmptyString(openAiProviderOptions.instructions)) {
24
+ return params;
25
+ }
26
+ return {
27
+ ...params,
28
+ prompt: params.prompt.filter((message) => message.role !== 'system'),
29
+ providerOptions: {
30
+ ...providerOptions,
31
+ openai: {
32
+ ...openAiProviderOptions,
33
+ instructions,
34
+ },
35
+ },
36
+ };
37
+ },
38
+ };
39
+ }
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhaS5taWRkbGV3YXJlLm9wZW5haS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0YWkubWlkZGxld2FyZS5vcGVuYWkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEtBQWMsRUFBbUIsRUFBRSxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUVuSCxNQUFNLHFCQUFxQixHQUFHLENBQUMsTUFBNEMsRUFBc0IsRUFBRTtJQUNqRyxNQUFNLFlBQVksR0FBRyxNQUFNO1NBQ3hCLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUM7U0FDOUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1NBQ2pDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBRTVCLE9BQU8sWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUN2RSxDQUFDLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLFVBQVUseUNBQXlDO0lBQ3ZELE9BQU87UUFDTCxvQkFBb0IsRUFBRSxJQUFJO1FBQzFCLGVBQWUsRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFO1lBQ3BDLE1BQU0sWUFBWSxHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ2xCLE9BQU8sTUFBTSxDQUFDO1lBQ2hCLENBQUM7WUFFRCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQztZQUNyRCxNQUFNLHFCQUFxQixHQUFHLGVBQWUsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1lBQzNELElBQUksZ0JBQWdCLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztnQkFDekQsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQztZQUVELE9BQU87Z0JBQ0wsR0FBRyxNQUFNO2dCQUNULE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUM7Z0JBQ3BFLGVBQWUsRUFBRTtvQkFDZixHQUFHLGVBQWU7b0JBQ2xCLE1BQU0sRUFBRTt3QkFDTixHQUFHLHFCQUFxQjt3QkFDeEIsWUFBWTtxQkFDQztpQkFDaEI7YUFDbUMsQ0FBQztRQUN6QyxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMifQ==
@@ -0,0 +1,43 @@
1
+ import type { IOpenAiChatGptAuthOptions, IOpenAiChatGptTokenData } from '../dist_ts/smartai.interfaces.js';
2
+ export type TOpenAiChatGptAuthSource = 'smartai' | 'opencode' | 'codex';
3
+ export type TOpenAiChatGptAuthFileFormat = TOpenAiChatGptAuthSource | 'auto';
4
+ export interface IOpenAiChatGptAuthSourceConfig {
5
+ source: TOpenAiChatGptAuthSource;
6
+ filePath?: string;
7
+ format?: TOpenAiChatGptAuthFileFormat;
8
+ writeBack?: boolean;
9
+ }
10
+ export interface IOpenAiChatGptAuthSourceInspection {
11
+ source: TOpenAiChatGptAuthSource;
12
+ filePath: string;
13
+ exists: boolean;
14
+ usable: boolean;
15
+ expired?: boolean;
16
+ accountId?: string;
17
+ email?: string;
18
+ plan?: string;
19
+ expiresAt?: string;
20
+ error?: string;
21
+ }
22
+ export interface IInspectOpenAiChatGptAuthSourcesOptions {
23
+ sources?: Array<TOpenAiChatGptAuthSource | IOpenAiChatGptAuthSourceConfig>;
24
+ homeDir?: string;
25
+ now?: Date;
26
+ }
27
+ export interface IResolveOpenAiChatGptAuthOptions extends IInspectOpenAiChatGptAuthSourcesOptions {
28
+ refresh?: 'ifNeeded' | false;
29
+ writeBack?: Partial<Record<TOpenAiChatGptAuthSource, boolean>>;
30
+ authOptions?: IOpenAiChatGptAuthOptions;
31
+ }
32
+ export interface IResolvedOpenAiChatGptAuth {
33
+ source: TOpenAiChatGptAuthSource;
34
+ filePath: string;
35
+ tokenData: IOpenAiChatGptTokenData;
36
+ refreshed: boolean;
37
+ }
38
+ export declare const getDefaultOpenAiChatGptAuthPath: (source: TOpenAiChatGptAuthSource, homeDir?: string) => string;
39
+ export declare const normalizeOpenAiChatGptAuth: (input: unknown, format?: TOpenAiChatGptAuthFileFormat) => IOpenAiChatGptTokenData | undefined;
40
+ export declare const readOpenAiChatGptAuthFile: (filePath: string, format?: TOpenAiChatGptAuthFileFormat) => Promise<IOpenAiChatGptTokenData | undefined>;
41
+ export declare const inspectOpenAiChatGptAuthSources: (options?: IInspectOpenAiChatGptAuthSourcesOptions) => Promise<IOpenAiChatGptAuthSourceInspection[]>;
42
+ export declare const resolveOpenAiChatGptAuth: (options?: IResolveOpenAiChatGptAuthOptions) => Promise<IResolvedOpenAiChatGptAuth | undefined>;
43
+ export declare const writeOpenAiChatGptAuthFile: (filePath: string, tokenData: IOpenAiChatGptTokenData, format?: TOpenAiChatGptAuthFileFormat) => Promise<void>;