@modelprofile.com/flexharness-providers 7.0.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.
Files changed (130) hide show
  1. package/dist_ts_media_openai/image.d.ts +46 -0
  2. package/dist_ts_media_openai/image.js +110 -0
  3. package/dist_ts_media_openai/index.d.ts +10 -0
  4. package/dist_ts_media_openai/index.js +16 -0
  5. package/dist_ts_media_openai/plugins.d.ts +3 -0
  6. package/dist_ts_media_openai/plugins.js +4 -0
  7. package/dist_ts_openai_account/index.d.ts +6 -0
  8. package/dist_ts_openai_account/index.js +7 -0
  9. package/dist_ts_openai_account/plugins.d.ts +7 -0
  10. package/dist_ts_openai_account/plugins.js +6 -0
  11. package/dist_ts_openai_account/smartai.providers.credentials.d.ts +7 -0
  12. package/dist_ts_openai_account/smartai.providers.credentials.js +126 -0
  13. package/dist_ts_openai_account/smartai.providers.error.d.ts +11 -0
  14. package/dist_ts_openai_account/smartai.providers.error.js +30 -0
  15. package/dist_ts_openai_account/smartai.providers.interfaces.d.ts +161 -0
  16. package/dist_ts_openai_account/smartai.providers.interfaces.js +2 -0
  17. package/dist_ts_openai_account/smartai.providers.openai.d.ts +29 -0
  18. package/dist_ts_openai_account/smartai.providers.openai.js +1075 -0
  19. package/dist_ts_openai_account/smartai.providers.registry.d.ts +11 -0
  20. package/dist_ts_openai_account/smartai.providers.registry.js +53 -0
  21. package/dist_ts_openai_auth/index.d.ts +6 -0
  22. package/dist_ts_openai_auth/index.js +10 -0
  23. package/dist_ts_openai_auth/interfaces.d.ts +71 -0
  24. package/dist_ts_openai_auth/interfaces.js +2 -0
  25. package/dist_ts_openai_auth/smartai.auth.openai.d.ts +34 -0
  26. package/dist_ts_openai_auth/smartai.auth.openai.js +603 -0
  27. package/dist_ts_openai_auth/smartai.middleware.openai.d.ts +6 -0
  28. package/dist_ts_openai_auth/smartai.middleware.openai.js +47 -0
  29. package/dist_ts_openai_auth_files/index.d.ts +43 -0
  30. package/dist_ts_openai_auth_files/index.js +377 -0
  31. package/dist_ts_openai_auth_files/plugins.d.ts +9 -0
  32. package/dist_ts_openai_auth_files/plugins.js +10 -0
  33. package/dist_ts_providers/anthropic/index.d.ts +8 -0
  34. package/dist_ts_providers/anthropic/index.js +13 -0
  35. package/dist_ts_providers/anthropic/plugins.d.ts +4 -0
  36. package/dist_ts_providers/anthropic/plugins.js +4 -0
  37. package/dist_ts_providers/anthropic/smartai.middleware.anthropic.d.ts +8 -0
  38. package/dist_ts_providers/anthropic/smartai.middleware.anthropic.js +10 -0
  39. package/dist_ts_providers/google/index.d.ts +5 -0
  40. package/dist_ts_providers/google/index.js +6 -0
  41. package/dist_ts_providers/google/plugins.d.ts +3 -0
  42. package/dist_ts_providers/google/plugins.js +3 -0
  43. package/dist_ts_providers/groq/index.d.ts +5 -0
  44. package/dist_ts_providers/groq/index.js +6 -0
  45. package/dist_ts_providers/groq/plugins.d.ts +3 -0
  46. package/dist_ts_providers/groq/plugins.js +3 -0
  47. package/dist_ts_providers/index.d.ts +8 -0
  48. package/dist_ts_providers/index.js +9 -0
  49. package/dist_ts_providers/mistral/index.d.ts +5 -0
  50. package/dist_ts_providers/mistral/index.js +6 -0
  51. package/dist_ts_providers/mistral/plugins.d.ts +3 -0
  52. package/dist_ts_providers/mistral/plugins.js +3 -0
  53. package/dist_ts_providers/ollama/index.d.ts +6 -0
  54. package/dist_ts_providers/ollama/index.js +7 -0
  55. package/dist_ts_providers/ollama/interfaces.d.ts +26 -0
  56. package/dist_ts_providers/ollama/interfaces.js +2 -0
  57. package/dist_ts_providers/ollama/smartai.provider.ollama.d.ts +8 -0
  58. package/dist_ts_providers/ollama/smartai.provider.ollama.js +378 -0
  59. package/dist_ts_providers/openai/index.d.ts +15 -0
  60. package/dist_ts_providers/openai/index.js +14 -0
  61. package/dist_ts_providers/openai/plugins.d.ts +6 -0
  62. package/dist_ts_providers/openai/plugins.js +4 -0
  63. package/dist_ts_providers/perplexity/index.d.ts +5 -0
  64. package/dist_ts_providers/perplexity/index.js +6 -0
  65. package/dist_ts_providers/perplexity/plugins.d.ts +3 -0
  66. package/dist_ts_providers/perplexity/plugins.js +3 -0
  67. package/dist_ts_providers/xai/index.d.ts +5 -0
  68. package/dist_ts_providers/xai/index.js +6 -0
  69. package/dist_ts_providers/xai/plugins.d.ts +3 -0
  70. package/dist_ts_providers/xai/plugins.js +3 -0
  71. package/dist_ts_research/index.d.ts +19 -0
  72. package/dist_ts_research/index.js +98 -0
  73. package/dist_ts_research/plugins.d.ts +2 -0
  74. package/dist_ts_research/plugins.js +3 -0
  75. package/license.md +21 -0
  76. package/openai-codex-license.txt +201 -0
  77. package/package.json +105 -0
  78. package/readme.md +62 -0
  79. package/third-party-notices.md +19 -0
  80. package/ts_media_openai/image.ts +147 -0
  81. package/ts_media_openai/index.ts +26 -0
  82. package/ts_media_openai/plugins.ts +3 -0
  83. package/ts_media_openai/readme.md +37 -0
  84. package/ts_openai_account/index.ts +11 -0
  85. package/ts_openai_account/plugins.ts +9 -0
  86. package/ts_openai_account/readme.md +37 -0
  87. package/ts_openai_account/smartai.providers.credentials.ts +163 -0
  88. package/ts_openai_account/smartai.providers.error.ts +49 -0
  89. package/ts_openai_account/smartai.providers.interfaces.ts +222 -0
  90. package/ts_openai_account/smartai.providers.openai.ts +1209 -0
  91. package/ts_openai_account/smartai.providers.registry.ts +57 -0
  92. package/ts_openai_auth/index.ts +12 -0
  93. package/ts_openai_auth/interfaces.ts +89 -0
  94. package/ts_openai_auth/readme.md +37 -0
  95. package/ts_openai_auth/smartai.auth.openai.ts +789 -0
  96. package/ts_openai_auth/smartai.middleware.openai.ts +55 -0
  97. package/ts_openai_auth_files/index.ts +499 -0
  98. package/ts_openai_auth_files/plugins.ts +13 -0
  99. package/ts_openai_auth_files/readme.md +37 -0
  100. package/ts_providers/anthropic/index.ts +20 -0
  101. package/ts_providers/anthropic/plugins.ts +4 -0
  102. package/ts_providers/anthropic/readme.md +37 -0
  103. package/ts_providers/anthropic/smartai.middleware.anthropic.ts +12 -0
  104. package/ts_providers/google/index.ts +8 -0
  105. package/ts_providers/google/plugins.ts +3 -0
  106. package/ts_providers/google/readme.md +37 -0
  107. package/ts_providers/groq/index.ts +8 -0
  108. package/ts_providers/groq/plugins.ts +3 -0
  109. package/ts_providers/groq/readme.md +37 -0
  110. package/ts_providers/index.ts +8 -0
  111. package/ts_providers/mistral/index.ts +8 -0
  112. package/ts_providers/mistral/plugins.ts +3 -0
  113. package/ts_providers/mistral/readme.md +37 -0
  114. package/ts_providers/ollama/index.ts +8 -0
  115. package/ts_providers/ollama/interfaces.ts +28 -0
  116. package/ts_providers/ollama/readme.md +37 -0
  117. package/ts_providers/ollama/smartai.provider.ollama.ts +426 -0
  118. package/ts_providers/openai/index.ts +29 -0
  119. package/ts_providers/openai/plugins.ts +6 -0
  120. package/ts_providers/openai/readme.md +37 -0
  121. package/ts_providers/perplexity/index.ts +8 -0
  122. package/ts_providers/perplexity/plugins.ts +3 -0
  123. package/ts_providers/perplexity/readme.md +37 -0
  124. package/ts_providers/readme.md +62 -0
  125. package/ts_providers/xai/index.ts +8 -0
  126. package/ts_providers/xai/plugins.ts +3 -0
  127. package/ts_providers/xai/readme.md +37 -0
  128. package/ts_research/index.ts +120 -0
  129. package/ts_research/plugins.ts +2 -0
  130. package/ts_research/readme.md +37 -0
@@ -0,0 +1,46 @@
1
+ export interface IImageGenerateOptions {
2
+ apiKey: string;
3
+ prompt: string;
4
+ model?: 'gpt-image-1' | 'dall-e-3' | 'dall-e-2';
5
+ quality?: 'low' | 'medium' | 'high' | 'standard' | 'hd' | 'auto';
6
+ size?: '256x256' | '512x512' | '1024x1024' | '1536x1024' | '1024x1536' | '1792x1024' | '1024x1792' | 'auto';
7
+ style?: 'vivid' | 'natural';
8
+ background?: 'transparent' | 'opaque' | 'auto';
9
+ outputFormat?: 'png' | 'jpeg' | 'webp';
10
+ outputCompression?: number;
11
+ moderation?: 'low' | 'auto';
12
+ n?: number;
13
+ stream?: boolean;
14
+ partialImages?: number;
15
+ }
16
+ export interface IImageEditOptions {
17
+ apiKey: string;
18
+ image: Buffer;
19
+ prompt: string;
20
+ mask?: Buffer;
21
+ model?: 'gpt-image-1' | 'dall-e-2';
22
+ quality?: 'low' | 'medium' | 'high' | 'standard' | 'auto';
23
+ size?: '256x256' | '512x512' | '1024x1024' | '1536x1024' | '1024x1536' | 'auto';
24
+ background?: 'transparent' | 'opaque' | 'auto';
25
+ outputFormat?: 'png' | 'jpeg' | 'webp';
26
+ outputCompression?: number;
27
+ n?: number;
28
+ stream?: boolean;
29
+ partialImages?: number;
30
+ }
31
+ export interface IImageResponse {
32
+ images: Array<{
33
+ b64_json?: string;
34
+ url?: string;
35
+ revisedPrompt?: string;
36
+ }>;
37
+ metadata?: {
38
+ model: string;
39
+ quality?: string;
40
+ size?: string;
41
+ outputFormat?: string;
42
+ tokensUsed?: number;
43
+ };
44
+ }
45
+ export declare function generateImage(options: IImageGenerateOptions): Promise<IImageResponse>;
46
+ export declare function editImage(options: IImageEditOptions): Promise<IImageResponse>;
@@ -0,0 +1,110 @@
1
+ import * as plugins from './plugins.js';
2
+ export async function generateImage(options) {
3
+ const client = new plugins.OpenAI({ apiKey: options.apiKey });
4
+ const model = options.model || 'gpt-image-1';
5
+ const requestParams = {
6
+ model,
7
+ prompt: options.prompt,
8
+ n: options.n || 1,
9
+ };
10
+ if (model === 'gpt-image-1') {
11
+ if (options.quality)
12
+ requestParams.quality = options.quality;
13
+ if (options.size)
14
+ requestParams.size = options.size;
15
+ if (options.background)
16
+ requestParams.background = options.background;
17
+ if (options.outputFormat)
18
+ requestParams.output_format = options.outputFormat;
19
+ if (options.outputCompression !== undefined)
20
+ requestParams.output_compression = options.outputCompression;
21
+ if (options.moderation)
22
+ requestParams.moderation = options.moderation;
23
+ if (options.stream !== undefined)
24
+ requestParams.stream = options.stream;
25
+ if (options.partialImages !== undefined)
26
+ requestParams.partial_images = options.partialImages;
27
+ }
28
+ else if (model === 'dall-e-3') {
29
+ if (options.quality)
30
+ requestParams.quality = options.quality;
31
+ if (options.size)
32
+ requestParams.size = options.size;
33
+ if (options.style)
34
+ requestParams.style = options.style;
35
+ requestParams.response_format = 'b64_json';
36
+ }
37
+ else if (model === 'dall-e-2') {
38
+ if (options.size)
39
+ requestParams.size = options.size;
40
+ requestParams.response_format = 'b64_json';
41
+ }
42
+ const result = await client.images.generate(requestParams);
43
+ const images = (result.data || []).map((img) => ({
44
+ b64_json: img.b64_json,
45
+ url: img.url,
46
+ revisedPrompt: img.revised_prompt,
47
+ }));
48
+ return {
49
+ images,
50
+ metadata: {
51
+ model,
52
+ quality: result.quality,
53
+ size: result.size,
54
+ outputFormat: result.output_format,
55
+ tokensUsed: result.usage?.total_tokens,
56
+ },
57
+ };
58
+ }
59
+ export async function editImage(options) {
60
+ const client = new plugins.OpenAI({ apiKey: options.apiKey });
61
+ const model = options.model || 'gpt-image-1';
62
+ const imageFile = await plugins.toFile(options.image, 'image.png', { type: 'image/png' });
63
+ const requestParams = {
64
+ model,
65
+ image: imageFile,
66
+ prompt: options.prompt,
67
+ n: options.n || 1,
68
+ };
69
+ if (options.mask) {
70
+ requestParams.mask = await plugins.toFile(options.mask, 'mask.png', { type: 'image/png' });
71
+ }
72
+ if (model === 'gpt-image-1') {
73
+ if (options.quality)
74
+ requestParams.quality = options.quality;
75
+ if (options.size)
76
+ requestParams.size = options.size;
77
+ if (options.background)
78
+ requestParams.background = options.background;
79
+ if (options.outputFormat)
80
+ requestParams.output_format = options.outputFormat;
81
+ if (options.outputCompression !== undefined)
82
+ requestParams.output_compression = options.outputCompression;
83
+ if (options.stream !== undefined)
84
+ requestParams.stream = options.stream;
85
+ if (options.partialImages !== undefined)
86
+ requestParams.partial_images = options.partialImages;
87
+ }
88
+ else if (model === 'dall-e-2') {
89
+ if (options.size)
90
+ requestParams.size = options.size;
91
+ requestParams.response_format = 'b64_json';
92
+ }
93
+ const result = await client.images.edit(requestParams);
94
+ const images = (result.data || []).map((img) => ({
95
+ b64_json: img.b64_json,
96
+ url: img.url,
97
+ revisedPrompt: img.revised_prompt,
98
+ }));
99
+ return {
100
+ images,
101
+ metadata: {
102
+ model,
103
+ quality: result.quality,
104
+ size: result.size,
105
+ outputFormat: result.output_format,
106
+ tokensUsed: result.usage?.total_tokens,
107
+ },
108
+ };
109
+ }
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19tZWRpYV9vcGVuYWkvaW1hZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFpRHhDLE1BQU0sQ0FBQyxLQUFLLFVBQVUsYUFBYSxDQUFDLE9BQThCO0lBQ2hFLE1BQU0sTUFBTSxHQUFHLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM5RCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxJQUFJLGFBQWEsQ0FBQztJQUU3QyxNQUFNLGFBQWEsR0FBNEI7UUFDN0MsS0FBSztRQUNMLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtRQUN0QixDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDO0tBQ2xCLENBQUM7SUFFRixJQUFJLEtBQUssS0FBSyxhQUFhLEVBQUUsQ0FBQztRQUM1QixJQUFJLE9BQU8sQ0FBQyxPQUFPO1lBQUUsYUFBYSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQzdELElBQUksT0FBTyxDQUFDLElBQUk7WUFBRSxhQUFhLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDcEQsSUFBSSxPQUFPLENBQUMsVUFBVTtZQUFFLGFBQWEsQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUN0RSxJQUFJLE9BQU8sQ0FBQyxZQUFZO1lBQUUsYUFBYSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDO1FBQzdFLElBQUksT0FBTyxDQUFDLGlCQUFpQixLQUFLLFNBQVM7WUFBRSxhQUFhLENBQUMsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDO1FBQzFHLElBQUksT0FBTyxDQUFDLFVBQVU7WUFBRSxhQUFhLENBQUMsVUFBVSxH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
@@ -0,0 +1,10 @@
1
+ export interface IOpenAiTtsOptions {
2
+ apiKey: string;
3
+ text: string;
4
+ voice?: 'alloy' | 'echo' | 'fable' | 'onyx' | 'nova' | 'shimmer';
5
+ model?: 'tts-1' | 'tts-1-hd';
6
+ responseFormat?: 'mp3' | 'opus' | 'aac' | 'flac';
7
+ speed?: number;
8
+ }
9
+ export declare function textToSpeech(options: IOpenAiTtsOptions): Promise<NodeJS.ReadableStream>;
10
+ export * from './image.js';
@@ -0,0 +1,16 @@
1
+ import * as plugins from './plugins.js';
2
+ import { Readable } from 'node:stream';
3
+ export async function textToSpeech(options) {
4
+ const client = new plugins.OpenAI({ apiKey: options.apiKey });
5
+ const result = await client.audio.speech.create({
6
+ model: options.model ?? 'tts-1',
7
+ voice: options.voice ?? 'alloy',
8
+ input: options.text,
9
+ response_format: options.responseFormat ?? 'mp3',
10
+ speed: options.speed ?? 1,
11
+ });
12
+ const stream = result.body;
13
+ return Readable.fromWeb(stream);
14
+ }
15
+ export * from './image.js';
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19tZWRpYV9vcGVuYWkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQVd2QyxNQUFNLENBQUMsS0FBSyxVQUFVLFlBQVksQ0FBQyxPQUEwQjtJQUMzRCxNQUFNLE1BQU0sR0FBRyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDOUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDOUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLElBQUksT0FBTztRQUMvQixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPO1FBQy9CLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSTtRQUNuQixlQUFlLEVBQUUsT0FBTyxDQUFDLGNBQWMsSUFBSSxLQUFLO1FBQ2hELEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxJQUFJLENBQUM7S0FDMUIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztJQUMzQixPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBYSxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUVELGNBQWMsWUFBWSxDQUFDIn0=
@@ -0,0 +1,3 @@
1
+ import OpenAI from 'openai';
2
+ import { toFile } from 'openai';
3
+ export { OpenAI, toFile };
@@ -0,0 +1,4 @@
1
+ import OpenAI from 'openai';
2
+ import { toFile } from 'openai';
3
+ export { OpenAI, toFile };
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX21lZGlhX29wZW5haS9wbHVnaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMifQ==
@@ -0,0 +1,6 @@
1
+ export * from './smartai.providers.interfaces.js';
2
+ export * from './smartai.providers.error.js';
3
+ export * from './smartai.providers.credentials.js';
4
+ export * from './smartai.providers.openai.js';
5
+ export * from './smartai.providers.registry.js';
6
+ export { OPENAI_CHATGPT_AUTH_ISSUER, OPENAI_CHATGPT_CLIENT_ID, OPENAI_CHATGPT_CODEX_BASE_URL, OPENAI_CHATGPT_DEFAULT_ORIGINATOR, } from '@modelprofile.com/flexharness-providers/auth';
@@ -0,0 +1,7 @@
1
+ export * from './smartai.providers.interfaces.js';
2
+ export * from './smartai.providers.error.js';
3
+ export * from './smartai.providers.credentials.js';
4
+ export * from './smartai.providers.openai.js';
5
+ export * from './smartai.providers.registry.js';
6
+ export { OPENAI_CHATGPT_AUTH_ISSUER, OPENAI_CHATGPT_CLIENT_ID, OPENAI_CHATGPT_CODEX_BASE_URL, OPENAI_CHATGPT_DEFAULT_ORIGINATOR, } from '@modelprofile.com/flexharness-providers/auth';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19vcGVuYWlfYWNjb3VudC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsT0FBTyxFQUNMLDBCQUEwQixFQUMxQix3QkFBd0IsRUFDeEIsNkJBQTZCLEVBQzdCLGlDQUFpQyxHQUNsQyxNQUFNLDhDQUE4QyxDQUFDIn0=
@@ -0,0 +1,7 @@
1
+ import * as crypto from 'node:crypto';
2
+ import * as http from 'node:http';
3
+ import { Buffer } from 'node:buffer';
4
+ import type { Server } from 'node:http';
5
+ import type { Socket } from 'node:net';
6
+ export { Buffer, crypto, http };
7
+ export type { Server, Socket };
@@ -0,0 +1,6 @@
1
+ // node native scope
2
+ import * as crypto from 'node:crypto';
3
+ import * as http from 'node:http';
4
+ import { Buffer } from 'node:buffer';
5
+ export { Buffer, crypto, http };
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX29wZW5haV9hY2NvdW50L3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sS0FBSyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFJckMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMifQ==
@@ -0,0 +1,7 @@
1
+ import type { IOpenAiChatGptAuthCredentials } from '@modelprofile.com/flexharness-providers/auth';
2
+ import type { IOpenAiChatGptOAuthCredential, TSmartAiProviderCredential } from './smartai.providers.interfaces.js';
3
+ export declare const providerCredentialEnvelopeVersion: 1;
4
+ export declare const providerCredentialEnvelopeMaxBytes = 16384;
5
+ export declare const serializeProviderCredential: (credentialArg: TSmartAiProviderCredential) => Uint8Array;
6
+ export declare const parseProviderCredential: (envelopeBytesArg: Uint8Array) => TSmartAiProviderCredential;
7
+ export declare const toOpenAiChatGptAuthCredentials: (credentialArg: IOpenAiChatGptOAuthCredential) => IOpenAiChatGptAuthCredentials;
@@ -0,0 +1,126 @@
1
+ import * as plugins from './plugins.js';
2
+ import { parseOpenAiChatGptTokenInfo } from '@modelprofile.com/flexharness-providers/auth';
3
+ import { createSmartAiProviderError } from './smartai.providers.error.js';
4
+ export const providerCredentialEnvelopeVersion = 1;
5
+ export const providerCredentialEnvelopeMaxBytes = 16_384;
6
+ const isPlainObject = (valueArg) => typeof valueArg === 'object'
7
+ && valueArg !== null
8
+ && !Array.isArray(valueArg)
9
+ && (Object.getPrototypeOf(valueArg) === Object.prototype
10
+ || Object.getPrototypeOf(valueArg) === null);
11
+ const hasExactKeys = (valueArg, keysArg) => {
12
+ const keys = Object.keys(valueArg);
13
+ return keys.length === keysArg.length && keysArg.every((key) => Object.hasOwn(valueArg, key));
14
+ };
15
+ const boundedString = (valueArg, maximumBytesArg) => typeof valueArg === 'string'
16
+ && valueArg.length > 0
17
+ && plugins.Buffer.byteLength(valueArg, 'utf8') <= maximumBytesArg;
18
+ const parseOAuthCredential = (valueArg) => {
19
+ const required = [
20
+ 'kind',
21
+ 'providerId',
22
+ 'accessToken',
23
+ 'refreshToken',
24
+ 'idToken',
25
+ ];
26
+ const optional = ['lastRefreshAt'];
27
+ const keys = Object.keys(valueArg);
28
+ if (!required.every((key) => Object.hasOwn(valueArg, key))
29
+ || keys.some((key) => !required.includes(key) && !optional.includes(key))
30
+ || valueArg.kind !== 'chatgptOAuth'
31
+ || valueArg.providerId !== 'openai'
32
+ || !boundedString(valueArg.accessToken, providerCredentialEnvelopeMaxBytes)
33
+ || !boundedString(valueArg.refreshToken, providerCredentialEnvelopeMaxBytes)
34
+ || !boundedString(valueArg.idToken, providerCredentialEnvelopeMaxBytes)
35
+ || (valueArg.lastRefreshAt !== undefined
36
+ && (!boundedString(valueArg.lastRefreshAt, 128)
37
+ || !Number.isFinite(Date.parse(valueArg.lastRefreshAt))))) {
38
+ throw createSmartAiProviderError('CREDENTIAL_INVALID');
39
+ }
40
+ try {
41
+ parseOpenAiChatGptTokenInfo(valueArg.idToken);
42
+ }
43
+ catch {
44
+ throw createSmartAiProviderError('CREDENTIAL_INVALID');
45
+ }
46
+ return {
47
+ kind: 'chatgptOAuth',
48
+ providerId: 'openai',
49
+ accessToken: valueArg.accessToken,
50
+ refreshToken: valueArg.refreshToken,
51
+ idToken: valueArg.idToken,
52
+ ...(typeof valueArg.lastRefreshAt === 'string'
53
+ ? { lastRefreshAt: valueArg.lastRefreshAt }
54
+ : {}),
55
+ };
56
+ };
57
+ const parseCredential = (valueArg) => {
58
+ if (!isPlainObject(valueArg))
59
+ throw createSmartAiProviderError('CREDENTIAL_INVALID');
60
+ if (valueArg.kind === 'apiKey') {
61
+ if (!hasExactKeys(valueArg, ['kind', 'providerId', 'apiKey'])
62
+ || !boundedString(valueArg.providerId, 256)
63
+ || !boundedString(valueArg.apiKey, providerCredentialEnvelopeMaxBytes)) {
64
+ throw createSmartAiProviderError('CREDENTIAL_INVALID');
65
+ }
66
+ return { kind: 'apiKey', providerId: valueArg.providerId, apiKey: valueArg.apiKey };
67
+ }
68
+ return parseOAuthCredential(valueArg);
69
+ };
70
+ export const serializeProviderCredential = (credentialArg) => {
71
+ const credential = parseCredential(credentialArg);
72
+ const envelope = {
73
+ schemaVersion: providerCredentialEnvelopeVersion,
74
+ credential,
75
+ };
76
+ const bytes = plugins.Buffer.from(JSON.stringify(envelope), 'utf8');
77
+ if (bytes.byteLength > providerCredentialEnvelopeMaxBytes) {
78
+ bytes.fill(0);
79
+ throw createSmartAiProviderError('CREDENTIAL_INVALID');
80
+ }
81
+ return Uint8Array.from(bytes);
82
+ };
83
+ export const parseProviderCredential = (envelopeBytesArg) => {
84
+ if (!(envelopeBytesArg instanceof Uint8Array)
85
+ || envelopeBytesArg.byteLength < 1
86
+ || envelopeBytesArg.byteLength > providerCredentialEnvelopeMaxBytes) {
87
+ throw createSmartAiProviderError('CREDENTIAL_INVALID');
88
+ }
89
+ const copiedBytes = plugins.Buffer.from(envelopeBytesArg);
90
+ let parsed;
91
+ try {
92
+ parsed = JSON.parse(copiedBytes.toString('utf8'));
93
+ }
94
+ catch {
95
+ throw createSmartAiProviderError('CREDENTIAL_INVALID');
96
+ }
97
+ finally {
98
+ copiedBytes.fill(0);
99
+ }
100
+ if (!isPlainObject(parsed)
101
+ || !hasExactKeys(parsed, ['schemaVersion', 'credential'])
102
+ || parsed.schemaVersion !== providerCredentialEnvelopeVersion) {
103
+ throw createSmartAiProviderError('CREDENTIAL_INVALID');
104
+ }
105
+ return parseCredential(parsed.credential);
106
+ };
107
+ export const toOpenAiChatGptAuthCredentials = (credentialArg) => {
108
+ const credential = parseOAuthCredential(credentialArg);
109
+ let tokenInfo;
110
+ try {
111
+ tokenInfo = parseOpenAiChatGptTokenInfo(credential.idToken);
112
+ }
113
+ catch {
114
+ throw createSmartAiProviderError('CREDENTIAL_INVALID');
115
+ }
116
+ return {
117
+ accessToken: credential.accessToken,
118
+ refreshToken: credential.refreshToken,
119
+ idToken: credential.idToken,
120
+ ...(tokenInfo.chatgptAccountId ? { accountId: tokenInfo.chatgptAccountId } : {}),
121
+ tokenInfo: {
122
+ ...tokenInfo,
123
+ },
124
+ };
125
+ };
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhaS5wcm92aWRlcnMuY3JlZGVudGlhbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19vcGVuYWlfYWNjb3VudC9zbWFydGFpLnByb3ZpZGVycy5jcmVkZW50aWFscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUMzRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQU8xRSxNQUFNLENBQUMsTUFBTSxpQ0FBaUMsR0FBRyxDQUFVLENBQUM7QUFDNUQsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsTUFBTSxDQUFDO0FBT3pELE1BQU0sYUFBYSxHQUFHLENBQUMsUUFBaUIsRUFBdUMsRUFBRSxDQUMvRSxPQUFPLFFBQVEsS0FBSyxRQUFRO09BQ3pCLFFBQVEsS0FBSyxJQUFJO09BQ2pCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7T0FDeEIsQ0FDRCxNQUFNLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxTQUFTO1dBQ2pELE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxDQUM1QyxDQUFDO0FBRUosTUFBTSxZQUFZLEdBQUcsQ0FBQyxRQUFpQyxFQUFFLE9BQTBCLEVBQVcsRUFBRTtJQUM5RixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25DLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEcsQ0FBQyxDQUFDO0FBRUYsTUFBTSxhQUFhLEdBQUcsQ0FBQyxRQUFpQixFQUFFLGVBQXVCLEVBQXNCLEVBQUUsQ0FDdkYsT0FBTyxRQUFRLEtBQUssUUFBUTtPQUN6QixRQUFRLENBQUMsTUFBTSxHQUFHLENBQUM7T0FDbkIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLGVBQWUsQ0FBQztBQUVwRSxNQUFNLG9CQUFvQixHQUFHLENBQzNCLFFBQWlDLEVBQ0YsRUFBRTtJQUNqQyxNQUFNLFFBQVEsR0FBRztRQUNmLE1BQU07UUFDTixZQUFZO1FBQ1osYUFBYTtRQUNiLGNBQWM7UUFDZCxTQUFTO0tBQ1YsQ0FBQztJQUNGLE1BQU0sUUFBUSxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDbkMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNuQyxJQUNFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7V0FDbkQsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztXQUN0RSxRQUFRLENBQUMsSUFBSSxLQUFLLGNBQWM7V0FDaEMsUUFBUSxDQUFDLFVBQVUsS0FBSyxRQUFRO1dBQ2hDLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsa0NBQWtDLENBQUM7V0FDeEUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxrQ0FBa0MsQ0FBQztXQUN6RSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLGtDQUFrQyxDQUFDO1dBQ3BFLENBQ0QsUUFBUSxDQUFDLGFBQWEsS0FBSyxTQUFTO2VBQ2pDLENBQ0QsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUM7bUJBQ3hDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUN4RCxDQUNGLEVBQ0QsQ0FBQztRQUNELE1BQU0sMEJBQTBCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBQ0QsSUFBSSxDQUFDO1FBQ0gsMkJBQTJCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxNQUFNLDBCQUEwQixDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDekQsQ0FBQztJQUNELE9BQU87UUFDTCxJQUFJLEVBQUUsY0FBYztRQUNwQixVQUFVLEVBQUUsUUFBUTtRQUNwQixXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVc7UUFDakMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxZQUFZO1FBQ25DLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTztRQUN6QixHQUFHLENBQUMsT0FBTyxRQUFRLENBQUMsYUFBYSxLQUFLLFFBQVE7WUFDNUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLFFBQVEsQ0FBQyxhQUFhLEVBQUU7WUFDM0MsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNSLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLGVBQWUsR0FBRyxDQUFDLFFBQWlCLEVBQThCLEVBQUU7SUFDeEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUM7UUFBRSxNQUFNLDBCQUEwQixDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDckYsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQy9CLElBQ0UsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztlQUN0RCxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQztlQUN4QyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLGtDQUFrQyxDQUFDLEVBQ3RFLENBQUM7WUFDRCxNQUFNLDBCQUEwQixDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDekQsQ0FBQztRQUNELE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDdEYsQ0FBQztJQUNELE9BQU8sb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDeEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsQ0FDekMsYUFBeUMsRUFDN0IsRUFBRTtJQUNkLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNsRCxNQUFNLFFBQVEsR0FBa0M7UUFDOUMsYUFBYSxFQUFFLGlDQUFpQztRQUNoRCxVQUFVO0tBQ1gsQ0FBQztJQUNGLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDcEUsSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLGtDQUFrQyxFQUFFLENBQUM7UUFDMUQsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLE1BQU0sMEJBQTBCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBQ0QsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQ3JDLGdCQUE0QixFQUNBLEVBQUU7SUFDOUIsSUFDRSxDQUFDLENBQUMsZ0JBQWdCLFlBQVksVUFBVSxDQUFDO1dBQ3RDLGdCQUFnQixDQUFDLFVBQVUsR0FBRyxDQUFDO1dBQy9CLGdCQUFnQixDQUFDLFVBQVUsR0FBRyxrQ0FBa0MsRUFDbkUsQ0FBQztRQUNELE1BQU0sMEJBQTBCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBQ0QsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMxRCxJQUFJLE1BQWUsQ0FBQztJQUNwQixJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFZLENBQUM7SUFDL0QsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE1BQU0sMEJBQTBCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUN6RCxDQUFDO1lBQVMsQ0FBQztRQUNULFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUNELElBQ0UsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO1dBQ25CLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLGVBQWUsRUFBRSxZQUFZLENBQUMsQ0FBQztXQUN0RCxNQUFNLENBQUMsYUFBYSxLQUFLLGlDQUFpQyxFQUM3RCxDQUFDO1FBQ0QsTUFBTSwwQkFBMEIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFDRCxPQUFPLGVBQWUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDNUMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsQ0FDNUMsYUFBNEMsRUFDYixFQUFFO0lBQ2pDLE1BQU0sVUFBVSxHQUFHLG9CQUFvQixDQUFDLGFBQW1ELENBQUMsQ0FBQztJQUM3RixJQUFJLFNBQVMsQ0FBQztJQUNkLElBQUksQ0FBQztRQUNILFNBQVMsR0FBRywyQkFBMkIsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE1BQU0sMEJBQTBCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBQ0QsT0FBTztRQUNMLFdBQVcsRUFBRSxVQUFVLENBQUMsV0FBVztRQUNuQyxZQUFZLEVBQUUsVUFBVSxDQUFDLFlBQVk7UUFDckMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPO1FBQzNCLEdBQUcsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDaEYsU0FBUyxFQUFFO1lBQ1QsR0FBRyxTQUFTO1NBQ2I7S0FDRixDQUFDO0FBQ0osQ0FBQyxDQUFDIn0=
@@ -0,0 +1,11 @@
1
+ export type TSmartAiProviderErrorCode = 'ABORTED' | 'CLOSED' | 'CREDENTIAL_INVALID' | 'INVALID_ARGUMENT' | 'LOGIN_BUSY' | 'LOGIN_CANCELED' | 'LOGIN_FAILED' | 'MODEL_LIST_FAILED' | 'NETWORK_FAILED' | 'PROTOCOL_ERROR' | 'REFRESH_FAILED' | 'TIMEOUT';
2
+ export declare class SmartAiProviderError extends Error {
3
+ readonly code: TSmartAiProviderErrorCode;
4
+ constructor(codeArg: TSmartAiProviderErrorCode);
5
+ toJSON(): {
6
+ name: string;
7
+ code: TSmartAiProviderErrorCode;
8
+ message: string;
9
+ };
10
+ }
11
+ export declare const createSmartAiProviderError: (codeArg: TSmartAiProviderErrorCode) => SmartAiProviderError;
@@ -0,0 +1,30 @@
1
+ const codes = new Set([
2
+ 'ABORTED',
3
+ 'CLOSED',
4
+ 'CREDENTIAL_INVALID',
5
+ 'INVALID_ARGUMENT',
6
+ 'LOGIN_BUSY',
7
+ 'LOGIN_CANCELED',
8
+ 'LOGIN_FAILED',
9
+ 'MODEL_LIST_FAILED',
10
+ 'NETWORK_FAILED',
11
+ 'PROTOCOL_ERROR',
12
+ 'REFRESH_FAILED',
13
+ 'TIMEOUT',
14
+ ]);
15
+ export class SmartAiProviderError extends Error {
16
+ code;
17
+ constructor(codeArg) {
18
+ const code = codes.has(codeArg) ? codeArg : 'PROTOCOL_ERROR';
19
+ super(`SmartAI provider operation failed (${code}).`);
20
+ this.name = 'SmartAiProviderError';
21
+ this.code = code;
22
+ Object.setPrototypeOf(this, new.target.prototype);
23
+ this.stack = `${this.name}: ${this.message}`;
24
+ }
25
+ toJSON() {
26
+ return { name: this.name, code: this.code, message: this.message };
27
+ }
28
+ }
29
+ export const createSmartAiProviderError = (codeArg) => new SmartAiProviderError(codeArg);
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhaS5wcm92aWRlcnMuZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19vcGVuYWlfYWNjb3VudC9zbWFydGFpLnByb3ZpZGVycy5lcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFjQSxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBNEI7SUFDL0MsU0FBUztJQUNULFFBQVE7SUFDUixvQkFBb0I7SUFDcEIsa0JBQWtCO0lBQ2xCLFlBQVk7SUFDWixnQkFBZ0I7SUFDaEIsY0FBYztJQUNkLG1CQUFtQjtJQUNuQixnQkFBZ0I7SUFDaEIsZ0JBQWdCO0lBQ2hCLGdCQUFnQjtJQUNoQixTQUFTO0NBQ1YsQ0FBQyxDQUFDO0FBRUgsTUFBTSxPQUFPLG9CQUFxQixTQUFRLEtBQUs7SUFDN0IsSUFBSSxDQUE0QjtJQUVoRCxZQUFZLE9BQWtDO1FBQzVDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUM7UUFDN0QsS0FBSyxDQUFDLHNDQUFzQyxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxJQUFJLEdBQUcsc0JBQXNCLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVNLE1BQU07UUFDWCxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNyRSxDQUFDO0NBQ0Y7QUFFRCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxDQUN4QyxPQUFrQyxFQUNaLEVBQUUsQ0FBQyxJQUFJLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDIn0=
@@ -0,0 +1,161 @@
1
+ export type TSmartAiProviderId = string;
2
+ export type TSmartAiProviderLoginFlow = 'browser' | 'device';
3
+ export type TSmartAiProviderInputModality = 'text' | 'image' | 'audio';
4
+ export interface ISmartAiProviderDescriptor {
5
+ providerId: TSmartAiProviderId;
6
+ displayName: string;
7
+ loginFlows: readonly TSmartAiProviderLoginFlow[];
8
+ supportsApiKey: boolean;
9
+ }
10
+ export interface ISmartAiProviderApiKeyCredential {
11
+ kind: 'apiKey';
12
+ providerId: TSmartAiProviderId;
13
+ apiKey: string;
14
+ }
15
+ export interface IOpenAiChatGptOAuthCredential {
16
+ kind: 'chatgptOAuth';
17
+ providerId: 'openai';
18
+ accessToken: string;
19
+ refreshToken: string;
20
+ idToken: string;
21
+ lastRefreshAt?: string;
22
+ }
23
+ export type TSmartAiProviderCredential = ISmartAiProviderApiKeyCredential | IOpenAiChatGptOAuthCredential;
24
+ export interface ISmartAiProviderAccountSummary {
25
+ providerId: TSmartAiProviderId;
26
+ authKind: TSmartAiProviderCredential['kind'];
27
+ accountId?: string;
28
+ email?: string;
29
+ plan?: string;
30
+ }
31
+ export interface ISmartAiProviderLoginResult {
32
+ credential: IOpenAiChatGptOAuthCredential;
33
+ account: ISmartAiProviderAccountSummary;
34
+ }
35
+ export interface ISmartAiProviderBrowserLoginPrompt {
36
+ flow: 'browser';
37
+ authUrl: string;
38
+ }
39
+ export interface ISmartAiProviderDeviceLoginPrompt {
40
+ flow: 'device';
41
+ verificationUrl: string;
42
+ userCode: string;
43
+ }
44
+ export type TSmartAiProviderLoginPrompt = ISmartAiProviderBrowserLoginPrompt | ISmartAiProviderDeviceLoginPrompt;
45
+ export type TSmartAiProviderCancelStatus = 'canceled' | 'notFound';
46
+ export interface ISmartAiProviderLoginHandle {
47
+ readonly prompt: TSmartAiProviderLoginPrompt;
48
+ readonly completion: Promise<ISmartAiProviderLoginResult>;
49
+ cancel(): Promise<TSmartAiProviderCancelStatus>;
50
+ close(): Promise<void>;
51
+ }
52
+ export interface ISmartAiProviderOperationOptions {
53
+ signal?: AbortSignal;
54
+ timeoutMs?: number;
55
+ }
56
+ export interface ISmartAiProviderModelReasoningEffort {
57
+ effort: string;
58
+ description: string;
59
+ }
60
+ export interface ISmartAiProviderModelServiceTier {
61
+ id: string;
62
+ name: string;
63
+ description: string;
64
+ }
65
+ export interface ISmartAiProviderModel {
66
+ providerId: 'openai';
67
+ modelId: string;
68
+ wireModel: string;
69
+ displayName: string;
70
+ description: string;
71
+ hidden: boolean;
72
+ reasoningEfforts: ISmartAiProviderModelReasoningEffort[];
73
+ defaultReasoningEffort: string;
74
+ inputModalities: TSmartAiProviderInputModality[];
75
+ supportsPersonality: boolean;
76
+ serviceTiers: ISmartAiProviderModelServiceTier[];
77
+ defaultServiceTier?: string;
78
+ isDefault: boolean;
79
+ }
80
+ export interface ISmartAiProviderModelListOptions extends ISmartAiProviderOperationOptions {
81
+ cursor?: string;
82
+ limit?: number;
83
+ includeHidden?: boolean;
84
+ }
85
+ export type TSmartAiProviderCredentialOperationErrorCode = 'ABORTED' | 'TIMEOUT';
86
+ export interface ISmartAiProviderRefreshSuccess {
87
+ success: true;
88
+ credential: IOpenAiChatGptOAuthCredential;
89
+ account: ISmartAiProviderAccountSummary;
90
+ }
91
+ export interface ISmartAiProviderRefreshFailure {
92
+ success: false;
93
+ credential: IOpenAiChatGptOAuthCredential;
94
+ errorCode: TSmartAiProviderCredentialOperationErrorCode | 'REFRESH_FAILED';
95
+ }
96
+ export type TSmartAiProviderRefreshResult = ISmartAiProviderRefreshSuccess | ISmartAiProviderRefreshFailure;
97
+ export interface ISmartAiProviderModelListSuccess {
98
+ success: true;
99
+ models: ISmartAiProviderModel[];
100
+ nextCursor?: string;
101
+ }
102
+ export interface ISmartAiProviderModelListFailure {
103
+ success: false;
104
+ errorCode: TSmartAiProviderCredentialOperationErrorCode | 'CREDENTIAL_REFRESH_REQUIRED' | 'MODEL_LIST_FAILED';
105
+ }
106
+ export type TSmartAiProviderModelListResult = ISmartAiProviderModelListSuccess | ISmartAiProviderModelListFailure;
107
+ export interface ISmartAiProviderRateLimitWindow {
108
+ usedPercent: number;
109
+ limitWindowSeconds: number;
110
+ resetAfterSeconds: number;
111
+ /** Unix timestamp in seconds. */
112
+ resetsAt: number;
113
+ }
114
+ export interface ISmartAiProviderRateLimitDetails {
115
+ allowed: boolean;
116
+ limitReached: boolean;
117
+ primaryWindow?: ISmartAiProviderRateLimitWindow;
118
+ secondaryWindow?: ISmartAiProviderRateLimitWindow;
119
+ }
120
+ export interface ISmartAiProviderAdditionalRateLimit {
121
+ limitName: string;
122
+ meteredFeature: string;
123
+ rateLimit?: ISmartAiProviderRateLimitDetails;
124
+ }
125
+ export interface ISmartAiProviderAccountRateLimits {
126
+ providerId: 'openai';
127
+ plan: string;
128
+ observedAt: string;
129
+ rateLimit?: ISmartAiProviderRateLimitDetails;
130
+ additionalRateLimits: ISmartAiProviderAdditionalRateLimit[];
131
+ rateLimitReachedType?: string;
132
+ rateLimitResetCreditsAvailableCount?: number;
133
+ }
134
+ export interface ISmartAiProviderAccountRateLimitsSuccess {
135
+ success: true;
136
+ rateLimits: ISmartAiProviderAccountRateLimits;
137
+ }
138
+ export interface ISmartAiProviderAccountRateLimitsFailure {
139
+ success: false;
140
+ errorCode: TSmartAiProviderCredentialOperationErrorCode | 'CREDENTIAL_REFRESH_REQUIRED' | 'ACCOUNT_RATE_LIMITS_FAILED';
141
+ }
142
+ export type TSmartAiProviderAccountRateLimitsResult = ISmartAiProviderAccountRateLimitsSuccess | ISmartAiProviderAccountRateLimitsFailure;
143
+ export interface ISmartAiProviderLoginOptions extends ISmartAiProviderOperationOptions {
144
+ flow: TSmartAiProviderLoginFlow;
145
+ }
146
+ export interface ISmartAiProviderAdapter {
147
+ readonly descriptor: ISmartAiProviderDescriptor;
148
+ createApiKeyCredential(apiKey: string): ISmartAiProviderApiKeyCredential;
149
+ inspectCredential(credential: TSmartAiProviderCredential): ISmartAiProviderAccountSummary;
150
+ beginLogin(options: ISmartAiProviderLoginOptions): Promise<ISmartAiProviderLoginHandle>;
151
+ refreshCredential(credential: IOpenAiChatGptOAuthCredential, options?: ISmartAiProviderOperationOptions): Promise<TSmartAiProviderRefreshResult>;
152
+ listModels(credential: IOpenAiChatGptOAuthCredential, options?: ISmartAiProviderModelListOptions): Promise<TSmartAiProviderModelListResult>;
153
+ getAccountRateLimits(credential: IOpenAiChatGptOAuthCredential, options?: ISmartAiProviderOperationOptions): Promise<TSmartAiProviderAccountRateLimitsResult>;
154
+ logoutCredential(credential: IOpenAiChatGptOAuthCredential, options?: ISmartAiProviderOperationOptions): Promise<void>;
155
+ dispose(): Promise<void>;
156
+ }
157
+ export interface IOpenAiProviderAdapterOptions {
158
+ fetch?: typeof fetch;
159
+ originator?: string;
160
+ now?: () => Date;
161
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhaS5wcm92aWRlcnMuaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX29wZW5haV9hY2NvdW50L3NtYXJ0YWkucHJvdmlkZXJzLmludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
@@ -0,0 +1,29 @@
1
+ import type { IOpenAiChatGptOAuthCredential, IOpenAiProviderAdapterOptions, ISmartAiProviderAccountSummary, ISmartAiProviderAdapter, ISmartAiProviderApiKeyCredential, ISmartAiProviderDescriptor, ISmartAiProviderLoginHandle, ISmartAiProviderLoginOptions, ISmartAiProviderModelListOptions, ISmartAiProviderOperationOptions, TSmartAiProviderAccountRateLimitsResult, TSmartAiProviderCredential, TSmartAiProviderModelListResult, TSmartAiProviderRefreshResult } from './smartai.providers.interfaces.js';
2
+ export declare class OpenAiProviderAdapter implements ISmartAiProviderAdapter {
3
+ readonly descriptor: ISmartAiProviderDescriptor;
4
+ private readonly fetchImplementation;
5
+ private readonly originator;
6
+ private readonly now;
7
+ private readonly cursorKey;
8
+ private readonly handles;
9
+ private readonly operations;
10
+ private readonly refreshes;
11
+ private closed;
12
+ private disposePromise?;
13
+ constructor(optionsArg?: IOpenAiProviderAdapterOptions);
14
+ private requireOpen;
15
+ private authOptions;
16
+ createApiKeyCredential(apiKeyArg: string): ISmartAiProviderApiKeyCredential;
17
+ inspectCredential(credentialArg: TSmartAiProviderCredential): ISmartAiProviderAccountSummary;
18
+ beginLogin(optionsArg: ISmartAiProviderLoginOptions): Promise<ISmartAiProviderLoginHandle>;
19
+ refreshCredential(credentialArg: IOpenAiChatGptOAuthCredential, optionsArg?: ISmartAiProviderOperationOptions): Promise<TSmartAiProviderRefreshResult>;
20
+ private performRefreshCredential;
21
+ private fetchCatalog;
22
+ private encodeCursor;
23
+ private decodeCursor;
24
+ listModels(credentialArg: IOpenAiChatGptOAuthCredential, optionsArg?: ISmartAiProviderModelListOptions): Promise<TSmartAiProviderModelListResult>;
25
+ private fetchAccountRateLimits;
26
+ getAccountRateLimits(credentialArg: IOpenAiChatGptOAuthCredential, optionsArg?: ISmartAiProviderOperationOptions): Promise<TSmartAiProviderAccountRateLimitsResult>;
27
+ logoutCredential(credentialArg: IOpenAiChatGptOAuthCredential, optionsArg?: ISmartAiProviderOperationOptions): Promise<void>;
28
+ dispose(): Promise<void>;
29
+ }