@ofuma/sdk 0.1.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.
- package/README.md +366 -0
- package/dist/index.cjs +6 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +69 -0
- package/dist/index.d.ts +69 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/package.json +73 -0
package/README.md
ADDED
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
# @ofuma/sdk
|
|
2
|
+
|
|
3
|
+
TypeScript SDK for the Ofuma API with full type safety and IntelliSense support.
|
|
4
|
+
|
|
5
|
+
## Code Structure
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
sdk/
|
|
9
|
+
├── src/
|
|
10
|
+
│ ├── resources/ # API resource implementations
|
|
11
|
+
│ │ ├── prompts/ # Prompts API resource
|
|
12
|
+
│ │ │ ├── index.ts # PromptsResource class implementation
|
|
13
|
+
│ │ │ └── types.ts # Prompt-related type definitions and re-exports
|
|
14
|
+
│ │ └── chains/ # Chains API resource
|
|
15
|
+
│ │ ├── index.ts # ChainsResource class implementation
|
|
16
|
+
│ │ └── types.ts # Chain-related type definitions and re-exports
|
|
17
|
+
│ ├── client.ts # BaseClient with HTTP handling and validation
|
|
18
|
+
│ ├── env.ts # Environment variable validation (Zod-based)
|
|
19
|
+
│ ├── types.ts # SDK configuration types and validation schemas
|
|
20
|
+
│ └── index.ts # Main SDK export and public API
|
|
21
|
+
├── dist/ # Built output (generated)
|
|
22
|
+
├── .eslintrc.js # ESLint configuration
|
|
23
|
+
├── package.json # Package configuration and dependencies
|
|
24
|
+
├── tsconfig.json # TypeScript configuration
|
|
25
|
+
├── tsup.config.ts # Build configuration
|
|
26
|
+
├── README.md # User documentation
|
|
27
|
+
├── example.js # Usage examples
|
|
28
|
+
└── CLAUDE.md # Development guidance
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Recent Changes
|
|
32
|
+
|
|
33
|
+
- **Endpoint Constants**: All API endpoints now use shared constants from `@ofuma/shared`
|
|
34
|
+
- Backend routes use `PROMPT_ROUTES` and `ROUTE_BASE_PATHS` constants
|
|
35
|
+
- SDK uses `API_ENDPOINTS` constants for consistent URL management
|
|
36
|
+
- Eliminates hardcoded URLs and ensures consistency across backend and SDK
|
|
37
|
+
|
|
38
|
+
### Architecture
|
|
39
|
+
|
|
40
|
+
The SDK is organized into distinct layers:
|
|
41
|
+
|
|
42
|
+
- **Main SDK Class**: `OfumaSDK` - Entry point that initializes all resources
|
|
43
|
+
- **Resource Classes**: Organized by API domain (e.g., `PromptsResource`)
|
|
44
|
+
- **Type Definitions**: Co-located with resources, re-exported from shared package
|
|
45
|
+
- **Base Client**: Handles HTTP communication, validation, and error handling
|
|
46
|
+
- **Validation Layer**: Type-safe environment and configuration validation
|
|
47
|
+
- **Endpoint Constants**: Shared constants from `@ofuma/shared` ensure URL consistency
|
|
48
|
+
|
|
49
|
+
## Installation
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
npm install @ofuma/sdk
|
|
53
|
+
# or
|
|
54
|
+
pnpm add @ofuma/sdk
|
|
55
|
+
# or
|
|
56
|
+
yarn add @ofuma/sdk
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Usage
|
|
60
|
+
|
|
61
|
+
### Setup
|
|
62
|
+
|
|
63
|
+
```typescript
|
|
64
|
+
import { OfumaSDK } from '@ofuma/sdk'
|
|
65
|
+
|
|
66
|
+
// Production environment (default)
|
|
67
|
+
const ofuma = new OfumaSDK({
|
|
68
|
+
apiKey: 'your-api-key', // Required: API key for authentication
|
|
69
|
+
organizationId: 'your-org-id' // Optional: Organization ID for scoped requests
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
// Staging environment
|
|
73
|
+
const ofumaStaging = new OfumaSDK({
|
|
74
|
+
apiKey: 'your-api-key',
|
|
75
|
+
env: 'staging' // or 'stg' - connects to staging
|
|
76
|
+
})
|
|
77
|
+
|
|
78
|
+
// Local development
|
|
79
|
+
const ofumaLocal = new OfumaSDK({
|
|
80
|
+
apiKey: 'your-api-key',
|
|
81
|
+
env: 'localhost' // or 'local' - connects to http://localhost:3004
|
|
82
|
+
})
|
|
83
|
+
|
|
84
|
+
// Custom URL (overrides all other settings)
|
|
85
|
+
const ofumaCustom = new OfumaSDK({
|
|
86
|
+
apiKey: 'your-api-key',
|
|
87
|
+
baseUrl: 'https://api.custom-domain.com'
|
|
88
|
+
})
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Environment Configuration
|
|
92
|
+
|
|
93
|
+
The SDK determines the API base URL using the following priority order:
|
|
94
|
+
|
|
95
|
+
1. **Custom `baseUrl`** - If provided, overrides all other settings
|
|
96
|
+
2. **`env` parameter** - Specifies which environment to connect to
|
|
97
|
+
3. **Environment variable** - `OFUMA_API_URL` as fallback
|
|
98
|
+
4. **Default** - Production URL
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
### Environment Variables (Optional)
|
|
102
|
+
|
|
103
|
+
For backward compatibility, you can still use environment variables:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# Optional: Override the default URL
|
|
107
|
+
OFUMA_API_URL=https://api.ofuma.example.com
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
**Note**: Environment variables are now optional. The SDK will use the `env` parameter or default to production if not specified.
|
|
111
|
+
|
|
112
|
+
### Configuration Options
|
|
113
|
+
|
|
114
|
+
```typescript
|
|
115
|
+
interface SDKConfig {
|
|
116
|
+
apiKey: string // Required: API key for authentication
|
|
117
|
+
organizationId?: string // Optional: Organization ID for scoped requests
|
|
118
|
+
env?: 'production' | 'prod' | 'staging' | 'stg' | 'localhost' | 'local' // Optional: Environment (default: 'production')
|
|
119
|
+
baseUrl?: string // Optional: Custom API URL (overrides env)
|
|
120
|
+
fetch?: typeof fetch // Optional: Custom fetch implementation
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Prompts API
|
|
125
|
+
|
|
126
|
+
The SDK provides comprehensive support for all prompt operations:
|
|
127
|
+
|
|
128
|
+
### List Prompts
|
|
129
|
+
|
|
130
|
+
```typescript
|
|
131
|
+
const prompts = await ofuma.prompts.list()
|
|
132
|
+
console.log('Available prompts:', prompts)
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Create a Prompt
|
|
136
|
+
|
|
137
|
+
```typescript
|
|
138
|
+
const newPrompt = await ofuma.prompts.create({
|
|
139
|
+
name: 'my-awesome-prompt',
|
|
140
|
+
description: 'A prompt for generating awesome content'
|
|
141
|
+
})
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Get a Specific Prompt
|
|
145
|
+
|
|
146
|
+
```typescript
|
|
147
|
+
// Get latest version
|
|
148
|
+
const prompt = await ofuma.prompts.getById('prompt-id')
|
|
149
|
+
|
|
150
|
+
// Get specific version
|
|
151
|
+
const promptVersion = await ofuma.prompts.getById('prompt-id', {
|
|
152
|
+
versionId: 5
|
|
153
|
+
})
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Update a Prompt
|
|
157
|
+
|
|
158
|
+
```typescript
|
|
159
|
+
const updatedPrompt = await ofuma.prompts.update('prompt-id', {
|
|
160
|
+
content: 'Updated prompt content',
|
|
161
|
+
environment: 'development',
|
|
162
|
+
type: 'text',
|
|
163
|
+
commitMessage: 'Updated prompt for better responses',
|
|
164
|
+
model: 'gpt-4',
|
|
165
|
+
provider: 'openai'
|
|
166
|
+
})
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Interpolate a Prompt
|
|
170
|
+
|
|
171
|
+
```typescript
|
|
172
|
+
const interpolated = await ofuma.prompts.interpolate('prompt-id', {
|
|
173
|
+
version: 1,
|
|
174
|
+
variables: {
|
|
175
|
+
userName: 'John Doe',
|
|
176
|
+
context: 'customer support'
|
|
177
|
+
}
|
|
178
|
+
})
|
|
179
|
+
|
|
180
|
+
console.log('Interpolated prompt:', interpolated.interpolatedPrompt)
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### Version Management
|
|
184
|
+
|
|
185
|
+
```typescript
|
|
186
|
+
// Set version environment
|
|
187
|
+
await ofuma.prompts.setVersionEnvironment({
|
|
188
|
+
versionId: 'version-uuid',
|
|
189
|
+
promptId: 'prompt-uuid',
|
|
190
|
+
teamId: 'team-id',
|
|
191
|
+
environment: 'production'
|
|
192
|
+
})
|
|
193
|
+
|
|
194
|
+
// Delete a version
|
|
195
|
+
await ofuma.prompts.deleteVersion({
|
|
196
|
+
versionId: 'version-uuid',
|
|
197
|
+
promptId: 'prompt-uuid'
|
|
198
|
+
})
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### Label Management
|
|
202
|
+
|
|
203
|
+
```typescript
|
|
204
|
+
// Add labels to a version
|
|
205
|
+
await ofuma.prompts.addLabel('prompt-id', {
|
|
206
|
+
label: ['feature', 'customer-facing'],
|
|
207
|
+
versionId: 'version-uuid'
|
|
208
|
+
})
|
|
209
|
+
|
|
210
|
+
// Remove labels
|
|
211
|
+
await ofuma.prompts.removeLabel('prompt-id', {
|
|
212
|
+
label: 'deprecated',
|
|
213
|
+
versionId: 'version-uuid'
|
|
214
|
+
})
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### Delete a Prompt
|
|
218
|
+
|
|
219
|
+
```typescript
|
|
220
|
+
await ofuma.prompts.delete({
|
|
221
|
+
promptId: 'prompt-id'
|
|
222
|
+
})
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
## Chains API
|
|
226
|
+
|
|
227
|
+
The SDK provides support for chain operations:
|
|
228
|
+
|
|
229
|
+
### Get a Chain
|
|
230
|
+
|
|
231
|
+
```typescript
|
|
232
|
+
// Get a chain by ID
|
|
233
|
+
const chain = await ofuma.chains.get('chain-id')
|
|
234
|
+
|
|
235
|
+
console.log('Chain:', chain.name)
|
|
236
|
+
console.log('Nodes:', chain.nodes)
|
|
237
|
+
console.log('Dependencies:', chain.dependencies)
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### Execute a Chain
|
|
241
|
+
|
|
242
|
+
```typescript
|
|
243
|
+
// Execute a chain with input data
|
|
244
|
+
const execution = await ofuma.chains.execute('chain-id', {
|
|
245
|
+
input: {
|
|
246
|
+
userName: 'John Doe',
|
|
247
|
+
context: 'customer support'
|
|
248
|
+
},
|
|
249
|
+
metadata: {
|
|
250
|
+
source: 'api',
|
|
251
|
+
requestId: 'req-123'
|
|
252
|
+
}
|
|
253
|
+
})
|
|
254
|
+
|
|
255
|
+
console.log('Execution ID:', execution.id)
|
|
256
|
+
console.log('Status:', execution.status)
|
|
257
|
+
console.log('Output:', execution.output)
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
## Error Handling
|
|
261
|
+
|
|
262
|
+
The SDK includes comprehensive error handling and validation:
|
|
263
|
+
|
|
264
|
+
### Initialization Errors
|
|
265
|
+
|
|
266
|
+
The SDK validates configuration at initialization:
|
|
267
|
+
|
|
268
|
+
```typescript
|
|
269
|
+
import { OfumaSDK } from '@ofuma/sdk'
|
|
270
|
+
|
|
271
|
+
try {
|
|
272
|
+
const ofuma = new OfumaSDK({
|
|
273
|
+
apiKey: '', // ❌ This will throw: "API key is required and cannot be empty"
|
|
274
|
+
})
|
|
275
|
+
} catch (error) {
|
|
276
|
+
console.error('SDK Initialization failed:', error.message)
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
// Invalid environment will also throw:
|
|
280
|
+
try {
|
|
281
|
+
const ofuma = new OfumaSDK({
|
|
282
|
+
apiKey: 'valid-key',
|
|
283
|
+
env: 'invalid-env' // ❌ This will throw: validation error
|
|
284
|
+
})
|
|
285
|
+
} catch (error) {
|
|
286
|
+
console.error('Invalid environment:', error.message)
|
|
287
|
+
}
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
### API Errors
|
|
291
|
+
|
|
292
|
+
The SDK includes typed error responses for API calls:
|
|
293
|
+
|
|
294
|
+
```typescript
|
|
295
|
+
import { SDKError } from '@ofuma/sdk'
|
|
296
|
+
|
|
297
|
+
try {
|
|
298
|
+
const prompt = await ofuma.prompts.getById('non-existent-id')
|
|
299
|
+
} catch (error) {
|
|
300
|
+
if (error instanceof SDKError) {
|
|
301
|
+
console.error(`API Error (${error.status}):`, error.message)
|
|
302
|
+
console.error('Response:', error.response)
|
|
303
|
+
} else {
|
|
304
|
+
console.error('Unexpected error:', error)
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
## Request Options
|
|
310
|
+
|
|
311
|
+
All methods accept optional request options for advanced usage:
|
|
312
|
+
|
|
313
|
+
```typescript
|
|
314
|
+
const prompts = await ofuma.prompts.list({
|
|
315
|
+
signal: abortController.signal, // For request cancellation
|
|
316
|
+
headers: {
|
|
317
|
+
'Custom-Header': 'value'
|
|
318
|
+
}
|
|
319
|
+
})
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
## TypeScript Support
|
|
323
|
+
|
|
324
|
+
The SDK is built with TypeScript and provides full type safety:
|
|
325
|
+
|
|
326
|
+
```typescript
|
|
327
|
+
import type {
|
|
328
|
+
CreatePromptRequest,
|
|
329
|
+
PromptResponse,
|
|
330
|
+
InterpolatePromptRequest,
|
|
331
|
+
InterpolatedPromptResponse,
|
|
332
|
+
ChainResponse,
|
|
333
|
+
ExecuteChainRequest,
|
|
334
|
+
ChainExecutionResponse
|
|
335
|
+
} from '@ofuma/sdk'
|
|
336
|
+
|
|
337
|
+
// All request and response types are exported for your use
|
|
338
|
+
const createData: CreatePromptRequest = {
|
|
339
|
+
name: 'typed-prompt',
|
|
340
|
+
description: 'Fully typed prompt creation'
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
const prompt: PromptResponse = await ofuma.prompts.create(createData)
|
|
344
|
+
|
|
345
|
+
// Chain types
|
|
346
|
+
const chain: ChainResponse = await ofuma.chains.get('chain-id')
|
|
347
|
+
|
|
348
|
+
const executeData: ExecuteChainRequest = {
|
|
349
|
+
chainId: 'chain-id',
|
|
350
|
+
input: { key: 'value' }
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
const execution: ChainExecutionResponse = await ofuma.chains.execute('chain-id', executeData)
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
## Browser Support
|
|
357
|
+
|
|
358
|
+
The SDK works in both Node.js and browser environments. In browsers, it uses the native `fetch` API.
|
|
359
|
+
|
|
360
|
+
## Contributing
|
|
361
|
+
|
|
362
|
+
This SDK is part of the Ofuma monorepo. For development and contributions, see the main project documentation.
|
|
363
|
+
|
|
364
|
+
## License
|
|
365
|
+
|
|
366
|
+
MIT License - see the main project for details.
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var zod=require('zod');/* @ofuma/sdk - https://github.com/thedumebi/ofuma.ai/tree/master/sdk */
|
|
2
|
+
var ee=Object.create;var G=Object.defineProperty;var te=Object.getOwnPropertyDescriptor;var oe=Object.getOwnPropertyNames;var re=Object.getPrototypeOf,Ee=Object.prototype.hasOwnProperty;var ne=(e,t,r)=>t in e?G(e,t,{enumerable:true,configurable:true,writable:true,value:r}):e[t]=r;var m=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var K=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var se=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of oe(t))!Ee.call(e,s)&&s!==r&&G(e,s,{get:()=>t[s],enumerable:!(n=te(t,s))||n.enumerable});return e};var Te=(e,t,r)=>(r=e!=null?ee(re(e)):{},se(G(r,"default",{value:e,enumerable:true}),e));var d=(e,t,r)=>ne(e,typeof t!="symbol"?t+"":t,r);var j=K((he,ae)=>{ae.exports={name:"dotenv",version:"16.6.1",description:"Loads environment variables from .env file",main:"lib/main.js",types:"lib/main.d.ts",exports:{".":{types:"./lib/main.d.ts",require:"./lib/main.js",default:"./lib/main.js"},"./config":"./config.js","./config.js":"./config.js","./lib/env-options":"./lib/env-options.js","./lib/env-options.js":"./lib/env-options.js","./lib/cli-options":"./lib/cli-options.js","./lib/cli-options.js":"./lib/cli-options.js","./package.json":"./package.json"},scripts:{"dts-check":"tsc --project tests/types/tsconfig.json",lint:"standard",pretest:"npm run lint && npm run dts-check",test:"tap run --allow-empty-coverage --disable-coverage --timeout=60000","test:coverage":"tap run --show-full-coverage --timeout=60000 --coverage-report=text --coverage-report=lcov",prerelease:"npm test",release:"standard-version"},repository:{type:"git",url:"git://github.com/motdotla/dotenv.git"},homepage:"https://github.com/motdotla/dotenv#readme",funding:"https://dotenvx.com",keywords:["dotenv","env",".env","environment","variables","config","settings"],readmeFilename:"README.md",license:"BSD-2-Clause",devDependencies:{"@types/node":"^18.11.3",decache:"^4.6.2",sinon:"^14.0.1",standard:"^17.0.0","standard-version":"^9.5.0",tap:"^19.2.0",typescript:"^4.8.4"},engines:{node:">=12"},browser:{fs:false}};});var Z=K((ve,S)=>{var H=m("fs"),$=m("path"),_e=m("os"),Ie=m("crypto"),Re=j(),Y=Re.version,Ae=/(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;function Oe(e){let t={},r=e.toString();r=r.replace(/\r\n?/mg,`
|
|
3
|
+
`);let n;for(;(n=Ae.exec(r))!=null;){let s=n[1],E=n[2]||"";E=E.trim();let T=E[0];E=E.replace(/^(['"`])([\s\S]*)\1$/mg,"$2"),T==='"'&&(E=E.replace(/\\n/g,`
|
|
4
|
+
`),E=E.replace(/\\r/g,"\r")),t[s]=E;}return t}function Se(e){e=e||{};let t=W(e);e.path=t;let r=c.configDotenv(e);if(!r.parsed){let T=new Error(`MISSING_DATA: Cannot parse ${t} for an unknown reason`);throw T.code="MISSING_DATA",T}let n=X(e).split(","),s=n.length,E;for(let T=0;T<s;T++)try{let i=n[T].trim(),I=le(r,i);E=c.decrypt(I.ciphertext,I.key);break}catch(i){if(T+1>=s)throw i}return c.parse(E)}function Ne(e){console.log(`[dotenv@${Y}][WARN] ${e}`);}function U(e){console.log(`[dotenv@${Y}][DEBUG] ${e}`);}function Q(e){console.log(`[dotenv@${Y}] ${e}`);}function X(e){return e&&e.DOTENV_KEY&&e.DOTENV_KEY.length>0?e.DOTENV_KEY:process.env.DOTENV_KEY&&process.env.DOTENV_KEY.length>0?process.env.DOTENV_KEY:""}function le(e,t){let r;try{r=new URL(t);}catch(i){if(i.code==="ERR_INVALID_URL"){let I=new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development");throw I.code="INVALID_DOTENV_KEY",I}throw i}let n=r.password;if(!n){let i=new Error("INVALID_DOTENV_KEY: Missing key part");throw i.code="INVALID_DOTENV_KEY",i}let s=r.searchParams.get("environment");if(!s){let i=new Error("INVALID_DOTENV_KEY: Missing environment part");throw i.code="INVALID_DOTENV_KEY",i}let E=`DOTENV_VAULT_${s.toUpperCase()}`,T=e.parsed[E];if(!T){let i=new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${E} in your .env.vault file.`);throw i.code="NOT_FOUND_DOTENV_ENVIRONMENT",i}return {ciphertext:T,key:n}}function W(e){let t=null;if(e&&e.path&&e.path.length>0)if(Array.isArray(e.path))for(let r of e.path)H.existsSync(r)&&(t=r.endsWith(".vault")?r:`${r}.vault`);else t=e.path.endsWith(".vault")?e.path:`${e.path}.vault`;else t=$.resolve(process.cwd(),".env.vault");return H.existsSync(t)?t:null}function k(e){return e[0]==="~"?$.join(_e.homedir(),e.slice(1)):e}function de(e){let t=!!(e&&e.debug),r=e&&"quiet"in e?e.quiet:true;(t||!r)&&Q("Loading env from encrypted .env.vault");let n=c._parseVault(e),s=process.env;return e&&e.processEnv!=null&&(s=e.processEnv),c.populate(s,n,e),{parsed:n}}function De(e){let t=$.resolve(process.cwd(),".env"),r="utf8",n=!!(e&&e.debug),s=e&&"quiet"in e?e.quiet:true;e&&e.encoding?r=e.encoding:n&&U("No encoding is specified. UTF-8 is used by default");let E=[t];if(e&&e.path)if(!Array.isArray(e.path))E=[k(e.path)];else {E=[];for(let N of e.path)E.push(k(N));}let T,i={};for(let N of E)try{let _=c.parse(H.readFileSync(N,{encoding:r}));c.populate(i,_,e);}catch(_){n&&U(`Failed to load ${N} ${_.message}`),T=_;}let I=process.env;if(e&&e.processEnv!=null&&(I=e.processEnv),c.populate(I,i,e),n||!s){let N=Object.keys(i).length,_=[];for(let B of E)try{let f=$.relative(process.cwd(),B);_.push(f);}catch(f){n&&U(`Failed to load ${B} ${f.message}`),T=f;}Q(`injecting env (${N}) from ${_.join(",")}`);}return T?{parsed:i,error:T}:{parsed:i}}function ue(e){if(X(e).length===0)return c.configDotenv(e);let t=W(e);return t?c._configVault(e):(Ne(`You set DOTENV_KEY but you are missing a .env.vault file at ${t}. Did you forget to build it?`),c.configDotenv(e))}function Pe(e,t){let r=Buffer.from(t.slice(-64),"hex"),n=Buffer.from(e,"base64"),s=n.subarray(0,12),E=n.subarray(-16);n=n.subarray(12,-16);try{let T=Ie.createDecipheriv("aes-256-gcm",r,s);return T.setAuthTag(E),`${T.update(n)}${T.final()}`}catch(T){let i=T instanceof RangeError,I=T.message==="Invalid key length",N=T.message==="Unsupported state or unable to authenticate data";if(i||I){let _=new Error("INVALID_DOTENV_KEY: It must be 64 characters long (or more)");throw _.code="INVALID_DOTENV_KEY",_}else if(N){let _=new Error("DECRYPTION_FAILED: Please check your DOTENV_KEY");throw _.code="DECRYPTION_FAILED",_}else throw T}}function Le(e,t,r={}){let n=!!(r&&r.debug),s=!!(r&&r.override);if(typeof t!="object"){let E=new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");throw E.code="OBJECT_REQUIRED",E}for(let E of Object.keys(t))Object.prototype.hasOwnProperty.call(e,E)?(s===true&&(e[E]=t[E]),n&&U(s===true?`"${E}" is already defined and WAS overwritten`:`"${E}" is already defined and was NOT overwritten`)):e[E]=t[E];}var c={configDotenv:De,_configVault:de,_parseVault:Se,config:ue,decrypt:Pe,parse:Oe,populate:Le};S.exports.configDotenv=c.configDotenv;S.exports._configVault=c._configVault;S.exports._parseVault=c._parseVault;S.exports.config=c.config;S.exports.decrypt=c.decrypt;S.exports.parse=c.parse;S.exports.populate=c.populate;S.exports=c;});var o={PROMPTS:"/prompts",CHAINS:"/prompts/chains"},a={LIST:"/",CREATE:"/",GET_BY_ID:"/:id",GET_BY_PROMPT_ID:"/by-id/:promptId",INTERPOLATE:"/:id/interpolate",UPDATE:"/:id/update",DELETE:"/delete",DELETE_VERSION:"/versions/delete",ADD_LABEL:"/:id/labels",REMOVE_LABEL:"/:id/labels",SET_VERSION_ENVIRONMENT:"/versions/environment",EXECUTE:"/execute",PLAYGROUND_EXECUTE:"/playground/execute",SET_VERSION_AS_LATEST:"/versions/set-latest",DUPLICATE:"/duplicate"},p={LIST_CHAINS:"/list",CREATE_CHAIN:"/create",GET_CHAIN:"/:id",UPDATE_CHAIN:"/:id",DELETE_CHAIN:"/:id",DUPLICATE_CHAIN:"/:id/duplicate",CREATE_FROM_DEFINITION:"/from-definition",ADD_NODE:"/:id/nodes",UPDATE_NODE:"/:chainId/nodes/:nodeId",DELETE_NODE:"/:chainId/nodes/:nodeId",ADD_DEPENDENCY:"/:id/dependencies",DELETE_DEPENDENCY:"/:chainId/dependencies/:dependencyId",EXECUTE_CHAIN:"/:id/execute",RESUME_MANUAL_INPUT:"/executions/:executionId/resume",GET_EXECUTION:"/executions/:id",LIST_EXECUTIONS:"/:id/executions"},A={PROMPTS:{LIST:`${o.PROMPTS}${a.LIST}`,CREATE:`${o.PROMPTS}${a.CREATE}`,GET_BY_ID:e=>`${o.PROMPTS}${a.GET_BY_ID.replace(":id",e)}`,GET_BY_PROMPT_ID:e=>`${o.PROMPTS}${a.GET_BY_PROMPT_ID.replace(":promptId",e)}`,INTERPOLATE:e=>`${o.PROMPTS}${a.INTERPOLATE.replace(":id",e)}`,UPDATE:e=>`${o.PROMPTS}${a.UPDATE.replace(":id",e)}`,DELETE:`${o.PROMPTS}${a.DELETE}`,DELETE_VERSION:`${o.PROMPTS}${a.DELETE_VERSION}`,ADD_LABEL:e=>`${o.PROMPTS}${a.ADD_LABEL.replace(":id",e)}`,REMOVE_LABEL:e=>`${o.PROMPTS}${a.REMOVE_LABEL.replace(":id",e)}`,SET_VERSION_ENVIRONMENT:`${o.PROMPTS}${a.SET_VERSION_ENVIRONMENT}`,EXECUTE:`${o.PROMPTS}${a.EXECUTE}`,PLAYGROUND_EXECUTE:`${o.PROMPTS}${a.PLAYGROUND_EXECUTE}`,SET_VERSION_AS_LATEST:`${o.PROMPTS}${a.SET_VERSION_AS_LATEST}`,DUPLICATE:`${o.PROMPTS}${a.DUPLICATE}`},CHAINS:{LIST_CHAINS:`${o.CHAINS}${p.LIST_CHAINS}`,CREATE_CHAIN:`${o.CHAINS}${p.CREATE_CHAIN}`,GET_CHAIN:e=>`${o.CHAINS}${p.GET_CHAIN.replace(":id",e)}`,UPDATE_CHAIN:e=>`${o.CHAINS}${p.UPDATE_CHAIN.replace(":id",e)}`,DELETE_CHAIN:e=>`${o.CHAINS}${p.DELETE_CHAIN.replace(":id",e)}`,DUPLICATE_CHAIN:e=>`${o.CHAINS}${p.DUPLICATE_CHAIN.replace(":id",e)}`,CREATE_FROM_DEFINITION:`${o.CHAINS}${p.CREATE_FROM_DEFINITION}`,ADD_NODE:e=>`${o.CHAINS}${p.ADD_NODE.replace(":id",e)}`,UPDATE_NODE:(e,t)=>`${o.CHAINS}${p.UPDATE_NODE.replace(":chainId",e).replace(":nodeId",t)}`,DELETE_NODE:(e,t)=>`${o.CHAINS}${p.DELETE_NODE.replace(":chainId",e).replace(":nodeId",t)}`,ADD_DEPENDENCY:e=>`${o.CHAINS}${p.ADD_DEPENDENCY.replace(":id",e)}`,DELETE_DEPENDENCY:(e,t)=>`${o.CHAINS}${p.DELETE_DEPENDENCY.replace(":chainId",e).replace(":dependencyId",t)}`,EXECUTE_CHAIN:e=>`${o.CHAINS}${p.EXECUTE_CHAIN.replace(":id",e)}`,RESUME_MANUAL_INPUT:e=>`${o.CHAINS}${p.RESUME_MANUAL_INPUT.replace(":executionId",e)}`,GET_EXECUTION:e=>`${o.CHAINS}${p.GET_EXECUTION.replace(":id",e)}`,LIST_EXECUTIONS:e=>`${o.CHAINS}${p.LIST_EXECUTIONS.replace(":id",e)}`}};var pe=zod.z.object({apiKey:zod.z.string().min(1,"API key is required and cannot be empty"),organizationId:zod.z.string().optional(),env:zod.z.enum(["production","prod","staging","stg","localhost","local"]).optional().default("production"),baseUrl:zod.z.url().optional()});function q(e){try{return pe.parse(e)}catch(t){if(t instanceof zod.z.ZodError){let r=t.issues.map(n=>`${n.path.join(".")}: ${n.message}`).join(", ");throw new Error(`SDK configuration validation failed: ${r}`)}throw t}}var g=class extends Error{constructor(r,n,s){super(r);this._status=n;this._response=s;this.name="SDKError";}};var z=Te(Z());if(typeof process<"u"&&["development","test"].includes(process.env.NODE_ENV||""))try{let e=process.env.NODE_ENV==="test"?".env.test":".env";(0,z.config)({path:e});}catch{}var Ue=zod.z.object({OFUMA_API_URL:zod.z.url().optional(),OFUMA_API_URL_PRODUCTION:zod.z.url().optional(),OFUMA_API_URL_STAGING:zod.z.url().optional(),OFUMA_API_URL_LOCAL:zod.z.url().optional()}),h;try{typeof process<"u"&&process.env?h=Ue.parse(process.env):h={};}catch{h={};}var O=h;function v(e){if(e.baseUrl)return e.baseUrl;if(e.env){let t=Ce(e.env,O);if(t)return t}return O.OFUMA_API_URL?O.OFUMA_API_URL:J("production")}function Ce(e,t){let n={production:"OFUMA_API_URL_PRODUCTION",prod:"OFUMA_API_URL_PRODUCTION",staging:"OFUMA_API_URL_STAGING",stg:"OFUMA_API_URL_STAGING",localhost:"OFUMA_API_URL_LOCAL",local:"OFUMA_API_URL_LOCAL"}[e];if(!n)return;let s=t[n];return s||J(e)}function J(e){return {production:O.OFUMA_API_URL_PRODUCTION,prod:O.OFUMA_API_URL_PRODUCTION,staging:O.OFUMA_API_URL_STAGING,stg:O.OFUMA_API_URL_STAGING,localhost:O.OFUMA_API_URL_LOCAL,local:O.OFUMA_API_URL_LOCAL}[e]||"https://api.ofuma.ai"}var L=class{constructor(t){d(this,"config");let r=q(t),n=v(r);this.config={fetch:globalThis.fetch,baseUrl:n,...r};}async request(t,r={}){let n=new URL(t,this.config.baseUrl),s=new Headers({"Content-Type":"application/json",...r.headers});s.set("Authorization",`Bearer ${this.config.apiKey}`),this.config.organizationId&&s.set("x-organization-id",this.config.organizationId);let E=await this.config.fetch(n.toString(),{...r,headers:s});if(!E.ok){let i=await E.text().catch(()=>"Unknown error");throw new g(`HTTP ${E.status}: ${i}`,E.status,E)}return E.headers.get("content-type")?.includes("application/json")?E.json():E.text()}};var y=class extends L{async get(t,r={}){return this.request(A.CHAINS.GET_CHAIN(t),{method:"GET",...r})}async execute(t,r,n={}){return this.request(A.CHAINS.EXECUTE_CHAIN(t),{method:"POST",body:JSON.stringify({chainId:t,...r}),...n})}};var V=class extends L{async list(t={}){return this.request(A.PROMPTS.LIST,{method:"GET",...t})}async get(t,r={},n={}){let s=A.PROMPTS.GET_BY_ID(t);if(r.versionId){let E=new URLSearchParams;E.set("versionId",r.versionId.toString()),s+=`?${E.toString()}`;}return this.request(s,{method:"GET",...n})}async getByPromptId(t,r={},n={}){let s=A.PROMPTS.GET_BY_PROMPT_ID(t);if(r.versionId){let E=new URLSearchParams;E.set("versionId",r.versionId.toString()),s+=`?${E.toString()}`;}return this.request(s,{method:"GET",...n})}async interpolate(t,r,n={}){return this.request(A.PROMPTS.INTERPOLATE(t),{method:"POST",body:JSON.stringify(r),...n})}async setVersionEnvironment(t,r={}){return this.request(A.PROMPTS.SET_VERSION_ENVIRONMENT,{method:"PUT",body:JSON.stringify(t),...r})}async execute(t,r={}){return this.request(A.PROMPTS.EXECUTE,{method:"POST",body:JSON.stringify(t),...r})}};var b=class{constructor(t){d(this,"prompts");d(this,"chains");d(this,"_config");this._config=t,this.prompts=new V(t),this.chains=new y(t);}getBaseUrl(){return v(this._config)}},ze=b;
|
|
5
|
+
exports.OfumaSDK=b;exports.default=ze;//# sourceMappingURL=index.cjs.map
|
|
6
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../node_modules/.pnpm/dotenv@16.6.1/node_modules/dotenv/package.json","../../node_modules/.pnpm/dotenv@16.6.1/node_modules/dotenv/lib/main.js","../../packages/shared/dist/constants/endpoints.js","../src/types.ts","../src/env.ts","../src/utils.ts","../src/client.ts","../src/resources/chains/index.ts","../src/resources/prompts/index.ts","../src/index.ts"],"names":["require_package","__commonJSMin","exports","module","require_main","fs","path","os","crypto","packageJson","version","LINE","parse","src","obj","lines","match","key","value","maybeQuote","_parseVault","options","vaultPath","_vaultPath","result","DotenvModule","err","keys","_dotenvKey","length","decrypted","i","attrs","_instructions","error","_warn","message","_debug","_log","dotenvKey","uri","environment","environmentKey","ciphertext","possibleVaultPath","filepath","_resolveHome","envPath","_configVault","debug","quiet","parsed","processEnv","configDotenv","dotenvPath","encoding","optionPaths","lastError","parsedAll","e","keysCount","shortPaths","filePath","relative","config","decrypt","encrypted","keyStr","nonce","authTag","aesgcm","isRange","invalidKeyLength","decryptionFailed","populate","override","ROUTE_BASE_PATHS","PROMPT_ROUTES","PROMPT_CHAIN_ROUTES","API_ENDPOINTS","id","promptId","chainId","nodeId","dependencyId","executionId","SDKConfigSchema","z","validateSDKConfig","issues","issue","SDKError","_status","_response","import_dotenv","envFile","SDKEnvSchema","env","env_default","getBaseUrl","url","getEnvironmentUrl","getDefaultUrl","envName","envConfig","envVarKey","envVarValue","BaseClient","__publicField","validatedConfig","baseUrl","headers","response","errorMessage","ChainsResource","data","PromptsResource","queryOptions","params","OfumaSDK","index_default"],"mappings":"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","file":"index.cjs","sourcesContent":["{\n \"name\": \"dotenv\",\n \"version\": \"16.6.1\",\n \"description\": \"Loads environment variables from .env file\",\n \"main\": \"lib/main.js\",\n \"types\": \"lib/main.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./lib/main.d.ts\",\n \"require\": \"./lib/main.js\",\n \"default\": \"./lib/main.js\"\n },\n \"./config\": \"./config.js\",\n \"./config.js\": \"./config.js\",\n \"./lib/env-options\": \"./lib/env-options.js\",\n \"./lib/env-options.js\": \"./lib/env-options.js\",\n \"./lib/cli-options\": \"./lib/cli-options.js\",\n \"./lib/cli-options.js\": \"./lib/cli-options.js\",\n \"./package.json\": \"./package.json\"\n },\n \"scripts\": {\n \"dts-check\": \"tsc --project tests/types/tsconfig.json\",\n \"lint\": \"standard\",\n \"pretest\": \"npm run lint && npm run dts-check\",\n \"test\": \"tap run --allow-empty-coverage --disable-coverage --timeout=60000\",\n \"test:coverage\": \"tap run --show-full-coverage --timeout=60000 --coverage-report=text --coverage-report=lcov\",\n \"prerelease\": \"npm test\",\n \"release\": \"standard-version\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git://github.com/motdotla/dotenv.git\"\n },\n \"homepage\": \"https://github.com/motdotla/dotenv#readme\",\n \"funding\": \"https://dotenvx.com\",\n \"keywords\": [\n \"dotenv\",\n \"env\",\n \".env\",\n \"environment\",\n \"variables\",\n \"config\",\n \"settings\"\n ],\n \"readmeFilename\": \"README.md\",\n \"license\": \"BSD-2-Clause\",\n \"devDependencies\": {\n \"@types/node\": \"^18.11.3\",\n \"decache\": \"^4.6.2\",\n \"sinon\": \"^14.0.1\",\n \"standard\": \"^17.0.0\",\n \"standard-version\": \"^9.5.0\",\n \"tap\": \"^19.2.0\",\n \"typescript\": \"^4.8.4\"\n },\n \"engines\": {\n \"node\": \">=12\"\n },\n \"browser\": {\n \"fs\": false\n }\n}\n","const fs = require('fs')\nconst path = require('path')\nconst os = require('os')\nconst crypto = require('crypto')\nconst packageJson = require('../package.json')\n\nconst version = packageJson.version\n\nconst LINE = /(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/mg\n\n// Parse src into an Object\nfunction parse (src) {\n const obj = {}\n\n // Convert buffer to string\n let lines = src.toString()\n\n // Convert line breaks to same format\n lines = lines.replace(/\\r\\n?/mg, '\\n')\n\n let match\n while ((match = LINE.exec(lines)) != null) {\n const key = match[1]\n\n // Default undefined or null to empty string\n let value = (match[2] || '')\n\n // Remove whitespace\n value = value.trim()\n\n // Check if double quoted\n const maybeQuote = value[0]\n\n // Remove surrounding quotes\n value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/mg, '$2')\n\n // Expand newlines if double quoted\n if (maybeQuote === '\"') {\n value = value.replace(/\\\\n/g, '\\n')\n value = value.replace(/\\\\r/g, '\\r')\n }\n\n // Add to object\n obj[key] = value\n }\n\n return obj\n}\n\nfunction _parseVault (options) {\n options = options || {}\n\n const vaultPath = _vaultPath(options)\n options.path = vaultPath // parse .env.vault\n const result = DotenvModule.configDotenv(options)\n if (!result.parsed) {\n const err = new Error(`MISSING_DATA: Cannot parse ${vaultPath} for an unknown reason`)\n err.code = 'MISSING_DATA'\n throw err\n }\n\n // handle scenario for comma separated keys - for use with key rotation\n // example: DOTENV_KEY=\"dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=prod,dotenv://:key_7890@dotenvx.com/vault/.env.vault?environment=prod\"\n const keys = _dotenvKey(options).split(',')\n const length = keys.length\n\n let decrypted\n for (let i = 0; i < length; i++) {\n try {\n // Get full key\n const key = keys[i].trim()\n\n // Get instructions for decrypt\n const attrs = _instructions(result, key)\n\n // Decrypt\n decrypted = DotenvModule.decrypt(attrs.ciphertext, attrs.key)\n\n break\n } catch (error) {\n // last key\n if (i + 1 >= length) {\n throw error\n }\n // try next key\n }\n }\n\n // Parse decrypted .env string\n return DotenvModule.parse(decrypted)\n}\n\nfunction _warn (message) {\n console.log(`[dotenv@${version}][WARN] ${message}`)\n}\n\nfunction _debug (message) {\n console.log(`[dotenv@${version}][DEBUG] ${message}`)\n}\n\nfunction _log (message) {\n console.log(`[dotenv@${version}] ${message}`)\n}\n\nfunction _dotenvKey (options) {\n // prioritize developer directly setting options.DOTENV_KEY\n if (options && options.DOTENV_KEY && options.DOTENV_KEY.length > 0) {\n return options.DOTENV_KEY\n }\n\n // secondary infra already contains a DOTENV_KEY environment variable\n if (process.env.DOTENV_KEY && process.env.DOTENV_KEY.length > 0) {\n return process.env.DOTENV_KEY\n }\n\n // fallback to empty string\n return ''\n}\n\nfunction _instructions (result, dotenvKey) {\n // Parse DOTENV_KEY. Format is a URI\n let uri\n try {\n uri = new URL(dotenvKey)\n } catch (error) {\n if (error.code === 'ERR_INVALID_URL') {\n const err = new Error('INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n throw error\n }\n\n // Get decrypt key\n const key = uri.password\n if (!key) {\n const err = new Error('INVALID_DOTENV_KEY: Missing key part')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n // Get environment\n const environment = uri.searchParams.get('environment')\n if (!environment) {\n const err = new Error('INVALID_DOTENV_KEY: Missing environment part')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n // Get ciphertext payload\n const environmentKey = `DOTENV_VAULT_${environment.toUpperCase()}`\n const ciphertext = result.parsed[environmentKey] // DOTENV_VAULT_PRODUCTION\n if (!ciphertext) {\n const err = new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${environmentKey} in your .env.vault file.`)\n err.code = 'NOT_FOUND_DOTENV_ENVIRONMENT'\n throw err\n }\n\n return { ciphertext, key }\n}\n\nfunction _vaultPath (options) {\n let possibleVaultPath = null\n\n if (options && options.path && options.path.length > 0) {\n if (Array.isArray(options.path)) {\n for (const filepath of options.path) {\n if (fs.existsSync(filepath)) {\n possibleVaultPath = filepath.endsWith('.vault') ? filepath : `${filepath}.vault`\n }\n }\n } else {\n possibleVaultPath = options.path.endsWith('.vault') ? options.path : `${options.path}.vault`\n }\n } else {\n possibleVaultPath = path.resolve(process.cwd(), '.env.vault')\n }\n\n if (fs.existsSync(possibleVaultPath)) {\n return possibleVaultPath\n }\n\n return null\n}\n\nfunction _resolveHome (envPath) {\n return envPath[0] === '~' ? path.join(os.homedir(), envPath.slice(1)) : envPath\n}\n\nfunction _configVault (options) {\n const debug = Boolean(options && options.debug)\n const quiet = options && 'quiet' in options ? options.quiet : true\n\n if (debug || !quiet) {\n _log('Loading env from encrypted .env.vault')\n }\n\n const parsed = DotenvModule._parseVault(options)\n\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n\n DotenvModule.populate(processEnv, parsed, options)\n\n return { parsed }\n}\n\nfunction configDotenv (options) {\n const dotenvPath = path.resolve(process.cwd(), '.env')\n let encoding = 'utf8'\n const debug = Boolean(options && options.debug)\n const quiet = options && 'quiet' in options ? options.quiet : true\n\n if (options && options.encoding) {\n encoding = options.encoding\n } else {\n if (debug) {\n _debug('No encoding is specified. UTF-8 is used by default')\n }\n }\n\n let optionPaths = [dotenvPath] // default, look for .env\n if (options && options.path) {\n if (!Array.isArray(options.path)) {\n optionPaths = [_resolveHome(options.path)]\n } else {\n optionPaths = [] // reset default\n for (const filepath of options.path) {\n optionPaths.push(_resolveHome(filepath))\n }\n }\n }\n\n // Build the parsed data in a temporary object (because we need to return it). Once we have the final\n // parsed data, we will combine it with process.env (or options.processEnv if provided).\n let lastError\n const parsedAll = {}\n for (const path of optionPaths) {\n try {\n // Specifying an encoding returns a string instead of a buffer\n const parsed = DotenvModule.parse(fs.readFileSync(path, { encoding }))\n\n DotenvModule.populate(parsedAll, parsed, options)\n } catch (e) {\n if (debug) {\n _debug(`Failed to load ${path} ${e.message}`)\n }\n lastError = e\n }\n }\n\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n\n DotenvModule.populate(processEnv, parsedAll, options)\n\n if (debug || !quiet) {\n const keysCount = Object.keys(parsedAll).length\n const shortPaths = []\n for (const filePath of optionPaths) {\n try {\n const relative = path.relative(process.cwd(), filePath)\n shortPaths.push(relative)\n } catch (e) {\n if (debug) {\n _debug(`Failed to load ${filePath} ${e.message}`)\n }\n lastError = e\n }\n }\n\n _log(`injecting env (${keysCount}) from ${shortPaths.join(',')}`)\n }\n\n if (lastError) {\n return { parsed: parsedAll, error: lastError }\n } else {\n return { parsed: parsedAll }\n }\n}\n\n// Populates process.env from .env file\nfunction config (options) {\n // fallback to original dotenv if DOTENV_KEY is not set\n if (_dotenvKey(options).length === 0) {\n return DotenvModule.configDotenv(options)\n }\n\n const vaultPath = _vaultPath(options)\n\n // dotenvKey exists but .env.vault file does not exist\n if (!vaultPath) {\n _warn(`You set DOTENV_KEY but you are missing a .env.vault file at ${vaultPath}. Did you forget to build it?`)\n\n return DotenvModule.configDotenv(options)\n }\n\n return DotenvModule._configVault(options)\n}\n\nfunction decrypt (encrypted, keyStr) {\n const key = Buffer.from(keyStr.slice(-64), 'hex')\n let ciphertext = Buffer.from(encrypted, 'base64')\n\n const nonce = ciphertext.subarray(0, 12)\n const authTag = ciphertext.subarray(-16)\n ciphertext = ciphertext.subarray(12, -16)\n\n try {\n const aesgcm = crypto.createDecipheriv('aes-256-gcm', key, nonce)\n aesgcm.setAuthTag(authTag)\n return `${aesgcm.update(ciphertext)}${aesgcm.final()}`\n } catch (error) {\n const isRange = error instanceof RangeError\n const invalidKeyLength = error.message === 'Invalid key length'\n const decryptionFailed = error.message === 'Unsupported state or unable to authenticate data'\n\n if (isRange || invalidKeyLength) {\n const err = new Error('INVALID_DOTENV_KEY: It must be 64 characters long (or more)')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n } else if (decryptionFailed) {\n const err = new Error('DECRYPTION_FAILED: Please check your DOTENV_KEY')\n err.code = 'DECRYPTION_FAILED'\n throw err\n } else {\n throw error\n }\n }\n}\n\n// Populate process.env with parsed values\nfunction populate (processEnv, parsed, options = {}) {\n const debug = Boolean(options && options.debug)\n const override = Boolean(options && options.override)\n\n if (typeof parsed !== 'object') {\n const err = new Error('OBJECT_REQUIRED: Please check the processEnv argument being passed to populate')\n err.code = 'OBJECT_REQUIRED'\n throw err\n }\n\n // Set process.env\n for (const key of Object.keys(parsed)) {\n if (Object.prototype.hasOwnProperty.call(processEnv, key)) {\n if (override === true) {\n processEnv[key] = parsed[key]\n }\n\n if (debug) {\n if (override === true) {\n _debug(`\"${key}\" is already defined and WAS overwritten`)\n } else {\n _debug(`\"${key}\" is already defined and was NOT overwritten`)\n }\n }\n } else {\n processEnv[key] = parsed[key]\n }\n }\n}\n\nconst DotenvModule = {\n configDotenv,\n _configVault,\n _parseVault,\n config,\n decrypt,\n parse,\n populate\n}\n\nmodule.exports.configDotenv = DotenvModule.configDotenv\nmodule.exports._configVault = DotenvModule._configVault\nmodule.exports._parseVault = DotenvModule._parseVault\nmodule.exports.config = DotenvModule.config\nmodule.exports.decrypt = DotenvModule.decrypt\nmodule.exports.parse = DotenvModule.parse\nmodule.exports.populate = DotenvModule.populate\n\nmodule.exports = DotenvModule\n","export const ROUTE_BASE_PATHS = {\n PROMPTS: '/prompts',\n FOLDERS: '/folders',\n TEAMS: '/teams',\n ORGANIZATIONS: '/organizations',\n DASHBOARD: '/dashboard',\n API_KEYS: '/api-keys',\n VIRTUAL_KEYS: '/virtual-keys',\n AUTH: '/auth',\n CHAINS: '/prompts/chains',\n PROVIDERS: '/providers',\n FEATURES: '/features'\n};\nexport const PROMPT_ROUTES = {\n LIST: '/',\n CREATE: '/',\n GET_BY_ID: '/:id',\n GET_BY_PROMPT_ID: '/by-id/:promptId',\n INTERPOLATE: '/:id/interpolate',\n UPDATE: '/:id/update',\n DELETE: '/delete',\n DELETE_VERSION: '/versions/delete',\n ADD_LABEL: '/:id/labels',\n REMOVE_LABEL: '/:id/labels',\n SET_VERSION_ENVIRONMENT: '/versions/environment',\n EXECUTE: '/execute',\n PLAYGROUND_EXECUTE: '/playground/execute',\n SET_VERSION_AS_LATEST: '/versions/set-latest',\n DUPLICATE: '/duplicate'\n};\nexport const PROMPT_CHAIN_ROUTES = {\n LIST_CHAINS: '/list',\n CREATE_CHAIN: '/create',\n GET_CHAIN: '/:id',\n UPDATE_CHAIN: '/:id',\n DELETE_CHAIN: '/:id',\n DUPLICATE_CHAIN: '/:id/duplicate',\n CREATE_FROM_DEFINITION: '/from-definition',\n ADD_NODE: '/:id/nodes',\n UPDATE_NODE: '/:chainId/nodes/:nodeId',\n DELETE_NODE: '/:chainId/nodes/:nodeId',\n ADD_DEPENDENCY: '/:id/dependencies',\n DELETE_DEPENDENCY: '/:chainId/dependencies/:dependencyId',\n EXECUTE_CHAIN: '/:id/execute',\n RESUME_MANUAL_INPUT: '/executions/:executionId/resume',\n GET_EXECUTION: '/executions/:id',\n LIST_EXECUTIONS: '/:id/executions'\n};\nexport const TEAM_ROUTES = {\n LIST_ALL: '/all',\n CREATE: '/',\n UPDATE: '/:id',\n DELETE: '/:id',\n SET_ACTIVE: '/set-active',\n LIST_USER_TEAMS: '/user-all',\n LIST_MEMBERS: '/members',\n ADD_MEMBER: '/add-member',\n REMOVE_MEMBER: '/remove-member',\n CANCEL_INVITATION: '/cancel-invitation'\n};\nexport const ORGANIZATION_ROUTES = {\n LIST: '/',\n CREATE: '/create',\n SET_ACTIVE: '/set-active',\n INVITE_USER: '/invite',\n ACCEPT_INVITE: '/accept-invite',\n GET_MEMBER_ROLE: '/member-role'\n};\nexport const DASHBOARD_ROUTES = {\n GET_STATS: '/stats',\n GET_ACTIVITIES: '/activities'\n};\nexport const API_KEY_ROUTES = {\n LIST: '/',\n CREATE: '/',\n DELETE: '/delete',\n PERMISSIONS: '/permissions'\n};\nexport const VIRTUAL_KEY_ROUTES = {\n LIST: '/',\n CREATE: '/',\n GET_BY_ID: '/:id',\n UPDATE: '/:id',\n DELETE: '/:id',\n DUPLICATE: '/:id/duplicate',\n TOGGLE_STATUS: '/:id/toggle-status'\n};\nexport const PROVIDER_ROUTES = {\n LIST: '/',\n GET_BY_ID: '/:providerId',\n GET_SCHEMA: '/:providerId/schema',\n GET_MODELS: '/:providerId/models'\n};\nexport const FOLDERS_ROUTES = {\n GET_FOLDER_TREE: '/tree',\n CREATE_FOLDER: '/',\n UPDATE_FOLDER: '/:id',\n DELETE_FOLDER: '/:id',\n MOVE_PROMPT_TO_FOLDER: '/move-prompt',\n SET_FOLDER_PERMISSIONS: '/set-permissions'\n};\nexport const FEATURES_ROUTES = {\n LIST: '/',\n CHECK: '/:id',\n TOGGLE: '/toggle',\n CREATE: '/create'\n};\nexport const API_ENDPOINTS = {\n PROMPTS: {\n LIST: `${ROUTE_BASE_PATHS.PROMPTS}${PROMPT_ROUTES.LIST}`,\n CREATE: `${ROUTE_BASE_PATHS.PROMPTS}${PROMPT_ROUTES.CREATE}`,\n GET_BY_ID: (id) => `${ROUTE_BASE_PATHS.PROMPTS}${PROMPT_ROUTES.GET_BY_ID.replace(':id', id)}`,\n GET_BY_PROMPT_ID: (promptId) => `${ROUTE_BASE_PATHS.PROMPTS}${PROMPT_ROUTES.GET_BY_PROMPT_ID.replace(':promptId', promptId)}`,\n INTERPOLATE: (id) => `${ROUTE_BASE_PATHS.PROMPTS}${PROMPT_ROUTES.INTERPOLATE.replace(':id', id)}`,\n UPDATE: (id) => `${ROUTE_BASE_PATHS.PROMPTS}${PROMPT_ROUTES.UPDATE.replace(':id', id)}`,\n DELETE: `${ROUTE_BASE_PATHS.PROMPTS}${PROMPT_ROUTES.DELETE}`,\n DELETE_VERSION: `${ROUTE_BASE_PATHS.PROMPTS}${PROMPT_ROUTES.DELETE_VERSION}`,\n ADD_LABEL: (id) => `${ROUTE_BASE_PATHS.PROMPTS}${PROMPT_ROUTES.ADD_LABEL.replace(':id', id)}`,\n REMOVE_LABEL: (id) => `${ROUTE_BASE_PATHS.PROMPTS}${PROMPT_ROUTES.REMOVE_LABEL.replace(':id', id)}`,\n SET_VERSION_ENVIRONMENT: `${ROUTE_BASE_PATHS.PROMPTS}${PROMPT_ROUTES.SET_VERSION_ENVIRONMENT}`,\n EXECUTE: `${ROUTE_BASE_PATHS.PROMPTS}${PROMPT_ROUTES.EXECUTE}`,\n PLAYGROUND_EXECUTE: `${ROUTE_BASE_PATHS.PROMPTS}${PROMPT_ROUTES.PLAYGROUND_EXECUTE}`,\n SET_VERSION_AS_LATEST: `${ROUTE_BASE_PATHS.PROMPTS}${PROMPT_ROUTES.SET_VERSION_AS_LATEST}`,\n DUPLICATE: `${ROUTE_BASE_PATHS.PROMPTS}${PROMPT_ROUTES.DUPLICATE}`\n },\n TEAMS: {\n LIST_ALL: `${ROUTE_BASE_PATHS.TEAMS}${TEAM_ROUTES.LIST_ALL}`,\n CREATE: `${ROUTE_BASE_PATHS.TEAMS}${TEAM_ROUTES.CREATE}`,\n UPDATE: (id) => `${ROUTE_BASE_PATHS.TEAMS}${TEAM_ROUTES.UPDATE.replace(':id', id)}`,\n DELETE: (id) => `${ROUTE_BASE_PATHS.TEAMS}${TEAM_ROUTES.DELETE.replace(':id', id)}`,\n SET_ACTIVE: `${ROUTE_BASE_PATHS.TEAMS}${TEAM_ROUTES.SET_ACTIVE}`,\n LIST_USER_TEAMS: `${ROUTE_BASE_PATHS.TEAMS}${TEAM_ROUTES.LIST_USER_TEAMS}`,\n LIST_MEMBERS: `${ROUTE_BASE_PATHS.TEAMS}${TEAM_ROUTES.LIST_MEMBERS}`,\n ADD_MEMBER: `${ROUTE_BASE_PATHS.TEAMS}${TEAM_ROUTES.ADD_MEMBER}`,\n REMOVE_MEMBER: `${ROUTE_BASE_PATHS.TEAMS}${TEAM_ROUTES.REMOVE_MEMBER}`,\n CANCEL_INVITATION: `${ROUTE_BASE_PATHS.TEAMS}${TEAM_ROUTES.CANCEL_INVITATION}`\n },\n ORGANIZATIONS: {\n LIST: `${ROUTE_BASE_PATHS.ORGANIZATIONS}${ORGANIZATION_ROUTES.LIST}`,\n CREATE: `${ROUTE_BASE_PATHS.ORGANIZATIONS}${ORGANIZATION_ROUTES.CREATE}`,\n SET_ACTIVE: `${ROUTE_BASE_PATHS.ORGANIZATIONS}${ORGANIZATION_ROUTES.SET_ACTIVE}`,\n INVITE_USER: `${ROUTE_BASE_PATHS.ORGANIZATIONS}${ORGANIZATION_ROUTES.INVITE_USER}`,\n ACCEPT_INVITE: `${ROUTE_BASE_PATHS.ORGANIZATIONS}${ORGANIZATION_ROUTES.ACCEPT_INVITE}`,\n GET_MEMBER_ROLE: `${ROUTE_BASE_PATHS.ORGANIZATIONS}${ORGANIZATION_ROUTES.GET_MEMBER_ROLE}`\n },\n DASHBOARD: {\n GET_STATS: `${ROUTE_BASE_PATHS.DASHBOARD}${DASHBOARD_ROUTES.GET_STATS}`,\n GET_ACTIVITIES: `${ROUTE_BASE_PATHS.DASHBOARD}${DASHBOARD_ROUTES.GET_ACTIVITIES}`\n },\n API_KEYS: {\n LIST: `${ROUTE_BASE_PATHS.API_KEYS}${API_KEY_ROUTES.LIST}`,\n CREATE: `${ROUTE_BASE_PATHS.API_KEYS}${API_KEY_ROUTES.CREATE}`,\n DELETE: `${ROUTE_BASE_PATHS.API_KEYS}${API_KEY_ROUTES.DELETE}`,\n PERMISSIONS: `${ROUTE_BASE_PATHS.API_KEYS}${API_KEY_ROUTES.PERMISSIONS}`\n },\n VIRTUAL_KEYS: {\n LIST: `${ROUTE_BASE_PATHS.VIRTUAL_KEYS}${VIRTUAL_KEY_ROUTES.LIST}`,\n CREATE: `${ROUTE_BASE_PATHS.VIRTUAL_KEYS}${VIRTUAL_KEY_ROUTES.CREATE}`,\n GET_BY_ID: (id) => `${ROUTE_BASE_PATHS.VIRTUAL_KEYS}${VIRTUAL_KEY_ROUTES.GET_BY_ID.replace(':id', id)}`,\n UPDATE: (id) => `${ROUTE_BASE_PATHS.VIRTUAL_KEYS}${VIRTUAL_KEY_ROUTES.UPDATE.replace(':id', id)}`,\n DELETE: (id) => `${ROUTE_BASE_PATHS.VIRTUAL_KEYS}${VIRTUAL_KEY_ROUTES.DELETE.replace(':id', id)}`,\n DUPLICATE: (id) => `${ROUTE_BASE_PATHS.VIRTUAL_KEYS}${VIRTUAL_KEY_ROUTES.DUPLICATE.replace(':id', id)}`,\n TOGGLE_STATUS: (id) => `${ROUTE_BASE_PATHS.VIRTUAL_KEYS}${VIRTUAL_KEY_ROUTES.TOGGLE_STATUS.replace(':id', id)}`\n },\n CHAINS: {\n LIST_CHAINS: `${ROUTE_BASE_PATHS.CHAINS}${PROMPT_CHAIN_ROUTES.LIST_CHAINS}`,\n CREATE_CHAIN: `${ROUTE_BASE_PATHS.CHAINS}${PROMPT_CHAIN_ROUTES.CREATE_CHAIN}`,\n GET_CHAIN: (id) => `${ROUTE_BASE_PATHS.CHAINS}${PROMPT_CHAIN_ROUTES.GET_CHAIN.replace(':id', id)}`,\n UPDATE_CHAIN: (id) => `${ROUTE_BASE_PATHS.CHAINS}${PROMPT_CHAIN_ROUTES.UPDATE_CHAIN.replace(':id', id)}`,\n DELETE_CHAIN: (id) => `${ROUTE_BASE_PATHS.CHAINS}${PROMPT_CHAIN_ROUTES.DELETE_CHAIN.replace(':id', id)}`,\n DUPLICATE_CHAIN: (id) => `${ROUTE_BASE_PATHS.CHAINS}${PROMPT_CHAIN_ROUTES.DUPLICATE_CHAIN.replace(':id', id)}`,\n CREATE_FROM_DEFINITION: `${ROUTE_BASE_PATHS.CHAINS}${PROMPT_CHAIN_ROUTES.CREATE_FROM_DEFINITION}`,\n ADD_NODE: (id) => `${ROUTE_BASE_PATHS.CHAINS}${PROMPT_CHAIN_ROUTES.ADD_NODE.replace(':id', id)}`,\n UPDATE_NODE: (chainId, nodeId) => `${ROUTE_BASE_PATHS.CHAINS}${PROMPT_CHAIN_ROUTES.UPDATE_NODE.replace(':chainId', chainId).replace(':nodeId', nodeId)}`,\n DELETE_NODE: (chainId, nodeId) => `${ROUTE_BASE_PATHS.CHAINS}${PROMPT_CHAIN_ROUTES.DELETE_NODE.replace(':chainId', chainId).replace(':nodeId', nodeId)}`,\n ADD_DEPENDENCY: (id) => `${ROUTE_BASE_PATHS.CHAINS}${PROMPT_CHAIN_ROUTES.ADD_DEPENDENCY.replace(':id', id)}`,\n DELETE_DEPENDENCY: (chainId, dependencyId) => `${ROUTE_BASE_PATHS.CHAINS}${PROMPT_CHAIN_ROUTES.DELETE_DEPENDENCY.replace(':chainId', chainId).replace(':dependencyId', dependencyId)}`,\n EXECUTE_CHAIN: (id) => `${ROUTE_BASE_PATHS.CHAINS}${PROMPT_CHAIN_ROUTES.EXECUTE_CHAIN.replace(':id', id)}`,\n RESUME_MANUAL_INPUT: (executionId) => `${ROUTE_BASE_PATHS.CHAINS}${PROMPT_CHAIN_ROUTES.RESUME_MANUAL_INPUT.replace(':executionId', executionId)}`,\n GET_EXECUTION: (id) => `${ROUTE_BASE_PATHS.CHAINS}${PROMPT_CHAIN_ROUTES.GET_EXECUTION.replace(':id', id)}`,\n LIST_EXECUTIONS: (id) => `${ROUTE_BASE_PATHS.CHAINS}${PROMPT_CHAIN_ROUTES.LIST_EXECUTIONS.replace(':id', id)}`\n },\n PROVIDERS: {\n LIST: `${ROUTE_BASE_PATHS.PROVIDERS}${PROVIDER_ROUTES.LIST}`,\n GET_BY_ID: (providerId) => `${ROUTE_BASE_PATHS.PROVIDERS}${PROVIDER_ROUTES.GET_BY_ID.replace(':providerId', providerId)}`,\n GET_SCHEMA: (providerId) => `${ROUTE_BASE_PATHS.PROVIDERS}${PROVIDER_ROUTES.GET_SCHEMA.replace(':providerId', providerId)}`,\n GET_MODELS: (providerId) => `${ROUTE_BASE_PATHS.PROVIDERS}${PROVIDER_ROUTES.GET_MODELS.replace(':providerId', providerId)}`\n },\n FOLDERS: {\n GET_FOLDER_TREE: `${ROUTE_BASE_PATHS.FOLDERS}${FOLDERS_ROUTES.GET_FOLDER_TREE}`,\n CREATE_FOLDER: `${ROUTE_BASE_PATHS.FOLDERS}${FOLDERS_ROUTES.CREATE_FOLDER}`,\n UPDATE_FOLDER: (id) => `${ROUTE_BASE_PATHS.FOLDERS}${FOLDERS_ROUTES.UPDATE_FOLDER.replace(':id', id)}`,\n DELETE_FOLDER: (id) => `${ROUTE_BASE_PATHS.FOLDERS}${FOLDERS_ROUTES.DELETE_FOLDER.replace(':id', id)}`,\n MOVE_PROMPT_TO_FOLDER: `${ROUTE_BASE_PATHS.FOLDERS}${FOLDERS_ROUTES.MOVE_PROMPT_TO_FOLDER}`,\n SET_FOLDER_PERMISSIONS: `${ROUTE_BASE_PATHS.FOLDERS}${FOLDERS_ROUTES.SET_FOLDER_PERMISSIONS}`\n },\n FEATURES: {\n LIST: `${ROUTE_BASE_PATHS.FEATURES}${FEATURES_ROUTES.LIST}`,\n CHECK: (key) => `${ROUTE_BASE_PATHS.FEATURES}${FEATURES_ROUTES.CHECK.replace(':id', key)}`,\n TOGGLE: `${ROUTE_BASE_PATHS.FEATURES}${FEATURES_ROUTES.TOGGLE}`\n }\n};\n","import { z } from 'zod'\n\n// const FetchSchema = z.custom<typeof fetch>(\n// (val) => typeof val === 'function',\n// { message: 'fetch must be a function' }\n// )\n\nconst SDKConfigSchema = z.object({\n apiKey: z.string().min(1, 'API key is required and cannot be empty'),\n organizationId: z.string().optional(),\n env: z.enum(['production', 'prod', 'staging', 'stg', 'localhost', 'local']).optional().default('production'),\n baseUrl: z.url().optional()\n})\n\nexport type SDKConfig = z.input<typeof SDKConfigSchema>\n\n// Validation function for SDK config\nexport function validateSDKConfig(config: unknown): SDKConfig {\n try {\n return SDKConfigSchema.parse(config)\n } catch (error) {\n if (error instanceof z.ZodError) {\n const issues = error.issues.map(issue =>\n `${issue.path.join('.')}: ${issue.message}`\n ).join(', ')\n\n throw new Error(`SDK configuration validation failed: ${issues}`)\n }\n throw error\n }\n}\n\nexport interface RequestOptions {\n headers?: Record<string, string>;\n signal?: AbortSignal;\n}\n\nexport class SDKError extends Error {\n constructor(\n message: string,\n public _status?: number,\n public _response?: Response\n ) {\n super(message)\n this.name = 'SDKError'\n }\n}\n","/* eslint-disable node/no-process-env */\nimport { config } from 'dotenv'\nimport { z } from 'zod'\n\nif (typeof process !== 'undefined' && ['development', 'test'].includes(process.env.NODE_ENV || '')) {\n try {\n const envFile = process.env.NODE_ENV === 'test' ? '.env.test' : '.env'\n config({ path: envFile })\n } catch {}\n}\n\nconst SDKEnvSchema = z.object({\n OFUMA_API_URL: z.url().optional(),\n OFUMA_API_URL_PRODUCTION: z.url().optional(),\n OFUMA_API_URL_STAGING: z.url().optional(),\n OFUMA_API_URL_LOCAL: z.url().optional()\n})\n\nexport type SDKEnvType = z.infer<typeof SDKEnvSchema>\n\n// eslint-disable-next-line import/no-mutable-exports\nlet env: SDKEnvType\n\ntry {\n if (typeof process !== 'undefined' && process.env) {\n env = SDKEnvSchema.parse(process.env)\n } else {\n // In browser or no process.env available\n env = {}\n }\n} catch {\n env = {}\n}\n\nexport default env\n","import type { SDKEnvType } from './env.js'\nimport type { SDKConfig } from './types.js'\n\nimport env from './env.js'\n\n/**\n * Gets the base URL based on configuration priority:\n * 1. Custom baseUrl if provided\n * 2. Environment-based URL from env field (using environment variables or defaults)\n * 3. OFUMA_API_URL environment variable (backward compatibility)\n * 4. Default to production URL\n */\nexport function getBaseUrl(config: SDKConfig): string {\n // Priority 1: Custom baseUrl\n if (config.baseUrl) {\n return config.baseUrl\n }\n\n // Priority 2: Environment-based URL\n if (config.env) {\n const url = getEnvironmentUrl(config.env, env)\n if (url) {\n return url\n }\n }\n\n // Priority 3: Environment variable fallback (backward compatibility)\n if (env.OFUMA_API_URL) {\n return env.OFUMA_API_URL\n }\n\n // Priority 4: Default to production\n return getDefaultUrl('production')\n}\n\n/**\n * Maps environment names to their corresponding URLs\n * Uses environment variables if available, otherwise falls back to defaults\n */\nexport function getEnvironmentUrl(envName: string, envConfig: SDKEnvType): string | undefined {\n // Map of environment names to their environment variable keys\n const envVarMap: Record<string, keyof SDKEnvType> = {\n production: 'OFUMA_API_URL_PRODUCTION',\n prod: 'OFUMA_API_URL_PRODUCTION',\n staging: 'OFUMA_API_URL_STAGING',\n stg: 'OFUMA_API_URL_STAGING',\n localhost: 'OFUMA_API_URL_LOCAL',\n local: 'OFUMA_API_URL_LOCAL'\n }\n\n const envVarKey = envVarMap[envName]\n if (!envVarKey) {\n return undefined\n }\n\n // Use environment variable if available\n const envVarValue = envConfig[envVarKey]\n if (envVarValue) {\n return envVarValue as string\n }\n\n // Fall back to default URL for the environment\n return getDefaultUrl(envName)\n}\n\n/**\n * Returns the default URL for a given environment\n */\nexport function getDefaultUrl(envName: string): string {\n const defaultUrls: Record<string, string | undefined> = {\n production: env.OFUMA_API_URL_PRODUCTION,\n prod: env.OFUMA_API_URL_PRODUCTION,\n staging: env.OFUMA_API_URL_STAGING,\n stg: env.OFUMA_API_URL_STAGING,\n localhost: env.OFUMA_API_URL_LOCAL,\n local: env.OFUMA_API_URL_LOCAL\n }\n\n return defaultUrls[envName] || 'https://api.ofuma.ai'\n}\n","import type { RequestOptions, SDKConfig } from '@/types.js'\n\nimport { SDKError, validateSDKConfig } from '@/types.js'\nimport { getBaseUrl } from '@/utils.js'\n\nexport class BaseClient {\n protected config: SDKConfig & { fetch: typeof fetch }\n\n constructor(config: SDKConfig) {\n const validatedConfig = validateSDKConfig(config)\n\n const baseUrl = getBaseUrl(validatedConfig)\n\n this.config = {\n fetch: globalThis.fetch,\n baseUrl,\n ...validatedConfig\n }\n }\n\n protected async request<T>(\n path: string,\n options: RequestInit & RequestOptions = {}\n ): Promise<T> {\n const url = new URL(path, this.config.baseUrl)\n\n const headers = new Headers({\n 'Content-Type': 'application/json',\n ...options.headers\n })\n\n headers.set('Authorization', `Bearer ${this.config.apiKey}`)\n\n if (this.config.organizationId) {\n headers.set('x-organization-id', this.config.organizationId)\n }\n\n const response = await this.config.fetch(url.toString(), {\n ...options,\n headers\n })\n\n if (!response.ok) {\n const errorMessage = await response.text().catch(() => 'Unknown error')\n throw new SDKError(\n `HTTP ${response.status}: ${errorMessage}`,\n response.status,\n response\n )\n }\n\n const contentType = response.headers.get('content-type')\n if (contentType?.includes('application/json')) {\n return response.json()\n }\n\n return response.text() as unknown as T\n }\n}\n","import { API_ENDPOINTS } from '@ofuma/shared/constants'\n\nimport type { RequestOptions } from '../../types.js'\nimport type {\n ChainExecutionResponse,\n ChainResponse,\n ExecuteChainRequest\n} from './types.js'\n\nimport { BaseClient } from '../../client.js'\n\nexport class ChainsResource extends BaseClient {\n async get(\n id: string,\n options: RequestOptions = {}\n ): Promise<ChainResponse> {\n return this.request<ChainResponse>(API_ENDPOINTS.CHAINS.GET_CHAIN(id), {\n method: 'GET',\n ...options\n })\n }\n\n async execute(\n id: string,\n data: Omit<ExecuteChainRequest, 'chainId'>,\n options: RequestOptions = {}\n ): Promise<ChainExecutionResponse> {\n return this.request<ChainExecutionResponse>(API_ENDPOINTS.CHAINS.EXECUTE_CHAIN(id), {\n method: 'POST',\n body: JSON.stringify({\n chainId: id,\n ...data\n }),\n ...options\n })\n }\n}\n","import { API_ENDPOINTS } from '@ofuma/shared/constants'\n\nimport type { RequestOptions } from '../../types.js'\nimport type {\n GetOneQueryType,\n InterpolatedPromptResponse,\n InterpolatePromptRequest,\n PromptListResponse,\n PromptResponse,\n PromptVersionResponse,\n SetVersionEnvironmentRequest\n} from './types.js'\n\nimport { BaseClient } from '../../client.js'\nimport { ExecutePromptType } from '@ofuma/shared/types'\n\nexport class PromptsResource extends BaseClient {\n async list(options: RequestOptions = {}): Promise<PromptListResponse> {\n return this.request<PromptListResponse>(API_ENDPOINTS.PROMPTS.LIST, {\n method: 'GET',\n ...options\n })\n }\n\n async get(\n id: string,\n queryOptions: GetOneQueryType = {},\n options: RequestOptions = {}\n ): Promise<PromptResponse> {\n let path = API_ENDPOINTS.PROMPTS.GET_BY_ID(id)\n\n if (queryOptions.versionId) {\n const params = new URLSearchParams()\n params.set('versionId', queryOptions.versionId.toString())\n path += `?${params.toString()}`\n }\n\n return this.request<PromptResponse>(path, {\n method: 'GET',\n ...options\n })\n }\n\n async getByPromptId(\n id: string,\n queryOptions: GetOneQueryType = {},\n options: RequestOptions = {}\n ): Promise<PromptResponse> {\n let path = API_ENDPOINTS.PROMPTS.GET_BY_PROMPT_ID(id)\n\n if (queryOptions.versionId) {\n const params = new URLSearchParams()\n params.set('versionId', queryOptions.versionId.toString())\n path += `?${params.toString()}`\n }\n\n return this.request<PromptResponse>(path, {\n method: 'GET',\n ...options\n })\n }\n\n async interpolate(\n id: string,\n data: InterpolatePromptRequest,\n options: RequestOptions = {}\n ): Promise<InterpolatedPromptResponse> {\n return this.request<InterpolatedPromptResponse>(API_ENDPOINTS.PROMPTS.INTERPOLATE(id), {\n method: 'POST',\n body: JSON.stringify(data),\n ...options\n })\n }\n\n async setVersionEnvironment(\n data: SetVersionEnvironmentRequest,\n options: RequestOptions = {}\n ): Promise<PromptVersionResponse> {\n return this.request<PromptVersionResponse>(API_ENDPOINTS.PROMPTS.SET_VERSION_ENVIRONMENT, {\n method: 'PUT',\n body: JSON.stringify(data),\n ...options\n })\n }\n\n async execute(\n data: ExecutePromptType,\n options: RequestOptions = {}\n ): Promise<any> {\n return this.request<any>(API_ENDPOINTS.PROMPTS.EXECUTE, {\n method: 'POST',\n body: JSON.stringify(data),\n ...options\n })\n }\n}\n","import type { SDKConfig } from './types.js'\n\nimport { ChainsResource } from './resources/chains/index.js'\nimport { PromptsResource } from './resources/prompts/index.js'\nimport { getBaseUrl } from './utils.js'\n\nexport class OfumaSDK {\n public prompts: PromptsResource\n public chains: ChainsResource\n private _config: SDKConfig\n\n constructor(config: SDKConfig) {\n this._config = config\n this.prompts = new PromptsResource(config)\n this.chains = new ChainsResource(config)\n }\n\n /**\n * Get the base URL used by the SDK (useful for debugging and testing)\n */\n getBaseUrl(): string {\n return getBaseUrl(this._config)\n }\n}\n\n// Export all prompt types from the types file\nexport type * from './resources/prompts/types.js'\n\n// Export all chain types from the types file\nexport type * from './resources/chains/types.js'\n\n// Export SDK configuration types\nexport type * from './types.js'\n\nexport default OfumaSDK\n"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { ChainWithNodesType, ExecuteChainType, ChainExecutionWithNodesType, PromptListResponseType, PromptResponseType, GetOneQuery, GetInterpolatedPromptType, InterpolatedPromptType, SetVersionEnvironmentType, SetVersionEnvironmentResponseType, ExecutePromptType } from '@ofuma/shared/types';
|
|
3
|
+
export { ChainExecutionWithNodesType as ChainExecutionResponse, ChainWithNodesType as ChainResponse, CreateOrUpdatePromptVersionType as CreateOrUpdatePromptVersionRequest, CreatePromptType as CreatePromptRequest, deletePromptVersionType as DeletePromptVersionRequest, ExecuteChainType as ExecuteChainRequest, GetOneQuery as GetOneQueryType, GetInterpolatedPromptType as InterpolatePromptRequest, InterpolatedPromptType as InterpolatedPromptResponse, PromptLabelType as PromptLabelRequest, PromptListResponseType, PromptResponseType, SetVersionEnvironmentResponseType as PromptVersionResponse, CreatePromptResponseType as SelectPromptResponse, SetVersionEnvironmentType as SetVersionEnvironmentRequest } from '@ofuma/shared/types';
|
|
4
|
+
|
|
5
|
+
declare const SDKConfigSchema: z.ZodObject<{
|
|
6
|
+
apiKey: z.ZodString;
|
|
7
|
+
organizationId: z.ZodOptional<z.ZodString>;
|
|
8
|
+
env: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
9
|
+
production: "production";
|
|
10
|
+
prod: "prod";
|
|
11
|
+
staging: "staging";
|
|
12
|
+
stg: "stg";
|
|
13
|
+
localhost: "localhost";
|
|
14
|
+
local: "local";
|
|
15
|
+
}>>>;
|
|
16
|
+
baseUrl: z.ZodOptional<z.ZodURL>;
|
|
17
|
+
}, z.core.$strip>;
|
|
18
|
+
type SDKConfig = z.input<typeof SDKConfigSchema>;
|
|
19
|
+
declare function validateSDKConfig(config: unknown): SDKConfig;
|
|
20
|
+
interface RequestOptions {
|
|
21
|
+
headers?: Record<string, string>;
|
|
22
|
+
signal?: AbortSignal;
|
|
23
|
+
}
|
|
24
|
+
declare class SDKError extends Error {
|
|
25
|
+
_status?: number | undefined;
|
|
26
|
+
_response?: Response | undefined;
|
|
27
|
+
constructor(message: string, _status?: number | undefined, _response?: Response | undefined);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
declare class BaseClient {
|
|
31
|
+
protected config: SDKConfig & {
|
|
32
|
+
fetch: typeof fetch;
|
|
33
|
+
};
|
|
34
|
+
constructor(config: SDKConfig);
|
|
35
|
+
protected request<T>(path: string, options?: RequestInit & RequestOptions): Promise<T>;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
declare class ChainsResource extends BaseClient {
|
|
39
|
+
get(id: string, options?: RequestOptions): Promise<ChainWithNodesType>;
|
|
40
|
+
execute(id: string, data: Omit<ExecuteChainType, 'chainId'>, options?: RequestOptions): Promise<ChainExecutionWithNodesType>;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
type PromptListResponse = PromptListResponseType[];
|
|
44
|
+
interface DeletePromptRequest {
|
|
45
|
+
promptId: string;
|
|
46
|
+
}
|
|
47
|
+
type PromptResponse = PromptResponseType;
|
|
48
|
+
|
|
49
|
+
declare class PromptsResource extends BaseClient {
|
|
50
|
+
list(options?: RequestOptions): Promise<PromptListResponse>;
|
|
51
|
+
get(id: string, queryOptions?: GetOneQuery, options?: RequestOptions): Promise<PromptResponse>;
|
|
52
|
+
getByPromptId(id: string, queryOptions?: GetOneQuery, options?: RequestOptions): Promise<PromptResponse>;
|
|
53
|
+
interpolate(id: string, data: GetInterpolatedPromptType, options?: RequestOptions): Promise<InterpolatedPromptType>;
|
|
54
|
+
setVersionEnvironment(data: SetVersionEnvironmentType, options?: RequestOptions): Promise<SetVersionEnvironmentResponseType>;
|
|
55
|
+
execute(data: ExecutePromptType, options?: RequestOptions): Promise<any>;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
declare class OfumaSDK {
|
|
59
|
+
prompts: PromptsResource;
|
|
60
|
+
chains: ChainsResource;
|
|
61
|
+
private _config;
|
|
62
|
+
constructor(config: SDKConfig);
|
|
63
|
+
/**
|
|
64
|
+
* Get the base URL used by the SDK (useful for debugging and testing)
|
|
65
|
+
*/
|
|
66
|
+
getBaseUrl(): string;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export { type DeletePromptRequest, OfumaSDK, type PromptListResponse, type PromptResponse, type RequestOptions, type SDKConfig, SDKError, OfumaSDK as default, validateSDKConfig };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { ChainWithNodesType, ExecuteChainType, ChainExecutionWithNodesType, PromptListResponseType, PromptResponseType, GetOneQuery, GetInterpolatedPromptType, InterpolatedPromptType, SetVersionEnvironmentType, SetVersionEnvironmentResponseType, ExecutePromptType } from '@ofuma/shared/types';
|
|
3
|
+
export { ChainExecutionWithNodesType as ChainExecutionResponse, ChainWithNodesType as ChainResponse, CreateOrUpdatePromptVersionType as CreateOrUpdatePromptVersionRequest, CreatePromptType as CreatePromptRequest, deletePromptVersionType as DeletePromptVersionRequest, ExecuteChainType as ExecuteChainRequest, GetOneQuery as GetOneQueryType, GetInterpolatedPromptType as InterpolatePromptRequest, InterpolatedPromptType as InterpolatedPromptResponse, PromptLabelType as PromptLabelRequest, PromptListResponseType, PromptResponseType, SetVersionEnvironmentResponseType as PromptVersionResponse, CreatePromptResponseType as SelectPromptResponse, SetVersionEnvironmentType as SetVersionEnvironmentRequest } from '@ofuma/shared/types';
|
|
4
|
+
|
|
5
|
+
declare const SDKConfigSchema: z.ZodObject<{
|
|
6
|
+
apiKey: z.ZodString;
|
|
7
|
+
organizationId: z.ZodOptional<z.ZodString>;
|
|
8
|
+
env: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
9
|
+
production: "production";
|
|
10
|
+
prod: "prod";
|
|
11
|
+
staging: "staging";
|
|
12
|
+
stg: "stg";
|
|
13
|
+
localhost: "localhost";
|
|
14
|
+
local: "local";
|
|
15
|
+
}>>>;
|
|
16
|
+
baseUrl: z.ZodOptional<z.ZodURL>;
|
|
17
|
+
}, z.core.$strip>;
|
|
18
|
+
type SDKConfig = z.input<typeof SDKConfigSchema>;
|
|
19
|
+
declare function validateSDKConfig(config: unknown): SDKConfig;
|
|
20
|
+
interface RequestOptions {
|
|
21
|
+
headers?: Record<string, string>;
|
|
22
|
+
signal?: AbortSignal;
|
|
23
|
+
}
|
|
24
|
+
declare class SDKError extends Error {
|
|
25
|
+
_status?: number | undefined;
|
|
26
|
+
_response?: Response | undefined;
|
|
27
|
+
constructor(message: string, _status?: number | undefined, _response?: Response | undefined);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
declare class BaseClient {
|
|
31
|
+
protected config: SDKConfig & {
|
|
32
|
+
fetch: typeof fetch;
|
|
33
|
+
};
|
|
34
|
+
constructor(config: SDKConfig);
|
|
35
|
+
protected request<T>(path: string, options?: RequestInit & RequestOptions): Promise<T>;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
declare class ChainsResource extends BaseClient {
|
|
39
|
+
get(id: string, options?: RequestOptions): Promise<ChainWithNodesType>;
|
|
40
|
+
execute(id: string, data: Omit<ExecuteChainType, 'chainId'>, options?: RequestOptions): Promise<ChainExecutionWithNodesType>;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
type PromptListResponse = PromptListResponseType[];
|
|
44
|
+
interface DeletePromptRequest {
|
|
45
|
+
promptId: string;
|
|
46
|
+
}
|
|
47
|
+
type PromptResponse = PromptResponseType;
|
|
48
|
+
|
|
49
|
+
declare class PromptsResource extends BaseClient {
|
|
50
|
+
list(options?: RequestOptions): Promise<PromptListResponse>;
|
|
51
|
+
get(id: string, queryOptions?: GetOneQuery, options?: RequestOptions): Promise<PromptResponse>;
|
|
52
|
+
getByPromptId(id: string, queryOptions?: GetOneQuery, options?: RequestOptions): Promise<PromptResponse>;
|
|
53
|
+
interpolate(id: string, data: GetInterpolatedPromptType, options?: RequestOptions): Promise<InterpolatedPromptType>;
|
|
54
|
+
setVersionEnvironment(data: SetVersionEnvironmentType, options?: RequestOptions): Promise<SetVersionEnvironmentResponseType>;
|
|
55
|
+
execute(data: ExecutePromptType, options?: RequestOptions): Promise<any>;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
declare class OfumaSDK {
|
|
59
|
+
prompts: PromptsResource;
|
|
60
|
+
chains: ChainsResource;
|
|
61
|
+
private _config;
|
|
62
|
+
constructor(config: SDKConfig);
|
|
63
|
+
/**
|
|
64
|
+
* Get the base URL used by the SDK (useful for debugging and testing)
|
|
65
|
+
*/
|
|
66
|
+
getBaseUrl(): string;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export { type DeletePromptRequest, OfumaSDK, type PromptListResponse, type PromptResponse, type RequestOptions, type SDKConfig, SDKError, OfumaSDK as default, validateSDKConfig };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import {z as z$1}from'zod';/* @ofuma/sdk - https://github.com/thedumebi/ofuma.ai/tree/master/sdk */
|
|
2
|
+
var ee=Object.create;var G=Object.defineProperty;var te=Object.getOwnPropertyDescriptor;var oe=Object.getOwnPropertyNames;var re=Object.getPrototypeOf,Ee=Object.prototype.hasOwnProperty;var ne=(e,t,r)=>t in e?G(e,t,{enumerable:true,configurable:true,writable:true,value:r}):e[t]=r;var m=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var K=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var se=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of oe(t))!Ee.call(e,s)&&s!==r&&G(e,s,{get:()=>t[s],enumerable:!(n=te(t,s))||n.enumerable});return e};var Te=(e,t,r)=>(r=e!=null?ee(re(e)):{},se(G(r,"default",{value:e,enumerable:true}),e));var d=(e,t,r)=>ne(e,typeof t!="symbol"?t+"":t,r);var j=K((he,ae)=>{ae.exports={name:"dotenv",version:"16.6.1",description:"Loads environment variables from .env file",main:"lib/main.js",types:"lib/main.d.ts",exports:{".":{types:"./lib/main.d.ts",require:"./lib/main.js",default:"./lib/main.js"},"./config":"./config.js","./config.js":"./config.js","./lib/env-options":"./lib/env-options.js","./lib/env-options.js":"./lib/env-options.js","./lib/cli-options":"./lib/cli-options.js","./lib/cli-options.js":"./lib/cli-options.js","./package.json":"./package.json"},scripts:{"dts-check":"tsc --project tests/types/tsconfig.json",lint:"standard",pretest:"npm run lint && npm run dts-check",test:"tap run --allow-empty-coverage --disable-coverage --timeout=60000","test:coverage":"tap run --show-full-coverage --timeout=60000 --coverage-report=text --coverage-report=lcov",prerelease:"npm test",release:"standard-version"},repository:{type:"git",url:"git://github.com/motdotla/dotenv.git"},homepage:"https://github.com/motdotla/dotenv#readme",funding:"https://dotenvx.com",keywords:["dotenv","env",".env","environment","variables","config","settings"],readmeFilename:"README.md",license:"BSD-2-Clause",devDependencies:{"@types/node":"^18.11.3",decache:"^4.6.2",sinon:"^14.0.1",standard:"^17.0.0","standard-version":"^9.5.0",tap:"^19.2.0",typescript:"^4.8.4"},engines:{node:">=12"},browser:{fs:false}};});var Z=K((ve,S)=>{var H=m("fs"),$=m("path"),_e=m("os"),Ie=m("crypto"),Re=j(),Y=Re.version,Ae=/(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;function Oe(e){let t={},r=e.toString();r=r.replace(/\r\n?/mg,`
|
|
3
|
+
`);let n;for(;(n=Ae.exec(r))!=null;){let s=n[1],E=n[2]||"";E=E.trim();let T=E[0];E=E.replace(/^(['"`])([\s\S]*)\1$/mg,"$2"),T==='"'&&(E=E.replace(/\\n/g,`
|
|
4
|
+
`),E=E.replace(/\\r/g,"\r")),t[s]=E;}return t}function Se(e){e=e||{};let t=W(e);e.path=t;let r=c.configDotenv(e);if(!r.parsed){let T=new Error(`MISSING_DATA: Cannot parse ${t} for an unknown reason`);throw T.code="MISSING_DATA",T}let n=X(e).split(","),s=n.length,E;for(let T=0;T<s;T++)try{let i=n[T].trim(),I=le(r,i);E=c.decrypt(I.ciphertext,I.key);break}catch(i){if(T+1>=s)throw i}return c.parse(E)}function Ne(e){console.log(`[dotenv@${Y}][WARN] ${e}`);}function U(e){console.log(`[dotenv@${Y}][DEBUG] ${e}`);}function Q(e){console.log(`[dotenv@${Y}] ${e}`);}function X(e){return e&&e.DOTENV_KEY&&e.DOTENV_KEY.length>0?e.DOTENV_KEY:process.env.DOTENV_KEY&&process.env.DOTENV_KEY.length>0?process.env.DOTENV_KEY:""}function le(e,t){let r;try{r=new URL(t);}catch(i){if(i.code==="ERR_INVALID_URL"){let I=new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development");throw I.code="INVALID_DOTENV_KEY",I}throw i}let n=r.password;if(!n){let i=new Error("INVALID_DOTENV_KEY: Missing key part");throw i.code="INVALID_DOTENV_KEY",i}let s=r.searchParams.get("environment");if(!s){let i=new Error("INVALID_DOTENV_KEY: Missing environment part");throw i.code="INVALID_DOTENV_KEY",i}let E=`DOTENV_VAULT_${s.toUpperCase()}`,T=e.parsed[E];if(!T){let i=new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${E} in your .env.vault file.`);throw i.code="NOT_FOUND_DOTENV_ENVIRONMENT",i}return {ciphertext:T,key:n}}function W(e){let t=null;if(e&&e.path&&e.path.length>0)if(Array.isArray(e.path))for(let r of e.path)H.existsSync(r)&&(t=r.endsWith(".vault")?r:`${r}.vault`);else t=e.path.endsWith(".vault")?e.path:`${e.path}.vault`;else t=$.resolve(process.cwd(),".env.vault");return H.existsSync(t)?t:null}function k(e){return e[0]==="~"?$.join(_e.homedir(),e.slice(1)):e}function de(e){let t=!!(e&&e.debug),r=e&&"quiet"in e?e.quiet:true;(t||!r)&&Q("Loading env from encrypted .env.vault");let n=c._parseVault(e),s=process.env;return e&&e.processEnv!=null&&(s=e.processEnv),c.populate(s,n,e),{parsed:n}}function De(e){let t=$.resolve(process.cwd(),".env"),r="utf8",n=!!(e&&e.debug),s=e&&"quiet"in e?e.quiet:true;e&&e.encoding?r=e.encoding:n&&U("No encoding is specified. UTF-8 is used by default");let E=[t];if(e&&e.path)if(!Array.isArray(e.path))E=[k(e.path)];else {E=[];for(let N of e.path)E.push(k(N));}let T,i={};for(let N of E)try{let _=c.parse(H.readFileSync(N,{encoding:r}));c.populate(i,_,e);}catch(_){n&&U(`Failed to load ${N} ${_.message}`),T=_;}let I=process.env;if(e&&e.processEnv!=null&&(I=e.processEnv),c.populate(I,i,e),n||!s){let N=Object.keys(i).length,_=[];for(let B of E)try{let f=$.relative(process.cwd(),B);_.push(f);}catch(f){n&&U(`Failed to load ${B} ${f.message}`),T=f;}Q(`injecting env (${N}) from ${_.join(",")}`);}return T?{parsed:i,error:T}:{parsed:i}}function ue(e){if(X(e).length===0)return c.configDotenv(e);let t=W(e);return t?c._configVault(e):(Ne(`You set DOTENV_KEY but you are missing a .env.vault file at ${t}. Did you forget to build it?`),c.configDotenv(e))}function Pe(e,t){let r=Buffer.from(t.slice(-64),"hex"),n=Buffer.from(e,"base64"),s=n.subarray(0,12),E=n.subarray(-16);n=n.subarray(12,-16);try{let T=Ie.createDecipheriv("aes-256-gcm",r,s);return T.setAuthTag(E),`${T.update(n)}${T.final()}`}catch(T){let i=T instanceof RangeError,I=T.message==="Invalid key length",N=T.message==="Unsupported state or unable to authenticate data";if(i||I){let _=new Error("INVALID_DOTENV_KEY: It must be 64 characters long (or more)");throw _.code="INVALID_DOTENV_KEY",_}else if(N){let _=new Error("DECRYPTION_FAILED: Please check your DOTENV_KEY");throw _.code="DECRYPTION_FAILED",_}else throw T}}function Le(e,t,r={}){let n=!!(r&&r.debug),s=!!(r&&r.override);if(typeof t!="object"){let E=new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");throw E.code="OBJECT_REQUIRED",E}for(let E of Object.keys(t))Object.prototype.hasOwnProperty.call(e,E)?(s===true&&(e[E]=t[E]),n&&U(s===true?`"${E}" is already defined and WAS overwritten`:`"${E}" is already defined and was NOT overwritten`)):e[E]=t[E];}var c={configDotenv:De,_configVault:de,_parseVault:Se,config:ue,decrypt:Pe,parse:Oe,populate:Le};S.exports.configDotenv=c.configDotenv;S.exports._configVault=c._configVault;S.exports._parseVault=c._parseVault;S.exports.config=c.config;S.exports.decrypt=c.decrypt;S.exports.parse=c.parse;S.exports.populate=c.populate;S.exports=c;});var o={PROMPTS:"/prompts",CHAINS:"/prompts/chains"},a={LIST:"/",CREATE:"/",GET_BY_ID:"/:id",GET_BY_PROMPT_ID:"/by-id/:promptId",INTERPOLATE:"/:id/interpolate",UPDATE:"/:id/update",DELETE:"/delete",DELETE_VERSION:"/versions/delete",ADD_LABEL:"/:id/labels",REMOVE_LABEL:"/:id/labels",SET_VERSION_ENVIRONMENT:"/versions/environment",EXECUTE:"/execute",PLAYGROUND_EXECUTE:"/playground/execute",SET_VERSION_AS_LATEST:"/versions/set-latest",DUPLICATE:"/duplicate"},p={LIST_CHAINS:"/list",CREATE_CHAIN:"/create",GET_CHAIN:"/:id",UPDATE_CHAIN:"/:id",DELETE_CHAIN:"/:id",DUPLICATE_CHAIN:"/:id/duplicate",CREATE_FROM_DEFINITION:"/from-definition",ADD_NODE:"/:id/nodes",UPDATE_NODE:"/:chainId/nodes/:nodeId",DELETE_NODE:"/:chainId/nodes/:nodeId",ADD_DEPENDENCY:"/:id/dependencies",DELETE_DEPENDENCY:"/:chainId/dependencies/:dependencyId",EXECUTE_CHAIN:"/:id/execute",RESUME_MANUAL_INPUT:"/executions/:executionId/resume",GET_EXECUTION:"/executions/:id",LIST_EXECUTIONS:"/:id/executions"},A={PROMPTS:{LIST:`${o.PROMPTS}${a.LIST}`,CREATE:`${o.PROMPTS}${a.CREATE}`,GET_BY_ID:e=>`${o.PROMPTS}${a.GET_BY_ID.replace(":id",e)}`,GET_BY_PROMPT_ID:e=>`${o.PROMPTS}${a.GET_BY_PROMPT_ID.replace(":promptId",e)}`,INTERPOLATE:e=>`${o.PROMPTS}${a.INTERPOLATE.replace(":id",e)}`,UPDATE:e=>`${o.PROMPTS}${a.UPDATE.replace(":id",e)}`,DELETE:`${o.PROMPTS}${a.DELETE}`,DELETE_VERSION:`${o.PROMPTS}${a.DELETE_VERSION}`,ADD_LABEL:e=>`${o.PROMPTS}${a.ADD_LABEL.replace(":id",e)}`,REMOVE_LABEL:e=>`${o.PROMPTS}${a.REMOVE_LABEL.replace(":id",e)}`,SET_VERSION_ENVIRONMENT:`${o.PROMPTS}${a.SET_VERSION_ENVIRONMENT}`,EXECUTE:`${o.PROMPTS}${a.EXECUTE}`,PLAYGROUND_EXECUTE:`${o.PROMPTS}${a.PLAYGROUND_EXECUTE}`,SET_VERSION_AS_LATEST:`${o.PROMPTS}${a.SET_VERSION_AS_LATEST}`,DUPLICATE:`${o.PROMPTS}${a.DUPLICATE}`},CHAINS:{LIST_CHAINS:`${o.CHAINS}${p.LIST_CHAINS}`,CREATE_CHAIN:`${o.CHAINS}${p.CREATE_CHAIN}`,GET_CHAIN:e=>`${o.CHAINS}${p.GET_CHAIN.replace(":id",e)}`,UPDATE_CHAIN:e=>`${o.CHAINS}${p.UPDATE_CHAIN.replace(":id",e)}`,DELETE_CHAIN:e=>`${o.CHAINS}${p.DELETE_CHAIN.replace(":id",e)}`,DUPLICATE_CHAIN:e=>`${o.CHAINS}${p.DUPLICATE_CHAIN.replace(":id",e)}`,CREATE_FROM_DEFINITION:`${o.CHAINS}${p.CREATE_FROM_DEFINITION}`,ADD_NODE:e=>`${o.CHAINS}${p.ADD_NODE.replace(":id",e)}`,UPDATE_NODE:(e,t)=>`${o.CHAINS}${p.UPDATE_NODE.replace(":chainId",e).replace(":nodeId",t)}`,DELETE_NODE:(e,t)=>`${o.CHAINS}${p.DELETE_NODE.replace(":chainId",e).replace(":nodeId",t)}`,ADD_DEPENDENCY:e=>`${o.CHAINS}${p.ADD_DEPENDENCY.replace(":id",e)}`,DELETE_DEPENDENCY:(e,t)=>`${o.CHAINS}${p.DELETE_DEPENDENCY.replace(":chainId",e).replace(":dependencyId",t)}`,EXECUTE_CHAIN:e=>`${o.CHAINS}${p.EXECUTE_CHAIN.replace(":id",e)}`,RESUME_MANUAL_INPUT:e=>`${o.CHAINS}${p.RESUME_MANUAL_INPUT.replace(":executionId",e)}`,GET_EXECUTION:e=>`${o.CHAINS}${p.GET_EXECUTION.replace(":id",e)}`,LIST_EXECUTIONS:e=>`${o.CHAINS}${p.LIST_EXECUTIONS.replace(":id",e)}`}};var pe=z$1.object({apiKey:z$1.string().min(1,"API key is required and cannot be empty"),organizationId:z$1.string().optional(),env:z$1.enum(["production","prod","staging","stg","localhost","local"]).optional().default("production"),baseUrl:z$1.url().optional()});function q(e){try{return pe.parse(e)}catch(t){if(t instanceof z$1.ZodError){let r=t.issues.map(n=>`${n.path.join(".")}: ${n.message}`).join(", ");throw new Error(`SDK configuration validation failed: ${r}`)}throw t}}var g=class extends Error{constructor(r,n,s){super(r);this._status=n;this._response=s;this.name="SDKError";}};var z=Te(Z());if(typeof process<"u"&&["development","test"].includes(process.env.NODE_ENV||""))try{let e=process.env.NODE_ENV==="test"?".env.test":".env";(0,z.config)({path:e});}catch{}var Ue=z$1.object({OFUMA_API_URL:z$1.url().optional(),OFUMA_API_URL_PRODUCTION:z$1.url().optional(),OFUMA_API_URL_STAGING:z$1.url().optional(),OFUMA_API_URL_LOCAL:z$1.url().optional()}),h;try{typeof process<"u"&&process.env?h=Ue.parse(process.env):h={};}catch{h={};}var O=h;function v(e){if(e.baseUrl)return e.baseUrl;if(e.env){let t=Ce(e.env,O);if(t)return t}return O.OFUMA_API_URL?O.OFUMA_API_URL:J("production")}function Ce(e,t){let n={production:"OFUMA_API_URL_PRODUCTION",prod:"OFUMA_API_URL_PRODUCTION",staging:"OFUMA_API_URL_STAGING",stg:"OFUMA_API_URL_STAGING",localhost:"OFUMA_API_URL_LOCAL",local:"OFUMA_API_URL_LOCAL"}[e];if(!n)return;let s=t[n];return s||J(e)}function J(e){return {production:O.OFUMA_API_URL_PRODUCTION,prod:O.OFUMA_API_URL_PRODUCTION,staging:O.OFUMA_API_URL_STAGING,stg:O.OFUMA_API_URL_STAGING,localhost:O.OFUMA_API_URL_LOCAL,local:O.OFUMA_API_URL_LOCAL}[e]||"https://api.ofuma.ai"}var L=class{constructor(t){d(this,"config");let r=q(t),n=v(r);this.config={fetch:globalThis.fetch,baseUrl:n,...r};}async request(t,r={}){let n=new URL(t,this.config.baseUrl),s=new Headers({"Content-Type":"application/json",...r.headers});s.set("Authorization",`Bearer ${this.config.apiKey}`),this.config.organizationId&&s.set("x-organization-id",this.config.organizationId);let E=await this.config.fetch(n.toString(),{...r,headers:s});if(!E.ok){let i=await E.text().catch(()=>"Unknown error");throw new g(`HTTP ${E.status}: ${i}`,E.status,E)}return E.headers.get("content-type")?.includes("application/json")?E.json():E.text()}};var y=class extends L{async get(t,r={}){return this.request(A.CHAINS.GET_CHAIN(t),{method:"GET",...r})}async execute(t,r,n={}){return this.request(A.CHAINS.EXECUTE_CHAIN(t),{method:"POST",body:JSON.stringify({chainId:t,...r}),...n})}};var V=class extends L{async list(t={}){return this.request(A.PROMPTS.LIST,{method:"GET",...t})}async get(t,r={},n={}){let s=A.PROMPTS.GET_BY_ID(t);if(r.versionId){let E=new URLSearchParams;E.set("versionId",r.versionId.toString()),s+=`?${E.toString()}`;}return this.request(s,{method:"GET",...n})}async getByPromptId(t,r={},n={}){let s=A.PROMPTS.GET_BY_PROMPT_ID(t);if(r.versionId){let E=new URLSearchParams;E.set("versionId",r.versionId.toString()),s+=`?${E.toString()}`;}return this.request(s,{method:"GET",...n})}async interpolate(t,r,n={}){return this.request(A.PROMPTS.INTERPOLATE(t),{method:"POST",body:JSON.stringify(r),...n})}async setVersionEnvironment(t,r={}){return this.request(A.PROMPTS.SET_VERSION_ENVIRONMENT,{method:"PUT",body:JSON.stringify(t),...r})}async execute(t,r={}){return this.request(A.PROMPTS.EXECUTE,{method:"POST",body:JSON.stringify(t),...r})}};var b=class{constructor(t){d(this,"prompts");d(this,"chains");d(this,"_config");this._config=t,this.prompts=new V(t),this.chains=new y(t);}getBaseUrl(){return v(this._config)}},ze=b;
|
|
5
|
+
export{b as OfumaSDK,ze as default};//# sourceMappingURL=index.js.map
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../node_modules/.pnpm/dotenv@16.6.1/node_modules/dotenv/package.json","../../node_modules/.pnpm/dotenv@16.6.1/node_modules/dotenv/lib/main.js","../../packages/shared/dist/constants/endpoints.js","../src/types.ts","../src/env.ts","../src/utils.ts","../src/client.ts","../src/resources/chains/index.ts","../src/resources/prompts/index.ts","../src/index.ts"],"names":["require_package","__commonJSMin","exports","module","require_main","fs","path","os","crypto","packageJson","version","LINE","parse","src","obj","lines","match","key","value","maybeQuote","_parseVault","options","vaultPath","_vaultPath","result","DotenvModule","err","keys","_dotenvKey","length","decrypted","i","attrs","_instructions","error","_warn","message","_debug","_log","dotenvKey","uri","environment","environmentKey","ciphertext","possibleVaultPath","filepath","_resolveHome","envPath","_configVault","debug","quiet","parsed","processEnv","configDotenv","dotenvPath","encoding","optionPaths","lastError","parsedAll","e","keysCount","shortPaths","filePath","relative","config","decrypt","encrypted","keyStr","nonce","authTag","aesgcm","isRange","invalidKeyLength","decryptionFailed","populate","override","ROUTE_BASE_PATHS","PROMPT_ROUTES","PROMPT_CHAIN_ROUTES","API_ENDPOINTS","id","promptId","chainId","nodeId","dependencyId","executionId","SDKConfigSchema","z","validateSDKConfig","issues","issue","SDKError","_status","_response","import_dotenv","envFile","SDKEnvSchema","env","env_default","getBaseUrl","url","getEnvironmentUrl","getDefaultUrl","envName","envConfig","envVarKey","envVarValue","BaseClient","__publicField","validatedConfig","baseUrl","headers","response","errorMessage","ChainsResource","data","PromptsResource","queryOptions","params","OfumaSDK","index_default"],"mappings":"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","file":"index.js","sourcesContent":["{\n \"name\": \"dotenv\",\n \"version\": \"16.6.1\",\n \"description\": \"Loads environment variables from .env file\",\n \"main\": \"lib/main.js\",\n \"types\": \"lib/main.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./lib/main.d.ts\",\n \"require\": \"./lib/main.js\",\n \"default\": \"./lib/main.js\"\n },\n \"./config\": \"./config.js\",\n \"./config.js\": \"./config.js\",\n \"./lib/env-options\": \"./lib/env-options.js\",\n \"./lib/env-options.js\": \"./lib/env-options.js\",\n \"./lib/cli-options\": \"./lib/cli-options.js\",\n \"./lib/cli-options.js\": \"./lib/cli-options.js\",\n \"./package.json\": \"./package.json\"\n },\n \"scripts\": {\n \"dts-check\": \"tsc --project tests/types/tsconfig.json\",\n \"lint\": \"standard\",\n \"pretest\": \"npm run lint && npm run dts-check\",\n \"test\": \"tap run --allow-empty-coverage --disable-coverage --timeout=60000\",\n \"test:coverage\": \"tap run --show-full-coverage --timeout=60000 --coverage-report=text --coverage-report=lcov\",\n \"prerelease\": \"npm test\",\n \"release\": \"standard-version\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git://github.com/motdotla/dotenv.git\"\n },\n \"homepage\": \"https://github.com/motdotla/dotenv#readme\",\n \"funding\": \"https://dotenvx.com\",\n \"keywords\": [\n \"dotenv\",\n \"env\",\n \".env\",\n \"environment\",\n \"variables\",\n \"config\",\n \"settings\"\n ],\n \"readmeFilename\": \"README.md\",\n \"license\": \"BSD-2-Clause\",\n \"devDependencies\": {\n \"@types/node\": \"^18.11.3\",\n \"decache\": \"^4.6.2\",\n \"sinon\": \"^14.0.1\",\n \"standard\": \"^17.0.0\",\n \"standard-version\": \"^9.5.0\",\n \"tap\": \"^19.2.0\",\n \"typescript\": \"^4.8.4\"\n },\n \"engines\": {\n \"node\": \">=12\"\n },\n \"browser\": {\n \"fs\": false\n }\n}\n","const fs = require('fs')\nconst path = require('path')\nconst os = require('os')\nconst crypto = require('crypto')\nconst packageJson = require('../package.json')\n\nconst version = packageJson.version\n\nconst LINE = /(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/mg\n\n// Parse src into an Object\nfunction parse (src) {\n const obj = {}\n\n // Convert buffer to string\n let lines = src.toString()\n\n // Convert line breaks to same format\n lines = lines.replace(/\\r\\n?/mg, '\\n')\n\n let match\n while ((match = LINE.exec(lines)) != null) {\n const key = match[1]\n\n // Default undefined or null to empty string\n let value = (match[2] || '')\n\n // Remove whitespace\n value = value.trim()\n\n // Check if double quoted\n const maybeQuote = value[0]\n\n // Remove surrounding quotes\n value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/mg, '$2')\n\n // Expand newlines if double quoted\n if (maybeQuote === '\"') {\n value = value.replace(/\\\\n/g, '\\n')\n value = value.replace(/\\\\r/g, '\\r')\n }\n\n // Add to object\n obj[key] = value\n }\n\n return obj\n}\n\nfunction _parseVault (options) {\n options = options || {}\n\n const vaultPath = _vaultPath(options)\n options.path = vaultPath // parse .env.vault\n const result = DotenvModule.configDotenv(options)\n if (!result.parsed) {\n const err = new Error(`MISSING_DATA: Cannot parse ${vaultPath} for an unknown reason`)\n err.code = 'MISSING_DATA'\n throw err\n }\n\n // handle scenario for comma separated keys - for use with key rotation\n // example: DOTENV_KEY=\"dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=prod,dotenv://:key_7890@dotenvx.com/vault/.env.vault?environment=prod\"\n const keys = _dotenvKey(options).split(',')\n const length = keys.length\n\n let decrypted\n for (let i = 0; i < length; i++) {\n try {\n // Get full key\n const key = keys[i].trim()\n\n // Get instructions for decrypt\n const attrs = _instructions(result, key)\n\n // Decrypt\n decrypted = DotenvModule.decrypt(attrs.ciphertext, attrs.key)\n\n break\n } catch (error) {\n // last key\n if (i + 1 >= length) {\n throw error\n }\n // try next key\n }\n }\n\n // Parse decrypted .env string\n return DotenvModule.parse(decrypted)\n}\n\nfunction _warn (message) {\n console.log(`[dotenv@${version}][WARN] ${message}`)\n}\n\nfunction _debug (message) {\n console.log(`[dotenv@${version}][DEBUG] ${message}`)\n}\n\nfunction _log (message) {\n console.log(`[dotenv@${version}] ${message}`)\n}\n\nfunction _dotenvKey (options) {\n // prioritize developer directly setting options.DOTENV_KEY\n if (options && options.DOTENV_KEY && options.DOTENV_KEY.length > 0) {\n return options.DOTENV_KEY\n }\n\n // secondary infra already contains a DOTENV_KEY environment variable\n if (process.env.DOTENV_KEY && process.env.DOTENV_KEY.length > 0) {\n return process.env.DOTENV_KEY\n }\n\n // fallback to empty string\n return ''\n}\n\nfunction _instructions (result, dotenvKey) {\n // Parse DOTENV_KEY. Format is a URI\n let uri\n try {\n uri = new URL(dotenvKey)\n } catch (error) {\n if (error.code === 'ERR_INVALID_URL') {\n const err = new Error('INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n throw error\n }\n\n // Get decrypt key\n const key = uri.password\n if (!key) {\n const err = new Error('INVALID_DOTENV_KEY: Missing key part')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n // Get environment\n const environment = uri.searchParams.get('environment')\n if (!environment) {\n const err = new Error('INVALID_DOTENV_KEY: Missing environment part')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n // Get ciphertext payload\n const environmentKey = `DOTENV_VAULT_${environment.toUpperCase()}`\n const ciphertext = result.parsed[environmentKey] // DOTENV_VAULT_PRODUCTION\n if (!ciphertext) {\n const err = new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${environmentKey} in your .env.vault file.`)\n err.code = 'NOT_FOUND_DOTENV_ENVIRONMENT'\n throw err\n }\n\n return { ciphertext, key }\n}\n\nfunction _vaultPath (options) {\n let possibleVaultPath = null\n\n if (options && options.path && options.path.length > 0) {\n if (Array.isArray(options.path)) {\n for (const filepath of options.path) {\n if (fs.existsSync(filepath)) {\n possibleVaultPath = filepath.endsWith('.vault') ? filepath : `${filepath}.vault`\n }\n }\n } else {\n possibleVaultPath = options.path.endsWith('.vault') ? options.path : `${options.path}.vault`\n }\n } else {\n possibleVaultPath = path.resolve(process.cwd(), '.env.vault')\n }\n\n if (fs.existsSync(possibleVaultPath)) {\n return possibleVaultPath\n }\n\n return null\n}\n\nfunction _resolveHome (envPath) {\n return envPath[0] === '~' ? path.join(os.homedir(), envPath.slice(1)) : envPath\n}\n\nfunction _configVault (options) {\n const debug = Boolean(options && options.debug)\n const quiet = options && 'quiet' in options ? options.quiet : true\n\n if (debug || !quiet) {\n _log('Loading env from encrypted .env.vault')\n }\n\n const parsed = DotenvModule._parseVault(options)\n\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n\n DotenvModule.populate(processEnv, parsed, options)\n\n return { parsed }\n}\n\nfunction configDotenv (options) {\n const dotenvPath = path.resolve(process.cwd(), '.env')\n let encoding = 'utf8'\n const debug = Boolean(options && options.debug)\n const quiet = options && 'quiet' in options ? options.quiet : true\n\n if (options && options.encoding) {\n encoding = options.encoding\n } else {\n if (debug) {\n _debug('No encoding is specified. UTF-8 is used by default')\n }\n }\n\n let optionPaths = [dotenvPath] // default, look for .env\n if (options && options.path) {\n if (!Array.isArray(options.path)) {\n optionPaths = [_resolveHome(options.path)]\n } else {\n optionPaths = [] // reset default\n for (const filepath of options.path) {\n optionPaths.push(_resolveHome(filepath))\n }\n }\n }\n\n // Build the parsed data in a temporary object (because we need to return it). Once we have the final\n // parsed data, we will combine it with process.env (or options.processEnv if provided).\n let lastError\n const parsedAll = {}\n for (const path of optionPaths) {\n try {\n // Specifying an encoding returns a string instead of a buffer\n const parsed = DotenvModule.parse(fs.readFileSync(path, { encoding }))\n\n DotenvModule.populate(parsedAll, parsed, options)\n } catch (e) {\n if (debug) {\n _debug(`Failed to load ${path} ${e.message}`)\n }\n lastError = e\n }\n }\n\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n\n DotenvModule.populate(processEnv, parsedAll, options)\n\n if (debug || !quiet) {\n const keysCount = Object.keys(parsedAll).length\n const shortPaths = []\n for (const filePath of optionPaths) {\n try {\n const relative = path.relative(process.cwd(), filePath)\n shortPaths.push(relative)\n } catch (e) {\n if (debug) {\n _debug(`Failed to load ${filePath} ${e.message}`)\n }\n lastError = e\n }\n }\n\n _log(`injecting env (${keysCount}) from ${shortPaths.join(',')}`)\n }\n\n if (lastError) {\n return { parsed: parsedAll, error: lastError }\n } else {\n return { parsed: parsedAll }\n }\n}\n\n// Populates process.env from .env file\nfunction config (options) {\n // fallback to original dotenv if DOTENV_KEY is not set\n if (_dotenvKey(options).length === 0) {\n return DotenvModule.configDotenv(options)\n }\n\n const vaultPath = _vaultPath(options)\n\n // dotenvKey exists but .env.vault file does not exist\n if (!vaultPath) {\n _warn(`You set DOTENV_KEY but you are missing a .env.vault file at ${vaultPath}. Did you forget to build it?`)\n\n return DotenvModule.configDotenv(options)\n }\n\n return DotenvModule._configVault(options)\n}\n\nfunction decrypt (encrypted, keyStr) {\n const key = Buffer.from(keyStr.slice(-64), 'hex')\n let ciphertext = Buffer.from(encrypted, 'base64')\n\n const nonce = ciphertext.subarray(0, 12)\n const authTag = ciphertext.subarray(-16)\n ciphertext = ciphertext.subarray(12, -16)\n\n try {\n const aesgcm = crypto.createDecipheriv('aes-256-gcm', key, nonce)\n aesgcm.setAuthTag(authTag)\n return `${aesgcm.update(ciphertext)}${aesgcm.final()}`\n } catch (error) {\n const isRange = error instanceof RangeError\n const invalidKeyLength = error.message === 'Invalid key length'\n const decryptionFailed = error.message === 'Unsupported state or unable to authenticate data'\n\n if (isRange || invalidKeyLength) {\n const err = new Error('INVALID_DOTENV_KEY: It must be 64 characters long (or more)')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n } else if (decryptionFailed) {\n const err = new Error('DECRYPTION_FAILED: Please check your DOTENV_KEY')\n err.code = 'DECRYPTION_FAILED'\n throw err\n } else {\n throw error\n }\n }\n}\n\n// Populate process.env with parsed values\nfunction populate (processEnv, parsed, options = {}) {\n const debug = Boolean(options && options.debug)\n const override = Boolean(options && options.override)\n\n if (typeof parsed !== 'object') {\n const err = new Error('OBJECT_REQUIRED: Please check the processEnv argument being passed to populate')\n err.code = 'OBJECT_REQUIRED'\n throw err\n }\n\n // Set process.env\n for (const key of Object.keys(parsed)) {\n if (Object.prototype.hasOwnProperty.call(processEnv, key)) {\n if (override === true) {\n processEnv[key] = parsed[key]\n }\n\n if (debug) {\n if (override === true) {\n _debug(`\"${key}\" is already defined and WAS overwritten`)\n } else {\n _debug(`\"${key}\" is already defined and was NOT overwritten`)\n }\n }\n } else {\n processEnv[key] = parsed[key]\n }\n }\n}\n\nconst DotenvModule = {\n configDotenv,\n _configVault,\n _parseVault,\n config,\n decrypt,\n parse,\n populate\n}\n\nmodule.exports.configDotenv = DotenvModule.configDotenv\nmodule.exports._configVault = DotenvModule._configVault\nmodule.exports._parseVault = DotenvModule._parseVault\nmodule.exports.config = DotenvModule.config\nmodule.exports.decrypt = DotenvModule.decrypt\nmodule.exports.parse = DotenvModule.parse\nmodule.exports.populate = DotenvModule.populate\n\nmodule.exports = DotenvModule\n","export const ROUTE_BASE_PATHS = {\n PROMPTS: '/prompts',\n FOLDERS: '/folders',\n TEAMS: '/teams',\n ORGANIZATIONS: '/organizations',\n DASHBOARD: '/dashboard',\n API_KEYS: '/api-keys',\n VIRTUAL_KEYS: '/virtual-keys',\n AUTH: '/auth',\n CHAINS: '/prompts/chains',\n PROVIDERS: '/providers',\n FEATURES: '/features'\n};\nexport const PROMPT_ROUTES = {\n LIST: '/',\n CREATE: '/',\n GET_BY_ID: '/:id',\n GET_BY_PROMPT_ID: '/by-id/:promptId',\n INTERPOLATE: '/:id/interpolate',\n UPDATE: '/:id/update',\n DELETE: '/delete',\n DELETE_VERSION: '/versions/delete',\n ADD_LABEL: '/:id/labels',\n REMOVE_LABEL: '/:id/labels',\n SET_VERSION_ENVIRONMENT: '/versions/environment',\n EXECUTE: '/execute',\n PLAYGROUND_EXECUTE: '/playground/execute',\n SET_VERSION_AS_LATEST: '/versions/set-latest',\n DUPLICATE: '/duplicate'\n};\nexport const PROMPT_CHAIN_ROUTES = {\n LIST_CHAINS: '/list',\n CREATE_CHAIN: '/create',\n GET_CHAIN: '/:id',\n UPDATE_CHAIN: '/:id',\n DELETE_CHAIN: '/:id',\n DUPLICATE_CHAIN: '/:id/duplicate',\n CREATE_FROM_DEFINITION: '/from-definition',\n ADD_NODE: '/:id/nodes',\n UPDATE_NODE: '/:chainId/nodes/:nodeId',\n DELETE_NODE: '/:chainId/nodes/:nodeId',\n ADD_DEPENDENCY: '/:id/dependencies',\n DELETE_DEPENDENCY: '/:chainId/dependencies/:dependencyId',\n EXECUTE_CHAIN: '/:id/execute',\n RESUME_MANUAL_INPUT: '/executions/:executionId/resume',\n GET_EXECUTION: '/executions/:id',\n LIST_EXECUTIONS: '/:id/executions'\n};\nexport const TEAM_ROUTES = {\n LIST_ALL: '/all',\n CREATE: '/',\n UPDATE: '/:id',\n DELETE: '/:id',\n SET_ACTIVE: '/set-active',\n LIST_USER_TEAMS: '/user-all',\n LIST_MEMBERS: '/members',\n ADD_MEMBER: '/add-member',\n REMOVE_MEMBER: '/remove-member',\n CANCEL_INVITATION: '/cancel-invitation'\n};\nexport const ORGANIZATION_ROUTES = {\n LIST: '/',\n CREATE: '/create',\n SET_ACTIVE: '/set-active',\n INVITE_USER: '/invite',\n ACCEPT_INVITE: '/accept-invite',\n GET_MEMBER_ROLE: '/member-role'\n};\nexport const DASHBOARD_ROUTES = {\n GET_STATS: '/stats',\n GET_ACTIVITIES: '/activities'\n};\nexport const API_KEY_ROUTES = {\n LIST: '/',\n CREATE: '/',\n DELETE: '/delete',\n PERMISSIONS: '/permissions'\n};\nexport const VIRTUAL_KEY_ROUTES = {\n LIST: '/',\n CREATE: '/',\n GET_BY_ID: '/:id',\n UPDATE: '/:id',\n DELETE: '/:id',\n DUPLICATE: '/:id/duplicate',\n TOGGLE_STATUS: '/:id/toggle-status'\n};\nexport const PROVIDER_ROUTES = {\n LIST: '/',\n GET_BY_ID: '/:providerId',\n GET_SCHEMA: '/:providerId/schema',\n GET_MODELS: '/:providerId/models'\n};\nexport const FOLDERS_ROUTES = {\n GET_FOLDER_TREE: '/tree',\n CREATE_FOLDER: '/',\n UPDATE_FOLDER: '/:id',\n DELETE_FOLDER: '/:id',\n MOVE_PROMPT_TO_FOLDER: '/move-prompt',\n SET_FOLDER_PERMISSIONS: '/set-permissions'\n};\nexport const FEATURES_ROUTES = {\n LIST: '/',\n CHECK: '/:id',\n TOGGLE: '/toggle',\n CREATE: '/create'\n};\nexport const API_ENDPOINTS = {\n PROMPTS: {\n LIST: `${ROUTE_BASE_PATHS.PROMPTS}${PROMPT_ROUTES.LIST}`,\n CREATE: `${ROUTE_BASE_PATHS.PROMPTS}${PROMPT_ROUTES.CREATE}`,\n GET_BY_ID: (id) => `${ROUTE_BASE_PATHS.PROMPTS}${PROMPT_ROUTES.GET_BY_ID.replace(':id', id)}`,\n GET_BY_PROMPT_ID: (promptId) => `${ROUTE_BASE_PATHS.PROMPTS}${PROMPT_ROUTES.GET_BY_PROMPT_ID.replace(':promptId', promptId)}`,\n INTERPOLATE: (id) => `${ROUTE_BASE_PATHS.PROMPTS}${PROMPT_ROUTES.INTERPOLATE.replace(':id', id)}`,\n UPDATE: (id) => `${ROUTE_BASE_PATHS.PROMPTS}${PROMPT_ROUTES.UPDATE.replace(':id', id)}`,\n DELETE: `${ROUTE_BASE_PATHS.PROMPTS}${PROMPT_ROUTES.DELETE}`,\n DELETE_VERSION: `${ROUTE_BASE_PATHS.PROMPTS}${PROMPT_ROUTES.DELETE_VERSION}`,\n ADD_LABEL: (id) => `${ROUTE_BASE_PATHS.PROMPTS}${PROMPT_ROUTES.ADD_LABEL.replace(':id', id)}`,\n REMOVE_LABEL: (id) => `${ROUTE_BASE_PATHS.PROMPTS}${PROMPT_ROUTES.REMOVE_LABEL.replace(':id', id)}`,\n SET_VERSION_ENVIRONMENT: `${ROUTE_BASE_PATHS.PROMPTS}${PROMPT_ROUTES.SET_VERSION_ENVIRONMENT}`,\n EXECUTE: `${ROUTE_BASE_PATHS.PROMPTS}${PROMPT_ROUTES.EXECUTE}`,\n PLAYGROUND_EXECUTE: `${ROUTE_BASE_PATHS.PROMPTS}${PROMPT_ROUTES.PLAYGROUND_EXECUTE}`,\n SET_VERSION_AS_LATEST: `${ROUTE_BASE_PATHS.PROMPTS}${PROMPT_ROUTES.SET_VERSION_AS_LATEST}`,\n DUPLICATE: `${ROUTE_BASE_PATHS.PROMPTS}${PROMPT_ROUTES.DUPLICATE}`\n },\n TEAMS: {\n LIST_ALL: `${ROUTE_BASE_PATHS.TEAMS}${TEAM_ROUTES.LIST_ALL}`,\n CREATE: `${ROUTE_BASE_PATHS.TEAMS}${TEAM_ROUTES.CREATE}`,\n UPDATE: (id) => `${ROUTE_BASE_PATHS.TEAMS}${TEAM_ROUTES.UPDATE.replace(':id', id)}`,\n DELETE: (id) => `${ROUTE_BASE_PATHS.TEAMS}${TEAM_ROUTES.DELETE.replace(':id', id)}`,\n SET_ACTIVE: `${ROUTE_BASE_PATHS.TEAMS}${TEAM_ROUTES.SET_ACTIVE}`,\n LIST_USER_TEAMS: `${ROUTE_BASE_PATHS.TEAMS}${TEAM_ROUTES.LIST_USER_TEAMS}`,\n LIST_MEMBERS: `${ROUTE_BASE_PATHS.TEAMS}${TEAM_ROUTES.LIST_MEMBERS}`,\n ADD_MEMBER: `${ROUTE_BASE_PATHS.TEAMS}${TEAM_ROUTES.ADD_MEMBER}`,\n REMOVE_MEMBER: `${ROUTE_BASE_PATHS.TEAMS}${TEAM_ROUTES.REMOVE_MEMBER}`,\n CANCEL_INVITATION: `${ROUTE_BASE_PATHS.TEAMS}${TEAM_ROUTES.CANCEL_INVITATION}`\n },\n ORGANIZATIONS: {\n LIST: `${ROUTE_BASE_PATHS.ORGANIZATIONS}${ORGANIZATION_ROUTES.LIST}`,\n CREATE: `${ROUTE_BASE_PATHS.ORGANIZATIONS}${ORGANIZATION_ROUTES.CREATE}`,\n SET_ACTIVE: `${ROUTE_BASE_PATHS.ORGANIZATIONS}${ORGANIZATION_ROUTES.SET_ACTIVE}`,\n INVITE_USER: `${ROUTE_BASE_PATHS.ORGANIZATIONS}${ORGANIZATION_ROUTES.INVITE_USER}`,\n ACCEPT_INVITE: `${ROUTE_BASE_PATHS.ORGANIZATIONS}${ORGANIZATION_ROUTES.ACCEPT_INVITE}`,\n GET_MEMBER_ROLE: `${ROUTE_BASE_PATHS.ORGANIZATIONS}${ORGANIZATION_ROUTES.GET_MEMBER_ROLE}`\n },\n DASHBOARD: {\n GET_STATS: `${ROUTE_BASE_PATHS.DASHBOARD}${DASHBOARD_ROUTES.GET_STATS}`,\n GET_ACTIVITIES: `${ROUTE_BASE_PATHS.DASHBOARD}${DASHBOARD_ROUTES.GET_ACTIVITIES}`\n },\n API_KEYS: {\n LIST: `${ROUTE_BASE_PATHS.API_KEYS}${API_KEY_ROUTES.LIST}`,\n CREATE: `${ROUTE_BASE_PATHS.API_KEYS}${API_KEY_ROUTES.CREATE}`,\n DELETE: `${ROUTE_BASE_PATHS.API_KEYS}${API_KEY_ROUTES.DELETE}`,\n PERMISSIONS: `${ROUTE_BASE_PATHS.API_KEYS}${API_KEY_ROUTES.PERMISSIONS}`\n },\n VIRTUAL_KEYS: {\n LIST: `${ROUTE_BASE_PATHS.VIRTUAL_KEYS}${VIRTUAL_KEY_ROUTES.LIST}`,\n CREATE: `${ROUTE_BASE_PATHS.VIRTUAL_KEYS}${VIRTUAL_KEY_ROUTES.CREATE}`,\n GET_BY_ID: (id) => `${ROUTE_BASE_PATHS.VIRTUAL_KEYS}${VIRTUAL_KEY_ROUTES.GET_BY_ID.replace(':id', id)}`,\n UPDATE: (id) => `${ROUTE_BASE_PATHS.VIRTUAL_KEYS}${VIRTUAL_KEY_ROUTES.UPDATE.replace(':id', id)}`,\n DELETE: (id) => `${ROUTE_BASE_PATHS.VIRTUAL_KEYS}${VIRTUAL_KEY_ROUTES.DELETE.replace(':id', id)}`,\n DUPLICATE: (id) => `${ROUTE_BASE_PATHS.VIRTUAL_KEYS}${VIRTUAL_KEY_ROUTES.DUPLICATE.replace(':id', id)}`,\n TOGGLE_STATUS: (id) => `${ROUTE_BASE_PATHS.VIRTUAL_KEYS}${VIRTUAL_KEY_ROUTES.TOGGLE_STATUS.replace(':id', id)}`\n },\n CHAINS: {\n LIST_CHAINS: `${ROUTE_BASE_PATHS.CHAINS}${PROMPT_CHAIN_ROUTES.LIST_CHAINS}`,\n CREATE_CHAIN: `${ROUTE_BASE_PATHS.CHAINS}${PROMPT_CHAIN_ROUTES.CREATE_CHAIN}`,\n GET_CHAIN: (id) => `${ROUTE_BASE_PATHS.CHAINS}${PROMPT_CHAIN_ROUTES.GET_CHAIN.replace(':id', id)}`,\n UPDATE_CHAIN: (id) => `${ROUTE_BASE_PATHS.CHAINS}${PROMPT_CHAIN_ROUTES.UPDATE_CHAIN.replace(':id', id)}`,\n DELETE_CHAIN: (id) => `${ROUTE_BASE_PATHS.CHAINS}${PROMPT_CHAIN_ROUTES.DELETE_CHAIN.replace(':id', id)}`,\n DUPLICATE_CHAIN: (id) => `${ROUTE_BASE_PATHS.CHAINS}${PROMPT_CHAIN_ROUTES.DUPLICATE_CHAIN.replace(':id', id)}`,\n CREATE_FROM_DEFINITION: `${ROUTE_BASE_PATHS.CHAINS}${PROMPT_CHAIN_ROUTES.CREATE_FROM_DEFINITION}`,\n ADD_NODE: (id) => `${ROUTE_BASE_PATHS.CHAINS}${PROMPT_CHAIN_ROUTES.ADD_NODE.replace(':id', id)}`,\n UPDATE_NODE: (chainId, nodeId) => `${ROUTE_BASE_PATHS.CHAINS}${PROMPT_CHAIN_ROUTES.UPDATE_NODE.replace(':chainId', chainId).replace(':nodeId', nodeId)}`,\n DELETE_NODE: (chainId, nodeId) => `${ROUTE_BASE_PATHS.CHAINS}${PROMPT_CHAIN_ROUTES.DELETE_NODE.replace(':chainId', chainId).replace(':nodeId', nodeId)}`,\n ADD_DEPENDENCY: (id) => `${ROUTE_BASE_PATHS.CHAINS}${PROMPT_CHAIN_ROUTES.ADD_DEPENDENCY.replace(':id', id)}`,\n DELETE_DEPENDENCY: (chainId, dependencyId) => `${ROUTE_BASE_PATHS.CHAINS}${PROMPT_CHAIN_ROUTES.DELETE_DEPENDENCY.replace(':chainId', chainId).replace(':dependencyId', dependencyId)}`,\n EXECUTE_CHAIN: (id) => `${ROUTE_BASE_PATHS.CHAINS}${PROMPT_CHAIN_ROUTES.EXECUTE_CHAIN.replace(':id', id)}`,\n RESUME_MANUAL_INPUT: (executionId) => `${ROUTE_BASE_PATHS.CHAINS}${PROMPT_CHAIN_ROUTES.RESUME_MANUAL_INPUT.replace(':executionId', executionId)}`,\n GET_EXECUTION: (id) => `${ROUTE_BASE_PATHS.CHAINS}${PROMPT_CHAIN_ROUTES.GET_EXECUTION.replace(':id', id)}`,\n LIST_EXECUTIONS: (id) => `${ROUTE_BASE_PATHS.CHAINS}${PROMPT_CHAIN_ROUTES.LIST_EXECUTIONS.replace(':id', id)}`\n },\n PROVIDERS: {\n LIST: `${ROUTE_BASE_PATHS.PROVIDERS}${PROVIDER_ROUTES.LIST}`,\n GET_BY_ID: (providerId) => `${ROUTE_BASE_PATHS.PROVIDERS}${PROVIDER_ROUTES.GET_BY_ID.replace(':providerId', providerId)}`,\n GET_SCHEMA: (providerId) => `${ROUTE_BASE_PATHS.PROVIDERS}${PROVIDER_ROUTES.GET_SCHEMA.replace(':providerId', providerId)}`,\n GET_MODELS: (providerId) => `${ROUTE_BASE_PATHS.PROVIDERS}${PROVIDER_ROUTES.GET_MODELS.replace(':providerId', providerId)}`\n },\n FOLDERS: {\n GET_FOLDER_TREE: `${ROUTE_BASE_PATHS.FOLDERS}${FOLDERS_ROUTES.GET_FOLDER_TREE}`,\n CREATE_FOLDER: `${ROUTE_BASE_PATHS.FOLDERS}${FOLDERS_ROUTES.CREATE_FOLDER}`,\n UPDATE_FOLDER: (id) => `${ROUTE_BASE_PATHS.FOLDERS}${FOLDERS_ROUTES.UPDATE_FOLDER.replace(':id', id)}`,\n DELETE_FOLDER: (id) => `${ROUTE_BASE_PATHS.FOLDERS}${FOLDERS_ROUTES.DELETE_FOLDER.replace(':id', id)}`,\n MOVE_PROMPT_TO_FOLDER: `${ROUTE_BASE_PATHS.FOLDERS}${FOLDERS_ROUTES.MOVE_PROMPT_TO_FOLDER}`,\n SET_FOLDER_PERMISSIONS: `${ROUTE_BASE_PATHS.FOLDERS}${FOLDERS_ROUTES.SET_FOLDER_PERMISSIONS}`\n },\n FEATURES: {\n LIST: `${ROUTE_BASE_PATHS.FEATURES}${FEATURES_ROUTES.LIST}`,\n CHECK: (key) => `${ROUTE_BASE_PATHS.FEATURES}${FEATURES_ROUTES.CHECK.replace(':id', key)}`,\n TOGGLE: `${ROUTE_BASE_PATHS.FEATURES}${FEATURES_ROUTES.TOGGLE}`\n }\n};\n","import { z } from 'zod'\n\n// const FetchSchema = z.custom<typeof fetch>(\n// (val) => typeof val === 'function',\n// { message: 'fetch must be a function' }\n// )\n\nconst SDKConfigSchema = z.object({\n apiKey: z.string().min(1, 'API key is required and cannot be empty'),\n organizationId: z.string().optional(),\n env: z.enum(['production', 'prod', 'staging', 'stg', 'localhost', 'local']).optional().default('production'),\n baseUrl: z.url().optional()\n})\n\nexport type SDKConfig = z.input<typeof SDKConfigSchema>\n\n// Validation function for SDK config\nexport function validateSDKConfig(config: unknown): SDKConfig {\n try {\n return SDKConfigSchema.parse(config)\n } catch (error) {\n if (error instanceof z.ZodError) {\n const issues = error.issues.map(issue =>\n `${issue.path.join('.')}: ${issue.message}`\n ).join(', ')\n\n throw new Error(`SDK configuration validation failed: ${issues}`)\n }\n throw error\n }\n}\n\nexport interface RequestOptions {\n headers?: Record<string, string>;\n signal?: AbortSignal;\n}\n\nexport class SDKError extends Error {\n constructor(\n message: string,\n public _status?: number,\n public _response?: Response\n ) {\n super(message)\n this.name = 'SDKError'\n }\n}\n","/* eslint-disable node/no-process-env */\nimport { config } from 'dotenv'\nimport { z } from 'zod'\n\nif (typeof process !== 'undefined' && ['development', 'test'].includes(process.env.NODE_ENV || '')) {\n try {\n const envFile = process.env.NODE_ENV === 'test' ? '.env.test' : '.env'\n config({ path: envFile })\n } catch {}\n}\n\nconst SDKEnvSchema = z.object({\n OFUMA_API_URL: z.url().optional(),\n OFUMA_API_URL_PRODUCTION: z.url().optional(),\n OFUMA_API_URL_STAGING: z.url().optional(),\n OFUMA_API_URL_LOCAL: z.url().optional()\n})\n\nexport type SDKEnvType = z.infer<typeof SDKEnvSchema>\n\n// eslint-disable-next-line import/no-mutable-exports\nlet env: SDKEnvType\n\ntry {\n if (typeof process !== 'undefined' && process.env) {\n env = SDKEnvSchema.parse(process.env)\n } else {\n // In browser or no process.env available\n env = {}\n }\n} catch {\n env = {}\n}\n\nexport default env\n","import type { SDKEnvType } from './env.js'\nimport type { SDKConfig } from './types.js'\n\nimport env from './env.js'\n\n/**\n * Gets the base URL based on configuration priority:\n * 1. Custom baseUrl if provided\n * 2. Environment-based URL from env field (using environment variables or defaults)\n * 3. OFUMA_API_URL environment variable (backward compatibility)\n * 4. Default to production URL\n */\nexport function getBaseUrl(config: SDKConfig): string {\n // Priority 1: Custom baseUrl\n if (config.baseUrl) {\n return config.baseUrl\n }\n\n // Priority 2: Environment-based URL\n if (config.env) {\n const url = getEnvironmentUrl(config.env, env)\n if (url) {\n return url\n }\n }\n\n // Priority 3: Environment variable fallback (backward compatibility)\n if (env.OFUMA_API_URL) {\n return env.OFUMA_API_URL\n }\n\n // Priority 4: Default to production\n return getDefaultUrl('production')\n}\n\n/**\n * Maps environment names to their corresponding URLs\n * Uses environment variables if available, otherwise falls back to defaults\n */\nexport function getEnvironmentUrl(envName: string, envConfig: SDKEnvType): string | undefined {\n // Map of environment names to their environment variable keys\n const envVarMap: Record<string, keyof SDKEnvType> = {\n production: 'OFUMA_API_URL_PRODUCTION',\n prod: 'OFUMA_API_URL_PRODUCTION',\n staging: 'OFUMA_API_URL_STAGING',\n stg: 'OFUMA_API_URL_STAGING',\n localhost: 'OFUMA_API_URL_LOCAL',\n local: 'OFUMA_API_URL_LOCAL'\n }\n\n const envVarKey = envVarMap[envName]\n if (!envVarKey) {\n return undefined\n }\n\n // Use environment variable if available\n const envVarValue = envConfig[envVarKey]\n if (envVarValue) {\n return envVarValue as string\n }\n\n // Fall back to default URL for the environment\n return getDefaultUrl(envName)\n}\n\n/**\n * Returns the default URL for a given environment\n */\nexport function getDefaultUrl(envName: string): string {\n const defaultUrls: Record<string, string | undefined> = {\n production: env.OFUMA_API_URL_PRODUCTION,\n prod: env.OFUMA_API_URL_PRODUCTION,\n staging: env.OFUMA_API_URL_STAGING,\n stg: env.OFUMA_API_URL_STAGING,\n localhost: env.OFUMA_API_URL_LOCAL,\n local: env.OFUMA_API_URL_LOCAL\n }\n\n return defaultUrls[envName] || 'https://api.ofuma.ai'\n}\n","import type { RequestOptions, SDKConfig } from '@/types.js'\n\nimport { SDKError, validateSDKConfig } from '@/types.js'\nimport { getBaseUrl } from '@/utils.js'\n\nexport class BaseClient {\n protected config: SDKConfig & { fetch: typeof fetch }\n\n constructor(config: SDKConfig) {\n const validatedConfig = validateSDKConfig(config)\n\n const baseUrl = getBaseUrl(validatedConfig)\n\n this.config = {\n fetch: globalThis.fetch,\n baseUrl,\n ...validatedConfig\n }\n }\n\n protected async request<T>(\n path: string,\n options: RequestInit & RequestOptions = {}\n ): Promise<T> {\n const url = new URL(path, this.config.baseUrl)\n\n const headers = new Headers({\n 'Content-Type': 'application/json',\n ...options.headers\n })\n\n headers.set('Authorization', `Bearer ${this.config.apiKey}`)\n\n if (this.config.organizationId) {\n headers.set('x-organization-id', this.config.organizationId)\n }\n\n const response = await this.config.fetch(url.toString(), {\n ...options,\n headers\n })\n\n if (!response.ok) {\n const errorMessage = await response.text().catch(() => 'Unknown error')\n throw new SDKError(\n `HTTP ${response.status}: ${errorMessage}`,\n response.status,\n response\n )\n }\n\n const contentType = response.headers.get('content-type')\n if (contentType?.includes('application/json')) {\n return response.json()\n }\n\n return response.text() as unknown as T\n }\n}\n","import { API_ENDPOINTS } from '@ofuma/shared/constants'\n\nimport type { RequestOptions } from '../../types.js'\nimport type {\n ChainExecutionResponse,\n ChainResponse,\n ExecuteChainRequest\n} from './types.js'\n\nimport { BaseClient } from '../../client.js'\n\nexport class ChainsResource extends BaseClient {\n async get(\n id: string,\n options: RequestOptions = {}\n ): Promise<ChainResponse> {\n return this.request<ChainResponse>(API_ENDPOINTS.CHAINS.GET_CHAIN(id), {\n method: 'GET',\n ...options\n })\n }\n\n async execute(\n id: string,\n data: Omit<ExecuteChainRequest, 'chainId'>,\n options: RequestOptions = {}\n ): Promise<ChainExecutionResponse> {\n return this.request<ChainExecutionResponse>(API_ENDPOINTS.CHAINS.EXECUTE_CHAIN(id), {\n method: 'POST',\n body: JSON.stringify({\n chainId: id,\n ...data\n }),\n ...options\n })\n }\n}\n","import { API_ENDPOINTS } from '@ofuma/shared/constants'\n\nimport type { RequestOptions } from '../../types.js'\nimport type {\n GetOneQueryType,\n InterpolatedPromptResponse,\n InterpolatePromptRequest,\n PromptListResponse,\n PromptResponse,\n PromptVersionResponse,\n SetVersionEnvironmentRequest\n} from './types.js'\n\nimport { BaseClient } from '../../client.js'\nimport { ExecutePromptType } from '@ofuma/shared/types'\n\nexport class PromptsResource extends BaseClient {\n async list(options: RequestOptions = {}): Promise<PromptListResponse> {\n return this.request<PromptListResponse>(API_ENDPOINTS.PROMPTS.LIST, {\n method: 'GET',\n ...options\n })\n }\n\n async get(\n id: string,\n queryOptions: GetOneQueryType = {},\n options: RequestOptions = {}\n ): Promise<PromptResponse> {\n let path = API_ENDPOINTS.PROMPTS.GET_BY_ID(id)\n\n if (queryOptions.versionId) {\n const params = new URLSearchParams()\n params.set('versionId', queryOptions.versionId.toString())\n path += `?${params.toString()}`\n }\n\n return this.request<PromptResponse>(path, {\n method: 'GET',\n ...options\n })\n }\n\n async getByPromptId(\n id: string,\n queryOptions: GetOneQueryType = {},\n options: RequestOptions = {}\n ): Promise<PromptResponse> {\n let path = API_ENDPOINTS.PROMPTS.GET_BY_PROMPT_ID(id)\n\n if (queryOptions.versionId) {\n const params = new URLSearchParams()\n params.set('versionId', queryOptions.versionId.toString())\n path += `?${params.toString()}`\n }\n\n return this.request<PromptResponse>(path, {\n method: 'GET',\n ...options\n })\n }\n\n async interpolate(\n id: string,\n data: InterpolatePromptRequest,\n options: RequestOptions = {}\n ): Promise<InterpolatedPromptResponse> {\n return this.request<InterpolatedPromptResponse>(API_ENDPOINTS.PROMPTS.INTERPOLATE(id), {\n method: 'POST',\n body: JSON.stringify(data),\n ...options\n })\n }\n\n async setVersionEnvironment(\n data: SetVersionEnvironmentRequest,\n options: RequestOptions = {}\n ): Promise<PromptVersionResponse> {\n return this.request<PromptVersionResponse>(API_ENDPOINTS.PROMPTS.SET_VERSION_ENVIRONMENT, {\n method: 'PUT',\n body: JSON.stringify(data),\n ...options\n })\n }\n\n async execute(\n data: ExecutePromptType,\n options: RequestOptions = {}\n ): Promise<any> {\n return this.request<any>(API_ENDPOINTS.PROMPTS.EXECUTE, {\n method: 'POST',\n body: JSON.stringify(data),\n ...options\n })\n }\n}\n","import type { SDKConfig } from './types.js'\n\nimport { ChainsResource } from './resources/chains/index.js'\nimport { PromptsResource } from './resources/prompts/index.js'\nimport { getBaseUrl } from './utils.js'\n\nexport class OfumaSDK {\n public prompts: PromptsResource\n public chains: ChainsResource\n private _config: SDKConfig\n\n constructor(config: SDKConfig) {\n this._config = config\n this.prompts = new PromptsResource(config)\n this.chains = new ChainsResource(config)\n }\n\n /**\n * Get the base URL used by the SDK (useful for debugging and testing)\n */\n getBaseUrl(): string {\n return getBaseUrl(this._config)\n }\n}\n\n// Export all prompt types from the types file\nexport type * from './resources/prompts/types.js'\n\n// Export all chain types from the types file\nexport type * from './resources/chains/types.js'\n\n// Export SDK configuration types\nexport type * from './types.js'\n\nexport default OfumaSDK\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ofuma/sdk",
|
|
3
|
+
"type": "module",
|
|
4
|
+
"version": "0.1.1",
|
|
5
|
+
"description": "TypeScript SDK for Ofuma API - Manage prompts, versions, and AI interactions",
|
|
6
|
+
"author": "Ofuma Engineering",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"homepage": "https://github.com/thedumebi/ofuma.ai/blob/master/sdk/README.md",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/thedumebi/ofuma.ai.git",
|
|
12
|
+
"directory": "sdk"
|
|
13
|
+
},
|
|
14
|
+
"bugs": {
|
|
15
|
+
"url": "https://github.com/thedumebi/ofuma.ai/issues"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"ofuma",
|
|
19
|
+
"sdk",
|
|
20
|
+
"api",
|
|
21
|
+
"typescript",
|
|
22
|
+
"prompts",
|
|
23
|
+
"ai",
|
|
24
|
+
"prompt-management",
|
|
25
|
+
"llm",
|
|
26
|
+
"openai",
|
|
27
|
+
"gpt"
|
|
28
|
+
],
|
|
29
|
+
"exports": {
|
|
30
|
+
".": {
|
|
31
|
+
"types": "./dist/index.d.ts",
|
|
32
|
+
"import": "./dist/index.js",
|
|
33
|
+
"require": "./dist/index.cjs"
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"main": "./dist/index.cjs",
|
|
37
|
+
"module": "./dist/index.mjs",
|
|
38
|
+
"types": "./dist/index.d.ts",
|
|
39
|
+
"files": [
|
|
40
|
+
"dist"
|
|
41
|
+
],
|
|
42
|
+
"scripts": {
|
|
43
|
+
"build": "tsup",
|
|
44
|
+
"dev-test": "tsup --watch",
|
|
45
|
+
"clean": "rm -rf dist",
|
|
46
|
+
"lint": "eslint src",
|
|
47
|
+
"lint:fix": "eslint src --cache --fix",
|
|
48
|
+
"type-check": "tsc --noEmit",
|
|
49
|
+
"test": "NODE_ENV=test vitest run",
|
|
50
|
+
"test:watch": "NODE_ENV=test vitest",
|
|
51
|
+
"test:coverage": "NODE_ENV=test vitest run --coverage",
|
|
52
|
+
"prepublishOnly": "pnpm run clean && pnpm run build && pnpm run type-check && pnpm run test",
|
|
53
|
+
"release": "pnpm version patch && pnpm publish",
|
|
54
|
+
"release:minor": "pnpm version minor && pnpm publish",
|
|
55
|
+
"release:major": "pnpm version major && pnpm publish"
|
|
56
|
+
},
|
|
57
|
+
"dependencies": {
|
|
58
|
+
"@ofuma/shared": "workspace:*",
|
|
59
|
+
"zod": "^4.0.5"
|
|
60
|
+
},
|
|
61
|
+
"devDependencies": {
|
|
62
|
+
"@repo/eslint-config": "workspace:*",
|
|
63
|
+
"@repo/typescript-config": "workspace:*",
|
|
64
|
+
"@types/node": "^24.3.1",
|
|
65
|
+
"dotenv": "^16.4.7",
|
|
66
|
+
"tsup": "^8.3.0",
|
|
67
|
+
"typescript": "^5.8.3",
|
|
68
|
+
"vitest": "^3.2.4"
|
|
69
|
+
},
|
|
70
|
+
"publishConfig": {
|
|
71
|
+
"access": "public"
|
|
72
|
+
}
|
|
73
|
+
}
|