codecane 1.0.123

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 (156) hide show
  1. package/README.md +87 -0
  2. package/dist/__tests__/tool-handlers.test.d.ts +1 -0
  3. package/dist/__tests__/tool-handlers.test.js +32 -0
  4. package/dist/__tests__/tool-handlers.test.js.map +1 -0
  5. package/dist/chat-storage.d.ts +29 -0
  6. package/dist/chat-storage.js +125 -0
  7. package/dist/chat-storage.js.map +1 -0
  8. package/dist/cli.d.ts +38 -0
  9. package/dist/cli.js +453 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/client.d.ts +71 -0
  12. package/dist/client.js +458 -0
  13. package/dist/client.js.map +1 -0
  14. package/dist/code-map/languages.d.ts +12 -0
  15. package/dist/code-map/languages.js +129 -0
  16. package/dist/code-map/languages.js.map +1 -0
  17. package/dist/code-map/parse.d.ts +11 -0
  18. package/dist/code-map/parse.js +127 -0
  19. package/dist/code-map/parse.js.map +1 -0
  20. package/dist/code-map/test-langs/test.d.ts +11 -0
  21. package/dist/code-map/test-langs/test.js +23 -0
  22. package/dist/code-map/test-langs/test.js.map +1 -0
  23. package/dist/code-map/tree-sitter-queries/readme.md +23 -0
  24. package/dist/code-map/tree-sitter-queries/tree-sitter-c-tags.scm +11 -0
  25. package/dist/code-map/tree-sitter-queries/tree-sitter-c_sharp-tags.scm +13 -0
  26. package/dist/code-map/tree-sitter-queries/tree-sitter-cpp-tags.scm +17 -0
  27. package/dist/code-map/tree-sitter-queries/tree-sitter-go-tags.scm +26 -0
  28. package/dist/code-map/tree-sitter-queries/tree-sitter-java-tags.scm +19 -0
  29. package/dist/code-map/tree-sitter-queries/tree-sitter-javascript-tags.scm +15 -0
  30. package/dist/code-map/tree-sitter-queries/tree-sitter-php-tags.scm +26 -0
  31. package/dist/code-map/tree-sitter-queries/tree-sitter-python-tags.scm +9 -0
  32. package/dist/code-map/tree-sitter-queries/tree-sitter-ruby-tags.scm +58 -0
  33. package/dist/code-map/tree-sitter-queries/tree-sitter-rust-tags.scm +26 -0
  34. package/dist/code-map/tree-sitter-queries/tree-sitter-typescript-tags.scm +15 -0
  35. package/dist/code-map/tsconfig.tsbuildinfo +1 -0
  36. package/dist/common/actions.d.ts +1405 -0
  37. package/dist/common/actions.js +193 -0
  38. package/dist/common/actions.js.map +1 -0
  39. package/dist/common/billing/quota-manager.d.ts +29 -0
  40. package/dist/common/billing/quota-manager.js +213 -0
  41. package/dist/common/billing/quota-manager.js.map +1 -0
  42. package/dist/common/constants.d.ts +41 -0
  43. package/dist/common/constants.js +126 -0
  44. package/dist/common/constants.js.map +1 -0
  45. package/dist/common/db/drizzle.config.d.ts +2 -0
  46. package/dist/common/db/drizzle.config.js +17 -0
  47. package/dist/common/db/drizzle.config.js.map +1 -0
  48. package/dist/common/db/env.d.mts +1 -0
  49. package/dist/common/db/env.mjs +26 -0
  50. package/dist/common/db/env.mjs.map +1 -0
  51. package/dist/common/db/index.d.ts +6 -0
  52. package/dist/common/db/index.js +35 -0
  53. package/dist/common/db/index.js.map +1 -0
  54. package/dist/common/db/schema.d.ts +1089 -0
  55. package/dist/common/db/schema.js +114 -0
  56. package/dist/common/db/schema.js.map +1 -0
  57. package/dist/common/env.d.mts +1 -0
  58. package/dist/common/env.mjs +34 -0
  59. package/dist/common/env.mjs.map +1 -0
  60. package/dist/common/project-file-tree.d.ts +9 -0
  61. package/dist/common/project-file-tree.js +166 -0
  62. package/dist/common/project-file-tree.js.map +1 -0
  63. package/dist/common/types/referral.d.ts +2 -0
  64. package/dist/common/types/referral.js +5 -0
  65. package/dist/common/types/referral.js.map +1 -0
  66. package/dist/common/types/usage.d.ts +24 -0
  67. package/dist/common/types/usage.js +13 -0
  68. package/dist/common/types/usage.js.map +1 -0
  69. package/dist/common/util/__tests__/string.test.d.ts +1 -0
  70. package/dist/common/util/__tests__/string.test.js +83 -0
  71. package/dist/common/util/__tests__/string.test.js.map +1 -0
  72. package/dist/common/util/array.d.ts +6 -0
  73. package/dist/common/util/array.js +32 -0
  74. package/dist/common/util/array.js.map +1 -0
  75. package/dist/common/util/changes.d.ts +6 -0
  76. package/dist/common/util/changes.js +72 -0
  77. package/dist/common/util/changes.js.map +1 -0
  78. package/dist/common/util/credentials.d.ts +25 -0
  79. package/dist/common/util/credentials.js +24 -0
  80. package/dist/common/util/credentials.js.map +1 -0
  81. package/dist/common/util/dates.d.ts +1 -0
  82. package/dist/common/util/dates.js +13 -0
  83. package/dist/common/util/dates.js.map +1 -0
  84. package/dist/common/util/file.d.ts +151 -0
  85. package/dist/common/util/file.js +180 -0
  86. package/dist/common/util/file.js.map +1 -0
  87. package/dist/common/util/git.d.ts +6 -0
  88. package/dist/common/util/git.js +81 -0
  89. package/dist/common/util/git.js.map +1 -0
  90. package/dist/common/util/helpers.d.ts +1 -0
  91. package/dist/common/util/helpers.js +6 -0
  92. package/dist/common/util/helpers.js.map +1 -0
  93. package/dist/common/util/object.d.ts +18 -0
  94. package/dist/common/util/object.js +91 -0
  95. package/dist/common/util/object.js.map +1 -0
  96. package/dist/common/util/patch.d.ts +1 -0
  97. package/dist/common/util/patch.js +215 -0
  98. package/dist/common/util/patch.js.map +1 -0
  99. package/dist/common/util/promise.d.ts +1 -0
  100. package/dist/common/util/promise.js +33 -0
  101. package/dist/common/util/promise.js.map +1 -0
  102. package/dist/common/util/referral.d.ts +1 -0
  103. package/dist/common/util/referral.js +6 -0
  104. package/dist/common/util/referral.js.map +1 -0
  105. package/dist/common/util/server/referral.d.ts +14 -0
  106. package/dist/common/util/server/referral.js +85 -0
  107. package/dist/common/util/server/referral.js.map +1 -0
  108. package/dist/common/util/string.d.ts +9 -0
  109. package/dist/common/util/string.js +90 -0
  110. package/dist/common/util/string.js.map +1 -0
  111. package/dist/common/util/stripe.d.ts +2 -0
  112. package/dist/common/util/stripe.js +19 -0
  113. package/dist/common/util/stripe.js.map +1 -0
  114. package/dist/common/util/tools.d.ts +2 -0
  115. package/dist/common/util/tools.js +13 -0
  116. package/dist/common/util/tools.js.map +1 -0
  117. package/dist/common/websockets/websocket-client.d.ts +40 -0
  118. package/dist/common/websockets/websocket-client.js +187 -0
  119. package/dist/common/websockets/websocket-client.js.map +1 -0
  120. package/dist/common/websockets/websocket-schema.d.ts +3058 -0
  121. package/dist/common/websockets/websocket-schema.js +55 -0
  122. package/dist/common/websockets/websocket-schema.js.map +1 -0
  123. package/dist/config.d.ts +2 -0
  124. package/dist/config.js +8 -0
  125. package/dist/config.js.map +1 -0
  126. package/dist/credentials.d.ts +3 -0
  127. package/dist/credentials.js +33 -0
  128. package/dist/credentials.js.map +1 -0
  129. package/dist/fingerprint.d.ts +1 -0
  130. package/dist/fingerprint.js +43 -0
  131. package/dist/fingerprint.js.map +1 -0
  132. package/dist/index.d.ts +2 -0
  133. package/dist/index.js +75 -0
  134. package/dist/index.js.map +1 -0
  135. package/dist/menu.d.ts +1 -0
  136. package/dist/menu.js +94 -0
  137. package/dist/menu.js.map +1 -0
  138. package/dist/project-files.d.ts +64 -0
  139. package/dist/project-files.js +338 -0
  140. package/dist/project-files.js.map +1 -0
  141. package/dist/tool-handlers.d.ts +11 -0
  142. package/dist/tool-handlers.js +215 -0
  143. package/dist/tool-handlers.js.map +1 -0
  144. package/dist/types.d.ts +7 -0
  145. package/dist/types.js +3 -0
  146. package/dist/types.js.map +1 -0
  147. package/dist/update-codebuff.d.ts +1 -0
  148. package/dist/update-codebuff.js +156 -0
  149. package/dist/update-codebuff.js.map +1 -0
  150. package/dist/web-scraper.d.ts +3 -0
  151. package/dist/web-scraper.js +57 -0
  152. package/dist/web-scraper.js.map +1 -0
  153. package/dist/worker-script-project-context.d.ts +1 -0
  154. package/dist/worker-script-project-context.js +13 -0
  155. package/dist/worker-script-project-context.js.map +1 -0
  156. package/package.json +71 -0
@@ -0,0 +1,215 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.applyPatch = void 0;
4
+ const applyPatch = (oldContent, patch) => {
5
+ const lines = oldContent.split('\n');
6
+ const patchLines = patch.split('\n').filter((line) => !line.startsWith('\\'));
7
+ const indexOfFirstHunk = patchLines.findIndex((line) => line.startsWith('@@'));
8
+ patchLines.splice(0, indexOfFirstHunk);
9
+ if (patch.endsWith('\n')) {
10
+ patchLines.pop();
11
+ }
12
+ const newLines = [];
13
+ let oldIndex = 0;
14
+ for (let i = 0; i < patchLines.length; i++) {
15
+ while (lines[oldIndex] === REMOVED_LINE) {
16
+ oldIndex++;
17
+ }
18
+ const patchLine = patchLines[i];
19
+ if (patchLine.startsWith('@@')) {
20
+ const { contextLines, startIndex, headline } = parseHunk(patchLines, i);
21
+ const maybeStartIndex = startIndex === undefined || startIndex < oldIndex
22
+ ? undefined
23
+ : startIndex;
24
+ const headlineIndex = headline ? lines.indexOf(headline) : undefined;
25
+ const matchIndex = getMatchIndex(lines, contextLines, oldIndex, maybeStartIndex, headlineIndex);
26
+ // Add lines from old content up to the match
27
+ newLines.push(...lines.slice(oldIndex, matchIndex));
28
+ oldIndex = matchIndex;
29
+ }
30
+ else if (patchLine.startsWith('-')) {
31
+ const lineContent = patchLine.slice(1);
32
+ if (oldIndex >= lines.length) {
33
+ // Do nothing, just skip the line.
34
+ }
35
+ else if (lineContent.trim() === lines[oldIndex].trim()) {
36
+ // Remove line (skip it in the output)
37
+ oldIndex++;
38
+ }
39
+ else {
40
+ for (let j = 0; j < 10; j++) {
41
+ if (oldIndex + j >= lines.length) {
42
+ break;
43
+ }
44
+ if (lineContent.trim() === lines[oldIndex + j].trim()) {
45
+ // Remove matching line if it's later in the file.
46
+ lines[oldIndex + j] = REMOVED_LINE;
47
+ break;
48
+ }
49
+ }
50
+ }
51
+ }
52
+ else if (patchLine.startsWith('+')) {
53
+ // Add new line
54
+ newLines.push(patchLine.slice(1));
55
+ }
56
+ else {
57
+ const nextHunkDist = patchLines
58
+ .slice(i + 1)
59
+ .findIndex((line) => line.startsWith('@@'));
60
+ const nextHunkIndex = nextHunkDist === -1 ? patchLines.length : i + nextHunkDist + 1;
61
+ if (patchLines
62
+ .slice(i + 1, nextHunkIndex)
63
+ .every((line) => !line.startsWith('+') && !line.startsWith('-'))) {
64
+ // Skip ending context lines
65
+ continue;
66
+ }
67
+ const lineContent = patchLine.slice(1);
68
+ // Context line
69
+ for (let j = 0; j < 10; j++) {
70
+ if (oldIndex + j >= lines.length) {
71
+ if (oldIndex < lines.length) {
72
+ // No match, just use the corresponding old line.
73
+ newLines.push(lines[oldIndex]);
74
+ oldIndex++;
75
+ }
76
+ break;
77
+ }
78
+ const oldLine = lines[oldIndex + j];
79
+ if (lineContent.trim() === oldLine.trim()) {
80
+ // Remove matching line if it's later in the file.
81
+ lines[oldIndex + j] = REMOVED_LINE;
82
+ newLines.push(oldLine);
83
+ break;
84
+ }
85
+ }
86
+ }
87
+ }
88
+ // Add any remaining lines from the old content
89
+ newLines.push(...lines.slice(oldIndex));
90
+ return newLines.filter((line) => line !== REMOVED_LINE).join('\n');
91
+ };
92
+ exports.applyPatch = applyPatch;
93
+ const REMOVED_LINE = '[REMOVED_LINE]';
94
+ const parseHunkHeader = (line) => {
95
+ let startIndex = undefined;
96
+ let lineCount = undefined;
97
+ let headline = undefined;
98
+ const lineNumberMatch = line.match(/@@ -(\d+)(?:,\d+)? \+\d+(?:,\d+)? @@/);
99
+ const headlineMatch = line.match(/@@ -\d+(?:,\d+)? \+\d+(?:,\d+)? @@ (.*)/);
100
+ if (lineNumberMatch) {
101
+ const startLine = parseInt(lineNumberMatch[1], 10);
102
+ startIndex = startLine - 1; // Adjust for 0-based index
103
+ lineCount = parseInt(lineNumberMatch[2], 10);
104
+ }
105
+ else {
106
+ // console.error('Failed to parse hunk header:', line)
107
+ }
108
+ if (headlineMatch) {
109
+ headline = headlineMatch[1];
110
+ }
111
+ return {
112
+ startIndex,
113
+ lineCount,
114
+ headline,
115
+ };
116
+ };
117
+ const parseHunk = (patchLines, startIndex) => {
118
+ const header = parseHunkHeader(patchLines[startIndex]);
119
+ const contextLines = [];
120
+ let j = startIndex + 1;
121
+ while (j < patchLines.length && !patchLines[j].startsWith('@@')) {
122
+ if (!patchLines[j].startsWith('+')) {
123
+ contextLines.push(patchLines[j].slice(1));
124
+ j++;
125
+ }
126
+ else
127
+ break;
128
+ }
129
+ return {
130
+ ...header,
131
+ contextLines,
132
+ };
133
+ };
134
+ const findContextMatch = (lines, contextLines, startIndex) => {
135
+ for (let i = startIndex; i <= lines.length - contextLines.length; i++) {
136
+ if (contextLines.every((line, j) => lines[i + j] === line)) {
137
+ return i;
138
+ }
139
+ }
140
+ return undefined;
141
+ };
142
+ const findContextMatchTrimmed = (lines, contextLines, startIndex) => {
143
+ for (let i = startIndex; i <= lines.length - contextLines.length; i++) {
144
+ if (
145
+ // Match without whitespace, or if the context line is blank.
146
+ contextLines.every((line, j) => lines[i + j].trim() === line.trim() || line.trim() === '')) {
147
+ return i;
148
+ }
149
+ }
150
+ return undefined;
151
+ };
152
+ const findPartialContextMatch = (lines, contextLines, startIndex) => {
153
+ const window = contextLines.length;
154
+ const contextSet = new Set(contextLines.map((line) => line.trim()));
155
+ let maxMatchCount = 0;
156
+ let maxMatchIndex = undefined;
157
+ for (let i = startIndex; i < lines.length - window; i++) {
158
+ let matchCount = 0;
159
+ for (let j = 0; j < window; j++) {
160
+ if (contextSet.has(lines[i + j].trim())) {
161
+ matchCount++;
162
+ }
163
+ }
164
+ if (maxMatchCount === undefined || matchCount > maxMatchCount) {
165
+ maxMatchCount = matchCount;
166
+ maxMatchIndex = i;
167
+ }
168
+ }
169
+ return maxMatchIndex;
170
+ };
171
+ const getMatchIndex = (lines, contextLines, oldIndex, startIndex, headlineIndex) => {
172
+ let matchIndex;
173
+ if (startIndex !== undefined &&
174
+ (headlineIndex === undefined || startIndex > headlineIndex)) {
175
+ matchIndex = findContextMatch(lines, contextLines, startIndex);
176
+ }
177
+ if (matchIndex === undefined &&
178
+ headlineIndex !== undefined &&
179
+ headlineIndex > oldIndex) {
180
+ matchIndex = findContextMatch(lines, contextLines, headlineIndex);
181
+ }
182
+ if (matchIndex === undefined) {
183
+ matchIndex = findContextMatch(lines, contextLines, oldIndex);
184
+ }
185
+ if (startIndex !== undefined &&
186
+ (headlineIndex === undefined || startIndex > headlineIndex)) {
187
+ matchIndex = findContextMatchTrimmed(lines, contextLines, startIndex);
188
+ }
189
+ if (matchIndex === undefined &&
190
+ headlineIndex !== undefined &&
191
+ headlineIndex > oldIndex) {
192
+ matchIndex = findContextMatchTrimmed(lines, contextLines, headlineIndex);
193
+ }
194
+ if (matchIndex === undefined &&
195
+ headlineIndex !== undefined &&
196
+ headlineIndex > oldIndex) {
197
+ matchIndex = findContextMatchTrimmed(lines, contextLines, oldIndex);
198
+ }
199
+ if (matchIndex === undefined &&
200
+ headlineIndex !== undefined &&
201
+ headlineIndex > oldIndex) {
202
+ matchIndex = findPartialContextMatch(lines, contextLines, headlineIndex);
203
+ }
204
+ if (matchIndex === undefined) {
205
+ matchIndex = findPartialContextMatch(lines, contextLines, oldIndex);
206
+ }
207
+ if (matchIndex === undefined &&
208
+ startIndex !== undefined &&
209
+ startIndex > oldIndex) {
210
+ // We didn't find a match, just try anyway with the parsed line number.
211
+ matchIndex = startIndex;
212
+ }
213
+ return matchIndex ?? oldIndex;
214
+ };
215
+ //# sourceMappingURL=patch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patch.js","sourceRoot":"","sources":["../../src/util/patch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const mapAsync: <T, U>(items: T[], f: (item: T, index: number) => Promise<U>, maxConcurrentRequests?: number) => Promise<U[]>;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mapAsync = void 0;
4
+ const mapAsync = (items, f, maxConcurrentRequests = 20) => {
5
+ let index = 0;
6
+ let currRequests = 0;
7
+ const results = [];
8
+ return new Promise((resolve, reject) => {
9
+ const doWork = () => {
10
+ while (index < items.length && currRequests < maxConcurrentRequests) {
11
+ const itemIndex = index;
12
+ f(items[itemIndex], itemIndex)
13
+ .then((data) => {
14
+ results[itemIndex] = data;
15
+ currRequests--;
16
+ if (index === items.length && currRequests === 0)
17
+ resolve(results);
18
+ else
19
+ doWork();
20
+ })
21
+ .catch(reject);
22
+ index++;
23
+ currRequests++;
24
+ }
25
+ };
26
+ if (items.length === 0)
27
+ resolve([]);
28
+ else
29
+ doWork();
30
+ });
31
+ };
32
+ exports.mapAsync = mapAsync;
33
+ //# sourceMappingURL=promise.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promise.js","sourceRoot":"","sources":["../../src/util/promise.ts"],"names":[],"mappings":";;;AAAO,MAAM,QAAQ,GAAG,CACtB,KAAU,EACV,CAAyC,EACzC,qBAAqB,GAAG,EAAE,EAC1B,EAAE;IACF,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,YAAY,GAAG,CAAC,CAAA;IACpB,MAAM,OAAO,GAAQ,EAAE,CAAA;IAEvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAA+B,EAAE,MAAM,EAAE,EAAE;QAC7D,MAAM,MAAM,GAAG,GAAG,EAAE;YAClB,OAAO,KAAK,GAAG,KAAK,CAAC,MAAM,IAAI,YAAY,GAAG,qBAAqB,EAAE,CAAC;gBACpE,MAAM,SAAS,GAAG,KAAK,CAAA;gBACvB,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;qBAC3B,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;oBACb,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAAA;oBACzB,YAAY,EAAE,CAAA;oBACd,IAAI,KAAK,KAAK,KAAK,CAAC,MAAM,IAAI,YAAY,KAAK,CAAC;wBAAE,OAAO,CAAC,OAAO,CAAC,CAAA;;wBAC7D,MAAM,EAAE,CAAA;gBACf,CAAC,CAAC;qBACD,KAAK,CAAC,MAAM,CAAC,CAAA;gBAEhB,KAAK,EAAE,CAAA;gBACP,YAAY,EAAE,CAAA;YAChB,CAAC;QACH,CAAC,CAAA;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,EAAE,CAAC,CAAA;;YAC9B,MAAM,EAAE,CAAA;IACf,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AA9BY,QAAA,QAAQ,YA8BpB"}
@@ -0,0 +1 @@
1
+ export declare const getReferralLink: (referralCode: string) => string;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getReferralLink = void 0;
4
+ const getReferralLink = (referralCode) => `${process.env.NEXT_PUBLIC_APP_URL}/referrals/${referralCode}`;
5
+ exports.getReferralLink = getReferralLink;
6
+ //# sourceMappingURL=referral.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"referral.js","sourceRoot":"","sources":["../../src/util/referral.ts"],"names":[],"mappings":";;;AAAO,MAAM,eAAe,GAAG,CAAC,YAAoB,EAAU,EAAE,CAC9D,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,cAAc,YAAY,EAAE,CAAA;AADnD,QAAA,eAAe,mBACoC"}
@@ -0,0 +1,14 @@
1
+ export type ReferralStatus = {
2
+ reason: 'Referral Limit Reached' | 'Referrer Not Found' | 'Unknown Error';
3
+ details?: {
4
+ referralCount?: number;
5
+ msg: string;
6
+ };
7
+ } | {
8
+ reason: undefined;
9
+ referralLink: string;
10
+ details: {
11
+ referralCount: number;
12
+ };
13
+ };
14
+ export declare function hasMaxedReferrals(userId: string): Promise<ReferralStatus>;
@@ -0,0 +1,85 @@
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.hasMaxedReferrals = hasMaxedReferrals;
30
+ const drizzle_orm_1 = require("drizzle-orm");
31
+ const schema = __importStar(require("../../db/schema"));
32
+ const db_1 = __importDefault(require("../../db"));
33
+ const referral_1 = require("../referral");
34
+ const env_mjs_1 = require("../../env.mjs");
35
+ async function hasMaxedReferrals(userId) {
36
+ try {
37
+ const referralCount = await db_1.default
38
+ .select({
39
+ count: (0, drizzle_orm_1.sql) `count(*)`,
40
+ })
41
+ .from(schema.referral)
42
+ .where((0, drizzle_orm_1.eq)(schema.referral.referrer_id, userId))
43
+ .then((result) => (result.length > 0 ? result[0].count : 0));
44
+ const user = await db_1.default.query.user.findFirst({
45
+ where: (0, drizzle_orm_1.eq)(schema.user.id, userId),
46
+ columns: {
47
+ referral_code: true,
48
+ referral_limit: true,
49
+ },
50
+ });
51
+ if (!user || !user.referral_code) {
52
+ return {
53
+ reason: 'Referrer Not Found',
54
+ details: {
55
+ referralCount,
56
+ msg: `This referrer isn't registered with us. Please try again and reach out to ${env_mjs_1.env.NEXT_PUBLIC_SUPPORT_EMAIL} if the problem
57
+ persists.`,
58
+ },
59
+ };
60
+ }
61
+ if (referralCount >= user.referral_limit) {
62
+ return {
63
+ reason: 'Referral Limit Reached',
64
+ details: {
65
+ referralCount,
66
+ msg: 'This referrer has maxxed out the number of referrals they can make',
67
+ },
68
+ };
69
+ }
70
+ return {
71
+ reason: undefined,
72
+ referralLink: (0, referral_1.getReferralLink)(user.referral_code),
73
+ details: { referralCount },
74
+ };
75
+ }
76
+ catch (error) {
77
+ return {
78
+ reason: 'Unknown Error',
79
+ details: {
80
+ msg: error instanceof Error ? error.message : String(error),
81
+ },
82
+ };
83
+ }
84
+ }
85
+ //# sourceMappingURL=referral.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"referral.js","sourceRoot":"","sources":["../../../src/util/server/referral.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA,8CAwDC;AA/ED,6CAAqC;AACrC,wDAAyC;AACzC,kDAAyB;AACzB,0CAA6C;AAE7C,2CAAmC;AAkB5B,KAAK,UAAU,iBAAiB,CACrC,MAAc;IAEd,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,YAAE;aAC3B,MAAM,CAAC;YACN,KAAK,EAAE,IAAA,iBAAG,EAAQ,UAAU;SAC7B,CAAC;aACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;aACrB,KAAK,CAAC,IAAA,gBAAE,EAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;aAC9C,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAE9D,MAAM,IAAI,GAAG,MAAM,YAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YACzC,KAAK,EAAE,IAAA,gBAAE,EAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC;YACjC,OAAO,EAAE;gBACP,aAAa,EAAE,IAAI;gBACnB,cAAc,EAAE,IAAI;aACrB;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACjC,OAAO;gBACL,MAAM,EAAE,oBAAoB;gBAC5B,OAAO,EAAE;oBACP,aAAa;oBACb,GAAG,EAAE,6EAA6E,aAAG,CAAC,yBAAyB;oBACrG;iBACX;aACF,CAAA;QACH,CAAC;QAED,IAAI,aAAa,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACzC,OAAO;gBACL,MAAM,EAAE,wBAAwB;gBAChC,OAAO,EAAE;oBACP,aAAa;oBACb,GAAG,EAAE,oEAAoE;iBAC1E;aACF,CAAA;QACH,CAAC;QAID,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,YAAY,EAAE,IAAA,0BAAe,EAAC,IAAI,CAAC,aAAa,CAAC;YACjD,OAAO,EAAE,EAAE,aAAa,EAAE;SAC3B,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,MAAM,EAAE,eAAe;YACvB,OAAO,EAAE;gBACP,GAAG,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC5D;SACF,CAAA;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare const truncateString: (str: string, maxLength: number) => string;
2
+ export declare const replaceNonStandardPlaceholderComments: (content: string, replacement: string) => string;
3
+ export declare const randBoolFromStr: (str: string) => boolean;
4
+ export declare const pluralize: (count: number, word: string) => string;
5
+ /**
6
+ * Safely replaces all occurrences of a search string with a replacement string,
7
+ * escaping special replacement patterns (like $) in the replacement string.
8
+ */
9
+ export declare const safeReplace: (content: string, searchStr: string, replaceStr: string) => string;
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.safeReplace = exports.pluralize = exports.randBoolFromStr = exports.replaceNonStandardPlaceholderComments = exports.truncateString = void 0;
4
+ const lodash_1 = require("lodash");
5
+ const truncateString = (str, maxLength) => {
6
+ if (str.length <= maxLength) {
7
+ return str;
8
+ }
9
+ return str.slice(0, maxLength) + '...';
10
+ };
11
+ exports.truncateString = truncateString;
12
+ const replaceNonStandardPlaceholderComments = (content, replacement) => {
13
+ const commentPatterns = [
14
+ // JSX comments (match this first)
15
+ {
16
+ regex: /{\s*\/\*\s*\.{3}.*(?:rest|unchanged|keep|file|existing|some).*(?:\s*\.{3})?\s*\*\/\s*}/gi,
17
+ placeholder: replacement,
18
+ },
19
+ // C-style comments (C, C++, Java, JavaScript, TypeScript, etc.)
20
+ {
21
+ regex: /\/\/\s*\.{3}.*(?:rest|unchanged|keep|file|existing|some).*(?:\s*\.{3})?/gi,
22
+ placeholder: replacement,
23
+ },
24
+ {
25
+ regex: /\/\*\s*\.{3}.*(?:rest|unchanged|keep|file|existing|some).*(?:\s*\.{3})?\s*\*\//gi,
26
+ placeholder: replacement,
27
+ },
28
+ // Python, Ruby, R comments
29
+ {
30
+ regex: /#\s*\.{3}.*(?:rest|unchanged|keep|file|existing|some).*(?:\s*\.{3})?/gi,
31
+ placeholder: replacement,
32
+ },
33
+ // HTML-style comments
34
+ {
35
+ regex: /<!--\s*\.{3}.*(?:rest|unchanged|keep|file|existing|some).*(?:\s*\.{3})?\s*-->/gi,
36
+ placeholder: replacement,
37
+ },
38
+ // SQL, Haskell, Lua comments
39
+ {
40
+ regex: /--\s*\.{3}.*(?:rest|unchanged|keep|file|existing|some).*(?:\s*\.{3})?/gi,
41
+ placeholder: replacement,
42
+ },
43
+ // MATLAB comments
44
+ {
45
+ regex: /%\s*\.{3}.*(?:rest|unchanged|keep|file|existing|some).*(?:\s*\.{3})?/gi,
46
+ placeholder: replacement,
47
+ },
48
+ ];
49
+ let updatedContent = content;
50
+ for (const { regex, placeholder } of commentPatterns) {
51
+ updatedContent = updatedContent.replaceAll(regex, placeholder);
52
+ }
53
+ return updatedContent;
54
+ };
55
+ exports.replaceNonStandardPlaceholderComments = replaceNonStandardPlaceholderComments;
56
+ const randBoolFromStr = (str) => {
57
+ return (0, lodash_1.sumBy)(str.split(''), (char) => char.charCodeAt(0)) % 2 === 0;
58
+ };
59
+ exports.randBoolFromStr = randBoolFromStr;
60
+ const pluralize = (count, word) => {
61
+ if (count === 1)
62
+ return `${count} ${word}`;
63
+ // Handle words ending in 'y' (unless preceded by a vowel)
64
+ if (word.endsWith('y') && !word.match(/[aeiou]y$/)) {
65
+ return `${count} ${word.slice(0, -1) + 'ies'}`;
66
+ }
67
+ // Handle words ending in s, sh, ch, x, z, o
68
+ if (word.match(/[sxz]$/) || word.match(/[cs]h$/) || word.match(/o$/)) {
69
+ return `${count} ${word + 'es'}`;
70
+ }
71
+ // Handle words ending in f/fe
72
+ if (word.endsWith('f')) {
73
+ return `${count} ${word.slice(0, -1) + 'ves'}`;
74
+ }
75
+ if (word.endsWith('fe')) {
76
+ return `${count} ${word.slice(0, -2) + 'ves'}`;
77
+ }
78
+ return `${count} ${word + 's'}`;
79
+ };
80
+ exports.pluralize = pluralize;
81
+ /**
82
+ * Safely replaces all occurrences of a search string with a replacement string,
83
+ * escaping special replacement patterns (like $) in the replacement string.
84
+ */
85
+ const safeReplace = (content, searchStr, replaceStr) => {
86
+ const escapedReplaceStr = replaceStr.replace(/\$/g, '$$$$');
87
+ return content.replace(searchStr, escapedReplaceStr);
88
+ };
89
+ exports.safeReplace = safeReplace;
90
+ //# sourceMappingURL=string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string.js","sourceRoot":"","sources":["../../src/util/string.ts"],"names":[],"mappings":";;;AAAA,mCAA8B;AAEvB,MAAM,cAAc,GAAG,CAAC,GAAW,EAAE,SAAiB,EAAE,EAAE;IAC/D,IAAI,GAAG,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,KAAK,CAAA;AACxC,CAAC,CAAA;AALY,QAAA,cAAc,kBAK1B;AAEM,MAAM,qCAAqC,GAAG,CACnD,OAAe,EACf,WAAmB,EACX,EAAE;IACV,MAAM,eAAe,GAAG;QACtB,kCAAkC;QAClC;YACE,KAAK,EACH,0FAA0F;YAC5F,WAAW,EAAE,WAAW;SACzB;QACD,gEAAgE;QAChE;YACE,KAAK,EACH,2EAA2E;YAC7E,WAAW,EAAE,WAAW;SACzB;QACD;YACE,KAAK,EACH,kFAAkF;YACpF,WAAW,EAAE,WAAW;SACzB;QACD,2BAA2B;QAC3B;YACE,KAAK,EACH,wEAAwE;YAC1E,WAAW,EAAE,WAAW;SACzB;QACD,sBAAsB;QACtB;YACE,KAAK,EACH,iFAAiF;YACnF,WAAW,EAAE,WAAW;SACzB;QACD,6BAA6B;QAC7B;YACE,KAAK,EACH,yEAAyE;YAC3E,WAAW,EAAE,WAAW;SACzB;QACD,kBAAkB;QAClB;YACE,KAAK,EACH,wEAAwE;YAC1E,WAAW,EAAE,WAAW;SACzB;KACF,CAAA;IAED,IAAI,cAAc,GAAG,OAAO,CAAA;IAE5B,KAAK,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,eAAe,EAAE,CAAC;QACrD,cAAc,GAAG,cAAc,CAAC,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;IAChE,CAAC;IAED,OAAO,cAAc,CAAA;AACvB,CAAC,CAAA;AAvDY,QAAA,qCAAqC,yCAuDjD;AAEM,MAAM,eAAe,GAAG,CAAC,GAAW,EAAE,EAAE;IAC7C,OAAO,IAAA,cAAK,EAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;AACrE,CAAC,CAAA;AAFY,QAAA,eAAe,mBAE3B;AAEM,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,IAAY,EAAE,EAAE;IACvD,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,GAAG,KAAK,IAAI,IAAI,EAAE,CAAA;IAE1C,0DAA0D;IAC1D,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;QACnD,OAAO,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAA;IAChD,CAAC;IAED,4CAA4C;IAC5C,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACrE,OAAO,GAAG,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,CAAA;IAClC,CAAC;IAED,8BAA8B;IAC9B,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAA;IAChD,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAA;IAChD,CAAC;IAED,OAAO,GAAG,KAAK,IAAI,IAAI,GAAG,GAAG,EAAE,CAAA;AACjC,CAAC,CAAA;AAtBY,QAAA,SAAS,aAsBrB;AAED;;;GAGG;AACI,MAAM,WAAW,GAAG,CACzB,OAAe,EACf,SAAiB,EACjB,UAAkB,EACV,EAAE;IACV,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAC3D,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAA;AACtD,CAAC,CAAA;AAPY,QAAA,WAAW,eAOvB"}
@@ -0,0 +1,2 @@
1
+ import Stripe from 'stripe';
2
+ export declare const stripeServer: Stripe;
@@ -0,0 +1,19 @@
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
+ const stripe_1 = __importDefault(require("stripe"));
8
+ const env_mjs_1 = require("../env.mjs");
9
+ exports.stripeServer = new stripe_1.default(env_mjs_1.env.STRIPE_SECRET_KEY, {
10
+ apiVersion: '2024-06-20',
11
+ });
12
+ // stripeServer.on('request', (request) => {
13
+ // console.log('Stripe API Request', request)
14
+ // })
15
+ // // Listen for response events
16
+ // stripeServer.on('response', (response) => {
17
+ // console.log('Stripe API Response', response)
18
+ // })
19
+ //# sourceMappingURL=stripe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stripe.js","sourceRoot":"","sources":["../../src/util/stripe.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA2B;AAE3B,wCAAgC;AAEnB,QAAA,YAAY,GAAG,IAAI,gBAAM,CAAC,aAAG,CAAC,iBAAiB,EAAE;IAC5D,UAAU,EAAE,YAAY;CACzB,CAAC,CAAA;AAEF,4CAA4C;AAC5C,+CAA+C;AAC/C,KAAK;AAEL,gCAAgC;AAChC,8CAA8C;AAC9C,iDAAiD;AACjD,KAAK"}
@@ -0,0 +1,2 @@
1
+ import { Message } from 'src/actions';
2
+ export declare const didClientUseTool: (message: Message) => boolean;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.didClientUseTool = void 0;
4
+ const ts_pattern_1 = require("ts-pattern");
5
+ const constants_1 = require("src/constants");
6
+ const didClientUseTool = (message) => (0, ts_pattern_1.match)(message)
7
+ .with({
8
+ role: 'user',
9
+ content: ts_pattern_1.P.string.and(ts_pattern_1.P.when((content) => content.includes(constants_1.TOOL_RESULT_MARKER))),
10
+ }, () => true)
11
+ .otherwise(() => false);
12
+ exports.didClientUseTool = didClientUseTool;
13
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/util/tools.ts"],"names":[],"mappings":";;;AACA,2CAAqC;AACrC,6CAAkD;AAE3C,MAAM,gBAAgB,GAAG,CAAC,OAAgB,EAAE,EAAE,CACnD,IAAA,kBAAK,EAAC,OAAO,CAAC;KACX,IAAI,CACH;IACE,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,cAAC,CAAC,MAAM,CAAC,GAAG,CACnB,cAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAE,OAAkB,CAAC,QAAQ,CAAC,8BAAkB,CAAC,CAAC,CACtE;CACF,EACD,GAAG,EAAE,CAAC,IAAI,CACX;KACA,SAAS,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAA;AAXd,QAAA,gBAAgB,oBAWF"}
@@ -0,0 +1,40 @@
1
+ import { WebSocket } from 'ws';
2
+ import { ServerAction, ClientAction } 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
+ constructor(url: string, onError: () => void);
29
+ get state(): ReadyState;
30
+ close(): void;
31
+ connect(): Promise<void>;
32
+ waitAndReconnect(): void;
33
+ receiveMessage(msg: ServerMessage): void;
34
+ sendMessage<T extends ClientMessageType>(type: T, data: Omit<ClientMessage<T>, 'type' | 'txid'>): Promise<void>;
35
+ sendAction(action: ClientAction): Promise<void>;
36
+ subscribe<T extends ServerAction['type']>(action: T, callback: (action: Extract<ServerAction, {
37
+ type: T;
38
+ }>) => void): () => void;
39
+ }
40
+ export {};