@roxyapi/sdk 1.2.33 → 1.2.35

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/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "1.2.33";
1
+ export declare const VERSION = "1.2.35";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1027,7 +1027,7 @@ const { data } = await roxy.humanDesign.calculateVariables({
1027
1027
 
1028
1028
  ## Forecast — `roxy.forecast`
1029
1029
 
1030
- Merge upcoming transit aspects, sign ingresses, retrograde stations, Vimshottari dasha changes, and biorhythm critica...
1030
+ Merge upcoming transit aspects, sign ingresses, retrograde stations, new and full moons, biorhythm critical days, and...
1031
1031
 
1032
1032
  ```typescript
1033
1033
  // Cross-domain forecast timeline - Transits, ingresses, stations, dasha changes, critical days
@@ -1048,7 +1048,7 @@ const { data } = await roxy.forecast.generateTimeline({
1048
1048
  },
1049
1049
  });
1050
1050
 
1051
- // Western transit forecast - Transit aspects, sign ingresses, retrograde stations
1051
+ // Western astrology forecast - aspects, ingresses, stations, eclipses, moon phases
1052
1052
  const { data } = await roxy.forecast.forecastTransits({
1053
1053
  body: {
1054
1054
  birthData: {
@@ -1297,7 +1297,7 @@ const { data } = await roxy.angelNumbers.listAngelNumbers({ query: { limit: 20,
1297
1297
  const { data } = await roxy.angelNumbers.getAngelNumber({ path: { number: '444' } });
1298
1298
 
1299
1299
  // Analyze Any Number Sequence
1300
- const { data } = await roxy.angelNumbers.analyzeNumberSequence({ query: { number: '1234' } });
1300
+ const { data } = await roxy.angelNumbers.analyzeNumberSequence({ query: { number: '1234', context: 'clock' } });
1301
1301
 
1302
1302
  // Daily Angel Number
1303
1303
  const { data } = await roxy.angelNumbers.getDailyAngelNumber({ body: { seed: 'user123', date: '2026-03-06' } });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@roxyapi/sdk",
3
- "version": "1.2.33",
3
+ "version": "1.2.35",
4
4
  "description": "TypeScript SDK for Roxy — the multi-domain spiritual intelligence API",
5
5
  "type": "module",
6
6
  "exports": {
@@ -69,7 +69,7 @@
69
69
  "devDependencies": {
70
70
  "@biomejs/biome": "^2.4.9",
71
71
  "@hey-api/client-fetch": "0.13.1",
72
- "@hey-api/openapi-ts": "0.94.5",
72
+ "@hey-api/openapi-ts": "0.97.3",
73
73
  "@types/node": "^25.5.0",
74
74
  "lefthook": "^2.1.4",
75
75
  "tsup": "^8.5.1",
@@ -31,7 +31,14 @@ export const createClient = (config: Config = {}): Client => {
31
31
 
32
32
  const interceptors = createInterceptors<Request, Response, unknown, ResolvedRequestOptions>();
33
33
 
34
- const beforeRequest = async (options: RequestOptions) => {
34
+ const beforeRequest = async <
35
+ TData = unknown,
36
+ TResponseStyle extends 'data' | 'fields' = 'fields',
37
+ ThrowOnError extends boolean = boolean,
38
+ Url extends string = string,
39
+ >(
40
+ options: RequestOptions<TData, TResponseStyle, ThrowOnError, Url>,
41
+ ) => {
35
42
  const opts = {
36
43
  ..._config,
37
44
  ...options,
@@ -41,10 +48,7 @@ export const createClient = (config: Config = {}): Client => {
41
48
  };
42
49
 
43
50
  if (opts.security) {
44
- await setAuthParams({
45
- ...opts,
46
- security: opts.security,
47
- });
51
+ await setAuthParams(opts);
48
52
  }
49
53
 
50
54
  if (opts.requestValidator) {
@@ -60,178 +64,162 @@ export const createClient = (config: Config = {}): Client => {
60
64
  opts.headers.delete('Content-Type');
61
65
  }
62
66
 
63
- const url = buildUrl(opts);
67
+ const resolvedOpts = opts as typeof opts &
68
+ ResolvedRequestOptions<TResponseStyle, ThrowOnError, Url>;
69
+ const url = buildUrl(resolvedOpts);
64
70
 
65
- return { opts, url };
71
+ return { opts: resolvedOpts, url };
66
72
  };
67
73
 
68
74
  const request: Client['request'] = async (options) => {
69
- // @ts-expect-error
70
- const { opts, url } = await beforeRequest(options);
71
- const requestInit: ReqInit = {
72
- redirect: 'follow',
73
- ...opts,
74
- body: getValidRequestBody(opts),
75
- };
76
-
77
- let request = new Request(url, requestInit);
75
+ const throwOnError = options.throwOnError ?? _config.throwOnError;
76
+ const responseStyle = options.responseStyle ?? _config.responseStyle;
78
77
 
79
- for (const fn of interceptors.request.fns) {
80
- if (fn) {
81
- request = await fn(request, opts);
82
- }
83
- }
84
-
85
- // fetch must be assigned here, otherwise it would throw the error:
86
- // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation
87
- const _fetch = opts.fetch!;
88
- let response: Response;
78
+ let request: Request | undefined;
79
+ let response: Response | undefined;
89
80
 
90
81
  try {
91
- response = await _fetch(request);
92
- } catch (error) {
93
- // Handle fetch exceptions (AbortError, network errors, etc.)
94
- let finalError = error;
82
+ const { opts, url } = await beforeRequest(options);
83
+ const requestInit: ReqInit = {
84
+ redirect: 'follow',
85
+ ...opts,
86
+ body: getValidRequestBody(opts),
87
+ };
95
88
 
96
- for (const fn of interceptors.error.fns) {
89
+ request = new Request(url, requestInit);
90
+
91
+ for (const fn of interceptors.request.fns) {
97
92
  if (fn) {
98
- finalError = (await fn(error, undefined as any, request, opts)) as unknown;
93
+ request = await fn(request, opts);
99
94
  }
100
95
  }
101
96
 
102
- finalError = finalError || ({} as unknown);
97
+ // fetch must be assigned here, otherwise it would throw the error:
98
+ // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation
99
+ const _fetch = opts.fetch!;
103
100
 
104
- if (opts.throwOnError) {
105
- throw finalError;
106
- }
107
-
108
- // Return error response
109
- return opts.responseStyle === 'data'
110
- ? undefined
111
- : {
112
- error: finalError,
113
- request,
114
- response: undefined as any,
115
- };
116
- }
101
+ response = await _fetch(request);
117
102
 
118
- for (const fn of interceptors.response.fns) {
119
- if (fn) {
120
- response = await fn(response, request, opts);
103
+ for (const fn of interceptors.response.fns) {
104
+ if (fn) {
105
+ response = await fn(response, request, opts);
106
+ }
121
107
  }
122
- }
123
-
124
- const result = {
125
- request,
126
- response,
127
- };
128
108
 
129
- if (response.ok) {
130
- const parseAs =
131
- (opts.parseAs === 'auto'
132
- ? getParseAs(response.headers.get('Content-Type'))
133
- : opts.parseAs) ?? 'json';
109
+ const result = {
110
+ request,
111
+ response,
112
+ };
113
+
114
+ if (response.ok) {
115
+ const parseAs =
116
+ (opts.parseAs === 'auto'
117
+ ? getParseAs(response.headers.get('Content-Type'))
118
+ : opts.parseAs) ?? 'json';
119
+
120
+ if (response.status === 204 || response.headers.get('Content-Length') === '0') {
121
+ let emptyData: any;
122
+ switch (parseAs) {
123
+ case 'arrayBuffer':
124
+ case 'blob':
125
+ case 'text':
126
+ emptyData = await response[parseAs]();
127
+ break;
128
+ case 'formData':
129
+ emptyData = new FormData();
130
+ break;
131
+ case 'stream':
132
+ emptyData = response.body;
133
+ break;
134
+ case 'json':
135
+ default:
136
+ emptyData = {};
137
+ break;
138
+ }
139
+ return opts.responseStyle === 'data'
140
+ ? emptyData
141
+ : {
142
+ data: emptyData,
143
+ ...result,
144
+ };
145
+ }
134
146
 
135
- if (response.status === 204 || response.headers.get('Content-Length') === '0') {
136
- let emptyData: any;
147
+ let data: any;
137
148
  switch (parseAs) {
138
149
  case 'arrayBuffer':
139
150
  case 'blob':
151
+ case 'formData':
140
152
  case 'text':
141
- emptyData = await response[parseAs]();
153
+ data = await response[parseAs]();
142
154
  break;
143
- case 'formData':
144
- emptyData = new FormData();
155
+ case 'json': {
156
+ // Some servers return 200 with no Content-Length and empty body.
157
+ // response.json() would throw; read as text and parse if non-empty.
158
+ const text = await response.text();
159
+ data = text ? JSON.parse(text) : {};
145
160
  break;
161
+ }
146
162
  case 'stream':
147
- emptyData = response.body;
148
- break;
149
- case 'json':
150
- default:
151
- emptyData = {};
152
- break;
163
+ return opts.responseStyle === 'data'
164
+ ? response.body
165
+ : {
166
+ data: response.body,
167
+ ...result,
168
+ };
169
+ }
170
+
171
+ if (parseAs === 'json') {
172
+ if (opts.responseValidator) {
173
+ await opts.responseValidator(data);
174
+ }
175
+
176
+ if (opts.responseTransformer) {
177
+ data = await opts.responseTransformer(data);
178
+ }
153
179
  }
180
+
154
181
  return opts.responseStyle === 'data'
155
- ? emptyData
182
+ ? data
156
183
  : {
157
- data: emptyData,
184
+ data,
158
185
  ...result,
159
186
  };
160
187
  }
161
188
 
162
- let data: any;
163
- switch (parseAs) {
164
- case 'arrayBuffer':
165
- case 'blob':
166
- case 'formData':
167
- case 'text':
168
- data = await response[parseAs]();
169
- break;
170
- case 'json': {
171
- // Some servers return 200 with no Content-Length and empty body.
172
- // response.json() would throw; read as text and parse if non-empty.
173
- const text = await response.text();
174
- data = text ? JSON.parse(text) : {};
175
- break;
176
- }
177
- case 'stream':
178
- return opts.responseStyle === 'data'
179
- ? response.body
180
- : {
181
- data: response.body,
182
- ...result,
183
- };
189
+ const textError = await response.text();
190
+ let jsonError: unknown;
191
+
192
+ try {
193
+ jsonError = JSON.parse(textError);
194
+ } catch {
195
+ // noop
184
196
  }
185
197
 
186
- if (parseAs === 'json') {
187
- if (opts.responseValidator) {
188
- await opts.responseValidator(data);
189
- }
198
+ throw jsonError ?? textError;
199
+ } catch (error) {
200
+ let finalError = error;
190
201
 
191
- if (opts.responseTransformer) {
192
- data = await opts.responseTransformer(data);
202
+ for (const fn of interceptors.error.fns) {
203
+ if (fn) {
204
+ finalError = await fn(finalError, response, request, options as ResolvedRequestOptions);
193
205
  }
194
206
  }
195
207
 
196
- return opts.responseStyle === 'data'
197
- ? data
198
- : {
199
- data,
200
- ...result,
201
- };
202
- }
203
-
204
- const textError = await response.text();
205
- let jsonError: unknown;
206
-
207
- try {
208
- jsonError = JSON.parse(textError);
209
- } catch {
210
- // noop
211
- }
212
-
213
- const error = jsonError ?? textError;
214
- let finalError = error;
208
+ finalError = finalError || {};
215
209
 
216
- for (const fn of interceptors.error.fns) {
217
- if (fn) {
218
- finalError = (await fn(error, response, request, opts)) as string;
210
+ if (throwOnError) {
211
+ throw finalError;
219
212
  }
220
- }
221
-
222
- finalError = finalError || ({} as string);
223
213
 
224
- if (opts.throwOnError) {
225
- throw finalError;
214
+ // TODO: we probably want to return error and improve types
215
+ return responseStyle === 'data'
216
+ ? undefined
217
+ : {
218
+ error: finalError,
219
+ request,
220
+ response,
221
+ };
226
222
  }
227
-
228
- // TODO: we probably want to return error and improve types
229
- return opts.responseStyle === 'data'
230
- ? undefined
231
- : {
232
- error: finalError,
233
- ...result,
234
- };
235
223
  };
236
224
 
237
225
  const makeMethodFn = (method: Uppercase<HttpMethod>) => (options: RequestOptions) =>
@@ -242,7 +230,6 @@ export const createClient = (config: Config = {}): Client => {
242
230
  return createSseClient({
243
231
  ...opts,
244
232
  body: opts.body as BodyInit | null | undefined,
245
- headers: opts.headers as unknown as Record<string, string>,
246
233
  method,
247
234
  onRequest: async (url, init) => {
248
235
  let request = new Request(url, init);
@@ -93,6 +93,7 @@ export interface ResolvedRequestOptions<
93
93
  ThrowOnError extends boolean = boolean,
94
94
  Url extends string = string,
95
95
  > extends RequestOptions<unknown, TResponseStyle, ThrowOnError, Url> {
96
+ headers: Headers;
96
97
  serializedBody?: string;
97
98
  }
98
99
 
@@ -126,8 +127,10 @@ export type RequestResult<
126
127
  error: TError extends Record<string, unknown> ? TError[keyof TError] : TError;
127
128
  }
128
129
  ) & {
129
- request: Request;
130
- response: Response;
130
+ /** request may be undefined, because error may be from building the request object itself */
131
+ request?: Request;
132
+ /** response may be undefined, because error may be from building the request object itself or from a network error */
133
+ response?: Response;
131
134
  }
132
135
  >;
133
136
 
@@ -148,12 +151,13 @@ type MethodFn = <
148
151
 
149
152
  type SseFn = <
150
153
  TData = unknown,
151
- TError = unknown,
154
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
155
+ _TError = unknown,
152
156
  ThrowOnError extends boolean = false,
153
157
  TResponseStyle extends ResponseStyle = 'fields',
154
158
  >(
155
- options: Omit<RequestOptions<TData, TResponseStyle, ThrowOnError>, 'method'>,
156
- ) => Promise<ServerSentEventsResult<TData, TError>>;
159
+ options: Omit<RequestOptions<never, TResponseStyle, ThrowOnError>, 'method'>,
160
+ ) => Promise<ServerSentEventsResult<TData>>;
157
161
 
158
162
  type RequestFn = <
159
163
  TData = unknown,
@@ -118,14 +118,12 @@ const checkForExistence = (
118
118
  return false;
119
119
  };
120
120
 
121
- export const setAuthParams = async ({
122
- security,
123
- ...options
124
- }: Pick<Required<RequestOptions>, 'security'> &
125
- Pick<RequestOptions, 'auth' | 'query'> & {
121
+ export async function setAuthParams(
122
+ options: Pick<RequestOptions, 'auth' | 'query' | 'security'> & {
126
123
  headers: Headers;
127
- }) => {
128
- for (const auth of security) {
124
+ },
125
+ ): Promise<void> {
126
+ for (const auth of options.security ?? []) {
129
127
  if (checkForExistence(options, auth.name)) {
130
128
  continue;
131
129
  }
@@ -154,7 +152,7 @@ export const setAuthParams = async ({
154
152
  break;
155
153
  }
156
154
  }
157
- };
155
+ }
158
156
 
159
157
  export const buildUrl: Client['buildUrl'] = (options) =>
160
158
  getUrl({
@@ -218,8 +216,10 @@ export const mergeHeaders = (
218
216
 
219
217
  type ErrInterceptor<Err, Res, Req, Options> = (
220
218
  error: Err,
221
- response: Res,
222
- request: Req,
219
+ /** response may be undefined due to a network error where no response object is produced */
220
+ response: Res | undefined,
221
+ /** request may be undefined, because error may be from building the request object itself */
222
+ request: Req | undefined,
223
223
  options: Options,
224
224
  ) => Err | Promise<Err>;
225
225
 
@@ -104,10 +104,10 @@ const stripEmptySlots = (params: Params) => {
104
104
 
105
105
  export const buildClientParams = (args: ReadonlyArray<unknown>, fields: FieldsConfig) => {
106
106
  const params: Params = {
107
- body: {},
108
- headers: {},
109
- path: {},
110
- query: {},
107
+ body: Object.create(null),
108
+ headers: Object.create(null),
109
+ path: Object.create(null),
110
+ query: Object.create(null),
111
111
  };
112
112
 
113
113
  const map = buildKeyMap(fields);
@@ -79,7 +79,7 @@ export type ServerSentEventsResult<TData = unknown, TReturn = void, TNext = unkn
79
79
  >;
80
80
  };
81
81
 
82
- export const createSseClient = <TData = unknown>({
82
+ export function createSseClient<TData = unknown>({
83
83
  onRequest,
84
84
  onSseError,
85
85
  onSseEvent,
@@ -91,7 +91,7 @@ export const createSseClient = <TData = unknown>({
91
91
  sseSleepFn,
92
92
  url,
93
93
  ...options
94
- }: ServerSentEventsOptions): ServerSentEventsResult<TData> => {
94
+ }: ServerSentEventsOptions): ServerSentEventsResult<TData> {
95
95
  let lastEventId: string | undefined;
96
96
 
97
97
  const sleep = sseSleepFn ?? ((ms: number) => new Promise((resolve) => setTimeout(resolve, ms)));
@@ -155,8 +155,7 @@ export const createSseClient = <TData = unknown>({
155
155
  const { done, value } = await reader.read();
156
156
  if (done) break;
157
157
  buffer += value;
158
- // Normalize line endings: CRLF -> LF, then CR -> LF
159
- buffer = buffer.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
158
+ buffer = buffer.replace(/\r\n?/g, '\n'); // normalize line endings
160
159
 
161
160
  const chunks = buffer.split('\n\n');
162
161
  buffer = chunks.pop() ?? '';
@@ -240,4 +239,4 @@ export const createSseClient = <TData = unknown>({
240
239
  const stream = createStream();
241
240
 
242
241
  return { stream };
243
- };
242
+ }
package/src/sdk.gen.ts CHANGED
@@ -4,7 +4,7 @@ import type { Client, Options as Options2, TDataShape } from './client';
4
4
  import { client } from './client.gen';
5
5
  import type { GetAngelNumbersLookupData, GetAngelNumbersLookupErrors, GetAngelNumbersLookupResponses, GetAngelNumbersNumbersByNumberData, GetAngelNumbersNumbersByNumberErrors, GetAngelNumbersNumbersByNumberResponses, GetAngelNumbersNumbersData, GetAngelNumbersNumbersErrors, GetAngelNumbersNumbersResponses, GetAstrologyHoroscopeBySignDailyData, GetAstrologyHoroscopeBySignDailyErrors, GetAstrologyHoroscopeBySignDailyResponses, GetAstrologyHoroscopeBySignMonthlyData, GetAstrologyHoroscopeBySignMonthlyErrors, GetAstrologyHoroscopeBySignMonthlyResponses, GetAstrologyHoroscopeBySignWeeklyData, GetAstrologyHoroscopeBySignWeeklyErrors, GetAstrologyHoroscopeBySignWeeklyResponses, GetAstrologyMoonPhaseCalendarByYearByMonthData, GetAstrologyMoonPhaseCalendarByYearByMonthErrors, GetAstrologyMoonPhaseCalendarByYearByMonthResponses, GetAstrologyMoonPhaseCurrentData, GetAstrologyMoonPhaseCurrentErrors, GetAstrologyMoonPhaseCurrentResponses, GetAstrologyMoonPhaseUpcomingData, GetAstrologyMoonPhaseUpcomingErrors, GetAstrologyMoonPhaseUpcomingResponses, GetAstrologyPlanetMeaningsByIdData, GetAstrologyPlanetMeaningsByIdErrors, GetAstrologyPlanetMeaningsByIdResponses, GetAstrologyPlanetMeaningsData, GetAstrologyPlanetMeaningsErrors, GetAstrologyPlanetMeaningsResponses, GetAstrologySignsByIdData, GetAstrologySignsByIdErrors, GetAstrologySignsByIdResponses, GetAstrologySignsData, GetAstrologySignsErrors, GetAstrologySignsResponses, GetCrystalsBirthstoneByMonthData, GetCrystalsBirthstoneByMonthErrors, GetCrystalsBirthstoneByMonthResponses, GetCrystalsByIdData, GetCrystalsByIdErrors, GetCrystalsByIdResponses, GetCrystalsChakraByChakraData, GetCrystalsChakraByChakraErrors, GetCrystalsChakraByChakraResponses, GetCrystalsColorsData, GetCrystalsColorsErrors, GetCrystalsColorsResponses, GetCrystalsData, GetCrystalsElementByElementData, GetCrystalsElementByElementErrors, GetCrystalsElementByElementResponses, GetCrystalsErrors, GetCrystalsPairingsByIdData, GetCrystalsPairingsByIdErrors, GetCrystalsPairingsByIdResponses, GetCrystalsPlanetsData, GetCrystalsPlanetsErrors, GetCrystalsPlanetsResponses, GetCrystalsRandomData, GetCrystalsRandomErrors, GetCrystalsRandomResponses, GetCrystalsResponses, GetCrystalsSearchData, GetCrystalsSearchErrors, GetCrystalsSearchResponses, GetCrystalsZodiacBySignData, GetCrystalsZodiacBySignErrors, GetCrystalsZodiacBySignResponses, GetDreamsSymbolsByIdData, GetDreamsSymbolsByIdErrors, GetDreamsSymbolsByIdResponses, GetDreamsSymbolsData, GetDreamsSymbolsErrors, GetDreamsSymbolsLettersData, GetDreamsSymbolsLettersErrors, GetDreamsSymbolsLettersResponses, GetDreamsSymbolsRandomData, GetDreamsSymbolsRandomErrors, GetDreamsSymbolsRandomResponses, GetDreamsSymbolsResponses, GetHumanDesignCentersByIdData, GetHumanDesignCentersByIdErrors, GetHumanDesignCentersByIdResponses, GetHumanDesignGatesByNumberData, GetHumanDesignGatesByNumberErrors, GetHumanDesignGatesByNumberResponses, GetIchingCastData, GetIchingCastErrors, GetIchingCastResponses, GetIchingHexagramsByNumberData, GetIchingHexagramsByNumberErrors, GetIchingHexagramsByNumberResponses, GetIchingHexagramsData, GetIchingHexagramsErrors, GetIchingHexagramsLookupData, GetIchingHexagramsLookupErrors, GetIchingHexagramsLookupResponses, GetIchingHexagramsRandomData, GetIchingHexagramsRandomErrors, GetIchingHexagramsRandomResponses, GetIchingHexagramsResponses, GetIchingTrigramsByIdData, GetIchingTrigramsByIdErrors, GetIchingTrigramsByIdResponses, GetIchingTrigramsData, GetIchingTrigramsErrors, GetIchingTrigramsResponses, GetLanguagesData, GetLanguagesErrors, GetLanguagesResponses, GetLocationCountriesByIso2Data, GetLocationCountriesByIso2Errors, GetLocationCountriesByIso2Responses, GetLocationCountriesData, GetLocationCountriesErrors, GetLocationCountriesResponses, GetLocationSearchData, GetLocationSearchErrors, GetLocationSearchResponses, GetNumerologyMeaningsByNumberData, GetNumerologyMeaningsByNumberErrors, GetNumerologyMeaningsByNumberResponses, GetTarotCardsByIdData, GetTarotCardsByIdErrors, GetTarotCardsByIdResponses, GetTarotCardsData, GetTarotCardsErrors, GetTarotCardsResponses, GetUsageData, GetUsageErrors, GetUsageResponses, GetVedicAstrologyKpAyanamsaData, GetVedicAstrologyKpAyanamsaErrors, GetVedicAstrologyKpAyanamsaResponses, GetVedicAstrologyNakshatrasByIdData, GetVedicAstrologyNakshatrasByIdErrors, GetVedicAstrologyNakshatrasByIdResponses, GetVedicAstrologyNakshatrasData, GetVedicAstrologyNakshatrasErrors, GetVedicAstrologyNakshatrasResponses, GetVedicAstrologyRashisByIdData, GetVedicAstrologyRashisByIdErrors, GetVedicAstrologyRashisByIdResponses, GetVedicAstrologyRashisData, GetVedicAstrologyRashisErrors, GetVedicAstrologyRashisResponses, GetVedicAstrologyYogaByIdData, GetVedicAstrologyYogaByIdErrors, GetVedicAstrologyYogaByIdResponses, GetVedicAstrologyYogaData, GetVedicAstrologyYogaErrors, GetVedicAstrologyYogaResponses, PostAngelNumbersDailyData, PostAngelNumbersDailyErrors, PostAngelNumbersDailyResponses, PostAstrologyAspectPatternsData, PostAstrologyAspectPatternsErrors, PostAstrologyAspectPatternsResponses, PostAstrologyAspectsData, PostAstrologyAspectsErrors, PostAstrologyAspectsResponses, PostAstrologyCompatibilityScoreData, PostAstrologyCompatibilityScoreErrors, PostAstrologyCompatibilityScoreResponses, PostAstrologyCompositeChartData, PostAstrologyCompositeChartErrors, PostAstrologyCompositeChartResponses, PostAstrologyHousesData, PostAstrologyHousesErrors, PostAstrologyHousesResponses, PostAstrologyLunarReturnData, PostAstrologyLunarReturnErrors, PostAstrologyLunarReturnResponses, PostAstrologyNatalChartData, PostAstrologyNatalChartErrors, PostAstrologyNatalChartResponses, PostAstrologyPlanetaryReturnsData, PostAstrologyPlanetaryReturnsErrors, PostAstrologyPlanetaryReturnsResponses, PostAstrologyPlanetsData, PostAstrologyPlanetsErrors, PostAstrologyPlanetsResponses, PostAstrologySolarReturnData, PostAstrologySolarReturnErrors, PostAstrologySolarReturnResponses, PostAstrologySynastryData, PostAstrologySynastryErrors, PostAstrologySynastryResponses, PostAstrologyTransitAspectsData, PostAstrologyTransitAspectsErrors, PostAstrologyTransitAspectsResponses, PostAstrologyTransitsData, PostAstrologyTransitsErrors, PostAstrologyTransitsResponses, PostBiorhythmCompatibilityData, PostBiorhythmCompatibilityErrors, PostBiorhythmCompatibilityResponses, PostBiorhythmCriticalDaysData, PostBiorhythmCriticalDaysErrors, PostBiorhythmCriticalDaysResponses, PostBiorhythmDailyData, PostBiorhythmDailyErrors, PostBiorhythmDailyResponses, PostBiorhythmForecastData, PostBiorhythmForecastErrors, PostBiorhythmForecastResponses, PostBiorhythmPhasesData, PostBiorhythmPhasesErrors, PostBiorhythmPhasesResponses, PostBiorhythmReadingData, PostBiorhythmReadingErrors, PostBiorhythmReadingResponses, PostCrystalsDailyData, PostCrystalsDailyErrors, PostCrystalsDailyResponses, PostDreamsDailyData, PostDreamsDailyErrors, PostDreamsDailyResponses, PostForecastDigestData, PostForecastDigestErrors, PostForecastDigestResponses, PostForecastSignificantDatesData, PostForecastSignificantDatesErrors, PostForecastSignificantDatesResponses, PostForecastSolarReturnData, PostForecastSolarReturnErrors, PostForecastSolarReturnResponses, PostForecastTimelineData, PostForecastTimelineErrors, PostForecastTimelineResponses, PostForecastTransitsData, PostForecastTransitsErrors, PostForecastTransitsResponses, PostHumanDesignBodygraphData, PostHumanDesignBodygraphErrors, PostHumanDesignBodygraphResponses, PostHumanDesignCentersData, PostHumanDesignCentersErrors, PostHumanDesignCentersResponses, PostHumanDesignChannelsData, PostHumanDesignChannelsErrors, PostHumanDesignChannelsResponses, PostHumanDesignConnectionData, PostHumanDesignConnectionErrors, PostHumanDesignConnectionResponses, PostHumanDesignGatesData, PostHumanDesignGatesErrors, PostHumanDesignGatesResponses, PostHumanDesignPentaData, PostHumanDesignPentaErrors, PostHumanDesignPentaResponses, PostHumanDesignProfileData, PostHumanDesignProfileErrors, PostHumanDesignProfileResponses, PostHumanDesignTransitData, PostHumanDesignTransitErrors, PostHumanDesignTransitResponses, PostHumanDesignTypeData, PostHumanDesignTypeErrors, PostHumanDesignTypeResponses, PostHumanDesignVariablesData, PostHumanDesignVariablesErrors, PostHumanDesignVariablesResponses, PostIchingDailyCastData, PostIchingDailyCastErrors, PostIchingDailyCastResponses, PostIchingDailyData, PostIchingDailyErrors, PostIchingDailyResponses, PostNumerologyBirthDayData, PostNumerologyBirthDayErrors, PostNumerologyBirthDayResponses, PostNumerologyBridgeData, PostNumerologyBridgeErrors, PostNumerologyBridgeResponses, PostNumerologyChartData, PostNumerologyChartErrors, PostNumerologyChartResponses, PostNumerologyCompatibilityData, PostNumerologyCompatibilityErrors, PostNumerologyCompatibilityResponses, PostNumerologyDailyData, PostNumerologyDailyErrors, PostNumerologyDailyResponses, PostNumerologyExpressionData, PostNumerologyExpressionErrors, PostNumerologyExpressionResponses, PostNumerologyKarmicDebtData, PostNumerologyKarmicDebtErrors, PostNumerologyKarmicDebtResponses, PostNumerologyKarmicLessonsData, PostNumerologyKarmicLessonsErrors, PostNumerologyKarmicLessonsResponses, PostNumerologyLifePathData, PostNumerologyLifePathErrors, PostNumerologyLifePathResponses, PostNumerologyMaturityData, PostNumerologyMaturityErrors, PostNumerologyMaturityResponses, PostNumerologyPersonalDayData, PostNumerologyPersonalDayErrors, PostNumerologyPersonalDayResponses, PostNumerologyPersonalityData, PostNumerologyPersonalityErrors, PostNumerologyPersonalityResponses, PostNumerologyPersonalMonthData, PostNumerologyPersonalMonthErrors, PostNumerologyPersonalMonthResponses, PostNumerologyPersonalYearData, PostNumerologyPersonalYearErrors, PostNumerologyPersonalYearResponses, PostNumerologySoulUrgeData, PostNumerologySoulUrgeErrors, PostNumerologySoulUrgeResponses, PostTarotDailyData, PostTarotDailyErrors, PostTarotDailyResponses, PostTarotDrawData, PostTarotDrawErrors, PostTarotDrawResponses, PostTarotSpreadsCareerData, PostTarotSpreadsCareerErrors, PostTarotSpreadsCareerResponses, PostTarotSpreadsCelticCrossData, PostTarotSpreadsCelticCrossErrors, PostTarotSpreadsCelticCrossResponses, PostTarotSpreadsCustomData, PostTarotSpreadsCustomErrors, PostTarotSpreadsCustomResponses, PostTarotSpreadsLoveData, PostTarotSpreadsLoveErrors, PostTarotSpreadsLoveResponses, PostTarotSpreadsThreeCardData, PostTarotSpreadsThreeCardErrors, PostTarotSpreadsThreeCardResponses, PostTarotYesNoData, PostTarotYesNoErrors, PostTarotYesNoResponses, PostVedicAstrologyAshtakavargaData, PostVedicAstrologyAshtakavargaErrors, PostVedicAstrologyAshtakavargaResponses, PostVedicAstrologyAspectsData, PostVedicAstrologyAspectsErrors, PostVedicAstrologyAspectsLunarData, PostVedicAstrologyAspectsLunarErrors, PostVedicAstrologyAspectsLunarResponses, PostVedicAstrologyAspectsMonthlyData, PostVedicAstrologyAspectsMonthlyErrors, PostVedicAstrologyAspectsMonthlyResponses, PostVedicAstrologyAspectsResponses, PostVedicAstrologyBirthChartData, PostVedicAstrologyBirthChartErrors, PostVedicAstrologyBirthChartResponses, PostVedicAstrologyCompatibilityData, PostVedicAstrologyCompatibilityErrors, PostVedicAstrologyCompatibilityResponses, PostVedicAstrologyDashaCurrentData, PostVedicAstrologyDashaCurrentErrors, PostVedicAstrologyDashaCurrentResponses, PostVedicAstrologyDashaMajorData, PostVedicAstrologyDashaMajorErrors, PostVedicAstrologyDashaMajorResponses, PostVedicAstrologyDashaSubByMahadashaData, PostVedicAstrologyDashaSubByMahadashaErrors, PostVedicAstrologyDashaSubByMahadashaResponses, PostVedicAstrologyDivisionalChartData, PostVedicAstrologyDivisionalChartErrors, PostVedicAstrologyDivisionalChartResponses, PostVedicAstrologyDoshaKalsarpaData, PostVedicAstrologyDoshaKalsarpaErrors, PostVedicAstrologyDoshaKalsarpaResponses, PostVedicAstrologyDoshaManglikData, PostVedicAstrologyDoshaManglikErrors, PostVedicAstrologyDoshaManglikResponses, PostVedicAstrologyDoshaSadhesatiData, PostVedicAstrologyDoshaSadhesatiErrors, PostVedicAstrologyDoshaSadhesatiResponses, PostVedicAstrologyEclipticCrossingsData, PostVedicAstrologyEclipticCrossingsErrors, PostVedicAstrologyEclipticCrossingsResponses, PostVedicAstrologyKpChartData, PostVedicAstrologyKpChartErrors, PostVedicAstrologyKpChartResponses, PostVedicAstrologyKpCuspsData, PostVedicAstrologyKpCuspsErrors, PostVedicAstrologyKpCuspsResponses, PostVedicAstrologyKpPlanetsData, PostVedicAstrologyKpPlanetsErrors, PostVedicAstrologyKpPlanetsIntervalData, PostVedicAstrologyKpPlanetsIntervalErrors, PostVedicAstrologyKpPlanetsIntervalResponses, PostVedicAstrologyKpPlanetsResponses, PostVedicAstrologyKpRasiChangesData, PostVedicAstrologyKpRasiChangesErrors, PostVedicAstrologyKpRasiChangesResponses, PostVedicAstrologyKpRulingPlanetsData, PostVedicAstrologyKpRulingPlanetsErrors, PostVedicAstrologyKpRulingPlanetsIntervalData, PostVedicAstrologyKpRulingPlanetsIntervalErrors, PostVedicAstrologyKpRulingPlanetsIntervalResponses, PostVedicAstrologyKpRulingPlanetsResponses, PostVedicAstrologyKpSublordChangesData, PostVedicAstrologyKpSublordChangesErrors, PostVedicAstrologyKpSublordChangesResponses, PostVedicAstrologyNavamsaData, PostVedicAstrologyNavamsaErrors, PostVedicAstrologyNavamsaResponses, PostVedicAstrologyPanchangBasicData, PostVedicAstrologyPanchangBasicErrors, PostVedicAstrologyPanchangBasicResponses, PostVedicAstrologyPanchangChoghadiyaData, PostVedicAstrologyPanchangChoghadiyaErrors, PostVedicAstrologyPanchangChoghadiyaResponses, PostVedicAstrologyPanchangDetailedData, PostVedicAstrologyPanchangDetailedErrors, PostVedicAstrologyPanchangDetailedResponses, PostVedicAstrologyPanchangHoraData, PostVedicAstrologyPanchangHoraErrors, PostVedicAstrologyPanchangHoraResponses, PostVedicAstrologyParallelsData, PostVedicAstrologyParallelsErrors, PostVedicAstrologyParallelsMonthlyData, PostVedicAstrologyParallelsMonthlyErrors, PostVedicAstrologyParallelsMonthlyResponses, PostVedicAstrologyParallelsResponses, PostVedicAstrologyPlanetaryPositionsData, PostVedicAstrologyPlanetaryPositionsErrors, PostVedicAstrologyPlanetaryPositionsMonthlyData, PostVedicAstrologyPlanetaryPositionsMonthlyErrors, PostVedicAstrologyPlanetaryPositionsMonthlyResponses, PostVedicAstrologyPlanetaryPositionsResponses, PostVedicAstrologyShadbalaData, PostVedicAstrologyShadbalaErrors, PostVedicAstrologyShadbalaResponses, PostVedicAstrologyTransitData, PostVedicAstrologyTransitErrors, PostVedicAstrologyTransitMonthlyData, PostVedicAstrologyTransitMonthlyErrors, PostVedicAstrologyTransitMonthlyResponses, PostVedicAstrologyTransitResponses, PostVedicAstrologyUpagrahaData, PostVedicAstrologyUpagrahaErrors, PostVedicAstrologyUpagrahaResponses, PostVedicAstrologyYogaDetectData, PostVedicAstrologyYogaDetectErrors, PostVedicAstrologyYogaDetectResponses } from './types.gen';
6
6
 
7
- export type Options<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean> = Options2<TData, ThrowOnError> & {
7
+ export type Options<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean, TResponse = unknown> = Options2<TData, ThrowOnError, TResponse> & {
8
8
  /**
9
9
  * You can provide a client instance returned by `createClient()` instead of
10
10
  * individual options. This might be also useful if you want to implement a
@@ -1740,7 +1740,7 @@ export class Forecast extends HeyApiClient {
1740
1740
  /**
1741
1741
  * Cross-domain forecast timeline - Transits, ingresses, stations, dasha changes, critical days
1742
1742
  *
1743
- * Build one time-ordered forecast for a single birth subject by merging upcoming events across three domains: western transit-to-natal aspects, sign ingresses, and retrograde stations; vedic Vimshottari mahadasha and antardasha boundaries; and biorhythm critical days. The window is clamped to 90 days and events are capped and scored by significance. Built for what-is-coming dashboards, daily and weekly forecast feeds, and timing tools.
1743
+ * Build one time-ordered forecast for a single birth subject by merging upcoming events across three domains: western transit-to-natal aspects, sign ingresses, retrograde stations, eclipses, and new and full moons; biorhythm critical days; and vedic Vimshottari mahadasha, antardasha, and pratyantardasha boundaries. The window is clamped to 90 days and events are capped and scored by significance. Built for what-is-coming dashboards, daily and weekly forecast feeds, and timing tools.
1744
1744
  */
1745
1745
  public generateTimeline<ThrowOnError extends boolean = false>(options?: Options<PostForecastTimelineData, ThrowOnError>) {
1746
1746
  return (options?.client ?? this.client).post<PostForecastTimelineResponses, PostForecastTimelineErrors, ThrowOnError>({
@@ -1755,9 +1755,9 @@ export class Forecast extends HeyApiClient {
1755
1755
  }
1756
1756
 
1757
1757
  /**
1758
- * Western transit forecast - Transit aspects, sign ingresses, retrograde stations
1758
+ * Western astrology forecast - aspects, ingresses, stations, eclipses, moon phases
1759
1759
  *
1760
- * Forecast the western astrology events for a single birth chart over a window up to 90 days: every transit-to-natal major aspect refined to its exact instant, every transiting planet sign ingress, and every retrograde or direct station. Returns a time-ordered, significance-scored timeline. Built for astrology forecast feeds, transit alerts, and timing tools.
1760
+ * Forecast the western astrology events for a single birth chart over a window up to 90 days: every transit-to-natal major aspect refined to its exact instant, every transiting planet sign ingress, every retrograde or direct station, every solar and lunar eclipse, and every New and Full Moon. Returns a time-ordered, significance-scored timeline. Built for astrology forecast feeds, transit alerts, and timing tools.
1761
1761
  */
1762
1762
  public forecastTransits<ThrowOnError extends boolean = false>(options?: Options<PostForecastTransitsData, ThrowOnError>) {
1763
1763
  return (options?.client ?? this.client).post<PostForecastTransitsResponses, PostForecastTransitsErrors, ThrowOnError>({
@@ -2291,7 +2291,7 @@ export class AngelNumbers extends HeyApiClient {
2291
2291
  /**
2292
2292
  * List All Angel Numbers
2293
2293
  *
2294
- * Retrieve the complete database of angel numbers with summary information. Returns all 43 angel numbers covering root digits (0-9), master numbers (11, 22, 33), double digits (44-99), triple repeating (111-999), quad repeating (1111-9999), mirror patterns (1212), and sequential numbers (1234). Supports optional type filtering. Perfect for building angel number explorer apps, reference guides, and spiritual databases.
2294
+ * Retrieve the complete database of angel numbers with summary information. Returns 75+ angel numbers covering root digits (0-9), master numbers (11, 22, 33), double digits (44-99), triple repeating (111-999), quad repeating (1111-9999), the mirror families (X0X like 101-909, X1X, four-digit mirrors like 1212-2121), palindromes (1221, 1331), compound sequences (911, 1122), and sequential numbers (123, 1234). Supports optional type filtering. Perfect for building angel number explorer apps, reference guides, and spiritual databases.
2295
2295
  */
2296
2296
  public listAngelNumbers<ThrowOnError extends boolean = false>(options?: Options<GetAngelNumbersNumbersData, ThrowOnError>) {
2297
2297
  return (options?.client ?? this.client).get<GetAngelNumbersNumbersResponses, GetAngelNumbersNumbersErrors, ThrowOnError>({
@@ -2304,7 +2304,7 @@ export class AngelNumbers extends HeyApiClient {
2304
2304
  /**
2305
2305
  * Get Angel Number Meaning
2306
2306
  *
2307
- * Get the complete, authoritative meaning and interpretation for a specific angel number. Returns detailed spiritual, love, career, and twin flame interpretations along with keywords, affirmation, and actionable steps. Covers 43 angel numbers including 111, 222, 333, 444, 555, 666, 777, 888, 999, 1111, 1212, 1234, and more. Authoritative interpretations covering all major angel number patterns.
2307
+ * Get the complete, authoritative meaning and interpretation for a specific angel number. Returns detailed spiritual, love, career, money, and twin flame interpretations, plus a biblical perspective and a shadow reading, along with keywords, affirmation, and actionable steps. Covers 75+ angel numbers including 111, 222, 333, 444, 555, 666, 777, 888, 999, 1111, 1212, 1234, and more. Authoritative interpretations covering all major angel number patterns.
2308
2308
  */
2309
2309
  public getAngelNumber<ThrowOnError extends boolean = false>(options: Options<GetAngelNumbersNumbersByNumberData, ThrowOnError>) {
2310
2310
  return (options.client ?? this.client).get<GetAngelNumbersNumbersByNumberResponses, GetAngelNumbersNumbersByNumberErrors, ThrowOnError>({
@@ -2317,7 +2317,7 @@ export class AngelNumbers extends HeyApiClient {
2317
2317
  /**
2318
2318
  * Analyze Any Number Sequence
2319
2319
  *
2320
- * Smart angel number analysis that works for ANY number sequence, not just known angel numbers. Automatically classifies the pattern type (repeating, sequential, mirror, master, root), calculates the numerology digit root, checks the database for a known meaning, and provides the foundational digit root interpretation as a fallback. Perfect for synchronicity tracking apps where users enter arbitrary number sequences they encounter.
2320
+ * Smart angel number analysis that works for ANY number sequence, not just known angel numbers. Automatically classifies the pattern type (repeating, sequential, mirror, master, root, compound), calculates the numerology digit root, checks the database for a known meaning, and provides the foundational digit root interpretation (with full spiritual, love, career, money, and twin flame guidance) as a fallback. An optional context parameter adds a note tailored to where the number was seen. Perfect for synchronicity tracking apps where users enter arbitrary number sequences they encounter.
2321
2321
  */
2322
2322
  public analyzeNumberSequence<ThrowOnError extends boolean = false>(options: Options<GetAngelNumbersLookupData, ThrowOnError>) {
2323
2323
  return (options.client ?? this.client).get<GetAngelNumbersLookupResponses, GetAngelNumbersLookupErrors, ThrowOnError>({
@@ -2330,7 +2330,7 @@ export class AngelNumbers extends HeyApiClient {
2330
2330
  /**
2331
2331
  * Daily Angel Number
2332
2332
  *
2333
- * Get the angel number of the day with full meaning and interpretation. Returns a deterministic angel number based on the current date (or a provided seed date), ensuring all users see the same number for any given day. Includes complete spiritual, love, career, and twin flame interpretations. Perfect for daily guidance features, push notifications, content generation, and angel number widget integrations.
2333
+ * Get the angel number of the day with full meaning and interpretation. Returns a deterministic angel number based on the current date (or a provided seed date), ensuring all users see the same number for any given day. Includes complete spiritual, love, career, money, and twin flame interpretations plus a biblical perspective and a shadow reading. Perfect for daily guidance features, push notifications, content generation, and angel number widget integrations.
2334
2334
  */
2335
2335
  public getDailyAngelNumber<ThrowOnError extends boolean = false>(options?: Options<PostAngelNumbersDailyData, ThrowOnError>) {
2336
2336
  return (options?.client ?? this.client).post<PostAngelNumbersDailyResponses, PostAngelNumbersDailyErrors, ThrowOnError>({