@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.
Files changed (40) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/built/appmap.html +1 -1
  3. package/built/main.js.map +1 -1
  4. package/built/package.json +1 -1
  5. package/built/src/cmds/agentInstaller/agentInstaller.js.map +1 -1
  6. package/built/src/cmds/agentInstaller/agentInstallerProcedure.js +1 -4
  7. package/built/src/cmds/agentInstaller/agentInstallerProcedure.js.map +1 -1
  8. package/built/src/cmds/agentInstaller/commandStruct.js +10 -1
  9. package/built/src/cmds/agentInstaller/commandStruct.js.map +1 -1
  10. package/built/src/cmds/agentInstaller/gradleInstaller.js +0 -7
  11. package/built/src/cmds/agentInstaller/gradleInstaller.js.map +1 -1
  12. package/built/src/cmds/agentInstaller/javaScriptAgentInstaller.js +0 -12
  13. package/built/src/cmds/agentInstaller/javaScriptAgentInstaller.js.map +1 -1
  14. package/built/src/cmds/agentInstaller/mavenInstaller.js +0 -7
  15. package/built/src/cmds/agentInstaller/mavenInstaller.js.map +1 -1
  16. package/built/src/cmds/agentInstaller/pythonAgentInstaller.js +0 -12
  17. package/built/src/cmds/agentInstaller/pythonAgentInstaller.js.map +1 -1
  18. package/built/src/cmds/agentInstaller/rubyAgentInstaller.js +0 -6
  19. package/built/src/cmds/agentInstaller/rubyAgentInstaller.js.map +1 -1
  20. package/built/src/cmds/record/createRecording.js +5 -1
  21. package/built/src/cmds/record/createRecording.js.map +1 -1
  22. package/built/src/fingerprint/canonicalize/info.js +2 -2
  23. package/built/src/fingerprint/canonicalize/info.js.map +1 -1
  24. package/built/src/fingerprint/canonicalize/sqlNormalized.js +2 -2
  25. package/built/src/fingerprint/canonicalize/sqlNormalized.js.map +1 -1
  26. package/built/src/fingerprint/canonicalize/sqlTables.js +2 -2
  27. package/built/src/fingerprint/canonicalize/sqlTables.js.map +1 -1
  28. package/built/src/fingerprint/canonicalize/trace.js +3 -3
  29. package/built/src/fingerprint/canonicalize/trace.js.map +1 -1
  30. package/built/src/fingerprint/canonicalize/update.js +3 -3
  31. package/built/src/fingerprint/canonicalize/update.js.map +1 -1
  32. package/built/src/functionStats.js +3 -3
  33. package/built/src/functionStats.js.map +1 -1
  34. package/built/src/search/matchSpec.js +5 -5
  35. package/built/src/search/matchSpec.js.map +1 -1
  36. package/built/src/search/trigram.js +2 -2
  37. package/built/src/search/trigram.js.map +1 -1
  38. package/package.json +2 -2
  39. package/built/src/database.js +0 -172
  40. package/built/src/database.js.map +0 -1
@@ -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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"}