@rockcarver/frodo-lib 0.12.6 → 0.13.0
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 +22 -1
- package/cjs/api/ApiTypes.js.map +1 -1
- package/cjs/index.js +9 -1
- package/cjs/index.js.map +1 -1
- package/cjs/ops/CirclesOfTrustOps.js +1 -12
- package/cjs/ops/CirclesOfTrustOps.js.map +1 -1
- package/cjs/ops/EmailTemplateOps.js +0 -12
- package/cjs/ops/EmailTemplateOps.js.map +1 -1
- package/cjs/ops/IdpOps.js +1 -12
- package/cjs/ops/IdpOps.js.map +1 -1
- package/cjs/ops/JourneyOps.js +127 -193
- package/cjs/ops/JourneyOps.js.map +1 -1
- package/cjs/ops/JourneyOps.test.js.map +1 -1
- package/cjs/ops/NodeOps.js +32 -29
- package/cjs/ops/NodeOps.js.map +1 -1
- package/cjs/ops/OpsTypes.js +28 -0
- package/cjs/ops/OpsTypes.js.map +1 -1
- package/cjs/ops/Saml2Ops.js +1 -21
- package/cjs/ops/Saml2Ops.js.map +1 -1
- package/cjs/ops/ScriptOps.js +0 -12
- package/cjs/ops/ScriptOps.js.map +1 -1
- package/cjs/ops/ThemeOps.js +0 -12
- package/cjs/ops/ThemeOps.js.map +1 -1
- package/cjs/test/mocks/TreeApi/getTree/Disabled.json +26 -0
- package/esm/index.mjs +3 -0
- package/esm/ops/CirclesOfTrustOps.mjs +1 -11
- package/esm/ops/EmailTemplateOps.mjs +1 -11
- package/esm/ops/IdpOps.mjs +1 -11
- package/esm/ops/JourneyOps.mjs +83 -148
- package/esm/ops/JourneyOps.test.mjs +54 -0
- package/esm/ops/NodeOps.mjs +29 -27
- package/esm/ops/OpsTypes.mjs +24 -1
- package/esm/ops/Saml2Ops.mjs +1 -19
- package/esm/ops/ScriptOps.mjs +0 -10
- package/esm/ops/ThemeOps.mjs +0 -10
- package/esm/test/mocks/TreeApi/getTree/Disabled.json +26 -0
- package/package.json +3 -2
- package/types/api/ApiTypes.d.ts +1 -1
- package/types/api/ApiTypes.d.ts.map +1 -1
- package/types/index.d.ts +1 -0
- package/types/index.d.ts.map +1 -1
- package/types/ops/CirclesOfTrustOps.d.ts +0 -7
- package/types/ops/CirclesOfTrustOps.d.ts.map +1 -1
- package/types/ops/EmailTemplateOps.d.ts +0 -7
- package/types/ops/EmailTemplateOps.d.ts.map +1 -1
- package/types/ops/IdpOps.d.ts +0 -7
- package/types/ops/IdpOps.d.ts.map +1 -1
- package/types/ops/JourneyOps.d.ts +17 -26
- package/types/ops/JourneyOps.d.ts.map +1 -1
- package/types/ops/NodeOps.d.ts +10 -8
- package/types/ops/NodeOps.d.ts.map +1 -1
- package/types/ops/OpsTypes.d.ts +12 -0
- package/types/ops/OpsTypes.d.ts.map +1 -1
- package/types/ops/Saml2Ops.d.ts +0 -7
- package/types/ops/Saml2Ops.d.ts.map +1 -1
- package/types/ops/ScriptOps.d.ts +0 -7
- package/types/ops/ScriptOps.d.ts.map +1 -1
- package/types/ops/ThemeOps.d.ts +0 -7
- package/types/ops/ThemeOps.d.ts.map +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.13.0] - 2022-10-04
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- \#110: Added `enableJourney` and `disableJourney` funtions to `JourneyOps.ts` in support of new `frodo-cli` commands `frodo journey enable` and `frodo journey disable`
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- \#109: Autonomous Access nodes are now properly classified as `premium` and `cloud`.
|
|
19
|
+
|
|
20
|
+
## [0.12.7] - 2022-10-02
|
|
21
|
+
|
|
22
|
+
### Changed
|
|
23
|
+
|
|
24
|
+
- \#107: Frodo now sets identityResource on import when the target is ID Cloud or ForgeOps but the import file was exported from a classic deployment
|
|
25
|
+
- Better journey import resiliency by handling `400 - invalid attribute` errors and retrying without the attributes. This is necessary to import journeys exported from a different version requiring different configuration options. Use the `--verbose` parameter to see when invalid attributes are being removed on import.
|
|
26
|
+
|
|
10
27
|
## [0.12.6] - 2022-09-30
|
|
11
28
|
|
|
12
29
|
### Added
|
|
@@ -566,7 +583,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
566
583
|
- Fixed problem with adding connection profiles
|
|
567
584
|
- Miscellaneous bug fixes
|
|
568
585
|
|
|
569
|
-
[Unreleased]: https://github.com/rockcarver/frodo-lib/compare/v0.
|
|
586
|
+
[Unreleased]: https://github.com/rockcarver/frodo-lib/compare/v0.13.0...HEAD
|
|
587
|
+
|
|
588
|
+
[0.13.0]: https://github.com/rockcarver/frodo-lib/compare/v0.12.7...v0.13.0
|
|
589
|
+
|
|
590
|
+
[0.12.7]: https://github.com/rockcarver/frodo-lib/compare/v0.12.6...v0.12.7
|
|
570
591
|
|
|
571
592
|
[0.12.6]: https://github.com/rockcarver/frodo-lib/compare/v0.12.5...v0.12.6
|
|
572
593
|
|
package/cjs/api/ApiTypes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApiTypes.js","names":["ScriptLanguage","ScriptContext","Saml2ProiderLocation"],"sources":["api/ApiTypes.ts"],"sourcesContent":["interface ObjectSkeletonInterface {\n _id: string;\n _rev?: number;\n [k: string]: string | number | ObjectSkeletonInterface;\n}\n\nexport interface UiConfigInterface {\n categories: string
|
|
1
|
+
{"version":3,"file":"ApiTypes.js","names":["ScriptLanguage","ScriptContext","Saml2ProiderLocation"],"sources":["api/ApiTypes.ts"],"sourcesContent":["interface ObjectSkeletonInterface {\n _id: string;\n _rev?: number;\n [k: string]: string | number | ObjectSkeletonInterface;\n}\n\nexport interface UiConfigInterface {\n categories: string;\n}\n\nexport interface NodeRefSkeletonInterface {\n connections: Record<string, string>;\n displayName: string;\n nodeType: string;\n x: number;\n y: number;\n}\n\nexport interface InnerNodeRefSkeletonInterface {\n _id: string;\n displayName: string;\n nodeType: string;\n}\n\nexport type TreeSkeleton = ObjectSkeletonInterface & {\n entryNodeId: string;\n nodes: Record<string, NodeRefSkeletonInterface>;\n identityResource?: string;\n uiConfig?: UiConfigInterface;\n enabled?: boolean;\n};\n\nexport type AmServiceType = ObjectSkeletonInterface & {\n name: string;\n};\n\nexport type NodeSkeleton = ObjectSkeletonInterface & {\n _type: AmServiceType;\n nodes?: InnerNodeRefSkeletonInterface[];\n tree?: string;\n identityResource?: string;\n};\n\nexport type SocialIdpSkeleton = ObjectSkeletonInterface & {\n _type: AmServiceType;\n enabled: boolean;\n};\n\nexport type EmailTemplateSkeleton = ObjectSkeletonInterface & {\n defaultLocale?: string;\n displayName?: string;\n enabled?: boolean;\n from: string;\n subject: Record<string, string>;\n};\n\nexport type ThemeSkeleton = ObjectSkeletonInterface & {\n name: string;\n isDefault: boolean;\n linkedTrees: string[];\n};\n\nexport enum ScriptLanguage {\n GROOVY = 'GROOVY',\n JAVASCRIPT = 'JAVASCRIPT',\n}\n\nexport enum ScriptContext {\n OAUTH2_ACCESS_TOKEN_MODIFICATION = 'OAUTH2_ACCESS_TOKEN_MODIFICATION',\n AUTHENTICATION_CLIENT_SIDE = 'AUTHENTICATION_CLIENT_SIDE',\n AUTHENTICATION_TREE_DECISION_NODE = 'AUTHENTICATION_TREE_DECISION_NODE',\n AUTHENTICATION_SERVER_SIDE = 'AUTHENTICATION_SERVER_SIDE',\n SOCIAL_IDP_PROFILE_TRANSFORMATION = 'SOCIAL_IDP_PROFILE_TRANSFORMATION',\n OAUTH2_VALIDATE_SCOPE = 'OAUTH2_VALIDATE_SCOPE',\n CONFIG_PROVIDER_NODE = 'CONFIG_PROVIDER_NODE',\n OAUTH2_AUTHORIZE_ENDPOINT_DATA_PROVIDER = 'OAUTH2_AUTHORIZE_ENDPOINT_DATA_PROVIDER',\n OAUTH2_EVALUATE_SCOPE = 'OAUTH2_EVALUATE_SCOPE',\n POLICY_CONDITION = 'POLICY_CONDITION',\n OIDC_CLAIMS = 'OIDC_CLAIMS',\n SAML2_IDP_ADAPTER = 'SAML2_IDP_ADAPTER',\n SAML2_IDP_ATTRIBUTE_MAPPER = 'SAML2_IDP_ATTRIBUTE_MAPPER',\n OAUTH2_MAY_ACT = 'OAUTH2_MAY_ACT',\n}\n\nexport type ScriptSkeleton = ObjectSkeletonInterface & {\n name: string;\n description: string;\n isDefault: boolean;\n script: string;\n language: ScriptLanguage;\n context: ScriptContext;\n createdBy: string;\n creationDate: number;\n lastModifiedBy: string;\n lastModifiedDate: number;\n};\n\nexport enum Saml2ProiderLocation {\n HOSTED = 'hosted',\n REMOTE = 'remote',\n}\n\nexport type Saml2ProviderSkeleton = ObjectSkeletonInterface & {\n entityId: string;\n entityLocation: Saml2ProiderLocation;\n serviceProvider: unknown;\n identityProvider: unknown;\n attributeQueryProvider: unknown;\n xacmlPolicyEnforcementPoint: unknown;\n};\n\nexport type CircleOfTrustSkeleton = ObjectSkeletonInterface & {\n _type: AmServiceType;\n status: string;\n trustedProviders: string[];\n};\n"],"mappings":";;;;;;IA8DYA,c;;;WAAAA,c;EAAAA,c;EAAAA,c;GAAAA,c,8BAAAA,c;;IAKAC,a;;;WAAAA,a;EAAAA,a;EAAAA,a;EAAAA,a;EAAAA,a;EAAAA,a;EAAAA,a;EAAAA,a;EAAAA,a;EAAAA,a;EAAAA,a;EAAAA,a;EAAAA,a;EAAAA,a;EAAAA,a;GAAAA,a,6BAAAA,a;;IA8BAC,oB;;;WAAAA,oB;EAAAA,oB;EAAAA,oB;GAAAA,oB,oCAAAA,oB"}
|
package/cjs/index.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.VariablesRaw = exports.Variables = exports.Utils = exports.TypesRaw = exports.Types = exports.TreeRaw = exports.Theme = exports.StartupRaw = exports.Startup = exports.SecretsRaw = exports.Secrets = exports.Script = exports.Saml2 = exports.Realm = exports.Organization = exports.OAuth2OIDCApi = exports.OAuth2Client = exports.NodeRaw = exports.ManagedObject = exports.Log = exports.Journey = exports.Idp = exports.Idm = exports.EmailTemplate = exports.ConnectionProfile = exports.CirclesOfTrust = exports.Authenticate = exports.Admin = void 0;
|
|
6
|
+
exports.VariablesRaw = exports.Variables = exports.Utils = exports.TypesRaw = exports.Types = exports.TreeRaw = exports.Theme = exports.StartupRaw = exports.Startup = exports.SecretsRaw = exports.Secrets = exports.Script = exports.Saml2 = exports.Realm = exports.Organization = exports.OAuth2OIDCApi = exports.OAuth2Client = exports.NodeRaw = exports.Node = exports.ManagedObject = exports.Log = exports.Journey = exports.Idp = exports.Idm = exports.EmailTemplate = exports.ConnectionProfile = exports.CirclesOfTrust = exports.Authenticate = exports.Admin = void 0;
|
|
7
7
|
exports.getVersion = getVersion;
|
|
8
8
|
exports.state = void 0;
|
|
9
9
|
|
|
@@ -13,6 +13,8 @@ var _path = _interopRequireDefault(require("path"));
|
|
|
13
13
|
|
|
14
14
|
var _url = require("url");
|
|
15
15
|
|
|
16
|
+
var _colors = _interopRequireDefault(require("colors"));
|
|
17
|
+
|
|
16
18
|
var _TypesRaw = _interopRequireWildcard(require("./api/ApiTypes"));
|
|
17
19
|
|
|
18
20
|
exports.TypesRaw = _TypesRaw;
|
|
@@ -89,6 +91,10 @@ var _Organization = _interopRequireWildcard(require("./ops/OrganizationOps"));
|
|
|
89
91
|
|
|
90
92
|
exports.Organization = _Organization;
|
|
91
93
|
|
|
94
|
+
var _Node = _interopRequireWildcard(require("./ops/NodeOps"));
|
|
95
|
+
|
|
96
|
+
exports.Node = _Node;
|
|
97
|
+
|
|
92
98
|
var _Realm = _interopRequireWildcard(require("./ops/RealmOps"));
|
|
93
99
|
|
|
94
100
|
exports.Realm = _Realm;
|
|
@@ -135,6 +141,8 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
135
141
|
|
|
136
142
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
137
143
|
|
|
144
|
+
_colors.default.enable();
|
|
145
|
+
|
|
138
146
|
var _dirname = _path.default.dirname((0, _url.fileURLToPath)(require('url').pathToFileURL(__filename).toString()));
|
|
139
147
|
|
|
140
148
|
var pkg = JSON.parse(_fs.default.readFileSync(_path.default.resolve(_dirname, '../package.json'), 'utf8'));
|
package/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["__dirname","path","dirname","fileURLToPath","pkg","JSON","parse","fs","readFileSync","resolve","getVersion","version"],"sources":["index.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nconst pkg = JSON.parse(\n fs.readFileSync(path.resolve(__dirname, '../package.json'), 'utf8')\n);\n\nexport function getVersion() {\n return `v${pkg.version}`;\n}\n\n// Api Layer\nexport * as TypesRaw from './api/ApiTypes';\nexport * as NodeRaw from './api/NodeApi';\nexport * as TreeRaw from './api/TreeApi';\nexport * as StartupRaw from './api/StartupApi';\nexport * as SecretsRaw from './api/SecretsApi';\nexport * as VariablesRaw from './api/VariablesApi';\n\n// Ops Layer\nexport * as Types from './ops/OpsTypes';\nexport * as Admin from './ops/AdminOps';\nexport * as Authenticate from './ops/AuthenticateOps';\nexport * as CirclesOfTrust from './ops/CirclesOfTrustOps';\nexport * as ConnectionProfile from './ops/ConnectionProfileOps';\nexport * as EmailTemplate from './ops/EmailTemplateOps';\nexport * as Idm from './ops/IdmOps';\nexport * as Idp from './ops/IdpOps';\nexport * as Journey from './ops/JourneyOps';\nexport * as Log from './ops/LogOps';\nexport * as ManagedObject from './ops/ManagedObjectOps';\nexport * as OAuth2Client from './ops/OAuth2ClientOps';\nexport * as Organization from './ops/OrganizationOps';\nexport * as Realm from './ops/RealmOps';\nexport * as Saml2 from './ops/Saml2Ops';\nexport * as Script from './ops/ScriptOps';\nexport * as Secrets from './ops/SecretsOps';\nexport * as Startup from './ops/StartupOps';\nexport * as Theme from './ops/ThemeOps';\nexport * as Variables from './ops/VariablesOps';\n// TODO: revisit if there are better ways\nexport * as Utils from './ops/utils/OpsUtils';\n// TODO: reconsider the aproach to pass in state from client\n// lib should be stateless, an aplication should own its state\nexport * as state from './storage/SessionStorage';\n// TODO: need to figure out if this is the right approach or if we should even\n// use a public oauth2/oidc library. might be ok for now since there is only\n// one place where the cli needs to execute an oauth flow.\nexport * as OAuth2OIDCApi from './api/OAuth2OIDCApi';\n"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA
|
|
1
|
+
{"version":3,"file":"index.js","names":["Color","enable","__dirname","path","dirname","fileURLToPath","pkg","JSON","parse","fs","readFileSync","resolve","getVersion","version"],"sources":["index.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport Color from 'colors';\n\nColor.enable();\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nconst pkg = JSON.parse(\n fs.readFileSync(path.resolve(__dirname, '../package.json'), 'utf8')\n);\n\nexport function getVersion() {\n return `v${pkg.version}`;\n}\n\n// Api Layer\nexport * as TypesRaw from './api/ApiTypes';\nexport * as NodeRaw from './api/NodeApi';\nexport * as TreeRaw from './api/TreeApi';\nexport * as StartupRaw from './api/StartupApi';\nexport * as SecretsRaw from './api/SecretsApi';\nexport * as VariablesRaw from './api/VariablesApi';\n\n// Ops Layer\nexport * as Types from './ops/OpsTypes';\nexport * as Admin from './ops/AdminOps';\nexport * as Authenticate from './ops/AuthenticateOps';\nexport * as CirclesOfTrust from './ops/CirclesOfTrustOps';\nexport * as ConnectionProfile from './ops/ConnectionProfileOps';\nexport * as EmailTemplate from './ops/EmailTemplateOps';\nexport * as Idm from './ops/IdmOps';\nexport * as Idp from './ops/IdpOps';\nexport * as Journey from './ops/JourneyOps';\nexport * as Log from './ops/LogOps';\nexport * as ManagedObject from './ops/ManagedObjectOps';\nexport * as OAuth2Client from './ops/OAuth2ClientOps';\nexport * as Organization from './ops/OrganizationOps';\nexport * as Node from './ops/NodeOps';\nexport * as Realm from './ops/RealmOps';\nexport * as Saml2 from './ops/Saml2Ops';\nexport * as Script from './ops/ScriptOps';\nexport * as Secrets from './ops/SecretsOps';\nexport * as Startup from './ops/StartupOps';\nexport * as Theme from './ops/ThemeOps';\nexport * as Variables from './ops/VariablesOps';\n// TODO: revisit if there are better ways\nexport * as Utils from './ops/utils/OpsUtils';\n// TODO: reconsider the aproach to pass in state from client\n// lib should be stateless, an aplication should own its state\nexport * as state from './storage/SessionStorage';\n// TODO: need to figure out if this is the right approach or if we should even\n// use a public oauth2/oidc library. might be ok for now since there is only\n// one place where the cli needs to execute an oauth flow.\nexport * as OAuth2OIDCApi from './api/OAuth2OIDCApi';\n"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEAA,eAAA,CAAMC,MAAN;;AAEA,IAAMC,QAAS,GAAGC,aAAA,CAAKC,OAAL,CAAa,IAAAC,kBAAA,sDAAb,CAAlB;;AAEA,IAAMC,GAAG,GAAGC,IAAI,CAACC,KAAL,CACVC,WAAA,CAAGC,YAAH,CAAgBP,aAAA,CAAKQ,OAAL,CAAaT,QAAb,EAAwB,iBAAxB,CAAhB,EAA4D,MAA5D,CADU,CAAZ;;AAIO,SAASU,UAAT,GAAsB;EAC3B,kBAAWN,GAAG,CAACO,OAAf;AACD,C,CAED"}
|
|
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.exportCircleOfTrust = exportCircleOfTrust;
|
|
7
7
|
exports.exportCirclesOfTrustToFile = exportCirclesOfTrustToFile;
|
|
8
8
|
exports.exportCirclesOfTrustToFiles = exportCirclesOfTrustToFiles;
|
|
9
|
-
exports.getOneLineDescription = getOneLineDescription;
|
|
10
9
|
exports.importCircleOfTrust = importCircleOfTrust;
|
|
11
10
|
exports.importCirclesOfTrustFromFile = importCirclesOfTrustFromFile;
|
|
12
11
|
exports.importCirclesOfTrustFromFiles = importCirclesOfTrustFromFiles;
|
|
@@ -29,17 +28,7 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try
|
|
|
29
28
|
|
|
30
29
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
31
30
|
|
|
32
|
-
|
|
33
|
-
* Get a one-line description of the circle of trust object
|
|
34
|
-
* @param {CircleOfTrustSkeleton} cotObj circle of trust object to describe
|
|
35
|
-
* @returns {string} a one-line description
|
|
36
|
-
*/
|
|
37
|
-
function getOneLineDescription(cotObj) {
|
|
38
|
-
var description = "[".concat(cotObj._id['brightCyan'], "]");
|
|
39
|
-
return description;
|
|
40
|
-
} // use a function vs a template variable to avoid problems in loops
|
|
41
|
-
|
|
42
|
-
|
|
31
|
+
// use a function vs a template variable to avoid problems in loops
|
|
43
32
|
function getFileDataTemplate() {
|
|
44
33
|
return {
|
|
45
34
|
meta: {},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CirclesOfTrustOps.js","names":["getOneLineDescription","cotObj","description","_id","getFileDataTemplate","meta","script","saml","hosted","remote","metadata","cot","listCirclesOfTrust","long","cotList","getCirclesOfTrust","result","error","printMessage","sort","a","b","localeCompare","forEach","table","createTable","push","status","trustedProviders","map","provider","split","join","toString","exportDependencies","cotData","fileData","exportCircleOfTrust","cotId","file","fileName","getTypedFilename","createProgressIndicator","_","cloneDeep","getCircleOfTrust","updateProgressIndicator","saveJsonToFile","stopProgressIndicator","brightCyan","err","exportCirclesOfTrustToFile","getRealmString","allCotData","length","_rev","exportCirclesOfTrustToFiles","importDependencies","importCircleOfTrust","fs","readFile","data","JSON","parse","validateImport","get","createCircleOfTrust","createProviderErr","response","importFirstCircleOfTrust","hasOwnProperty","call","createCircleOfTrustErr","importCirclesOfTrustFromFile","Object","keys","importCirclesOfTrustFromFiles","names","readdirSync","jsonFiles","filter","name","toLowerCase","endsWith","total","totalErrors","readFileSync","errors"],"sources":["ops/CirclesOfTrustOps.ts"],"sourcesContent":["import fs from 'fs';\nimport _ from 'lodash';\nimport {\n createTable,\n printMessage,\n createProgressIndicator,\n updateProgressIndicator,\n stopProgressIndicator,\n} from './utils/Console';\nimport {\n getCirclesOfTrust,\n getCircleOfTrust,\n createCircleOfTrust,\n} from '../api/CirclesOfTrustApi';\nimport {\n getRealmString,\n getTypedFilename,\n saveJsonToFile,\n validateImport,\n} from './utils/ExportImportUtils';\nimport { CircleOfTrustSkeleton } from '../api/ApiTypes';\n\n/**\n * Get a one-line description of the circle of trust object\n * @param {CircleOfTrustSkeleton} cotObj circle of trust object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(cotObj: CircleOfTrustSkeleton): string {\n const description = `[${cotObj._id['brightCyan']}]`;\n return description;\n}\n\n// use a function vs a template variable to avoid problems in loops\nfunction getFileDataTemplate() {\n return {\n meta: {},\n script: {},\n saml: {\n hosted: {},\n remote: {},\n metadata: {},\n cot: {},\n },\n };\n}\n\n/**\n * List entity providers\n * @param {String} long Long list format with details\n */\nexport async function listCirclesOfTrust(long = false) {\n let cotList = [];\n try {\n cotList = (await getCirclesOfTrust()).result;\n } catch (error) {\n printMessage(`getCirclesOfTrust ERROR: ${error}`, 'error');\n printMessage(error, 'data');\n }\n cotList.sort((a, b) => a._id.localeCompare(b._id));\n if (!long) {\n cotList.forEach((cot) => {\n printMessage(`${cot._id}`, 'data');\n });\n } else {\n const table = createTable([\n 'Name'['brightCyan'],\n 'Description'['brightCyan'],\n 'Status'['brightCyan'],\n 'Trusted Providers'['brightCyan'],\n ]);\n cotList.forEach((cot) => {\n table.push([\n cot._id,\n cot.description,\n cot.status,\n cot.trustedProviders\n .map((provider) => provider.split('|')[0])\n .join('\\n'),\n ]);\n });\n printMessage(table.toString());\n }\n}\n\n/**\n * Include dependencies in the export file\n * @param {Object} cotData Object representing a SAML circle of trust\n * @param {Object} fileData File data object to add dependencies to\n */\nasync function exportDependencies(cotData, fileData) {\n // TODO: Export dependencies\n return [cotData, fileData];\n}\n\n/**\n * Export a single circle of trust to file\n * @param {String} cotId circle of trust id/name\n * @param {String} file Optional filename\n */\nexport async function exportCircleOfTrust(cotId, file = null) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(cotId, 'cot.saml');\n }\n createProgressIndicator(1, `Exporting circle of trust ${cotId}`);\n try {\n const cotData = _.cloneDeep(getCircleOfTrust(cotId));\n delete cotData['_rev'];\n updateProgressIndicator(`Exporting ${cotId}`);\n const fileData = getFileDataTemplate();\n fileData.saml.cot[cotId] = cotData;\n await exportDependencies(cotData, fileData);\n saveJsonToFile(fileData, fileName);\n stopProgressIndicator(\n `Exported ${cotId.brightCyan} to ${fileName.brightCyan}.`\n );\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n }\n}\n\n/**\n * Export all circles of trust to one file\n * @param {String} file Optional filename\n */\nexport async function exportCirclesOfTrustToFile(file = null) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(\n `all${getRealmString()}CirclesOfTrust`,\n 'cot.saml'\n );\n }\n const fileData = getFileDataTemplate();\n let allCotData = [];\n try {\n allCotData = _.cloneDeep((await getCirclesOfTrust()).result);\n createProgressIndicator(allCotData.length, 'Exporting circles of trust');\n for (const cotData of allCotData) {\n delete cotData._rev;\n updateProgressIndicator(`Exporting circle of trust ${cotData._id}`);\n // eslint-disable-next-line no-await-in-loop\n await exportDependencies(cotData, fileData);\n fileData.saml.cot[cotData._id] = cotData;\n }\n saveJsonToFile(fileData, fileName);\n stopProgressIndicator(\n `${allCotData.length} circle(s) of trust exported to ${fileName}.`\n );\n } catch (error) {\n printMessage(`getCirclesOfTrust ERROR: ${error}`, 'error');\n printMessage(error, 'data');\n }\n}\n\n/**\n * Export all circles of trust to individual files\n */\nexport async function exportCirclesOfTrustToFiles() {\n let allCotData = [];\n try {\n allCotData = _.cloneDeep((await getCirclesOfTrust()).result);\n createProgressIndicator(allCotData.length, 'Exporting circles of trust');\n for (const cotData of allCotData) {\n delete cotData._rev;\n updateProgressIndicator(`Exporting circle of trust ${cotData._id}`);\n const fileName = getTypedFilename(cotData._id, 'cot.saml');\n const fileData = getFileDataTemplate();\n // eslint-disable-next-line no-await-in-loop\n await exportDependencies(cotData, fileData);\n fileData.saml.cot[cotData._id] = cotData;\n saveJsonToFile(fileData, fileName);\n }\n stopProgressIndicator(`${allCotData.length} providers exported.`);\n } catch (error) {\n printMessage(`getCirclesOfTrust ERROR: ${error}`, 'error');\n printMessage(error, 'data');\n }\n}\n\n/**\n * Include dependencies from the import file\n * @param {Object} cotData Object representing a SAML circle of trust\n * @param {Object} fileData File data object to read dependencies from\n */\nasync function importDependencies(cotData, fileData) {\n // TODO: Import dependencies\n return [cotData, fileData];\n}\n\n/**\n * Import a SAML circle of trust by id/name from file\n * @param {String} cotId Circle of trust id/name\n * @param {String} file Import file name\n */\nexport async function importCircleOfTrust(cotId, file) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n createProgressIndicator(1, 'Importing circle of trust...');\n const cotData = _.get(fileData, ['saml', 'cot', cotId]);\n if (cotData) {\n updateProgressIndicator(`Importing ${cotId}`);\n await importDependencies(cotData, fileData);\n try {\n await createCircleOfTrust(cotData);\n stopProgressIndicator(`Successfully imported ${cotId}.`);\n } catch (createProviderErr) {\n stopProgressIndicator(`Error importing ${cotId}.`);\n printMessage(`Error importing ${cotId}`, 'error');\n printMessage(createProviderErr.response.data, 'error');\n }\n } else {\n stopProgressIndicator(\n `Circle of trust ${cotId.brightCyan} not found in ${file.brightCyan}!`\n );\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import first SAML circle of trust from file\n * @param {String} file Import file name\n */\nexport async function importFirstCircleOfTrust(file) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n createProgressIndicator(1, 'Importing circle of trust...');\n for (const cotId in fileData.saml.cot) {\n if ({}.hasOwnProperty.call(fileData.saml.cot, cotId)) {\n const cotData = _.cloneDeep(fileData.saml.cot[cotId]);\n updateProgressIndicator(`Importing ${cotId}`);\n // eslint-disable-next-line no-await-in-loop\n await importDependencies(cotData, fileData);\n try {\n await createCircleOfTrust(cotData);\n stopProgressIndicator(`Successfully imported ${cotId}.`);\n } catch (createCircleOfTrustErr) {\n stopProgressIndicator(`Error importing ${cotId}.`);\n printMessage(`Error importing ${cotId}`, 'error');\n printMessage(createCircleOfTrustErr.response.data, 'error');\n }\n break;\n }\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all SAML circles of trust from file\n * @param {String} file Import file name\n */\nexport async function importCirclesOfTrustFromFile(file) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n createProgressIndicator(\n Object.keys(fileData.saml.cot).length,\n 'Importing circles of trust...'\n );\n for (const cotId in fileData.saml.cot) {\n if ({}.hasOwnProperty.call(fileData.saml.cot, cotId)) {\n const cotData = _.cloneDeep(fileData.saml.cot[cotId]);\n // eslint-disable-next-line no-await-in-loop\n await importDependencies(cotData, fileData);\n try {\n // eslint-disable-next-line no-await-in-loop\n await createCircleOfTrust(cotData);\n updateProgressIndicator(`Imported ${cotId}`);\n } catch (createCircleOfTrustErr) {\n printMessage(`\\nError importing ${cotId}`, 'error');\n printMessage(createCircleOfTrustErr.response.data, 'error');\n }\n }\n }\n stopProgressIndicator(`Circles of trust imported.`);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all SAML circles of trust from all *.cot.saml.json files in the current directory\n */\nexport async function importCirclesOfTrustFromFiles() {\n const names = fs.readdirSync('.');\n const jsonFiles = names.filter((name) =>\n name.toLowerCase().endsWith('.cot.saml.json')\n );\n createProgressIndicator(jsonFiles.length, 'Importing circles or trust...');\n let total = 0;\n let totalErrors = 0;\n for (const file of jsonFiles) {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n total += _.keys(fileData.saml.cot).length;\n let errors = 0;\n for (const cotId in fileData.saml.cot) {\n if ({}.hasOwnProperty.call(fileData.saml.cot, cotId)) {\n const cotData = _.cloneDeep(fileData.saml.cot[cotId]);\n // eslint-disable-next-line no-await-in-loop\n await importDependencies(cotData, fileData);\n try {\n // eslint-disable-next-line no-await-in-loop\n await createCircleOfTrust(cotData);\n // updateProgressIndicator(`Imported ${cotId}`);\n } catch (createCircleOfTrustErr) {\n errors += 1;\n printMessage(`\\nError importing ${cotId}`, 'error');\n printMessage(createCircleOfTrustErr.response.data, 'error');\n }\n }\n }\n totalErrors += errors;\n updateProgressIndicator(\n `Imported ${\n _.keys(fileData.saml.cot).length - errors\n } circle(s) of trust from ${file}`\n );\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n }\n stopProgressIndicator(\n `Imported ${total - totalErrors} of ${total} circle(s) of trust from ${\n jsonFiles.length\n } file(s).`\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CirclesOfTrustOps.js","names":["getFileDataTemplate","meta","script","saml","hosted","remote","metadata","cot","listCirclesOfTrust","long","cotList","getCirclesOfTrust","result","error","printMessage","sort","a","b","_id","localeCompare","forEach","table","createTable","push","description","status","trustedProviders","map","provider","split","join","toString","exportDependencies","cotData","fileData","exportCircleOfTrust","cotId","file","fileName","getTypedFilename","createProgressIndicator","_","cloneDeep","getCircleOfTrust","updateProgressIndicator","saveJsonToFile","stopProgressIndicator","brightCyan","err","exportCirclesOfTrustToFile","getRealmString","allCotData","length","_rev","exportCirclesOfTrustToFiles","importDependencies","importCircleOfTrust","fs","readFile","data","JSON","parse","validateImport","get","createCircleOfTrust","createProviderErr","response","importFirstCircleOfTrust","hasOwnProperty","call","createCircleOfTrustErr","importCirclesOfTrustFromFile","Object","keys","importCirclesOfTrustFromFiles","names","readdirSync","jsonFiles","filter","name","toLowerCase","endsWith","total","totalErrors","readFileSync","errors"],"sources":["ops/CirclesOfTrustOps.ts"],"sourcesContent":["import fs from 'fs';\nimport _ from 'lodash';\nimport {\n createTable,\n printMessage,\n createProgressIndicator,\n updateProgressIndicator,\n stopProgressIndicator,\n} from './utils/Console';\nimport {\n getCirclesOfTrust,\n getCircleOfTrust,\n createCircleOfTrust,\n} from '../api/CirclesOfTrustApi';\nimport {\n getRealmString,\n getTypedFilename,\n saveJsonToFile,\n validateImport,\n} from './utils/ExportImportUtils';\n\n// use a function vs a template variable to avoid problems in loops\nfunction getFileDataTemplate() {\n return {\n meta: {},\n script: {},\n saml: {\n hosted: {},\n remote: {},\n metadata: {},\n cot: {},\n },\n };\n}\n\n/**\n * List entity providers\n * @param {String} long Long list format with details\n */\nexport async function listCirclesOfTrust(long = false) {\n let cotList = [];\n try {\n cotList = (await getCirclesOfTrust()).result;\n } catch (error) {\n printMessage(`getCirclesOfTrust ERROR: ${error}`, 'error');\n printMessage(error, 'data');\n }\n cotList.sort((a, b) => a._id.localeCompare(b._id));\n if (!long) {\n cotList.forEach((cot) => {\n printMessage(`${cot._id}`, 'data');\n });\n } else {\n const table = createTable([\n 'Name'['brightCyan'],\n 'Description'['brightCyan'],\n 'Status'['brightCyan'],\n 'Trusted Providers'['brightCyan'],\n ]);\n cotList.forEach((cot) => {\n table.push([\n cot._id,\n cot.description,\n cot.status,\n cot.trustedProviders\n .map((provider) => provider.split('|')[0])\n .join('\\n'),\n ]);\n });\n printMessage(table.toString());\n }\n}\n\n/**\n * Include dependencies in the export file\n * @param {Object} cotData Object representing a SAML circle of trust\n * @param {Object} fileData File data object to add dependencies to\n */\nasync function exportDependencies(cotData, fileData) {\n // TODO: Export dependencies\n return [cotData, fileData];\n}\n\n/**\n * Export a single circle of trust to file\n * @param {String} cotId circle of trust id/name\n * @param {String} file Optional filename\n */\nexport async function exportCircleOfTrust(cotId, file = null) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(cotId, 'cot.saml');\n }\n createProgressIndicator(1, `Exporting circle of trust ${cotId}`);\n try {\n const cotData = _.cloneDeep(getCircleOfTrust(cotId));\n delete cotData['_rev'];\n updateProgressIndicator(`Exporting ${cotId}`);\n const fileData = getFileDataTemplate();\n fileData.saml.cot[cotId] = cotData;\n await exportDependencies(cotData, fileData);\n saveJsonToFile(fileData, fileName);\n stopProgressIndicator(\n `Exported ${cotId.brightCyan} to ${fileName.brightCyan}.`\n );\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n }\n}\n\n/**\n * Export all circles of trust to one file\n * @param {String} file Optional filename\n */\nexport async function exportCirclesOfTrustToFile(file = null) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(\n `all${getRealmString()}CirclesOfTrust`,\n 'cot.saml'\n );\n }\n const fileData = getFileDataTemplate();\n let allCotData = [];\n try {\n allCotData = _.cloneDeep((await getCirclesOfTrust()).result);\n createProgressIndicator(allCotData.length, 'Exporting circles of trust');\n for (const cotData of allCotData) {\n delete cotData._rev;\n updateProgressIndicator(`Exporting circle of trust ${cotData._id}`);\n // eslint-disable-next-line no-await-in-loop\n await exportDependencies(cotData, fileData);\n fileData.saml.cot[cotData._id] = cotData;\n }\n saveJsonToFile(fileData, fileName);\n stopProgressIndicator(\n `${allCotData.length} circle(s) of trust exported to ${fileName}.`\n );\n } catch (error) {\n printMessage(`getCirclesOfTrust ERROR: ${error}`, 'error');\n printMessage(error, 'data');\n }\n}\n\n/**\n * Export all circles of trust to individual files\n */\nexport async function exportCirclesOfTrustToFiles() {\n let allCotData = [];\n try {\n allCotData = _.cloneDeep((await getCirclesOfTrust()).result);\n createProgressIndicator(allCotData.length, 'Exporting circles of trust');\n for (const cotData of allCotData) {\n delete cotData._rev;\n updateProgressIndicator(`Exporting circle of trust ${cotData._id}`);\n const fileName = getTypedFilename(cotData._id, 'cot.saml');\n const fileData = getFileDataTemplate();\n // eslint-disable-next-line no-await-in-loop\n await exportDependencies(cotData, fileData);\n fileData.saml.cot[cotData._id] = cotData;\n saveJsonToFile(fileData, fileName);\n }\n stopProgressIndicator(`${allCotData.length} providers exported.`);\n } catch (error) {\n printMessage(`getCirclesOfTrust ERROR: ${error}`, 'error');\n printMessage(error, 'data');\n }\n}\n\n/**\n * Include dependencies from the import file\n * @param {Object} cotData Object representing a SAML circle of trust\n * @param {Object} fileData File data object to read dependencies from\n */\nasync function importDependencies(cotData, fileData) {\n // TODO: Import dependencies\n return [cotData, fileData];\n}\n\n/**\n * Import a SAML circle of trust by id/name from file\n * @param {String} cotId Circle of trust id/name\n * @param {String} file Import file name\n */\nexport async function importCircleOfTrust(cotId, file) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n createProgressIndicator(1, 'Importing circle of trust...');\n const cotData = _.get(fileData, ['saml', 'cot', cotId]);\n if (cotData) {\n updateProgressIndicator(`Importing ${cotId}`);\n await importDependencies(cotData, fileData);\n try {\n await createCircleOfTrust(cotData);\n stopProgressIndicator(`Successfully imported ${cotId}.`);\n } catch (createProviderErr) {\n stopProgressIndicator(`Error importing ${cotId}.`);\n printMessage(`Error importing ${cotId}`, 'error');\n printMessage(createProviderErr.response.data, 'error');\n }\n } else {\n stopProgressIndicator(\n `Circle of trust ${cotId.brightCyan} not found in ${file.brightCyan}!`\n );\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import first SAML circle of trust from file\n * @param {String} file Import file name\n */\nexport async function importFirstCircleOfTrust(file) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n createProgressIndicator(1, 'Importing circle of trust...');\n for (const cotId in fileData.saml.cot) {\n if ({}.hasOwnProperty.call(fileData.saml.cot, cotId)) {\n const cotData = _.cloneDeep(fileData.saml.cot[cotId]);\n updateProgressIndicator(`Importing ${cotId}`);\n // eslint-disable-next-line no-await-in-loop\n await importDependencies(cotData, fileData);\n try {\n await createCircleOfTrust(cotData);\n stopProgressIndicator(`Successfully imported ${cotId}.`);\n } catch (createCircleOfTrustErr) {\n stopProgressIndicator(`Error importing ${cotId}.`);\n printMessage(`Error importing ${cotId}`, 'error');\n printMessage(createCircleOfTrustErr.response.data, 'error');\n }\n break;\n }\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all SAML circles of trust from file\n * @param {String} file Import file name\n */\nexport async function importCirclesOfTrustFromFile(file) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n createProgressIndicator(\n Object.keys(fileData.saml.cot).length,\n 'Importing circles of trust...'\n );\n for (const cotId in fileData.saml.cot) {\n if ({}.hasOwnProperty.call(fileData.saml.cot, cotId)) {\n const cotData = _.cloneDeep(fileData.saml.cot[cotId]);\n // eslint-disable-next-line no-await-in-loop\n await importDependencies(cotData, fileData);\n try {\n // eslint-disable-next-line no-await-in-loop\n await createCircleOfTrust(cotData);\n updateProgressIndicator(`Imported ${cotId}`);\n } catch (createCircleOfTrustErr) {\n printMessage(`\\nError importing ${cotId}`, 'error');\n printMessage(createCircleOfTrustErr.response.data, 'error');\n }\n }\n }\n stopProgressIndicator(`Circles of trust imported.`);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all SAML circles of trust from all *.cot.saml.json files in the current directory\n */\nexport async function importCirclesOfTrustFromFiles() {\n const names = fs.readdirSync('.');\n const jsonFiles = names.filter((name) =>\n name.toLowerCase().endsWith('.cot.saml.json')\n );\n createProgressIndicator(jsonFiles.length, 'Importing circles or trust...');\n let total = 0;\n let totalErrors = 0;\n for (const file of jsonFiles) {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n total += _.keys(fileData.saml.cot).length;\n let errors = 0;\n for (const cotId in fileData.saml.cot) {\n if ({}.hasOwnProperty.call(fileData.saml.cot, cotId)) {\n const cotData = _.cloneDeep(fileData.saml.cot[cotId]);\n // eslint-disable-next-line no-await-in-loop\n await importDependencies(cotData, fileData);\n try {\n // eslint-disable-next-line no-await-in-loop\n await createCircleOfTrust(cotData);\n // updateProgressIndicator(`Imported ${cotId}`);\n } catch (createCircleOfTrustErr) {\n errors += 1;\n printMessage(`\\nError importing ${cotId}`, 'error');\n printMessage(createCircleOfTrustErr.response.data, 'error');\n }\n }\n }\n totalErrors += errors;\n updateProgressIndicator(\n `Imported ${\n _.keys(fileData.saml.cot).length - errors\n } circle(s) of trust from ${file}`\n );\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n }\n stopProgressIndicator(\n `Imported ${total - totalErrors} of ${total} circle(s) of trust from ${\n jsonFiles.length\n } file(s).`\n );\n}\n"],"mappings":"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"}
|
|
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.exportEmailTemplateToFile = exportEmailTemplateToFile;
|
|
7
7
|
exports.exportEmailTemplatesToFile = exportEmailTemplatesToFile;
|
|
8
8
|
exports.exportEmailTemplatesToFiles = exportEmailTemplatesToFiles;
|
|
9
|
-
exports.getOneLineDescription = getOneLineDescription;
|
|
10
9
|
exports.importEmailTemplateFromFile = importEmailTemplateFromFile;
|
|
11
10
|
exports.importEmailTemplatesFromFile = importEmailTemplatesFromFile;
|
|
12
11
|
exports.importEmailTemplatesFromFiles = importEmailTemplatesFromFiles;
|
|
@@ -45,17 +44,6 @@ function getFileDataTemplate() {
|
|
|
45
44
|
emailTemplate: {}
|
|
46
45
|
};
|
|
47
46
|
}
|
|
48
|
-
/**
|
|
49
|
-
* Get a one-line description of the email template
|
|
50
|
-
* @param {EmailTemplateSkeleton} templateObj email template object to describe
|
|
51
|
-
* @returns {string} a one-line description
|
|
52
|
-
*/
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
function getOneLineDescription(templateObj) {
|
|
56
|
-
var description = "[".concat(templateObj._id.split('/')[1]['brightCyan'], "] ").concat(templateObj.displayName['brightYellow'], " - ").concat(templateObj.subject[templateObj.defaultLocale]['brightYellow']);
|
|
57
|
-
return description;
|
|
58
|
-
}
|
|
59
47
|
/**
|
|
60
48
|
* List email templates
|
|
61
49
|
* @param {boolean} long Long list format with details
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmailTemplateOps.js","names":["regexEmailTemplateType","RegExp","EMAIL_TEMPLATE_TYPE","EMAIL_TEMPLATE_FILE_TYPE","getFileDataTemplate","meta","emailTemplate","getOneLineDescription","templateObj","description","_id","split","displayName","subject","defaultLocale","listEmailTemplates","long","emailTemplates","getEmailTemplates","result","error","printMessage","message","sort","a","b","localeCompare","entries","replace","table","createTable","push","enabled","Object","keys","length","filter","locale","join","from","wordwrap","toString","exportEmailTemplateToFile","templateId","file","fileName","getTypedFilename","createProgressIndicator","templateData","getEmailTemplate","updateProgressIndicator","fileData","saveJsonToFile","stopProgressIndicator","brightCyan","err","exportEmailTemplatesToFile","response","templates","resultCount","template","exportEmailTemplatesToFiles","importEmailTemplateFromFile","replaceAll","fs","readFile","data","JSON","parse","validateImport","putEmailTemplate","putEmailTemplateError","importEmailTemplatesFromFile","id","hasOwnProperty","call","importEmailTemplatesFromFiles","names","readdirSync","jsonFiles","name","toLowerCase","endsWith","total","totalErrors","readFileSync","errors","importFirstEmailTemplateFromFile"],"sources":["ops/EmailTemplateOps.ts"],"sourcesContent":["import fs from 'fs';\nimport { EmailTemplateSkeleton } from '../api/ApiTypes';\nimport {\n EMAIL_TEMPLATE_TYPE,\n getEmailTemplate,\n getEmailTemplates,\n putEmailTemplate,\n} from '../api/EmailTemplateApi';\nimport {\n createProgressIndicator,\n createTable,\n printMessage,\n stopProgressIndicator,\n updateProgressIndicator,\n} from './utils/Console';\nimport {\n getTypedFilename,\n saveJsonToFile,\n validateImport,\n} from './utils/ExportImportUtils';\nimport wordwrap from './utils/Wordwrap';\n\n/**\n * Regex to remove email template type from id\n */\nconst regexEmailTemplateType = new RegExp(`${EMAIL_TEMPLATE_TYPE}/`, 'g');\n\n/**\n * Maintain the file type centrally\n */\nconst EMAIL_TEMPLATE_FILE_TYPE = 'template.email';\n\n// use a function vs a template variable to avoid problems in loops\nfunction getFileDataTemplate() {\n return {\n meta: {},\n emailTemplate: {},\n };\n}\n\n/**\n * Get a one-line description of the email template\n * @param {EmailTemplateSkeleton} templateObj email template object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(\n templateObj: EmailTemplateSkeleton\n): string {\n const description = `[${templateObj._id.split('/')[1]['brightCyan']}] ${\n templateObj.displayName['brightYellow']\n } - ${templateObj.subject[templateObj.defaultLocale]['brightYellow']}`;\n return description;\n}\n\n/**\n * List email templates\n * @param {boolean} long Long list format with details\n * @return {Promise<unknown[]>} a promise that resolves to an array of email template objects\n */\nexport async function listEmailTemplates(long = false): Promise<unknown[]> {\n let emailTemplates = [];\n try {\n emailTemplates = (await getEmailTemplates()).result;\n } catch (error) {\n printMessage(`Error retrieving email templates: ${error.message}`, 'error');\n }\n emailTemplates.sort((a, b) => a._id.localeCompare(b._id));\n if (!long) {\n for (const [, emailTemplate] of emailTemplates.entries()) {\n printMessage(\n `${emailTemplate._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '')}`,\n 'data'\n );\n }\n } else {\n const table = createTable([\n 'Id'['brightCyan'],\n 'Name'['brightCyan'],\n 'Status'['brightCyan'],\n 'Locale(s)'['brightCyan'],\n 'From'['brightCyan'],\n 'Subject'['brightCyan'],\n ]);\n for (const emailTemplate of emailTemplates) {\n table.push([\n // Id\n `${emailTemplate._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '')}`,\n // Name\n `${emailTemplate.displayName ? emailTemplate.displayName : ''}`,\n // Status\n emailTemplate.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen'],\n // Locale(s)\n `${emailTemplate.defaultLocale}${\n Object.keys(emailTemplate.subject).length > 1\n ? ` (${Object.keys(emailTemplate.subject)\n .filter((locale) => locale !== emailTemplate.defaultLocale)\n .join(',')})`\n : ''\n }`,\n // From\n `${emailTemplate.from ? emailTemplate.from : ''}`,\n // Subject\n wordwrap(emailTemplate.subject[emailTemplate.defaultLocale], 40),\n ]);\n }\n printMessage(table.toString(), 'data');\n }\n return emailTemplates;\n}\n\n/**\n * Export a single email template to file\n * @param {String} templateId email template id\n * @param {String} file optional filename\n */\nexport async function exportEmailTemplateToFile(templateId, file) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(templateId, EMAIL_TEMPLATE_FILE_TYPE);\n }\n createProgressIndicator(1, `Exporting ${templateId}`);\n try {\n const templateData = await getEmailTemplate(templateId);\n updateProgressIndicator(`Writing file ${fileName}`);\n const fileData = getFileDataTemplate();\n fileData.emailTemplate[templateId] = templateData;\n saveJsonToFile(fileData, fileName);\n stopProgressIndicator(\n `Exported ${templateId.brightCyan} to ${fileName.brightCyan}.`\n );\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n }\n}\n\n/**\n * Export all email templates to file\n * @param {String} file optional filename\n */\nexport async function exportEmailTemplatesToFile(file) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(`allEmailTemplates`, EMAIL_TEMPLATE_FILE_TYPE);\n }\n try {\n const fileData = getFileDataTemplate();\n const response = await getEmailTemplates();\n const templates = response.result;\n createProgressIndicator(response.resultCount, 'Exporting email templates');\n for (const template of templates) {\n const templateId = template._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');\n updateProgressIndicator(`Exporting ${templateId}`);\n fileData.emailTemplate[templateId] = template;\n }\n saveJsonToFile(fileData, fileName);\n stopProgressIndicator(\n `${response.resultCount} templates exported to ${fileName}.`\n );\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n }\n}\n\n/**\n * Export all email templates to separate files\n */\nexport async function exportEmailTemplatesToFiles() {\n try {\n const response = await getEmailTemplates();\n const templates = response.result;\n createProgressIndicator(response.resultCount, 'Exporting email templates');\n for (const template of templates) {\n const templateId = template._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');\n const fileName = getTypedFilename(templateId, EMAIL_TEMPLATE_FILE_TYPE);\n const fileData = getFileDataTemplate();\n updateProgressIndicator(`Exporting ${templateId}`);\n fileData.emailTemplate[templateId] = template;\n saveJsonToFile(fileData, fileName);\n }\n stopProgressIndicator(`${response.resultCount} templates exported.`);\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n }\n}\n\n/**\n * Import email template by id from file\n * @param {String} templateId email template id\n * @param {String} file optional filename\n */\nexport async function importEmailTemplateFromFile(templateId, file) {\n // eslint-disable-next-line no-param-reassign\n templateId = templateId.replaceAll(`${EMAIL_TEMPLATE_TYPE}/`, '');\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n createProgressIndicator(1, `Importing ${templateId}`);\n if (fileData.emailTemplate[templateId]) {\n try {\n await putEmailTemplate(\n templateId,\n fileData.emailTemplate[templateId]\n );\n updateProgressIndicator(`Importing ${templateId}`);\n stopProgressIndicator(`Imported ${templateId}`);\n } catch (putEmailTemplateError) {\n stopProgressIndicator(`${putEmailTemplateError}`);\n printMessage(putEmailTemplateError, 'error');\n }\n } else {\n stopProgressIndicator(\n `Email template ${templateId.brightCyan} not found in ${file.brightCyan}!`\n );\n printMessage(\n `Email template ${templateId.brightCyan} not found in ${file.brightCyan}!`,\n 'error'\n );\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all email templates from file\n * @param {String} file optional filename\n */\nexport async function importEmailTemplatesFromFile(file) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n createProgressIndicator(\n Object.keys(fileData.emailTemplate).length,\n `Importing email templates`\n );\n for (const id in fileData.emailTemplate) {\n if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {\n const templateId = id.replace(regexEmailTemplateType, '');\n try {\n // eslint-disable-next-line no-await-in-loop\n await putEmailTemplate(\n templateId,\n fileData.emailTemplate[templateId]\n );\n updateProgressIndicator(`Imported ${templateId}`);\n } catch (putEmailTemplateError) {\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(putEmailTemplateError.response.data, 'error');\n }\n }\n }\n stopProgressIndicator(`Done.`);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all email templates from separate files\n */\nexport async function importEmailTemplatesFromFiles() {\n const names = fs.readdirSync('.');\n const jsonFiles = names.filter((name) =>\n name.toLowerCase().endsWith(`${EMAIL_TEMPLATE_FILE_TYPE}.json`)\n );\n createProgressIndicator(jsonFiles.length, 'Importing email templates...');\n let total = 0;\n let totalErrors = 0;\n for (const file of jsonFiles) {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n total += Object.keys(fileData.emailTemplate).length;\n let errors = 0;\n for (const id in fileData.emailTemplate) {\n if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {\n const templateId = id.replace(regexEmailTemplateType, '');\n try {\n // eslint-disable-next-line no-await-in-loop\n await putEmailTemplate(\n templateId,\n fileData.emailTemplate[templateId]\n );\n } catch (putEmailTemplateError) {\n errors += 1;\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(putEmailTemplateError.response.data, 'error');\n }\n }\n }\n totalErrors += errors;\n updateProgressIndicator(`Imported ${file}`);\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n }\n stopProgressIndicator(\n `Imported ${total - totalErrors} of ${total} email template(s) from ${\n jsonFiles.length\n } file(s).`\n );\n}\n\n/**\n * Import first email template from file\n * @param {String} file optional filename\n */\nexport async function importFirstEmailTemplateFromFile(file) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n createProgressIndicator(1, `Importing first email template`);\n for (const id in fileData.emailTemplate) {\n if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {\n try {\n await putEmailTemplate(\n id.replace(regexEmailTemplateType, ''),\n fileData.emailTemplate[id]\n );\n updateProgressIndicator(`Imported ${id}`);\n stopProgressIndicator(`Imported ${id}`);\n } catch (putEmailTemplateError) {\n stopProgressIndicator(`Error importing email template ${id}`);\n printMessage(`\\nError importing email template ${id}`, 'error');\n printMessage(putEmailTemplateError.response.data, 'error');\n }\n break;\n }\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EmailTemplateOps.js","names":["regexEmailTemplateType","RegExp","EMAIL_TEMPLATE_TYPE","EMAIL_TEMPLATE_FILE_TYPE","getFileDataTemplate","meta","emailTemplate","listEmailTemplates","long","emailTemplates","getEmailTemplates","result","error","printMessage","message","sort","a","b","_id","localeCompare","entries","replace","table","createTable","push","displayName","enabled","defaultLocale","Object","keys","subject","length","filter","locale","join","from","wordwrap","toString","exportEmailTemplateToFile","templateId","file","fileName","getTypedFilename","createProgressIndicator","templateData","getEmailTemplate","updateProgressIndicator","fileData","saveJsonToFile","stopProgressIndicator","brightCyan","err","exportEmailTemplatesToFile","response","templates","resultCount","template","exportEmailTemplatesToFiles","importEmailTemplateFromFile","replaceAll","fs","readFile","data","JSON","parse","validateImport","putEmailTemplate","putEmailTemplateError","importEmailTemplatesFromFile","id","hasOwnProperty","call","importEmailTemplatesFromFiles","names","readdirSync","jsonFiles","name","toLowerCase","endsWith","total","totalErrors","readFileSync","errors","importFirstEmailTemplateFromFile"],"sources":["ops/EmailTemplateOps.ts"],"sourcesContent":["import fs from 'fs';\nimport {\n EMAIL_TEMPLATE_TYPE,\n getEmailTemplate,\n getEmailTemplates,\n putEmailTemplate,\n} from '../api/EmailTemplateApi';\nimport {\n createProgressIndicator,\n createTable,\n printMessage,\n stopProgressIndicator,\n updateProgressIndicator,\n} from './utils/Console';\nimport {\n getTypedFilename,\n saveJsonToFile,\n validateImport,\n} from './utils/ExportImportUtils';\nimport wordwrap from './utils/Wordwrap';\n\n/**\n * Regex to remove email template type from id\n */\nconst regexEmailTemplateType = new RegExp(`${EMAIL_TEMPLATE_TYPE}/`, 'g');\n\n/**\n * Maintain the file type centrally\n */\nconst EMAIL_TEMPLATE_FILE_TYPE = 'template.email';\n\n// use a function vs a template variable to avoid problems in loops\nfunction getFileDataTemplate() {\n return {\n meta: {},\n emailTemplate: {},\n };\n}\n\n/**\n * List email templates\n * @param {boolean} long Long list format with details\n * @return {Promise<unknown[]>} a promise that resolves to an array of email template objects\n */\nexport async function listEmailTemplates(long = false): Promise<unknown[]> {\n let emailTemplates = [];\n try {\n emailTemplates = (await getEmailTemplates()).result;\n } catch (error) {\n printMessage(`Error retrieving email templates: ${error.message}`, 'error');\n }\n emailTemplates.sort((a, b) => a._id.localeCompare(b._id));\n if (!long) {\n for (const [, emailTemplate] of emailTemplates.entries()) {\n printMessage(\n `${emailTemplate._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '')}`,\n 'data'\n );\n }\n } else {\n const table = createTable([\n 'Id'['brightCyan'],\n 'Name'['brightCyan'],\n 'Status'['brightCyan'],\n 'Locale(s)'['brightCyan'],\n 'From'['brightCyan'],\n 'Subject'['brightCyan'],\n ]);\n for (const emailTemplate of emailTemplates) {\n table.push([\n // Id\n `${emailTemplate._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '')}`,\n // Name\n `${emailTemplate.displayName ? emailTemplate.displayName : ''}`,\n // Status\n emailTemplate.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen'],\n // Locale(s)\n `${emailTemplate.defaultLocale}${\n Object.keys(emailTemplate.subject).length > 1\n ? ` (${Object.keys(emailTemplate.subject)\n .filter((locale) => locale !== emailTemplate.defaultLocale)\n .join(',')})`\n : ''\n }`,\n // From\n `${emailTemplate.from ? emailTemplate.from : ''}`,\n // Subject\n wordwrap(emailTemplate.subject[emailTemplate.defaultLocale], 40),\n ]);\n }\n printMessage(table.toString(), 'data');\n }\n return emailTemplates;\n}\n\n/**\n * Export a single email template to file\n * @param {String} templateId email template id\n * @param {String} file optional filename\n */\nexport async function exportEmailTemplateToFile(templateId, file) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(templateId, EMAIL_TEMPLATE_FILE_TYPE);\n }\n createProgressIndicator(1, `Exporting ${templateId}`);\n try {\n const templateData = await getEmailTemplate(templateId);\n updateProgressIndicator(`Writing file ${fileName}`);\n const fileData = getFileDataTemplate();\n fileData.emailTemplate[templateId] = templateData;\n saveJsonToFile(fileData, fileName);\n stopProgressIndicator(\n `Exported ${templateId.brightCyan} to ${fileName.brightCyan}.`\n );\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n }\n}\n\n/**\n * Export all email templates to file\n * @param {String} file optional filename\n */\nexport async function exportEmailTemplatesToFile(file) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(`allEmailTemplates`, EMAIL_TEMPLATE_FILE_TYPE);\n }\n try {\n const fileData = getFileDataTemplate();\n const response = await getEmailTemplates();\n const templates = response.result;\n createProgressIndicator(response.resultCount, 'Exporting email templates');\n for (const template of templates) {\n const templateId = template._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');\n updateProgressIndicator(`Exporting ${templateId}`);\n fileData.emailTemplate[templateId] = template;\n }\n saveJsonToFile(fileData, fileName);\n stopProgressIndicator(\n `${response.resultCount} templates exported to ${fileName}.`\n );\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n }\n}\n\n/**\n * Export all email templates to separate files\n */\nexport async function exportEmailTemplatesToFiles() {\n try {\n const response = await getEmailTemplates();\n const templates = response.result;\n createProgressIndicator(response.resultCount, 'Exporting email templates');\n for (const template of templates) {\n const templateId = template._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');\n const fileName = getTypedFilename(templateId, EMAIL_TEMPLATE_FILE_TYPE);\n const fileData = getFileDataTemplate();\n updateProgressIndicator(`Exporting ${templateId}`);\n fileData.emailTemplate[templateId] = template;\n saveJsonToFile(fileData, fileName);\n }\n stopProgressIndicator(`${response.resultCount} templates exported.`);\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n }\n}\n\n/**\n * Import email template by id from file\n * @param {String} templateId email template id\n * @param {String} file optional filename\n */\nexport async function importEmailTemplateFromFile(templateId, file) {\n // eslint-disable-next-line no-param-reassign\n templateId = templateId.replaceAll(`${EMAIL_TEMPLATE_TYPE}/`, '');\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n createProgressIndicator(1, `Importing ${templateId}`);\n if (fileData.emailTemplate[templateId]) {\n try {\n await putEmailTemplate(\n templateId,\n fileData.emailTemplate[templateId]\n );\n updateProgressIndicator(`Importing ${templateId}`);\n stopProgressIndicator(`Imported ${templateId}`);\n } catch (putEmailTemplateError) {\n stopProgressIndicator(`${putEmailTemplateError}`);\n printMessage(putEmailTemplateError, 'error');\n }\n } else {\n stopProgressIndicator(\n `Email template ${templateId.brightCyan} not found in ${file.brightCyan}!`\n );\n printMessage(\n `Email template ${templateId.brightCyan} not found in ${file.brightCyan}!`,\n 'error'\n );\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all email templates from file\n * @param {String} file optional filename\n */\nexport async function importEmailTemplatesFromFile(file) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n createProgressIndicator(\n Object.keys(fileData.emailTemplate).length,\n `Importing email templates`\n );\n for (const id in fileData.emailTemplate) {\n if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {\n const templateId = id.replace(regexEmailTemplateType, '');\n try {\n // eslint-disable-next-line no-await-in-loop\n await putEmailTemplate(\n templateId,\n fileData.emailTemplate[templateId]\n );\n updateProgressIndicator(`Imported ${templateId}`);\n } catch (putEmailTemplateError) {\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(putEmailTemplateError.response.data, 'error');\n }\n }\n }\n stopProgressIndicator(`Done.`);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all email templates from separate files\n */\nexport async function importEmailTemplatesFromFiles() {\n const names = fs.readdirSync('.');\n const jsonFiles = names.filter((name) =>\n name.toLowerCase().endsWith(`${EMAIL_TEMPLATE_FILE_TYPE}.json`)\n );\n createProgressIndicator(jsonFiles.length, 'Importing email templates...');\n let total = 0;\n let totalErrors = 0;\n for (const file of jsonFiles) {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n total += Object.keys(fileData.emailTemplate).length;\n let errors = 0;\n for (const id in fileData.emailTemplate) {\n if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {\n const templateId = id.replace(regexEmailTemplateType, '');\n try {\n // eslint-disable-next-line no-await-in-loop\n await putEmailTemplate(\n templateId,\n fileData.emailTemplate[templateId]\n );\n } catch (putEmailTemplateError) {\n errors += 1;\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(putEmailTemplateError.response.data, 'error');\n }\n }\n }\n totalErrors += errors;\n updateProgressIndicator(`Imported ${file}`);\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n }\n stopProgressIndicator(\n `Imported ${total - totalErrors} of ${total} email template(s) from ${\n jsonFiles.length\n } file(s).`\n );\n}\n\n/**\n * Import first email template from file\n * @param {String} file optional filename\n */\nexport async function importFirstEmailTemplateFromFile(file) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n createProgressIndicator(1, `Importing first email template`);\n for (const id in fileData.emailTemplate) {\n if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {\n try {\n await putEmailTemplate(\n id.replace(regexEmailTemplateType, ''),\n fileData.emailTemplate[id]\n );\n updateProgressIndicator(`Imported ${id}`);\n stopProgressIndicator(`Imported ${id}`);\n } catch (putEmailTemplateError) {\n stopProgressIndicator(`Error importing email template ${id}`);\n printMessage(`\\nError importing email template ${id}`, 'error');\n printMessage(putEmailTemplateError.response.data, 'error');\n }\n break;\n }\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n"],"mappings":"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"}
|
package/cjs/ops/IdpOps.js
CHANGED
|
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.exportSocialProviderToFile = exportSocialProviderToFile;
|
|
7
7
|
exports.exportSocialProvidersToFile = exportSocialProvidersToFile;
|
|
8
8
|
exports.exportSocialProvidersToFiles = exportSocialProvidersToFiles;
|
|
9
|
-
exports.getOneLineDescription = getOneLineDescription;
|
|
10
9
|
exports.getSocialProvider = getSocialProvider;
|
|
11
10
|
exports.importFirstSocialProviderFromFile = importFirstSocialProviderFromFile;
|
|
12
11
|
exports.importSocialProviderFromFile = importSocialProviderFromFile;
|
|
@@ -32,17 +31,7 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try
|
|
|
32
31
|
|
|
33
32
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
34
33
|
|
|
35
|
-
|
|
36
|
-
* Get a one-line description of the social idp object
|
|
37
|
-
* @param {SocialIdpSkeleton} socialIdpObj social idp object to describe
|
|
38
|
-
* @returns {string} a one-line description
|
|
39
|
-
*/
|
|
40
|
-
function getOneLineDescription(socialIdpObj) {
|
|
41
|
-
var description = "[".concat(socialIdpObj._id['brightCyan'], "] ").concat(socialIdpObj._type._id);
|
|
42
|
-
return description;
|
|
43
|
-
} // use a function vs a template variable to avoid problems in loops
|
|
44
|
-
|
|
45
|
-
|
|
34
|
+
// use a function vs a template variable to avoid problems in loops
|
|
46
35
|
function getFileDataTemplate() {
|
|
47
36
|
return {
|
|
48
37
|
meta: {},
|
package/cjs/ops/IdpOps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IdpOps.js","names":["getOneLineDescription","socialIdpObj","description","_id","_type","getFileDataTemplate","meta","script","idp","listSocialProviders","providers","getSocialIdentityProviders","result","sort","a","b","localeCompare","forEach","socialIdentityProvider","printMessage","err","message","getSocialProvider","providerId","then","response","foundProviders","filter","provider","length","Error","exportSocialProviderToFile","file","fileName","getTypedFilename","createProgressIndicator","idpData","updateProgressIndicator","fileData","transform","scriptData","getScript","convertBase64TextToArray","saveJsonToFile","stopProgressIndicator","exportSocialProvidersToFile","getRealmString","allIdpsData","exportSocialProvidersToFiles","importSocialProviderFromFile","fs","readFile","data","JSON","parse","validateImport","found","idpId","hasOwnProperty","call","scriptId","convertTextArrayToBase64","createOrUpdateScript","putProviderByTypeAndId","catch","importProviderErr","brightCyan","importFirstSocialProviderFromFile","importSocialProvidersFromFile","Object","keys","name","importSocialProvidersFromFiles","names","readdirSync","jsonFiles","toLowerCase","endsWith","total","readFileSync","count"],"sources":["ops/IdpOps.ts"],"sourcesContent":["import fs from 'fs';\nimport {\n getSocialIdentityProviders,\n putProviderByTypeAndId,\n} from '../api/SocialIdentityProvidersApi';\nimport { getScript } from '../api/ScriptApi';\nimport { createOrUpdateScript } from './ScriptOps';\nimport {\n convertBase64TextToArray,\n convertTextArrayToBase64,\n getRealmString,\n getTypedFilename,\n saveJsonToFile,\n validateImport,\n} from './utils/ExportImportUtils';\nimport {\n printMessage,\n createProgressIndicator,\n updateProgressIndicator,\n stopProgressIndicator,\n} from './utils/Console';\nimport { SocialIdpSkeleton } from '../api/ApiTypes';\n\n/**\n * Get a one-line description of the social idp object\n * @param {SocialIdpSkeleton} socialIdpObj social idp object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(socialIdpObj: SocialIdpSkeleton): string {\n const description = `[${socialIdpObj._id['brightCyan']}] ${socialIdpObj._type._id}`;\n return description;\n}\n\n// use a function vs a template variable to avoid problems in loops\nfunction getFileDataTemplate() {\n return {\n meta: {},\n script: {},\n idp: {},\n };\n}\n\n/**\n * List providers\n */\nexport async function listSocialProviders() {\n try {\n const providers = await getSocialIdentityProviders();\n providers.result.sort((a, b) => a._id.localeCompare(b._id));\n providers.result.forEach((socialIdentityProvider) => {\n printMessage(`${socialIdentityProvider._id}`, 'data');\n });\n } catch (err) {\n printMessage(`listSocialProviders ERROR: ${err.message}`, 'error');\n printMessage(err, 'error');\n }\n}\n\n/**\n * Get social identity provider by id\n * @param {String} providerId social identity provider id/name\n * @returns {Promise} a promise that resolves a social identity provider object\n */\nexport async function getSocialProvider(providerId) {\n return getSocialIdentityProviders().then((response) => {\n const foundProviders = response.result.filter(\n (provider) => provider._id === providerId\n );\n switch (foundProviders.length) {\n case 1:\n return foundProviders[0];\n case 0:\n throw new Error(`Provider '${providerId}' not found`);\n default:\n throw new Error(\n `${foundProviders.length} providers '${providerId}' found`\n );\n }\n });\n}\n\n/**\n * Export provider by id\n * @param {String} providerId provider id/name\n * @param {String} file optional export file name\n */\nexport async function exportSocialProviderToFile(providerId, file = '') {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(providerId, 'idp');\n }\n createProgressIndicator(1, `Exporting ${providerId}`);\n try {\n const idpData = await getSocialProvider(providerId);\n updateProgressIndicator(`Writing file ${fileName}`);\n const fileData = getFileDataTemplate();\n fileData.idp[idpData._id] = idpData;\n if (idpData.transform) {\n const scriptData = await getScript(idpData.transform);\n scriptData.script = convertBase64TextToArray(scriptData.script);\n fileData.script[idpData.transform] = scriptData;\n }\n saveJsonToFile(fileData, fileName);\n stopProgressIndicator(\n `Exported ${providerId['brightCyan']} to ${fileName['brightCyan']}.`\n );\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(`${err}`, 'error');\n }\n}\n\n/**\n * Export all providers\n * @param {String} file optional export file name\n */\nexport async function exportSocialProvidersToFile(file) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(`all${getRealmString()}Providers`, 'idp');\n }\n const fileData = getFileDataTemplate();\n const allIdpsData = (await getSocialIdentityProviders()).result;\n createProgressIndicator(allIdpsData.length, 'Exporting providers');\n for (const idpData of allIdpsData) {\n updateProgressIndicator(`Exporting provider ${idpData._id}`);\n fileData.idp[idpData._id] = idpData;\n if (idpData.transform) {\n // eslint-disable-next-line no-await-in-loop\n const scriptData = await getScript(idpData.transform);\n scriptData.script = convertBase64TextToArray(scriptData.script);\n fileData.script[idpData.transform] = scriptData;\n }\n }\n saveJsonToFile(fileData, fileName);\n stopProgressIndicator(\n `${allIdpsData.length} providers exported to ${fileName}.`\n );\n}\n\n/**\n * Export all providers to individual files\n */\nexport async function exportSocialProvidersToFiles() {\n const allIdpsData = await (await getSocialIdentityProviders()).result;\n // printMessage(allIdpsData, 'data');\n createProgressIndicator(allIdpsData.length, 'Exporting providers');\n for (const idpData of allIdpsData) {\n updateProgressIndicator(`Writing provider ${idpData._id}`);\n const fileName = getTypedFilename(idpData._id, 'idp');\n const fileData = getFileDataTemplate();\n fileData.idp[idpData._id] = idpData;\n if (idpData.transform) {\n // eslint-disable-next-line no-await-in-loop\n const scriptData = await getScript(idpData.transform);\n scriptData.script = convertBase64TextToArray(scriptData.script);\n fileData.script[idpData.transform] = scriptData;\n }\n saveJsonToFile(fileData, fileName);\n }\n stopProgressIndicator(`${allIdpsData.length} providers exported.`);\n}\n\n/**\n * Import provider by id/name\n * @param {String} providerId provider id/name\n * @param {String} file import file name\n */\nexport async function importSocialProviderFromFile(providerId, file) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n createProgressIndicator(1, 'Importing provider...');\n let found = false;\n for (const idpId in fileData.idp) {\n if ({}.hasOwnProperty.call(fileData.idp, idpId)) {\n if (idpId === providerId) {\n found = true;\n updateProgressIndicator(`Importing ${fileData.idp[idpId]._id}`);\n const scriptId = fileData.idp[idpId].transform;\n const scriptData = fileData.script[scriptId];\n if (scriptId && scriptData) {\n scriptData.script = convertTextArrayToBase64(scriptData.script);\n // eslint-disable-next-line no-await-in-loop\n await createOrUpdateScript(\n fileData.idp[idpId].transform,\n fileData.script[fileData.idp[idpId].transform]\n );\n }\n putProviderByTypeAndId(\n fileData.idp[idpId]._type._id,\n idpId,\n fileData.idp[idpId]\n )\n .then(() => {\n stopProgressIndicator(\n `Successfully imported provider ${providerId}.`\n );\n })\n .catch((importProviderErr) => {\n stopProgressIndicator(\n `Error importing provider ${fileData.idp[idpId]._id}`\n );\n printMessage(\n `\\nError importing provider ${providerId}`,\n 'error'\n );\n printMessage(importProviderErr.response.data, 'error');\n });\n break;\n }\n }\n }\n if (!found) {\n stopProgressIndicator(\n `Provider ${providerId.brightCyan} not found in ${file.brightCyan}!`\n );\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import first provider from file\n * @param {String} file import file name\n */\nexport async function importFirstSocialProviderFromFile(file) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n createProgressIndicator(1, 'Importing provider...');\n for (const idpId in fileData.idp) {\n if ({}.hasOwnProperty.call(fileData.idp, idpId)) {\n updateProgressIndicator(`Importing ${fileData.idp[idpId]._id}`);\n const scriptId = fileData.idp[idpId].transform;\n const scriptData = fileData.script[scriptId];\n if (scriptId && scriptData) {\n scriptData.script = convertTextArrayToBase64(scriptData.script);\n // eslint-disable-next-line no-await-in-loop\n await createOrUpdateScript(\n fileData.idp[idpId].transform,\n fileData.script[fileData.idp[idpId].transform]\n );\n }\n putProviderByTypeAndId(\n fileData.idp[idpId]._type._id,\n idpId,\n fileData.idp[idpId]\n ).then((result) => {\n if (result == null) {\n stopProgressIndicator(\n `Error importing provider ${fileData.idp[idpId]._id}`\n );\n printMessage(\n `Error importing provider ${fileData.idp[idpId]._id}`,\n 'error'\n );\n } else {\n stopProgressIndicator(\n `Successfully imported provider ${fileData.idp[idpId]._id}.`\n );\n }\n });\n break;\n }\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all providers from file\n * @param {String} file import file name\n */\nexport async function importSocialProvidersFromFile(file) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n createProgressIndicator(\n Object.keys(fileData.idp).length,\n 'Importing providers...'\n );\n for (const idpId in fileData.idp) {\n if ({}.hasOwnProperty.call(fileData.idp, idpId)) {\n const scriptId = fileData.idp[idpId].transform;\n const scriptData = fileData.script[scriptId];\n if (scriptId && scriptData) {\n scriptData.script = convertTextArrayToBase64(scriptData.script);\n // eslint-disable-next-line no-await-in-loop\n await createOrUpdateScript(\n fileData.idp[idpId].transform,\n fileData.script[fileData.idp[idpId].transform]\n );\n }\n // eslint-disable-next-line no-await-in-loop\n const result = await putProviderByTypeAndId(\n fileData.idp[idpId]._type._id,\n idpId,\n fileData.idp[idpId]\n );\n if (!result) {\n updateProgressIndicator(\n `Successfully imported ${fileData.idp[idpId].name}`\n );\n }\n }\n }\n stopProgressIndicator(`Providers imported.`);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import providers from *.idp.json files in current working directory\n */\nexport async function importSocialProvidersFromFiles() {\n const names = fs.readdirSync('.');\n const jsonFiles = names.filter((name) =>\n name.toLowerCase().endsWith('.idp.json')\n );\n\n createProgressIndicator(jsonFiles.length, 'Importing providers...');\n let total = 0;\n for (const file of jsonFiles) {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n const count = Object.keys(fileData.idp).length;\n total += count;\n for (const idpId in fileData.idp) {\n if ({}.hasOwnProperty.call(fileData.idp, idpId)) {\n // eslint-disable-next-line no-await-in-loop\n const result = await putProviderByTypeAndId(\n fileData.idp[idpId]._type._id,\n idpId,\n fileData.idp[idpId]\n );\n if (result == null) {\n printMessage(\n `Error importing ${count} providers from ${file}`,\n 'error'\n );\n }\n }\n }\n updateProgressIndicator(`Imported ${count} provider(s) from ${file}`);\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n }\n stopProgressIndicator(\n `Finished importing ${total} provider(s) from ${jsonFiles.length} file(s).`\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"IdpOps.js","names":["getFileDataTemplate","meta","script","idp","listSocialProviders","providers","getSocialIdentityProviders","result","sort","a","b","_id","localeCompare","forEach","socialIdentityProvider","printMessage","err","message","getSocialProvider","providerId","then","response","foundProviders","filter","provider","length","Error","exportSocialProviderToFile","file","fileName","getTypedFilename","createProgressIndicator","idpData","updateProgressIndicator","fileData","transform","scriptData","getScript","convertBase64TextToArray","saveJsonToFile","stopProgressIndicator","exportSocialProvidersToFile","getRealmString","allIdpsData","exportSocialProvidersToFiles","importSocialProviderFromFile","fs","readFile","data","JSON","parse","validateImport","found","idpId","hasOwnProperty","call","scriptId","convertTextArrayToBase64","createOrUpdateScript","putProviderByTypeAndId","_type","catch","importProviderErr","brightCyan","importFirstSocialProviderFromFile","importSocialProvidersFromFile","Object","keys","name","importSocialProvidersFromFiles","names","readdirSync","jsonFiles","toLowerCase","endsWith","total","readFileSync","count"],"sources":["ops/IdpOps.ts"],"sourcesContent":["import fs from 'fs';\nimport {\n getSocialIdentityProviders,\n putProviderByTypeAndId,\n} from '../api/SocialIdentityProvidersApi';\nimport { getScript } from '../api/ScriptApi';\nimport { createOrUpdateScript } from './ScriptOps';\nimport {\n convertBase64TextToArray,\n convertTextArrayToBase64,\n getRealmString,\n getTypedFilename,\n saveJsonToFile,\n validateImport,\n} from './utils/ExportImportUtils';\nimport {\n printMessage,\n createProgressIndicator,\n updateProgressIndicator,\n stopProgressIndicator,\n} from './utils/Console';\n\n// use a function vs a template variable to avoid problems in loops\nfunction getFileDataTemplate() {\n return {\n meta: {},\n script: {},\n idp: {},\n };\n}\n\n/**\n * List providers\n */\nexport async function listSocialProviders() {\n try {\n const providers = await getSocialIdentityProviders();\n providers.result.sort((a, b) => a._id.localeCompare(b._id));\n providers.result.forEach((socialIdentityProvider) => {\n printMessage(`${socialIdentityProvider._id}`, 'data');\n });\n } catch (err) {\n printMessage(`listSocialProviders ERROR: ${err.message}`, 'error');\n printMessage(err, 'error');\n }\n}\n\n/**\n * Get social identity provider by id\n * @param {String} providerId social identity provider id/name\n * @returns {Promise} a promise that resolves a social identity provider object\n */\nexport async function getSocialProvider(providerId) {\n return getSocialIdentityProviders().then((response) => {\n const foundProviders = response.result.filter(\n (provider) => provider._id === providerId\n );\n switch (foundProviders.length) {\n case 1:\n return foundProviders[0];\n case 0:\n throw new Error(`Provider '${providerId}' not found`);\n default:\n throw new Error(\n `${foundProviders.length} providers '${providerId}' found`\n );\n }\n });\n}\n\n/**\n * Export provider by id\n * @param {String} providerId provider id/name\n * @param {String} file optional export file name\n */\nexport async function exportSocialProviderToFile(providerId, file = '') {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(providerId, 'idp');\n }\n createProgressIndicator(1, `Exporting ${providerId}`);\n try {\n const idpData = await getSocialProvider(providerId);\n updateProgressIndicator(`Writing file ${fileName}`);\n const fileData = getFileDataTemplate();\n fileData.idp[idpData._id] = idpData;\n if (idpData.transform) {\n const scriptData = await getScript(idpData.transform);\n scriptData.script = convertBase64TextToArray(scriptData.script);\n fileData.script[idpData.transform] = scriptData;\n }\n saveJsonToFile(fileData, fileName);\n stopProgressIndicator(\n `Exported ${providerId['brightCyan']} to ${fileName['brightCyan']}.`\n );\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(`${err}`, 'error');\n }\n}\n\n/**\n * Export all providers\n * @param {String} file optional export file name\n */\nexport async function exportSocialProvidersToFile(file) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(`all${getRealmString()}Providers`, 'idp');\n }\n const fileData = getFileDataTemplate();\n const allIdpsData = (await getSocialIdentityProviders()).result;\n createProgressIndicator(allIdpsData.length, 'Exporting providers');\n for (const idpData of allIdpsData) {\n updateProgressIndicator(`Exporting provider ${idpData._id}`);\n fileData.idp[idpData._id] = idpData;\n if (idpData.transform) {\n // eslint-disable-next-line no-await-in-loop\n const scriptData = await getScript(idpData.transform);\n scriptData.script = convertBase64TextToArray(scriptData.script);\n fileData.script[idpData.transform] = scriptData;\n }\n }\n saveJsonToFile(fileData, fileName);\n stopProgressIndicator(\n `${allIdpsData.length} providers exported to ${fileName}.`\n );\n}\n\n/**\n * Export all providers to individual files\n */\nexport async function exportSocialProvidersToFiles() {\n const allIdpsData = await (await getSocialIdentityProviders()).result;\n // printMessage(allIdpsData, 'data');\n createProgressIndicator(allIdpsData.length, 'Exporting providers');\n for (const idpData of allIdpsData) {\n updateProgressIndicator(`Writing provider ${idpData._id}`);\n const fileName = getTypedFilename(idpData._id, 'idp');\n const fileData = getFileDataTemplate();\n fileData.idp[idpData._id] = idpData;\n if (idpData.transform) {\n // eslint-disable-next-line no-await-in-loop\n const scriptData = await getScript(idpData.transform);\n scriptData.script = convertBase64TextToArray(scriptData.script);\n fileData.script[idpData.transform] = scriptData;\n }\n saveJsonToFile(fileData, fileName);\n }\n stopProgressIndicator(`${allIdpsData.length} providers exported.`);\n}\n\n/**\n * Import provider by id/name\n * @param {String} providerId provider id/name\n * @param {String} file import file name\n */\nexport async function importSocialProviderFromFile(providerId, file) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n createProgressIndicator(1, 'Importing provider...');\n let found = false;\n for (const idpId in fileData.idp) {\n if ({}.hasOwnProperty.call(fileData.idp, idpId)) {\n if (idpId === providerId) {\n found = true;\n updateProgressIndicator(`Importing ${fileData.idp[idpId]._id}`);\n const scriptId = fileData.idp[idpId].transform;\n const scriptData = fileData.script[scriptId];\n if (scriptId && scriptData) {\n scriptData.script = convertTextArrayToBase64(scriptData.script);\n // eslint-disable-next-line no-await-in-loop\n await createOrUpdateScript(\n fileData.idp[idpId].transform,\n fileData.script[fileData.idp[idpId].transform]\n );\n }\n putProviderByTypeAndId(\n fileData.idp[idpId]._type._id,\n idpId,\n fileData.idp[idpId]\n )\n .then(() => {\n stopProgressIndicator(\n `Successfully imported provider ${providerId}.`\n );\n })\n .catch((importProviderErr) => {\n stopProgressIndicator(\n `Error importing provider ${fileData.idp[idpId]._id}`\n );\n printMessage(\n `\\nError importing provider ${providerId}`,\n 'error'\n );\n printMessage(importProviderErr.response.data, 'error');\n });\n break;\n }\n }\n }\n if (!found) {\n stopProgressIndicator(\n `Provider ${providerId.brightCyan} not found in ${file.brightCyan}!`\n );\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import first provider from file\n * @param {String} file import file name\n */\nexport async function importFirstSocialProviderFromFile(file) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n createProgressIndicator(1, 'Importing provider...');\n for (const idpId in fileData.idp) {\n if ({}.hasOwnProperty.call(fileData.idp, idpId)) {\n updateProgressIndicator(`Importing ${fileData.idp[idpId]._id}`);\n const scriptId = fileData.idp[idpId].transform;\n const scriptData = fileData.script[scriptId];\n if (scriptId && scriptData) {\n scriptData.script = convertTextArrayToBase64(scriptData.script);\n // eslint-disable-next-line no-await-in-loop\n await createOrUpdateScript(\n fileData.idp[idpId].transform,\n fileData.script[fileData.idp[idpId].transform]\n );\n }\n putProviderByTypeAndId(\n fileData.idp[idpId]._type._id,\n idpId,\n fileData.idp[idpId]\n ).then((result) => {\n if (result == null) {\n stopProgressIndicator(\n `Error importing provider ${fileData.idp[idpId]._id}`\n );\n printMessage(\n `Error importing provider ${fileData.idp[idpId]._id}`,\n 'error'\n );\n } else {\n stopProgressIndicator(\n `Successfully imported provider ${fileData.idp[idpId]._id}.`\n );\n }\n });\n break;\n }\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all providers from file\n * @param {String} file import file name\n */\nexport async function importSocialProvidersFromFile(file) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n createProgressIndicator(\n Object.keys(fileData.idp).length,\n 'Importing providers...'\n );\n for (const idpId in fileData.idp) {\n if ({}.hasOwnProperty.call(fileData.idp, idpId)) {\n const scriptId = fileData.idp[idpId].transform;\n const scriptData = fileData.script[scriptId];\n if (scriptId && scriptData) {\n scriptData.script = convertTextArrayToBase64(scriptData.script);\n // eslint-disable-next-line no-await-in-loop\n await createOrUpdateScript(\n fileData.idp[idpId].transform,\n fileData.script[fileData.idp[idpId].transform]\n );\n }\n // eslint-disable-next-line no-await-in-loop\n const result = await putProviderByTypeAndId(\n fileData.idp[idpId]._type._id,\n idpId,\n fileData.idp[idpId]\n );\n if (!result) {\n updateProgressIndicator(\n `Successfully imported ${fileData.idp[idpId].name}`\n );\n }\n }\n }\n stopProgressIndicator(`Providers imported.`);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import providers from *.idp.json files in current working directory\n */\nexport async function importSocialProvidersFromFiles() {\n const names = fs.readdirSync('.');\n const jsonFiles = names.filter((name) =>\n name.toLowerCase().endsWith('.idp.json')\n );\n\n createProgressIndicator(jsonFiles.length, 'Importing providers...');\n let total = 0;\n for (const file of jsonFiles) {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n const count = Object.keys(fileData.idp).length;\n total += count;\n for (const idpId in fileData.idp) {\n if ({}.hasOwnProperty.call(fileData.idp, idpId)) {\n // eslint-disable-next-line no-await-in-loop\n const result = await putProviderByTypeAndId(\n fileData.idp[idpId]._type._id,\n idpId,\n fileData.idp[idpId]\n );\n if (result == null) {\n printMessage(\n `Error importing ${count} providers from ${file}`,\n 'error'\n );\n }\n }\n }\n updateProgressIndicator(`Imported ${count} provider(s) from ${file}`);\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n }\n stopProgressIndicator(\n `Finished importing ${total} provider(s) from ${jsonFiles.length} file(s).`\n );\n}\n"],"mappings":"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"}
|