@orq-ai/node 3.0.1 → 3.1.0-rc.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (300) hide show
  1. package/README.md +11 -9
  2. package/docs/sdks/deployments/README.md +195 -5
  3. package/docs/sdks/files/README.md +8 -4
  4. package/funcs/contactsCreate.d.ts.map +1 -1
  5. package/funcs/contactsCreate.js +1 -1
  6. package/funcs/contactsCreate.js.map +1 -1
  7. package/funcs/deploymentsGetConfig.d.ts.map +1 -1
  8. package/funcs/deploymentsGetConfig.js +1 -1
  9. package/funcs/deploymentsGetConfig.js.map +1 -1
  10. package/funcs/deploymentsGetLogs.d.ts +15 -0
  11. package/funcs/deploymentsGetLogs.d.ts.map +1 -0
  12. package/funcs/deploymentsGetLogs.js +113 -0
  13. package/funcs/deploymentsGetLogs.js.map +1 -0
  14. package/funcs/deploymentsInvalidate.d.ts +15 -0
  15. package/funcs/deploymentsInvalidate.d.ts.map +1 -0
  16. package/funcs/deploymentsInvalidate.js +113 -0
  17. package/funcs/deploymentsInvalidate.js.map +1 -0
  18. package/funcs/deploymentsInvoke.d.ts.map +1 -1
  19. package/funcs/deploymentsInvoke.js +1 -1
  20. package/funcs/deploymentsInvoke.js.map +1 -1
  21. package/funcs/{deploymentsAll.d.ts → deploymentsList.d.ts} +2 -2
  22. package/funcs/deploymentsList.d.ts.map +1 -0
  23. package/funcs/{deploymentsAll.js → deploymentsList.js} +6 -5
  24. package/funcs/deploymentsList.js.map +1 -0
  25. package/funcs/deploymentsMetricsCreate.d.ts.map +1 -1
  26. package/funcs/deploymentsMetricsCreate.js +1 -1
  27. package/funcs/deploymentsMetricsCreate.js.map +1 -1
  28. package/funcs/feedbackCreate.d.ts.map +1 -1
  29. package/funcs/feedbackCreate.js +1 -1
  30. package/funcs/feedbackCreate.js.map +1 -1
  31. package/funcs/filesBulkUpload.d.ts.map +1 -1
  32. package/funcs/filesBulkUpload.js +1 -1
  33. package/funcs/filesBulkUpload.js.map +1 -1
  34. package/funcs/filesDelete.d.ts.map +1 -1
  35. package/funcs/filesDelete.js +1 -1
  36. package/funcs/filesDelete.js.map +1 -1
  37. package/funcs/filesGet.d.ts.map +1 -1
  38. package/funcs/filesGet.js +1 -1
  39. package/funcs/filesGet.js.map +1 -1
  40. package/funcs/filesList.d.ts.map +1 -1
  41. package/funcs/filesList.js +1 -1
  42. package/funcs/filesList.js.map +1 -1
  43. package/funcs/filesUpdate.d.ts.map +1 -1
  44. package/funcs/filesUpdate.js +1 -1
  45. package/funcs/filesUpdate.js.map +1 -1
  46. package/funcs/filesUpload.d.ts.map +1 -1
  47. package/funcs/filesUpload.js +1 -1
  48. package/funcs/filesUpload.js.map +1 -1
  49. package/funcs/promptSnippetsFindOne.d.ts.map +1 -1
  50. package/funcs/promptSnippetsFindOne.js +1 -1
  51. package/funcs/promptSnippetsFindOne.js.map +1 -1
  52. package/funcs/promptTemplatesGetAll.d.ts.map +1 -1
  53. package/funcs/promptTemplatesGetAll.js +1 -1
  54. package/funcs/promptTemplatesGetAll.js.map +1 -1
  55. package/funcs/promptsCreate.d.ts.map +1 -1
  56. package/funcs/promptsCreate.js +1 -1
  57. package/funcs/promptsCreate.js.map +1 -1
  58. package/funcs/promptsCreateVersion.d.ts.map +1 -1
  59. package/funcs/promptsCreateVersion.js +1 -1
  60. package/funcs/promptsCreateVersion.js.map +1 -1
  61. package/funcs/promptsDelete.d.ts.map +1 -1
  62. package/funcs/promptsDelete.js +1 -1
  63. package/funcs/promptsDelete.js.map +1 -1
  64. package/funcs/promptsDuplicate.d.ts.map +1 -1
  65. package/funcs/promptsDuplicate.js +1 -1
  66. package/funcs/promptsDuplicate.js.map +1 -1
  67. package/funcs/promptsGetAll.d.ts.map +1 -1
  68. package/funcs/promptsGetAll.js +1 -1
  69. package/funcs/promptsGetAll.js.map +1 -1
  70. package/funcs/promptsGetOne.d.ts.map +1 -1
  71. package/funcs/promptsGetOne.js +1 -1
  72. package/funcs/promptsGetOne.js.map +1 -1
  73. package/funcs/promptsUpdate.d.ts.map +1 -1
  74. package/funcs/promptsUpdate.js +1 -1
  75. package/funcs/promptsUpdate.js.map +1 -1
  76. package/funcs/remoteconfigGetConfig.d.ts.map +1 -1
  77. package/funcs/remoteconfigGetConfig.js +1 -1
  78. package/funcs/remoteconfigGetConfig.js.map +1 -1
  79. package/jsr.json +28 -0
  80. package/lib/config.d.ts +3 -3
  81. package/lib/config.js +3 -3
  82. package/lib/config.js.map +1 -1
  83. package/lib/schemas.d.ts +1 -1
  84. package/lib/schemas.d.ts.map +1 -1
  85. package/lib/schemas.js +4 -1
  86. package/lib/schemas.js.map +1 -1
  87. package/models/operations/bulkfileupload.js +2 -2
  88. package/models/operations/createcontact.js +2 -2
  89. package/models/operations/createprompt.d.ts +12 -0
  90. package/models/operations/createprompt.d.ts.map +1 -1
  91. package/models/operations/createprompt.js +4 -0
  92. package/models/operations/createprompt.js.map +1 -1
  93. package/models/operations/createpromptversion.d.ts +12 -0
  94. package/models/operations/createpromptversion.d.ts.map +1 -1
  95. package/models/operations/createpromptversion.js +4 -0
  96. package/models/operations/createpromptversion.js.map +1 -1
  97. package/models/operations/deploymentgetlogs.d.ts +52406 -0
  98. package/models/operations/deploymentgetlogs.d.ts.map +1 -0
  99. package/models/operations/deploymentgetlogs.js +53803 -0
  100. package/models/operations/deploymentgetlogs.js.map +1 -0
  101. package/models/operations/deploymentinvoke.d.ts +6 -0
  102. package/models/operations/deploymentinvoke.d.ts.map +1 -1
  103. package/models/operations/deploymentinvoke.js +2 -0
  104. package/models/operations/deploymentinvoke.js.map +1 -1
  105. package/models/operations/deployments.d.ts +15 -8
  106. package/models/operations/deployments.d.ts.map +1 -1
  107. package/models/operations/deployments.js +16 -10
  108. package/models/operations/deployments.js.map +1 -1
  109. package/models/operations/fileget.js +2 -2
  110. package/models/operations/filelist.d.ts +1 -5
  111. package/models/operations/filelist.d.ts.map +1 -1
  112. package/models/operations/filelist.js +4 -12
  113. package/models/operations/filelist.js.map +1 -1
  114. package/models/operations/fileupdate.js +2 -2
  115. package/models/operations/fileupload.js +2 -2
  116. package/models/operations/findonepromptsnippet.d.ts +36 -0
  117. package/models/operations/findonepromptsnippet.d.ts.map +1 -1
  118. package/models/operations/findonepromptsnippet.js +18 -6
  119. package/models/operations/findonepromptsnippet.js.map +1 -1
  120. package/models/operations/getallprompts.d.ts +944 -912
  121. package/models/operations/getallprompts.d.ts.map +1 -1
  122. package/models/operations/getallprompts.js +1372 -1362
  123. package/models/operations/getallprompts.js.map +1 -1
  124. package/models/operations/getallprompttemplates.d.ts +151 -115
  125. package/models/operations/getallprompttemplates.d.ts.map +1 -1
  126. package/models/operations/getallprompttemplates.js +182 -173
  127. package/models/operations/getallprompttemplates.js.map +1 -1
  128. package/models/operations/index.d.ts +2 -0
  129. package/models/operations/index.d.ts.map +1 -1
  130. package/models/operations/index.js +2 -0
  131. package/models/operations/index.js.map +1 -1
  132. package/models/operations/invaliddeployment.d.ts +29 -0
  133. package/models/operations/invaliddeployment.d.ts.map +1 -0
  134. package/models/operations/invaliddeployment.js +78 -0
  135. package/models/operations/invaliddeployment.js.map +1 -0
  136. package/models/operations/updateprompt.d.ts +42 -0
  137. package/models/operations/updateprompt.d.ts.map +1 -1
  138. package/models/operations/updateprompt.js +20 -6
  139. package/models/operations/updateprompt.js.map +1 -1
  140. package/package.json +3 -2
  141. package/sdk/deployments.d.ts +15 -1
  142. package/sdk/deployments.d.ts.map +1 -1
  143. package/sdk/deployments.js +23 -3
  144. package/sdk/deployments.js.map +1 -1
  145. package/src/funcs/contactsCreate.ts +2 -1
  146. package/src/funcs/deploymentsGetConfig.ts +2 -1
  147. package/{packages/orq-rc/src/funcs/deploymentsMetricsCreate.ts → src/funcs/deploymentsGetLogs.ts} +17 -16
  148. package/{packages/orq-rc/src/funcs/promptsDelete.ts → src/funcs/deploymentsInvalidate.ts} +18 -11
  149. package/src/funcs/deploymentsInvoke.ts +2 -1
  150. package/src/funcs/{deploymentsAll.ts → deploymentsList.ts} +5 -3
  151. package/src/funcs/deploymentsMetricsCreate.ts +2 -1
  152. package/src/funcs/feedbackCreate.ts +2 -1
  153. package/src/funcs/filesBulkUpload.ts +2 -1
  154. package/src/funcs/filesDelete.ts +2 -1
  155. package/src/funcs/filesGet.ts +2 -1
  156. package/src/funcs/filesList.ts +2 -1
  157. package/src/funcs/filesUpdate.ts +2 -1
  158. package/src/funcs/filesUpload.ts +2 -1
  159. package/src/funcs/promptSnippetsFindOne.ts +2 -1
  160. package/src/funcs/promptTemplatesGetAll.ts +2 -1
  161. package/src/funcs/promptsCreate.ts +2 -1
  162. package/src/funcs/promptsCreateVersion.ts +2 -1
  163. package/src/funcs/promptsDelete.ts +2 -1
  164. package/src/funcs/promptsDuplicate.ts +2 -1
  165. package/src/funcs/promptsGetAll.ts +2 -1
  166. package/src/funcs/promptsGetOne.ts +2 -1
  167. package/src/funcs/promptsUpdate.ts +2 -1
  168. package/src/funcs/remoteconfigGetConfig.ts +2 -1
  169. package/src/lib/config.ts +3 -3
  170. package/src/lib/schemas.ts +5 -0
  171. package/src/models/operations/bulkfileupload.ts +2 -2
  172. package/src/models/operations/createcontact.ts +2 -2
  173. package/src/models/operations/createprompt.ts +4 -0
  174. package/src/models/operations/createpromptversion.ts +4 -0
  175. package/src/models/operations/deploymentgetlogs.ts +119430 -0
  176. package/src/models/operations/deploymentinvoke.ts +2 -0
  177. package/src/models/operations/deployments.ts +25 -18
  178. package/src/models/operations/fileget.ts +2 -2
  179. package/src/models/operations/filelist.ts +5 -17
  180. package/src/models/operations/fileupdate.ts +2 -2
  181. package/src/models/operations/fileupload.ts +2 -2
  182. package/src/models/operations/findonepromptsnippet.ts +18 -6
  183. package/src/models/operations/getallprompts.ts +2464 -2159
  184. package/src/models/operations/getallprompttemplates.ts +321 -232
  185. package/src/models/operations/index.ts +2 -0
  186. package/src/models/operations/invaliddeployment.ts +75 -0
  187. package/src/models/operations/updateprompt.ts +20 -6
  188. package/src/sdk/deployments.ts +39 -3
  189. package/tsconfig.json +41 -0
  190. package/funcs/deploymentsAll.d.ts.map +0 -1
  191. package/funcs/deploymentsAll.js.map +0 -1
  192. package/packages/orq-rc/FUNCTIONS.md +0 -106
  193. package/packages/orq-rc/README.md +0 -564
  194. package/packages/orq-rc/RUNTIMES.md +0 -22
  195. package/packages/orq-rc/docs/sdks/contacts/README.md +0 -84
  196. package/packages/orq-rc/docs/sdks/deployments/README.md +0 -239
  197. package/packages/orq-rc/docs/sdks/feedback/README.md +0 -92
  198. package/packages/orq-rc/docs/sdks/files/README.md +0 -473
  199. package/packages/orq-rc/docs/sdks/metrics/README.md +0 -86
  200. package/packages/orq-rc/docs/sdks/orq/README.md +0 -10
  201. package/packages/orq-rc/docs/sdks/prompt/README.md +0 -6
  202. package/packages/orq-rc/docs/sdks/prompts/README.md +0 -533
  203. package/packages/orq-rc/docs/sdks/remoteconfig/README.md +0 -80
  204. package/packages/orq-rc/docs/sdks/snippets/README.md +0 -84
  205. package/packages/orq-rc/docs/sdks/templates/README.md +0 -80
  206. package/packages/orq-rc/src/core.ts +0 -13
  207. package/packages/orq-rc/src/funcs/contactsCreate.ts +0 -124
  208. package/packages/orq-rc/src/funcs/deploymentsAll.ts +0 -138
  209. package/packages/orq-rc/src/funcs/deploymentsGetConfig.ts +0 -132
  210. package/packages/orq-rc/src/funcs/deploymentsInvoke.ts +0 -135
  211. package/packages/orq-rc/src/funcs/feedbackCreate.ts +0 -124
  212. package/packages/orq-rc/src/funcs/filesBulkUpload.ts +0 -126
  213. package/packages/orq-rc/src/funcs/filesDelete.ts +0 -128
  214. package/packages/orq-rc/src/funcs/filesGet.ts +0 -127
  215. package/packages/orq-rc/src/funcs/filesList.ts +0 -129
  216. package/packages/orq-rc/src/funcs/filesUpdate.ts +0 -128
  217. package/packages/orq-rc/src/funcs/filesUpload.ts +0 -145
  218. package/packages/orq-rc/src/funcs/promptSnippetsFindOne.ts +0 -128
  219. package/packages/orq-rc/src/funcs/promptTemplatesGetAll.ts +0 -130
  220. package/packages/orq-rc/src/funcs/promptsCreate.ts +0 -124
  221. package/packages/orq-rc/src/funcs/promptsCreateVersion.ts +0 -129
  222. package/packages/orq-rc/src/funcs/promptsDuplicate.ts +0 -128
  223. package/packages/orq-rc/src/funcs/promptsGetAll.ts +0 -126
  224. package/packages/orq-rc/src/funcs/promptsGetOne.ts +0 -128
  225. package/packages/orq-rc/src/funcs/promptsUpdate.ts +0 -136
  226. package/packages/orq-rc/src/funcs/remoteconfigGetConfig.ts +0 -125
  227. package/packages/orq-rc/src/hooks/hooks.ts +0 -132
  228. package/packages/orq-rc/src/hooks/index.ts +0 -6
  229. package/packages/orq-rc/src/hooks/registration.ts +0 -14
  230. package/packages/orq-rc/src/hooks/types.ts +0 -109
  231. package/packages/orq-rc/src/index.ts +0 -7
  232. package/packages/orq-rc/src/lib/base64.ts +0 -37
  233. package/packages/orq-rc/src/lib/config.ts +0 -60
  234. package/packages/orq-rc/src/lib/dlv.ts +0 -53
  235. package/packages/orq-rc/src/lib/encodings.ts +0 -449
  236. package/packages/orq-rc/src/lib/env.ts +0 -41
  237. package/packages/orq-rc/src/lib/event-streams.ts +0 -264
  238. package/packages/orq-rc/src/lib/files.ts +0 -40
  239. package/packages/orq-rc/src/lib/http.ts +0 -323
  240. package/packages/orq-rc/src/lib/is-plain-object.ts +0 -43
  241. package/packages/orq-rc/src/lib/logger.ts +0 -9
  242. package/packages/orq-rc/src/lib/matchers.ts +0 -325
  243. package/packages/orq-rc/src/lib/primitives.ts +0 -122
  244. package/packages/orq-rc/src/lib/retries.ts +0 -219
  245. package/packages/orq-rc/src/lib/schemas.ts +0 -86
  246. package/packages/orq-rc/src/lib/sdks.ts +0 -397
  247. package/packages/orq-rc/src/lib/security.ts +0 -254
  248. package/packages/orq-rc/src/lib/url.ts +0 -33
  249. package/packages/orq-rc/src/models/components/deployments.ts +0 -1673
  250. package/packages/orq-rc/src/models/components/index.ts +0 -6
  251. package/packages/orq-rc/src/models/components/security.ts +0 -71
  252. package/packages/orq-rc/src/models/errors/apierror.ts +0 -27
  253. package/packages/orq-rc/src/models/errors/honoapierror.ts +0 -82
  254. package/packages/orq-rc/src/models/errors/httpclienterrors.ts +0 -62
  255. package/packages/orq-rc/src/models/errors/index.ts +0 -9
  256. package/packages/orq-rc/src/models/errors/sdkvalidationerror.ts +0 -97
  257. package/packages/orq-rc/src/models/errors/updateprompt.ts +0 -71
  258. package/packages/orq-rc/src/models/operations/bulkfileupload.ts +0 -315
  259. package/packages/orq-rc/src/models/operations/createcontact.ts +0 -256
  260. package/packages/orq-rc/src/models/operations/createfeedback.ts +0 -286
  261. package/packages/orq-rc/src/models/operations/createprompt.ts +0 -3461
  262. package/packages/orq-rc/src/models/operations/createpromptversion.ts +0 -3703
  263. package/packages/orq-rc/src/models/operations/deleteprompt.ts +0 -69
  264. package/packages/orq-rc/src/models/operations/deploymentcreatemetric.ts +0 -1790
  265. package/packages/orq-rc/src/models/operations/deploymentgetconfig.ts +0 -3483
  266. package/packages/orq-rc/src/models/operations/deploymentinvoke.ts +0 -2385
  267. package/packages/orq-rc/src/models/operations/deployments.ts +0 -2098
  268. package/packages/orq-rc/src/models/operations/duplicateprompt.ts +0 -69
  269. package/packages/orq-rc/src/models/operations/filedelete.ts +0 -78
  270. package/packages/orq-rc/src/models/operations/fileget.ts +0 -222
  271. package/packages/orq-rc/src/models/operations/filelist.ts +0 -333
  272. package/packages/orq-rc/src/models/operations/fileupdate.ts +0 -298
  273. package/packages/orq-rc/src/models/operations/fileupload.ts +0 -322
  274. package/packages/orq-rc/src/models/operations/findonepromptsnippet.ts +0 -13629
  275. package/packages/orq-rc/src/models/operations/getallprompts.ts +0 -18640
  276. package/packages/orq-rc/src/models/operations/getallprompttemplates.ts +0 -13690
  277. package/packages/orq-rc/src/models/operations/getoneprompt.ts +0 -69
  278. package/packages/orq-rc/src/models/operations/index.ts +0 -26
  279. package/packages/orq-rc/src/models/operations/remoteconfigsgetconfig.ts +0 -190
  280. package/packages/orq-rc/src/models/operations/updateprompt.ts +0 -14407
  281. package/packages/orq-rc/src/sdk/contacts.ts +0 -27
  282. package/packages/orq-rc/src/sdk/deployments.ts +0 -75
  283. package/packages/orq-rc/src/sdk/feedback.ts +0 -27
  284. package/packages/orq-rc/src/sdk/files.ts +0 -105
  285. package/packages/orq-rc/src/sdk/index.ts +0 -5
  286. package/packages/orq-rc/src/sdk/metrics.ts +0 -27
  287. package/packages/orq-rc/src/sdk/prompt.ts +0 -19
  288. package/packages/orq-rc/src/sdk/prompts.ts +0 -114
  289. package/packages/orq-rc/src/sdk/remoteconfig.ts +0 -24
  290. package/packages/orq-rc/src/sdk/sdk.ts +0 -49
  291. package/packages/orq-rc/src/sdk/snippets.ts +0 -24
  292. package/packages/orq-rc/src/sdk/templates.ts +0 -24
  293. package/packages/orq-rc/src/types/blobs.ts +0 -31
  294. package/packages/orq-rc/src/types/constdatetime.ts +0 -15
  295. package/packages/orq-rc/src/types/enums.ts +0 -16
  296. package/packages/orq-rc/src/types/fp.ts +0 -50
  297. package/packages/orq-rc/src/types/index.ts +0 -11
  298. package/packages/orq-rc/src/types/operations.ts +0 -105
  299. package/packages/orq-rc/src/types/rfcdate.ts +0 -54
  300. package/packages/orq-rc/src/types/streams.ts +0 -21
@@ -1,86 +0,0 @@
1
- /*
2
- * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
- */
4
-
5
- import {
6
- output,
7
- ZodEffects,
8
- ZodError,
9
- ZodObject,
10
- ZodRawShape,
11
- ZodTypeAny,
12
- } from "zod";
13
- import { SDKValidationError } from "../models/errors/sdkvalidationerror.js";
14
- import { ERR, OK, Result } from "../types/fp.js";
15
-
16
- /**
17
- * Utility function that executes some code which may throw a ZodError. It
18
- * intercepts this error and converts it to an SDKValidationError so as to not
19
- * leak Zod implementation details to user code.
20
- */
21
- export function parse<Inp, Out>(
22
- rawValue: Inp,
23
- fn: (value: Inp) => Out,
24
- errorMessage: string,
25
- ): Out {
26
- try {
27
- return fn(rawValue);
28
- } catch (err) {
29
- if (err instanceof ZodError) {
30
- throw new SDKValidationError(errorMessage, err, rawValue);
31
- }
32
- throw err;
33
- }
34
- }
35
-
36
- /**
37
- * Utility function that executes some code which may result in a ZodError. It
38
- * intercepts this error and converts it to an SDKValidationError so as to not
39
- * leak Zod implementation details to user code.
40
- */
41
- export function safeParse<Inp, Out>(
42
- rawValue: Inp,
43
- fn: (value: Inp) => Out,
44
- errorMessage: string,
45
- ): Result<Out, SDKValidationError> {
46
- try {
47
- return OK(fn(rawValue));
48
- } catch (err) {
49
- return ERR(new SDKValidationError(errorMessage, err, rawValue));
50
- }
51
- }
52
-
53
- export function collectExtraKeys<
54
- Shape extends ZodRawShape,
55
- Catchall extends ZodTypeAny,
56
- K extends string,
57
- >(
58
- obj: ZodObject<Shape, "strip", Catchall>,
59
- extrasKey: K,
60
- ): ZodEffects<
61
- typeof obj,
62
- & output<ZodObject<Shape, "strict">>
63
- & {
64
- [k in K]: Record<string, output<Catchall>>;
65
- }
66
- > {
67
- return obj.transform((val) => {
68
- const extras: Record<string, output<Catchall>> = {};
69
- const { shape } = obj;
70
- for (const [key] of Object.entries(val)) {
71
- if (key in shape) {
72
- continue;
73
- }
74
-
75
- const v = val[key];
76
- if (typeof v === "undefined") {
77
- continue;
78
- }
79
-
80
- extras[key] = v;
81
- delete val[key];
82
- }
83
-
84
- return { ...val, [extrasKey]: extras };
85
- });
86
- }
@@ -1,397 +0,0 @@
1
- /*
2
- * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
- */
4
-
5
- import { SDKHooks } from "../hooks/hooks.js";
6
- import { HookContext } from "../hooks/types.js";
7
- import {
8
- ConnectionError,
9
- InvalidRequestError,
10
- RequestAbortedError,
11
- RequestTimeoutError,
12
- UnexpectedClientError,
13
- } from "../models/errors/httpclienterrors.js";
14
- import { ERR, OK, Result } from "../types/fp.js";
15
- import { stringToBase64 } from "./base64.js";
16
- import { SDK_METADATA, SDKOptions, serverURLFromOptions } from "./config.js";
17
- import { encodeForm } from "./encodings.js";
18
- import { env } from "./env.js";
19
- import {
20
- HTTPClient,
21
- isAbortError,
22
- isConnectionError,
23
- isTimeoutError,
24
- matchContentType,
25
- matchStatusCode,
26
- } from "./http.js";
27
- import { Logger } from "./logger.js";
28
- import { retry, RetryConfig } from "./retries.js";
29
- import { SecurityState } from "./security.js";
30
-
31
- export type RequestOptions = {
32
- /**
33
- * Sets a timeout, in milliseconds, on HTTP requests made by an SDK method. If
34
- * `fetchOptions.signal` is set then it will take precedence over this option.
35
- */
36
- timeoutMs?: number;
37
- /**
38
- * Set or override a retry policy on HTTP calls.
39
- */
40
- retries?: RetryConfig;
41
- /**
42
- * Specifies the status codes which should be retried using the given retry policy.
43
- */
44
- retryCodes?: string[];
45
- /**
46
- * Overrides the base server URL that will be used by an operation.
47
- */
48
- serverURL?: string | URL;
49
- /**
50
- * Sets various request options on the `fetch` call made by an SDK method.
51
- *
52
- * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options|Request}
53
- */
54
- fetchOptions?: Omit<RequestInit, "method" | "body">;
55
- };
56
-
57
- type RequestConfig = {
58
- method: string;
59
- path: string;
60
- baseURL?: string | URL | undefined;
61
- query?: string;
62
- body?: RequestInit["body"];
63
- headers?: HeadersInit;
64
- security?: SecurityState | null;
65
- uaHeader?: string;
66
- timeoutMs?: number;
67
- };
68
-
69
- const gt: unknown = typeof globalThis === "undefined" ? null : globalThis;
70
- const webWorkerLike = typeof gt === "object"
71
- && gt != null
72
- && "importScripts" in gt
73
- && typeof gt["importScripts"] === "function";
74
- const isBrowserLike = webWorkerLike
75
- || (typeof navigator !== "undefined" && "serviceWorker" in navigator)
76
- || (typeof window === "object" && typeof window.document !== "undefined");
77
-
78
- export class ClientSDK {
79
- readonly #httpClient: HTTPClient;
80
- readonly #hooks: SDKHooks;
81
- readonly #logger?: Logger | undefined;
82
- protected readonly _baseURL: URL | null;
83
- public readonly _options: SDKOptions & { hooks?: SDKHooks };
84
-
85
- constructor(options: SDKOptions = {}) {
86
- const opt = options as unknown;
87
- if (
88
- typeof opt === "object"
89
- && opt != null
90
- && "hooks" in opt
91
- && opt.hooks instanceof SDKHooks
92
- ) {
93
- this.#hooks = opt.hooks;
94
- } else {
95
- this.#hooks = new SDKHooks();
96
- }
97
- this._options = { ...options, hooks: this.#hooks };
98
-
99
- const url = serverURLFromOptions(options);
100
- if (url) {
101
- url.pathname = url.pathname.replace(/\/+$/, "") + "/";
102
- }
103
- const { baseURL, client } = this.#hooks.sdkInit({
104
- baseURL: url,
105
- client: options.httpClient || new HTTPClient(),
106
- });
107
- this._baseURL = baseURL;
108
- this.#httpClient = client;
109
- this.#logger = options.debugLogger;
110
- if (!this.#logger && env().ORQ_DEBUG) {
111
- this.#logger = console;
112
- }
113
- }
114
-
115
- public _createRequest(
116
- context: HookContext,
117
- conf: RequestConfig,
118
- options?: RequestOptions,
119
- ): Result<Request, InvalidRequestError | UnexpectedClientError> {
120
- const { method, path, query, headers: opHeaders, security } = conf;
121
-
122
- const base = conf.baseURL ?? this._baseURL;
123
- if (!base) {
124
- return ERR(new InvalidRequestError("No base URL provided for operation"));
125
- }
126
- const reqURL = new URL(base);
127
- const inputURL = new URL(path, reqURL);
128
-
129
- if (path) {
130
- reqURL.pathname += reqURL.pathname.endsWith("/") ? "" : "/";
131
- reqURL.pathname += inputURL.pathname.replace(/^\/+/, "");
132
- }
133
-
134
- let finalQuery = query || "";
135
-
136
- const secQuery: string[] = [];
137
- for (const [k, v] of Object.entries(security?.queryParams || {})) {
138
- secQuery.push(encodeForm(k, v, { charEncoding: "percent" }));
139
- }
140
- if (secQuery.length) {
141
- finalQuery += `&${secQuery.join("&")}`;
142
- }
143
-
144
- if (finalQuery) {
145
- const q = finalQuery.startsWith("&") ? finalQuery.slice(1) : finalQuery;
146
- reqURL.search = `?${q}`;
147
- }
148
-
149
- const headers = new Headers(opHeaders);
150
-
151
- const username = security?.basic.username;
152
- const password = security?.basic.password;
153
- if (username != null || password != null) {
154
- const encoded = stringToBase64(
155
- [username || "", password || ""].join(":"),
156
- );
157
- headers.set("Authorization", `Basic ${encoded}`);
158
- }
159
-
160
- const securityHeaders = new Headers(security?.headers || {});
161
- for (const [k, v] of securityHeaders) {
162
- headers.set(k, v);
163
- }
164
-
165
- let cookie = headers.get("cookie") || "";
166
- for (const [k, v] of Object.entries(security?.cookies || {})) {
167
- cookie += `; ${k}=${v}`;
168
- }
169
- cookie = cookie.startsWith("; ") ? cookie.slice(2) : cookie;
170
- headers.set("cookie", cookie);
171
-
172
- const userHeaders = new Headers(options?.fetchOptions?.headers);
173
- for (const [k, v] of userHeaders) {
174
- headers.set(k, v);
175
- }
176
-
177
- // Only set user agent header in non-browser-like environments since CORS
178
- // policy disallows setting it in browsers e.g. Chrome throws an error.
179
- if (!isBrowserLike) {
180
- headers.set(conf.uaHeader ?? "user-agent", SDK_METADATA.userAgent);
181
- }
182
-
183
- let fetchOptions = options?.fetchOptions;
184
- if (!fetchOptions?.signal && conf.timeoutMs && conf.timeoutMs > 0) {
185
- const timeoutSignal = AbortSignal.timeout(conf.timeoutMs);
186
- if (!fetchOptions) {
187
- fetchOptions = { signal: timeoutSignal };
188
- } else {
189
- fetchOptions.signal = timeoutSignal;
190
- }
191
- }
192
-
193
- if (conf.body instanceof ReadableStream) {
194
- if (!fetchOptions) {
195
- fetchOptions = {
196
- // @ts-expect-error see https://github.com/node-fetch/node-fetch/issues/1769
197
- duplex: "half",
198
- };
199
- } else {
200
- // @ts-expect-error see https://github.com/node-fetch/node-fetch/issues/1769
201
- fetchOptions.duplex = "half";
202
- }
203
- }
204
-
205
- let input;
206
- try {
207
- input = this.#hooks.beforeCreateRequest(context, {
208
- url: reqURL,
209
- options: {
210
- ...fetchOptions,
211
- body: conf.body ?? null,
212
- headers,
213
- method,
214
- },
215
- });
216
- } catch (err: unknown) {
217
- return ERR(
218
- new UnexpectedClientError("Create request hook failed to execute", {
219
- cause: err,
220
- }),
221
- );
222
- }
223
-
224
- return OK(new Request(input.url, input.options));
225
- }
226
-
227
- public async _do(
228
- request: Request,
229
- options: {
230
- context: HookContext;
231
- errorCodes: number | string | (number | string)[];
232
- retryConfig: RetryConfig;
233
- retryCodes: string[];
234
- },
235
- ): Promise<
236
- Result<
237
- Response,
238
- | RequestAbortedError
239
- | RequestTimeoutError
240
- | ConnectionError
241
- | UnexpectedClientError
242
- >
243
- > {
244
- const { context, errorCodes } = options;
245
-
246
- return retry(
247
- async () => {
248
- const req = await this.#hooks.beforeRequest(context, request.clone());
249
- await logRequest(this.#logger, req).catch((e) =>
250
- this.#logger?.log("Failed to log request:", e)
251
- );
252
-
253
- let response = await this.#httpClient.request(req);
254
-
255
- try {
256
- if (matchStatusCode(response, errorCodes)) {
257
- const result = await this.#hooks.afterError(
258
- context,
259
- response,
260
- null,
261
- );
262
- if (result.error) {
263
- throw result.error;
264
- }
265
- response = result.response || response;
266
- } else {
267
- response = await this.#hooks.afterSuccess(context, response);
268
- }
269
- } finally {
270
- await logResponse(this.#logger, response, req)
271
- .catch(e => this.#logger?.log("Failed to log response:", e));
272
- }
273
-
274
- return response;
275
- },
276
- { config: options.retryConfig, statusCodes: options.retryCodes },
277
- ).then(
278
- (r) => OK(r),
279
- (err) => {
280
- switch (true) {
281
- case isAbortError(err):
282
- return ERR(
283
- new RequestAbortedError("Request aborted by client", {
284
- cause: err,
285
- }),
286
- );
287
- case isTimeoutError(err):
288
- return ERR(
289
- new RequestTimeoutError("Request timed out", { cause: err }),
290
- );
291
- case isConnectionError(err):
292
- return ERR(
293
- new ConnectionError("Unable to make request", { cause: err }),
294
- );
295
- default:
296
- return ERR(
297
- new UnexpectedClientError("Unexpected HTTP client error", {
298
- cause: err,
299
- }),
300
- );
301
- }
302
- },
303
- );
304
- }
305
- }
306
-
307
- const jsonLikeContentTypeRE = /^application\/(?:.{0,100}\+)?json/;
308
- async function logRequest(logger: Logger | undefined, req: Request) {
309
- if (!logger) {
310
- return;
311
- }
312
-
313
- const contentType = req.headers.get("content-type");
314
- const ct = contentType?.split(";")[0] || "";
315
-
316
- logger.group(`> Request: ${req.method} ${req.url}`);
317
-
318
- logger.group("Headers:");
319
- for (const [k, v] of req.headers.entries()) {
320
- logger.log(`${k}: ${v}`);
321
- }
322
- logger.groupEnd();
323
-
324
- logger.group("Body:");
325
- switch (true) {
326
- case jsonLikeContentTypeRE.test(ct):
327
- logger.log(await req.clone().json());
328
- break;
329
- case ct.startsWith("text/"):
330
- logger.log(await req.clone().text());
331
- break;
332
- case ct === "multipart/form-data": {
333
- const body = await req.clone().formData();
334
- for (const [k, v] of body) {
335
- const vlabel = v instanceof Blob ? "<Blob>" : v;
336
- logger.log(`${k}: ${vlabel}`);
337
- }
338
- break;
339
- }
340
- default:
341
- logger.log(`<${contentType}>`);
342
- break;
343
- }
344
- logger.groupEnd();
345
-
346
- logger.groupEnd();
347
- }
348
-
349
- async function logResponse(
350
- logger: Logger | undefined,
351
- res: Response,
352
- req: Request,
353
- ) {
354
- if (!logger) {
355
- return;
356
- }
357
-
358
- const contentType = res.headers.get("content-type");
359
- const ct = contentType?.split(";")[0] || "";
360
-
361
- logger.group(`< Response: ${req.method} ${req.url}`);
362
- logger.log("Status Code:", res.status, res.statusText);
363
-
364
- logger.group("Headers:");
365
- for (const [k, v] of res.headers.entries()) {
366
- logger.log(`${k}: ${v}`);
367
- }
368
- logger.groupEnd();
369
-
370
- logger.group("Body:");
371
- switch (true) {
372
- case matchContentType(res, "application/json")
373
- || jsonLikeContentTypeRE.test(ct):
374
- logger.log(await res.clone().json());
375
- break;
376
- case matchContentType(res, "text/event-stream"):
377
- logger.log(`<${contentType}>`);
378
- break;
379
- case matchContentType(res, "text/*"):
380
- logger.log(await res.clone().text());
381
- break;
382
- case matchContentType(res, "multipart/form-data"): {
383
- const body = await res.clone().formData();
384
- for (const [k, v] of body) {
385
- const vlabel = v instanceof Blob ? "<Blob>" : v;
386
- logger.log(`${k}: ${vlabel}`);
387
- }
388
- break;
389
- }
390
- default:
391
- logger.log(`<${contentType}>`);
392
- break;
393
- }
394
- logger.groupEnd();
395
-
396
- logger.groupEnd();
397
- }