@appland/appmap 3.17.1 → 3.18.2
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 +30 -0
- package/built/appmap.html +1 -1
- package/built/main.js.LICENSE.txt +2 -2
- 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/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/openapi/method.js +5 -44
- package/built/src/openapi/method.js.map +1 -1
- package/built/src/openapi/response.js +2 -2
- package/built/src/openapi/response.js.map +1 -1
- package/built/src/openapi/util.js +3 -1
- package/built/src/openapi/util.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
|
@@ -17,6 +17,8 @@ function classNameToOpenAPIType(className) {
|
|
|
17
17
|
case 'trueclass':
|
|
18
18
|
case 'falseclass':
|
|
19
19
|
return 'boolean';
|
|
20
|
+
case 'string':
|
|
21
|
+
return 'string';
|
|
20
22
|
default:
|
|
21
23
|
return undefined;
|
|
22
24
|
}
|
|
@@ -51,7 +53,7 @@ function classNameToOpenAPIType(className) {
|
|
|
51
53
|
const mapper = (t) => mapRubyType(t) || mapPythonType(t) || mapJavaType(t);
|
|
52
54
|
const mapped = mapper(className.toLowerCase());
|
|
53
55
|
if (!mapped && !unrecognizedTypes.has(className)) {
|
|
54
|
-
console.warn(`Warning:
|
|
56
|
+
console.warn(`Warning: Don't know how to map "${className}" to an OpenAPI type. You'll need to update the generated file.`);
|
|
55
57
|
unrecognizedTypes.add(className);
|
|
56
58
|
return className;
|
|
57
59
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/openapi/util.js"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/openapi/util.js"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/* eslint-disable max-classes-per-file */
|
|
3
|
-
const {
|
|
3
|
+
const { analyzeSQL, normalizeSQL } = require('@appland/models');
|
|
4
4
|
/**
|
|
5
5
|
* @typedef {import('./types').CodeObject} CodeObject
|
|
6
6
|
* @typedef {(codeObject: CodeObject) => boolean} MatchFn
|
|
@@ -70,9 +70,9 @@ function matchQuery(expectedQuery) {
|
|
|
70
70
|
}
|
|
71
71
|
// TODO: Brute force is probably not a good idea.
|
|
72
72
|
// Need to store the database type on the codeObject.
|
|
73
|
-
return (
|
|
74
|
-
|
|
75
|
-
|
|
73
|
+
return (normalizeSQL(codeObject.name, 'mysql') === expectedQuery ||
|
|
74
|
+
normalizeSQL(codeObject.name, 'postgres') === expectedQuery ||
|
|
75
|
+
normalizeSQL(codeObject.name, 'sqlite') === expectedQuery);
|
|
76
76
|
};
|
|
77
77
|
fn.toJSON = () => `query ${expectedQuery}`;
|
|
78
78
|
return fn;
|
|
@@ -86,7 +86,7 @@ function matchTable(tableName) {
|
|
|
86
86
|
if (codeObject.type !== 'query') {
|
|
87
87
|
return false;
|
|
88
88
|
}
|
|
89
|
-
const queryInfo = /** @type {SQLInfo} */
|
|
89
|
+
const queryInfo = /** @type {SQLInfo} */ analyzeSQL({
|
|
90
90
|
sql: codeObject.name,
|
|
91
91
|
database_type: codeObject.database_type,
|
|
92
92
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matchSpec.js","sourceRoot":"","sources":["../../../src/search/matchSpec.js"],"names":[],"mappings":";AAAA,yCAAyC;AACzC,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"matchSpec.js","sourceRoot":"","sources":["../../../src/search/matchSpec.js"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
const {
|
|
2
|
+
const { normalizeSQL } = require('@appland/models');
|
|
3
3
|
/** @typedef {import('./types').CodeObject} CodeObject */
|
|
4
4
|
/** @typedef {import('./types').Event} Event */
|
|
5
5
|
const normalizeId = (
|
|
6
6
|
/** @type {CodeObject} */ co,
|
|
7
7
|
/** @type {Event} */ evt) => {
|
|
8
8
|
if (co && co.type === 'query') {
|
|
9
|
-
return
|
|
9
|
+
return normalizeSQL(evt.sqlQuery, evt.sql.database_type);
|
|
10
10
|
}
|
|
11
11
|
return co.id;
|
|
12
12
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trigram.js","sourceRoot":"","sources":["../../../src/search/trigram.js"],"names":[],"mappings":";AAAA,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"trigram.js","sourceRoot":"","sources":["../../../src/search/trigram.js"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@appland/appmap",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.18.2",
|
|
4
4
|
"description": "",
|
|
5
5
|
"bin": "built/src/cli.js",
|
|
6
6
|
"publishConfig": {
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"vuex"
|
|
67
67
|
],
|
|
68
68
|
"dependencies": {
|
|
69
|
-
"@appland/components": "1.
|
|
69
|
+
"@appland/components": "1.23.0",
|
|
70
70
|
"@appland/diagrams": "1.5.1",
|
|
71
71
|
"@appland/models": "^1.8.1",
|
|
72
72
|
"@sidvind/better-ajv-errors": "^0.9.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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"}
|