@rockcarver/frodo-lib 2.0.0-3 → 2.0.0-4
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 +5 -1
- package/cjs/api/AgentApi.js +64 -16
- package/cjs/api/AgentApi.js.map +1 -1
- package/cjs/api/ApiTypes.js +0 -55
- package/cjs/api/ApiTypes.js.map +1 -1
- package/cjs/api/BaseApi.js +21 -11
- package/cjs/api/BaseApi.js.map +1 -1
- package/cjs/api/cloud/SecretsApi.js +7 -14
- package/cjs/api/cloud/SecretsApi.js.map +1 -1
- package/cjs/api/cloud/SecretsApi.test.js.map +1 -1
- package/cjs/ops/AdminOps.js +254 -60
- package/cjs/ops/AdminOps.js.map +1 -1
- package/cjs/ops/AgentOps.js +352 -108
- package/cjs/ops/AgentOps.js.map +1 -1
- package/cjs/ops/AuthenticateOps.js +253 -60
- package/cjs/ops/AuthenticateOps.js.map +1 -1
- package/cjs/ops/CirclesOfTrustOps.js +16 -4
- package/cjs/ops/CirclesOfTrustOps.js.map +1 -1
- package/cjs/ops/ConnectionProfileOps.js +163 -40
- package/cjs/ops/ConnectionProfileOps.js.map +1 -1
- package/cjs/ops/EmailTemplateOps.js +7 -1
- package/cjs/ops/EmailTemplateOps.js.map +1 -1
- package/cjs/ops/IdpOps.js +55 -12
- package/cjs/ops/IdpOps.js.map +1 -1
- package/cjs/ops/JourneyOps.js +645 -136
- package/cjs/ops/JourneyOps.js.map +1 -1
- package/cjs/ops/NodeOps.js +96 -24
- package/cjs/ops/NodeOps.js.map +1 -1
- package/cjs/ops/OAuth2ClientOps.js +45 -11
- package/cjs/ops/OAuth2ClientOps.js.map +1 -1
- package/cjs/ops/OpsTypes.js +0 -23
- package/cjs/ops/OpsTypes.js.map +1 -1
- package/cjs/ops/OrganizationOps.js +44 -10
- package/cjs/ops/OrganizationOps.js.map +1 -1
- package/cjs/ops/PolicyOps.js +86 -24
- package/cjs/ops/PolicyOps.js.map +1 -1
- package/cjs/ops/PolicySetOps.js +72 -18
- package/cjs/ops/PolicySetOps.js.map +1 -1
- package/cjs/ops/ResourceTypeOps.js +24 -6
- package/cjs/ops/ResourceTypeOps.js.map +1 -1
- package/cjs/ops/Saml2Ops.js +120 -33
- package/cjs/ops/Saml2Ops.js.map +1 -1
- package/cjs/ops/Saml2Ops.test.js.map +1 -1
- package/cjs/ops/ScriptOps.js +73 -17
- package/cjs/ops/ScriptOps.js.map +1 -1
- package/cjs/ops/ServiceOps.js +152 -35
- package/cjs/ops/ServiceOps.js.map +1 -1
- package/cjs/ops/ThemeOps.js +20 -5
- package/cjs/ops/ThemeOps.js.map +1 -1
- package/cjs/ops/cloud/FeatureOps.js +4 -1
- package/cjs/ops/cloud/FeatureOps.js.map +1 -1
- package/cjs/ops/cloud/SecretsOps.js.map +1 -1
- package/cjs/ops/cloud/ServiceAccountOps.js +24 -6
- package/cjs/ops/cloud/ServiceAccountOps.js.map +1 -1
- package/cjs/ops/cloud/StartupOps.js +55 -11
- package/cjs/ops/cloud/StartupOps.js.map +1 -1
- package/cjs/ops/utils/Console.js +47 -22
- package/cjs/ops/utils/Console.js.map +1 -1
- package/cjs/ops/utils/DataProtection.js +12 -5
- package/cjs/ops/utils/DataProtection.js.map +1 -1
- package/cjs/ops/utils/DataProtection.test.js.map +1 -1
- package/cjs/ops/utils/ExportImportUtils.js +15 -8
- package/cjs/ops/utils/ExportImportUtils.js.map +1 -1
- package/cjs/ops/utils/ScriptValidationUtils.js +33 -8
- package/cjs/ops/utils/ScriptValidationUtils.js.map +1 -1
- package/cjs/ops/utils/ScriptValidationUtils.test.js.map +1 -1
- package/cjs/utils/SetupPollyForFrodoLib.js +67 -19
- package/cjs/utils/SetupPollyForFrodoLib.js.map +1 -1
- package/esm/api/AgentApi.mjs +64 -16
- package/esm/api/ApiTypes.mjs +1 -50
- package/esm/api/BaseApi.mjs +21 -11
- package/esm/api/cloud/SecretsApi.mjs +0 -5
- package/esm/api/cloud/SecretsApi.test.mjs +3 -3
- package/esm/ops/AdminOps.mjs +254 -60
- package/esm/ops/AgentOps.mjs +352 -104
- package/esm/ops/AuthenticateOps.mjs +253 -60
- package/esm/ops/CirclesOfTrustOps.mjs +16 -4
- package/esm/ops/ConnectionProfileOps.mjs +163 -40
- package/esm/ops/EmailTemplateOps.mjs +5 -0
- package/esm/ops/IdpOps.mjs +55 -12
- package/esm/ops/JourneyOps.mjs +639 -132
- package/esm/ops/NodeOps.mjs +90 -19
- package/esm/ops/OAuth2ClientOps.mjs +45 -11
- package/esm/ops/OpsTypes.mjs +1 -22
- package/esm/ops/OrganizationOps.mjs +44 -10
- package/esm/ops/PolicyOps.mjs +86 -24
- package/esm/ops/PolicySetOps.mjs +72 -18
- package/esm/ops/ResourceTypeOps.mjs +24 -6
- package/esm/ops/Saml2Ops.mjs +120 -33
- package/esm/ops/Saml2Ops.test.mjs +10 -11
- package/esm/ops/ScriptOps.mjs +73 -17
- package/esm/ops/ServiceOps.mjs +152 -35
- package/esm/ops/ThemeOps.mjs +20 -5
- package/esm/ops/cloud/FeatureOps.mjs +4 -1
- package/esm/ops/cloud/ServiceAccountOps.mjs +24 -6
- package/esm/ops/cloud/StartupOps.mjs +55 -11
- package/esm/ops/utils/Console.mjs +33 -9
- package/esm/ops/utils/DataProtection.mjs +9 -2
- package/esm/ops/utils/DataProtection.test.mjs +8 -2
- package/esm/ops/utils/ExportImportUtils.mjs +15 -8
- package/esm/ops/utils/ScriptValidationUtils.mjs +30 -8
- package/esm/ops/utils/ScriptValidationUtils.test.mjs +14 -3
- package/esm/utils/SetupPollyForFrodoLib.mjs +64 -18
- package/package.json +1 -1
- package/types/api/AgentApi.d.ts +6 -6
- package/types/api/AgentApi.d.ts.map +1 -1
- package/types/api/ApiTypes.d.ts +12 -49
- package/types/api/ApiTypes.d.ts.map +1 -1
- package/types/api/BaseApi.d.ts.map +1 -1
- package/types/api/cloud/SecretsApi.d.ts +1 -4
- package/types/api/cloud/SecretsApi.d.ts.map +1 -1
- package/types/ops/AdminOps.d.ts.map +1 -1
- package/types/ops/AgentOps.d.ts +3 -6
- package/types/ops/AgentOps.d.ts.map +1 -1
- package/types/ops/AuthenticateOps.d.ts.map +1 -1
- package/types/ops/CirclesOfTrustOps.d.ts.map +1 -1
- package/types/ops/ConnectionProfileOps.d.ts.map +1 -1
- package/types/ops/EmailTemplateOps.d.ts +4 -0
- package/types/ops/EmailTemplateOps.d.ts.map +1 -1
- package/types/ops/IdpOps.d.ts.map +1 -1
- package/types/ops/JourneyOps.d.ts +10 -4
- package/types/ops/JourneyOps.d.ts.map +1 -1
- package/types/ops/NodeOps.d.ts +10 -4
- package/types/ops/NodeOps.d.ts.map +1 -1
- package/types/ops/OAuth2ClientOps.d.ts.map +1 -1
- package/types/ops/OpsTypes.d.ts +2 -12
- package/types/ops/OpsTypes.d.ts.map +1 -1
- package/types/ops/OrganizationOps.d.ts.map +1 -1
- package/types/ops/PolicyOps.d.ts.map +1 -1
- package/types/ops/PolicySetOps.d.ts.map +1 -1
- package/types/ops/ResourceTypeOps.d.ts.map +1 -1
- package/types/ops/Saml2Ops.d.ts.map +1 -1
- package/types/ops/ScriptOps.d.ts.map +1 -1
- package/types/ops/ServiceOps.d.ts.map +1 -1
- package/types/ops/ThemeOps.d.ts.map +1 -1
- package/types/ops/cloud/FeatureOps.d.ts.map +1 -1
- package/types/ops/cloud/SecretsOps.d.ts +1 -1
- package/types/ops/cloud/SecretsOps.d.ts.map +1 -1
- package/types/ops/cloud/ServiceAccountOps.d.ts.map +1 -1
- package/types/ops/cloud/StartupOps.d.ts.map +1 -1
- package/types/ops/utils/Console.d.ts +34 -7
- package/types/ops/utils/Console.d.ts.map +1 -1
- package/types/ops/utils/DataProtection.d.ts +5 -1
- package/types/ops/utils/DataProtection.d.ts.map +1 -1
- package/types/ops/utils/ExportImportUtils.d.ts.map +1 -1
- package/types/ops/utils/ScriptValidationUtils.d.ts +14 -4
- package/types/ops/utils/ScriptValidationUtils.d.ts.map +1 -1
- package/types/utils/SetupPollyForFrodoLib.d.ts +5 -1
- package/types/utils/SetupPollyForFrodoLib.d.ts.map +1 -1
package/cjs/ops/utils/Console.js
CHANGED
|
@@ -14,7 +14,6 @@ exports.stopProgressIndicator = stopProgressIndicator;
|
|
|
14
14
|
exports.updateProgressIndicator = updateProgressIndicator;
|
|
15
15
|
exports.verboseMessage = verboseMessage;
|
|
16
16
|
var _cliTable = _interopRequireDefault(require("cli-table3"));
|
|
17
|
-
var _FrodoLib = require("../../lib/FrodoLib");
|
|
18
17
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
18
|
/**
|
|
20
19
|
* Handles data / messages output. The caller decides and implements how
|
|
@@ -28,10 +27,14 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
28
27
|
* @param {boolean} [newline=true] Whether to add a newline at the end of message
|
|
29
28
|
* messages returned
|
|
30
29
|
*/
|
|
31
|
-
function printMessage(
|
|
32
|
-
var
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
function printMessage(_ref) {
|
|
31
|
+
var {
|
|
32
|
+
message,
|
|
33
|
+
type = 'text',
|
|
34
|
+
newline = true,
|
|
35
|
+
state
|
|
36
|
+
} = _ref;
|
|
37
|
+
var handler = state.getPrintHandler();
|
|
35
38
|
if (handler) {
|
|
36
39
|
handler(message, type, newline);
|
|
37
40
|
}
|
|
@@ -44,8 +47,12 @@ function printMessage(message) {
|
|
|
44
47
|
*
|
|
45
48
|
* @param {string | unknown} message The verbose output message
|
|
46
49
|
*/
|
|
47
|
-
function verboseMessage(
|
|
48
|
-
var
|
|
50
|
+
function verboseMessage(_ref2) {
|
|
51
|
+
var {
|
|
52
|
+
message,
|
|
53
|
+
state
|
|
54
|
+
} = _ref2;
|
|
55
|
+
var handler = state.getVerboseHandler();
|
|
49
56
|
if (handler) {
|
|
50
57
|
handler(message);
|
|
51
58
|
}
|
|
@@ -58,8 +65,12 @@ function verboseMessage(message) {
|
|
|
58
65
|
*
|
|
59
66
|
* @param {string | object} message The debug output message
|
|
60
67
|
*/
|
|
61
|
-
function debugMessage(
|
|
62
|
-
var
|
|
68
|
+
function debugMessage(_ref3) {
|
|
69
|
+
var {
|
|
70
|
+
message,
|
|
71
|
+
state
|
|
72
|
+
} = _ref3;
|
|
73
|
+
var handler = state.getDebugHandler();
|
|
63
74
|
if (handler) {
|
|
64
75
|
handler(message);
|
|
65
76
|
}
|
|
@@ -85,8 +96,12 @@ function maskPasswordHeader(curlCommand) {
|
|
|
85
96
|
*
|
|
86
97
|
* @param {string} message The curlirize output message
|
|
87
98
|
*/
|
|
88
|
-
function curlirizeMessage(
|
|
89
|
-
var
|
|
99
|
+
function curlirizeMessage(_ref4) {
|
|
100
|
+
var {
|
|
101
|
+
message,
|
|
102
|
+
state
|
|
103
|
+
} = _ref4;
|
|
104
|
+
var handler = state.getCurlirizeHandler();
|
|
90
105
|
if (handler) {
|
|
91
106
|
handler(maskPasswordHeader(message));
|
|
92
107
|
}
|
|
@@ -110,10 +125,14 @@ function curlirizeMessage(message) {
|
|
|
110
125
|
* @param {String} type optional type of progress indicator. default is 'determinate'
|
|
111
126
|
*
|
|
112
127
|
*/
|
|
113
|
-
function createProgressIndicator(
|
|
114
|
-
var
|
|
115
|
-
|
|
116
|
-
|
|
128
|
+
function createProgressIndicator(_ref5) {
|
|
129
|
+
var {
|
|
130
|
+
total,
|
|
131
|
+
message = undefined,
|
|
132
|
+
type = 'determinate',
|
|
133
|
+
state
|
|
134
|
+
} = _ref5;
|
|
135
|
+
var handler = state.getCreateProgressHandler();
|
|
117
136
|
if (handler) {
|
|
118
137
|
handler(type, total, message);
|
|
119
138
|
}
|
|
@@ -124,9 +143,12 @@ function createProgressIndicator(total) {
|
|
|
124
143
|
* @param {string} message optional message to show with the indicator
|
|
125
144
|
*
|
|
126
145
|
*/
|
|
127
|
-
function updateProgressIndicator() {
|
|
128
|
-
var
|
|
129
|
-
|
|
146
|
+
function updateProgressIndicator(_ref6) {
|
|
147
|
+
var {
|
|
148
|
+
message = undefined,
|
|
149
|
+
state
|
|
150
|
+
} = _ref6;
|
|
151
|
+
var handler = state.getUpdateProgressHandler();
|
|
130
152
|
if (handler) {
|
|
131
153
|
handler(message);
|
|
132
154
|
}
|
|
@@ -137,10 +159,13 @@ function updateProgressIndicator() {
|
|
|
137
159
|
* @param {string} message optional message to show with the indicator
|
|
138
160
|
* @param {string} status one of 'none', 'success', 'warn', 'fail'
|
|
139
161
|
*/
|
|
140
|
-
function stopProgressIndicator() {
|
|
141
|
-
var
|
|
142
|
-
|
|
143
|
-
|
|
162
|
+
function stopProgressIndicator(_ref7) {
|
|
163
|
+
var {
|
|
164
|
+
message = null,
|
|
165
|
+
status = 'none',
|
|
166
|
+
state
|
|
167
|
+
} = _ref7;
|
|
168
|
+
var handler = state.getStopProgressHandler();
|
|
144
169
|
if (handler) {
|
|
145
170
|
handler(message, status);
|
|
146
171
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Console.js","names":["_cliTable","_interopRequireDefault","require","_FrodoLib","obj","__esModule","default","printMessage","message","type","arguments","length","undefined","newline","handler","state","getPrintHandler","verboseMessage","getVerboseHandler","debugMessage","getDebugHandler","maskPasswordHeader","curlCommand","header","mask","regex","RegExp","replace","curlirizeMessage","getCurlirizeHandler","createProgressIndicator","total","getCreateProgressHandler","updateProgressIndicator","getUpdateProgressHandler","stopProgressIndicator","status","getStopProgressHandler","createTable","head","Table","chars","top","bottom","left","mid","right","style","createKeyValueTable","wordWrap","getObjectDepth","object","Object","Math","max","values","map","hasValues","has","keys","key","addRows","depth","level","table","keyMap","space","push","hAlign","content","indention","Array","fill","join","concat","createObjectTable"],"sources":["ops/utils/Console.ts"],"sourcesContent":["import Table from 'cli-table3';\nimport { state } from '../../lib/FrodoLib';\n\n/**\n * Handles data / messages output. The caller decides and implements how\n * the data and messages are handled, by implementing the handler function\n * on its side. `handler` is optional, and if not included by the caller,\n * the data and messages will be lost.\n *\n * @param {string | unknown} message The string message to return\n * @param {string} [type=text] \"text\", \"info\", \"warn\", \"error\" or \"data\". All but\n * type=\"data\" will be written to stderr.\n * @param {boolean} [newline=true] Whether to add a newline at the end of message\n * messages returned\n */\nexport function printMessage(\n message: string | object,\n type = 'text',\n newline = true\n) {\n const handler = state.getPrintHandler();\n if (handler) {\n handler(message, type, newline);\n }\n}\n\n/**\n * Handles verbose output. The caller decides and implements how\n * the messages are handled, by implementing the handler function\n * on its side. Implementing and registering a `handler` is optional.\n *\n * @param {string | unknown} message The verbose output message\n */\nexport function verboseMessage(message: string | object) {\n const handler = state.getVerboseHandler();\n if (handler) {\n handler(message);\n }\n}\n\n/**\n * Handles debug output. The caller decides and implements how\n * the messages are handled, by implementing the handler function\n * on its side. Implementing and registering a `handler` is optional.\n *\n * @param {string | object} message The debug output message\n */\nexport function debugMessage(message: string | object) {\n const handler = state.getDebugHandler();\n if (handler) {\n handler(message);\n }\n}\n\n/**\n * Helper function to mask password header in curl command\n * @param curlCommand curl command to mask\n * @param {State} state library state\n * @returns masked curl command\n */\nfunction maskPasswordHeader(curlCommand: string) {\n const header = 'X-OpenAM-Password:';\n const mask = '<suppressed>';\n const regex = new RegExp('\"' + header + '.+?\"', 'g');\n return curlCommand.replace(regex, '\"' + header + mask + '\"');\n}\n\n/**\n * Handles curlirize output. The caller decides and implements how\n * the messages are handled, by implementing the handler function\n * on its side. Implementing and registering a `handler` is optional.\n *\n * @param {string} message The curlirize output message\n */\nexport function curlirizeMessage(message: string) {\n const handler = state.getCurlirizeHandler();\n if (handler) {\n handler(maskPasswordHeader(message));\n }\n}\n\n/**\n * Calls a callback on client to create a progress indicator.\n * The actual implementation of the indicator is left to the client\n * Two types of indicators are supported:\n * - determinate: should be used when the process completion rate\n * can be detected (example: progress bar showing percentage or count)\n * - indeterminate: used when progress isn’t detectable, or if\n * it’s not necessary to indicate how long an activity will take.\n * (example: spinner showing progress, but not quantifying the progress)\n *\n * Example:\n * [========================================] 100% | 49/49 | Analyzing journey - transactional_auth\n *\n * @param {Number} total The total number of entries to track progress for\n * @param {String} message optional progress bar message\n * @param {String} type optional type of progress indicator. default is 'determinate'\n *\n */\nexport function createProgressIndicator(\n total,\n message: string = null,\n type = 'determinate'\n) {\n const handler = state.getCreateProgressHandler();\n if (handler) {\n handler(type, total, message);\n }\n}\n\n/**\n * Updates the progress indicator with new data/updated status.\n * @param {string} message optional message to show with the indicator\n *\n */\nexport function updateProgressIndicator(message: string = null) {\n const handler = state.getUpdateProgressHandler();\n if (handler) {\n handler(message);\n }\n}\n\n/**\n * Stop and hide the progress indicator\n * @param {string} message optional message to show with the indicator\n * @param {string} status one of 'none', 'success', 'warn', 'fail'\n */\nexport function stopProgressIndicator(message: string = null, status = 'none') {\n const handler = state.getStopProgressHandler();\n if (handler) {\n handler(message, status);\n }\n}\n\n/**\n * Create an empty table\n * @param {[String]} head header row as an array of strings\n * @returns {CliTable3} an empty table\n */\nexport function createTable(head) {\n return new Table({\n head,\n chars: {\n top: '',\n 'top-mid': '',\n 'top-left': '',\n 'top-right': '',\n bottom: '',\n 'bottom-mid': '',\n 'bottom-left': '',\n 'bottom-right': '',\n left: '',\n 'left-mid': '',\n mid: '',\n 'mid-mid': '',\n right: '',\n 'right-mid': '',\n },\n style: { 'padding-left': 0, 'padding-right': 0, head: ['brightCyan'] },\n });\n}\n\n/**\n * Create a new key/value table\n * @returns {CliTable3} an empty key/value table\n */\nexport function createKeyValueTable() {\n return new Table({\n chars: {\n top: '',\n 'top-mid': '',\n 'top-left': '',\n 'top-right': '',\n bottom: '',\n 'bottom-mid': '',\n 'bottom-left': '',\n 'bottom-right': '',\n left: '',\n 'left-mid': '',\n mid: '',\n 'mid-mid': '',\n right: '',\n 'right-mid': '',\n },\n style: { 'padding-left': 0, 'padding-right': 0 },\n wordWrap: true,\n });\n}\n\n/**\n * Helper function to determine the total depth of an object\n * @param {Object} object input object\n * @returns {Number} total depth of the input object\n */\nfunction getObjectDepth(object) {\n return Object(object) === object\n ? 1 + Math.max(-1, ...Object.values(object).map(getObjectDepth))\n : 0;\n}\n\n/**\n * Helper function to determine if an object has values\n * @param {Object} object input object\n * @returns {boolean} true of the object or any of its sub-objects contain values, false otherwise\n */\nfunction hasValues(object) {\n let has = false;\n const keys = Object.keys(object);\n for (const key of keys) {\n if (Object(object[key]) !== object[key]) {\n return true;\n }\n has = has || hasValues(object[key]);\n }\n return has;\n}\n\n/**\n * Helper function (recursive) to add rows to an object table\n * @param {Object} object object to render\n * @param {Number} depth total depth of initial object\n * @param {Number} level current level\n * @param {CliTable3} table the object table to add the rows to\n * @returns the updated object table\n */\nfunction addRows(object, depth, level, table, keyMap) {\n const space = ' ';\n const keys = Object.keys(object);\n for (const key of keys) {\n if (Object(object[key]) !== object[key]) {\n if (level === 1) {\n table.push([\n keyMap[key] ? keyMap[key]['brightCyan'] : key['brightCyan'],\n object[key],\n ]);\n } else {\n table.push([\n {\n hAlign: 'right',\n content: keyMap[key] ? keyMap[key]['gray'] : key['gray'],\n },\n object[key],\n ]);\n }\n }\n }\n for (const key of keys) {\n if (Object(object[key]) === object[key]) {\n // only print header if there are any values below\n if (hasValues(object[key])) {\n let indention = new Array(level).fill(space).join('');\n if (level < 3) indention = `\\n${indention}`;\n table.push([\n indention.concat(\n keyMap[key] ? keyMap[key]['brightCyan'] : key['brightCyan']\n ),\n '',\n ]);\n }\n // eslint-disable-next-line no-param-reassign\n table = addRows(object[key], depth, level + 1, table, keyMap);\n }\n }\n return table;\n}\n\n/**\n * Create and populate an object table from any JSON object. Use for describe commands.\n * @param {Object} object JSON object to create\n * @returns {CliTable3} a table that can be printed to the console\n */\nexport function createObjectTable(object, keyMap = {}) {\n // eslint-disable-next-line no-param-reassign\n const depth = getObjectDepth(object);\n // eslint-disable-next-line no-param-reassign\n const level = 0;\n // eslint-disable-next-line no-param-reassign\n const table = new Table({\n chars: {\n top: '',\n 'top-mid': '',\n 'top-left': '',\n 'top-right': '',\n bottom: '',\n 'bottom-mid': '',\n 'bottom-left': '',\n 'bottom-right': '',\n left: '',\n 'left-mid': '',\n mid: '',\n 'mid-mid': '',\n right: '',\n 'right-mid': '',\n },\n style: { 'padding-left': 0, 'padding-right': 0, head: ['brightCyan'] },\n });\n addRows(object, depth, level + 1, table, keyMap);\n return table;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Console.js","names":["_cliTable","_interopRequireDefault","require","obj","__esModule","default","printMessage","_ref","message","type","newline","state","handler","getPrintHandler","verboseMessage","_ref2","getVerboseHandler","debugMessage","_ref3","getDebugHandler","maskPasswordHeader","curlCommand","header","mask","regex","RegExp","replace","curlirizeMessage","_ref4","getCurlirizeHandler","createProgressIndicator","_ref5","total","undefined","getCreateProgressHandler","updateProgressIndicator","_ref6","getUpdateProgressHandler","stopProgressIndicator","_ref7","status","getStopProgressHandler","createTable","head","Table","chars","top","bottom","left","mid","right","style","createKeyValueTable","wordWrap","getObjectDepth","object","Object","Math","max","values","map","hasValues","has","keys","key","addRows","depth","level","table","keyMap","space","push","hAlign","content","indention","Array","fill","join","concat","createObjectTable","arguments","length"],"sources":["ops/utils/Console.ts"],"sourcesContent":["import Table from 'cli-table3';\nimport State from '../../shared/State';\n\n/**\n * Handles data / messages output. The caller decides and implements how\n * the data and messages are handled, by implementing the handler function\n * on its side. `handler` is optional, and if not included by the caller,\n * the data and messages will be lost.\n *\n * @param {string | unknown} message The string message to return\n * @param {string} [type=text] \"text\", \"info\", \"warn\", \"error\" or \"data\". All but\n * type=\"data\" will be written to stderr.\n * @param {boolean} [newline=true] Whether to add a newline at the end of message\n * messages returned\n */\nexport function printMessage({\n message,\n type = 'text',\n newline = true,\n state,\n}: {\n message: string | object;\n type?: string;\n newline?: boolean;\n state: State;\n}) {\n const handler = state.getPrintHandler();\n if (handler) {\n handler(message, type, newline);\n }\n}\n\n/**\n * Handles verbose output. The caller decides and implements how\n * the messages are handled, by implementing the handler function\n * on its side. Implementing and registering a `handler` is optional.\n *\n * @param {string | unknown} message The verbose output message\n */\nexport function verboseMessage({\n message,\n state,\n}: {\n message: string | object;\n state: State;\n}) {\n const handler = state.getVerboseHandler();\n if (handler) {\n handler(message);\n }\n}\n\n/**\n * Handles debug output. The caller decides and implements how\n * the messages are handled, by implementing the handler function\n * on its side. Implementing and registering a `handler` is optional.\n *\n * @param {string | object} message The debug output message\n */\nexport function debugMessage({\n message,\n state,\n}: {\n message: string | object;\n state: State;\n}) {\n const handler = state.getDebugHandler();\n if (handler) {\n handler(message);\n }\n}\n\n/**\n * Helper function to mask password header in curl command\n * @param curlCommand curl command to mask\n * @param {State} state library state\n * @returns masked curl command\n */\nfunction maskPasswordHeader(curlCommand: string) {\n const header = 'X-OpenAM-Password:';\n const mask = '<suppressed>';\n const regex = new RegExp('\"' + header + '.+?\"', 'g');\n return curlCommand.replace(regex, '\"' + header + mask + '\"');\n}\n\n/**\n * Handles curlirize output. The caller decides and implements how\n * the messages are handled, by implementing the handler function\n * on its side. Implementing and registering a `handler` is optional.\n *\n * @param {string} message The curlirize output message\n */\nexport function curlirizeMessage({\n message,\n state,\n}: {\n message: string;\n state: State;\n}) {\n const handler = state.getCurlirizeHandler();\n if (handler) {\n handler(maskPasswordHeader(message));\n }\n}\n\n/**\n * Calls a callback on client to create a progress indicator.\n * The actual implementation of the indicator is left to the client\n * Two types of indicators are supported:\n * - determinate: should be used when the process completion rate\n * can be detected (example: progress bar showing percentage or count)\n * - indeterminate: used when progress isn’t detectable, or if\n * it’s not necessary to indicate how long an activity will take.\n * (example: spinner showing progress, but not quantifying the progress)\n *\n * Example:\n * [========================================] 100% | 49/49 | Analyzing journey - transactional_auth\n *\n * @param {Number} total The total number of entries to track progress for\n * @param {String} message optional progress bar message\n * @param {String} type optional type of progress indicator. default is 'determinate'\n *\n */\nexport function createProgressIndicator({\n total,\n message = undefined,\n type = 'determinate',\n state,\n}: {\n total: number;\n message?: string;\n type?: string;\n state: State;\n}) {\n const handler = state.getCreateProgressHandler();\n if (handler) {\n handler(type, total, message);\n }\n}\n\n/**\n * Updates the progress indicator with new data/updated status.\n * @param {string} message optional message to show with the indicator\n *\n */\nexport function updateProgressIndicator({\n message = undefined,\n state,\n}: {\n message?: string;\n state: State;\n}) {\n const handler = state.getUpdateProgressHandler();\n if (handler) {\n handler(message);\n }\n}\n\n/**\n * Stop and hide the progress indicator\n * @param {string} message optional message to show with the indicator\n * @param {string} status one of 'none', 'success', 'warn', 'fail'\n */\nexport function stopProgressIndicator({\n message = null,\n status = 'none',\n state,\n}: {\n message?: string;\n status?: string;\n state: State;\n}) {\n const handler = state.getStopProgressHandler();\n if (handler) {\n handler(message, status);\n }\n}\n\n/**\n * Create an empty table\n * @param {[String]} head header row as an array of strings\n * @returns {CliTable3} an empty table\n */\nexport function createTable(head) {\n return new Table({\n head,\n chars: {\n top: '',\n 'top-mid': '',\n 'top-left': '',\n 'top-right': '',\n bottom: '',\n 'bottom-mid': '',\n 'bottom-left': '',\n 'bottom-right': '',\n left: '',\n 'left-mid': '',\n mid: '',\n 'mid-mid': '',\n right: '',\n 'right-mid': '',\n },\n style: { 'padding-left': 0, 'padding-right': 0, head: ['brightCyan'] },\n });\n}\n\n/**\n * Create a new key/value table\n * @returns {CliTable3} an empty key/value table\n */\nexport function createKeyValueTable() {\n return new Table({\n chars: {\n top: '',\n 'top-mid': '',\n 'top-left': '',\n 'top-right': '',\n bottom: '',\n 'bottom-mid': '',\n 'bottom-left': '',\n 'bottom-right': '',\n left: '',\n 'left-mid': '',\n mid: '',\n 'mid-mid': '',\n right: '',\n 'right-mid': '',\n },\n style: { 'padding-left': 0, 'padding-right': 0 },\n wordWrap: true,\n });\n}\n\n/**\n * Helper function to determine the total depth of an object\n * @param {Object} object input object\n * @returns {Number} total depth of the input object\n */\nfunction getObjectDepth(object) {\n return Object(object) === object\n ? 1 + Math.max(-1, ...Object.values(object).map(getObjectDepth))\n : 0;\n}\n\n/**\n * Helper function to determine if an object has values\n * @param {Object} object input object\n * @returns {boolean} true of the object or any of its sub-objects contain values, false otherwise\n */\nfunction hasValues(object) {\n let has = false;\n const keys = Object.keys(object);\n for (const key of keys) {\n if (Object(object[key]) !== object[key]) {\n return true;\n }\n has = has || hasValues(object[key]);\n }\n return has;\n}\n\n/**\n * Helper function (recursive) to add rows to an object table\n * @param {Object} object object to render\n * @param {Number} depth total depth of initial object\n * @param {Number} level current level\n * @param {CliTable3} table the object table to add the rows to\n * @returns the updated object table\n */\nfunction addRows(object, depth, level, table, keyMap) {\n const space = ' ';\n const keys = Object.keys(object);\n for (const key of keys) {\n if (Object(object[key]) !== object[key]) {\n if (level === 1) {\n table.push([\n keyMap[key] ? keyMap[key]['brightCyan'] : key['brightCyan'],\n object[key],\n ]);\n } else {\n table.push([\n {\n hAlign: 'right',\n content: keyMap[key] ? keyMap[key]['gray'] : key['gray'],\n },\n object[key],\n ]);\n }\n }\n }\n for (const key of keys) {\n if (Object(object[key]) === object[key]) {\n // only print header if there are any values below\n if (hasValues(object[key])) {\n let indention = new Array(level).fill(space).join('');\n if (level < 3) indention = `\\n${indention}`;\n table.push([\n indention.concat(\n keyMap[key] ? keyMap[key]['brightCyan'] : key['brightCyan']\n ),\n '',\n ]);\n }\n // eslint-disable-next-line no-param-reassign\n table = addRows(object[key], depth, level + 1, table, keyMap);\n }\n }\n return table;\n}\n\n/**\n * Create and populate an object table from any JSON object. Use for describe commands.\n * @param {Object} object JSON object to create\n * @returns {CliTable3} a table that can be printed to the console\n */\nexport function createObjectTable(object, keyMap = {}) {\n // eslint-disable-next-line no-param-reassign\n const depth = getObjectDepth(object);\n // eslint-disable-next-line no-param-reassign\n const level = 0;\n // eslint-disable-next-line no-param-reassign\n const table = new Table({\n chars: {\n top: '',\n 'top-mid': '',\n 'top-left': '',\n 'top-right': '',\n bottom: '',\n 'bottom-mid': '',\n 'bottom-left': '',\n 'bottom-right': '',\n left: '',\n 'left-mid': '',\n mid: '',\n 'mid-mid': '',\n right: '',\n 'right-mid': '',\n },\n style: { 'padding-left': 0, 'padding-right': 0, head: ['brightCyan'] },\n });\n addRows(object, depth, level + 1, table, keyMap);\n return table;\n}\n"],"mappings":"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"}
|
|
@@ -33,8 +33,11 @@ var _salt = new WeakMap();
|
|
|
33
33
|
var _key = new WeakMap();
|
|
34
34
|
var _encrypt = new WeakMap();
|
|
35
35
|
class DataProtection {
|
|
36
|
-
constructor() {
|
|
37
|
-
var
|
|
36
|
+
constructor(_ref) {
|
|
37
|
+
var {
|
|
38
|
+
pathToMasterKey = undefined,
|
|
39
|
+
state
|
|
40
|
+
} = _ref;
|
|
38
41
|
var masterKeyPath = () => pathToMasterKey || process.env[_StaticStorage.FRODO_MASTER_KEY_PATH_KEY] || "".concat((0, _os.homedir)(), "/.frodo/masterkey.key");
|
|
39
42
|
// Generates a master key in base64 format. This master key will be used to derive the key for encryption. this key should be protected by an HSM or KMS
|
|
40
43
|
_masterKey.set(this, /*#__PURE__*/_asyncToGenerator(function* () {
|
|
@@ -46,7 +49,11 @@ class DataProtection {
|
|
|
46
49
|
}
|
|
47
50
|
return yield _fs.promises.readFile(masterKeyPath(), 'utf8');
|
|
48
51
|
} catch (err) {
|
|
49
|
-
(0, _Console.printMessage)(
|
|
52
|
+
(0, _Console.printMessage)({
|
|
53
|
+
message: err.message,
|
|
54
|
+
type: 'error',
|
|
55
|
+
state
|
|
56
|
+
});
|
|
50
57
|
return '';
|
|
51
58
|
}
|
|
52
59
|
}));
|
|
@@ -62,11 +69,11 @@ class DataProtection {
|
|
|
62
69
|
/*#__PURE__*/
|
|
63
70
|
// eslint-disable-next-line no-return-await
|
|
64
71
|
function () {
|
|
65
|
-
var
|
|
72
|
+
var _ref3 = _asyncToGenerator(function* (masterKey, salt) {
|
|
66
73
|
return yield scrypt(masterKey, salt, 32);
|
|
67
74
|
});
|
|
68
75
|
return function (_x, _x2) {
|
|
69
|
-
return
|
|
76
|
+
return _ref3.apply(this, arguments);
|
|
70
77
|
};
|
|
71
78
|
}());
|
|
72
79
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataProtection.js","names":["_fs","_interopRequireWildcard","require","_crypto","_interopRequireDefault","_os","_util","_Console","_StaticStorage","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","asyncGeneratorStep","gen","resolve","reject","_next","_throw","arg","info","value","error","done","Promise","then","_asyncToGenerator","fn","self","args","arguments","apply","err","undefined","scrypt","promisify","crypto","_masterKey","_nonce","_salt","_key","_encrypt","DataProtection","constructor","pathToMasterKey","length","masterKeyPath","process","env","FRODO_MASTER_KEY_PATH_KEY","concat","homedir","FRODO_MASTER_KEY_KEY","fs","existsSync","masterKey","randomBytes","toString","fsp","writeFile","readFile","printMessage","message","_ref2","salt","_x","_x2","nonce","data","cipher","createCipheriv","encrypted","Buffer","update","JSON","stringify","final","tag","getAuthTag","buffer","encrypt","_this","decrypt","_this2","from","slice","decipher","createDecipheriv","setAuthTag","parse","_default","exports"],"sources":["ops/utils/DataProtection.ts"],"sourcesContent":["/**\n * Data is stored in base64 format. Initially it was binary data\n * Format used in this encryption module.\n * inspired by AndiDittrich\n * +--------------------+-----------------------+----------------+----------------+\n * | SALT | Initialization Vector | Auth Tag | Payload |\n * | Used to derive key | AES GCM XOR Init | Data Integrity | Encrypted Data |\n * | 64 Bytes, random | 16 Bytes, random | 16 Bytes | (N-96) Bytes |\n * +--------------------+-----------------------+----------------+----------------+\n * This module doesn't take care of data persistence, it's assumed the consuming method/class/package will do so.\n */\nimport fs, { promises as fsp } from 'fs';\nimport crypto from 'crypto';\nimport { homedir } from 'os';\nimport { promisify } from 'util';\nimport { printMessage } from './Console';\nimport {\n FRODO_MASTER_KEY_PATH_KEY,\n FRODO_MASTER_KEY_KEY,\n} from '../../storage/StaticStorage';\n\nconst scrypt = promisify(crypto.scrypt);\n// using WeakMaps for added security since it gets garbage collected\nconst _masterKey = new WeakMap();\nconst _nonce = new WeakMap();\nconst _salt = new WeakMap();\nconst _key = new WeakMap();\nconst _encrypt = new WeakMap();\n\nclass DataProtection {\n constructor(pathToMasterKey: string = null) {\n const masterKeyPath = () =>\n pathToMasterKey ||\n process.env[FRODO_MASTER_KEY_PATH_KEY] ||\n `${homedir()}/.frodo/masterkey.key`;\n // Generates a master key in base64 format. This master key will be used to derive the key for encryption. this key should be protected by an HSM or KMS\n _masterKey.set(this, async () => {\n try {\n if (process.env[FRODO_MASTER_KEY_KEY])\n return process.env[FRODO_MASTER_KEY_KEY];\n if (!fs.existsSync(masterKeyPath())) {\n const masterKey = crypto.randomBytes(32).toString('base64');\n await fsp.writeFile(masterKeyPath(), masterKey);\n }\n return await fsp.readFile(masterKeyPath(), 'utf8');\n } catch (err) {\n printMessage(err.message, 'error');\n return '';\n }\n });\n\n // the nonce for AES GCM\n _nonce.set(this, () => crypto.randomBytes(16));\n\n // The salt\n _salt.set(this, () => crypto.randomBytes(64));\n\n // The function that derives the key, this supports sync and async operations\n _key.set(\n this,\n // eslint-disable-next-line no-return-await\n async (masterKey, salt) => await scrypt(masterKey, salt, 32)\n );\n\n // private method to encrypt and return encrypted data. cleaner code\n _encrypt.set(this, (key, nonce, data, salt) => {\n const cipher = crypto.createCipheriv('aes-256-gcm', key, nonce);\n const encrypted = Buffer.concat([\n cipher.update(JSON.stringify(data), 'utf8'),\n cipher.final(),\n ]);\n const tag = cipher.getAuthTag();\n const buffer = Buffer.concat([salt, nonce, tag, encrypted]);\n return buffer.toString('base64');\n });\n }\n\n async encrypt(data) {\n const nonce = _nonce.get(this)();\n const salt = _salt.get(this)();\n const masterKey = await _masterKey.get(this)();\n const key = await _key.get(this)(masterKey, salt);\n return _encrypt.get(this)(key, nonce, data, salt);\n }\n\n async decrypt(data) {\n const buffer = Buffer.from(data.toString(), 'base64');\n const salt = buffer.slice(0, 64);\n const nonce = buffer.slice(64, 80);\n const tag = buffer.slice(80, 96);\n const encrypted = buffer.slice(96);\n const masterKey = await _masterKey.get(this)();\n const key = await _key.get(this)(masterKey, salt);\n const decipher = crypto.createDecipheriv('aes-256-gcm', key, nonce);\n decipher.setAuthTag(tag);\n return JSON.parse(\n decipher.update(encrypted.toString('binary'), 'binary', 'utf8') +\n decipher.final('utf8')\n );\n }\n}\nexport default DataProtection;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DataProtection.js","names":["_fs","_interopRequireWildcard","require","_crypto","_interopRequireDefault","_os","_util","_Console","_StaticStorage","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","asyncGeneratorStep","gen","resolve","reject","_next","_throw","arg","info","value","error","done","Promise","then","_asyncToGenerator","fn","self","args","arguments","apply","err","undefined","scrypt","promisify","crypto","_masterKey","_nonce","_salt","_key","_encrypt","DataProtection","constructor","_ref","pathToMasterKey","state","masterKeyPath","process","env","FRODO_MASTER_KEY_PATH_KEY","concat","homedir","FRODO_MASTER_KEY_KEY","fs","existsSync","masterKey","randomBytes","toString","fsp","writeFile","readFile","printMessage","message","type","_ref3","salt","_x","_x2","nonce","data","cipher","createCipheriv","encrypted","Buffer","update","JSON","stringify","final","tag","getAuthTag","buffer","encrypt","_this","decrypt","_this2","from","slice","decipher","createDecipheriv","setAuthTag","parse","_default","exports"],"sources":["ops/utils/DataProtection.ts"],"sourcesContent":["/**\n * Data is stored in base64 format. Initially it was binary data\n * Format used in this encryption module.\n * inspired by AndiDittrich\n * +--------------------+-----------------------+----------------+----------------+\n * | SALT | Initialization Vector | Auth Tag | Payload |\n * | Used to derive key | AES GCM XOR Init | Data Integrity | Encrypted Data |\n * | 64 Bytes, random | 16 Bytes, random | 16 Bytes | (N-96) Bytes |\n * +--------------------+-----------------------+----------------+----------------+\n * This module doesn't take care of data persistence, it's assumed the consuming method/class/package will do so.\n */\nimport fs, { promises as fsp } from 'fs';\nimport crypto from 'crypto';\nimport { homedir } from 'os';\nimport { promisify } from 'util';\nimport { printMessage } from './Console';\nimport {\n FRODO_MASTER_KEY_PATH_KEY,\n FRODO_MASTER_KEY_KEY,\n} from '../../storage/StaticStorage';\nimport State from '../../shared/State';\n\nconst scrypt = promisify(crypto.scrypt);\n// using WeakMaps for added security since it gets garbage collected\nconst _masterKey = new WeakMap();\nconst _nonce = new WeakMap();\nconst _salt = new WeakMap();\nconst _key = new WeakMap();\nconst _encrypt = new WeakMap();\n\nclass DataProtection {\n constructor({\n pathToMasterKey = undefined,\n state,\n }: {\n pathToMasterKey?: string;\n state: State;\n }) {\n const masterKeyPath = () =>\n pathToMasterKey ||\n process.env[FRODO_MASTER_KEY_PATH_KEY] ||\n `${homedir()}/.frodo/masterkey.key`;\n // Generates a master key in base64 format. This master key will be used to derive the key for encryption. this key should be protected by an HSM or KMS\n _masterKey.set(this, async () => {\n try {\n if (process.env[FRODO_MASTER_KEY_KEY])\n return process.env[FRODO_MASTER_KEY_KEY];\n if (!fs.existsSync(masterKeyPath())) {\n const masterKey = crypto.randomBytes(32).toString('base64');\n await fsp.writeFile(masterKeyPath(), masterKey);\n }\n return await fsp.readFile(masterKeyPath(), 'utf8');\n } catch (err) {\n printMessage({ message: err.message, type: 'error', state });\n return '';\n }\n });\n\n // the nonce for AES GCM\n _nonce.set(this, () => crypto.randomBytes(16));\n\n // The salt\n _salt.set(this, () => crypto.randomBytes(64));\n\n // The function that derives the key, this supports sync and async operations\n _key.set(\n this,\n // eslint-disable-next-line no-return-await\n async (masterKey, salt) => await scrypt(masterKey, salt, 32)\n );\n\n // private method to encrypt and return encrypted data. cleaner code\n _encrypt.set(this, (key, nonce, data, salt) => {\n const cipher = crypto.createCipheriv('aes-256-gcm', key, nonce);\n const encrypted = Buffer.concat([\n cipher.update(JSON.stringify(data), 'utf8'),\n cipher.final(),\n ]);\n const tag = cipher.getAuthTag();\n const buffer = Buffer.concat([salt, nonce, tag, encrypted]);\n return buffer.toString('base64');\n });\n }\n\n async encrypt(data) {\n const nonce = _nonce.get(this)();\n const salt = _salt.get(this)();\n const masterKey = await _masterKey.get(this)();\n const key = await _key.get(this)(masterKey, salt);\n return _encrypt.get(this)(key, nonce, data, salt);\n }\n\n async decrypt(data) {\n const buffer = Buffer.from(data.toString(), 'base64');\n const salt = buffer.slice(0, 64);\n const nonce = buffer.slice(64, 80);\n const tag = buffer.slice(80, 96);\n const encrypted = buffer.slice(96);\n const masterKey = await _masterKey.get(this)();\n const key = await _key.get(this)(masterKey, salt);\n const decipher = crypto.createDecipheriv('aes-256-gcm', key, nonce);\n decipher.setAuthTag(tag);\n return JSON.parse(\n decipher.update(encrypted.toString('binary'), 'binary', 'utf8') +\n decipher.final('utf8')\n );\n }\n}\nexport default DataProtection;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataProtection.test.js","names":["
|
|
1
|
+
{"version":3,"file":"DataProtection.test.js","names":["_State","_interopRequireDefault","require","_DataProtection","obj","__esModule","default","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","done","Promise","then","_asyncToGenerator","fn","self","args","arguments","apply","err","undefined","state","State","test","dp","DataProtection","EXPECTED","originalString","RESULT","encrypt","expect","length","toBe","encrypted","decrypt"],"sources":["ops/utils/DataProtection.test.ts"],"sourcesContent":["import State from '../../shared/State';\nimport DataProtection from './DataProtection';\n\nconst state: State = new State({});\n\ntest('DataProtection to encrypt', async () => {\n // Note this test checks that encyption happned not that encryption is correct\n // this test relys on other tests to proove the likelyhood of successful encryption\n // Arrange\n const dp = new DataProtection({ state });\n const EXPECTED =\n 'aMLtCqK1b+d3d88DDKrmIV7A6pifP77IItLKX7N7/UTOPxf8YCQWHCpTrmNnM5wNXue8HllEFIS+sxXRb20oCb4HImpbQM0so5DrHIqcIlF5LYDKjvzBOz1PdlclhIuIV+Gr8M3GRbNkQxXJuUZ4th5ISLpOjM+k8bDAlnHsRx5LLlbLFnAKq8Pu9DaTYUkZABOCOjfkoTb6re1p9c7xE2pAe213';\n const originalString =\n 'Go not to the Elves for counsel, for they will say both no and yes.';\n // Act\n const RESULT = await dp.encrypt(originalString);\n // Assert\n expect(RESULT.length).toBe(EXPECTED.length);\n});\n\ntest('DataProtection to decrypt', async () => {\n // Arrange\n const dp = new DataProtection({ state });\n const originalString =\n 'Go not to the Elves for counsel, for they will say both no and yes.';\n // Act\n const encrypted = await dp.encrypt(originalString);\n const RESULT = await dp.decrypt(encrypted);\n // Assert\n expect(RESULT).toBe(originalString);\n});\n"],"mappings":";;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,eAAA,GAAAF,sBAAA,CAAAC,OAAA;AAA8C,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAAA,SAAAG,mBAAAC,GAAA,EAAAC,OAAA,EAAAC,MAAA,EAAAC,KAAA,EAAAC,MAAA,EAAAC,GAAA,EAAAC,GAAA,cAAAC,IAAA,GAAAP,GAAA,CAAAK,GAAA,EAAAC,GAAA,OAAAE,KAAA,GAAAD,IAAA,CAAAC,KAAA,WAAAC,KAAA,IAAAP,MAAA,CAAAO,KAAA,iBAAAF,IAAA,CAAAG,IAAA,IAAAT,OAAA,CAAAO,KAAA,YAAAG,OAAA,CAAAV,OAAA,CAAAO,KAAA,EAAAI,IAAA,CAAAT,KAAA,EAAAC,MAAA;AAAA,SAAAS,kBAAAC,EAAA,6BAAAC,IAAA,SAAAC,IAAA,GAAAC,SAAA,aAAAN,OAAA,WAAAV,OAAA,EAAAC,MAAA,QAAAF,GAAA,GAAAc,EAAA,CAAAI,KAAA,CAAAH,IAAA,EAAAC,IAAA,YAAAb,MAAAK,KAAA,IAAAT,kBAAA,CAAAC,GAAA,EAAAC,OAAA,EAAAC,MAAA,EAAAC,KAAA,EAAAC,MAAA,UAAAI,KAAA,cAAAJ,OAAAe,GAAA,IAAApB,kBAAA,CAAAC,GAAA,EAAAC,OAAA,EAAAC,MAAA,EAAAC,KAAA,EAAAC,MAAA,WAAAe,GAAA,KAAAhB,KAAA,CAAAiB,SAAA;AAE9C,IAAMC,KAAY,GAAG,IAAIC,cAAK,CAAC,CAAC,CAAC,CAAC;AAElCC,IAAI,CAAC,2BAA2B,eAAAV,iBAAA,CAAE,aAAY;EAC5C;EACA;EACA;EACA,IAAMW,EAAE,GAAG,IAAIC,uBAAc,CAAC;IAAEJ;EAAM,CAAC,CAAC;EACxC,IAAMK,QAAQ,GACZ,8NAA8N;EAChO,IAAMC,cAAc,GAClB,qEAAqE;EACvE;EACA,IAAMC,MAAM,SAASJ,EAAE,CAACK,OAAO,CAACF,cAAc,CAAC;EAC/C;EACAG,MAAM,CAACF,MAAM,CAACG,MAAM,CAAC,CAACC,IAAI,CAACN,QAAQ,CAACK,MAAM,CAAC;AAC7C,CAAC,EAAC;AAEFR,IAAI,CAAC,2BAA2B,eAAAV,iBAAA,CAAE,aAAY;EAC5C;EACA,IAAMW,EAAE,GAAG,IAAIC,uBAAc,CAAC;IAAEJ;EAAM,CAAC,CAAC;EACxC,IAAMM,cAAc,GAClB,qEAAqE;EACvE;EACA,IAAMM,SAAS,SAAST,EAAE,CAACK,OAAO,CAACF,cAAc,CAAC;EAClD,IAAMC,MAAM,SAASJ,EAAE,CAACU,OAAO,CAACD,SAAS,CAAC;EAC1C;EACAH,MAAM,CAACF,MAAM,CAAC,CAACI,IAAI,CAACL,cAAc,CAAC;AACrC,CAAC,EAAC"}
|
|
@@ -215,7 +215,10 @@ function getWorkingDirectory(_ref3) {
|
|
|
215
215
|
wd = state.getDirectory().replace(/\/$/, '');
|
|
216
216
|
// create directory if it doesn't exist
|
|
217
217
|
if (!_fs.default.existsSync(wd)) {
|
|
218
|
-
(0, _Console.debugMessage)(
|
|
218
|
+
(0, _Console.debugMessage)({
|
|
219
|
+
message: "ExportImportUtils.getWorkingDirectory: creating directory '".concat(wd, "'"),
|
|
220
|
+
state
|
|
221
|
+
});
|
|
219
222
|
_fs.default.mkdirSync(wd, {
|
|
220
223
|
recursive: true
|
|
221
224
|
});
|
|
@@ -245,7 +248,11 @@ function saveToFile(_ref4) {
|
|
|
245
248
|
}
|
|
246
249
|
_fs.default.writeFile(filename, JSON.stringify(exportData, null, 2), err => {
|
|
247
250
|
if (err) {
|
|
248
|
-
return (0, _Console.printMessage)(
|
|
251
|
+
return (0, _Console.printMessage)({
|
|
252
|
+
message: "ERROR - can't save ".concat(type, " to file"),
|
|
253
|
+
state,
|
|
254
|
+
type: 'error'
|
|
255
|
+
});
|
|
249
256
|
}
|
|
250
257
|
return '';
|
|
251
258
|
});
|
|
@@ -272,7 +279,11 @@ function saveJsonToFile(_ref5) {
|
|
|
272
279
|
_fs.default.writeFileSync(filename, JSON.stringify(exportData, null, 2));
|
|
273
280
|
return true;
|
|
274
281
|
} catch (err) {
|
|
275
|
-
(0, _Console.printMessage)(
|
|
282
|
+
(0, _Console.printMessage)({
|
|
283
|
+
message: "ERROR - can't save ".concat(filename),
|
|
284
|
+
type: 'error',
|
|
285
|
+
state
|
|
286
|
+
});
|
|
276
287
|
return false;
|
|
277
288
|
}
|
|
278
289
|
}
|
|
@@ -283,11 +294,7 @@ function saveJsonToFile(_ref5) {
|
|
|
283
294
|
* @param {String} filename file name
|
|
284
295
|
*/
|
|
285
296
|
function appendTextToFile(data, filename) {
|
|
286
|
-
|
|
287
|
-
_fs.default.appendFileSync(filename, data);
|
|
288
|
-
} catch (error) {
|
|
289
|
-
(0, _Console.printMessage)("".concat(error.message), 'error');
|
|
290
|
-
}
|
|
297
|
+
_fs.default.appendFileSync(filename, data);
|
|
291
298
|
}
|
|
292
299
|
|
|
293
300
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExportImportUtils.js","names":["_fs","_interopRequireDefault","require","_promises","_path","_slugify","_Base","_StaticStorage","_Console","obj","__esModule","default","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","done","Promise","then","_asyncToGenerator","fn","self","args","arguments","apply","err","undefined","ExportImportUtils","constructor","state","getMetadata","titleCase","input","getRealmString","convertBase64TextToArray","b64text","convertBase64UrlTextToArray","b64UTF8Text","convertTextArrayToBase64","textArray","convertTextArrayToBase64Url","validateImport","metadata","getTypedFilename","name","type","suffix","length","getWorkingDirectory","saveToFile","data","identifier","filename","saveJsonToFile","includeMeta","appendTextToFile","findFilesByName","fileName","fast","path","readFilesRecursive","directory","exports","_ref","origin","getHost","originAmVersion","getAmVersion","exportedBy","getUsername","exportDate","Date","toISOString","exportTool","FRODO_METADATA_ID","exportToolVersion","getFrodoVersion","str","toString","splitStr","toLowerCase","split","i","charAt","toUpperCase","slice","join","_ref2","realm","getRealm","reduce","result","item","concat","arrayOut","plainText","decode","replace","decodeBase64Url","joinedText","b64encodedScript","encode","encodeBase64Url","slug","slugify","_ref3","wd","getDirectory","fs","existsSync","debugMessage","mkdirSync","recursive","_ref4","exportData","Array","isArray","forEach","element","writeFile","JSON","stringify","printMessage","_ref5","writeFileSync","appendFileSync","message","entries","readdirSync","encoding","withFileTypes","files","filter","entry","isDirectory","file","map","folders","folder","push","_x","_readFilesRecursive","items","readdir","filePathsNested","all","_ref6","entity","lstat","_x2","flat"],"sources":["ops/utils/ExportImportUtils.ts"],"sourcesContent":["import fs from 'fs';\nimport { lstat, readdir } from 'fs/promises';\nimport { join } from 'path';\nimport slugify from 'slugify';\nimport {\n decode,\n decodeBase64Url,\n encode,\n encodeBase64Url,\n} from '../../api/utils/Base64';\nimport State from '../../shared/State';\nimport { FRODO_METADATA_ID } from '../../storage/StaticStorage';\nimport { ExportMetaData } from '../OpsTypes';\nimport { debugMessage, printMessage } from './Console';\n\nexport default class ExportImportUtils {\n state: State;\n constructor(state: State) {\n this.state = state;\n }\n\n getMetadata(): ExportMetaData {\n return getMetadata({ state: this.state });\n }\n\n /*\n * Output str in title case\n *\n * e.g.: 'ALL UPPERCASE AND all lowercase' = 'All Uppercase And All Lowercase'\n */\n titleCase(input: string) {\n return titleCase(input);\n }\n\n getRealmString() {\n return getRealmString({ state: this.state });\n }\n\n convertBase64TextToArray(b64text: string) {\n return convertBase64TextToArray(b64text);\n }\n\n convertBase64UrlTextToArray(b64UTF8Text: string) {\n return convertBase64UrlTextToArray(b64UTF8Text);\n }\n\n convertTextArrayToBase64(textArray: string[]) {\n return convertTextArrayToBase64(textArray);\n }\n\n convertTextArrayToBase64Url(textArray: string[]) {\n return convertTextArrayToBase64Url(textArray);\n }\n\n validateImport(metadata): boolean {\n return validateImport(metadata);\n }\n\n getTypedFilename(name: string, type: string, suffix = 'json') {\n return getTypedFilename(name, type, suffix);\n }\n\n getWorkingDirectory() {\n return getWorkingDirectory({ state: this.state });\n }\n\n saveToFile(type: string, data: object, identifier: string, filename: string) {\n return saveToFile({ type, data, identifier, filename, state: this.state });\n }\n\n /**\n * Save JSON object to file\n * @param {Object} data data object\n * @param {String} filename file name\n * @return {boolean} true if successful, false otherwise\n */\n saveJsonToFile(data: object, filename: string, includeMeta = true): boolean {\n return saveJsonToFile({ data, filename, includeMeta, state: this.state });\n }\n\n /**\n * Append text data to file\n * @param {String} data text data\n * @param {String} filename file name\n */\n appendTextToFile(data: string, filename: string) {\n return appendTextToFile(data, filename);\n }\n\n /**\n * Find files by name\n * @param {string} fileName file name to search for\n * @param {boolean} fast return first result and stop search\n * @param {string} path path to directory where to start the search\n * @returns {string[]} array of found file paths relative to starting directory\n */\n findFilesByName(fileName: string, fast = true, path = './'): string[] {\n return findFilesByName(fileName, fast, path);\n }\n\n /**\n * find all (nested) files in a directory\n *\n * @param directory directory to search\n * @returns list of files\n */\n async readFilesRecursive(directory: string): Promise<string[]> {\n return readFilesRecursive(directory);\n }\n}\n\nexport function getMetadata({ state }: { state: State }): ExportMetaData {\n const metadata: ExportMetaData = {\n origin: state.getHost(),\n originAmVersion: state.getAmVersion(),\n exportedBy: state.getUsername(),\n exportDate: new Date().toISOString(),\n exportTool: FRODO_METADATA_ID,\n exportToolVersion: state.getFrodoVersion(),\n };\n return metadata;\n}\n\n/*\n * Output str in title case\n *\n * e.g.: 'ALL UPPERCASE AND all lowercase' = 'All Uppercase And All Lowercase'\n */\nexport function titleCase(input: string) {\n const str = input.toString();\n const splitStr = str.toLowerCase().split(' ');\n for (let i = 0; i < splitStr.length; i += 1) {\n splitStr[i] = splitStr[i].charAt(0).toUpperCase() + splitStr[i].slice(1);\n }\n return splitStr.join(' ');\n}\n\nexport function getRealmString({ state }: { state: State }) {\n const realm = state.getRealm();\n return realm\n .split('/')\n .reduce((result, item) => `${result}${titleCase(item)}`, '');\n}\n\nexport function convertBase64TextToArray(b64text: string) {\n let arrayOut = [];\n let plainText = decode(b64text);\n plainText = plainText.replace(/\\t/g, ' ');\n arrayOut = plainText.split('\\n');\n return arrayOut;\n}\n\nexport function convertBase64UrlTextToArray(b64UTF8Text: string) {\n let arrayOut = [];\n let plainText = decodeBase64Url(b64UTF8Text);\n plainText = plainText.replace(/\\t/g, ' ');\n arrayOut = plainText.split('\\n');\n return arrayOut;\n}\n\nexport function convertTextArrayToBase64(textArray: string[]) {\n const joinedText = textArray.join('\\n');\n const b64encodedScript = encode(joinedText);\n return b64encodedScript;\n}\n\nexport function convertTextArrayToBase64Url(textArray: string[]) {\n const joinedText = textArray.join('\\n');\n const b64encodedScript = encodeBase64Url(joinedText);\n return b64encodedScript;\n}\n\n// eslint-disable-next-line no-unused-vars\nexport function validateImport(metadata): boolean {\n return metadata || true;\n}\n\nexport function getTypedFilename(name: string, type: string, suffix = 'json') {\n const slug = slugify(name.replace(/^http(s?):\\/\\//, ''));\n return `${slug}.${type}.${suffix}`;\n}\n\nexport function getWorkingDirectory({ state }: { state: State }) {\n let wd = '.';\n if (state.getDirectory()) {\n wd = state.getDirectory().replace(/\\/$/, '');\n // create directory if it doesn't exist\n if (!fs.existsSync(wd)) {\n debugMessage(\n `ExportImportUtils.getWorkingDirectory: creating directory '${wd}'`\n );\n fs.mkdirSync(wd, { recursive: true });\n }\n }\n return wd;\n}\n\nexport function saveToFile({\n type,\n data,\n identifier,\n filename,\n state,\n}: {\n type: string;\n data: object;\n identifier: string;\n filename: string;\n state: State;\n}) {\n const exportData = {};\n exportData['meta'] = getMetadata({ state });\n exportData[type] = {};\n\n if (Array.isArray(data)) {\n data.forEach((element) => {\n exportData[type][element[identifier]] = element;\n });\n } else {\n exportData[type][data[identifier]] = data;\n }\n fs.writeFile(filename, JSON.stringify(exportData, null, 2), (err) => {\n if (err) {\n return printMessage(`ERROR - can't save ${type} to file`, 'error');\n }\n return '';\n });\n}\n\n/**\n * Save JSON object to file\n * @param {Object} data data object\n * @param {String} filename file name\n * @return {boolean} true if successful, false otherwise\n */\nexport function saveJsonToFile({\n data,\n filename,\n includeMeta = true,\n state,\n}: {\n data: object;\n filename: string;\n includeMeta?: boolean;\n state: State;\n}): boolean {\n const exportData = data;\n if (includeMeta) exportData['meta'] = getMetadata({ state });\n try {\n fs.writeFileSync(filename, JSON.stringify(exportData, null, 2));\n return true;\n } catch (err) {\n printMessage(`ERROR - can't save ${filename}`, 'error');\n return false;\n }\n}\n\n/**\n * Append text data to file\n * @param {String} data text data\n * @param {String} filename file name\n */\nexport function appendTextToFile(data: string, filename: string) {\n try {\n fs.appendFileSync(filename, data);\n } catch (error) {\n printMessage(`${error.message}`, 'error');\n }\n}\n\n/**\n * Find files by name\n * @param {string} fileName file name to search for\n * @param {boolean} fast return first result and stop search\n * @param {string} path path to directory where to start the search\n * @returns {string[]} array of found file paths relative to starting directory\n */\nexport function findFilesByName(\n fileName: string,\n fast = true,\n path = './'\n): string[] {\n const entries = fs.readdirSync(path, {\n encoding: 'utf8',\n withFileTypes: true,\n });\n\n // Get files within the current directory and add a path key to the file objects\n const files: string[] = entries\n .filter((entry) => !entry.isDirectory())\n .filter((file) => file.name === fileName)\n // .map((file) => ({ ...file, path: path + file.name }));\n .map((file) => path + file.name);\n\n if (fast && files.length > 0) return files;\n\n // search sub-folders\n const folders = entries.filter((entry) => entry.isDirectory());\n for (const folder of folders)\n files.push(...findFilesByName(fileName, fast, `${path}${folder.name}/`));\n\n return files;\n}\n\n/**\n * find all (nested) files in a directory\n *\n * @param directory directory to search\n * @returns list of files\n */\nexport async function readFilesRecursive(directory: string): Promise<string[]> {\n const items = await readdir(directory);\n\n const filePathsNested = await Promise.all(\n items.map(async (entity) => {\n const path = join(directory, entity);\n const isDirectory = (await lstat(path)).isDirectory();\n\n if (isDirectory) {\n return readFilesRecursive(path);\n }\n return path;\n })\n );\n\n return filePathsNested.flat();\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ExportImportUtils.js","names":["_fs","_interopRequireDefault","require","_promises","_path","_slugify","_Base","_StaticStorage","_Console","obj","__esModule","default","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","done","Promise","then","_asyncToGenerator","fn","self","args","arguments","apply","err","undefined","ExportImportUtils","constructor","state","getMetadata","titleCase","input","getRealmString","convertBase64TextToArray","b64text","convertBase64UrlTextToArray","b64UTF8Text","convertTextArrayToBase64","textArray","convertTextArrayToBase64Url","validateImport","metadata","getTypedFilename","name","type","suffix","length","getWorkingDirectory","saveToFile","data","identifier","filename","saveJsonToFile","includeMeta","appendTextToFile","findFilesByName","fileName","fast","path","readFilesRecursive","directory","exports","_ref","origin","getHost","originAmVersion","getAmVersion","exportedBy","getUsername","exportDate","Date","toISOString","exportTool","FRODO_METADATA_ID","exportToolVersion","getFrodoVersion","str","toString","splitStr","toLowerCase","split","i","charAt","toUpperCase","slice","join","_ref2","realm","getRealm","reduce","result","item","concat","arrayOut","plainText","decode","replace","decodeBase64Url","joinedText","b64encodedScript","encode","encodeBase64Url","slug","slugify","_ref3","wd","getDirectory","fs","existsSync","debugMessage","message","mkdirSync","recursive","_ref4","exportData","Array","isArray","forEach","element","writeFile","JSON","stringify","printMessage","_ref5","writeFileSync","appendFileSync","entries","readdirSync","encoding","withFileTypes","files","filter","entry","isDirectory","file","map","folders","folder","push","_x","_readFilesRecursive","items","readdir","filePathsNested","all","_ref6","entity","lstat","_x2","flat"],"sources":["ops/utils/ExportImportUtils.ts"],"sourcesContent":["import fs from 'fs';\nimport { lstat, readdir } from 'fs/promises';\nimport { join } from 'path';\nimport slugify from 'slugify';\nimport {\n decode,\n decodeBase64Url,\n encode,\n encodeBase64Url,\n} from '../../api/utils/Base64';\nimport State from '../../shared/State';\nimport { FRODO_METADATA_ID } from '../../storage/StaticStorage';\nimport { ExportMetaData } from '../OpsTypes';\nimport { debugMessage, printMessage } from './Console';\n\nexport default class ExportImportUtils {\n state: State;\n constructor(state: State) {\n this.state = state;\n }\n\n getMetadata(): ExportMetaData {\n return getMetadata({ state: this.state });\n }\n\n /*\n * Output str in title case\n *\n * e.g.: 'ALL UPPERCASE AND all lowercase' = 'All Uppercase And All Lowercase'\n */\n titleCase(input: string) {\n return titleCase(input);\n }\n\n getRealmString() {\n return getRealmString({ state: this.state });\n }\n\n convertBase64TextToArray(b64text: string) {\n return convertBase64TextToArray(b64text);\n }\n\n convertBase64UrlTextToArray(b64UTF8Text: string) {\n return convertBase64UrlTextToArray(b64UTF8Text);\n }\n\n convertTextArrayToBase64(textArray: string[]) {\n return convertTextArrayToBase64(textArray);\n }\n\n convertTextArrayToBase64Url(textArray: string[]) {\n return convertTextArrayToBase64Url(textArray);\n }\n\n validateImport(metadata): boolean {\n return validateImport(metadata);\n }\n\n getTypedFilename(name: string, type: string, suffix = 'json') {\n return getTypedFilename(name, type, suffix);\n }\n\n getWorkingDirectory() {\n return getWorkingDirectory({ state: this.state });\n }\n\n saveToFile(type: string, data: object, identifier: string, filename: string) {\n return saveToFile({ type, data, identifier, filename, state: this.state });\n }\n\n /**\n * Save JSON object to file\n * @param {Object} data data object\n * @param {String} filename file name\n * @return {boolean} true if successful, false otherwise\n */\n saveJsonToFile(data: object, filename: string, includeMeta = true): boolean {\n return saveJsonToFile({ data, filename, includeMeta, state: this.state });\n }\n\n /**\n * Append text data to file\n * @param {String} data text data\n * @param {String} filename file name\n */\n appendTextToFile(data: string, filename: string) {\n return appendTextToFile(data, filename);\n }\n\n /**\n * Find files by name\n * @param {string} fileName file name to search for\n * @param {boolean} fast return first result and stop search\n * @param {string} path path to directory where to start the search\n * @returns {string[]} array of found file paths relative to starting directory\n */\n findFilesByName(fileName: string, fast = true, path = './'): string[] {\n return findFilesByName(fileName, fast, path);\n }\n\n /**\n * find all (nested) files in a directory\n *\n * @param directory directory to search\n * @returns list of files\n */\n async readFilesRecursive(directory: string): Promise<string[]> {\n return readFilesRecursive(directory);\n }\n}\n\nexport function getMetadata({ state }: { state: State }): ExportMetaData {\n const metadata: ExportMetaData = {\n origin: state.getHost(),\n originAmVersion: state.getAmVersion(),\n exportedBy: state.getUsername(),\n exportDate: new Date().toISOString(),\n exportTool: FRODO_METADATA_ID,\n exportToolVersion: state.getFrodoVersion(),\n };\n return metadata;\n}\n\n/*\n * Output str in title case\n *\n * e.g.: 'ALL UPPERCASE AND all lowercase' = 'All Uppercase And All Lowercase'\n */\nexport function titleCase(input: string) {\n const str = input.toString();\n const splitStr = str.toLowerCase().split(' ');\n for (let i = 0; i < splitStr.length; i += 1) {\n splitStr[i] = splitStr[i].charAt(0).toUpperCase() + splitStr[i].slice(1);\n }\n return splitStr.join(' ');\n}\n\nexport function getRealmString({ state }: { state: State }) {\n const realm = state.getRealm();\n return realm\n .split('/')\n .reduce((result, item) => `${result}${titleCase(item)}`, '');\n}\n\nexport function convertBase64TextToArray(b64text: string) {\n let arrayOut = [];\n let plainText = decode(b64text);\n plainText = plainText.replace(/\\t/g, ' ');\n arrayOut = plainText.split('\\n');\n return arrayOut;\n}\n\nexport function convertBase64UrlTextToArray(b64UTF8Text: string) {\n let arrayOut = [];\n let plainText = decodeBase64Url(b64UTF8Text);\n plainText = plainText.replace(/\\t/g, ' ');\n arrayOut = plainText.split('\\n');\n return arrayOut;\n}\n\nexport function convertTextArrayToBase64(textArray: string[]) {\n const joinedText = textArray.join('\\n');\n const b64encodedScript = encode(joinedText);\n return b64encodedScript;\n}\n\nexport function convertTextArrayToBase64Url(textArray: string[]) {\n const joinedText = textArray.join('\\n');\n const b64encodedScript = encodeBase64Url(joinedText);\n return b64encodedScript;\n}\n\n// eslint-disable-next-line no-unused-vars\nexport function validateImport(metadata): boolean {\n return metadata || true;\n}\n\nexport function getTypedFilename(name: string, type: string, suffix = 'json') {\n const slug = slugify(name.replace(/^http(s?):\\/\\//, ''));\n return `${slug}.${type}.${suffix}`;\n}\n\nexport function getWorkingDirectory({ state }: { state: State }) {\n let wd = '.';\n if (state.getDirectory()) {\n wd = state.getDirectory().replace(/\\/$/, '');\n // create directory if it doesn't exist\n if (!fs.existsSync(wd)) {\n debugMessage({\n message: `ExportImportUtils.getWorkingDirectory: creating directory '${wd}'`,\n state,\n });\n fs.mkdirSync(wd, { recursive: true });\n }\n }\n return wd;\n}\n\nexport function saveToFile({\n type,\n data,\n identifier,\n filename,\n state,\n}: {\n type: string;\n data: object;\n identifier: string;\n filename: string;\n state: State;\n}) {\n const exportData = {};\n exportData['meta'] = getMetadata({ state });\n exportData[type] = {};\n\n if (Array.isArray(data)) {\n data.forEach((element) => {\n exportData[type][element[identifier]] = element;\n });\n } else {\n exportData[type][data[identifier]] = data;\n }\n fs.writeFile(filename, JSON.stringify(exportData, null, 2), (err) => {\n if (err) {\n return printMessage({\n message: `ERROR - can't save ${type} to file`,\n state,\n type: 'error',\n });\n }\n return '';\n });\n}\n\n/**\n * Save JSON object to file\n * @param {Object} data data object\n * @param {String} filename file name\n * @return {boolean} true if successful, false otherwise\n */\nexport function saveJsonToFile({\n data,\n filename,\n includeMeta = true,\n state,\n}: {\n data: object;\n filename: string;\n includeMeta?: boolean;\n state: State;\n}): boolean {\n const exportData = data;\n if (includeMeta) exportData['meta'] = getMetadata({ state });\n try {\n fs.writeFileSync(filename, JSON.stringify(exportData, null, 2));\n return true;\n } catch (err) {\n printMessage({\n message: `ERROR - can't save ${filename}`,\n type: 'error',\n state,\n });\n return false;\n }\n}\n\n/**\n * Append text data to file\n * @param {String} data text data\n * @param {String} filename file name\n */\nexport function appendTextToFile(data: string, filename: string) {\n fs.appendFileSync(filename, data);\n}\n\n/**\n * Find files by name\n * @param {string} fileName file name to search for\n * @param {boolean} fast return first result and stop search\n * @param {string} path path to directory where to start the search\n * @returns {string[]} array of found file paths relative to starting directory\n */\nexport function findFilesByName(\n fileName: string,\n fast = true,\n path = './'\n): string[] {\n const entries = fs.readdirSync(path, {\n encoding: 'utf8',\n withFileTypes: true,\n });\n\n // Get files within the current directory and add a path key to the file objects\n const files: string[] = entries\n .filter((entry) => !entry.isDirectory())\n .filter((file) => file.name === fileName)\n // .map((file) => ({ ...file, path: path + file.name }));\n .map((file) => path + file.name);\n\n if (fast && files.length > 0) return files;\n\n // search sub-folders\n const folders = entries.filter((entry) => entry.isDirectory());\n for (const folder of folders)\n files.push(...findFilesByName(fileName, fast, `${path}${folder.name}/`));\n\n return files;\n}\n\n/**\n * find all (nested) files in a directory\n *\n * @param directory directory to search\n * @returns list of files\n */\nexport async function readFilesRecursive(directory: string): Promise<string[]> {\n const items = await readdir(directory);\n\n const filePathsNested = await Promise.all(\n items.map(async (entity) => {\n const path = join(directory, entity);\n const isDirectory = (await lstat(path)).isDirectory();\n\n if (isDirectory) {\n return readFilesRecursive(path);\n }\n return path;\n })\n );\n\n return filePathsNested.flat();\n}\n"],"mappings":"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"}
|
|
@@ -10,13 +10,20 @@ exports.validateScriptHooks = validateScriptHooks;
|
|
|
10
10
|
var _esprima = require("esprima");
|
|
11
11
|
var _Base = require("../../api/utils/Base64");
|
|
12
12
|
var _Console = require("./Console");
|
|
13
|
-
function validateScriptHooks(
|
|
13
|
+
function validateScriptHooks(_ref) {
|
|
14
|
+
var {
|
|
15
|
+
jsonData,
|
|
16
|
+
state
|
|
17
|
+
} = _ref;
|
|
14
18
|
var scriptHooks = findAllScriptHooks(jsonData);
|
|
15
19
|
for (var scriptHook of scriptHooks) {
|
|
16
20
|
if (!('source' in scriptHook)) {
|
|
17
21
|
continue;
|
|
18
22
|
}
|
|
19
|
-
if (!isValidJs(
|
|
23
|
+
if (!isValidJs({
|
|
24
|
+
javascriptSource: scriptHook.source,
|
|
25
|
+
state
|
|
26
|
+
})) {
|
|
20
27
|
return false;
|
|
21
28
|
}
|
|
22
29
|
}
|
|
@@ -40,29 +47,47 @@ function findAllScriptHooks(jsonData) {
|
|
|
40
47
|
}
|
|
41
48
|
return scriptHooksArray;
|
|
42
49
|
}
|
|
43
|
-
function validateScript(script) {
|
|
50
|
+
function validateScript(script, state) {
|
|
44
51
|
var scriptRaw = (0, _Base.decode)(script.script);
|
|
45
52
|
if (script.language === 'JAVASCRIPT') {
|
|
46
|
-
return isValidJs(
|
|
53
|
+
return isValidJs({
|
|
54
|
+
javascriptSource: scriptRaw,
|
|
55
|
+
state
|
|
56
|
+
});
|
|
47
57
|
}
|
|
48
58
|
return true;
|
|
49
59
|
}
|
|
50
|
-
function validateScriptDecoded(
|
|
60
|
+
function validateScriptDecoded(_ref2) {
|
|
61
|
+
var {
|
|
62
|
+
scriptSkeleton,
|
|
63
|
+
state
|
|
64
|
+
} = _ref2;
|
|
51
65
|
if (!Array.isArray(scriptSkeleton.script)) {
|
|
52
66
|
return false;
|
|
53
67
|
}
|
|
54
68
|
if (scriptSkeleton.language === 'JAVASCRIPT') {
|
|
55
69
|
var script = scriptSkeleton.script.join('\n');
|
|
56
|
-
return isValidJs(
|
|
70
|
+
return isValidJs({
|
|
71
|
+
javascriptSource: script,
|
|
72
|
+
state
|
|
73
|
+
});
|
|
57
74
|
}
|
|
58
75
|
return true;
|
|
59
76
|
}
|
|
60
|
-
function isValidJs(
|
|
77
|
+
function isValidJs(_ref3) {
|
|
78
|
+
var {
|
|
79
|
+
javascriptSource,
|
|
80
|
+
state
|
|
81
|
+
} = _ref3;
|
|
61
82
|
try {
|
|
62
83
|
(0, _esprima.parseScript)(javascriptSource);
|
|
63
84
|
return true;
|
|
64
85
|
} catch (e) {
|
|
65
|
-
(0, _Console.printMessage)(
|
|
86
|
+
(0, _Console.printMessage)({
|
|
87
|
+
message: "Invalid JavaScript: ".concat(e.message),
|
|
88
|
+
type: 'error',
|
|
89
|
+
state
|
|
90
|
+
});
|
|
66
91
|
return false;
|
|
67
92
|
}
|
|
68
93
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScriptValidationUtils.js","names":["_esprima","require","_Base","_Console","validateScriptHooks","jsonData","scriptHooks","findAllScriptHooks","scriptHook","isValidJs","source","scriptHooksArray","arguments","length","undefined","key","item","type","push","validateScript","script","scriptRaw","decode","language","validateScriptDecoded","scriptSkeleton","Array","isArray","join","
|
|
1
|
+
{"version":3,"file":"ScriptValidationUtils.js","names":["_esprima","require","_Base","_Console","validateScriptHooks","_ref","jsonData","state","scriptHooks","findAllScriptHooks","scriptHook","isValidJs","javascriptSource","source","scriptHooksArray","arguments","length","undefined","key","item","type","push","validateScript","script","scriptRaw","decode","language","validateScriptDecoded","_ref2","scriptSkeleton","Array","isArray","join","_ref3","parseScript","e","printMessage","message","concat"],"sources":["ops/utils/ScriptValidationUtils.ts"],"sourcesContent":["import { parseScript } from 'esprima';\nimport { ScriptSkeleton } from '../../api/ApiTypes';\nimport { decode } from '../../api/utils/Base64';\nimport { printMessage } from './Console';\nimport State from '../../shared/State';\n\ninterface ScriptHook {\n type: 'text/javascript';\n source?: string;\n}\n\nexport function validateScriptHooks({\n jsonData,\n state,\n}: {\n jsonData: object;\n state: State;\n}): boolean {\n const scriptHooks = findAllScriptHooks(jsonData);\n\n for (const scriptHook of scriptHooks) {\n if (!('source' in scriptHook)) {\n continue;\n }\n\n if (!isValidJs({ javascriptSource: scriptHook.source, state })) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction findAllScriptHooks(\n jsonData: unknown,\n scriptHooksArray: ScriptHook[] = []\n): ScriptHook[] {\n if (typeof jsonData !== 'object' || jsonData === null) {\n return scriptHooksArray;\n }\n\n for (const key in jsonData) {\n const item = jsonData[key];\n if (typeof item !== 'object' || item === null) {\n continue;\n }\n\n if ('type' in item && item.type === 'text/javascript') {\n scriptHooksArray.push(item);\n } else {\n findAllScriptHooks(item, scriptHooksArray);\n }\n }\n\n return scriptHooksArray;\n}\n\nexport function validateScript(script: ScriptSkeleton, state: State): boolean {\n const scriptRaw = decode(script.script);\n\n if (script.language === 'JAVASCRIPT') {\n return isValidJs({ javascriptSource: scriptRaw, state });\n }\n return true;\n}\n\nexport function validateScriptDecoded({\n scriptSkeleton,\n state,\n}: {\n scriptSkeleton: ScriptSkeleton;\n state: State;\n}): boolean {\n if (!Array.isArray(scriptSkeleton.script)) {\n return false;\n }\n if (scriptSkeleton.language === 'JAVASCRIPT') {\n const script = scriptSkeleton.script.join('\\n');\n return isValidJs({ javascriptSource: script, state });\n }\n return true;\n}\n\nexport function isValidJs({\n javascriptSource,\n state,\n}: {\n javascriptSource: string;\n state: State;\n}) {\n try {\n parseScript(javascriptSource);\n return true;\n } catch (e) {\n printMessage({\n message: `Invalid JavaScript: ${e.message}`,\n type: 'error',\n state,\n });\n\n return false;\n }\n}\n"],"mappings":";;;;;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAEA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AAQO,SAASG,mBAAmBA,CAAAC,IAAA,EAMvB;EAAA,IANwB;IAClCC,QAAQ;IACRC;EAIF,CAAC,GAAAF,IAAA;EACC,IAAMG,WAAW,GAAGC,kBAAkB,CAACH,QAAQ,CAAC;EAEhD,KAAK,IAAMI,UAAU,IAAIF,WAAW,EAAE;IACpC,IAAI,EAAE,QAAQ,IAAIE,UAAU,CAAC,EAAE;MAC7B;IACF;IAEA,IAAI,CAACC,SAAS,CAAC;MAAEC,gBAAgB,EAAEF,UAAU,CAACG,MAAM;MAAEN;IAAM,CAAC,CAAC,EAAE;MAC9D,OAAO,KAAK;IACd;EACF;EAEA,OAAO,IAAI;AACb;AAEA,SAASE,kBAAkBA,CACzBH,QAAiB,EAEH;EAAA,IADdQ,gBAA8B,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,EAAE;EAEnC,IAAI,OAAOT,QAAQ,KAAK,QAAQ,IAAIA,QAAQ,KAAK,IAAI,EAAE;IACrD,OAAOQ,gBAAgB;EACzB;EAEA,KAAK,IAAMI,GAAG,IAAIZ,QAAQ,EAAE;IAC1B,IAAMa,IAAI,GAAGb,QAAQ,CAACY,GAAG,CAAC;IAC1B,IAAI,OAAOC,IAAI,KAAK,QAAQ,IAAIA,IAAI,KAAK,IAAI,EAAE;MAC7C;IACF;IAEA,IAAI,MAAM,IAAIA,IAAI,IAAIA,IAAI,CAACC,IAAI,KAAK,iBAAiB,EAAE;MACrDN,gBAAgB,CAACO,IAAI,CAACF,IAAI,CAAC;IAC7B,CAAC,MAAM;MACLV,kBAAkB,CAACU,IAAI,EAAEL,gBAAgB,CAAC;IAC5C;EACF;EAEA,OAAOA,gBAAgB;AACzB;AAEO,SAASQ,cAAcA,CAACC,MAAsB,EAAEhB,KAAY,EAAW;EAC5E,IAAMiB,SAAS,GAAG,IAAAC,YAAM,EAACF,MAAM,CAACA,MAAM,CAAC;EAEvC,IAAIA,MAAM,CAACG,QAAQ,KAAK,YAAY,EAAE;IACpC,OAAOf,SAAS,CAAC;MAAEC,gBAAgB,EAAEY,SAAS;MAAEjB;IAAM,CAAC,CAAC;EAC1D;EACA,OAAO,IAAI;AACb;AAEO,SAASoB,qBAAqBA,CAAAC,KAAA,EAMzB;EAAA,IAN0B;IACpCC,cAAc;IACdtB;EAIF,CAAC,GAAAqB,KAAA;EACC,IAAI,CAACE,KAAK,CAACC,OAAO,CAACF,cAAc,CAACN,MAAM,CAAC,EAAE;IACzC,OAAO,KAAK;EACd;EACA,IAAIM,cAAc,CAACH,QAAQ,KAAK,YAAY,EAAE;IAC5C,IAAMH,MAAM,GAAGM,cAAc,CAACN,MAAM,CAACS,IAAI,CAAC,IAAI,CAAC;IAC/C,OAAOrB,SAAS,CAAC;MAAEC,gBAAgB,EAAEW,MAAM;MAAEhB;IAAM,CAAC,CAAC;EACvD;EACA,OAAO,IAAI;AACb;AAEO,SAASI,SAASA,CAAAsB,KAAA,EAMtB;EAAA,IANuB;IACxBrB,gBAAgB;IAChBL;EAIF,CAAC,GAAA0B,KAAA;EACC,IAAI;IACF,IAAAC,oBAAW,EAACtB,gBAAgB,CAAC;IAC7B,OAAO,IAAI;EACb,CAAC,CAAC,OAAOuB,CAAC,EAAE;IACV,IAAAC,qBAAY,EAAC;MACXC,OAAO,yBAAAC,MAAA,CAAyBH,CAAC,CAACE,OAAO,CAAE;MAC3CjB,IAAI,EAAE,OAAO;MACbb;IACF,CAAC,CAAC;IAEF,OAAO,KAAK;EACd;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScriptValidationUtils.test.js","names":["
|
|
1
|
+
{"version":3,"file":"ScriptValidationUtils.test.js","names":["_State","_interopRequireDefault","require","_ScriptValidationUtils","obj","__esModule","default","state","State","describe","it","jsonData","script","type","source","expect","validateScriptHooks","toBe"],"sources":["ops/utils/ScriptValidationUtils.test.ts"],"sourcesContent":["import State from '../../shared/State';\nimport { validateScriptHooks } from './ScriptValidationUtils';\n\nconst state: State = new State({});\n\ndescribe('validateScriptHooks', () => {\n it('should return false when there is an invalid script', () => {\n const jsonData = {\n script: {\n type: 'text/javascript',\n source: 'invalid javascript',\n },\n };\n expect(validateScriptHooks({ jsonData, state })).toBe(false);\n });\n\n it('should return true when there is a valid script', () => {\n const jsonData = {\n script: {\n type: 'text/javascript',\n source: 'console.log(\"Hello World\");',\n },\n };\n expect(validateScriptHooks({ jsonData, state })).toBe(true);\n });\n\n it('should return true when there is no script', () => {\n const jsonData = {\n script: {\n type: 'text/javascript',\n },\n };\n expect(validateScriptHooks({ jsonData, state })).toBe(true);\n });\n});\n"],"mappings":";;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,sBAAA,GAAAD,OAAA;AAA8D,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAE9D,IAAMG,KAAY,GAAG,IAAIC,cAAK,CAAC,CAAC,CAAC,CAAC;AAElCC,QAAQ,CAAC,qBAAqB,EAAE,MAAM;EACpCC,EAAE,CAAC,qDAAqD,EAAE,MAAM;IAC9D,IAAMC,QAAQ,GAAG;MACfC,MAAM,EAAE;QACNC,IAAI,EAAE,iBAAiB;QACvBC,MAAM,EAAE;MACV;IACF,CAAC;IACDC,MAAM,CAAC,IAAAC,0CAAmB,EAAC;MAAEL,QAAQ;MAAEJ;IAAM,CAAC,CAAC,CAAC,CAACU,IAAI,CAAC,KAAK,CAAC;EAC9D,CAAC,CAAC;EAEFP,EAAE,CAAC,iDAAiD,EAAE,MAAM;IAC1D,IAAMC,QAAQ,GAAG;MACfC,MAAM,EAAE;QACNC,IAAI,EAAE,iBAAiB;QACvBC,MAAM,EAAE;MACV;IACF,CAAC;IACDC,MAAM,CAAC,IAAAC,0CAAmB,EAAC;MAAEL,QAAQ;MAAEJ;IAAM,CAAC,CAAC,CAAC,CAACU,IAAI,CAAC,IAAI,CAAC;EAC7D,CAAC,CAAC;EAEFP,EAAE,CAAC,4CAA4C,EAAE,MAAM;IACrD,IAAMC,QAAQ,GAAG;MACfC,MAAM,EAAE;QACNC,IAAI,EAAE;MACR;IACF,CAAC;IACDE,MAAM,CAAC,IAAAC,0CAAmB,EAAC;MAAEL,QAAQ;MAAEJ;IAAM,CAAC,CAAC,CAAC,CAACU,IAAI,CAAC,IAAI,CAAC;EAC7D,CAAC,CAAC;AACJ,CAAC,CAAC"}
|