@dugjason/front-node 0.1.0-beta.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (303) hide show
  1. package/{LICENSE.md → LICENSE} +2 -2
  2. package/README.md +41 -258
  3. package/dist/index.cjs +2 -0
  4. package/dist/index.cjs.map +1 -0
  5. package/dist/index.d.cts +11907 -0
  6. package/dist/index.d.cts.map +1 -0
  7. package/dist/index.d.mts +11907 -0
  8. package/dist/index.d.mts.map +1 -0
  9. package/dist/index.mjs +2 -0
  10. package/dist/index.mjs.map +1 -0
  11. package/package.json +67 -38
  12. package/dist/client.d.ts +0 -53
  13. package/dist/client.d.ts.map +0 -1
  14. package/dist/client.js +0 -230
  15. package/dist/client.js.map +0 -1
  16. package/dist/core/client.d.ts +0 -36
  17. package/dist/core/client.d.ts.map +0 -1
  18. package/dist/core/client.js +0 -89
  19. package/dist/core/client.js.map +0 -1
  20. package/dist/core/errors.d.ts +0 -55
  21. package/dist/core/errors.d.ts.map +0 -1
  22. package/dist/core/errors.js +0 -124
  23. package/dist/core/errors.js.map +0 -1
  24. package/dist/core/paginator.d.ts +0 -88
  25. package/dist/core/paginator.d.ts.map +0 -1
  26. package/dist/core/paginator.js +0 -129
  27. package/dist/core/paginator.js.map +0 -1
  28. package/dist/core/resource.d.ts +0 -143
  29. package/dist/core/resource.d.ts.map +0 -1
  30. package/dist/core/resource.js +0 -132
  31. package/dist/core/resource.js.map +0 -1
  32. package/dist/endpoints/accounts.d.ts +0 -34
  33. package/dist/endpoints/accounts.d.ts.map +0 -1
  34. package/dist/endpoints/accounts.js +0 -85
  35. package/dist/endpoints/accounts.js.map +0 -1
  36. package/dist/endpoints/analytics.d.ts +0 -32
  37. package/dist/endpoints/analytics.d.ts.map +0 -1
  38. package/dist/endpoints/analytics.js +0 -48
  39. package/dist/endpoints/analytics.js.map +0 -1
  40. package/dist/endpoints/applications.d.ts +0 -15
  41. package/dist/endpoints/applications.d.ts.map +0 -1
  42. package/dist/endpoints/applications.js +0 -17
  43. package/dist/endpoints/applications.js.map +0 -1
  44. package/dist/endpoints/attachments.d.ts +0 -8
  45. package/dist/endpoints/attachments.d.ts.map +0 -1
  46. package/dist/endpoints/attachments.js +0 -10
  47. package/dist/endpoints/attachments.js.map +0 -1
  48. package/dist/endpoints/channels.d.ts +0 -41
  49. package/dist/endpoints/channels.d.ts.map +0 -1
  50. package/dist/endpoints/channels.js +0 -64
  51. package/dist/endpoints/channels.js.map +0 -1
  52. package/dist/endpoints/comments.d.ts +0 -30
  53. package/dist/endpoints/comments.d.ts.map +0 -1
  54. package/dist/endpoints/comments.js +0 -45
  55. package/dist/endpoints/comments.js.map +0 -1
  56. package/dist/endpoints/contacts.d.ts +0 -46
  57. package/dist/endpoints/contacts.d.ts.map +0 -1
  58. package/dist/endpoints/contacts.js +0 -99
  59. package/dist/endpoints/contacts.js.map +0 -1
  60. package/dist/endpoints/conversations.d.ts +0 -77
  61. package/dist/endpoints/conversations.d.ts.map +0 -1
  62. package/dist/endpoints/conversations.js +0 -221
  63. package/dist/endpoints/conversations.js.map +0 -1
  64. package/dist/endpoints/drafts.d.ts +0 -12
  65. package/dist/endpoints/drafts.d.ts.map +0 -1
  66. package/dist/endpoints/drafts.js +0 -26
  67. package/dist/endpoints/drafts.js.map +0 -1
  68. package/dist/endpoints/events.d.ts +0 -13
  69. package/dist/endpoints/events.d.ts.map +0 -1
  70. package/dist/endpoints/events.js +0 -21
  71. package/dist/endpoints/events.js.map +0 -1
  72. package/dist/endpoints/inboxes.d.ts +0 -42
  73. package/dist/endpoints/inboxes.d.ts.map +0 -1
  74. package/dist/endpoints/inboxes.js +0 -83
  75. package/dist/endpoints/inboxes.js.map +0 -1
  76. package/dist/endpoints/knowledge-base-articles.d.ts +0 -8
  77. package/dist/endpoints/knowledge-base-articles.d.ts.map +0 -1
  78. package/dist/endpoints/knowledge-base-articles.js +0 -10
  79. package/dist/endpoints/knowledge-base-articles.js.map +0 -1
  80. package/dist/endpoints/knowledge-bases.d.ts +0 -50
  81. package/dist/endpoints/knowledge-bases.d.ts.map +0 -1
  82. package/dist/endpoints/knowledge-bases.js +0 -131
  83. package/dist/endpoints/knowledge-bases.js.map +0 -1
  84. package/dist/endpoints/links.d.ts +0 -30
  85. package/dist/endpoints/links.d.ts.map +0 -1
  86. package/dist/endpoints/links.js +0 -67
  87. package/dist/endpoints/links.js.map +0 -1
  88. package/dist/endpoints/message-template-folders.d.ts +0 -38
  89. package/dist/endpoints/message-template-folders.d.ts.map +0 -1
  90. package/dist/endpoints/message-template-folders.js +0 -114
  91. package/dist/endpoints/message-template-folders.js.map +0 -1
  92. package/dist/endpoints/message-templates.d.ts +0 -30
  93. package/dist/endpoints/message-templates.d.ts.map +0 -1
  94. package/dist/endpoints/message-templates.js +0 -69
  95. package/dist/endpoints/message-templates.js.map +0 -1
  96. package/dist/endpoints/messages.d.ts +0 -21
  97. package/dist/endpoints/messages.d.ts.map +0 -1
  98. package/dist/endpoints/messages.js +0 -31
  99. package/dist/endpoints/messages.js.map +0 -1
  100. package/dist/endpoints/rules.d.ts +0 -16
  101. package/dist/endpoints/rules.d.ts.map +0 -1
  102. package/dist/endpoints/rules.js +0 -21
  103. package/dist/endpoints/rules.js.map +0 -1
  104. package/dist/endpoints/shifts.d.ts +0 -46
  105. package/dist/endpoints/shifts.d.ts.map +0 -1
  106. package/dist/endpoints/shifts.js +0 -70
  107. package/dist/endpoints/shifts.js.map +0 -1
  108. package/dist/endpoints/signatures.d.ts +0 -36
  109. package/dist/endpoints/signatures.d.ts.map +0 -1
  110. package/dist/endpoints/signatures.js +0 -52
  111. package/dist/endpoints/signatures.js.map +0 -1
  112. package/dist/endpoints/statuses.d.ts +0 -15
  113. package/dist/endpoints/statuses.d.ts.map +0 -1
  114. package/dist/endpoints/statuses.js +0 -22
  115. package/dist/endpoints/statuses.js.map +0 -1
  116. package/dist/endpoints/tags.d.ts +0 -30
  117. package/dist/endpoints/tags.d.ts.map +0 -1
  118. package/dist/endpoints/tags.js +0 -49
  119. package/dist/endpoints/tags.js.map +0 -1
  120. package/dist/endpoints/teammate-groups.d.ts +0 -47
  121. package/dist/endpoints/teammate-groups.d.ts.map +0 -1
  122. package/dist/endpoints/teammate-groups.js +0 -101
  123. package/dist/endpoints/teammate-groups.js.map +0 -1
  124. package/dist/endpoints/teammates.d.ts +0 -28
  125. package/dist/endpoints/teammates.d.ts.map +0 -1
  126. package/dist/endpoints/teammates.js +0 -59
  127. package/dist/endpoints/teammates.js.map +0 -1
  128. package/dist/endpoints/teams.d.ts +0 -37
  129. package/dist/endpoints/teams.d.ts.map +0 -1
  130. package/dist/endpoints/teams.js +0 -79
  131. package/dist/endpoints/teams.js.map +0 -1
  132. package/dist/front.d.ts +0 -103
  133. package/dist/front.d.ts.map +0 -1
  134. package/dist/front.js +0 -162
  135. package/dist/front.js.map +0 -1
  136. package/dist/generated/client/client.gen.d.ts +0 -3
  137. package/dist/generated/client/client.gen.d.ts.map +0 -1
  138. package/dist/generated/client/client.gen.js +0 -204
  139. package/dist/generated/client/client.gen.js.map +0 -1
  140. package/dist/generated/client/index.d.ts +0 -8
  141. package/dist/generated/client/index.d.ts.map +0 -1
  142. package/dist/generated/client/index.js +0 -6
  143. package/dist/generated/client/index.js.map +0 -1
  144. package/dist/generated/client/types.gen.d.ts +0 -125
  145. package/dist/generated/client/types.gen.d.ts.map +0 -1
  146. package/dist/generated/client/types.gen.js +0 -3
  147. package/dist/generated/client/types.gen.js.map +0 -1
  148. package/dist/generated/client/utils.gen.d.ts +0 -39
  149. package/dist/generated/client/utils.gen.d.ts.map +0 -1
  150. package/dist/generated/client/utils.gen.js +0 -230
  151. package/dist/generated/client/utils.gen.js.map +0 -1
  152. package/dist/generated/client.gen.d.ts +0 -13
  153. package/dist/generated/client.gen.d.ts.map +0 -1
  154. package/dist/generated/client.gen.js +0 -6
  155. package/dist/generated/client.gen.js.map +0 -1
  156. package/dist/generated/core/auth.gen.d.ts +0 -19
  157. package/dist/generated/core/auth.gen.d.ts.map +0 -1
  158. package/dist/generated/core/auth.gen.js +0 -15
  159. package/dist/generated/core/auth.gen.js.map +0 -1
  160. package/dist/generated/core/bodySerializer.gen.d.ts +0 -18
  161. package/dist/generated/core/bodySerializer.gen.d.ts.map +0 -1
  162. package/dist/generated/core/bodySerializer.gen.js +0 -58
  163. package/dist/generated/core/bodySerializer.gen.js.map +0 -1
  164. package/dist/generated/core/params.gen.d.ts +0 -34
  165. package/dist/generated/core/params.gen.d.ts.map +0 -1
  166. package/dist/generated/core/params.gen.js +0 -89
  167. package/dist/generated/core/params.gen.js.map +0 -1
  168. package/dist/generated/core/pathSerializer.gen.d.ts +0 -34
  169. package/dist/generated/core/pathSerializer.gen.d.ts.map +0 -1
  170. package/dist/generated/core/pathSerializer.gen.js +0 -115
  171. package/dist/generated/core/pathSerializer.gen.js.map +0 -1
  172. package/dist/generated/core/serverSentEvents.gen.d.ts +0 -72
  173. package/dist/generated/core/serverSentEvents.gen.d.ts.map +0 -1
  174. package/dist/generated/core/serverSentEvents.gen.js +0 -136
  175. package/dist/generated/core/serverSentEvents.gen.js.map +0 -1
  176. package/dist/generated/core/types.gen.d.ts +0 -79
  177. package/dist/generated/core/types.gen.d.ts.map +0 -1
  178. package/dist/generated/core/types.gen.js +0 -3
  179. package/dist/generated/core/types.gen.js.map +0 -1
  180. package/dist/generated/core/utils.gen.d.ts +0 -15
  181. package/dist/generated/core/utils.gen.d.ts.map +0 -1
  182. package/dist/generated/core/utils.gen.js +0 -70
  183. package/dist/generated/core/utils.gen.js.map +0 -1
  184. package/dist/generated/sdk.gen.d.ts +0 -1292
  185. package/dist/generated/sdk.gen.d.ts.map +0 -1
  186. package/dist/generated/sdk.gen.js +0 -4202
  187. package/dist/generated/sdk.gen.js.map +0 -1
  188. package/dist/generated/types.gen.d.ts +0 -8492
  189. package/dist/generated/types.gen.d.ts.map +0 -1
  190. package/dist/generated/types.gen.js +0 -149
  191. package/dist/generated/types.gen.js.map +0 -1
  192. package/dist/index.d.ts +0 -28
  193. package/dist/index.d.ts.map +0 -1
  194. package/dist/index.js +0 -6
  195. package/dist/index.js.map +0 -1
  196. package/dist/oauth.d.ts +0 -28
  197. package/dist/oauth.d.ts.map +0 -1
  198. package/dist/oauth.js +0 -82
  199. package/dist/oauth.js.map +0 -1
  200. package/dist/resources/accounts.d.ts +0 -16
  201. package/dist/resources/accounts.d.ts.map +0 -1
  202. package/dist/resources/accounts.js +0 -37
  203. package/dist/resources/accounts.js.map +0 -1
  204. package/dist/resources/analytics.d.ts +0 -36
  205. package/dist/resources/analytics.d.ts.map +0 -1
  206. package/dist/resources/analytics.js +0 -82
  207. package/dist/resources/analytics.js.map +0 -1
  208. package/dist/resources/applications.d.ts +0 -9
  209. package/dist/resources/applications.d.ts.map +0 -1
  210. package/dist/resources/applications.js +0 -13
  211. package/dist/resources/applications.js.map +0 -1
  212. package/dist/resources/channels.d.ts +0 -18
  213. package/dist/resources/channels.d.ts.map +0 -1
  214. package/dist/resources/channels.js +0 -35
  215. package/dist/resources/channels.js.map +0 -1
  216. package/dist/resources/comments.d.ts +0 -18
  217. package/dist/resources/comments.d.ts.map +0 -1
  218. package/dist/resources/comments.js +0 -36
  219. package/dist/resources/comments.js.map +0 -1
  220. package/dist/resources/contacts.d.ts +0 -16
  221. package/dist/resources/contacts.d.ts.map +0 -1
  222. package/dist/resources/contacts.js +0 -37
  223. package/dist/resources/contacts.js.map +0 -1
  224. package/dist/resources/conversations.d.ts +0 -24
  225. package/dist/resources/conversations.d.ts.map +0 -1
  226. package/dist/resources/conversations.js +0 -55
  227. package/dist/resources/conversations.js.map +0 -1
  228. package/dist/resources/drafts.d.ts +0 -15
  229. package/dist/resources/drafts.d.ts.map +0 -1
  230. package/dist/resources/drafts.js +0 -34
  231. package/dist/resources/drafts.js.map +0 -1
  232. package/dist/resources/events.d.ts +0 -23
  233. package/dist/resources/events.d.ts.map +0 -1
  234. package/dist/resources/events.js +0 -28
  235. package/dist/resources/events.js.map +0 -1
  236. package/dist/resources/inboxes.d.ts +0 -12
  237. package/dist/resources/inboxes.d.ts.map +0 -1
  238. package/dist/resources/inboxes.js +0 -25
  239. package/dist/resources/inboxes.js.map +0 -1
  240. package/dist/resources/knowledge-base-articles.d.ts +0 -15
  241. package/dist/resources/knowledge-base-articles.d.ts.map +0 -1
  242. package/dist/resources/knowledge-base-articles.js +0 -34
  243. package/dist/resources/knowledge-base-articles.js.map +0 -1
  244. package/dist/resources/knowledge-base-categories.d.ts +0 -16
  245. package/dist/resources/knowledge-base-categories.d.ts.map +0 -1
  246. package/dist/resources/knowledge-base-categories.js +0 -37
  247. package/dist/resources/knowledge-base-categories.js.map +0 -1
  248. package/dist/resources/knowledge-bases.d.ts +0 -15
  249. package/dist/resources/knowledge-bases.d.ts.map +0 -1
  250. package/dist/resources/knowledge-bases.js +0 -35
  251. package/dist/resources/knowledge-bases.js.map +0 -1
  252. package/dist/resources/links.d.ts +0 -12
  253. package/dist/resources/links.d.ts.map +0 -1
  254. package/dist/resources/links.js +0 -25
  255. package/dist/resources/links.js.map +0 -1
  256. package/dist/resources/message-template-folders.d.ts +0 -13
  257. package/dist/resources/message-template-folders.d.ts.map +0 -1
  258. package/dist/resources/message-template-folders.js +0 -41
  259. package/dist/resources/message-template-folders.js.map +0 -1
  260. package/dist/resources/message-templates.d.ts +0 -16
  261. package/dist/resources/message-templates.d.ts.map +0 -1
  262. package/dist/resources/message-templates.js +0 -50
  263. package/dist/resources/message-templates.js.map +0 -1
  264. package/dist/resources/messages.d.ts +0 -36
  265. package/dist/resources/messages.d.ts.map +0 -1
  266. package/dist/resources/messages.js +0 -55
  267. package/dist/resources/messages.js.map +0 -1
  268. package/dist/resources/rules.d.ts +0 -11
  269. package/dist/resources/rules.d.ts.map +0 -1
  270. package/dist/resources/rules.js +0 -22
  271. package/dist/resources/rules.js.map +0 -1
  272. package/dist/resources/shifts.d.ts +0 -14
  273. package/dist/resources/shifts.d.ts.map +0 -1
  274. package/dist/resources/shifts.js +0 -31
  275. package/dist/resources/shifts.js.map +0 -1
  276. package/dist/resources/signatures.d.ts +0 -17
  277. package/dist/resources/signatures.d.ts.map +0 -1
  278. package/dist/resources/signatures.js +0 -51
  279. package/dist/resources/signatures.js.map +0 -1
  280. package/dist/resources/statuses.d.ts +0 -13
  281. package/dist/resources/statuses.d.ts.map +0 -1
  282. package/dist/resources/statuses.js +0 -28
  283. package/dist/resources/statuses.js.map +0 -1
  284. package/dist/resources/tags.d.ts +0 -17
  285. package/dist/resources/tags.d.ts.map +0 -1
  286. package/dist/resources/tags.js +0 -53
  287. package/dist/resources/tags.js.map +0 -1
  288. package/dist/resources/teammate-groups.d.ts +0 -17
  289. package/dist/resources/teammate-groups.d.ts.map +0 -1
  290. package/dist/resources/teammate-groups.js +0 -25
  291. package/dist/resources/teammate-groups.js.map +0 -1
  292. package/dist/resources/teammates.d.ts +0 -17
  293. package/dist/resources/teammates.d.ts.map +0 -1
  294. package/dist/resources/teammates.js +0 -40
  295. package/dist/resources/teammates.js.map +0 -1
  296. package/dist/resources/teams.d.ts +0 -11
  297. package/dist/resources/teams.d.ts.map +0 -1
  298. package/dist/resources/teams.js +0 -28
  299. package/dist/resources/teams.js.map +0 -1
  300. package/dist/types.d.ts +0 -46
  301. package/dist/types.d.ts.map +0 -1
  302. package/dist/types.js +0 -2
  303. package/dist/types.js.map +0 -1
package/package.json CHANGED
@@ -1,49 +1,78 @@
1
1
  {
2
2
  "name": "@dugjason/front-node",
3
- "version": "0.1.0-beta.2",
4
- "description": "Modern TypeScript SDK for the Front.com API",
5
- "type": "module",
6
- "main": "dist/index.js",
7
- "types": "dist/index.d.ts",
8
- "exports": {
9
- ".": {
10
- "types": "./dist/index.d.ts",
11
- "import": "./dist/index.js",
12
- "default": "./dist/index.js"
13
- }
14
- },
3
+ "version": "0.2.0",
4
+ "description": "Modern Typescript SDK for the Front.com API",
15
5
  "keywords": [
16
- "front",
17
6
  "api",
18
- "sdk",
19
- "typescript",
20
- "nodejs"
7
+ "customer-support",
8
+ "front",
9
+ "frontapp",
10
+ "sdk"
21
11
  ],
22
- "author": "",
23
- "license": "ISC",
24
- "devDependencies": {
25
- "@biomejs/biome": "2.2.2",
26
- "@faker-js/faker": "10.0.0",
27
- "@hey-api/openapi-ts": "0.82.3",
28
- "@types/node": "^20.19.1",
29
- "msw": "^2.11.1",
30
- "msw-auto-mock": "0.31.0",
31
- "typescript": "^5.9.2",
32
- "vitest": "3.2.4"
12
+ "homepage": "https://github.com/dugjason/front-node#readme",
13
+ "bugs": {
14
+ "url": "https://github.com/dugjason/front-node/issues"
33
15
  },
34
- "engines": {
35
- "node": ">=18.0.0"
16
+ "license": "MIT",
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "git+https://github.com/dugjason/front-node.git"
36
20
  },
37
21
  "files": [
38
22
  "dist"
39
23
  ],
24
+ "type": "module",
25
+ "main": "./dist/index.cjs",
26
+ "module": "./dist/index.mjs",
27
+ "types": "./dist/index.d.cts",
28
+ "exports": {
29
+ ".": {
30
+ "import": {
31
+ "types": "./dist/index.d.mts",
32
+ "default": "./dist/index.mjs"
33
+ },
34
+ "require": {
35
+ "types": "./dist/index.d.cts",
36
+ "default": "./dist/index.cjs"
37
+ }
38
+ }
39
+ },
40
+ "publishConfig": {
41
+ "access": "public"
42
+ },
40
43
  "scripts": {
41
- "build": "tsc",
42
- "dev": "tsc --watch",
43
- "lint": "biome check .",
44
- "test": "vitest run",
45
- "test:watch": "vitest",
46
- "typecheck": "tsc --noEmit",
47
- "generate:types": "openapi-ts"
48
- }
49
- }
44
+ "test": "bun test",
45
+ "build": "tsdown",
46
+ "check": "bun x ultracite check . && bun x tsc --noEmit",
47
+ "changeset": "changeset",
48
+ "version-packages": "changeset version",
49
+ "release": "bun run build && changeset publish",
50
+ "prepack": "bun run build",
51
+ "generate": "bun ./scripts/build.ts && bun run build",
52
+ "lint": "bun x oxlint -c oxlint.config.ts .",
53
+ "fmt": "bun x oxfmt -c oxfmt.config.ts .",
54
+ "fmt:check": "bun x oxfmt --check -c oxfmt.config.ts .",
55
+ "fix": "bun x ultracite fix .",
56
+ "ultracite": "bun x ultracite check ."
57
+ },
58
+ "devDependencies": {
59
+ "@arethetypeswrong/core": "0.18.5",
60
+ "@changesets/cli": "3.0.1",
61
+ "@types/bun": "1.4.0",
62
+ "@types/node": "26.4.1",
63
+ "lint-staged": "17.4.1",
64
+ "openapi-typescript": "7.13.0",
65
+ "oxfmt": "0.66.0",
66
+ "oxlint": "1.81.0",
67
+ "tsdown": "0.22.14",
68
+ "typescript": "7.0.2",
69
+ "ultracite": "7.10.7",
70
+ "unrun": "0.3.1"
71
+ },
72
+ "lint-staged": {
73
+ "*.{js,ts,json,jsonc,md,mdx}": [
74
+ "ultracite fix"
75
+ ]
76
+ },
77
+ "packageManager": "bun@1.3.14"
78
+ }
package/dist/client.d.ts DELETED
@@ -1,53 +0,0 @@
1
- import { OAuthTokenManager } from "./oauth";
2
- import type { FrontConfig } from "./types";
3
- export declare class FrontClient {
4
- private apiKey?;
5
- private oauthManager?;
6
- constructor(config: FrontConfig);
7
- private setApiKey;
8
- request<T>(options: {
9
- method: string;
10
- path: string;
11
- body?: unknown;
12
- params?: Record<string, unknown>;
13
- }): Promise<T>;
14
- private requestWithRetry;
15
- /**
16
- * Calculate retry delay based on retry-after header and exponential backoff
17
- */
18
- private getRetryDelay;
19
- /**
20
- * Calculate exponential backoff delay with jitter
21
- */
22
- private calculateExponentialBackoff;
23
- /**
24
- * Sleep for the specified number of milliseconds
25
- */
26
- private sleep;
27
- /**
28
- * Get the appropriate auth token (OAuth access token or API key)
29
- */
30
- private getAuthToken;
31
- /**
32
- * Handle the response from the API
33
- */
34
- private handleResponse;
35
- get<T>(path: string, params?: Record<string, unknown>): Promise<T>;
36
- post<T>(path: string, body?: unknown): Promise<T>;
37
- put<T>(path: string, body?: unknown): Promise<T>;
38
- patch<T>(path: string, body?: unknown): Promise<T>;
39
- delete<T>(path: string, body?: unknown): Promise<T>;
40
- /**
41
- * Get the OAuth token manager (if using OAuth)
42
- */
43
- getOAuthManager(): OAuthTokenManager | undefined;
44
- /**
45
- * Check if the client is using OAuth authentication
46
- */
47
- isUsingOAuth(): boolean;
48
- /**
49
- * Update OAuth configuration (useful for updating tokens)
50
- */
51
- updateOAuthConfig(updates: Partial<import("./types").OAuthConfig>): void;
52
- }
53
- //# sourceMappingURL=client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,SAAS,CAAA;AAUtD,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,CAAQ;IACvB,OAAO,CAAC,YAAY,CAAC,CAAmB;gBAE5B,MAAM,EAAE,WAAW;IAkB/B,OAAO,CAAC,SAAS;IASX,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE;QACxB,MAAM,EAAE,MAAM,CAAA;QACd,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,CAAC,EAAE,OAAO,CAAA;QACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KACjC,GAAG,OAAO,CAAC,CAAC,CAAC;YAIA,gBAAgB;IAgG9B;;OAEG;IACH,OAAO,CAAC,aAAa;IAyBrB;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAgBnC;;OAEG;IACH,OAAO,CAAC,KAAK;IAIb;;OAEG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;YACW,cAAc;IAyBtB,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAIlE,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAIjD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAIhD,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAIlD,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAIzD;;OAEG;IACH,eAAe,IAAI,iBAAiB,GAAG,SAAS;IAIhD;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,SAAS,EAAE,WAAW,CAAC,GAAG,IAAI;CAMzE"}
package/dist/client.js DELETED
@@ -1,230 +0,0 @@
1
- import { client } from "./generated/client.gen";
2
- import { OAuthTokenManager } from "./oauth";
3
- // Rate limiting configuration
4
- const RATE_LIMIT_CONFIG = {
5
- maxRetries: 3,
6
- baseDelay: 1_000, // 1 second
7
- maxDelay: 30_000, // 30 seconds
8
- jitterFactor: 0.2, // 20% jitter to avoid thundering herd problem
9
- };
10
- export class FrontClient {
11
- apiKey;
12
- oauthManager;
13
- constructor(config) {
14
- client.setConfig({
15
- baseUrl: config.baseUrl || "https://api2.frontapp.com",
16
- });
17
- if (config.apiKey) {
18
- this.setApiKey(config.apiKey);
19
- }
20
- if (config.oauth) {
21
- // OAuth configuration provided
22
- this.oauthManager = new OAuthTokenManager(config.oauth);
23
- }
24
- // Maybe exit here if no auth method is provided
25
- if (!this.apiKey && !this.oauthManager) {
26
- throw new Error("API key or OAuth configuration is required");
27
- }
28
- }
29
- setApiKey(apiKey) {
30
- this.apiKey = apiKey;
31
- client.setConfig({
32
- headers: {
33
- Authorization: `Bearer ${apiKey}`,
34
- },
35
- });
36
- }
37
- async request(options) {
38
- return this.requestWithRetry(options, 0);
39
- }
40
- async requestWithRetry(options, retryCount) {
41
- const { method, path, body, params } = options;
42
- // Build URL with query parameters
43
- const baseUrl = client.getConfig().baseUrl ??
44
- "https://api2.frontapp.com";
45
- const url = new URL(path, baseUrl);
46
- if (params) {
47
- Object.entries(params).forEach(([key, value]) => {
48
- if (value !== undefined && value !== null) {
49
- url.searchParams.append(key, String(value));
50
- }
51
- });
52
- }
53
- // Get the authorization token (OAuth or API key)
54
- const authToken = this.getAuthToken();
55
- // Prepare headers
56
- const headers = {
57
- Authorization: `Bearer ${authToken}`,
58
- Accept: "application/json",
59
- };
60
- // Add content-type for requests with body
61
- if (body) {
62
- headers["Content-Type"] = "application/json";
63
- }
64
- // Prepare fetch options
65
- const fetchOptions = {
66
- method,
67
- headers,
68
- };
69
- // Add body for non-GET requests
70
- if (body) {
71
- fetchOptions.body = JSON.stringify(body);
72
- }
73
- try {
74
- const response = await fetch(url, fetchOptions);
75
- // Handle token expiration for OAuth
76
- if (response.status === 401 && this.oauthManager) {
77
- // Token might be expired, try to refresh and retry once
78
- const refreshedToken = await this.oauthManager.refreshToken();
79
- // Token was refreshed, retry the request
80
- headers.Authorization = `Bearer ${refreshedToken}`;
81
- const retryResponse = await fetch(url.toString(), {
82
- ...fetchOptions,
83
- headers,
84
- });
85
- return this.handleResponse(retryResponse);
86
- }
87
- // Handle rate limiting (429 status)
88
- if (response.status === 429) {
89
- if (retryCount < RATE_LIMIT_CONFIG.maxRetries) {
90
- const retryAfterMs = this.getRetryDelay(response, retryCount);
91
- await this.sleep(retryAfterMs);
92
- return this.requestWithRetry(options, retryCount + 1);
93
- }
94
- // Max retries exceeded, handle as normal error response
95
- }
96
- return this.handleResponse(response);
97
- }
98
- catch (error) {
99
- if (error instanceof Error && "status" in error) {
100
- // Re-throw Front API errors
101
- throw error;
102
- }
103
- // Handle network or other errors - retry if we haven't exceeded max retries
104
- if (retryCount < RATE_LIMIT_CONFIG.maxRetries) {
105
- const retryAfterMs = this.calculateExponentialBackoff(retryCount);
106
- await this.sleep(retryAfterMs);
107
- return this.requestWithRetry(options, retryCount + 1);
108
- }
109
- // Max retries exceeded for network errors
110
- throw new Error(`Request failed after ${RATE_LIMIT_CONFIG.maxRetries} retries: ${error instanceof Error ? error.message : "Unknown error"}`);
111
- }
112
- }
113
- /**
114
- * Calculate retry delay based on retry-after header and exponential backoff
115
- */
116
- getRetryDelay(response, retryCount) {
117
- const retryAfterHeader = response.headers.get("retry-after");
118
- let retryAfterMs = 0;
119
- if (retryAfterHeader) {
120
- // retry-after can be in seconds (integer) or HTTP date
121
- const retryAfterSeconds = Number.parseInt(retryAfterHeader, 10);
122
- if (!Number.isNaN(retryAfterSeconds)) {
123
- retryAfterMs = retryAfterSeconds * 1000;
124
- }
125
- else {
126
- // Try parsing as HTTP date
127
- const retryAfterDate = new Date(retryAfterHeader);
128
- if (!Number.isNaN(retryAfterDate.getTime())) {
129
- retryAfterMs = Math.max(0, retryAfterDate.getTime() - Date.now());
130
- }
131
- }
132
- }
133
- // Calculate exponential backoff delay
134
- const exponentialBackoffMs = this.calculateExponentialBackoff(retryCount);
135
- // Use the maximum of retry-after and exponential backoff to ensure we wait AT LEAST retry-after time
136
- return Math.max(retryAfterMs, exponentialBackoffMs);
137
- }
138
- /**
139
- * Calculate exponential backoff delay with jitter
140
- */
141
- calculateExponentialBackoff(retryCount) {
142
- const { baseDelay, maxDelay, jitterFactor } = RATE_LIMIT_CONFIG;
143
- // Calculate exponential delay: baseDelay * (2 ^ retryCount)
144
- const exponentialDelay = baseDelay * 2 ** retryCount;
145
- // Apply maximum delay cap
146
- const cappedDelay = Math.min(exponentialDelay, maxDelay);
147
- // Add jitter to avoid thundering herd problem
148
- // Jitter is a random value between +-jitterFactor of the delay
149
- const jitter = cappedDelay * jitterFactor * (Math.random() * 2 - 1);
150
- return Math.max(0, cappedDelay + jitter);
151
- }
152
- /**
153
- * Sleep for the specified number of milliseconds
154
- */
155
- sleep(ms) {
156
- return new Promise((resolve) => setTimeout(resolve, ms));
157
- }
158
- /**
159
- * Get the appropriate auth token (OAuth access token or API key)
160
- */
161
- getAuthToken() {
162
- if (this.oauthManager) {
163
- return this.oauthManager.getAccessToken();
164
- }
165
- if (!this.apiKey) {
166
- throw new Error("No authentication method available. This should not happen with proper configuration.");
167
- }
168
- return this.apiKey;
169
- }
170
- /**
171
- * Handle the response from the API
172
- */
173
- async handleResponse(response) {
174
- // Handle non-JSON responses (like 204 No Content)
175
- if (response.status === 204) {
176
- return {};
177
- }
178
- const responseData = await response.json();
179
- if (!response.ok) {
180
- // Type guard for error response structure
181
- const errorData = responseData;
182
- const error = {
183
- message: (typeof errorData.message === "string"
184
- ? errorData.message
185
- : undefined) || `HTTP ${response.status}: ${response.statusText}`,
186
- status: response.status,
187
- code: typeof errorData.code === "string" ? errorData.code : undefined,
188
- };
189
- throw error;
190
- }
191
- return responseData;
192
- }
193
- async get(path, params) {
194
- return this.request({ method: "GET", path, params });
195
- }
196
- async post(path, body) {
197
- return this.request({ method: "POST", path, body });
198
- }
199
- async put(path, body) {
200
- return this.request({ method: "PUT", path, body });
201
- }
202
- async patch(path, body) {
203
- return this.request({ method: "PATCH", path, body });
204
- }
205
- async delete(path, body) {
206
- return this.request({ method: "DELETE", path, body });
207
- }
208
- /**
209
- * Get the OAuth token manager (if using OAuth)
210
- */
211
- getOAuthManager() {
212
- return this.oauthManager;
213
- }
214
- /**
215
- * Check if the client is using OAuth authentication
216
- */
217
- isUsingOAuth() {
218
- return !!this.oauthManager;
219
- }
220
- /**
221
- * Update OAuth configuration (useful for updating tokens)
222
- */
223
- updateOAuthConfig(updates) {
224
- if (!this.oauthManager) {
225
- throw new Error("OAuth is not configured for this client");
226
- }
227
- this.oauthManager.updateConfig(updates);
228
- }
229
- }
230
- //# sourceMappingURL=client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -1,36 +0,0 @@
1
- import type { Client as GeneratedClient } from "../generated/client/types.gen";
2
- import type { FrontConfig } from "../types";
3
- /**
4
- * Core HTTP client used by the SDK's handwritten resources.
5
- *
6
- * Responsibilities:
7
- * - Configure and expose the generated HTTP client
8
- * - Inject authentication (API key or OAuth) into every request
9
- * - Refresh OAuth tokens on 401 responses and retry once
10
- * - Normalize thrown errors into `FrontError` subclasses
11
- */
12
- export declare class APIClient {
13
- private readonly gen;
14
- private apiKey?;
15
- private oauthManager?;
16
- private readonly maxRetries;
17
- /**
18
- * Create a new API client.
19
- *
20
- * @param config - Front configuration including API key or OAuth settings and optional overrides
21
- */
22
- constructor(config?: FrontConfig & {
23
- maxRetries?: number;
24
- });
25
- /**
26
- * Access the configured generated client for low-level operations.
27
- */
28
- getGenClient(): GeneratedClient;
29
- /**
30
- * Resolve the current auth token used for requests.
31
- *
32
- * @throws FrontError when credentials are missing
33
- */
34
- private getAuthToken;
35
- }
36
- //# sourceMappingURL=client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAG9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAK3C;;;;;;;;GAQG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAiB;IACrC,OAAO,CAAC,MAAM,CAAC,CAAQ;IACvB,OAAO,CAAC,YAAY,CAAC,CAAmB;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IAEnC;;;;OAIG;gBACS,MAAM,CAAC,EAAE,WAAW,GAAG;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IAoD1D;;OAEG;IACH,YAAY,IAAI,eAAe;IAI/B;;;;OAIG;YACW,YAAY;CAK3B"}
@@ -1,89 +0,0 @@
1
- import { client as generatedClient } from "../generated/client.gen";
2
- import { OAuthTokenManager } from "../oauth";
3
- import { FrontError, mapToFrontError } from "./errors";
4
- const DEFAULT_MAX_RETRIES = 3;
5
- /**
6
- * Core HTTP client used by the SDK's handwritten resources.
7
- *
8
- * Responsibilities:
9
- * - Configure and expose the generated HTTP client
10
- * - Inject authentication (API key or OAuth) into every request
11
- * - Refresh OAuth tokens on 401 responses and retry once
12
- * - Normalize thrown errors into `FrontError` subclasses
13
- */
14
- export class APIClient {
15
- gen;
16
- apiKey;
17
- oauthManager;
18
- maxRetries;
19
- /**
20
- * Create a new API client.
21
- *
22
- * @param config - Front configuration including API key or OAuth settings and optional overrides
23
- */
24
- constructor(config) {
25
- this.gen = generatedClient;
26
- this.maxRetries = config?.maxRetries ?? DEFAULT_MAX_RETRIES;
27
- // Set Auth credentials
28
- if (config?.oauth) {
29
- this.oauthManager = new OAuthTokenManager(config.oauth);
30
- }
31
- if (config?.apiKey || process.env.FRONT_API_KEY) {
32
- this.apiKey = config?.apiKey ?? process.env.FRONT_API_KEY;
33
- }
34
- if (!this.apiKey && !this.oauthManager) {
35
- throw new Error("API key or OAuth configuration is required");
36
- }
37
- this.gen.setConfig({
38
- baseUrl: config?.baseUrl ?? "https://api2.frontapp.com",
39
- throwOnError: true,
40
- responseStyle: "fields",
41
- // Use the generated client's `auth` hook to inject the token per request
42
- auth: async (auth) => {
43
- const token = await this.getAuthToken();
44
- if (!token)
45
- return undefined;
46
- if (auth.scheme === "bearer")
47
- return token;
48
- return token;
49
- },
50
- });
51
- // Install a response interceptor to handle 401 with OAuth and retry logic
52
- this.gen.interceptors.response.use(async (response, request) => {
53
- if (response.status !== 401 || !this.oauthManager)
54
- return response;
55
- // Attempt only a single refresh + retry to avoid loops
56
- const refreshed = await this.oauthManager.refreshToken();
57
- // Clone request with new Authorization token
58
- const headers = new Headers(request.headers);
59
- headers.set("Authorization", `Bearer ${refreshed}`);
60
- const retryReq = new Request(request, { headers });
61
- const cfg = this.gen.getConfig();
62
- const fetchImpl = cfg.fetch ?? globalThis.fetch;
63
- return fetchImpl(retryReq);
64
- });
65
- // Normalize thrown errors
66
- this.gen.interceptors.error.use(async (err, response) => {
67
- throw mapToFrontError(err, response);
68
- });
69
- }
70
- /**
71
- * Access the configured generated client for low-level operations.
72
- */
73
- getGenClient() {
74
- return this.gen;
75
- }
76
- /**
77
- * Resolve the current auth token used for requests.
78
- *
79
- * @throws FrontError when credentials are missing
80
- */
81
- async getAuthToken() {
82
- if (this.apiKey)
83
- return this.apiKey;
84
- if (this.oauthManager)
85
- return this.oauthManager.getAccessToken();
86
- throw new FrontError("Missing credentials", 401, "auth_error");
87
- }
88
- }
89
- //# sourceMappingURL=client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"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"}
@@ -1,55 +0,0 @@
1
- /**
2
- * Base Front SDK error. All SDK errors extend this class.
3
- */
4
- export declare class FrontError extends Error {
5
- readonly status?: number | undefined;
6
- readonly code?: string | undefined;
7
- readonly details?: unknown | undefined;
8
- readonly headers?: Headers | undefined;
9
- constructor(message: string, status?: number | undefined, code?: string | undefined, details?: unknown | undefined, headers?: Headers | undefined);
10
- }
11
- /** 400 Bad Request */
12
- export declare class FrontBadRequestError extends FrontError {
13
- constructor(...args: ConstructorParameters<typeof FrontError>);
14
- }
15
- /** 401 Unauthorized */
16
- export declare class FrontUnauthorizedError extends FrontError {
17
- constructor(...args: ConstructorParameters<typeof FrontError>);
18
- }
19
- /** 403 Forbidden */
20
- export declare class FrontForbiddenError extends FrontError {
21
- constructor(...args: ConstructorParameters<typeof FrontError>);
22
- }
23
- /** 404 Not Found */
24
- export declare class FrontNotFoundError extends FrontError {
25
- constructor(...args: ConstructorParameters<typeof FrontError>);
26
- }
27
- /** 409 Conflict */
28
- export declare class FrontConflictError extends FrontError {
29
- constructor(...args: ConstructorParameters<typeof FrontError>);
30
- }
31
- /** 422 Unprocessable Entity */
32
- export declare class FrontUnprocessableEntityError extends FrontError {
33
- constructor(...args: ConstructorParameters<typeof FrontError>);
34
- }
35
- /** 429 Too Many Requests */
36
- export declare class FrontRateLimitError extends FrontError {
37
- constructor(...args: ConstructorParameters<typeof FrontError>);
38
- }
39
- /** 5xx Server Error */
40
- export declare class FrontServerError extends FrontError {
41
- constructor(...args: ConstructorParameters<typeof FrontError>);
42
- }
43
- /**
44
- * Normalize unknown errors (thrown by fetch/generated client) into FrontError subclasses.
45
- *
46
- * - Preserves HTTP status and headers when available
47
- * - Attempts to read `message` and `code` from the thrown payload
48
- * - Maps common HTTP status codes to specific subclasses for easier matching
49
- *
50
- * @param error - The unknown error payload (string/object/Error)
51
- * @param response - The corresponding `Response`, if available
52
- * @returns A typed `FrontError` subclass
53
- */
54
- export declare function mapToFrontError(error: unknown, response?: Response): FrontError;
55
- //# sourceMappingURL=errors.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,UAAW,SAAQ,KAAK;aAGjB,MAAM,CAAC,EAAE,MAAM;aACf,IAAI,CAAC,EAAE,MAAM;aACb,OAAO,CAAC,EAAE,OAAO;aACjB,OAAO,CAAC,EAAE,OAAO;gBAJjC,OAAO,EAAE,MAAM,EACC,MAAM,CAAC,EAAE,MAAM,YAAA,EACf,IAAI,CAAC,EAAE,MAAM,YAAA,EACb,OAAO,CAAC,EAAE,OAAO,YAAA,EACjB,OAAO,CAAC,EAAE,OAAO,YAAA;CAKpC;AAED,sBAAsB;AACtB,qBAAa,oBAAqB,SAAQ,UAAU;gBACtC,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,UAAU,CAAC;CAI9D;AACD,uBAAuB;AACvB,qBAAa,sBAAuB,SAAQ,UAAU;gBACxC,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,UAAU,CAAC;CAI9D;AACD,oBAAoB;AACpB,qBAAa,mBAAoB,SAAQ,UAAU;gBACrC,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,UAAU,CAAC;CAI9D;AACD,oBAAoB;AACpB,qBAAa,kBAAmB,SAAQ,UAAU;gBACpC,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,UAAU,CAAC;CAI9D;AACD,mBAAmB;AACnB,qBAAa,kBAAmB,SAAQ,UAAU;gBACpC,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,UAAU,CAAC;CAI9D;AACD,+BAA+B;AAC/B,qBAAa,6BAA8B,SAAQ,UAAU;gBAC/C,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,UAAU,CAAC;CAI9D;AACD,4BAA4B;AAC5B,qBAAa,mBAAoB,SAAQ,UAAU;gBACrC,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,UAAU,CAAC;CAI9D;AACD,uBAAuB;AACvB,qBAAa,gBAAiB,SAAQ,UAAU;gBAClC,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,UAAU,CAAC;CAI9D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,OAAO,EACd,QAAQ,CAAC,EAAE,QAAQ,GAClB,UAAU,CA6CZ"}