codebuff 1.0.325 → 1.0.326

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 (232) hide show
  1. package/dist/checkpoints/file-manager.js +21 -21
  2. package/dist/checkpoints/file-manager.js.map +1 -1
  3. package/dist/common/actions.d.ts +58 -58
  4. package/dist/common/analytics.d.ts +1 -1
  5. package/dist/common/browser-actions.d.ts +277 -277
  6. package/dist/common/constants.d.ts +1 -0
  7. package/dist/common/constants.d.ts.map +1 -1
  8. package/dist/common/constants.js +9 -0
  9. package/dist/common/constants.js.map +1 -1
  10. package/dist/common/db/schema.d.ts +5 -0
  11. package/dist/common/db/schema.d.ts.map +1 -1
  12. package/dist/common/db/schema.js.map +1 -1
  13. package/dist/common/types/message.d.ts +16 -16
  14. package/dist/common/websockets/websocket-schema.d.ts +122 -122
  15. package/dist/index.js +5 -5
  16. package/dist/project-files.d.ts +1 -0
  17. package/dist/project-files.js +24 -4
  18. package/dist/project-files.js.map +1 -1
  19. package/dist/workers/project-context.js +5 -1
  20. package/dist/workers/project-context.js.map +1 -1
  21. package/package.json +16 -16
  22. package/dist/code-map/test-langs/test.d.ts +0 -12
  23. package/dist/code-map/test-langs/test.d.ts.map +0 -1
  24. package/dist/code-map/test-langs/test.js +0 -23
  25. package/dist/code-map/test-langs/test.js.map +0 -1
  26. package/dist/common/db/env.d.mts +0 -4
  27. package/dist/common/db/env.mjs +0 -26
  28. package/dist/common/db/env.mjs.map +0 -1
  29. package/dist/common/env.d.mts +0 -13
  30. package/dist/common/env.mjs +0 -43
  31. package/dist/common/env.mjs.map +0 -1
  32. package/dist/common/src/actions.d.ts +0 -2673
  33. package/dist/common/src/actions.d.ts.map +0 -1
  34. package/dist/common/src/actions.js +0 -167
  35. package/dist/common/src/actions.js.map +0 -1
  36. package/dist/common/src/analytics.d.ts +0 -6
  37. package/dist/common/src/analytics.d.ts.map +0 -1
  38. package/dist/common/src/analytics.js +0 -60
  39. package/dist/common/src/analytics.js.map +0 -1
  40. package/dist/common/src/api-keys/constants.d.ts +0 -9
  41. package/dist/common/src/api-keys/constants.d.ts.map +0 -1
  42. package/dist/common/src/api-keys/constants.js +0 -26
  43. package/dist/common/src/api-keys/constants.js.map +0 -1
  44. package/dist/common/src/api-keys/crypto.d.ts +0 -25
  45. package/dist/common/src/api-keys/crypto.d.ts.map +0 -1
  46. package/dist/common/src/api-keys/crypto.js +0 -186
  47. package/dist/common/src/api-keys/crypto.js.map +0 -1
  48. package/dist/common/src/browser-actions.d.ts +0 -4416
  49. package/dist/common/src/browser-actions.d.ts.map +0 -1
  50. package/dist/common/src/browser-actions.js +0 -343
  51. package/dist/common/src/browser-actions.js.map +0 -1
  52. package/dist/common/src/constants/analytics-events.d.ts +0 -28
  53. package/dist/common/src/constants/analytics-events.d.ts.map +0 -1
  54. package/dist/common/src/constants/analytics-events.js +0 -36
  55. package/dist/common/src/constants/analytics-events.js.map +0 -1
  56. package/dist/common/src/constants/grant-priorities.d.ts +0 -3
  57. package/dist/common/src/constants/grant-priorities.d.ts.map +0 -1
  58. package/dist/common/src/constants/grant-priorities.js +0 -11
  59. package/dist/common/src/constants/grant-priorities.js.map +0 -1
  60. package/dist/common/src/constants/tools.d.ts +0 -20
  61. package/dist/common/src/constants/tools.d.ts.map +0 -1
  62. package/dist/common/src/constants/tools.js +0 -47
  63. package/dist/common/src/constants/tools.js.map +0 -1
  64. package/dist/common/src/constants.d.ts +0 -152
  65. package/dist/common/src/constants.d.ts.map +0 -1
  66. package/dist/common/src/constants.js +0 -222
  67. package/dist/common/src/constants.js.map +0 -1
  68. package/dist/common/src/db/drizzle.config.d.ts +0 -3
  69. package/dist/common/src/db/drizzle.config.d.ts.map +0 -1
  70. package/dist/common/src/db/drizzle.config.js +0 -17
  71. package/dist/common/src/db/drizzle.config.js.map +0 -1
  72. package/dist/common/src/db/index.d.ts +0 -7
  73. package/dist/common/src/db/index.d.ts.map +0 -1
  74. package/dist/common/src/db/index.js +0 -35
  75. package/dist/common/src/db/index.js.map +0 -1
  76. package/dist/common/src/db/schema.d.ts +0 -2289
  77. package/dist/common/src/db/schema.d.ts.map +0 -1
  78. package/dist/common/src/db/schema.js +0 -296
  79. package/dist/common/src/db/schema.js.map +0 -1
  80. package/dist/common/src/db/transaction.d.ts +0 -13
  81. package/dist/common/src/db/transaction.d.ts.map +0 -1
  82. package/dist/common/src/db/transaction.js +0 -36
  83. package/dist/common/src/db/transaction.js.map +0 -1
  84. package/dist/common/src/json-config/__tests__/constants.test.d.ts +0 -2
  85. package/dist/common/src/json-config/__tests__/constants.test.d.ts.map +0 -1
  86. package/dist/common/src/json-config/__tests__/constants.test.js +0 -273
  87. package/dist/common/src/json-config/__tests__/constants.test.js.map +0 -1
  88. package/dist/common/src/json-config/__tests__/stringify-schema.test.d.ts +0 -2
  89. package/dist/common/src/json-config/__tests__/stringify-schema.test.d.ts.map +0 -1
  90. package/dist/common/src/json-config/__tests__/stringify-schema.test.js +0 -66
  91. package/dist/common/src/json-config/__tests__/stringify-schema.test.js.map +0 -1
  92. package/dist/common/src/json-config/constants.d.ts +0 -138
  93. package/dist/common/src/json-config/constants.d.ts.map +0 -1
  94. package/dist/common/src/json-config/constants.js +0 -78
  95. package/dist/common/src/json-config/constants.js.map +0 -1
  96. package/dist/common/src/json-config/stringify-schema.d.ts +0 -10
  97. package/dist/common/src/json-config/stringify-schema.d.ts.map +0 -1
  98. package/dist/common/src/json-config/stringify-schema.js +0 -131
  99. package/dist/common/src/json-config/stringify-schema.js.map +0 -1
  100. package/dist/common/src/project-file-tree.d.ts +0 -12
  101. package/dist/common/src/project-file-tree.d.ts.map +0 -1
  102. package/dist/common/src/project-file-tree.js +0 -212
  103. package/dist/common/src/project-file-tree.js.map +0 -1
  104. package/dist/common/src/types/agent-state.d.ts +0 -227
  105. package/dist/common/src/types/agent-state.d.ts.map +0 -1
  106. package/dist/common/src/types/agent-state.js +0 -34
  107. package/dist/common/src/types/agent-state.js.map +0 -1
  108. package/dist/common/src/types/grant.d.ts +0 -3
  109. package/dist/common/src/types/grant.d.ts.map +0 -1
  110. package/dist/common/src/types/grant.js +0 -11
  111. package/dist/common/src/types/grant.js.map +0 -1
  112. package/dist/common/src/types/message.d.ts +0 -320
  113. package/dist/common/src/types/message.d.ts.map +0 -1
  114. package/dist/common/src/types/message.js +0 -60
  115. package/dist/common/src/types/message.js.map +0 -1
  116. package/dist/common/src/types/organization.d.ts +0 -106
  117. package/dist/common/src/types/organization.d.ts.map +0 -1
  118. package/dist/common/src/types/organization.js +0 -3
  119. package/dist/common/src/types/organization.js.map +0 -1
  120. package/dist/common/src/types/referral.d.ts +0 -3
  121. package/dist/common/src/types/referral.d.ts.map +0 -1
  122. package/dist/common/src/types/referral.js +0 -5
  123. package/dist/common/src/types/referral.js.map +0 -1
  124. package/dist/common/src/types/tools.d.ts +0 -6
  125. package/dist/common/src/types/tools.d.ts.map +0 -1
  126. package/dist/common/src/types/tools.js +0 -3
  127. package/dist/common/src/types/tools.js.map +0 -1
  128. package/dist/common/src/types/usage.d.ts +0 -41
  129. package/dist/common/src/types/usage.d.ts.map +0 -1
  130. package/dist/common/src/types/usage.js +0 -16
  131. package/dist/common/src/types/usage.js.map +0 -1
  132. package/dist/common/src/util/__tests__/messages.test.d.ts +0 -2
  133. package/dist/common/src/util/__tests__/messages.test.d.ts.map +0 -1
  134. package/dist/common/src/util/__tests__/messages.test.js +0 -70
  135. package/dist/common/src/util/__tests__/messages.test.js.map +0 -1
  136. package/dist/common/src/util/__tests__/saxy.test.d.ts +0 -2
  137. package/dist/common/src/util/__tests__/saxy.test.d.ts.map +0 -1
  138. package/dist/common/src/util/__tests__/saxy.test.js +0 -906
  139. package/dist/common/src/util/__tests__/saxy.test.js.map +0 -1
  140. package/dist/common/src/util/__tests__/string.test.d.ts +0 -2
  141. package/dist/common/src/util/__tests__/string.test.d.ts.map +0 -1
  142. package/dist/common/src/util/__tests__/string.test.js +0 -82
  143. package/dist/common/src/util/__tests__/string.test.js.map +0 -1
  144. package/dist/common/src/util/array.d.ts +0 -7
  145. package/dist/common/src/util/array.d.ts.map +0 -1
  146. package/dist/common/src/util/array.js +0 -32
  147. package/dist/common/src/util/array.js.map +0 -1
  148. package/dist/common/src/util/changes.d.ts +0 -9
  149. package/dist/common/src/util/changes.d.ts.map +0 -1
  150. package/dist/common/src/util/changes.js +0 -87
  151. package/dist/common/src/util/changes.js.map +0 -1
  152. package/dist/common/src/util/credentials.d.ts +0 -26
  153. package/dist/common/src/util/credentials.d.ts.map +0 -1
  154. package/dist/common/src/util/credentials.js +0 -24
  155. package/dist/common/src/util/credentials.js.map +0 -1
  156. package/dist/common/src/util/currency.d.ts +0 -15
  157. package/dist/common/src/util/currency.d.ts.map +0 -1
  158. package/dist/common/src/util/currency.js +0 -23
  159. package/dist/common/src/util/currency.js.map +0 -1
  160. package/dist/common/src/util/dates.d.ts +0 -11
  161. package/dist/common/src/util/dates.d.ts.map +0 -1
  162. package/dist/common/src/util/dates.js +0 -22
  163. package/dist/common/src/util/dates.js.map +0 -1
  164. package/dist/common/src/util/file.d.ts +0 -163
  165. package/dist/common/src/util/file.d.ts.map +0 -1
  166. package/dist/common/src/util/file.js +0 -192
  167. package/dist/common/src/util/file.js.map +0 -1
  168. package/dist/common/src/util/git.d.ts +0 -7
  169. package/dist/common/src/util/git.d.ts.map +0 -1
  170. package/dist/common/src/util/git.js +0 -81
  171. package/dist/common/src/util/git.js.map +0 -1
  172. package/dist/common/src/util/logger.d.ts +0 -9
  173. package/dist/common/src/util/logger.d.ts.map +0 -1
  174. package/dist/common/src/util/logger.js +0 -52
  175. package/dist/common/src/util/logger.js.map +0 -1
  176. package/dist/common/src/util/lru-cache.d.ts +0 -31
  177. package/dist/common/src/util/lru-cache.d.ts.map +0 -1
  178. package/dist/common/src/util/lru-cache.js +0 -68
  179. package/dist/common/src/util/lru-cache.js.map +0 -1
  180. package/dist/common/src/util/messages.d.ts +0 -12
  181. package/dist/common/src/util/messages.d.ts.map +0 -1
  182. package/dist/common/src/util/messages.js +0 -81
  183. package/dist/common/src/util/messages.js.map +0 -1
  184. package/dist/common/src/util/min-heap.d.ts +0 -16
  185. package/dist/common/src/util/min-heap.d.ts.map +0 -1
  186. package/dist/common/src/util/min-heap.js +0 -73
  187. package/dist/common/src/util/min-heap.js.map +0 -1
  188. package/dist/common/src/util/object.d.ts +0 -19
  189. package/dist/common/src/util/object.d.ts.map +0 -1
  190. package/dist/common/src/util/object.js +0 -91
  191. package/dist/common/src/util/object.js.map +0 -1
  192. package/dist/common/src/util/patch.d.ts +0 -2
  193. package/dist/common/src/util/patch.d.ts.map +0 -1
  194. package/dist/common/src/util/patch.js +0 -215
  195. package/dist/common/src/util/patch.js.map +0 -1
  196. package/dist/common/src/util/promise.d.ts +0 -17
  197. package/dist/common/src/util/promise.d.ts.map +0 -1
  198. package/dist/common/src/util/promise.js +0 -51
  199. package/dist/common/src/util/promise.js.map +0 -1
  200. package/dist/common/src/util/random.d.ts +0 -2
  201. package/dist/common/src/util/random.d.ts.map +0 -1
  202. package/dist/common/src/util/random.js +0 -17
  203. package/dist/common/src/util/random.js.map +0 -1
  204. package/dist/common/src/util/referral.d.ts +0 -2
  205. package/dist/common/src/util/referral.d.ts.map +0 -1
  206. package/dist/common/src/util/referral.js +0 -6
  207. package/dist/common/src/util/referral.js.map +0 -1
  208. package/dist/common/src/util/saxy.d.ts +0 -179
  209. package/dist/common/src/util/saxy.d.ts.map +0 -1
  210. package/dist/common/src/util/saxy.js +0 -548
  211. package/dist/common/src/util/saxy.js.map +0 -1
  212. package/dist/common/src/util/string.d.ts +0 -80
  213. package/dist/common/src/util/string.d.ts.map +0 -1
  214. package/dist/common/src/util/string.js +0 -264
  215. package/dist/common/src/util/string.js.map +0 -1
  216. package/dist/common/src/util/stripe.d.ts +0 -4
  217. package/dist/common/src/util/stripe.d.ts.map +0 -1
  218. package/dist/common/src/util/stripe.js +0 -22
  219. package/dist/common/src/util/stripe.js.map +0 -1
  220. package/dist/common/src/util/sync-failure.d.ts +0 -2
  221. package/dist/common/src/util/sync-failure.d.ts.map +0 -1
  222. package/dist/common/src/util/sync-failure.js +0 -57
  223. package/dist/common/src/util/sync-failure.js.map +0 -1
  224. package/dist/common/src/websockets/websocket-client.d.ts +0 -43
  225. package/dist/common/src/websockets/websocket-client.d.ts.map +0 -1
  226. package/dist/common/src/websockets/websocket-client.js +0 -216
  227. package/dist/common/src/websockets/websocket-client.js.map +0 -1
  228. package/dist/common/src/websockets/websocket-schema.d.ts +0 -5159
  229. package/dist/common/src/websockets/websocket-schema.d.ts.map +0 -1
  230. package/dist/common/src/websockets/websocket-schema.js +0 -55
  231. package/dist/common/src/websockets/websocket-schema.js.map +0 -1
  232. package/dist/common/tsconfig.tsbuildinfo +0 -1
@@ -1,264 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.stripNullChars = exports.generateCompactId = exports.transformJsonInString = exports.hasLazyEdit = exports.safeReplace = exports.ensureUrlProtocol = exports.snakeToTitleCase = exports.capitalize = exports.pluralize = exports.randBoolFromStr = exports.replaceNonStandardPlaceholderComments = exports.isWhitespace = exports.truncateStringWithMessage = exports.truncateString = void 0;
4
- exports.stripColors = stripColors;
5
- exports.stripAnsi = stripAnsi;
6
- exports.includesMatch = includesMatch;
7
- exports.suffixPrefixOverlap = suffixPrefixOverlap;
8
- const lodash_1 = require("lodash");
9
- const truncateString = (str, maxLength) => {
10
- if (str.length <= maxLength) {
11
- return str;
12
- }
13
- return str.slice(0, maxLength) + '...';
14
- };
15
- exports.truncateString = truncateString;
16
- const truncateStringWithMessage = ({ str, maxLength, message = 'TRUNCATED DUE TO LENGTH', remove = 'END', }) => {
17
- if (str.length <= maxLength) {
18
- return str;
19
- }
20
- if (remove === 'END') {
21
- const suffix = `\n[${message}...]`;
22
- return str.slice(0, maxLength - suffix.length) + suffix;
23
- }
24
- if (remove === 'START') {
25
- const prefix = `[...${message}]\n`;
26
- return prefix + str.slice(str.length - maxLength + prefix.length);
27
- }
28
- const middle = `\n[...${message}...]\n`;
29
- const length = Math.floor((maxLength - middle.length) / 2);
30
- return str.slice(0, length) + middle + str.slice(-length);
31
- };
32
- exports.truncateStringWithMessage = truncateStringWithMessage;
33
- /**
34
- * Check if a character is a whitespace character according
35
- * to the XML spec (space, carriage return, line feed or tab)
36
- *
37
- * @param character Character to check
38
- * @return Whether the character is whitespace or not
39
- */
40
- const isWhitespace = (character) => /\s/.test(character);
41
- exports.isWhitespace = isWhitespace;
42
- const replaceNonStandardPlaceholderComments = (content, replacement) => {
43
- const commentPatterns = [
44
- // JSX comments (match this first)
45
- {
46
- regex: /{\s*\/\*\s*\.{3}.*(?:rest|unchanged|keep|file|existing|some).*(?:\s*\.{3})?\s*\*\/\s*}/gi,
47
- placeholder: replacement,
48
- },
49
- // C-style comments (C, C++, Java, JavaScript, TypeScript, etc.)
50
- {
51
- regex: /\/\/\s*\.{3}.*(?:rest|unchanged|keep|file|existing|some).*(?:\s*\.{3})?/gi,
52
- placeholder: replacement,
53
- },
54
- {
55
- regex: /\/\*\s*\.{3}.*(?:rest|unchanged|keep|file|existing|some).*(?:\s*\.{3})?\s*\*\//gi,
56
- placeholder: replacement,
57
- },
58
- // Python, Ruby, R comments
59
- {
60
- regex: /#\s*\.{3}.*(?:rest|unchanged|keep|file|existing|some).*(?:\s*\.{3})?/gi,
61
- placeholder: replacement,
62
- },
63
- // HTML-style comments
64
- {
65
- regex: /<!--\s*\.{3}.*(?:rest|unchanged|keep|file|existing|some).*(?:\s*\.{3})?\s*-->/gi,
66
- placeholder: replacement,
67
- },
68
- // SQL, Haskell, Lua comments
69
- {
70
- regex: /--\s*\.{3}.*(?:rest|unchanged|keep|file|existing|some).*(?:\s*\.{3})?/gi,
71
- placeholder: replacement,
72
- },
73
- // MATLAB comments
74
- {
75
- regex: /%\s*\.{3}.*(?:rest|unchanged|keep|file|existing|some).*(?:\s*\.{3})?/gi,
76
- placeholder: replacement,
77
- },
78
- ];
79
- let updatedContent = content;
80
- for (const { regex, placeholder } of commentPatterns) {
81
- updatedContent = updatedContent.replaceAll(regex, placeholder);
82
- }
83
- return updatedContent;
84
- };
85
- exports.replaceNonStandardPlaceholderComments = replaceNonStandardPlaceholderComments;
86
- const randBoolFromStr = (str) => {
87
- return (0, lodash_1.sumBy)(str.split(''), (char) => char.charCodeAt(0)) % 2 === 0;
88
- };
89
- exports.randBoolFromStr = randBoolFromStr;
90
- const pluralize = (count, word) => {
91
- if (count === 1)
92
- return `${count} ${word}`;
93
- // Handle words ending in 'y' (unless preceded by a vowel)
94
- if (word.endsWith('y') && !word.match(/[aeiou]y$/)) {
95
- return `${count} ${word.slice(0, -1) + 'ies'}`;
96
- }
97
- // Handle words ending in s, sh, ch, x, z, o
98
- if (word.match(/[sxz]$/) || word.match(/[cs]h$/) || word.match(/o$/)) {
99
- return `${count} ${word + 'es'}`;
100
- }
101
- // Handle words ending in f/fe
102
- if (word.endsWith('f')) {
103
- return `${count} ${word.slice(0, -1) + 'ves'}`;
104
- }
105
- if (word.endsWith('fe')) {
106
- return `${count} ${word.slice(0, -2) + 'ves'}`;
107
- }
108
- return `${count} ${word + 's'}`;
109
- };
110
- exports.pluralize = pluralize;
111
- /**
112
- * Safely replaces all occurrences of a search string with a replacement string,
113
- * escaping special replacement patterns (like $) in the replacement string.
114
- */
115
- const capitalize = (str) => {
116
- if (!str)
117
- return str;
118
- return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
119
- };
120
- exports.capitalize = capitalize;
121
- /**
122
- * Converts a snake_case string to Title Case
123
- * Example: "add_subgoal" -> "Add Subgoal"
124
- */
125
- const snakeToTitleCase = (str) => {
126
- return str
127
- .split('_')
128
- .map((word) => (0, exports.capitalize)(word))
129
- .join(' ');
130
- };
131
- exports.snakeToTitleCase = snakeToTitleCase;
132
- /**
133
- * Ensures a URL has the appropriate protocol (http:// or https://)
134
- * Uses http:// for localhost and local IPs, https:// for all other domains
135
- */
136
- const ensureUrlProtocol = (url) => {
137
- if (url.startsWith('http://') ||
138
- url.startsWith('https://') ||
139
- url.startsWith('file://')) {
140
- return url;
141
- }
142
- if (url.startsWith('localhost') || url.match(/^127\.\d+\.\d+\.\d+/)) {
143
- return `http://${url}`;
144
- }
145
- if (url.startsWith('/')) {
146
- return `file://${url}`;
147
- }
148
- return `https://${url}`;
149
- };
150
- exports.ensureUrlProtocol = ensureUrlProtocol;
151
- const safeReplace = (content, searchStr, replaceStr) => {
152
- const escapedReplaceStr = replaceStr.replace(/\$/g, '$$$$');
153
- return content.replace(searchStr, escapedReplaceStr);
154
- };
155
- exports.safeReplace = safeReplace;
156
- const hasLazyEdit = (content) => {
157
- const cleanedContent = content.toLowerCase().trim();
158
- return (cleanedContent.includes('... existing code ...') ||
159
- cleanedContent.includes('// rest of the') ||
160
- cleanedContent.includes('# rest of the') ||
161
- // Match various comment styles with ellipsis and specific words
162
- /\/\/\s*\.{3}.*(?:rest|unchanged|keep|file|existing|some).*(?:\.{3})?/.test(cleanedContent) || // C-style single line
163
- /\/\*\s*\.{3}.*(?:rest|unchanged|keep|file|existing|some).*(?:\.{3})?\s*\*\//.test(cleanedContent) || // C-style multi-line
164
- /#\s*\.{3}.*(?:rest|unchanged|keep|file|existing|some).*(?:\.{3})?/.test(cleanedContent) || // Python/Ruby style
165
- /<!--\s*\.{3}.*(?:rest|unchanged|keep|file|existing|some).*(?:\.{3})?\s*-->/.test(cleanedContent) || // HTML style
166
- /--\s*\.{3}.*(?:rest|unchanged|keep|file|existing|some).*(?:\.{3})?/.test(cleanedContent) || // SQL/Haskell style
167
- /%\s*\.{3}.*(?:rest|unchanged|keep|file|existing|some).*(?:\.{3})?/.test(cleanedContent) || // MATLAB style
168
- /{\s*\/\*\s*\.{3}.*(?:rest|unchanged|keep|file|existing|some).*(?:\.{3})?\s*\*\/\s*}/.test(cleanedContent) // JSX style
169
- );
170
- };
171
- exports.hasLazyEdit = hasLazyEdit;
172
- /**
173
- * Extracts a JSON field from a string, transforms it, and puts it back.
174
- * Handles both array and object JSON values.
175
- * @param content The string containing JSON-like content
176
- * @param field The field name to find and transform
177
- * @param transform Function to transform the parsed JSON value
178
- * @param fallback String to use if parsing fails
179
- * @returns The content string with the transformed JSON field
180
- */
181
- const transformJsonInString = (content, field, transform, fallback) => {
182
- // Use a non-greedy match for objects/arrays to prevent over-matching
183
- const pattern = new RegExp(`"${field}"\\s*:\\s*(\\{[^}]*?\\}|\\[[^\\]]*?\\])`);
184
- const match = content.match(pattern);
185
- if (!match) {
186
- return content;
187
- }
188
- try {
189
- const json = JSON.parse(match[1]);
190
- const transformed = transform(json);
191
- // Important: Only replace the exact matched portion to prevent duplicates
192
- return content.replace(match[0], `"${field}":${JSON.stringify(transformed)}`);
193
- }
194
- catch (error) {
195
- // Only replace the exact matched portion even in error case
196
- return content.replace(match[0], `"${field}":${fallback}`);
197
- }
198
- };
199
- exports.transformJsonInString = transformJsonInString;
200
- /**
201
- * Generates a compact unique identifier by combining timestamp bits with random bits.
202
- * Takes last 24 bits of timestamp (enough for months) and 8 random bits.
203
- * Encodes in base36 for very compact strings (~5-6 chars).
204
- * @param prefix Optional prefix to add to the ID
205
- * @returns A unique string ID
206
- * @example
207
- * generateCompactId() // => "1a2b3c"
208
- * generateCompactId('msg-') // => "msg-1a2b3c"
209
- */
210
- const generateCompactId = (prefix) => {
211
- const timestamp = Date.now() & 0xffffff; // Last 24 bits of timestamp
212
- const random = Math.floor(Math.random() * 0xff); // 8 random bits
213
- const str = ((timestamp << 8) | random).toString(36).replace(/^-/, ''); // Remove leading dash if present
214
- return prefix ? `${prefix}${str}` : str;
215
- };
216
- exports.generateCompactId = generateCompactId;
217
- /**
218
- * Removes null characters from a string
219
- */
220
- const stripNullChars = (str) => {
221
- return str.replace(/\u0000/g, '');
222
- };
223
- exports.stripNullChars = stripNullChars;
224
- const ansiColorsRegex = /\x1B\[[0-9;]*m/g;
225
- function stripColors(str) {
226
- return str.replace(ansiColorsRegex, '');
227
- }
228
- const ansiRegex = /\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~]|\][^\x1B]*\x1B\\?)/g;
229
- function stripAnsi(str) {
230
- return str.replace(ansiRegex, '');
231
- }
232
- function includesMatch(array, value) {
233
- return array.some((p) => {
234
- if (typeof p === 'string') {
235
- return p === value;
236
- }
237
- return p.test(value);
238
- });
239
- }
240
- /**
241
- * Finds the longest substring that is **both** a suffix of `source`
242
- * **and** a prefix of `next`.
243
- * Useful when concatenating strings while avoiding duplicate overlap.
244
- *
245
- * @example
246
- * ```ts
247
- * suffixPrefixOverlap('foobar', 'barbaz'); // ➜ 'bar'
248
- * suffixPrefixOverlap('abc', 'def'); // ➜ ''
249
- * ```
250
- *
251
- * @param source The string whose **suffix** is inspected.
252
- * @param next The string whose **prefix** is inspected.
253
- * @returns The longest overlapping edge, or an empty string if none exists.
254
- */
255
- function suffixPrefixOverlap(source, next) {
256
- for (let len = next.length; len > 0; len--) {
257
- const prefix = next.slice(0, len);
258
- if (source.endsWith(prefix)) {
259
- return prefix;
260
- }
261
- }
262
- return '';
263
- }
264
- //# sourceMappingURL=string.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"string.js","sourceRoot":"","sources":["../../../src/util/string.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import Stripe from 'stripe';
2
- export declare const stripeServer: Stripe;
3
- export declare function getCurrentSubscription(customerId: string): Promise<Stripe.Subscription>;
4
- //# sourceMappingURL=stripe.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stripe.d.ts","sourceRoot":"","sources":["../../../src/util/stripe.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAG3B,eAAO,MAAM,YAAY,QAGvB,CAAA;AAEF,wBAAsB,sBAAsB,CAAC,UAAU,EAAE,MAAM,gCAO9D"}
@@ -1,22 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.stripeServer = void 0;
7
- exports.getCurrentSubscription = getCurrentSubscription;
8
- const stripe_1 = __importDefault(require("stripe"));
9
- const env_1 = require("@/env");
10
- exports.stripeServer = new stripe_1.default(env_1.env.STRIPE_SECRET_KEY, {
11
- apiVersion: '2024-06-20',
12
- typescript: true,
13
- });
14
- async function getCurrentSubscription(customerId) {
15
- const subscriptions = await exports.stripeServer.subscriptions.list({
16
- customer: customerId,
17
- status: 'active',
18
- limit: 1,
19
- });
20
- return subscriptions.data[0];
21
- }
22
- //# sourceMappingURL=stripe.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stripe.js","sourceRoot":"","sources":["../../../src/util/stripe.ts"],"names":[],"mappings":";;;;;;AAQA,wDAOC;AAfD,oDAA2B;AAC3B,+BAA2B;AAEd,QAAA,YAAY,GAAG,IAAI,gBAAM,CAAC,SAAG,CAAC,iBAAiB,EAAE;IAC5D,UAAU,EAAE,YAAY;IACxB,UAAU,EAAE,IAAI;CACjB,CAAC,CAAA;AAEK,KAAK,UAAU,sBAAsB,CAAC,UAAkB;IAC7D,MAAM,aAAa,GAAG,MAAM,oBAAY,CAAC,aAAa,CAAC,IAAI,CAAC;QAC1D,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,CAAC;KACT,CAAC,CAAA;IACF,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AAC9B,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare function logSyncFailure(id: string, errorMessage: string, provider?: string): Promise<void>;
2
- //# sourceMappingURL=sync-failure.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sync-failure.d.ts","sourceRoot":"","sources":["../../../src/util/sync-failure.ts"],"names":[],"mappings":"AAKA,wBAAsB,cAAc,CAClC,EAAE,EAAE,MAAM,EACV,YAAY,EAAE,MAAM,EACpB,QAAQ,SAAW,GAClB,OAAO,CAAC,IAAI,CAAC,CAwBf"}
@@ -1,57 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.logSyncFailure = logSyncFailure;
30
- const drizzle_orm_1 = require("drizzle-orm");
31
- const db_1 = __importDefault(require("../db"));
32
- const schema = __importStar(require("../db/schema"));
33
- const logger_1 = require("./logger");
34
- async function logSyncFailure(id, errorMessage, provider = 'stripe') {
35
- try {
36
- await db_1.default
37
- .insert(schema.syncFailure)
38
- .values({
39
- message_id: id,
40
- provider,
41
- last_error: errorMessage,
42
- last_attempt_at: new Date(),
43
- })
44
- .onConflictDoUpdate({
45
- target: schema.syncFailure.message_id,
46
- set: {
47
- last_error: errorMessage,
48
- last_attempt_at: new Date(),
49
- retry_count: (0, drizzle_orm_1.sql) `${schema.syncFailure.retry_count} + 1`,
50
- },
51
- });
52
- }
53
- catch (dbError) {
54
- logger_1.logger.error({ id, provider, error: dbError }, 'Failed to log sync failure to database.');
55
- }
56
- }
57
- //# sourceMappingURL=sync-failure.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sync-failure.js","sourceRoot":"","sources":["../../../src/util/sync-failure.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,wCA4BC;AAjCD,6CAAiC;AACjC,+CAAsB;AACtB,qDAAsC;AACtC,qCAAiC;AAE1B,KAAK,UAAU,cAAc,CAClC,EAAU,EACV,YAAoB,EACpB,QAAQ,GAAG,QAAQ;IAEnB,IAAI,CAAC;QACH,MAAM,YAAE;aACL,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;aAC1B,MAAM,CAAC;YACN,UAAU,EAAE,EAAE;YACd,QAAQ;YACR,UAAU,EAAE,YAAY;YACxB,eAAe,EAAE,IAAI,IAAI,EAAE;SAC5B,CAAC;aACD,kBAAkB,CAAC;YAClB,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,UAAU;YACrC,GAAG,EAAE;gBACH,UAAU,EAAE,YAAY;gBACxB,eAAe,EAAE,IAAI,IAAI,EAAE;gBAC3B,WAAW,EAAE,IAAA,iBAAG,EAAA,GAAG,MAAM,CAAC,WAAW,CAAC,WAAW,MAAM;aACxD;SACF,CAAC,CAAA;IACN,CAAC;IAAC,OAAO,OAAO,EAAE,CAAC;QACjB,eAAM,CAAC,KAAK,CACV,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,EAChC,yCAAyC,CAC1C,CAAA;IACH,CAAC;AACH,CAAC"}
@@ -1,43 +0,0 @@
1
- import { WebSocket } from 'ws';
2
- import { ClientAction, ServerAction } from '../actions';
3
- import { ClientMessage, ClientMessageType, ServerMessage } from './websocket-schema';
4
- type ConnectingState = typeof WebSocket.CONNECTING;
5
- type OpenState = typeof WebSocket.OPEN;
6
- type ClosingState = typeof WebSocket.CLOSING;
7
- type ClosedState = typeof WebSocket.CLOSED;
8
- export type ReadyState = OpenState | ConnectingState | ClosedState | ClosingState;
9
- export declare function formatState(state: ReadyState): "connecting" | "open" | "closing" | "closed";
10
- type OutstandingTxn = {
11
- resolve: () => void;
12
- reject: (err: Error) => void;
13
- timeout?: any;
14
- };
15
- /** Client for the API websocket realtime server. Automatically manages reconnection
16
- * and resubscription on disconnect, and allows subscribers to get a callback
17
- * when something is broadcasted. */
18
- export declare class APIRealtimeClient {
19
- ws: WebSocket;
20
- url: string;
21
- subscribers: Map<ServerAction['type'], ((action: ServerAction) => void)[]>;
22
- txid: number;
23
- txns: Map<number, OutstandingTxn>;
24
- connectTimeout?: any;
25
- heartbeat?: any;
26
- hadError: boolean;
27
- onError: () => void;
28
- onReconnect: () => void;
29
- constructor(url: string, onError: () => void, onReconnect: () => void);
30
- get state(): ReadyState;
31
- close(): void;
32
- connect(): Promise<void>;
33
- waitAndReconnect(): void;
34
- forceReconnect(): void;
35
- receiveMessage(msg: ServerMessage): void;
36
- sendMessage<T extends ClientMessageType>(type: T, data: Omit<ClientMessage<T>, 'type' | 'txid'>): Promise<void>;
37
- sendAction(action: ClientAction): Promise<void>;
38
- subscribe<T extends ServerAction['type']>(action: T, callback: (action: Extract<ServerAction, {
39
- type: T;
40
- }>) => void): () => void;
41
- }
42
- export {};
43
- //# sourceMappingURL=websocket-client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"websocket-client.d.ts","sourceRoot":"","sources":["../../../src/websockets/websocket-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAA;AAE9B,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACvD,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,aAAa,EACd,MAAM,oBAAoB,CAAA;AAS3B,KAAK,eAAe,GAAG,OAAO,SAAS,CAAC,UAAU,CAAA;AAClD,KAAK,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAA;AACtC,KAAK,YAAY,GAAG,OAAO,SAAS,CAAC,OAAO,CAAA;AAC5C,KAAK,WAAW,GAAG,OAAO,SAAS,CAAC,MAAM,CAAA;AAE1C,MAAM,MAAM,UAAU,GAClB,SAAS,GACT,eAAe,GACf,WAAW,GACX,YAAY,CAAA;AAEhB,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,gDAa5C;AAED,KAAK,cAAc,GAAG;IACpB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,MAAM,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAA;IAC5B,OAAO,CAAC,EAAE,GAAG,CAAA;CACd,CAAA;AAED;;oCAEoC;AACpC,qBAAa,iBAAiB;IAC5B,EAAE,EAAG,SAAS,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IAEX,WAAW,EAAE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC,EAAE,CAAC,CAAA;IAC1E,IAAI,EAAE,MAAM,CAAA;IAEZ,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IACjC,cAAc,CAAC,EAAE,GAAG,CAAA;IACpB,SAAS,CAAC,EAAE,GAAG,CAAA;IACf,QAAQ,UAAQ;IAChB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,WAAW,EAAE,MAAM,IAAI,CAAA;gBAEX,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,EAAE,WAAW,EAAE,MAAM,IAAI;IASrE,IAAI,KAAK,IACsB,UAAU,CACxC;IAED,KAAK;IAKL,OAAO;IA2DP,gBAAgB;IAShB,cAAc;IAcd,cAAc,CAAC,GAAG,EAAE,aAAa;IAoC3B,WAAW,CAAC,CAAC,SAAS,iBAAiB,EAC3C,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAsBzC,UAAU,CAAC,MAAM,EAAE,YAAY;IAwBrC,SAAS,CAAC,CAAC,SAAS,YAAY,CAAC,MAAM,CAAC,EACtC,MAAM,EAAE,CAAC,EACT,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,KAAK,IAAI;CAajE"}
@@ -1,216 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.APIRealtimeClient = void 0;
4
- exports.formatState = formatState;
5
- const ws_1 = require("ws");
6
- // mqp: useful for debugging
7
- const VERBOSE_LOGGING = false;
8
- const TIMEOUT_MS = 120_000;
9
- const RECONNECT_WAIT_MS = 5_000;
10
- function formatState(state) {
11
- switch (state) {
12
- case ws_1.WebSocket.CONNECTING:
13
- return 'connecting';
14
- case ws_1.WebSocket.OPEN:
15
- return 'open';
16
- case ws_1.WebSocket.CLOSING:
17
- return 'closing';
18
- case ws_1.WebSocket.CLOSED:
19
- return 'closed';
20
- default:
21
- throw new Error('Invalid websocket state.');
22
- }
23
- }
24
- /** Client for the API websocket realtime server. Automatically manages reconnection
25
- * and resubscription on disconnect, and allows subscribers to get a callback
26
- * when something is broadcasted. */
27
- class APIRealtimeClient {
28
- ws;
29
- url;
30
- // Callbacks subscribed to individual actions.
31
- subscribers;
32
- txid;
33
- // all txns that are in flight, with no ack/error/timeout
34
- txns;
35
- connectTimeout;
36
- heartbeat;
37
- hadError = false;
38
- onError;
39
- onReconnect;
40
- constructor(url, onError, onReconnect) {
41
- this.url = url;
42
- this.txid = 0;
43
- this.txns = new Map();
44
- this.subscribers = new Map();
45
- this.onError = onError;
46
- this.onReconnect = onReconnect;
47
- }
48
- get state() {
49
- return this.ws.readyState;
50
- }
51
- close() {
52
- this.ws.close(1000, 'Closed manually.');
53
- clearTimeout(this.connectTimeout);
54
- }
55
- connect() {
56
- // you may wish to refer to https://websockets.spec.whatwg.org/
57
- // in order to check the semantics of events etc.
58
- this.ws = new ws_1.WebSocket(this.url);
59
- this.ws.onmessage = (ev) => {
60
- if (this.hadError) {
61
- this.hadError = false;
62
- this.onReconnect();
63
- }
64
- this.receiveMessage(JSON.parse(ev.data));
65
- };
66
- this.ws.onerror = (ev) => {
67
- if (!this.hadError) {
68
- this.onError();
69
- this.hadError = true;
70
- }
71
- // this can fire without an onclose if this is the first time we ever try
72
- // to connect, so we need to turn on our reconnect in that case
73
- this.waitAndReconnect();
74
- };
75
- this.ws.onclose = (ev) => {
76
- // note that if the connection closes due to an error, onerror fires and then this
77
- if (VERBOSE_LOGGING) {
78
- console.info(`API websocket closed with code=${ev.code}: ${ev.reason}`);
79
- }
80
- clearInterval(this.heartbeat);
81
- // mqp: we might need to change how the txn stuff works if we ever want to
82
- // implement "wait until i am subscribed, and then do something" in a component.
83
- // right now it cannot be reliably used to detect that in the presence of reconnects
84
- for (const txn of Array.from(this.txns.values())) {
85
- clearTimeout(txn.timeout);
86
- // NOTE (James): Don't throw an error when the websocket is closed...
87
- // This seems to be happening, but the client can recover.
88
- txn.resolve();
89
- // txn.reject(new Error('Websocket was closed.'))
90
- }
91
- this.txns.clear();
92
- // 1000 is RFC code for normal on-purpose closure
93
- if (ev.code !== 1000) {
94
- this.waitAndReconnect();
95
- }
96
- };
97
- return new Promise((resolve) => {
98
- this.ws.onopen = (_ev) => {
99
- if (VERBOSE_LOGGING) {
100
- console.info('API websocket opened.');
101
- }
102
- this.heartbeat = setInterval(async () => this.sendMessage('ping', {}).catch(() => { }), 30000);
103
- resolve();
104
- };
105
- });
106
- }
107
- waitAndReconnect() {
108
- if (this.connectTimeout == null) {
109
- this.connectTimeout = setTimeout(() => {
110
- this.connectTimeout = undefined;
111
- this.connect();
112
- }, RECONNECT_WAIT_MS);
113
- }
114
- }
115
- forceReconnect() {
116
- // Close the current connection if it's open
117
- if (this.ws && this.state !== ws_1.WebSocket.CLOSED) {
118
- this.ws.close(1000, 'Forced reconnection due to server shutdown notice');
119
- }
120
- // Immediately attempt to reconnect
121
- this.connect().catch((err) => {
122
- console.error('Failed to reconnect after server shutdown notice:', err);
123
- // Still set up delayed reconnect as fallback
124
- this.waitAndReconnect();
125
- });
126
- }
127
- receiveMessage(msg) {
128
- if (VERBOSE_LOGGING) {
129
- console.info('< Incoming API websocket message: ', msg);
130
- }
131
- switch (msg.type) {
132
- case 'action': {
133
- const action = msg.data;
134
- const subscribers = this.subscribers.get(action.type) ?? [];
135
- for (const callback of subscribers) {
136
- callback(action);
137
- }
138
- return;
139
- }
140
- case 'ack': {
141
- if (msg.txid != null) {
142
- const txn = this.txns.get(msg.txid);
143
- if (txn == null) {
144
- // mqp: only reason this should happen is getting an ack after timeout
145
- console.warn(`Websocket message with old txid=${msg.txid}.`);
146
- }
147
- else {
148
- clearTimeout(txn.timeout);
149
- if (msg.error != null) {
150
- txn.reject(new Error(msg.error));
151
- }
152
- else {
153
- txn.resolve();
154
- }
155
- this.txns.delete(msg.txid);
156
- }
157
- }
158
- return;
159
- }
160
- default:
161
- console.warn(`Unknown API websocket message type received: ${msg}`);
162
- }
163
- }
164
- async sendMessage(type, data) {
165
- if (VERBOSE_LOGGING) {
166
- console.info(`> Outgoing API websocket ${type} message: `, data);
167
- }
168
- if (this.state === ws_1.WebSocket.OPEN) {
169
- return new Promise((resolve, reject) => {
170
- const txid = this.txid++;
171
- const timeout = setTimeout(() => {
172
- this.txns.delete(txid);
173
- reject(new Error(`Websocket message with txid ${txid} timed out.`));
174
- }, TIMEOUT_MS);
175
- this.txns.set(txid, { resolve, reject, timeout });
176
- this.ws.send(JSON.stringify({ type, txid, ...data }));
177
- });
178
- }
179
- else {
180
- // expected if components in the code try to subscribe or unsubscribe
181
- // while the socket is closed -- in this case we expect to get the state
182
- // fixed up in the websocket onopen handler when we reconnect
183
- }
184
- }
185
- async sendAction(action) {
186
- try {
187
- return await this.sendMessage('action', {
188
- data: action,
189
- });
190
- }
191
- catch (e) {
192
- // Print the error message for debugging.
193
- console.error('Error sending action:', action.type, typeof e === 'object' && e !== null && 'message' in e ? e.message : e);
194
- console.log();
195
- console.log('Codebuff is exiting due to an error.');
196
- console.log('Make sure you are on the latest version of Codebuff!');
197
- console.log('-----------------------------------');
198
- console.log('Please run: npm install -g codebuff');
199
- console.log('-----------------------------------');
200
- process.exit(1);
201
- }
202
- }
203
- subscribe(action, callback) {
204
- const currSubscribers = this.subscribers.get(action) ?? [];
205
- this.subscribers.set(action, [
206
- ...currSubscribers,
207
- callback,
208
- ]);
209
- return () => {
210
- const newSubscribers = currSubscribers.filter((cb) => cb !== callback);
211
- this.subscribers.set(action, newSubscribers);
212
- };
213
- }
214
- }
215
- exports.APIRealtimeClient = APIRealtimeClient;
216
- //# sourceMappingURL=websocket-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"websocket-client.js","sourceRoot":"","sources":["../../../src/websockets/websocket-client.ts"],"names":[],"mappings":"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"}