codebuff 1.0.326 → 1.0.327
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/code-map/test-langs/test.d.ts +12 -0
- package/dist/code-map/test-langs/test.d.ts.map +1 -0
- package/dist/code-map/test-langs/test.js +23 -0
- package/dist/code-map/test-langs/test.js.map +1 -0
- package/dist/common/actions.d.ts +58 -58
- package/dist/common/analytics.d.ts +1 -1
- package/dist/common/browser-actions.d.ts +277 -277
- package/dist/common/db/env.d.mts +4 -0
- package/dist/common/db/env.mjs +26 -0
- package/dist/common/db/env.mjs.map +1 -0
- package/dist/common/env.d.mts +13 -0
- package/dist/common/env.mjs +43 -0
- package/dist/common/env.mjs.map +1 -0
- package/dist/common/src/actions.d.ts +2673 -0
- package/dist/common/src/actions.d.ts.map +1 -0
- package/dist/common/src/actions.js +167 -0
- package/dist/common/src/actions.js.map +1 -0
- package/dist/common/src/analytics.d.ts +6 -0
- package/dist/common/src/analytics.d.ts.map +1 -0
- package/dist/common/src/analytics.js +60 -0
- package/dist/common/src/analytics.js.map +1 -0
- package/dist/common/src/api-keys/constants.d.ts +9 -0
- package/dist/common/src/api-keys/constants.d.ts.map +1 -0
- package/dist/common/src/api-keys/constants.js +26 -0
- package/dist/common/src/api-keys/constants.js.map +1 -0
- package/dist/common/src/api-keys/crypto.d.ts +25 -0
- package/dist/common/src/api-keys/crypto.d.ts.map +1 -0
- package/dist/common/src/api-keys/crypto.js +186 -0
- package/dist/common/src/api-keys/crypto.js.map +1 -0
- package/dist/common/src/browser-actions.d.ts +4416 -0
- package/dist/common/src/browser-actions.d.ts.map +1 -0
- package/dist/common/src/browser-actions.js +343 -0
- package/dist/common/src/browser-actions.js.map +1 -0
- package/dist/common/src/constants/analytics-events.d.ts +28 -0
- package/dist/common/src/constants/analytics-events.d.ts.map +1 -0
- package/dist/common/src/constants/analytics-events.js +36 -0
- package/dist/common/src/constants/analytics-events.js.map +1 -0
- package/dist/common/src/constants/grant-priorities.d.ts +3 -0
- package/dist/common/src/constants/grant-priorities.d.ts.map +1 -0
- package/dist/common/src/constants/grant-priorities.js +11 -0
- package/dist/common/src/constants/grant-priorities.js.map +1 -0
- package/dist/common/src/constants/tools.d.ts +20 -0
- package/dist/common/src/constants/tools.d.ts.map +1 -0
- package/dist/common/src/constants/tools.js +47 -0
- package/dist/common/src/constants/tools.js.map +1 -0
- package/dist/common/src/constants.d.ts +152 -0
- package/dist/common/src/constants.d.ts.map +1 -0
- package/dist/common/src/constants.js +222 -0
- package/dist/common/src/constants.js.map +1 -0
- package/dist/common/src/db/drizzle.config.d.ts +3 -0
- package/dist/common/src/db/drizzle.config.d.ts.map +1 -0
- package/dist/common/src/db/drizzle.config.js +17 -0
- package/dist/common/src/db/drizzle.config.js.map +1 -0
- package/dist/common/src/db/index.d.ts +7 -0
- package/dist/common/src/db/index.d.ts.map +1 -0
- package/dist/common/src/db/index.js +35 -0
- package/dist/common/src/db/index.js.map +1 -0
- package/dist/common/src/db/schema.d.ts +2289 -0
- package/dist/common/src/db/schema.d.ts.map +1 -0
- package/dist/common/src/db/schema.js +296 -0
- package/dist/common/src/db/schema.js.map +1 -0
- package/dist/common/src/db/transaction.d.ts +13 -0
- package/dist/common/src/db/transaction.d.ts.map +1 -0
- package/dist/common/src/db/transaction.js +36 -0
- package/dist/common/src/db/transaction.js.map +1 -0
- package/dist/common/src/json-config/__tests__/constants.test.d.ts +2 -0
- package/dist/common/src/json-config/__tests__/constants.test.d.ts.map +1 -0
- package/dist/common/src/json-config/__tests__/constants.test.js +273 -0
- package/dist/common/src/json-config/__tests__/constants.test.js.map +1 -0
- package/dist/common/src/json-config/__tests__/stringify-schema.test.d.ts +2 -0
- package/dist/common/src/json-config/__tests__/stringify-schema.test.d.ts.map +1 -0
- package/dist/common/src/json-config/__tests__/stringify-schema.test.js +66 -0
- package/dist/common/src/json-config/__tests__/stringify-schema.test.js.map +1 -0
- package/dist/common/src/json-config/constants.d.ts +138 -0
- package/dist/common/src/json-config/constants.d.ts.map +1 -0
- package/dist/common/src/json-config/constants.js +78 -0
- package/dist/common/src/json-config/constants.js.map +1 -0
- package/dist/common/src/json-config/stringify-schema.d.ts +10 -0
- package/dist/common/src/json-config/stringify-schema.d.ts.map +1 -0
- package/dist/common/src/json-config/stringify-schema.js +131 -0
- package/dist/common/src/json-config/stringify-schema.js.map +1 -0
- package/dist/common/src/project-file-tree.d.ts +12 -0
- package/dist/common/src/project-file-tree.d.ts.map +1 -0
- package/dist/common/src/project-file-tree.js +212 -0
- package/dist/common/src/project-file-tree.js.map +1 -0
- package/dist/common/src/types/agent-state.d.ts +227 -0
- package/dist/common/src/types/agent-state.d.ts.map +1 -0
- package/dist/common/src/types/agent-state.js +34 -0
- package/dist/common/src/types/agent-state.js.map +1 -0
- package/dist/common/src/types/grant.d.ts +3 -0
- package/dist/common/src/types/grant.d.ts.map +1 -0
- package/dist/common/src/types/grant.js +11 -0
- package/dist/common/src/types/grant.js.map +1 -0
- package/dist/common/src/types/message.d.ts +320 -0
- package/dist/common/src/types/message.d.ts.map +1 -0
- package/dist/common/src/types/message.js +60 -0
- package/dist/common/src/types/message.js.map +1 -0
- package/dist/common/src/types/organization.d.ts +106 -0
- package/dist/common/src/types/organization.d.ts.map +1 -0
- package/dist/common/src/types/organization.js +3 -0
- package/dist/common/src/types/organization.js.map +1 -0
- package/dist/common/src/types/referral.d.ts +3 -0
- package/dist/common/src/types/referral.d.ts.map +1 -0
- package/dist/common/src/types/referral.js +5 -0
- package/dist/common/src/types/referral.js.map +1 -0
- package/dist/common/src/types/tools.d.ts +6 -0
- package/dist/common/src/types/tools.d.ts.map +1 -0
- package/dist/common/src/types/tools.js +3 -0
- package/dist/common/src/types/tools.js.map +1 -0
- package/dist/common/src/types/usage.d.ts +41 -0
- package/dist/common/src/types/usage.d.ts.map +1 -0
- package/dist/common/src/types/usage.js +16 -0
- package/dist/common/src/types/usage.js.map +1 -0
- package/dist/common/src/util/__tests__/messages.test.d.ts +2 -0
- package/dist/common/src/util/__tests__/messages.test.d.ts.map +1 -0
- package/dist/common/src/util/__tests__/messages.test.js +70 -0
- package/dist/common/src/util/__tests__/messages.test.js.map +1 -0
- package/dist/common/src/util/__tests__/saxy.test.d.ts +2 -0
- package/dist/common/src/util/__tests__/saxy.test.d.ts.map +1 -0
- package/dist/common/src/util/__tests__/saxy.test.js +906 -0
- package/dist/common/src/util/__tests__/saxy.test.js.map +1 -0
- package/dist/common/src/util/__tests__/string.test.d.ts +2 -0
- package/dist/common/src/util/__tests__/string.test.d.ts.map +1 -0
- package/dist/common/src/util/__tests__/string.test.js +82 -0
- package/dist/common/src/util/__tests__/string.test.js.map +1 -0
- package/dist/common/src/util/array.d.ts +7 -0
- package/dist/common/src/util/array.d.ts.map +1 -0
- package/dist/common/src/util/array.js +32 -0
- package/dist/common/src/util/array.js.map +1 -0
- package/dist/common/src/util/changes.d.ts +9 -0
- package/dist/common/src/util/changes.d.ts.map +1 -0
- package/dist/common/src/util/changes.js +87 -0
- package/dist/common/src/util/changes.js.map +1 -0
- package/dist/common/src/util/credentials.d.ts +26 -0
- package/dist/common/src/util/credentials.d.ts.map +1 -0
- package/dist/common/src/util/credentials.js +24 -0
- package/dist/common/src/util/credentials.js.map +1 -0
- package/dist/common/src/util/currency.d.ts +15 -0
- package/dist/common/src/util/currency.d.ts.map +1 -0
- package/dist/common/src/util/currency.js +23 -0
- package/dist/common/src/util/currency.js.map +1 -0
- package/dist/common/src/util/dates.d.ts +11 -0
- package/dist/common/src/util/dates.d.ts.map +1 -0
- package/dist/common/src/util/dates.js +22 -0
- package/dist/common/src/util/dates.js.map +1 -0
- package/dist/common/src/util/file.d.ts +163 -0
- package/dist/common/src/util/file.d.ts.map +1 -0
- package/dist/common/src/util/file.js +192 -0
- package/dist/common/src/util/file.js.map +1 -0
- package/dist/common/src/util/git.d.ts +7 -0
- package/dist/common/src/util/git.d.ts.map +1 -0
- package/dist/common/src/util/git.js +81 -0
- package/dist/common/src/util/git.js.map +1 -0
- package/dist/common/src/util/logger.d.ts +9 -0
- package/dist/common/src/util/logger.d.ts.map +1 -0
- package/dist/common/src/util/logger.js +52 -0
- package/dist/common/src/util/logger.js.map +1 -0
- package/dist/common/src/util/lru-cache.d.ts +31 -0
- package/dist/common/src/util/lru-cache.d.ts.map +1 -0
- package/dist/common/src/util/lru-cache.js +68 -0
- package/dist/common/src/util/lru-cache.js.map +1 -0
- package/dist/common/src/util/messages.d.ts +12 -0
- package/dist/common/src/util/messages.d.ts.map +1 -0
- package/dist/common/src/util/messages.js +81 -0
- package/dist/common/src/util/messages.js.map +1 -0
- package/dist/common/src/util/min-heap.d.ts +16 -0
- package/dist/common/src/util/min-heap.d.ts.map +1 -0
- package/dist/common/src/util/min-heap.js +73 -0
- package/dist/common/src/util/min-heap.js.map +1 -0
- package/dist/common/src/util/object.d.ts +19 -0
- package/dist/common/src/util/object.d.ts.map +1 -0
- package/dist/common/src/util/object.js +91 -0
- package/dist/common/src/util/object.js.map +1 -0
- package/dist/common/src/util/patch.d.ts +2 -0
- package/dist/common/src/util/patch.d.ts.map +1 -0
- package/dist/common/src/util/patch.js +215 -0
- package/dist/common/src/util/patch.js.map +1 -0
- package/dist/common/src/util/promise.d.ts +17 -0
- package/dist/common/src/util/promise.d.ts.map +1 -0
- package/dist/common/src/util/promise.js +51 -0
- package/dist/common/src/util/promise.js.map +1 -0
- package/dist/common/src/util/random.d.ts +2 -0
- package/dist/common/src/util/random.d.ts.map +1 -0
- package/dist/common/src/util/random.js +17 -0
- package/dist/common/src/util/random.js.map +1 -0
- package/dist/common/src/util/referral.d.ts +2 -0
- package/dist/common/src/util/referral.d.ts.map +1 -0
- package/dist/common/src/util/referral.js +6 -0
- package/dist/common/src/util/referral.js.map +1 -0
- package/dist/common/src/util/saxy.d.ts +179 -0
- package/dist/common/src/util/saxy.d.ts.map +1 -0
- package/dist/common/src/util/saxy.js +548 -0
- package/dist/common/src/util/saxy.js.map +1 -0
- package/dist/common/src/util/string.d.ts +80 -0
- package/dist/common/src/util/string.d.ts.map +1 -0
- package/dist/common/src/util/string.js +264 -0
- package/dist/common/src/util/string.js.map +1 -0
- package/dist/common/src/util/stripe.d.ts +4 -0
- package/dist/common/src/util/stripe.d.ts.map +1 -0
- package/dist/common/src/util/stripe.js +22 -0
- package/dist/common/src/util/stripe.js.map +1 -0
- package/dist/common/src/util/sync-failure.d.ts +2 -0
- package/dist/common/src/util/sync-failure.d.ts.map +1 -0
- package/dist/common/src/util/sync-failure.js +57 -0
- package/dist/common/src/util/sync-failure.js.map +1 -0
- package/dist/common/src/websockets/websocket-client.d.ts +43 -0
- package/dist/common/src/websockets/websocket-client.d.ts.map +1 -0
- package/dist/common/src/websockets/websocket-client.js +216 -0
- package/dist/common/src/websockets/websocket-client.js.map +1 -0
- package/dist/common/src/websockets/websocket-schema.d.ts +5159 -0
- package/dist/common/src/websockets/websocket-schema.d.ts.map +1 -0
- package/dist/common/src/websockets/websocket-schema.js +55 -0
- package/dist/common/src/websockets/websocket-schema.js.map +1 -0
- package/dist/common/tsconfig.tsbuildinfo +1 -0
- package/dist/common/types/message.d.ts +16 -16
- package/dist/common/websockets/websocket-schema.d.ts +134 -134
- package/dist/index.js +5 -5
- package/dist/terminal/base.js +27 -14
- package/dist/terminal/base.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,264 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string.js","sourceRoot":"","sources":["../../../src/util/string.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,216 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket-client.js","sourceRoot":"","sources":["../../../src/websockets/websocket-client.ts"],"names":[],"mappings":";;;AA2BA,kCAaC;AAxCD,2BAA8B;AAS9B,4BAA4B;AAC5B,MAAM,eAAe,GAAG,KAAK,CAAA;AAE7B,MAAM,UAAU,GAAG,OAAO,CAAA;AAE1B,MAAM,iBAAiB,GAAG,KAAK,CAAA;AAa/B,SAAgB,WAAW,CAAC,KAAiB;IAC3C,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,cAAS,CAAC,UAAU;YACvB,OAAO,YAAY,CAAA;QACrB,KAAK,cAAS,CAAC,IAAI;YACjB,OAAO,MAAM,CAAA;QACf,KAAK,cAAS,CAAC,OAAO;YACpB,OAAO,SAAS,CAAA;QAClB,KAAK,cAAS,CAAC,MAAM;YACnB,OAAO,QAAQ,CAAA;QACjB;YACE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;IAC/C,CAAC;AACH,CAAC;AAQD;;oCAEoC;AACpC,MAAa,iBAAiB;IAC5B,EAAE,CAAY;IACd,GAAG,CAAQ;IACX,8CAA8C;IAC9C,WAAW,CAA+D;IAC1E,IAAI,CAAQ;IACZ,yDAAyD;IACzD,IAAI,CAA6B;IACjC,cAAc,CAAM;IACpB,SAAS,CAAM;IACf,QAAQ,GAAG,KAAK,CAAA;IAChB,OAAO,CAAY;IACnB,WAAW,CAAY;IAEvB,YAAY,GAAW,EAAE,OAAmB,EAAE,WAAuB;QACnE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;QACb,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,EAAE,CAAA;QACrB,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAE,CAAA;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;IAChC,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,EAAE,CAAC,UAAwB,CAAA;IACzC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAA;QACvC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IACnC,CAAC;IAED,OAAO;QACL,+DAA+D;QAC/D,iDAAiD;QACjD,IAAI,CAAC,EAAE,GAAG,IAAI,cAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACjC,IAAI,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,EAAE,EAAE,EAAE;YACzB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAA;gBACrB,IAAI,CAAC,WAAW,EAAE,CAAA;YACpB,CAAC;YACD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAW,CAAC,CAAC,CAAA;QACjD,CAAC,CAAA;QACD,IAAI,CAAC,EAAE,CAAC,OAAO,GAAG,CAAC,EAAE,EAAE,EAAE;YACvB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACnB,IAAI,CAAC,OAAO,EAAE,CAAA;gBACd,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;YACtB,CAAC;YACD,yEAAyE;YACzE,+DAA+D;YAC/D,IAAI,CAAC,gBAAgB,EAAE,CAAA;QACzB,CAAC,CAAA;QACD,IAAI,CAAC,EAAE,CAAC,OAAO,GAAG,CAAC,EAAE,EAAE,EAAE;YACvB,kFAAkF;YAClF,IAAI,eAAe,EAAE,CAAC;gBACpB,OAAO,CAAC,IAAI,CAAC,kCAAkC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC,CAAA;YACzE,CAAC;YACD,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAE7B,0EAA0E;YAC1E,gFAAgF;YAChF,oFAAoF;YACpF,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;gBACjD,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;gBACzB,qEAAqE;gBACrE,0DAA0D;gBAC1D,GAAG,CAAC,OAAO,EAAE,CAAA;gBACb,iDAAiD;YACnD,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAA;YAEjB,iDAAiD;YACjD,IAAI,EAAE,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;gBACrB,IAAI,CAAC,gBAAgB,EAAE,CAAA;YACzB,CAAC;QACH,CAAC,CAAA;QACD,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACnC,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,EAAE;gBACvB,IAAI,eAAe,EAAE,CAAC;oBACpB,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;gBACvC,CAAC;gBACD,IAAI,CAAC,SAAS,GAAG,WAAW,CAC1B,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,EACxD,KAAK,CACN,CAAA;gBAED,OAAO,EAAE,CAAA;YACX,CAAC,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,gBAAgB;QACd,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC;YAChC,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE;gBACpC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAA;gBAC/B,IAAI,CAAC,OAAO,EAAE,CAAA;YAChB,CAAC,EAAE,iBAAiB,CAAC,CAAA;QACvB,CAAC;IACH,CAAC;IAED,cAAc;QACZ,4CAA4C;QAC5C,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,KAAK,cAAS,CAAC,MAAM,EAAE,CAAC;YAC/C,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,mDAAmD,CAAC,CAAA;QAC1E,CAAC;QAED,mCAAmC;QACnC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YAC3B,OAAO,CAAC,KAAK,CAAC,mDAAmD,EAAE,GAAG,CAAC,CAAA;YACvE,6CAA6C;YAC7C,IAAI,CAAC,gBAAgB,EAAE,CAAA;QACzB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,cAAc,CAAC,GAAkB;QAC/B,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAA;QACzD,CAAC;QACD,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAA;gBACvB,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;gBAC3D,KAAK,MAAM,QAAQ,IAAI,WAAW,EAAE,CAAC;oBACnC,QAAQ,CAAC,MAAM,CAAC,CAAA;gBAClB,CAAC;gBACD,OAAM;YACR,CAAC;YACD,KAAK,KAAK,CAAC,CAAC,CAAC;gBACX,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;oBACrB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;oBACnC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;wBAChB,sEAAsE;wBACtE,OAAO,CAAC,IAAI,CAAC,mCAAmC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAA;oBAC9D,CAAC;yBAAM,CAAC;wBACN,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;wBACzB,IAAI,GAAG,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;4BACtB,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;wBAClC,CAAC;6BAAM,CAAC;4BACN,GAAG,CAAC,OAAO,EAAE,CAAA;wBACf,CAAC;wBACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;oBAC5B,CAAC;gBACH,CAAC;gBACD,OAAM;YACR,CAAC;YACD;gBACE,OAAO,CAAC,IAAI,CAAC,gDAAgD,GAAG,EAAE,CAAC,CAAA;QACvE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CACf,IAAO,EACP,IAA6C;QAE7C,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,4BAA4B,IAAI,YAAY,EAAE,IAAI,CAAC,CAAA;QAClE,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,KAAK,cAAS,CAAC,IAAI,EAAE,CAAC;YAClC,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;gBACxB,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;oBAC9B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;oBACtB,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,IAAI,aAAa,CAAC,CAAC,CAAA;gBACrE,CAAC,EAAE,UAAU,CAAC,CAAA;gBACd,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;gBACjD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAA;YACvD,CAAC,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,qEAAqE;YACrE,wEAAwE;YACxE,6DAA6D;QAC/D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAoB;QACnC,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;gBACtC,IAAI,EAAE,MAAM;aACb,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,yCAAyC;YACzC,OAAO,CAAC,KAAK,CACX,uBAAuB,EACvB,MAAM,CAAC,IAAI,EACX,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CACtE,CAAA;YAED,OAAO,CAAC,GAAG,EAAE,CAAA;YACb,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAA;YACnD,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAA;YACnE,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAA;YAClD,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAA;YAClD,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAA;YAElD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;IACH,CAAC;IAED,SAAS,CACP,MAAS,EACT,QAA8D;QAE9D,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;QAC1D,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE;YAC3B,GAAG,eAAe;YAClB,QAA0C;SAC3C,CAAC,CAAA;QAEF,OAAO,GAAG,EAAE;YACV,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAA;YACtE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;QAC9C,CAAC,CAAA;IACH,CAAC;CACF;AArND,8CAqNC"}
|