@appland/appmap 3.17.0 → 3.18.1
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/CHANGELOG.md +29 -0
- package/built/appmap.html +1 -1
- package/built/main.js.map +1 -1
- package/built/package.json +1 -1
- package/built/src/cmds/agentInstaller/agentInstaller.js.map +1 -1
- package/built/src/cmds/agentInstaller/agentInstallerProcedure.js +1 -4
- package/built/src/cmds/agentInstaller/agentInstallerProcedure.js.map +1 -1
- package/built/src/cmds/agentInstaller/commandStruct.js +10 -1
- package/built/src/cmds/agentInstaller/commandStruct.js.map +1 -1
- package/built/src/cmds/agentInstaller/gradleInstaller.js +0 -7
- package/built/src/cmds/agentInstaller/gradleInstaller.js.map +1 -1
- package/built/src/cmds/agentInstaller/javaScriptAgentInstaller.js +0 -12
- package/built/src/cmds/agentInstaller/javaScriptAgentInstaller.js.map +1 -1
- package/built/src/cmds/agentInstaller/mavenInstaller.js +0 -7
- package/built/src/cmds/agentInstaller/mavenInstaller.js.map +1 -1
- package/built/src/cmds/agentInstaller/pythonAgentInstaller.js +0 -12
- package/built/src/cmds/agentInstaller/pythonAgentInstaller.js.map +1 -1
- package/built/src/cmds/agentInstaller/rubyAgentInstaller.js +0 -6
- package/built/src/cmds/agentInstaller/rubyAgentInstaller.js.map +1 -1
- package/built/src/cmds/record/createRecording.js +5 -1
- package/built/src/cmds/record/createRecording.js.map +1 -1
- package/built/src/fingerprint/canonicalize/info.js +2 -2
- package/built/src/fingerprint/canonicalize/info.js.map +1 -1
- package/built/src/fingerprint/canonicalize/sqlNormalized.js +2 -2
- package/built/src/fingerprint/canonicalize/sqlNormalized.js.map +1 -1
- package/built/src/fingerprint/canonicalize/sqlTables.js +2 -2
- package/built/src/fingerprint/canonicalize/sqlTables.js.map +1 -1
- package/built/src/fingerprint/canonicalize/trace.js +3 -3
- package/built/src/fingerprint/canonicalize/trace.js.map +1 -1
- package/built/src/fingerprint/canonicalize/update.js +3 -3
- package/built/src/fingerprint/canonicalize/update.js.map +1 -1
- package/built/src/functionStats.js +3 -3
- package/built/src/functionStats.js.map +1 -1
- package/built/src/search/matchSpec.js +5 -5
- package/built/src/search/matchSpec.js.map +1 -1
- package/built/src/search/trigram.js +2 -2
- package/built/src/search/trigram.js.map +1 -1
- package/package.json +2 -2
- package/built/src/database.js +0 -172
- package/built/src/database.js.map +0 -1
package/built/src/database.js
DELETED
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// @ts-ignore
|
|
3
|
-
const { normalizeSQL } = require('@appland/models');
|
|
4
|
-
// https://github.com/newrelic/newrelic-ruby-agent/blob/dev/lib/new_relic/agent/database/obfuscation_helpers.rb
|
|
5
|
-
// License: https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE
|
|
6
|
-
// Apache License 2.0
|
|
7
|
-
const COMPONENTS_REGEXP_MAP = {
|
|
8
|
-
single_quotes: /'(?:[^']|'')*?(?:\\'.*|'(?!'))/g,
|
|
9
|
-
double_quotes: /"(?:[^"]|"")*?(?:\\".*|"(?!"))/g,
|
|
10
|
-
dollar_quotes: /(\$(?!\d)[^$]*?\$).*?(?:\1|$)/g,
|
|
11
|
-
uuids: /\{?(?:[0-9a-fA-F]-*){32}\}?/g,
|
|
12
|
-
numeric_literals: /-?\b(?:[0-9]+\.)?[0-9]+([eE][+-]?[0-9]+)?\b/g,
|
|
13
|
-
boolean_literals: /\b(?:true|false|null)\b/gi,
|
|
14
|
-
hexadecimal_literals: /0x[0-9a-fA-F]+/g,
|
|
15
|
-
comments: /(?:#|--).*?(?=\r|\n|$)/gi,
|
|
16
|
-
multi_line_comments: /\/\*(?:[^/]|\/[^*])*?(?:\*\/|\/\*.*)/g,
|
|
17
|
-
oracle_quoted_strings: /q'\[.*?(?:\]'|$)|q'\{.*?(?:\}'|$)|q'<.*?(?:>'|$)|q'\(.*?(?:\)'|$)/g,
|
|
18
|
-
};
|
|
19
|
-
// We use these to check whether the query contains any quote characters
|
|
20
|
-
// after obfuscation. If so, that's a good indication that the original
|
|
21
|
-
// query was malformed, and so our obfuscation can't reliably find
|
|
22
|
-
// literals. In such a case, we'll replace the entire query with a
|
|
23
|
-
// placeholder.
|
|
24
|
-
const CLEANUP_REGEXP = {
|
|
25
|
-
mysql: /'|"|\/\*|\*\//,
|
|
26
|
-
mysql2: /'|"|\/\*|\*\//,
|
|
27
|
-
postgres: /'|\/\*|\*\/|\$(?!\?)/,
|
|
28
|
-
sqlite: /'|\/\*|\*\//,
|
|
29
|
-
cassandra: /'|\/\*|\*\//,
|
|
30
|
-
oracle: /'|\/\*|\*\//,
|
|
31
|
-
oracle_enhanced: /'|\/\*|\*\//,
|
|
32
|
-
};
|
|
33
|
-
/**
|
|
34
|
-
* @type {{string: string[]}}
|
|
35
|
-
*/
|
|
36
|
-
const DIALECT_COMPONENTS = {
|
|
37
|
-
// @ts-ignore
|
|
38
|
-
fallback: Object.keys(COMPONENTS_REGEXP_MAP),
|
|
39
|
-
mysql: [
|
|
40
|
-
'single_quotes',
|
|
41
|
-
'double_quotes',
|
|
42
|
-
'numeric_literals',
|
|
43
|
-
'boolean_literals',
|
|
44
|
-
'hexadecimal_literals',
|
|
45
|
-
'comments',
|
|
46
|
-
'multi_line_comments',
|
|
47
|
-
],
|
|
48
|
-
postgres: [
|
|
49
|
-
'single_quotes',
|
|
50
|
-
'dollar_quotes',
|
|
51
|
-
'uuids',
|
|
52
|
-
'numeric_literals',
|
|
53
|
-
'boolean_literals',
|
|
54
|
-
'comments',
|
|
55
|
-
'multi_line_comments',
|
|
56
|
-
],
|
|
57
|
-
sqlite: [
|
|
58
|
-
'single_quotes',
|
|
59
|
-
'numeric_literals',
|
|
60
|
-
'boolean_literals',
|
|
61
|
-
'hexadecimal_literals',
|
|
62
|
-
'comments',
|
|
63
|
-
'multi_line_comments',
|
|
64
|
-
],
|
|
65
|
-
oracle: [
|
|
66
|
-
'single_quotes',
|
|
67
|
-
'oracle_quoted_strings',
|
|
68
|
-
'numeric_literals',
|
|
69
|
-
'comments',
|
|
70
|
-
'multi_line_comments',
|
|
71
|
-
],
|
|
72
|
-
cassandra: [
|
|
73
|
-
'single_quotes',
|
|
74
|
-
'uuids',
|
|
75
|
-
'numeric_literals',
|
|
76
|
-
'boolean_literals',
|
|
77
|
-
'hexadecimal_literals',
|
|
78
|
-
'comments',
|
|
79
|
-
'multi_line_comments',
|
|
80
|
-
],
|
|
81
|
-
};
|
|
82
|
-
const PLACEHOLDER = '?';
|
|
83
|
-
function obfuscateSingleQuoteLiterals(sql) {
|
|
84
|
-
if (!COMPONENTS_REGEXP_MAP.single_quotes.test(sql)) {
|
|
85
|
-
return sql;
|
|
86
|
-
}
|
|
87
|
-
return sql.gsub(COMPONENTS_REGEXP_MAP.single_quotes, PLACEHOLDER);
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* @param {string} dialect
|
|
91
|
-
* @returns {RegExp[]}
|
|
92
|
-
*/
|
|
93
|
-
function generateRegexp(dialect) {
|
|
94
|
-
const components = DIALECT_COMPONENTS[dialect];
|
|
95
|
-
// No Regexp.union in JS
|
|
96
|
-
return components.map((component) => COMPONENTS_REGEXP_MAP[component]);
|
|
97
|
-
}
|
|
98
|
-
const MYSQL_COMPONENTS_REGEXP = generateRegexp('mysql');
|
|
99
|
-
const POSTGRES_COMPONENTS_REGEXP = generateRegexp('postgres');
|
|
100
|
-
const SQLITE_COMPONENTS_REGEXP = generateRegexp('sqlite');
|
|
101
|
-
const ORACLE_COMPONENTS_REGEXP = generateRegexp('oracle');
|
|
102
|
-
const CASSANDRA_COMPONENTS_REGEXP = generateRegexp('cassandra');
|
|
103
|
-
const FALLBACK_REGEXP = generateRegexp('fallback');
|
|
104
|
-
function detectUnmatchedPairs(obfuscated, adapter) {
|
|
105
|
-
if (CLEANUP_REGEXP[adapter]) {
|
|
106
|
-
return CLEANUP_REGEXP[adapter].test(obfuscated);
|
|
107
|
-
}
|
|
108
|
-
return CLEANUP_REGEXP.mysql.test(obfuscated);
|
|
109
|
-
}
|
|
110
|
-
const FAILED_TO_OBFUSCATE_MESSAGE = 'Failed to obfuscate SQL query - quote characters remained after obfuscation';
|
|
111
|
-
/**
|
|
112
|
-
* Replaces literal query parameters with parameter symbols (e.g. '?');
|
|
113
|
-
*
|
|
114
|
-
* @param {string} sql
|
|
115
|
-
* @param {string} adapter
|
|
116
|
-
* @returns {string}
|
|
117
|
-
*/
|
|
118
|
-
function obfuscate(sql, adapter) {
|
|
119
|
-
/** @type {RegExp[]} */ let regexp;
|
|
120
|
-
switch (adapter) {
|
|
121
|
-
case 'mysql':
|
|
122
|
-
case 'mysql2':
|
|
123
|
-
regexp = MYSQL_COMPONENTS_REGEXP;
|
|
124
|
-
break;
|
|
125
|
-
case 'postgres':
|
|
126
|
-
regexp = POSTGRES_COMPONENTS_REGEXP;
|
|
127
|
-
break;
|
|
128
|
-
case 'sqlite':
|
|
129
|
-
regexp = SQLITE_COMPONENTS_REGEXP;
|
|
130
|
-
break;
|
|
131
|
-
case 'oracle':
|
|
132
|
-
case 'oracle_enhanced':
|
|
133
|
-
regexp = ORACLE_COMPONENTS_REGEXP;
|
|
134
|
-
break;
|
|
135
|
-
case 'cassandra':
|
|
136
|
-
regexp = CASSANDRA_COMPONENTS_REGEXP;
|
|
137
|
-
break;
|
|
138
|
-
default:
|
|
139
|
-
regexp = FALLBACK_REGEXP;
|
|
140
|
-
}
|
|
141
|
-
let obfuscated = sql;
|
|
142
|
-
// eslint-disable-next-line no-return-assign
|
|
143
|
-
regexp.forEach((re) => (obfuscated = obfuscated.replace(re, PLACEHOLDER)));
|
|
144
|
-
if (detectUnmatchedPairs(obfuscated, adapter)) {
|
|
145
|
-
obfuscated = FAILED_TO_OBFUSCATE_MESSAGE;
|
|
146
|
-
}
|
|
147
|
-
return obfuscated;
|
|
148
|
-
}
|
|
149
|
-
const QUERY_CACHE = {};
|
|
150
|
-
function analyzeQuery(
|
|
151
|
-
/** @type {import('./search/types').SQL | string} */ query) {
|
|
152
|
-
if (typeof query === 'string') {
|
|
153
|
-
// This is a problem because we don't know what SQL dialect to apply.
|
|
154
|
-
console.warn(`No database_type available for ${query}`);
|
|
155
|
-
return normalizeSQL(query);
|
|
156
|
-
}
|
|
157
|
-
const { sql, database_type: databaseType } = query;
|
|
158
|
-
if (sql && databaseType) {
|
|
159
|
-
const obfuscatedSQL = obfuscate(sql, databaseType);
|
|
160
|
-
const cachedResult = QUERY_CACHE[obfuscatedSQL];
|
|
161
|
-
if (cachedResult) {
|
|
162
|
-
return cachedResult;
|
|
163
|
-
}
|
|
164
|
-
const result = normalizeSQL(obfuscatedSQL);
|
|
165
|
-
QUERY_CACHE[obfuscatedSQL] = result;
|
|
166
|
-
return result;
|
|
167
|
-
}
|
|
168
|
-
console.warn(`sql or database_type not available for ${JSON.stringify(query)}`);
|
|
169
|
-
return normalizeSQL(sql);
|
|
170
|
-
}
|
|
171
|
-
module.exports = { analyzeQuery, obfuscate, obfuscateSingleQuoteLiterals };
|
|
172
|
-
//# sourceMappingURL=database.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/database.js"],"names":[],"mappings":"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"}
|