@sambath999/localize-token 12.3.8 → 12.3.9
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/bundles/sambath999-localize-token.umd.js +1 -4
- package/bundles/sambath999-localize-token.umd.js.map +1 -1
- package/esm2015/localize-token/localize.api.service.js +2 -5
- package/fesm2015/sambath999-localize-token.js +1 -4
- package/fesm2015/sambath999-localize-token.js.map +1 -1
- package/package.json +1 -1
|
@@ -1121,10 +1121,7 @@
|
|
|
1121
1121
|
/** default http request options */
|
|
1122
1122
|
LocalizeApiService.prototype.buildHeaderOptions = function (options) {
|
|
1123
1123
|
var _b, _c, _d, _e;
|
|
1124
|
-
var headers = Object.assign(Object.assign({}, (options.refreshToken && (_b = {}, _b[SCHEMES.X_REFRESH_TOKEN] = "" + this.refreshToken, _b))), (!options.isFormData && (_c = {}, _c[SCHEMES.CONTENT_TYPE] = 'application/json', _c)));
|
|
1125
|
-
if (!options.refreshToken) {
|
|
1126
|
-
headers = Object.assign(Object.assign(Object.assign({}, headers), (_d = {}, _d[SCHEMES.AUTHORIZATION] = "Bearer " + this.accessToken, _d)), (this.needTenant && (_e = {}, _e[SCHEMES.X_TENANT] = "" + this.tenantToken, _e)));
|
|
1127
|
-
}
|
|
1124
|
+
var headers = Object.assign(Object.assign(Object.assign(Object.assign({}, (options.refreshToken && (_b = {}, _b[SCHEMES.X_REFRESH_TOKEN] = "" + this.refreshToken, _b))), (!options.isFormData && (_c = {}, _c[SCHEMES.CONTENT_TYPE] = 'application/json', _c))), (_d = {}, _d[SCHEMES.AUTHORIZATION] = "Bearer " + this.accessToken, _d)), (this.needTenant && (_e = {}, _e[SCHEMES.X_TENANT] = "" + this.tenantToken, _e)));
|
|
1128
1125
|
return new i1.HttpHeaders(Object.assign(Object.assign({}, headers), options.headers));
|
|
1129
1126
|
};
|
|
1130
1127
|
LocalizeApiService.prototype.buildApiOptions = function (baseUrl, path, method, requestBody, headers) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sambath999-localize-token.umd.js","sources":["../../src/localize-token/helpers/localize.api.assets.ts","../../node_modules/tslib/tslib.es6.js","../../src/localize-token/localize.token.storage.ts","../../src/localize-token/localize.token.ts","../../src/localize-token/localize.token.service.ts","../../src/localize-token/helpers/interfaces.ts","../../src/localize-token/helpers/loccalize.api.helper.ts","../../src/localize-token/localize.api.service.ts","../../src/localize-token/localize.token.module.ts","../../src/localize-logindlg/localize-logindlg.component.ts","../../src/localize-logindlg/localize-logindlg.service.ts","../../src/localize-logindlg/localize-logindlg.module.ts","../../src/sambath999-localize-token.ts"],"sourcesContent":["export const LOCALIZE_API_ASSETS = {\r\n network: {\r\n noConnection: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <svg id=\"lze-no-connection\" data-name=\"Layer 2\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 77.29 70.98\">\r\n <defs>\r\n <style> .cls-1 { fill: #fff; } .cls-2, .cls-3 { fill: #e30613; } .cls-3 { stroke: #e30613; stroke-miterlimit: 10; stroke-width: .25px; } </style>\r\n </defs>\r\n <g id=\"Layer_3\" data-name=\"Layer 3\">\r\n <g>\r\n <path class=\"cls-1\" d=\"m73.29,35c-1.2,0-2.33-.53-3.09-1.46-.48-.57-11.23-13.2-31.55-13.2s-31.11,12.66-31.56,13.2c-1.4,1.71-3.92,1.95-5.63.55-1.71-1.4-1.95-3.92-.55-5.63.54-.66,13.47-16.12,37.74-16.12s37.2,15.46,37.74,16.12c1.4,1.71,1.15,4.23-.56,5.62-.71.58-1.61.9-2.53.9Z\"/>\r\n <path class=\"cls-1\" d=\"m63.96,45.66c-1.19,0-2.32-.53-3.08-1.44-5.79-6.05-13.86-9.39-22.24-9.21-8.38-.18-16.45,3.16-22.24,9.22-1.46,1.65-3.99,1.81-5.64.35-1.57-1.39-1.8-3.77-.52-5.43,7.32-7.89,17.64-12.29,28.4-12.12,10.76-.17,21.08,4.24,28.4,12.12,1.4,1.71,1.15,4.23-.56,5.62-.71.58-1.6.9-2.53.9Z\"/>\r\n <path class=\"cls-1\" d=\"m53.3,56.32c-1.24,0-2.41-.57-3.16-1.55-5.73-6.35-15.52-6.85-21.87-1.13-.4.36-.77.73-1.13,1.13-1.36,1.73-3.88,2.03-5.61.67-1.71-1.34-2.03-3.8-.73-5.54,8.39-9.85,23.18-11.04,33.03-2.65.95.81,1.84,1.69,2.65,2.65,1.34,1.75,1,4.26-.75,5.6-.7.53-1.55.82-2.43.82Z\"/>\r\n </g>\r\n <path class=\"cls-2\" d=\"m47.21,9.45l-4.06,41.36c-.64,5.42-8.39,5.39-9.01,0,0,0-4.06-41.36-4.06-41.36-.46-4.73,2.99-8.94,7.72-9.4,5.33-.58,9.97,4.09,9.4,9.4h0Z\"/>\r\n <circle class=\"cls-3\" cx=\"38.64\" cy=\"64.79\" r=\"6.07\"/>\r\n </g>\r\n </svg>`\r\n }\r\n}","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || from);\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","import { extractMainDomain } from \"./localize.token\";\r\n\r\nexport interface ICookieOptions {\r\n /**\r\n * Cookie expiration date in days from now. If not provided the cookie is a session cookie\r\n */\r\n expires?: number | Date;\r\n path?: string;\r\n domain?: string;\r\n secure?: boolean;\r\n samesite?: \"strict\" | \"lax\" | \"none\";\r\n}\r\n\r\n/**\r\n* Assembly of @package ng2-cookies @see https://www.npmjs.com/package/ng2-cookies\r\n*\r\n* Reassembled by\r\n* @author sambath999\r\n* @date_29_09_2021\r\n* Updated from raw parameters to\r\n* @param {ICookieOptions} options and added another newer cookie flag\r\n* @param {string} samesite\r\n* @param {constant} SameSiteTypes, @param {string} strict \"strict\", @param {string} lax \"lax\", @param {string} none \"none\"\r\n*\r\n* @enum\r\n*/\r\nexport class LocalizeTokenStorage {\r\n\r\n private get getDefaultOptions(): ICookieOptions {\r\n const mainDomain = extractMainDomain(window.location.hostname);\r\n return {\r\n path: '/',\r\n domain: mainDomain,\r\n secure: true,\r\n // samesite: SameSiteType.strict,\r\n expires: 1\r\n }\r\n }\r\n\r\n private readonly defaultOptions: ICookieOptions;\r\n constructor(_defaultOptions?: ICookieOptions) {\r\n this.defaultOptions = _defaultOptions ?? this.getDefaultOptions;\r\n }\r\n\r\n /**\r\n * Checks the existence of a single cookie by it's name\r\n *\r\n * @param {string} name Identification of the cookie\r\n * @returns existence of the cookie\r\n */\r\n check(name: string): boolean {\r\n if (typeof document === \"undefined\") return false;\r\n name = encodeURIComponent(name);\r\n const regexp = new RegExp('(?:^' + name + '|;\\\\s*' + name + ')=(.*?)(?:;|$)', 'g');\r\n return regexp.test(document.cookie);\r\n }\r\n\r\n /**\r\n * Retrieves a single cookie by it's name\r\n *\r\n * @param {string} name Identification of the Cookie\r\n * @returns The Cookie's value\r\n */\r\n get(name: string): string | undefined {\r\n if (!this.check(name)) return undefined;\r\n\r\n name = encodeURIComponent(name);\r\n const regexp = new RegExp('(?:^' + name + '|;\\\\s*' + name + ')=(.*?)(?:;|$)', 'g');\r\n const result = regexp.exec(document.cookie);\r\n return result ? decodeURIComponent(result[1]) : undefined;\r\n }\r\n\r\n /**\r\n * Retrieves a a list of all cookie avaiable\r\n *\r\n * @returns Object with all Cookies\r\n */\r\n getAll(): any {\r\n const cookies: any = {};\r\n if (document.cookie) {\r\n const split = document.cookie.split(';');\r\n for (const s of split) {\r\n const currCookie = s.split('=');\r\n currCookie[0] = currCookie[0].trim();\r\n cookies[decodeURIComponent(currCookie[0])] = decodeURIComponent(currCookie[1]);\r\n }\r\n }\r\n\r\n return cookies;\r\n }\r\n\r\n set(name: string, value: string, options?: ICookieOptions) {\r\n options ??= this.defaultOptions;\r\n const { expires, path, domain, secure, samesite } = { ...this.defaultOptions, ...options };\r\n let cookieStr = `${encodeURIComponent(name)}=${encodeURIComponent(value)};`;\r\n\r\n if (expires) {\r\n const dtExpires = typeof expires === 'number' ? new Date(Date.now() + expires * 864e5) : expires;\r\n cookieStr += `expires=${dtExpires.toUTCString()};`;\r\n }\r\n\r\n cookieStr += path ? `path=${path};` : '';\r\n cookieStr += domain ? `domain=${domain};` : '';\r\n cookieStr += secure ? 'secure;' : '';\r\n cookieStr += samesite ? `samesite=${samesite};` : '';\r\n\r\n document.cookie = cookieStr;\r\n }\r\n\r\n /**\r\n * Removes specified Cookie\r\n *\r\n * @param {string} name Cookie's identification\r\n * @param {string} path Path relative to the domain where the cookie should be avaiable. Default /\r\n * @param {string} domain Domain where the cookie should be avaiable. Default current domain\r\n */\r\n delete(name: string, path: string = '/', domain: string = window.location.hostname): void {\r\n this.set(name, '', { path, domain, expires: -1 });\r\n }\r\n\r\n /**\r\n * Delete all cookie avaiable\r\n */\r\n deleteAll(path?: string, domain?: string): void {\r\n const cookies = this.getAll();\r\n\r\n for (const cookieName of Object.keys(cookies)) {\r\n this.delete(cookieName, path, domain);\r\n }\r\n }\r\n\r\n}\r\n","import { LocalizeTokenStorage } from \"./localize.token.storage\";\r\nexport interface ILocalizeTokenConfig {\r\n /**\r\n * The main domain of the application to set the cookies to be available for cross application with subdomains.\r\n * \r\n * Default is location.hostname (current domain) and automatically set extracted main domain if it is subdomain.\r\n */\r\n mainDomain?: string;\r\n authTokenName?: string;\r\n // tenantTokenName?: string;\r\n refreshTokenName?: string;\r\n /**\r\n * Flag to determine if the tenant token is required.\r\n */\r\n needTenant: boolean;\r\n isProduction: boolean;\r\n revokeTokenUrl: string;\r\n}\r\n\r\nexport class LocalizeToken {\r\n\r\n static readonly storage = new LocalizeTokenStorage();\r\n\r\n static readonly httpHeaders = {\r\n AUTHORIZATION: 'Authorization',\r\n X_TENANT: 'X-Tenant',\r\n X_REFRESH_TOKEN: 'X-RefreshToken',\r\n CONTENT_TYPE: 'Content-Type',\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Waits for a specified amount of time.\r\n * @param milliseconds - The milliseconds to wait.\r\n * @param when - The condition to wait for. Default is true.\r\n * @returns - Promise<void>\r\n */\r\nexport async function waitFor(milliseconds: number, when: boolean = true) {\r\n if (!when) return;\r\n await new Promise(resolve => setTimeout(resolve, milliseconds));\r\n}\r\n\r\n/**\r\n * Waits until the condition is met.\r\n * @param when - The condition to wait for.\r\n * @param intervalNumber - The interval number in milliseconds to check the condition. Default is 50.\r\n */\r\nexport async function waitUntil(when: () => any, intervalNumber: number = 50) {\r\n await new Promise(resolve => {\r\n const interval = setInterval(async () => {\r\n const cond = when();\r\n const result = cond instanceof Promise ? await cond : cond;\r\n if (result) {\r\n clearInterval(interval);\r\n resolve(true);\r\n }\r\n }, intervalNumber);\r\n });\r\n}\r\n\r\nexport function extractMainDomain(subdomain?: string): string {\r\n subdomain ??= window.location.hostname;\r\n const parts = subdomain.split('.');\r\n return parts.length > 2 ? parts.slice(-2).join('.') : subdomain;\r\n}","import { Injectable, OnDestroy } from '@angular/core';\r\nimport { extractMainDomain, ILocalizeTokenConfig, LocalizeToken } from './localize.token';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport * as jwt_decode from 'jwt-decode';\r\nexport interface JwtPayload extends jwt_decode.JwtPayload {\r\n // Define the structure of your JWT payload here\r\n email: string;\r\n sub: string;\r\n name: string;\r\n iat: number;\r\n exp: number;\r\n // Add other fields as needed\r\n}\r\n\r\ninterface IAuthToken {\r\n token: string;\r\n revoke: boolean;\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class LocalizeTokenService implements OnDestroy {\r\n private readonly configSubject = new BehaviorSubject<Partial<ILocalizeTokenConfig>>({});\r\n readonly isRevokingTokenSubject = new BehaviorSubject<boolean>(false);\r\n private readonly defaultConfig: Partial<ILocalizeTokenConfig> = {\r\n mainDomain: extractMainDomain(),\r\n authTokenName: 'auth-token',\r\n refreshTokenName: '_lze_rftkp_',\r\n }\r\n\r\n get config(): ILocalizeTokenConfig {\r\n this.throwIfNotInitialized();\r\n return this.configSubject.value as ILocalizeTokenConfig;\r\n }\r\n\r\n private isInitialized = false;\r\n\r\n init(config: ILocalizeTokenConfig) {\r\n console.log('LocalizeTokenService is initialized.');\r\n this.configSubject.next({ ...this.defaultConfig, ...config });\r\n this.isInitialized = true;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n // this.configSubject.complete();\r\n // this.isRevokingTokenSubject.complete();\r\n }\r\n\r\n private get authToken() { return this.storageGet() }\r\n private set authToken(value: IAuthToken | undefined) {\r\n value\r\n ? this.storageSet(value)\r\n : LocalizeToken.storage.delete(this.config.authTokenName!);\r\n }\r\n\r\n get refreshToken() { return LocalizeToken.storage.get(this.config.refreshTokenName!) }\r\n get accessToken() { return this.authToken?.token }\r\n\r\n set accessToken(value: string | undefined) {\r\n value && (this.authToken = { token: value, revoke: false })\r\n }\r\n\r\n get isRevokingToken() { return this.isRevokingTokenSubject.value /* this.authToken?.revoke ?? false */ }\r\n\r\n set isRevokingToken(value: boolean) {\r\n this.isRevokingTokenSubject.next(value);\r\n this.authToken && (this.authToken = { ...this.authToken, revoke: value })\r\n }\r\n\r\n tenantToken(name: string | undefined) {\r\n if (!name) return undefined;\r\n return LocalizeToken.storage.get(name)\r\n }\r\n\r\n private storageGet() {\r\n try {\r\n const encoded = LocalizeToken.storage.get(this.config.authTokenName!);\r\n const decoded = atob(encoded || '');\r\n return JSON.parse(decoded) as IAuthToken;\r\n } catch {\r\n return undefined\r\n }\r\n }\r\n\r\n private storageSet(value: IAuthToken) {\r\n const base64 = btoa(JSON.stringify(value));\r\n LocalizeToken.storage.set(this.config.authTokenName!, base64);\r\n }\r\n\r\n tokensValid(tenantTokenName?: string): boolean {\r\n return !!this.refreshToken?.length\r\n && (!this.config.needTenant || !!this.tenantToken(tenantTokenName)?.length);\r\n }\r\n\r\n decodeToken = (token: string) => jwt_decode.jwtDecode<JwtPayload>(token);\r\n get decodeRefreshToken() {\r\n const token = LocalizeToken.storage.get(this.config.refreshTokenName!);\r\n return !token ? null : this.decodeToken(token);\r\n }\r\n\r\n private throwIfNotInitialized() {\r\n if (!this.isInitialized) {\r\n throw new Error('LocalizeTokenService is not initialized. Call init() method before using it.');\r\n }\r\n }\r\n\r\n}\r\n","\r\n/**\r\n * Http method options\r\n */\r\nexport enum EMethod {\r\n POST = 'post',\r\n GET = 'get',\r\n PUT = 'put',\r\n DELETE = 'delete',\r\n PATCH = 'patch',\r\n}\r\n\r\nexport interface IOnConnectionError {\r\n /**\r\n * Callback function to execute when a connection error occurs.\r\n * This function should return a Promise or any value.\r\n */\r\n callback?: (error: INormalizedError) => Promise<void> | any;\r\n /**\r\n * If true, the request will block the screen with overlay on connection errors.\r\n * Default is false.\r\n */\r\n blockScreen?: boolean;\r\n\r\n /** Optional z-index for the block screen overlay.\r\n * Default is 10000.\r\n */\r\n blockScreenZIndex?: number;\r\n\r\n /**\r\n * Optional message to display when a connection error occurs.\r\n */\r\n message?: string;\r\n suggestionMessage?: string;\r\n}\r\n\r\ninterface IRetryOptions {\r\n\r\n /**\r\n * Maximum number of retries for a failed request.\r\n * Default is 100.\r\n */\r\n maxRetries?: number;\r\n\r\n /**\r\n * Delay in milliseconds before retrying a failed request.\r\n * Default is 500ms.\r\n */\r\n delay?: number;\r\n\r\n /**\r\n * Function to determine if a request should be retried based on the error.\r\n * If not provided, the default function will retry for network errors and server errors (status 500-599).\r\n * @param error - The error object from the failed request.\r\n * @returns true if the request should be retried, false otherwise.\r\n */\r\n retryFunction?: (error: INormalizedError) => Promise<boolean> | any;\r\n\r\n /**\r\n * Function to execute when a connection error occurs.\r\n * This function should return a Promise or any value.\r\n */\r\n onConnectionError?: IOnConnectionError;\r\n\r\n}\r\n\r\nexport interface ILocalizeApiConfigs {\r\n tenantTokenName?: string;\r\n onPrepareRequest?: () => Promise<void> | any;\r\n onAutoLogout?: () => Promise<void> | any;\r\n onRevokeUnauthorized?: () => Promise<void> | any;\r\n\r\n waitEachRequest?: {\r\n milliseconds: number;\r\n };\r\n enableRequestCancellation?: boolean;\r\n\r\n /**\r\n * Config for retrying failed requests.\r\n * If not provided, the default retry options will be used.\r\n */\r\n retryOptions?: IRetryOptions;\r\n}\r\n\r\nexport interface IApiOptions {\r\n headers?: { [key: string]: string };\r\n method: EMethod;\r\n requestUrl: string;\r\n requestBody?: any;\r\n isFormData?: boolean;\r\n /**\r\n * If true, the request will use the refresh token for authorization.\r\n */\r\n refreshToken?: boolean;\r\n}\r\n\r\nexport interface IHeader {\r\n [key: string]: string;\r\n}\r\n\r\nexport interface INormalizedError {\r\n code: string;\r\n message: string;\r\n details?: any;\r\n status: number;\r\n}\r\n","import { HttpClient, HttpErrorResponse, HttpHeaders } from \"@angular/common/http\";\r\nimport { IApiOptions, ILocalizeApiConfigs, INormalizedError, IOnConnectionError } from \"./interfaces\";\r\nimport { takeUntil, catchError, throwError, Subject } from \"rxjs\";\r\nimport { waitFor } from \"../localize.token\";\r\nimport { LOCALIZE_API_ASSETS } from \"./localize.api.assets\";\r\n\r\ninterface IRequestInstance {\r\n client: HttpClient;\r\n destroy$: () => Subject<void>;\r\n}\r\n\r\ninterface IRetryOptions {\r\n maxRetries: () => number;\r\n delay: number;\r\n callback: () => Promise<any> | any;\r\n retryUnless?: (error: any) => boolean;\r\n onError?: (error: any) => Promise<void> | any;\r\n connectionError?: IOnConnectionError\r\n}\r\n\r\nclass LocalizeApiHelper {\r\n\r\n readonly defaultRetryOptions: Partial<IRetryOptions> = {\r\n connectionError: {\r\n message: 'Connection error occurred. Please wait',\r\n blockScreen: true,\r\n blockScreenZIndex: 10000\r\n }\r\n };\r\n\r\n async performRetry<T = any>(options: IRetryOptions): Promise<T> {\r\n let attempts = 0;\r\n let lastError: any;\r\n let consoleCount = 0;\r\n\r\n // Merge default retry options with provided options\r\n options = { ...this.defaultRetryOptions, ...options }\r\n\r\n let styleElement: HTMLStyleElement | undefined;\r\n\r\n while (attempts < options.maxRetries()) {\r\n try {\r\n const result = await options.callback();\r\n this.removeBlocker(styleElement);\r\n return result;\r\n\r\n } catch (error: any) {\r\n lastError = error;\r\n\r\n if (consoleCount >= 7) {\r\n console.clear();\r\n consoleCount = 0;\r\n }\r\n\r\n if (options.retryUnless && !options.retryUnless(error))\r\n throw error; // If the error should not be retried, rethrow it\r\n\r\n // Handle connection error\r\n styleElement = await this.onConnectionError(options, error);\r\n\r\n if (options.onError)\r\n await this.invokeHook(options.onError.bind(this, error));\r\n\r\n if (attempts >= options.maxRetries() - 1)\r\n throw error;\r\n\r\n attempts++;\r\n consoleCount++;\r\n console.warn(`Attempt ${attempts} failed. Retrying...`, error);\r\n await waitFor(options.delay);\r\n }\r\n }\r\n\r\n console.warn(`Failed after ${options.maxRetries} attempts`);\r\n throw lastError;\r\n }\r\n\r\n async performRequestWithRetry<T = any>(\r\n options: IApiOptions,\r\n config: ILocalizeApiConfigs,\r\n performRequest: <T = any>(options: IApiOptions) => Promise<T>\r\n ): Promise<T> {\r\n\r\n const retryUnless = config.retryOptions?.retryFunction\r\n || this.isConnectionError;\r\n\r\n return await this.performRetry({\r\n connectionError: config.retryOptions?.onConnectionError,\r\n maxRetries: () => config.retryOptions?.maxRetries ?? 1000,\r\n delay: config.retryOptions?.delay ?? 500,\r\n callback: () => performRequest<T>(options),\r\n retryUnless: retryUnless,\r\n })\r\n }\r\n\r\n buildUrl(baseUrl: string, path: string): string {\r\n const normalizedUrl = `${baseUrl.trim().replace(/\\/?$/, '/')}${path.trim().replace(/^\\//, '')}`;\r\n return normalizedUrl.endsWith('/')\r\n ? normalizedUrl.slice(0, -1)\r\n : normalizedUrl;\r\n }\r\n\r\n normalizeError(error: HttpErrorResponse): INormalizedError {\r\n return {\r\n code: error.error?.code || `HTTP_${error.status}`,\r\n message: error.error?.message || error.message,\r\n details: error.error?.details,\r\n status: error.status\r\n };\r\n }\r\n\r\n async invokeHook(callback?: () => Promise<any> | any): Promise<any> {\r\n if (!callback) return;\r\n\r\n const result = callback();\r\n if (result instanceof Promise) {\r\n await result;\r\n }\r\n }\r\n\r\n createRequest<T = any>(\r\n instance: Required<IRequestInstance>,\r\n method: string,\r\n url: string,\r\n body: any,\r\n options: { headers: HttpHeaders }\r\n ) {\r\n const request$ = instance.client.request<T>(method, url, {\r\n ...options,\r\n body,\r\n observe: 'response',\r\n }).pipe(\r\n takeUntil(instance.destroy$()),\r\n catchError((error: HttpErrorResponse) => {\r\n // Convert to a non-observable error to handle in the promise\r\n return throwError(() => this.normalizeError(error));\r\n })\r\n );\r\n\r\n return request$;\r\n }\r\n\r\n defaultRetryFunction(error: INormalizedError): boolean {\r\n\r\n // Don't retry for other errors (like 400, 401, 403, etc.)\r\n if (!this.isConnectionError(error))\r\n throw error;\r\n\r\n return true;\r\n }\r\n\r\n isConnectionError(error: INormalizedError): boolean {\r\n const isNetworkError = error.status === 0;\r\n const isServerError = error.status >= 1000 && error.status < 600;\r\n return isNetworkError || isServerError;\r\n }\r\n\r\n async onConnectionError(\r\n options: IRetryOptions,\r\n error: any\r\n ): Promise<Promise<void> | any> {\r\n\r\n if (!options.connectionError)\r\n return;\r\n\r\n let styleElement: HTMLStyleElement | undefined;\r\n if (this.isConnectionError(error)) {\r\n\r\n styleElement = this.screenBlocker(options, error, true);\r\n\r\n await this.invokeHook(options.connectionError.callback?.bind(this, error));\r\n return styleElement;\r\n } else {\r\n this.screenBlocker(options, error, false);\r\n styleElement?.remove();\r\n }\r\n }\r\n\r\n screenBlocker(optons: IRetryOptions,\r\n error?: any,\r\n add: boolean = true): HTMLStyleElement | undefined {\r\n\r\n if (!optons.connectionError?.blockScreen)\r\n return;\r\n\r\n if (error instanceof HttpErrorResponse)\r\n error = this.normalizeError(error);\r\n\r\n const message = optons.connectionError?.message\r\n || 'Connection error occurred. Please wait';\r\n const errorMessage = error?.message || 'An error occurred';\r\n const suggestinMessage = optons.connectionError?.suggestionMessage\r\n || 'Please check your internet connection or the server status.';\r\n\r\n const zIndex = optons.connectionError?.blockScreenZIndex || 10000;\r\n\r\n const body = document.body;\r\n const blcokerHtml = `\r\n <div class=\"lze-blocker\">\r\n ${LOCALIZE_API_ASSETS.network.noConnection}\r\n <div class=\"lze-blocker__message\">\r\n ${message}\r\n <span class=\"lze-blocker__dotting\">\r\n <span class=\"lze-blocker__dot\"></span>\r\n <span class=\"lze-blocker__dot\"></span>\r\n <span class=\"lze-blocker__dot\"></span>\r\n </span>\r\n </div>\r\n <div class=\"lze-blocker__error\">${errorMessage}</div>\r\n <div class=\"lze-blocker__error_suggestion\">${suggestinMessage}</div>\r\n </div>\r\n `;\r\n const style = `\r\n div.lze-blocker {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n background: rgba(0, 0, 0, 0.85) !important;\r\n z-index: ${zIndex};\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n flex-direction: column;\r\n color: #fff !important;\r\n font-family: Arial, sans-serif;\r\n text-align: center;\r\n padding: 20px;\r\n box-sizing: border-box;\r\n overflow: hidden;\r\n user-select: none;\r\n }\r\n\r\n svg#lze-no-connection {\r\n width: 75px;\r\n height: 75px;\r\n margin-bottom: 20px;\r\n }\r\n \r\n div.lze-blocker__message {\r\n color: #fff !important;\r\n font-size: 18px !important;\r\n margin-bottom: 10px;\r\n }\r\n \r\n .lze-blocker__dotting {\r\n display: inline-block;\r\n vertical-align: middle;\r\n }\r\n span.lze-blocker__dot {\r\n display: inline-block;\r\n width: 7px;\r\n height: 7px;\r\n background-color: #ffffff !important;\r\n border-radius: 50%;\r\n margin-left: 3px;\r\n opacity: 0.3;\r\n animation: dotting 1s infinite;\r\n }\r\n .lze-blocker__dot:nth-child(1) {\r\n animation-delay: 0s;\r\n opacity: 1;\r\n }\r\n .lze-blocker__dot:nth-child(2) {\r\n animation-delay: 0.2s;\r\n }\r\n .lze-blocker__dot:nth-child(3) {\r\n animation-delay: 0.4s;\r\n }\r\n\r\n @keyframes dotting {\r\n 0%, 80%, 100% { opacity: 0.3; }\r\n 40% { opacity: 1; }\r\n }\r\n\r\n div.lze-blocker__error {\r\n color: #f00;\r\n font-size: 14px !important;\r\n margin-bottom: 10px;\r\n text-shadow: 0 0 1px #ff5f5f !important;\r\n }\r\n\r\n div.lze-blocker__error_suggestion {\r\n color: #ccc !important;\r\n font-size: 14px !important;\r\n margin-top: 10px;\r\n }\r\n \r\n @keyframes spin {\r\n 0% { transform: rotate(0deg); }\r\n 100% { transform: rotate(360deg); }\r\n }\r\n `;\r\n\r\n const styleElement = document.createElement('style');\r\n\r\n if (add) {\r\n if (!document.querySelector('.lze-blocker')) {\r\n styleElement.innerHTML = style;\r\n document.head.appendChild(styleElement);\r\n body.insertAdjacentHTML('beforeend', blcokerHtml);\r\n }\r\n } else {\r\n this.removeBlocker(styleElement);\r\n }\r\n\r\n return styleElement;\r\n }\r\n\r\n private removeBlocker(styleElement: HTMLStyleElement | undefined): void {\r\n const blocker = document.querySelector('.lze-blocker');\r\n blocker?.remove();\r\n styleElement?.remove();\r\n }\r\n}\r\n\r\nexport const ApiHelper = new LocalizeApiHelper();","import { Injectable, OnDestroy } from \"@angular/core\";\r\nimport { LocalizeTokenService } from \"./localize.token.service\";\r\nimport { HttpClient, HttpErrorResponse, HttpHeaders } from \"@angular/common/http\";\r\nimport { LocalizeToken, waitFor, waitUntil } from \"./localize.token\";\r\nimport { BehaviorSubject, Subject } from \"rxjs\";\r\nimport { ILocalizeApiConfigs, IApiOptions, EMethod, IHeader } from \"./helpers/interfaces\";\r\nimport { ApiHelper } from \"./public-api\";\r\n\r\nconst SCHEMES = LocalizeToken.httpHeaders;\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocalizeApiService implements OnDestroy {\r\n private readonly destroy$ = new Subject<void>();\r\n private readonly configSubject = new BehaviorSubject<Partial<ILocalizeApiConfigs>>({});\r\n readonly isRequestingSubject = new BehaviorSubject<boolean>(false);\r\n readonly isResolvingStartupSubject = new BehaviorSubject<boolean>(false);\r\n get isResolvingStartup() { return this.isResolvingStartupSubject.value; }\r\n\r\n get needTenant(): boolean { return this.localizeTokenService.config.needTenant; }\r\n\r\n get isRequesting() { return this.isRequestingSubject.value; }\r\n get isRevokingToken() { return this.localizeTokenService.isRevokingToken; }\r\n set isRevokingToken(value: boolean) { this.localizeTokenService.isRevokingToken = value; }\r\n\r\n get accessToken(): string | undefined { return this.localizeTokenService.accessToken; }\r\n set accessToken(value: string | undefined) { this.localizeTokenService.accessToken = value; }\r\n\r\n get refreshToken(): string | undefined { return this.localizeTokenService.refreshToken; }\r\n get tenantToken(): string | undefined { return this.localizeTokenService.tenantToken(this.config.tenantTokenName); }\r\n\r\n private defaultConfig: Partial<ILocalizeApiConfigs> = {\r\n waitEachRequest: { milliseconds: 0 },\r\n enableRequestCancellation: true,\r\n\r\n retryOptions: {\r\n maxRetries: 1000,\r\n delay: 1000,\r\n retryFunction: ApiHelper.defaultRetryFunction.bind(this),\r\n },\r\n\r\n };\r\n\r\n private get config(): Partial<ILocalizeApiConfigs> {\r\n this.validateConfig();\r\n return this.configSubject.value;\r\n }\r\n\r\n private apiOptions: Partial<IApiOptions> = {\r\n method: EMethod.GET,\r\n requestBody: null,\r\n };\r\n\r\n constructor(readonly httpClient: HttpClient,\r\n private readonly localizeTokenService: LocalizeTokenService\r\n ) { }\r\n\r\n /**\r\n * Initialize the API service.\r\n * @param apiConfigs - The API configurations.\r\n */\r\n init(apiConfigs: ILocalizeApiConfigs) {\r\n console.log('LocalizeApiService is initialized.');\r\n this.configSubject.next({ ...this.defaultConfig, ...apiConfigs });\r\n }\r\n\r\n cancelPendingRequests(): void {\r\n this.config.enableRequestCancellation\r\n && this.destroy$.next();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n // this.isResolvingStartupSubject.complete();\r\n // this.isRequestingSubject.complete();\r\n // this.configSubject.complete();\r\n }\r\n\r\n /**\r\n * A higher-order function that returns a curried function for making API requests.\r\n *\r\n * @param baseUrl - The base URL of the API.\r\n * @returns A curried function that can be used to make API requests.\r\n */\r\n func = (baseUrl: string) =>\r\n <T = any>(path: string, method: EMethod = EMethod.GET, reqBody: any = null, reqHeaders?: IHeader) =>\r\n this.request<T>(baseUrl, path, method, reqBody, reqHeaders)\r\n\r\n public async request<T = any>(baseUrl: string,\r\n path: string,\r\n method: EMethod = EMethod.GET,\r\n reqBody: any = null,\r\n reqHeaders?: IHeader): Promise<T> {\r\n\r\n await waitUntil(() => !this.isResolvingStartup, 500);\r\n\r\n await ApiHelper.invokeHook(this.config.onPrepareRequest);\r\n\r\n const apiOptions = this.buildApiOptions(baseUrl, path, method, reqBody, reqHeaders);\r\n\r\n try {\r\n await this.toWaitForPreviousRequest();\r\n\r\n return await ApiHelper.performRequestWithRetry<T>(\r\n apiOptions,\r\n this.config,\r\n this.performRequest.bind(this)\r\n );\r\n\r\n }\r\n catch (error: any) {\r\n return await this.handleOnRequestError(error, apiOptions);\r\n }\r\n }\r\n\r\n private async handleOnRequestError(error: HttpErrorResponse, options: IApiOptions): Promise<any> {\r\n if (error.status !== 401)\r\n throw error;\r\n\r\n await waitUntil(() => !this.isResolvingStartup, 500);\r\n\r\n return await ApiHelper.performRetry({\r\n maxRetries: () => 1000,\r\n delay: 500,\r\n retryUnless: (error) => error.status === 401 || ApiHelper.isConnectionError(error),\r\n callback: async () => {\r\n // Only handle 401 Unauthorized errors\r\n await this.revokeToken();\r\n\r\n // Retry the request with the new access token\r\n return await this.performRequest(options);\r\n }\r\n })\r\n\r\n }\r\n\r\n private async performRequest<T = any>(options: IApiOptions): Promise<T> {\r\n\r\n // Build the request options\r\n const buildOptions = { headers: this.buildHeaderOptions(options) };\r\n\r\n // Create the request observable\r\n const request$ = ApiHelper.createRequest<T>({\r\n client: this.httpClient,\r\n destroy$: () => this.destroy$\r\n }, options.method, options.requestUrl, options.requestBody, buildOptions);\r\n\r\n // Set the isRequesting state to true before making the request\r\n this.isRequestingSubject.next(true);\r\n\r\n const response = await new Promise<any>((resolve, reject) =>\r\n request$.subscribe({ next: (res) => resolve(res.body), error: reject }));\r\n\r\n // Reset the isRequesting state after the request completes\r\n this.isRequestingSubject.next(false);\r\n\r\n return response;\r\n }\r\n\r\n private async revokeToken(): Promise<void> {\r\n\r\n try {\r\n if (await this.interceptRevokeToken())\r\n return;\r\n\r\n this.isRevokingToken = true;\r\n\r\n const apiOptions: IApiOptions = {\r\n ...this.buildApiOptions(this.localizeTokenService.config.revokeTokenUrl),\r\n refreshToken: true,\r\n }\r\n\r\n // const revokeToken = await this.performRequest(apiOptions);\r\n const revokeToken = await ApiHelper.performRequestWithRetry(\r\n apiOptions,\r\n this.config,\r\n this.performRequest.bind(this)\r\n );\r\n\r\n await this.handleOnTokenRevoked(revokeToken);\r\n\r\n } catch (error: any) {\r\n // Handle the error, log it\r\n await ApiHelper.invokeHook(this.config.onAutoLogout);\r\n\r\n } finally {\r\n // Reset the revoking token state\r\n this.isRevokingToken = false;\r\n }\r\n }\r\n\r\n /** default http request options */\r\n private buildHeaderOptions(options: IApiOptions): HttpHeaders {\r\n\r\n let headers: { [key: string]: string } = {\r\n ...(options.refreshToken && { [SCHEMES.X_REFRESH_TOKEN]: `${this.refreshToken}` }),\r\n ...(!options.isFormData && { [SCHEMES.CONTENT_TYPE]: 'application/json' })\r\n };\r\n\r\n if (!options.refreshToken) {\r\n headers = {\r\n ...headers,\r\n [SCHEMES.AUTHORIZATION]: `Bearer ${this.accessToken}`,\r\n ...(this.needTenant && { [SCHEMES.X_TENANT]: `${this.tenantToken}` })\r\n };\r\n }\r\n\r\n return new HttpHeaders({ ...headers, ...options.headers });\r\n }\r\n\r\n private buildApiOptions(\r\n baseUrl: string,\r\n path: string = '',\r\n method: EMethod = EMethod.GET,\r\n requestBody: any = null,\r\n headers?: { [key: string]: string }\r\n ): IApiOptions {\r\n\r\n const requestUrl = ApiHelper.buildUrl(baseUrl, path);\r\n const isFormData = requestBody && requestBody instanceof FormData;\r\n return {\r\n ...this.apiOptions,\r\n ...{ headers, method, requestUrl, requestBody, isFormData }\r\n };\r\n }\r\n\r\n\r\n private async toWaitForPreviousRequest() {\r\n this.isRevokingToken &&\r\n (await waitUntil(() => !this.isRevokingToken));\r\n\r\n // to wait for each request in 50ms, even if the request is not completed\r\n this.config.waitEachRequest?.milliseconds &&\r\n (await waitFor(this.config.waitEachRequest.milliseconds, this.isRequesting));\r\n }\r\n\r\n\r\n private async handleOnTokenRevoked(response: any): Promise<void> {\r\n\r\n if (response?.status) {\r\n // If the response is successful, update the access token\r\n this.accessToken = response.message;\r\n\r\n } else {\r\n // If the response indicates an error, invoke the onRevokeUnauthorized hook\r\n console.warn('Token revocation failed, refresh token is expired.', response.message);\r\n await ApiHelper.invokeHook(this.config.onRevokeUnauthorized);\r\n }\r\n\r\n }\r\n\r\n private async interceptRevokeToken() {\r\n\r\n if (this.isRevokingToken) {\r\n console.warn('Token is already being revoked. Waiting for the current operation to complete...');\r\n await waitUntil(() => !this.isRevokingToken);\r\n return true;\r\n }\r\n\r\n if (!this.refreshToken) {\r\n // await ApiHelper.invokeHook(this.apiConfigs.onAutoLogout);\r\n throw new Error('Refresh token is missing. Please login again.');\r\n }\r\n return false;\r\n }\r\n\r\n validateConfig(): void {\r\n const config = this.configSubject.value as ILocalizeApiConfigs;\r\n if (this.localizeTokenService.config.needTenant && !config.tenantTokenName?.trim().length) {\r\n throw Error('Tenant token is required but tenantTokenName is not configured');\r\n }\r\n\r\n if (!this.localizeTokenService.config.revokeTokenUrl.trim().length) {\r\n throw Error('Revoke token URL is not configured - token refresh will not work');\r\n }\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { LocalizeTokenService } from './localize.token.service';\r\nimport { LocalizeApiService } from './localize.api.service';\r\n\r\n@NgModule({\r\n providers: [\r\n LocalizeTokenService,\r\n LocalizeApiService\r\n ]\r\n})\r\nexport class LocalizeTokenModule { }","import { HttpClient } from \"@angular/common/http\";\r\nimport {\r\n ChangeDetectorRef,\r\n Component,\r\n OnInit,\r\n ViewEncapsulation,\r\n} from \"@angular/core\";\r\nimport { MessageService } from \"primeng/api\";\r\nimport { DynamicDialogConfig, DynamicDialogRef } from \"primeng/dynamicdialog\";\r\nimport { JwtPayload, LocalizeTokenService } from \"../localize-token/localize.token.service\";\r\nimport { LocalizeToken } from \"../localize-token/localize.token\";\r\nimport { ILoginDialogConfig, ILoginDialogProperties } from \"./localize-logindlg.service\";\r\nimport { DomSanitizer } from \"@angular/platform-browser\";\r\n\r\n@Component({\r\n styles: [`\r\n #login-dlg-wrap {\r\n width: 100%;\r\n max-width: 400px;\r\n margin: 0 auto;\r\n padding: 30px;\r\n height: 100%;\r\n }\r\n \r\n .login-dlg-elm {\r\n margin-top: 1rem;\r\n }\r\n\r\n .login-dlg-elm.login-dlg-suggest {\r\n display: flex ;\r\n align-items: center;\r\n user-select: none;\r\n border-bottom: solid 1px #ddd;\r\n border-radius: 5px;\r\n padding: 5px 10px;\r\n background: #f9f9f9;\r\n box-shadow: 1px 5px 10px -12px #000;\r\n }\r\n \r\n #login-dlg-header {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n }\r\n \r\n #login-dlg-header h3 {\r\n font-weight: bold;\r\n font-size: 0.9rem;\r\n color: orange;\r\n text-align: center;\r\n }\r\n \r\n #login-logo {\r\n height: 55px;\r\n width: 55px;\r\n /* background: url(\"/assets/images/logo-300px.png\") no-repeat; */\r\n background-size: contain !important;\r\n }\r\n \r\n #login-dlg-content .p-inputgroup {\r\n height: 45px;\r\n }\r\n \r\n #login-dlg-content .p-inputgroup .p-inputgroup-addon {\r\n height: 45px;\r\n border-radius: 15px 0 0 15px;\r\n width: 50px;\r\n }\r\n #login-dlg-content *{\r\n font-size: .9rem;\r\n /* font-family: 'Lexend', 'Roboto', sans-serif, 'material-icons-round'; */\r\n }\r\n \r\n #login-dlg-content .p-inputgroup .p-inputgroup-addon * {\r\n font-size: 1rem;\r\n }\r\n \r\n #login-dlg-content .p-inputgroup input {\r\n height: 45px;\r\n border-radius: 0 15px 15px 0;\r\n }\r\n \r\n #login-dlg-content button {\r\n height: 45px;\r\n border-radius: 15px;\r\n }\r\n \r\n /*check animation block*/\r\n \r\n .check-animation-wrap {\r\n top: 0;\r\n left: 0;\r\n position: absolute;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n width: 100%;\r\n height: calc(100% - 200px);\r\n min-height: 400px;\r\n }\r\n \r\n .check-main-container {\r\n width: 100%;\r\n height: 100vh;\r\n display: flex;\r\n flex-flow: column;\r\n justify-content: center;\r\n align-items: center;\r\n }\r\n \r\n .check-container {\r\n width: 6.25rem;\r\n height: 7.5rem;\r\n display: flex;\r\n flex-flow: column;\r\n align-items: center;\r\n justify-content: space-between;\r\n }\r\n \r\n .check-container .check-background {\r\n width: 100%;\r\n height: calc(100% - 1.25rem);\r\n background: linear-gradient(to bottom right, #5de593, #41d67c);\r\n box-shadow: 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset;\r\n transform: scale(0.84);\r\n border-radius: 50%;\r\n animation: animateContainer 0.75s ease-out forwards 0.75s;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n opacity: 0;\r\n }\r\n \r\n .check-container .check-background svg {\r\n width: 65%;\r\n transform: translateY(0.25rem);\r\n stroke-dasharray: 80;\r\n stroke-dashoffset: 80;\r\n animation: animateCheck 0.35s forwards 1.25s ease-out;\r\n min-width: auto !important;\r\n }\r\n \r\n .check-container .check-shadow {\r\n bottom: calc(-15% - 5px);\r\n left: 0;\r\n border-radius: 50%;\r\n background: radial-gradient(closest-side, rgba(73, 218, 131, 1), transparent);\r\n animation: animateShadow 0.75s ease-out forwards 0.75s;\r\n }\r\n \r\n @keyframes animateContainer {\r\n 0% {\r\n opacity: 0;\r\n transform: scale(0);\r\n box-shadow: 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 25% {\r\n opacity: 1;\r\n transform: scale(0.9);\r\n box-shadow: 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 43.75% {\r\n transform: scale(1.15);\r\n box-shadow: 0px 0px 0px 43.334px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 62.5% {\r\n transform: scale(1);\r\n box-shadow: 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 21.667px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 81.25% {\r\n box-shadow: 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 100% {\r\n opacity: 1;\r\n box-shadow: 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n }\r\n \r\n @keyframes animateCheck {\r\n from {\r\n stroke-dashoffset: 80;\r\n }\r\n \r\n to {\r\n stroke-dashoffset: 0;\r\n }\r\n }\r\n \r\n @keyframes animateShadow {\r\n 0% {\r\n opacity: 0;\r\n width: 100%;\r\n height: 15%;\r\n }\r\n \r\n 25% {\r\n opacity: 0.25;\r\n }\r\n \r\n 43.75% {\r\n width: 40%;\r\n height: 7%;\r\n opacity: 0.35;\r\n }\r\n \r\n 100% {\r\n width: 85%;\r\n height: 15%;\r\n opacity: 0.25;\r\n }\r\n }\r\n #login-dlg-wrap .loader-wrap {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n height:100%;\r\n width:100%;\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n z-index: 100;\r\n background: #ffffff42;\r\n backdrop-filter: blur(1px);\r\n }\r\n\r\n #login-dlg-wrap .login-dlg-loader {\r\n border: 15px solid #e7e7e7;\r\n border-top: 15px solid #52dba1;\r\n border-radius: 50%;\r\n width: 100px;\r\n height: 100px;\r\n animation: spinloader 2s linear infinite;\r\n }\r\n\r\n #login-dlg-wrap .loader-wrap::before {\r\n content: \"\";\r\n position: absolute;\r\n width: 70px;\r\n height: 70px;\r\n transform: translate(-50%, -50%);\r\n z-index: 1;\r\n border: 15px solid #e7e7e700;\r\n border-top: 15px solid #52dba1c9;\r\n border-radius: 50%;\r\n animation: spinloader .75s linear infinite;\r\n }\r\n\r\n @keyframes spinloader {\r\n 0% { transform: rotate(0deg); }\r\n 100% { transform: rotate(360deg); }\r\n }\r\n `],\r\n template: `<p-toast key=\"$login-dlg\" position=\"top-center\"></p-toast>\r\n <div id=\"login-dlg-wrap\">\r\n <div id=\"login-dlg-header\">\r\n <div id=\"login-logo\" class=\"p-mb-2\" style=\"background: url('{{properties.logoImage}}') no-repeat\"></div>\r\n <h3 *ngIf=\"!success\" [innerHTML]=\"sanitizedTitle\"></h3>\r\n <h3 *ngIf=\"success\" style=\"color:green !important;\">{{properties.loginSuccessMessage}}</h3>\r\n </div>\r\n <div id=\"login-dlg-content\">\r\n <ng-container *ngIf=\"!success\">\r\n <div *ngIf=\"loading\" class=\"loader-wrap\">\r\n <div class=\"login-dlg-loader\"></div>\r\n </div>\r\n <div class=\"login-dlg-elm\">\r\n <div class=\"p-inputgroup\">\r\n <span class=\"p-inputgroup-addon\">\r\n <i class=\"material-icons-round\">person</i>\r\n </span>\r\n <input disabled pInputText type=\"text\" placeholder=\"{{properties.username?.placeHolder}}\" [value]=\"decodeToken?.email\" />\r\n </div>\r\n </div>\r\n \r\n <div class=\"login-dlg-elm\">\r\n <div class=\"p-inputgroup\">\r\n <span class=\"p-inputgroup-addon\">\r\n <i class=\"material-icons-round\">lock</i>\r\n </span>\r\n <input [disabled]=\"loading\" (keydown.enter)=\"clickLogin()\" pInputText type=\"password\" \r\n placeholder=\"{{properties.password?.placeHolder}}\" [(ngModel)]=\"password\"\r\n autofocus />\r\n </div>\r\n </div>\r\n <div class=\"login-dlg-elm\">\r\n <button style=\"width: 100%;\" pButton type=\"button\" label=\"{{properties.loginButton?.placeHolder}}\" (click)=\"clickLogin()\"\r\n [disabled]=\"!password || loading\"></button>\r\n </div>\r\n \r\n <div class=\"login-dlg-elm login-dlg-suggest\" style=\"display:flex;align-items: center;user-select: none;\">\r\n <span>{{properties.logoutButton?.message}}</span>\r\n <button class=\"p-button-text\" pButton type=\"button\" label=\"{{properties.logoutButton?.placeHolder}}\" \r\n (click)=\"clickLogout()\"></button>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"success\">\r\n <div style=\"margin-top:35px;\"></div>\r\n <div class=\"check-animation-wrap\">\r\n <div class=\"check-main-container\">\r\n <div class=\"check-container\">\r\n <div class=\"check-background\">\r\n <svg viewBox=\"0 0 65 51\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M7 25L27.3077 44L58.5 7\" stroke=\"white\" stroke-width=\"13\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>`,\r\n selector: \"app-localize-logindlg\",\r\n providers: [MessageService],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class LocalizeLogindlgComponent implements OnInit {\r\n readonly messageKey = \"$login-dlg\";\r\n password: any;\r\n readonly decodeToken: JwtPayload | null;\r\n loading = false;\r\n success = false;\r\n private get config() { return this.tokenService.config; }\r\n private readonly loginConfig: ILoginDialogConfig\r\n\r\n private logout?: () => any\r\n private loginUrl?: string;\r\n readonly properties: ILoginDialogProperties;\r\n\r\n\r\n constructor(\r\n private readonly messageService: MessageService,\r\n private readonly cdt: ChangeDetectorRef,\r\n private readonly dlgRef: DynamicDialogRef,\r\n private readonly dlgConfig: DynamicDialogConfig,\r\n private readonly tokenService: LocalizeTokenService,\r\n private readonly httpClient: HttpClient,\r\n private readonly sanitizer: DomSanitizer\r\n ) {\r\n this.decodeToken = this.tokenService.decodeRefreshToken;\r\n this.loginConfig = this.dlgConfig.data.loginConfig;\r\n this.properties = this.loginConfig.properties!;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.dlgConfig.closable = false;\r\n this.logout = this.loginConfig.logoutFunc;\r\n this.loginUrl = this.loginConfig.loginUrl\r\n\r\n if (!this.decodeToken) {\r\n this.showMessage(\"error\", \"Token is invalid\");\r\n setTimeout(() => this.logout?.(), 2000);\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.cdt.detectChanges();\r\n }\r\n\r\n async clickLogin() {\r\n if (!this.isValidPassword) {\r\n return this.showMessage(\"error\", \"Password is required and must be at least 6 characters\");\r\n }\r\n\r\n this.loading = true;\r\n const loginRes = await this.login();\r\n if (!loginRes?.status) {\r\n return this.showMessage(\"error\", loginRes.message ?? \"An error occurred\");\r\n }\r\n\r\n this.tokenService.accessToken = loginRes.tokens.accessToken;\r\n const cookieOptions = { expires: this.loginConfig.expire ?? 365 }\r\n LocalizeToken.storage.set(this.config.refreshTokenName!, loginRes.tokens.refreshToken, cookieOptions);\r\n this.success = true;\r\n setTimeout(() => {\r\n this.dlgConfig.dismissableMask = true;\r\n this.dlgConfig.modal = false;\r\n this.dlgRef.close(true);\r\n }, 2000);\r\n }\r\n\r\n private async login() {\r\n if (!this.loginUrl?.trim().length) {\r\n this.showMessage(\"error\", \"Login url is required\");\r\n throw new Error(\"Login url is required\");\r\n }\r\n\r\n try {\r\n\r\n if (this.loginConfig.loginFunction) {\r\n console.log(\"Using custom login function\");\r\n return await this.loginConfig.loginFunction(this.decodeToken?.email ?? '', this.password.trim(), this.getHeaders());\r\n }\r\n\r\n return await new Promise<any>((resolve, reject) =>\r\n this.httpClient.post(this.loginUrl!,\r\n { password: this.password.trim() },\r\n { headers: this.getHeaders() }).subscribe({ next: resolve, error: reject }));\r\n\r\n } catch (e: any) {\r\n this.showMessage(\"error\", e.message);\r\n return null;\r\n }\r\n }\r\n\r\n private getHeaders() {\r\n return {\r\n [LocalizeToken.httpHeaders.X_REFRESH_TOKEN]: LocalizeToken.storage.get(this.config.refreshTokenName!) ?? \"\",\r\n [LocalizeToken.httpHeaders.X_TENANT]: LocalizeToken.storage.get(this.loginConfig.tenantTokenName!) ?? \"\",\r\n };\r\n }\r\n\r\n get isValidPassword(): boolean {\r\n this.loading = false;\r\n return this.properties.passwordValidator\r\n ? this.properties.passwordValidator(this.password)\r\n : this.password && this.password.trim().length >= 6 && this.password.trim().length <= 50;\r\n }\r\n\r\n clickLogout = () => this.logout?.();\r\n\r\n private showMessage(severity: string, summary: string) {\r\n this.messageService.add({ key: this.messageKey, severity, summary });\r\n this.loading = false;\r\n }\r\n\r\n get sanitizedTitle() {\r\n return this.sanitizer.bypassSecurityTrustHtml(this.properties.title ?? '');\r\n }\r\n}\r\n","import { Injectable, Injector } from '@angular/core';\nimport { DialogService, DynamicDialogConfig } from 'primeng/dynamicdialog';\nimport { LocalizeLogindlgComponent } from './localize-logindlg.component';\nexport interface ILoginDialogPlaceHolder {\n /**\n * Message to display in the input field, typically used for error messages or hints.\n * This is optional and can be used to provide additional context or instructions to the user.\n */\n message?: string;\n /**\n * Placeholder or label text for the input field\n */\n placeHolder?: string;\n}\n\nexport interface ILoginDialogProperties {\n /**\n * Title of the login dialog\n */\n title?: string;\n loginSuccessMessage?: string;\n /**\n * Logog image path or URL to display in the login dialog\n * If not provided, the \"/assets/images/logo-300px.png\" image will be used.\n */\n logoImage?: string;\n username?: ILoginDialogPlaceHolder;\n password?: ILoginDialogPlaceHolder;\n loginButton?: ILoginDialogPlaceHolder;\n logoutButton?: ILoginDialogPlaceHolder;\n /**\n * Function to validate the password.\n * If not provided, the default validation checks if the password is between 6 and 50 characters long.\n * @param password\n * @returns\n */\n passwordValidator?: (password: string) => boolean;\n}\n\nexport interface ILoginDialogConfig {\n loginUrl?: string;\n logoutUrl?: string;\n loginFunction?: (username: string, password: string, headers?: { [key: string]: string }) => Promise<any>;\n logoutFunc?: () => void;\n /**\n * Cookie expiration date in days from now. If not provided the cookie is a session cookie\n */\n expire?: number;\n tenantTokenName?: string;\n /**\n * Configuration for the login dialog.\n * This interface defines the properties that can be used to customize the login dialog's behavior and appearance\n */\n properties?: ILoginDialogProperties;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LocalizeLogindlgService {\n\n constructor(private readonly injector: Injector) { }\n\n async openLoginDialog(loginConfig: ILoginDialogConfig, config?: DynamicDialogConfig) {\n\n config = this.intercepDialogConfig(config);\n this.initConfig(loginConfig);\n\n config.data = { ...(config.data || {}), ...{ loginConfig } };\n\n const dialogService = this.injector.get(DialogService);\n const dialog = dialogService.open(LocalizeLogindlgComponent, config);\n\n await new Promise<void>((resolve) =>\n dialog.onClose.subscribe(res => {\n if (res) {\n resolve();\n }\n }));\n }\n\n private intercepDialogConfig(config?: DynamicDialogConfig) {\n config ??= {\n header: 'Login',\n style: { 'max-width': '400px', width: '100%', 'height': '650px' },\n modal: true,\n closable: false,\n showHeader: false,\n }\n\n config = {\n ...config, ...{\n contentStyle: { 'height': '100%', 'border-radius': '20px' }\n }\n }\n config.style = { ...config.style, ...{ 'border-radius': '20px' } };\n return config;\n }\n\n\n private initConfig(loginConfig: ILoginDialogConfig) {\n loginConfig ??= {}\n loginConfig.properties ??= {\n title: 'Your session is expired!<br/> Please login again to continue.',\n loginSuccessMessage: 'You have successfully logged in.',\n logoImage: '/assets/images/logo-300px.png',\n username: { placeHolder: 'Username' },\n password: { placeHolder: 'Password' },\n loginButton: { placeHolder: 'Login' },\n logoutButton: {\n message: 'No, I want to login with another user.',\n placeHolder: 'Logout'\n }\n }\n }\n}\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { LocalizeLogindlgComponent } from \"./localize-logindlg.component\";\nimport { ToastModule } from \"primeng/toast\";\nimport { InputTextModule } from \"primeng/inputtext\";\nimport { ButtonModule } from \"primeng/button\";\nimport { BrowserModule } from '@angular/platform-browser';\nimport { FormsModule } from '@angular/forms';\nimport { LocalizeLogindlgService } from \"./localize-logindlg.service\";\n\n@NgModule({\n declarations: [LocalizeLogindlgComponent],\n exports: [LocalizeLogindlgComponent],\n imports: [\n CommonModule,\n ToastModule,\n InputTextModule,\n BrowserModule,\n FormsModule,\n ButtonModule,\n ],\n providers: [LocalizeLogindlgService],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class LocalizeLogindlgModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["BehaviorSubject","jwt_decode","Injectable","EMethod","takeUntil","catchError","throwError","HttpErrorResponse","Subject","HttpHeaders","HttpClient","NgModule","Component","MessageService","ViewEncapsulation","ChangeDetectorRef","DynamicDialogRef","DynamicDialogConfig","DomSanitizer","DialogService","Injector","CommonModule","ToastModule","InputTextModule","BrowserModule","FormsModule","ButtonModule","CUSTOM_ELEMENTS_SCHEMA"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sambath999-localize-token.umd.js","sources":["../../src/localize-token/helpers/localize.api.assets.ts","../../node_modules/tslib/tslib.es6.js","../../src/localize-token/localize.token.storage.ts","../../src/localize-token/localize.token.ts","../../src/localize-token/localize.token.service.ts","../../src/localize-token/helpers/interfaces.ts","../../src/localize-token/helpers/loccalize.api.helper.ts","../../src/localize-token/localize.api.service.ts","../../src/localize-token/localize.token.module.ts","../../src/localize-logindlg/localize-logindlg.component.ts","../../src/localize-logindlg/localize-logindlg.service.ts","../../src/localize-logindlg/localize-logindlg.module.ts","../../src/sambath999-localize-token.ts"],"sourcesContent":["export const LOCALIZE_API_ASSETS = {\r\n network: {\r\n noConnection: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <svg id=\"lze-no-connection\" data-name=\"Layer 2\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 77.29 70.98\">\r\n <defs>\r\n <style> .cls-1 { fill: #fff; } .cls-2, .cls-3 { fill: #e30613; } .cls-3 { stroke: #e30613; stroke-miterlimit: 10; stroke-width: .25px; } </style>\r\n </defs>\r\n <g id=\"Layer_3\" data-name=\"Layer 3\">\r\n <g>\r\n <path class=\"cls-1\" d=\"m73.29,35c-1.2,0-2.33-.53-3.09-1.46-.48-.57-11.23-13.2-31.55-13.2s-31.11,12.66-31.56,13.2c-1.4,1.71-3.92,1.95-5.63.55-1.71-1.4-1.95-3.92-.55-5.63.54-.66,13.47-16.12,37.74-16.12s37.2,15.46,37.74,16.12c1.4,1.71,1.15,4.23-.56,5.62-.71.58-1.61.9-2.53.9Z\"/>\r\n <path class=\"cls-1\" d=\"m63.96,45.66c-1.19,0-2.32-.53-3.08-1.44-5.79-6.05-13.86-9.39-22.24-9.21-8.38-.18-16.45,3.16-22.24,9.22-1.46,1.65-3.99,1.81-5.64.35-1.57-1.39-1.8-3.77-.52-5.43,7.32-7.89,17.64-12.29,28.4-12.12,10.76-.17,21.08,4.24,28.4,12.12,1.4,1.71,1.15,4.23-.56,5.62-.71.58-1.6.9-2.53.9Z\"/>\r\n <path class=\"cls-1\" d=\"m53.3,56.32c-1.24,0-2.41-.57-3.16-1.55-5.73-6.35-15.52-6.85-21.87-1.13-.4.36-.77.73-1.13,1.13-1.36,1.73-3.88,2.03-5.61.67-1.71-1.34-2.03-3.8-.73-5.54,8.39-9.85,23.18-11.04,33.03-2.65.95.81,1.84,1.69,2.65,2.65,1.34,1.75,1,4.26-.75,5.6-.7.53-1.55.82-2.43.82Z\"/>\r\n </g>\r\n <path class=\"cls-2\" d=\"m47.21,9.45l-4.06,41.36c-.64,5.42-8.39,5.39-9.01,0,0,0-4.06-41.36-4.06-41.36-.46-4.73,2.99-8.94,7.72-9.4,5.33-.58,9.97,4.09,9.4,9.4h0Z\"/>\r\n <circle class=\"cls-3\" cx=\"38.64\" cy=\"64.79\" r=\"6.07\"/>\r\n </g>\r\n </svg>`\r\n }\r\n}","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || from);\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","import { extractMainDomain } from \"./localize.token\";\r\n\r\nexport interface ICookieOptions {\r\n /**\r\n * Cookie expiration date in days from now. If not provided the cookie is a session cookie\r\n */\r\n expires?: number | Date;\r\n path?: string;\r\n domain?: string;\r\n secure?: boolean;\r\n samesite?: \"strict\" | \"lax\" | \"none\";\r\n}\r\n\r\n/**\r\n* Assembly of @package ng2-cookies @see https://www.npmjs.com/package/ng2-cookies\r\n*\r\n* Reassembled by\r\n* @author sambath999\r\n* @date_29_09_2021\r\n* Updated from raw parameters to\r\n* @param {ICookieOptions} options and added another newer cookie flag\r\n* @param {string} samesite\r\n* @param {constant} SameSiteTypes, @param {string} strict \"strict\", @param {string} lax \"lax\", @param {string} none \"none\"\r\n*\r\n* @enum\r\n*/\r\nexport class LocalizeTokenStorage {\r\n\r\n private get getDefaultOptions(): ICookieOptions {\r\n const mainDomain = extractMainDomain(window.location.hostname);\r\n return {\r\n path: '/',\r\n domain: mainDomain,\r\n secure: true,\r\n // samesite: SameSiteType.strict,\r\n expires: 1\r\n }\r\n }\r\n\r\n private readonly defaultOptions: ICookieOptions;\r\n constructor(_defaultOptions?: ICookieOptions) {\r\n this.defaultOptions = _defaultOptions ?? this.getDefaultOptions;\r\n }\r\n\r\n /**\r\n * Checks the existence of a single cookie by it's name\r\n *\r\n * @param {string} name Identification of the cookie\r\n * @returns existence of the cookie\r\n */\r\n check(name: string): boolean {\r\n if (typeof document === \"undefined\") return false;\r\n name = encodeURIComponent(name);\r\n const regexp = new RegExp('(?:^' + name + '|;\\\\s*' + name + ')=(.*?)(?:;|$)', 'g');\r\n return regexp.test(document.cookie);\r\n }\r\n\r\n /**\r\n * Retrieves a single cookie by it's name\r\n *\r\n * @param {string} name Identification of the Cookie\r\n * @returns The Cookie's value\r\n */\r\n get(name: string): string | undefined {\r\n if (!this.check(name)) return undefined;\r\n\r\n name = encodeURIComponent(name);\r\n const regexp = new RegExp('(?:^' + name + '|;\\\\s*' + name + ')=(.*?)(?:;|$)', 'g');\r\n const result = regexp.exec(document.cookie);\r\n return result ? decodeURIComponent(result[1]) : undefined;\r\n }\r\n\r\n /**\r\n * Retrieves a a list of all cookie avaiable\r\n *\r\n * @returns Object with all Cookies\r\n */\r\n getAll(): any {\r\n const cookies: any = {};\r\n if (document.cookie) {\r\n const split = document.cookie.split(';');\r\n for (const s of split) {\r\n const currCookie = s.split('=');\r\n currCookie[0] = currCookie[0].trim();\r\n cookies[decodeURIComponent(currCookie[0])] = decodeURIComponent(currCookie[1]);\r\n }\r\n }\r\n\r\n return cookies;\r\n }\r\n\r\n set(name: string, value: string, options?: ICookieOptions) {\r\n options ??= this.defaultOptions;\r\n const { expires, path, domain, secure, samesite } = { ...this.defaultOptions, ...options };\r\n let cookieStr = `${encodeURIComponent(name)}=${encodeURIComponent(value)};`;\r\n\r\n if (expires) {\r\n const dtExpires = typeof expires === 'number' ? new Date(Date.now() + expires * 864e5) : expires;\r\n cookieStr += `expires=${dtExpires.toUTCString()};`;\r\n }\r\n\r\n cookieStr += path ? `path=${path};` : '';\r\n cookieStr += domain ? `domain=${domain};` : '';\r\n cookieStr += secure ? 'secure;' : '';\r\n cookieStr += samesite ? `samesite=${samesite};` : '';\r\n\r\n document.cookie = cookieStr;\r\n }\r\n\r\n /**\r\n * Removes specified Cookie\r\n *\r\n * @param {string} name Cookie's identification\r\n * @param {string} path Path relative to the domain where the cookie should be avaiable. Default /\r\n * @param {string} domain Domain where the cookie should be avaiable. Default current domain\r\n */\r\n delete(name: string, path: string = '/', domain: string = window.location.hostname): void {\r\n this.set(name, '', { path, domain, expires: -1 });\r\n }\r\n\r\n /**\r\n * Delete all cookie avaiable\r\n */\r\n deleteAll(path?: string, domain?: string): void {\r\n const cookies = this.getAll();\r\n\r\n for (const cookieName of Object.keys(cookies)) {\r\n this.delete(cookieName, path, domain);\r\n }\r\n }\r\n\r\n}\r\n","import { LocalizeTokenStorage } from \"./localize.token.storage\";\r\nexport interface ILocalizeTokenConfig {\r\n /**\r\n * The main domain of the application to set the cookies to be available for cross application with subdomains.\r\n * \r\n * Default is location.hostname (current domain) and automatically set extracted main domain if it is subdomain.\r\n */\r\n mainDomain?: string;\r\n authTokenName?: string;\r\n // tenantTokenName?: string;\r\n refreshTokenName?: string;\r\n /**\r\n * Flag to determine if the tenant token is required.\r\n */\r\n needTenant: boolean;\r\n isProduction: boolean;\r\n revokeTokenUrl: string;\r\n}\r\n\r\nexport class LocalizeToken {\r\n\r\n static readonly storage = new LocalizeTokenStorage();\r\n\r\n static readonly httpHeaders = {\r\n AUTHORIZATION: 'Authorization',\r\n X_TENANT: 'X-Tenant',\r\n X_REFRESH_TOKEN: 'X-RefreshToken',\r\n CONTENT_TYPE: 'Content-Type',\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Waits for a specified amount of time.\r\n * @param milliseconds - The milliseconds to wait.\r\n * @param when - The condition to wait for. Default is true.\r\n * @returns - Promise<void>\r\n */\r\nexport async function waitFor(milliseconds: number, when: boolean = true) {\r\n if (!when) return;\r\n await new Promise(resolve => setTimeout(resolve, milliseconds));\r\n}\r\n\r\n/**\r\n * Waits until the condition is met.\r\n * @param when - The condition to wait for.\r\n * @param intervalNumber - The interval number in milliseconds to check the condition. Default is 50.\r\n */\r\nexport async function waitUntil(when: () => any, intervalNumber: number = 50) {\r\n await new Promise(resolve => {\r\n const interval = setInterval(async () => {\r\n const cond = when();\r\n const result = cond instanceof Promise ? await cond : cond;\r\n if (result) {\r\n clearInterval(interval);\r\n resolve(true);\r\n }\r\n }, intervalNumber);\r\n });\r\n}\r\n\r\nexport function extractMainDomain(subdomain?: string): string {\r\n subdomain ??= window.location.hostname;\r\n const parts = subdomain.split('.');\r\n return parts.length > 2 ? parts.slice(-2).join('.') : subdomain;\r\n}","import { Injectable, OnDestroy } from '@angular/core';\r\nimport { extractMainDomain, ILocalizeTokenConfig, LocalizeToken } from './localize.token';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport * as jwt_decode from 'jwt-decode';\r\nexport interface JwtPayload extends jwt_decode.JwtPayload {\r\n // Define the structure of your JWT payload here\r\n email: string;\r\n sub: string;\r\n name: string;\r\n iat: number;\r\n exp: number;\r\n // Add other fields as needed\r\n}\r\n\r\ninterface IAuthToken {\r\n token: string;\r\n revoke: boolean;\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class LocalizeTokenService implements OnDestroy {\r\n private readonly configSubject = new BehaviorSubject<Partial<ILocalizeTokenConfig>>({});\r\n readonly isRevokingTokenSubject = new BehaviorSubject<boolean>(false);\r\n private readonly defaultConfig: Partial<ILocalizeTokenConfig> = {\r\n mainDomain: extractMainDomain(),\r\n authTokenName: 'auth-token',\r\n refreshTokenName: '_lze_rftkp_',\r\n }\r\n\r\n get config(): ILocalizeTokenConfig {\r\n this.throwIfNotInitialized();\r\n return this.configSubject.value as ILocalizeTokenConfig;\r\n }\r\n\r\n private isInitialized = false;\r\n\r\n init(config: ILocalizeTokenConfig) {\r\n console.log('LocalizeTokenService is initialized.');\r\n this.configSubject.next({ ...this.defaultConfig, ...config });\r\n this.isInitialized = true;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n // this.configSubject.complete();\r\n // this.isRevokingTokenSubject.complete();\r\n }\r\n\r\n private get authToken() { return this.storageGet() }\r\n private set authToken(value: IAuthToken | undefined) {\r\n value\r\n ? this.storageSet(value)\r\n : LocalizeToken.storage.delete(this.config.authTokenName!);\r\n }\r\n\r\n get refreshToken() { return LocalizeToken.storage.get(this.config.refreshTokenName!) }\r\n get accessToken() { return this.authToken?.token }\r\n\r\n set accessToken(value: string | undefined) {\r\n value && (this.authToken = { token: value, revoke: false })\r\n }\r\n\r\n get isRevokingToken() { return this.isRevokingTokenSubject.value /* this.authToken?.revoke ?? false */ }\r\n\r\n set isRevokingToken(value: boolean) {\r\n this.isRevokingTokenSubject.next(value);\r\n this.authToken && (this.authToken = { ...this.authToken, revoke: value })\r\n }\r\n\r\n tenantToken(name: string | undefined) {\r\n if (!name) return undefined;\r\n return LocalizeToken.storage.get(name)\r\n }\r\n\r\n private storageGet() {\r\n try {\r\n const encoded = LocalizeToken.storage.get(this.config.authTokenName!);\r\n const decoded = atob(encoded || '');\r\n return JSON.parse(decoded) as IAuthToken;\r\n } catch {\r\n return undefined\r\n }\r\n }\r\n\r\n private storageSet(value: IAuthToken) {\r\n const base64 = btoa(JSON.stringify(value));\r\n LocalizeToken.storage.set(this.config.authTokenName!, base64);\r\n }\r\n\r\n tokensValid(tenantTokenName?: string): boolean {\r\n return !!this.refreshToken?.length\r\n && (!this.config.needTenant || !!this.tenantToken(tenantTokenName)?.length);\r\n }\r\n\r\n decodeToken = (token: string) => jwt_decode.jwtDecode<JwtPayload>(token);\r\n get decodeRefreshToken() {\r\n const token = LocalizeToken.storage.get(this.config.refreshTokenName!);\r\n return !token ? null : this.decodeToken(token);\r\n }\r\n\r\n private throwIfNotInitialized() {\r\n if (!this.isInitialized) {\r\n throw new Error('LocalizeTokenService is not initialized. Call init() method before using it.');\r\n }\r\n }\r\n\r\n}\r\n","\r\n/**\r\n * Http method options\r\n */\r\nexport enum EMethod {\r\n POST = 'post',\r\n GET = 'get',\r\n PUT = 'put',\r\n DELETE = 'delete',\r\n PATCH = 'patch',\r\n}\r\n\r\nexport interface IOnConnectionError {\r\n /**\r\n * Callback function to execute when a connection error occurs.\r\n * This function should return a Promise or any value.\r\n */\r\n callback?: (error: INormalizedError) => Promise<void> | any;\r\n /**\r\n * If true, the request will block the screen with overlay on connection errors.\r\n * Default is false.\r\n */\r\n blockScreen?: boolean;\r\n\r\n /** Optional z-index for the block screen overlay.\r\n * Default is 10000.\r\n */\r\n blockScreenZIndex?: number;\r\n\r\n /**\r\n * Optional message to display when a connection error occurs.\r\n */\r\n message?: string;\r\n suggestionMessage?: string;\r\n}\r\n\r\ninterface IRetryOptions {\r\n\r\n /**\r\n * Maximum number of retries for a failed request.\r\n * Default is 100.\r\n */\r\n maxRetries?: number;\r\n\r\n /**\r\n * Delay in milliseconds before retrying a failed request.\r\n * Default is 500ms.\r\n */\r\n delay?: number;\r\n\r\n /**\r\n * Function to determine if a request should be retried based on the error.\r\n * If not provided, the default function will retry for network errors and server errors (status 500-599).\r\n * @param error - The error object from the failed request.\r\n * @returns true if the request should be retried, false otherwise.\r\n */\r\n retryFunction?: (error: INormalizedError) => Promise<boolean> | any;\r\n\r\n /**\r\n * Function to execute when a connection error occurs.\r\n * This function should return a Promise or any value.\r\n */\r\n onConnectionError?: IOnConnectionError;\r\n\r\n}\r\n\r\nexport interface ILocalizeApiConfigs {\r\n tenantTokenName?: string;\r\n onPrepareRequest?: () => Promise<void> | any;\r\n onAutoLogout?: () => Promise<void> | any;\r\n onRevokeUnauthorized?: () => Promise<void> | any;\r\n\r\n waitEachRequest?: {\r\n milliseconds: number;\r\n };\r\n enableRequestCancellation?: boolean;\r\n\r\n /**\r\n * Config for retrying failed requests.\r\n * If not provided, the default retry options will be used.\r\n */\r\n retryOptions?: IRetryOptions;\r\n}\r\n\r\nexport interface IApiOptions {\r\n headers?: { [key: string]: string };\r\n method: EMethod;\r\n requestUrl: string;\r\n requestBody?: any;\r\n isFormData?: boolean;\r\n /**\r\n * If true, the request will use the refresh token for authorization.\r\n */\r\n refreshToken?: boolean;\r\n}\r\n\r\nexport interface IHeader {\r\n [key: string]: string;\r\n}\r\n\r\nexport interface INormalizedError {\r\n code: string;\r\n message: string;\r\n details?: any;\r\n status: number;\r\n}\r\n","import { HttpClient, HttpErrorResponse, HttpHeaders } from \"@angular/common/http\";\r\nimport { IApiOptions, ILocalizeApiConfigs, INormalizedError, IOnConnectionError } from \"./interfaces\";\r\nimport { takeUntil, catchError, throwError, Subject } from \"rxjs\";\r\nimport { waitFor } from \"../localize.token\";\r\nimport { LOCALIZE_API_ASSETS } from \"./localize.api.assets\";\r\n\r\ninterface IRequestInstance {\r\n client: HttpClient;\r\n destroy$: () => Subject<void>;\r\n}\r\n\r\ninterface IRetryOptions {\r\n maxRetries: () => number;\r\n delay: number;\r\n callback: () => Promise<any> | any;\r\n retryUnless?: (error: any) => boolean;\r\n onError?: (error: any) => Promise<void> | any;\r\n connectionError?: IOnConnectionError\r\n}\r\n\r\nclass LocalizeApiHelper {\r\n\r\n readonly defaultRetryOptions: Partial<IRetryOptions> = {\r\n connectionError: {\r\n message: 'Connection error occurred. Please wait',\r\n blockScreen: true,\r\n blockScreenZIndex: 10000\r\n }\r\n };\r\n\r\n async performRetry<T = any>(options: IRetryOptions): Promise<T> {\r\n let attempts = 0;\r\n let lastError: any;\r\n let consoleCount = 0;\r\n\r\n // Merge default retry options with provided options\r\n options = { ...this.defaultRetryOptions, ...options }\r\n\r\n let styleElement: HTMLStyleElement | undefined;\r\n\r\n while (attempts < options.maxRetries()) {\r\n try {\r\n const result = await options.callback();\r\n this.removeBlocker(styleElement);\r\n return result;\r\n\r\n } catch (error: any) {\r\n lastError = error;\r\n\r\n if (consoleCount >= 7) {\r\n console.clear();\r\n consoleCount = 0;\r\n }\r\n\r\n if (options.retryUnless && !options.retryUnless(error))\r\n throw error; // If the error should not be retried, rethrow it\r\n\r\n // Handle connection error\r\n styleElement = await this.onConnectionError(options, error);\r\n\r\n if (options.onError)\r\n await this.invokeHook(options.onError.bind(this, error));\r\n\r\n if (attempts >= options.maxRetries() - 1)\r\n throw error;\r\n\r\n attempts++;\r\n consoleCount++;\r\n console.warn(`Attempt ${attempts} failed. Retrying...`, error);\r\n await waitFor(options.delay);\r\n }\r\n }\r\n\r\n console.warn(`Failed after ${options.maxRetries} attempts`);\r\n throw lastError;\r\n }\r\n\r\n async performRequestWithRetry<T = any>(\r\n options: IApiOptions,\r\n config: ILocalizeApiConfigs,\r\n performRequest: <T = any>(options: IApiOptions) => Promise<T>\r\n ): Promise<T> {\r\n\r\n const retryUnless = config.retryOptions?.retryFunction\r\n || this.isConnectionError;\r\n\r\n return await this.performRetry({\r\n connectionError: config.retryOptions?.onConnectionError,\r\n maxRetries: () => config.retryOptions?.maxRetries ?? 1000,\r\n delay: config.retryOptions?.delay ?? 500,\r\n callback: () => performRequest<T>(options),\r\n retryUnless: retryUnless,\r\n })\r\n }\r\n\r\n buildUrl(baseUrl: string, path: string): string {\r\n const normalizedUrl = `${baseUrl.trim().replace(/\\/?$/, '/')}${path.trim().replace(/^\\//, '')}`;\r\n return normalizedUrl.endsWith('/')\r\n ? normalizedUrl.slice(0, -1)\r\n : normalizedUrl;\r\n }\r\n\r\n normalizeError(error: HttpErrorResponse): INormalizedError {\r\n return {\r\n code: error.error?.code || `HTTP_${error.status}`,\r\n message: error.error?.message || error.message,\r\n details: error.error?.details,\r\n status: error.status\r\n };\r\n }\r\n\r\n async invokeHook(callback?: () => Promise<any> | any): Promise<any> {\r\n if (!callback) return;\r\n\r\n const result = callback();\r\n if (result instanceof Promise) {\r\n await result;\r\n }\r\n }\r\n\r\n createRequest<T = any>(\r\n instance: Required<IRequestInstance>,\r\n method: string,\r\n url: string,\r\n body: any,\r\n options: { headers: HttpHeaders }\r\n ) {\r\n const request$ = instance.client.request<T>(method, url, {\r\n ...options,\r\n body,\r\n observe: 'response',\r\n }).pipe(\r\n takeUntil(instance.destroy$()),\r\n catchError((error: HttpErrorResponse) => {\r\n // Convert to a non-observable error to handle in the promise\r\n return throwError(() => this.normalizeError(error));\r\n })\r\n );\r\n\r\n return request$;\r\n }\r\n\r\n defaultRetryFunction(error: INormalizedError): boolean {\r\n\r\n // Don't retry for other errors (like 400, 401, 403, etc.)\r\n if (!this.isConnectionError(error))\r\n throw error;\r\n\r\n return true;\r\n }\r\n\r\n isConnectionError(error: INormalizedError): boolean {\r\n const isNetworkError = error.status === 0;\r\n const isServerError = error.status >= 1000 && error.status < 600;\r\n return isNetworkError || isServerError;\r\n }\r\n\r\n async onConnectionError(\r\n options: IRetryOptions,\r\n error: any\r\n ): Promise<Promise<void> | any> {\r\n\r\n if (!options.connectionError)\r\n return;\r\n\r\n let styleElement: HTMLStyleElement | undefined;\r\n if (this.isConnectionError(error)) {\r\n\r\n styleElement = this.screenBlocker(options, error, true);\r\n\r\n await this.invokeHook(options.connectionError.callback?.bind(this, error));\r\n return styleElement;\r\n } else {\r\n this.screenBlocker(options, error, false);\r\n styleElement?.remove();\r\n }\r\n }\r\n\r\n screenBlocker(optons: IRetryOptions,\r\n error?: any,\r\n add: boolean = true): HTMLStyleElement | undefined {\r\n\r\n if (!optons.connectionError?.blockScreen)\r\n return;\r\n\r\n if (error instanceof HttpErrorResponse)\r\n error = this.normalizeError(error);\r\n\r\n const message = optons.connectionError?.message\r\n || 'Connection error occurred. Please wait';\r\n const errorMessage = error?.message || 'An error occurred';\r\n const suggestinMessage = optons.connectionError?.suggestionMessage\r\n || 'Please check your internet connection or the server status.';\r\n\r\n const zIndex = optons.connectionError?.blockScreenZIndex || 10000;\r\n\r\n const body = document.body;\r\n const blcokerHtml = `\r\n <div class=\"lze-blocker\">\r\n ${LOCALIZE_API_ASSETS.network.noConnection}\r\n <div class=\"lze-blocker__message\">\r\n ${message}\r\n <span class=\"lze-blocker__dotting\">\r\n <span class=\"lze-blocker__dot\"></span>\r\n <span class=\"lze-blocker__dot\"></span>\r\n <span class=\"lze-blocker__dot\"></span>\r\n </span>\r\n </div>\r\n <div class=\"lze-blocker__error\">${errorMessage}</div>\r\n <div class=\"lze-blocker__error_suggestion\">${suggestinMessage}</div>\r\n </div>\r\n `;\r\n const style = `\r\n div.lze-blocker {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n background: rgba(0, 0, 0, 0.85) !important;\r\n z-index: ${zIndex};\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n flex-direction: column;\r\n color: #fff !important;\r\n font-family: Arial, sans-serif;\r\n text-align: center;\r\n padding: 20px;\r\n box-sizing: border-box;\r\n overflow: hidden;\r\n user-select: none;\r\n }\r\n\r\n svg#lze-no-connection {\r\n width: 75px;\r\n height: 75px;\r\n margin-bottom: 20px;\r\n }\r\n \r\n div.lze-blocker__message {\r\n color: #fff !important;\r\n font-size: 18px !important;\r\n margin-bottom: 10px;\r\n }\r\n \r\n .lze-blocker__dotting {\r\n display: inline-block;\r\n vertical-align: middle;\r\n }\r\n span.lze-blocker__dot {\r\n display: inline-block;\r\n width: 7px;\r\n height: 7px;\r\n background-color: #ffffff !important;\r\n border-radius: 50%;\r\n margin-left: 3px;\r\n opacity: 0.3;\r\n animation: dotting 1s infinite;\r\n }\r\n .lze-blocker__dot:nth-child(1) {\r\n animation-delay: 0s;\r\n opacity: 1;\r\n }\r\n .lze-blocker__dot:nth-child(2) {\r\n animation-delay: 0.2s;\r\n }\r\n .lze-blocker__dot:nth-child(3) {\r\n animation-delay: 0.4s;\r\n }\r\n\r\n @keyframes dotting {\r\n 0%, 80%, 100% { opacity: 0.3; }\r\n 40% { opacity: 1; }\r\n }\r\n\r\n div.lze-blocker__error {\r\n color: #f00;\r\n font-size: 14px !important;\r\n margin-bottom: 10px;\r\n text-shadow: 0 0 1px #ff5f5f !important;\r\n }\r\n\r\n div.lze-blocker__error_suggestion {\r\n color: #ccc !important;\r\n font-size: 14px !important;\r\n margin-top: 10px;\r\n }\r\n \r\n @keyframes spin {\r\n 0% { transform: rotate(0deg); }\r\n 100% { transform: rotate(360deg); }\r\n }\r\n `;\r\n\r\n const styleElement = document.createElement('style');\r\n\r\n if (add) {\r\n if (!document.querySelector('.lze-blocker')) {\r\n styleElement.innerHTML = style;\r\n document.head.appendChild(styleElement);\r\n body.insertAdjacentHTML('beforeend', blcokerHtml);\r\n }\r\n } else {\r\n this.removeBlocker(styleElement);\r\n }\r\n\r\n return styleElement;\r\n }\r\n\r\n private removeBlocker(styleElement: HTMLStyleElement | undefined): void {\r\n const blocker = document.querySelector('.lze-blocker');\r\n blocker?.remove();\r\n styleElement?.remove();\r\n }\r\n}\r\n\r\nexport const ApiHelper = new LocalizeApiHelper();","import { Injectable, OnDestroy } from \"@angular/core\";\r\nimport { LocalizeTokenService } from \"./localize.token.service\";\r\nimport { HttpClient, HttpErrorResponse, HttpHeaders } from \"@angular/common/http\";\r\nimport { LocalizeToken, waitFor, waitUntil } from \"./localize.token\";\r\nimport { BehaviorSubject, Subject } from \"rxjs\";\r\nimport { ILocalizeApiConfigs, IApiOptions, EMethod, IHeader } from \"./helpers/interfaces\";\r\nimport { ApiHelper } from \"./public-api\";\r\n\r\nconst SCHEMES = LocalizeToken.httpHeaders;\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocalizeApiService implements OnDestroy {\r\n private readonly destroy$ = new Subject<void>();\r\n private readonly configSubject = new BehaviorSubject<Partial<ILocalizeApiConfigs>>({});\r\n readonly isRequestingSubject = new BehaviorSubject<boolean>(false);\r\n readonly isResolvingStartupSubject = new BehaviorSubject<boolean>(false);\r\n get isResolvingStartup() { return this.isResolvingStartupSubject.value; }\r\n\r\n get needTenant(): boolean { return this.localizeTokenService.config.needTenant; }\r\n\r\n get isRequesting() { return this.isRequestingSubject.value; }\r\n get isRevokingToken() { return this.localizeTokenService.isRevokingToken; }\r\n set isRevokingToken(value: boolean) { this.localizeTokenService.isRevokingToken = value; }\r\n\r\n get accessToken(): string | undefined { return this.localizeTokenService.accessToken; }\r\n set accessToken(value: string | undefined) { this.localizeTokenService.accessToken = value; }\r\n\r\n get refreshToken(): string | undefined { return this.localizeTokenService.refreshToken; }\r\n get tenantToken(): string | undefined { return this.localizeTokenService.tenantToken(this.config.tenantTokenName); }\r\n\r\n private defaultConfig: Partial<ILocalizeApiConfigs> = {\r\n waitEachRequest: { milliseconds: 0 },\r\n enableRequestCancellation: true,\r\n\r\n retryOptions: {\r\n maxRetries: 1000,\r\n delay: 1000,\r\n retryFunction: ApiHelper.defaultRetryFunction.bind(this),\r\n },\r\n\r\n };\r\n\r\n private get config(): Partial<ILocalizeApiConfigs> {\r\n this.validateConfig();\r\n return this.configSubject.value;\r\n }\r\n\r\n private apiOptions: Partial<IApiOptions> = {\r\n method: EMethod.GET,\r\n requestBody: null,\r\n };\r\n\r\n constructor(readonly httpClient: HttpClient,\r\n private readonly localizeTokenService: LocalizeTokenService\r\n ) { }\r\n\r\n /**\r\n * Initialize the API service.\r\n * @param apiConfigs - The API configurations.\r\n */\r\n init(apiConfigs: ILocalizeApiConfigs) {\r\n console.log('LocalizeApiService is initialized.');\r\n this.configSubject.next({ ...this.defaultConfig, ...apiConfigs });\r\n }\r\n\r\n cancelPendingRequests(): void {\r\n this.config.enableRequestCancellation\r\n && this.destroy$.next();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n // this.isResolvingStartupSubject.complete();\r\n // this.isRequestingSubject.complete();\r\n // this.configSubject.complete();\r\n }\r\n\r\n /**\r\n * A higher-order function that returns a curried function for making API requests.\r\n *\r\n * @param baseUrl - The base URL of the API.\r\n * @returns A curried function that can be used to make API requests.\r\n */\r\n func = (baseUrl: string) =>\r\n <T = any>(path: string, method: EMethod = EMethod.GET, reqBody: any = null, reqHeaders?: IHeader) =>\r\n this.request<T>(baseUrl, path, method, reqBody, reqHeaders)\r\n\r\n public async request<T = any>(baseUrl: string,\r\n path: string,\r\n method: EMethod = EMethod.GET,\r\n reqBody: any = null,\r\n reqHeaders?: IHeader): Promise<T> {\r\n\r\n await waitUntil(() => !this.isResolvingStartup, 500);\r\n\r\n await ApiHelper.invokeHook(this.config.onPrepareRequest);\r\n\r\n const apiOptions = this.buildApiOptions(baseUrl, path, method, reqBody, reqHeaders);\r\n\r\n try {\r\n await this.toWaitForPreviousRequest();\r\n\r\n return await ApiHelper.performRequestWithRetry<T>(\r\n apiOptions,\r\n this.config,\r\n this.performRequest.bind(this)\r\n );\r\n\r\n }\r\n catch (error: any) {\r\n return await this.handleOnRequestError(error, apiOptions);\r\n }\r\n }\r\n\r\n private async handleOnRequestError(error: HttpErrorResponse, options: IApiOptions): Promise<any> {\r\n if (error.status !== 401)\r\n throw error;\r\n\r\n await waitUntil(() => !this.isResolvingStartup, 500);\r\n\r\n return await ApiHelper.performRetry({\r\n maxRetries: () => 1000,\r\n delay: 500,\r\n retryUnless: (error) => error.status === 401 || ApiHelper.isConnectionError(error),\r\n callback: async () => {\r\n // Only handle 401 Unauthorized errors\r\n await this.revokeToken();\r\n\r\n // Retry the request with the new access token\r\n return await this.performRequest(options);\r\n }\r\n })\r\n\r\n }\r\n\r\n private async performRequest<T = any>(options: IApiOptions): Promise<T> {\r\n\r\n // Build the request options\r\n const buildOptions = { headers: this.buildHeaderOptions(options) };\r\n\r\n // Create the request observable\r\n const request$ = ApiHelper.createRequest<T>({\r\n client: this.httpClient,\r\n destroy$: () => this.destroy$\r\n }, options.method, options.requestUrl, options.requestBody, buildOptions);\r\n\r\n // Set the isRequesting state to true before making the request\r\n this.isRequestingSubject.next(true);\r\n\r\n const response = await new Promise<any>((resolve, reject) =>\r\n request$.subscribe({ next: (res) => resolve(res.body), error: reject }));\r\n\r\n // Reset the isRequesting state after the request completes\r\n this.isRequestingSubject.next(false);\r\n\r\n return response;\r\n }\r\n\r\n private async revokeToken(): Promise<void> {\r\n\r\n try {\r\n if (await this.interceptRevokeToken())\r\n return;\r\n\r\n this.isRevokingToken = true;\r\n\r\n const apiOptions: IApiOptions = {\r\n ...this.buildApiOptions(this.localizeTokenService.config.revokeTokenUrl),\r\n refreshToken: true,\r\n }\r\n\r\n // const revokeToken = await this.performRequest(apiOptions);\r\n const revokeToken = await ApiHelper.performRequestWithRetry(\r\n apiOptions,\r\n this.config,\r\n this.performRequest.bind(this)\r\n );\r\n\r\n await this.handleOnTokenRevoked(revokeToken);\r\n\r\n } catch (error: any) {\r\n // Handle the error, log it\r\n await ApiHelper.invokeHook(this.config.onAutoLogout);\r\n\r\n } finally {\r\n // Reset the revoking token state\r\n this.isRevokingToken = false;\r\n }\r\n }\r\n\r\n /** default http request options */\r\n private buildHeaderOptions(options: IApiOptions): HttpHeaders {\r\n\r\n const headers: { [key: string]: string } = {\r\n ...(options.refreshToken && { [SCHEMES.X_REFRESH_TOKEN]: `${this.refreshToken}` }),\r\n ...(!options.isFormData && { [SCHEMES.CONTENT_TYPE]: 'application/json' }),\r\n [SCHEMES.AUTHORIZATION]: `Bearer ${this.accessToken}`,\r\n ...(this.needTenant && { [SCHEMES.X_TENANT]: `${this.tenantToken}` })\r\n };\r\n\r\n return new HttpHeaders({ ...headers, ...options.headers });\r\n }\r\n\r\n private buildApiOptions(\r\n baseUrl: string,\r\n path: string = '',\r\n method: EMethod = EMethod.GET,\r\n requestBody: any = null,\r\n headers?: { [key: string]: string }\r\n ): IApiOptions {\r\n\r\n const requestUrl = ApiHelper.buildUrl(baseUrl, path);\r\n const isFormData = requestBody && requestBody instanceof FormData;\r\n return {\r\n ...this.apiOptions,\r\n ...{ headers, method, requestUrl, requestBody, isFormData }\r\n };\r\n }\r\n\r\n\r\n private async toWaitForPreviousRequest() {\r\n this.isRevokingToken &&\r\n (await waitUntil(() => !this.isRevokingToken));\r\n\r\n // to wait for each request in 50ms, even if the request is not completed\r\n this.config.waitEachRequest?.milliseconds &&\r\n (await waitFor(this.config.waitEachRequest.milliseconds, this.isRequesting));\r\n }\r\n\r\n\r\n private async handleOnTokenRevoked(response: any): Promise<void> {\r\n\r\n if (response?.status) {\r\n // If the response is successful, update the access token\r\n this.accessToken = response.message;\r\n\r\n } else {\r\n // If the response indicates an error, invoke the onRevokeUnauthorized hook\r\n console.warn('Token revocation failed, refresh token is expired.', response.message);\r\n await ApiHelper.invokeHook(this.config.onRevokeUnauthorized);\r\n }\r\n\r\n }\r\n\r\n private async interceptRevokeToken() {\r\n\r\n if (this.isRevokingToken) {\r\n console.warn('Token is already being revoked. Waiting for the current operation to complete...');\r\n await waitUntil(() => !this.isRevokingToken);\r\n return true;\r\n }\r\n\r\n if (!this.refreshToken) {\r\n // await ApiHelper.invokeHook(this.apiConfigs.onAutoLogout);\r\n throw new Error('Refresh token is missing. Please login again.');\r\n }\r\n return false;\r\n }\r\n\r\n validateConfig(): void {\r\n const config = this.configSubject.value as ILocalizeApiConfigs;\r\n if (this.localizeTokenService.config.needTenant && !config.tenantTokenName?.trim().length) {\r\n throw Error('Tenant token is required but tenantTokenName is not configured');\r\n }\r\n\r\n if (!this.localizeTokenService.config.revokeTokenUrl.trim().length) {\r\n throw Error('Revoke token URL is not configured - token refresh will not work');\r\n }\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { LocalizeTokenService } from './localize.token.service';\r\nimport { LocalizeApiService } from './localize.api.service';\r\n\r\n@NgModule({\r\n providers: [\r\n LocalizeTokenService,\r\n LocalizeApiService\r\n ]\r\n})\r\nexport class LocalizeTokenModule { }","import { HttpClient } from \"@angular/common/http\";\r\nimport {\r\n ChangeDetectorRef,\r\n Component,\r\n OnInit,\r\n ViewEncapsulation,\r\n} from \"@angular/core\";\r\nimport { MessageService } from \"primeng/api\";\r\nimport { DynamicDialogConfig, DynamicDialogRef } from \"primeng/dynamicdialog\";\r\nimport { JwtPayload, LocalizeTokenService } from \"../localize-token/localize.token.service\";\r\nimport { LocalizeToken } from \"../localize-token/localize.token\";\r\nimport { ILoginDialogConfig, ILoginDialogProperties } from \"./localize-logindlg.service\";\r\nimport { DomSanitizer } from \"@angular/platform-browser\";\r\n\r\n@Component({\r\n styles: [`\r\n #login-dlg-wrap {\r\n width: 100%;\r\n max-width: 400px;\r\n margin: 0 auto;\r\n padding: 30px;\r\n height: 100%;\r\n }\r\n \r\n .login-dlg-elm {\r\n margin-top: 1rem;\r\n }\r\n\r\n .login-dlg-elm.login-dlg-suggest {\r\n display: flex ;\r\n align-items: center;\r\n user-select: none;\r\n border-bottom: solid 1px #ddd;\r\n border-radius: 5px;\r\n padding: 5px 10px;\r\n background: #f9f9f9;\r\n box-shadow: 1px 5px 10px -12px #000;\r\n }\r\n \r\n #login-dlg-header {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n }\r\n \r\n #login-dlg-header h3 {\r\n font-weight: bold;\r\n font-size: 0.9rem;\r\n color: orange;\r\n text-align: center;\r\n }\r\n \r\n #login-logo {\r\n height: 55px;\r\n width: 55px;\r\n /* background: url(\"/assets/images/logo-300px.png\") no-repeat; */\r\n background-size: contain !important;\r\n }\r\n \r\n #login-dlg-content .p-inputgroup {\r\n height: 45px;\r\n }\r\n \r\n #login-dlg-content .p-inputgroup .p-inputgroup-addon {\r\n height: 45px;\r\n border-radius: 15px 0 0 15px;\r\n width: 50px;\r\n }\r\n #login-dlg-content *{\r\n font-size: .9rem;\r\n /* font-family: 'Lexend', 'Roboto', sans-serif, 'material-icons-round'; */\r\n }\r\n \r\n #login-dlg-content .p-inputgroup .p-inputgroup-addon * {\r\n font-size: 1rem;\r\n }\r\n \r\n #login-dlg-content .p-inputgroup input {\r\n height: 45px;\r\n border-radius: 0 15px 15px 0;\r\n }\r\n \r\n #login-dlg-content button {\r\n height: 45px;\r\n border-radius: 15px;\r\n }\r\n \r\n /*check animation block*/\r\n \r\n .check-animation-wrap {\r\n top: 0;\r\n left: 0;\r\n position: absolute;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n width: 100%;\r\n height: calc(100% - 200px);\r\n min-height: 400px;\r\n }\r\n \r\n .check-main-container {\r\n width: 100%;\r\n height: 100vh;\r\n display: flex;\r\n flex-flow: column;\r\n justify-content: center;\r\n align-items: center;\r\n }\r\n \r\n .check-container {\r\n width: 6.25rem;\r\n height: 7.5rem;\r\n display: flex;\r\n flex-flow: column;\r\n align-items: center;\r\n justify-content: space-between;\r\n }\r\n \r\n .check-container .check-background {\r\n width: 100%;\r\n height: calc(100% - 1.25rem);\r\n background: linear-gradient(to bottom right, #5de593, #41d67c);\r\n box-shadow: 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset;\r\n transform: scale(0.84);\r\n border-radius: 50%;\r\n animation: animateContainer 0.75s ease-out forwards 0.75s;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n opacity: 0;\r\n }\r\n \r\n .check-container .check-background svg {\r\n width: 65%;\r\n transform: translateY(0.25rem);\r\n stroke-dasharray: 80;\r\n stroke-dashoffset: 80;\r\n animation: animateCheck 0.35s forwards 1.25s ease-out;\r\n min-width: auto !important;\r\n }\r\n \r\n .check-container .check-shadow {\r\n bottom: calc(-15% - 5px);\r\n left: 0;\r\n border-radius: 50%;\r\n background: radial-gradient(closest-side, rgba(73, 218, 131, 1), transparent);\r\n animation: animateShadow 0.75s ease-out forwards 0.75s;\r\n }\r\n \r\n @keyframes animateContainer {\r\n 0% {\r\n opacity: 0;\r\n transform: scale(0);\r\n box-shadow: 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 25% {\r\n opacity: 1;\r\n transform: scale(0.9);\r\n box-shadow: 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 43.75% {\r\n transform: scale(1.15);\r\n box-shadow: 0px 0px 0px 43.334px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 62.5% {\r\n transform: scale(1);\r\n box-shadow: 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 21.667px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 81.25% {\r\n box-shadow: 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 100% {\r\n opacity: 1;\r\n box-shadow: 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n }\r\n \r\n @keyframes animateCheck {\r\n from {\r\n stroke-dashoffset: 80;\r\n }\r\n \r\n to {\r\n stroke-dashoffset: 0;\r\n }\r\n }\r\n \r\n @keyframes animateShadow {\r\n 0% {\r\n opacity: 0;\r\n width: 100%;\r\n height: 15%;\r\n }\r\n \r\n 25% {\r\n opacity: 0.25;\r\n }\r\n \r\n 43.75% {\r\n width: 40%;\r\n height: 7%;\r\n opacity: 0.35;\r\n }\r\n \r\n 100% {\r\n width: 85%;\r\n height: 15%;\r\n opacity: 0.25;\r\n }\r\n }\r\n #login-dlg-wrap .loader-wrap {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n height:100%;\r\n width:100%;\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n z-index: 100;\r\n background: #ffffff42;\r\n backdrop-filter: blur(1px);\r\n }\r\n\r\n #login-dlg-wrap .login-dlg-loader {\r\n border: 15px solid #e7e7e7;\r\n border-top: 15px solid #52dba1;\r\n border-radius: 50%;\r\n width: 100px;\r\n height: 100px;\r\n animation: spinloader 2s linear infinite;\r\n }\r\n\r\n #login-dlg-wrap .loader-wrap::before {\r\n content: \"\";\r\n position: absolute;\r\n width: 70px;\r\n height: 70px;\r\n transform: translate(-50%, -50%);\r\n z-index: 1;\r\n border: 15px solid #e7e7e700;\r\n border-top: 15px solid #52dba1c9;\r\n border-radius: 50%;\r\n animation: spinloader .75s linear infinite;\r\n }\r\n\r\n @keyframes spinloader {\r\n 0% { transform: rotate(0deg); }\r\n 100% { transform: rotate(360deg); }\r\n }\r\n `],\r\n template: `<p-toast key=\"$login-dlg\" position=\"top-center\"></p-toast>\r\n <div id=\"login-dlg-wrap\">\r\n <div id=\"login-dlg-header\">\r\n <div id=\"login-logo\" class=\"p-mb-2\" style=\"background: url('{{properties.logoImage}}') no-repeat\"></div>\r\n <h3 *ngIf=\"!success\" [innerHTML]=\"sanitizedTitle\"></h3>\r\n <h3 *ngIf=\"success\" style=\"color:green !important;\">{{properties.loginSuccessMessage}}</h3>\r\n </div>\r\n <div id=\"login-dlg-content\">\r\n <ng-container *ngIf=\"!success\">\r\n <div *ngIf=\"loading\" class=\"loader-wrap\">\r\n <div class=\"login-dlg-loader\"></div>\r\n </div>\r\n <div class=\"login-dlg-elm\">\r\n <div class=\"p-inputgroup\">\r\n <span class=\"p-inputgroup-addon\">\r\n <i class=\"material-icons-round\">person</i>\r\n </span>\r\n <input disabled pInputText type=\"text\" placeholder=\"{{properties.username?.placeHolder}}\" [value]=\"decodeToken?.email\" />\r\n </div>\r\n </div>\r\n \r\n <div class=\"login-dlg-elm\">\r\n <div class=\"p-inputgroup\">\r\n <span class=\"p-inputgroup-addon\">\r\n <i class=\"material-icons-round\">lock</i>\r\n </span>\r\n <input [disabled]=\"loading\" (keydown.enter)=\"clickLogin()\" pInputText type=\"password\" \r\n placeholder=\"{{properties.password?.placeHolder}}\" [(ngModel)]=\"password\"\r\n autofocus />\r\n </div>\r\n </div>\r\n <div class=\"login-dlg-elm\">\r\n <button style=\"width: 100%;\" pButton type=\"button\" label=\"{{properties.loginButton?.placeHolder}}\" (click)=\"clickLogin()\"\r\n [disabled]=\"!password || loading\"></button>\r\n </div>\r\n \r\n <div class=\"login-dlg-elm login-dlg-suggest\" style=\"display:flex;align-items: center;user-select: none;\">\r\n <span>{{properties.logoutButton?.message}}</span>\r\n <button class=\"p-button-text\" pButton type=\"button\" label=\"{{properties.logoutButton?.placeHolder}}\" \r\n (click)=\"clickLogout()\"></button>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"success\">\r\n <div style=\"margin-top:35px;\"></div>\r\n <div class=\"check-animation-wrap\">\r\n <div class=\"check-main-container\">\r\n <div class=\"check-container\">\r\n <div class=\"check-background\">\r\n <svg viewBox=\"0 0 65 51\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M7 25L27.3077 44L58.5 7\" stroke=\"white\" stroke-width=\"13\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>`,\r\n selector: \"app-localize-logindlg\",\r\n providers: [MessageService],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class LocalizeLogindlgComponent implements OnInit {\r\n readonly messageKey = \"$login-dlg\";\r\n password: any;\r\n readonly decodeToken: JwtPayload | null;\r\n loading = false;\r\n success = false;\r\n private get config() { return this.tokenService.config; }\r\n private readonly loginConfig: ILoginDialogConfig\r\n\r\n private logout?: () => any\r\n private loginUrl?: string;\r\n readonly properties: ILoginDialogProperties;\r\n\r\n\r\n constructor(\r\n private readonly messageService: MessageService,\r\n private readonly cdt: ChangeDetectorRef,\r\n private readonly dlgRef: DynamicDialogRef,\r\n private readonly dlgConfig: DynamicDialogConfig,\r\n private readonly tokenService: LocalizeTokenService,\r\n private readonly httpClient: HttpClient,\r\n private readonly sanitizer: DomSanitizer\r\n ) {\r\n this.decodeToken = this.tokenService.decodeRefreshToken;\r\n this.loginConfig = this.dlgConfig.data.loginConfig;\r\n this.properties = this.loginConfig.properties!;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.dlgConfig.closable = false;\r\n this.logout = this.loginConfig.logoutFunc;\r\n this.loginUrl = this.loginConfig.loginUrl\r\n\r\n if (!this.decodeToken) {\r\n this.showMessage(\"error\", \"Token is invalid\");\r\n setTimeout(() => this.logout?.(), 2000);\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.cdt.detectChanges();\r\n }\r\n\r\n async clickLogin() {\r\n if (!this.isValidPassword) {\r\n return this.showMessage(\"error\", \"Password is required and must be at least 6 characters\");\r\n }\r\n\r\n this.loading = true;\r\n const loginRes = await this.login();\r\n if (!loginRes?.status) {\r\n return this.showMessage(\"error\", loginRes.message ?? \"An error occurred\");\r\n }\r\n\r\n this.tokenService.accessToken = loginRes.tokens.accessToken;\r\n const cookieOptions = { expires: this.loginConfig.expire ?? 365 }\r\n LocalizeToken.storage.set(this.config.refreshTokenName!, loginRes.tokens.refreshToken, cookieOptions);\r\n this.success = true;\r\n setTimeout(() => {\r\n this.dlgConfig.dismissableMask = true;\r\n this.dlgConfig.modal = false;\r\n this.dlgRef.close(true);\r\n }, 2000);\r\n }\r\n\r\n private async login() {\r\n if (!this.loginUrl?.trim().length) {\r\n this.showMessage(\"error\", \"Login url is required\");\r\n throw new Error(\"Login url is required\");\r\n }\r\n\r\n try {\r\n\r\n if (this.loginConfig.loginFunction) {\r\n console.log(\"Using custom login function\");\r\n return await this.loginConfig.loginFunction(this.decodeToken?.email ?? '', this.password.trim(), this.getHeaders());\r\n }\r\n\r\n return await new Promise<any>((resolve, reject) =>\r\n this.httpClient.post(this.loginUrl!,\r\n { password: this.password.trim() },\r\n { headers: this.getHeaders() }).subscribe({ next: resolve, error: reject }));\r\n\r\n } catch (e: any) {\r\n this.showMessage(\"error\", e.message);\r\n return null;\r\n }\r\n }\r\n\r\n private getHeaders() {\r\n return {\r\n [LocalizeToken.httpHeaders.X_REFRESH_TOKEN]: LocalizeToken.storage.get(this.config.refreshTokenName!) ?? \"\",\r\n [LocalizeToken.httpHeaders.X_TENANT]: LocalizeToken.storage.get(this.loginConfig.tenantTokenName!) ?? \"\",\r\n };\r\n }\r\n\r\n get isValidPassword(): boolean {\r\n this.loading = false;\r\n return this.properties.passwordValidator\r\n ? this.properties.passwordValidator(this.password)\r\n : this.password && this.password.trim().length >= 6 && this.password.trim().length <= 50;\r\n }\r\n\r\n clickLogout = () => this.logout?.();\r\n\r\n private showMessage(severity: string, summary: string) {\r\n this.messageService.add({ key: this.messageKey, severity, summary });\r\n this.loading = false;\r\n }\r\n\r\n get sanitizedTitle() {\r\n return this.sanitizer.bypassSecurityTrustHtml(this.properties.title ?? '');\r\n }\r\n}\r\n","import { Injectable, Injector } from '@angular/core';\nimport { DialogService, DynamicDialogConfig } from 'primeng/dynamicdialog';\nimport { LocalizeLogindlgComponent } from './localize-logindlg.component';\nexport interface ILoginDialogPlaceHolder {\n /**\n * Message to display in the input field, typically used for error messages or hints.\n * This is optional and can be used to provide additional context or instructions to the user.\n */\n message?: string;\n /**\n * Placeholder or label text for the input field\n */\n placeHolder?: string;\n}\n\nexport interface ILoginDialogProperties {\n /**\n * Title of the login dialog\n */\n title?: string;\n loginSuccessMessage?: string;\n /**\n * Logog image path or URL to display in the login dialog\n * If not provided, the \"/assets/images/logo-300px.png\" image will be used.\n */\n logoImage?: string;\n username?: ILoginDialogPlaceHolder;\n password?: ILoginDialogPlaceHolder;\n loginButton?: ILoginDialogPlaceHolder;\n logoutButton?: ILoginDialogPlaceHolder;\n /**\n * Function to validate the password.\n * If not provided, the default validation checks if the password is between 6 and 50 characters long.\n * @param password\n * @returns\n */\n passwordValidator?: (password: string) => boolean;\n}\n\nexport interface ILoginDialogConfig {\n loginUrl?: string;\n logoutUrl?: string;\n loginFunction?: (username: string, password: string, headers?: { [key: string]: string }) => Promise<any>;\n logoutFunc?: () => void;\n /**\n * Cookie expiration date in days from now. If not provided the cookie is a session cookie\n */\n expire?: number;\n tenantTokenName?: string;\n /**\n * Configuration for the login dialog.\n * This interface defines the properties that can be used to customize the login dialog's behavior and appearance\n */\n properties?: ILoginDialogProperties;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LocalizeLogindlgService {\n\n constructor(private readonly injector: Injector) { }\n\n async openLoginDialog(loginConfig: ILoginDialogConfig, config?: DynamicDialogConfig) {\n\n config = this.intercepDialogConfig(config);\n this.initConfig(loginConfig);\n\n config.data = { ...(config.data || {}), ...{ loginConfig } };\n\n const dialogService = this.injector.get(DialogService);\n const dialog = dialogService.open(LocalizeLogindlgComponent, config);\n\n await new Promise<void>((resolve) =>\n dialog.onClose.subscribe(res => {\n if (res) {\n resolve();\n }\n }));\n }\n\n private intercepDialogConfig(config?: DynamicDialogConfig) {\n config ??= {\n header: 'Login',\n style: { 'max-width': '400px', width: '100%', 'height': '650px' },\n modal: true,\n closable: false,\n showHeader: false,\n }\n\n config = {\n ...config, ...{\n contentStyle: { 'height': '100%', 'border-radius': '20px' }\n }\n }\n config.style = { ...config.style, ...{ 'border-radius': '20px' } };\n return config;\n }\n\n\n private initConfig(loginConfig: ILoginDialogConfig) {\n loginConfig ??= {}\n loginConfig.properties ??= {\n title: 'Your session is expired!<br/> Please login again to continue.',\n loginSuccessMessage: 'You have successfully logged in.',\n logoImage: '/assets/images/logo-300px.png',\n username: { placeHolder: 'Username' },\n password: { placeHolder: 'Password' },\n loginButton: { placeHolder: 'Login' },\n logoutButton: {\n message: 'No, I want to login with another user.',\n placeHolder: 'Logout'\n }\n }\n }\n}\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { LocalizeLogindlgComponent } from \"./localize-logindlg.component\";\nimport { ToastModule } from \"primeng/toast\";\nimport { InputTextModule } from \"primeng/inputtext\";\nimport { ButtonModule } from \"primeng/button\";\nimport { BrowserModule } from '@angular/platform-browser';\nimport { FormsModule } from '@angular/forms';\nimport { LocalizeLogindlgService } from \"./localize-logindlg.service\";\n\n@NgModule({\n declarations: [LocalizeLogindlgComponent],\n exports: [LocalizeLogindlgComponent],\n imports: [\n CommonModule,\n ToastModule,\n InputTextModule,\n BrowserModule,\n FormsModule,\n ButtonModule,\n ],\n providers: [LocalizeLogindlgService],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class LocalizeLogindlgModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["BehaviorSubject","jwt_decode","Injectable","EMethod","takeUntil","catchError","throwError","HttpErrorResponse","Subject","HttpHeaders","HttpClient","NgModule","Component","MessageService","ViewEncapsulation","ChangeDetectorRef","DynamicDialogRef","DynamicDialogConfig","DomSanitizer","DialogService","Injector","CommonModule","ToastModule","InputTextModule","BrowserModule","FormsModule","ButtonModule","CUSTOM_ELEMENTS_SCHEMA"],"mappings":"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"}
|
|
@@ -143,10 +143,7 @@ export class LocalizeApiService {
|
|
|
143
143
|
}
|
|
144
144
|
/** default http request options */
|
|
145
145
|
buildHeaderOptions(options) {
|
|
146
|
-
|
|
147
|
-
if (!options.refreshToken) {
|
|
148
|
-
headers = Object.assign(Object.assign(Object.assign({}, headers), { [SCHEMES.AUTHORIZATION]: `Bearer ${this.accessToken}` }), (this.needTenant && { [SCHEMES.X_TENANT]: `${this.tenantToken}` }));
|
|
149
|
-
}
|
|
146
|
+
const headers = Object.assign(Object.assign(Object.assign(Object.assign({}, (options.refreshToken && { [SCHEMES.X_REFRESH_TOKEN]: `${this.refreshToken}` })), (!options.isFormData && { [SCHEMES.CONTENT_TYPE]: 'application/json' })), { [SCHEMES.AUTHORIZATION]: `Bearer ${this.accessToken}` }), (this.needTenant && { [SCHEMES.X_TENANT]: `${this.tenantToken}` }));
|
|
150
147
|
return new HttpHeaders(Object.assign(Object.assign({}, headers), options.headers));
|
|
151
148
|
}
|
|
152
149
|
buildApiOptions(baseUrl, path = '', method = EMethod.GET, requestBody = null, headers) {
|
|
@@ -212,4 +209,4 @@ LocalizeApiService.ctorParameters = () => [
|
|
|
212
209
|
{ type: HttpClient },
|
|
213
210
|
{ type: LocalizeTokenService }
|
|
214
211
|
];
|
|
215
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUuYXBpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbG9jYWxpemUtdG9rZW4vbG9jYWxpemUuYXBpLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFVBQVUsRUFBcUIsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEQsT0FBTyxFQUFvQyxPQUFPLEVBQVcsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDOzs7O0FBRXpDLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUM7QUFLMUMsTUFBTSxPQUFPLGtCQUFrQjtJQXlDN0IsWUFBcUIsVUFBc0IsRUFDeEIsb0JBQTBDO1FBRHhDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDeEIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQXpDNUMsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDL0Isa0JBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBK0IsRUFBRSxDQUFDLENBQUM7UUFDOUUsd0JBQW1CLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDMUQsOEJBQXlCLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFlakUsa0JBQWEsR0FBaUM7WUFDcEQsZUFBZSxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRTtZQUNwQyx5QkFBeUIs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WUFWUSxVQUFVO1lBRFYsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTG9jYWxpemVUb2tlblNlcnZpY2UgfSBmcm9tIFwiLi9sb2NhbGl6ZS50b2tlbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwSGVhZGVycyB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBMb2NhbGl6ZVRva2VuLCB3YWl0Rm9yLCB3YWl0VW50aWwgfSBmcm9tIFwiLi9sb2NhbGl6ZS50b2tlblwiO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBJTG9jYWxpemVBcGlDb25maWdzLCBJQXBpT3B0aW9ucywgRU1ldGhvZCwgSUhlYWRlciB9IGZyb20gXCIuL2hlbHBlcnMvaW50ZXJmYWNlc1wiO1xyXG5pbXBvcnQgeyBBcGlIZWxwZXIgfSBmcm9tIFwiLi9wdWJsaWMtYXBpXCI7XHJcblxyXG5jb25zdCBTQ0hFTUVTID0gTG9jYWxpemVUb2tlbi5odHRwSGVhZGVycztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIExvY2FsaXplQXBpU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQYXJ0aWFsPElMb2NhbGl6ZUFwaUNvbmZpZ3M+Pih7fSk7XHJcbiAgcmVhZG9ubHkgaXNSZXF1ZXN0aW5nU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5IGlzUmVzb2x2aW5nU3RhcnR1cFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBnZXQgaXNSZXNvbHZpbmdTdGFydHVwKCkgeyByZXR1cm4gdGhpcy5pc1Jlc29sdmluZ1N0YXJ0dXBTdWJqZWN0LnZhbHVlOyB9XHJcblxyXG4gIGdldCBuZWVkVGVuYW50KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5sb2NhbGl6ZVRva2VuU2VydmljZS5jb25maWcubmVlZFRlbmFudDsgfVxyXG5cclxuICBnZXQgaXNSZXF1ZXN0aW5nKCkgeyByZXR1cm4gdGhpcy5pc1JlcXVlc3RpbmdTdWJqZWN0LnZhbHVlOyB9XHJcbiAgZ2V0IGlzUmV2b2tpbmdUb2tlbigpIHsgcmV0dXJuIHRoaXMubG9jYWxpemVUb2tlblNlcnZpY2UuaXNSZXZva2luZ1Rva2VuOyB9XHJcbiAgc2V0IGlzUmV2b2tpbmdUb2tlbih2YWx1ZTogYm9vbGVhbikgeyB0aGlzLmxvY2FsaXplVG9rZW5TZXJ2aWNlLmlzUmV2b2tpbmdUb2tlbiA9IHZhbHVlOyB9XHJcblxyXG4gIGdldCBhY2Nlc3NUb2tlbigpOiBzdHJpbmcgfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5sb2NhbGl6ZVRva2VuU2VydmljZS5hY2Nlc3NUb2tlbjsgfVxyXG4gIHNldCBhY2Nlc3NUb2tlbih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7IHRoaXMubG9jYWxpemVUb2tlblNlcnZpY2UuYWNjZXNzVG9rZW4gPSB2YWx1ZTsgfVxyXG5cclxuICBnZXQgcmVmcmVzaFRva2VuKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLmxvY2FsaXplVG9rZW5TZXJ2aWNlLnJlZnJlc2hUb2tlbjsgfVxyXG4gIGdldCB0ZW5hbnRUb2tlbigpOiBzdHJpbmcgfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5sb2NhbGl6ZVRva2VuU2VydmljZS50ZW5hbnRUb2tlbih0aGlzLmNvbmZpZy50ZW5hbnRUb2tlbk5hbWUpOyB9XHJcblxyXG4gIHByaXZhdGUgZGVmYXVsdENvbmZpZzogUGFydGlhbDxJTG9jYWxpemVBcGlDb25maWdzPiA9IHtcclxuICAgIHdhaXRFYWNoUmVxdWVzdDogeyBtaWxsaXNlY29uZHM6IDAgfSxcclxuICAgIGVuYWJsZVJlcXVlc3RDYW5jZWxsYXRpb246IHRydWUsXHJcblxyXG4gICAgcmV0cnlPcHRpb25zOiB7XHJcbiAgICAgIG1heFJldHJpZXM6IDEwMDAsXHJcbiAgICAgIGRlbGF5OiAxMDAwLFxyXG4gICAgICByZXRyeUZ1bmN0aW9uOiBBcGlIZWxwZXIuZGVmYXVsdFJldHJ5RnVuY3Rpb24uYmluZCh0aGlzKSxcclxuICAgIH0sXHJcblxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgZ2V0IGNvbmZpZygpOiBQYXJ0aWFsPElMb2NhbGl6ZUFwaUNvbmZpZ3M+IHtcclxuICAgIHRoaXMudmFsaWRhdGVDb25maWcoKTtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZ1N1YmplY3QudmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwaU9wdGlvbnM6IFBhcnRpYWw8SUFwaU9wdGlvbnM+ID0ge1xyXG4gICAgbWV0aG9kOiBFTWV0aG9kLkdFVCxcclxuICAgIHJlcXVlc3RCb2R5OiBudWxsLFxyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsaXplVG9rZW5TZXJ2aWNlOiBMb2NhbGl6ZVRva2VuU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemUgdGhlIEFQSSBzZXJ2aWNlLlxyXG4gICAqIEBwYXJhbSBhcGlDb25maWdzIC0gVGhlIEFQSSBjb25maWd1cmF0aW9ucy5cclxuICAgKi9cclxuICBpbml0KGFwaUNvbmZpZ3M6IElMb2NhbGl6ZUFwaUNvbmZpZ3MpIHtcclxuICAgIGNvbnNvbGUubG9nKCdMb2NhbGl6ZUFwaVNlcnZpY2UgaXMgaW5pdGlhbGl6ZWQuJyk7XHJcbiAgICB0aGlzLmNvbmZpZ1N1YmplY3QubmV4dCh7IC4uLnRoaXMuZGVmYXVsdENvbmZpZywgLi4uYXBpQ29uZmlncyB9KTtcclxuICB9XHJcblxyXG4gIGNhbmNlbFBlbmRpbmdSZXF1ZXN0cygpOiB2b2lkIHtcclxuICAgIHRoaXMuY29uZmlnLmVuYWJsZVJlcXVlc3RDYW5jZWxsYXRpb25cclxuICAgICAgJiYgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gICAgLy8gdGhpcy5pc1Jlc29sdmluZ1N0YXJ0dXBTdWJqZWN0LmNvbXBsZXRlKCk7XHJcbiAgICAvLyB0aGlzLmlzUmVxdWVzdGluZ1N1YmplY3QuY29tcGxldGUoKTtcclxuICAgIC8vIHRoaXMuY29uZmlnU3ViamVjdC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQSBoaWdoZXItb3JkZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY3VycmllZCBmdW5jdGlvbiBmb3IgbWFraW5nIEFQSSByZXF1ZXN0cy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBiYXNlVXJsIC0gVGhlIGJhc2UgVVJMIG9mIHRoZSBBUEkuXHJcbiAgICogQHJldHVybnMgQSBjdXJyaWVkIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gbWFrZSBBUEkgcmVxdWVzdHMuXHJcbiAgICovXHJcbiAgZnVuYyA9IChiYXNlVXJsOiBzdHJpbmcpID0+XHJcbiAgICA8VCA9IGFueT4ocGF0aDogc3RyaW5nLCBtZXRob2Q6IEVNZXRob2QgPSBFTWV0aG9kLkdFVCwgcmVxQm9keTogYW55ID0gbnVsbCwgcmVxSGVhZGVycz86IElIZWFkZXIpID0+XHJcbiAgICAgIHRoaXMucmVxdWVzdDxUPihiYXNlVXJsLCBwYXRoLCBtZXRob2QsIHJlcUJvZHksIHJlcUhlYWRlcnMpXHJcblxyXG4gIHB1YmxpYyBhc3luYyByZXF1ZXN0PFQgPSBhbnk+KGJhc2VVcmw6IHN0cmluZyxcclxuICAgIHBhdGg6IHN0cmluZyxcclxuICAgIG1ldGhvZDogRU1ldGhvZCA9IEVNZXRob2QuR0VULFxyXG4gICAgcmVxQm9keTogYW55ID0gbnVsbCxcclxuICAgIHJlcUhlYWRlcnM/OiBJSGVhZGVyKTogUHJvbWlzZTxUPiB7XHJcblxyXG4gICAgYXdhaXQgd2FpdFVudGlsKCgpID0+ICF0aGlzLmlzUmVzb2x2aW5nU3RhcnR1cCwgNTAwKTtcclxuXHJcbiAgICBhd2FpdCBBcGlIZWxwZXIuaW52b2tlSG9vayh0aGlzLmNvbmZpZy5vblByZXBhcmVSZXF1ZXN0KTtcclxuXHJcbiAgICBjb25zdCBhcGlPcHRpb25zID0gdGhpcy5idWlsZEFwaU9wdGlvbnMoYmFzZVVybCwgcGF0aCwgbWV0aG9kLCByZXFCb2R5LCByZXFIZWFkZXJzKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCB0aGlzLnRvV2FpdEZvclByZXZpb3VzUmVxdWVzdCgpO1xyXG5cclxuICAgICAgcmV0dXJuIGF3YWl0IEFwaUhlbHBlci5wZXJmb3JtUmVxdWVzdFdpdGhSZXRyeTxUPihcclxuICAgICAgICBhcGlPcHRpb25zLFxyXG4gICAgICAgIHRoaXMuY29uZmlnLFxyXG4gICAgICAgIHRoaXMucGVyZm9ybVJlcXVlc3QuYmluZCh0aGlzKVxyXG4gICAgICApO1xyXG5cclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmhhbmRsZU9uUmVxdWVzdEVycm9yKGVycm9yLCBhcGlPcHRpb25zKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlT25SZXF1ZXN0RXJyb3IoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlLCBvcHRpb25zOiBJQXBpT3B0aW9ucyk6IFByb21pc2U8YW55PiB7XHJcbiAgICBpZiAoZXJyb3Iuc3RhdHVzICE9PSA0MDEpXHJcbiAgICAgIHRocm93IGVycm9yO1xyXG5cclxuICAgIGF3YWl0IHdhaXRVbnRpbCgoKSA9PiAhdGhpcy5pc1Jlc29sdmluZ1N0YXJ0dXAsIDUwMCk7XHJcblxyXG4gICAgcmV0dXJuIGF3YWl0IEFwaUhlbHBlci5wZXJmb3JtUmV0cnkoe1xyXG4gICAgICBtYXhSZXRyaWVzOiAoKSA9PiAxMDAwLFxyXG4gICAgICBkZWxheTogNTAwLFxyXG4gICAgICByZXRyeVVubGVzczogKGVycm9yKSA9PiBlcnJvci5zdGF0dXMgPT09IDQwMSB8fCBBcGlIZWxwZXIuaXNDb25uZWN0aW9uRXJyb3IoZXJyb3IpLFxyXG4gICAgICBjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIC8vIE9ubHkgaGFuZGxlIDQwMSBVbmF1dGhvcml6ZWQgZXJyb3JzXHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZXZva2VUb2tlbigpO1xyXG5cclxuICAgICAgICAvLyBSZXRyeSB0aGUgcmVxdWVzdCB3aXRoIHRoZSBuZXcgYWNjZXNzIHRva2VuXHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucGVyZm9ybVJlcXVlc3Qob3B0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBwZXJmb3JtUmVxdWVzdDxUID0gYW55PihvcHRpb25zOiBJQXBpT3B0aW9ucyk6IFByb21pc2U8VD4ge1xyXG5cclxuICAgIC8vIEJ1aWxkIHRoZSByZXF1ZXN0IG9wdGlvbnNcclxuICAgIGNvbnN0IGJ1aWxkT3B0aW9ucyA9IHsgaGVhZGVyczogdGhpcy5idWlsZEhlYWRlck9wdGlvbnMob3B0aW9ucykgfTtcclxuXHJcbiAgICAvLyBDcmVhdGUgdGhlIHJlcXVlc3Qgb2JzZXJ2YWJsZVxyXG4gICAgY29uc3QgcmVxdWVzdCQgPSBBcGlIZWxwZXIuY3JlYXRlUmVxdWVzdDxUPih7XHJcbiAgICAgIGNsaWVudDogdGhpcy5odHRwQ2xpZW50LFxyXG4gICAgICBkZXN0cm95JDogKCkgPT4gdGhpcy5kZXN0cm95JFxyXG4gICAgfSwgb3B0aW9ucy5tZXRob2QsIG9wdGlvbnMucmVxdWVzdFVybCwgb3B0aW9ucy5yZXF1ZXN0Qm9keSwgYnVpbGRPcHRpb25zKTtcclxuXHJcbiAgICAvLyBTZXQgdGhlIGlzUmVxdWVzdGluZyBzdGF0ZSB0byB0cnVlIGJlZm9yZSBtYWtpbmcgdGhlIHJlcXVlc3RcclxuICAgIHRoaXMuaXNSZXF1ZXN0aW5nU3ViamVjdC5uZXh0KHRydWUpO1xyXG5cclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PlxyXG4gICAgICByZXF1ZXN0JC5zdWJzY3JpYmUoeyBuZXh0OiAocmVzKSA9PiByZXNvbHZlKHJlcy5ib2R5KSwgZXJyb3I6IHJlamVjdCB9KSk7XHJcblxyXG4gICAgLy8gUmVzZXQgdGhlIGlzUmVxdWVzdGluZyBzdGF0ZSBhZnRlciB0aGUgcmVxdWVzdCBjb21wbGV0ZXNcclxuICAgIHRoaXMuaXNSZXF1ZXN0aW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcclxuXHJcbiAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHJldm9rZVRva2VuKCk6IFByb21pc2U8dm9pZD4ge1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChhd2FpdCB0aGlzLmludGVyY2VwdFJldm9rZVRva2VuKCkpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgdGhpcy5pc1Jldm9raW5nVG9rZW4gPSB0cnVlO1xyXG5cclxuICAgICAgY29uc3QgYXBpT3B0aW9uczogSUFwaU9wdGlvbnMgPSB7XHJcbiAgICAgICAgLi4udGhpcy5idWlsZEFwaU9wdGlvbnModGhpcy5sb2NhbGl6ZVRva2VuU2VydmljZS5jb25maWcucmV2b2tlVG9rZW5VcmwpLFxyXG4gICAgICAgIHJlZnJlc2hUb2tlbjogdHJ1ZSxcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gY29uc3QgcmV2b2tlVG9rZW4gPSBhd2FpdCB0aGlzLnBlcmZvcm1SZXF1ZXN0KGFwaU9wdGlvbnMpO1xyXG4gICAgICBjb25zdCByZXZva2VUb2tlbiA9IGF3YWl0IEFwaUhlbHBlci5wZXJmb3JtUmVxdWVzdFdpdGhSZXRyeShcclxuICAgICAgICBhcGlPcHRpb25zLFxyXG4gICAgICAgIHRoaXMuY29uZmlnLFxyXG4gICAgICAgIHRoaXMucGVyZm9ybVJlcXVlc3QuYmluZCh0aGlzKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgYXdhaXQgdGhpcy5oYW5kbGVPblRva2VuUmV2b2tlZChyZXZva2VUb2tlbik7XHJcblxyXG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgICAvLyBIYW5kbGUgdGhlIGVycm9yLCBsb2cgaXRcclxuICAgICAgYXdhaXQgQXBpSGVscGVyLmludm9rZUhvb2sodGhpcy5jb25maWcub25BdXRvTG9nb3V0KTtcclxuXHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICAvLyBSZXNldCB0aGUgcmV2b2tpbmcgdG9rZW4gc3RhdGVcclxuICAgICAgdGhpcy5pc1Jldm9raW5nVG9rZW4gPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBkZWZhdWx0IGh0dHAgcmVxdWVzdCBvcHRpb25zICovXHJcbiAgcHJpdmF0ZSBidWlsZEhlYWRlck9wdGlvbnMob3B0aW9uczogSUFwaU9wdGlvbnMpOiBIdHRwSGVhZGVycyB7XHJcblxyXG4gICAgbGV0IGhlYWRlcnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XHJcbiAgICAgIC4uLihvcHRpb25zLnJlZnJlc2hUb2tlbiAmJiB7IFtTQ0hFTUVTLlhfUkVGUkVTSF9UT0tFTl06IGAke3RoaXMucmVmcmVzaFRva2VufWAgfSksXHJcbiAgICAgIC4uLighb3B0aW9ucy5pc0Zvcm1EYXRhICYmIHsgW1NDSEVNRVMuQ09OVEVOVF9UWVBFXTogJ2FwcGxpY2F0aW9uL2pzb24nIH0pXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICghb3B0aW9ucy5yZWZyZXNoVG9rZW4pIHtcclxuICAgICAgaGVhZGVycyA9IHtcclxuICAgICAgICAuLi5oZWFkZXJzLFxyXG4gICAgICAgIFtTQ0hFTUVTLkFVVEhPUklaQVRJT05dOiBgQmVhcmVyICR7dGhpcy5hY2Nlc3NUb2tlbn1gLFxyXG4gICAgICAgIC4uLih0aGlzLm5lZWRUZW5hbnQgJiYgeyBbU0NIRU1FUy5YX1RFTkFOVF06IGAke3RoaXMudGVuYW50VG9rZW59YCB9KVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXcgSHR0cEhlYWRlcnMoeyAuLi5oZWFkZXJzLCAuLi5vcHRpb25zLmhlYWRlcnMgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkQXBpT3B0aW9ucyhcclxuICAgIGJhc2VVcmw6IHN0cmluZyxcclxuICAgIHBhdGg6IHN0cmluZyA9ICcnLFxyXG4gICAgbWV0aG9kOiBFTWV0aG9kID0gRU1ldGhvZC5HRVQsXHJcbiAgICByZXF1ZXN0Qm9keTogYW55ID0gbnVsbCxcclxuICAgIGhlYWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XHJcbiAgKTogSUFwaU9wdGlvbnMge1xyXG5cclxuICAgIGNvbnN0IHJlcXVlc3RVcmwgPSBBcGlIZWxwZXIuYnVpbGRVcmwoYmFzZVVybCwgcGF0aCk7XHJcbiAgICBjb25zdCBpc0Zvcm1EYXRhID0gcmVxdWVzdEJvZHkgJiYgcmVxdWVzdEJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLnRoaXMuYXBpT3B0aW9ucyxcclxuICAgICAgLi4ueyBoZWFkZXJzLCBtZXRob2QsIHJlcXVlc3RVcmwsIHJlcXVlc3RCb2R5LCBpc0Zvcm1EYXRhIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyB0b1dhaXRGb3JQcmV2aW91c1JlcXVlc3QoKSB7XHJcbiAgICB0aGlzLmlzUmV2b2tpbmdUb2tlbiAmJlxyXG4gICAgICAoYXdhaXQgd2FpdFVudGlsKCgpID0+ICF0aGlzLmlzUmV2b2tpbmdUb2tlbikpO1xyXG5cclxuICAgIC8vIHRvIHdhaXQgZm9yIGVhY2ggcmVxdWVzdCBpbiA1MG1zLCBldmVuIGlmIHRoZSByZXF1ZXN0IGlzIG5vdCBjb21wbGV0ZWRcclxuICAgIHRoaXMuY29uZmlnLndhaXRFYWNoUmVxdWVzdD8ubWlsbGlzZWNvbmRzICYmXHJcbiAgICAgIChhd2FpdCB3YWl0Rm9yKHRoaXMuY29uZmlnLndhaXRFYWNoUmVxdWVzdC5taWxsaXNlY29uZHMsIHRoaXMuaXNSZXF1ZXN0aW5nKSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVPblRva2VuUmV2b2tlZChyZXNwb25zZTogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcblxyXG4gICAgaWYgKHJlc3BvbnNlPy5zdGF0dXMpIHtcclxuICAgICAgLy8gSWYgdGhlIHJlc3BvbnNlIGlzIHN1Y2Nlc3NmdWwsIHVwZGF0ZSB0aGUgYWNjZXNzIHRva2VuXHJcbiAgICAgIHRoaXMuYWNjZXNzVG9rZW4gPSByZXNwb25zZS5tZXNzYWdlO1xyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIElmIHRoZSByZXNwb25zZSBpbmRpY2F0ZXMgYW4gZXJyb3IsIGludm9rZSB0aGUgb25SZXZva2VVbmF1dGhvcml6ZWQgaG9va1xyXG4gICAgICBjb25zb2xlLndhcm4oJ1Rva2VuIHJldm9jYXRpb24gZmFpbGVkLCByZWZyZXNoIHRva2VuIGlzIGV4cGlyZWQuJywgcmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgIGF3YWl0IEFwaUhlbHBlci5pbnZva2VIb29rKHRoaXMuY29uZmlnLm9uUmV2b2tlVW5hdXRob3JpemVkKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGludGVyY2VwdFJldm9rZVRva2VuKCkge1xyXG5cclxuICAgIGlmICh0aGlzLmlzUmV2b2tpbmdUb2tlbikge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ1Rva2VuIGlzIGFscmVhZHkgYmVpbmcgcmV2b2tlZC4gV2FpdGluZyBmb3IgdGhlIGN1cnJlbnQgb3BlcmF0aW9uIHRvIGNvbXBsZXRlLi4uJyk7XHJcbiAgICAgIGF3YWl0IHdhaXRVbnRpbCgoKSA9PiAhdGhpcy5pc1Jldm9raW5nVG9rZW4pO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMucmVmcmVzaFRva2VuKSB7XHJcbiAgICAgIC8vIGF3YWl0IEFwaUhlbHBlci5pbnZva2VIb29rKHRoaXMuYXBpQ29uZmlncy5vbkF1dG9Mb2dvdXQpO1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZnJlc2ggdG9rZW4gaXMgbWlzc2luZy4gUGxlYXNlIGxvZ2luIGFnYWluLicpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVDb25maWcoKTogdm9pZCB7XHJcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ1N1YmplY3QudmFsdWUgYXMgSUxvY2FsaXplQXBpQ29uZmlncztcclxuICAgIGlmICh0aGlzLmxvY2FsaXplVG9rZW5TZXJ2aWNlLmNvbmZpZy5uZWVkVGVuYW50ICYmICFjb25maWcudGVuYW50VG9rZW5OYW1lPy50cmltKCkubGVuZ3RoKSB7XHJcbiAgICAgIHRocm93IEVycm9yKCdUZW5hbnQgdG9rZW4gaXMgcmVxdWlyZWQgYnV0IHRlbmFudFRva2VuTmFtZSBpcyBub3QgY29uZmlndXJlZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5sb2NhbGl6ZVRva2VuU2VydmljZS5jb25maWcucmV2b2tlVG9rZW5VcmwudHJpbSgpLmxlbmd0aCkge1xyXG4gICAgICB0aHJvdyBFcnJvcignUmV2b2tlIHRva2VuIFVSTCBpcyBub3QgY29uZmlndXJlZCAtIHRva2VuIHJlZnJlc2ggd2lsbCBub3Qgd29yaycpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIl19
|
|
212
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUuYXBpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbG9jYWxpemUtdG9rZW4vbG9jYWxpemUuYXBpLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFVBQVUsRUFBcUIsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEQsT0FBTyxFQUFvQyxPQUFPLEVBQVcsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDOzs7O0FBRXpDLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUM7QUFLMUMsTUFBTSxPQUFPLGtCQUFrQjtJQXlDN0IsWUFBcUIsVUFBc0IsRUFDeEIsb0JBQTBDO1FBRHhDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDeEIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQXpDNUMsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDL0Isa0JBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBK0IsRUFBRSxDQUFDLENBQUM7UUFDOUUsd0JBQW1CLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDMUQsOEJBQXlCLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFlakUsa0JBQWEsR0FBaUM7WUFDcEQsZUFBZSxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRTtZQUNwQyx5QkFBeUIs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IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTG9jYWxpemVUb2tlblNlcnZpY2UgfSBmcm9tIFwiLi9sb2NhbGl6ZS50b2tlbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwSGVhZGVycyB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBMb2NhbGl6ZVRva2VuLCB3YWl0Rm9yLCB3YWl0VW50aWwgfSBmcm9tIFwiLi9sb2NhbGl6ZS50b2tlblwiO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBJTG9jYWxpemVBcGlDb25maWdzLCBJQXBpT3B0aW9ucywgRU1ldGhvZCwgSUhlYWRlciB9IGZyb20gXCIuL2hlbHBlcnMvaW50ZXJmYWNlc1wiO1xyXG5pbXBvcnQgeyBBcGlIZWxwZXIgfSBmcm9tIFwiLi9wdWJsaWMtYXBpXCI7XHJcblxyXG5jb25zdCBTQ0hFTUVTID0gTG9jYWxpemVUb2tlbi5odHRwSGVhZGVycztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIExvY2FsaXplQXBpU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQYXJ0aWFsPElMb2NhbGl6ZUFwaUNvbmZpZ3M+Pih7fSk7XHJcbiAgcmVhZG9ubHkgaXNSZXF1ZXN0aW5nU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5IGlzUmVzb2x2aW5nU3RhcnR1cFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBnZXQgaXNSZXNvbHZpbmdTdGFydHVwKCkgeyByZXR1cm4gdGhpcy5pc1Jlc29sdmluZ1N0YXJ0dXBTdWJqZWN0LnZhbHVlOyB9XHJcblxyXG4gIGdldCBuZWVkVGVuYW50KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5sb2NhbGl6ZVRva2VuU2VydmljZS5jb25maWcubmVlZFRlbmFudDsgfVxyXG5cclxuICBnZXQgaXNSZXF1ZXN0aW5nKCkgeyByZXR1cm4gdGhpcy5pc1JlcXVlc3RpbmdTdWJqZWN0LnZhbHVlOyB9XHJcbiAgZ2V0IGlzUmV2b2tpbmdUb2tlbigpIHsgcmV0dXJuIHRoaXMubG9jYWxpemVUb2tlblNlcnZpY2UuaXNSZXZva2luZ1Rva2VuOyB9XHJcbiAgc2V0IGlzUmV2b2tpbmdUb2tlbih2YWx1ZTogYm9vbGVhbikgeyB0aGlzLmxvY2FsaXplVG9rZW5TZXJ2aWNlLmlzUmV2b2tpbmdUb2tlbiA9IHZhbHVlOyB9XHJcblxyXG4gIGdldCBhY2Nlc3NUb2tlbigpOiBzdHJpbmcgfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5sb2NhbGl6ZVRva2VuU2VydmljZS5hY2Nlc3NUb2tlbjsgfVxyXG4gIHNldCBhY2Nlc3NUb2tlbih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7IHRoaXMubG9jYWxpemVUb2tlblNlcnZpY2UuYWNjZXNzVG9rZW4gPSB2YWx1ZTsgfVxyXG5cclxuICBnZXQgcmVmcmVzaFRva2VuKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLmxvY2FsaXplVG9rZW5TZXJ2aWNlLnJlZnJlc2hUb2tlbjsgfVxyXG4gIGdldCB0ZW5hbnRUb2tlbigpOiBzdHJpbmcgfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5sb2NhbGl6ZVRva2VuU2VydmljZS50ZW5hbnRUb2tlbih0aGlzLmNvbmZpZy50ZW5hbnRUb2tlbk5hbWUpOyB9XHJcblxyXG4gIHByaXZhdGUgZGVmYXVsdENvbmZpZzogUGFydGlhbDxJTG9jYWxpemVBcGlDb25maWdzPiA9IHtcclxuICAgIHdhaXRFYWNoUmVxdWVzdDogeyBtaWxsaXNlY29uZHM6IDAgfSxcclxuICAgIGVuYWJsZVJlcXVlc3RDYW5jZWxsYXRpb246IHRydWUsXHJcblxyXG4gICAgcmV0cnlPcHRpb25zOiB7XHJcbiAgICAgIG1heFJldHJpZXM6IDEwMDAsXHJcbiAgICAgIGRlbGF5OiAxMDAwLFxyXG4gICAgICByZXRyeUZ1bmN0aW9uOiBBcGlIZWxwZXIuZGVmYXVsdFJldHJ5RnVuY3Rpb24uYmluZCh0aGlzKSxcclxuICAgIH0sXHJcblxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgZ2V0IGNvbmZpZygpOiBQYXJ0aWFsPElMb2NhbGl6ZUFwaUNvbmZpZ3M+IHtcclxuICAgIHRoaXMudmFsaWRhdGVDb25maWcoKTtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZ1N1YmplY3QudmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwaU9wdGlvbnM6IFBhcnRpYWw8SUFwaU9wdGlvbnM+ID0ge1xyXG4gICAgbWV0aG9kOiBFTWV0aG9kLkdFVCxcclxuICAgIHJlcXVlc3RCb2R5OiBudWxsLFxyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsaXplVG9rZW5TZXJ2aWNlOiBMb2NhbGl6ZVRva2VuU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemUgdGhlIEFQSSBzZXJ2aWNlLlxyXG4gICAqIEBwYXJhbSBhcGlDb25maWdzIC0gVGhlIEFQSSBjb25maWd1cmF0aW9ucy5cclxuICAgKi9cclxuICBpbml0KGFwaUNvbmZpZ3M6IElMb2NhbGl6ZUFwaUNvbmZpZ3MpIHtcclxuICAgIGNvbnNvbGUubG9nKCdMb2NhbGl6ZUFwaVNlcnZpY2UgaXMgaW5pdGlhbGl6ZWQuJyk7XHJcbiAgICB0aGlzLmNvbmZpZ1N1YmplY3QubmV4dCh7IC4uLnRoaXMuZGVmYXVsdENvbmZpZywgLi4uYXBpQ29uZmlncyB9KTtcclxuICB9XHJcblxyXG4gIGNhbmNlbFBlbmRpbmdSZXF1ZXN0cygpOiB2b2lkIHtcclxuICAgIHRoaXMuY29uZmlnLmVuYWJsZVJlcXVlc3RDYW5jZWxsYXRpb25cclxuICAgICAgJiYgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gICAgLy8gdGhpcy5pc1Jlc29sdmluZ1N0YXJ0dXBTdWJqZWN0LmNvbXBsZXRlKCk7XHJcbiAgICAvLyB0aGlzLmlzUmVxdWVzdGluZ1N1YmplY3QuY29tcGxldGUoKTtcclxuICAgIC8vIHRoaXMuY29uZmlnU3ViamVjdC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQSBoaWdoZXItb3JkZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY3VycmllZCBmdW5jdGlvbiBmb3IgbWFraW5nIEFQSSByZXF1ZXN0cy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBiYXNlVXJsIC0gVGhlIGJhc2UgVVJMIG9mIHRoZSBBUEkuXHJcbiAgICogQHJldHVybnMgQSBjdXJyaWVkIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gbWFrZSBBUEkgcmVxdWVzdHMuXHJcbiAgICovXHJcbiAgZnVuYyA9IChiYXNlVXJsOiBzdHJpbmcpID0+XHJcbiAgICA8VCA9IGFueT4ocGF0aDogc3RyaW5nLCBtZXRob2Q6IEVNZXRob2QgPSBFTWV0aG9kLkdFVCwgcmVxQm9keTogYW55ID0gbnVsbCwgcmVxSGVhZGVycz86IElIZWFkZXIpID0+XHJcbiAgICAgIHRoaXMucmVxdWVzdDxUPihiYXNlVXJsLCBwYXRoLCBtZXRob2QsIHJlcUJvZHksIHJlcUhlYWRlcnMpXHJcblxyXG4gIHB1YmxpYyBhc3luYyByZXF1ZXN0PFQgPSBhbnk+KGJhc2VVcmw6IHN0cmluZyxcclxuICAgIHBhdGg6IHN0cmluZyxcclxuICAgIG1ldGhvZDogRU1ldGhvZCA9IEVNZXRob2QuR0VULFxyXG4gICAgcmVxQm9keTogYW55ID0gbnVsbCxcclxuICAgIHJlcUhlYWRlcnM/OiBJSGVhZGVyKTogUHJvbWlzZTxUPiB7XHJcblxyXG4gICAgYXdhaXQgd2FpdFVudGlsKCgpID0+ICF0aGlzLmlzUmVzb2x2aW5nU3RhcnR1cCwgNTAwKTtcclxuXHJcbiAgICBhd2FpdCBBcGlIZWxwZXIuaW52b2tlSG9vayh0aGlzLmNvbmZpZy5vblByZXBhcmVSZXF1ZXN0KTtcclxuXHJcbiAgICBjb25zdCBhcGlPcHRpb25zID0gdGhpcy5idWlsZEFwaU9wdGlvbnMoYmFzZVVybCwgcGF0aCwgbWV0aG9kLCByZXFCb2R5LCByZXFIZWFkZXJzKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCB0aGlzLnRvV2FpdEZvclByZXZpb3VzUmVxdWVzdCgpO1xyXG5cclxuICAgICAgcmV0dXJuIGF3YWl0IEFwaUhlbHBlci5wZXJmb3JtUmVxdWVzdFdpdGhSZXRyeTxUPihcclxuICAgICAgICBhcGlPcHRpb25zLFxyXG4gICAgICAgIHRoaXMuY29uZmlnLFxyXG4gICAgICAgIHRoaXMucGVyZm9ybVJlcXVlc3QuYmluZCh0aGlzKVxyXG4gICAgICApO1xyXG5cclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmhhbmRsZU9uUmVxdWVzdEVycm9yKGVycm9yLCBhcGlPcHRpb25zKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlT25SZXF1ZXN0RXJyb3IoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlLCBvcHRpb25zOiBJQXBpT3B0aW9ucyk6IFByb21pc2U8YW55PiB7XHJcbiAgICBpZiAoZXJyb3Iuc3RhdHVzICE9PSA0MDEpXHJcbiAgICAgIHRocm93IGVycm9yO1xyXG5cclxuICAgIGF3YWl0IHdhaXRVbnRpbCgoKSA9PiAhdGhpcy5pc1Jlc29sdmluZ1N0YXJ0dXAsIDUwMCk7XHJcblxyXG4gICAgcmV0dXJuIGF3YWl0IEFwaUhlbHBlci5wZXJmb3JtUmV0cnkoe1xyXG4gICAgICBtYXhSZXRyaWVzOiAoKSA9PiAxMDAwLFxyXG4gICAgICBkZWxheTogNTAwLFxyXG4gICAgICByZXRyeVVubGVzczogKGVycm9yKSA9PiBlcnJvci5zdGF0dXMgPT09IDQwMSB8fCBBcGlIZWxwZXIuaXNDb25uZWN0aW9uRXJyb3IoZXJyb3IpLFxyXG4gICAgICBjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIC8vIE9ubHkgaGFuZGxlIDQwMSBVbmF1dGhvcml6ZWQgZXJyb3JzXHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZXZva2VUb2tlbigpO1xyXG5cclxuICAgICAgICAvLyBSZXRyeSB0aGUgcmVxdWVzdCB3aXRoIHRoZSBuZXcgYWNjZXNzIHRva2VuXHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucGVyZm9ybVJlcXVlc3Qob3B0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBwZXJmb3JtUmVxdWVzdDxUID0gYW55PihvcHRpb25zOiBJQXBpT3B0aW9ucyk6IFByb21pc2U8VD4ge1xyXG5cclxuICAgIC8vIEJ1aWxkIHRoZSByZXF1ZXN0IG9wdGlvbnNcclxuICAgIGNvbnN0IGJ1aWxkT3B0aW9ucyA9IHsgaGVhZGVyczogdGhpcy5idWlsZEhlYWRlck9wdGlvbnMob3B0aW9ucykgfTtcclxuXHJcbiAgICAvLyBDcmVhdGUgdGhlIHJlcXVlc3Qgb2JzZXJ2YWJsZVxyXG4gICAgY29uc3QgcmVxdWVzdCQgPSBBcGlIZWxwZXIuY3JlYXRlUmVxdWVzdDxUPih7XHJcbiAgICAgIGNsaWVudDogdGhpcy5odHRwQ2xpZW50LFxyXG4gICAgICBkZXN0cm95JDogKCkgPT4gdGhpcy5kZXN0cm95JFxyXG4gICAgfSwgb3B0aW9ucy5tZXRob2QsIG9wdGlvbnMucmVxdWVzdFVybCwgb3B0aW9ucy5yZXF1ZXN0Qm9keSwgYnVpbGRPcHRpb25zKTtcclxuXHJcbiAgICAvLyBTZXQgdGhlIGlzUmVxdWVzdGluZyBzdGF0ZSB0byB0cnVlIGJlZm9yZSBtYWtpbmcgdGhlIHJlcXVlc3RcclxuICAgIHRoaXMuaXNSZXF1ZXN0aW5nU3ViamVjdC5uZXh0KHRydWUpO1xyXG5cclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PlxyXG4gICAgICByZXF1ZXN0JC5zdWJzY3JpYmUoeyBuZXh0OiAocmVzKSA9PiByZXNvbHZlKHJlcy5ib2R5KSwgZXJyb3I6IHJlamVjdCB9KSk7XHJcblxyXG4gICAgLy8gUmVzZXQgdGhlIGlzUmVxdWVzdGluZyBzdGF0ZSBhZnRlciB0aGUgcmVxdWVzdCBjb21wbGV0ZXNcclxuICAgIHRoaXMuaXNSZXF1ZXN0aW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcclxuXHJcbiAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHJldm9rZVRva2VuKCk6IFByb21pc2U8dm9pZD4ge1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChhd2FpdCB0aGlzLmludGVyY2VwdFJldm9rZVRva2VuKCkpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgdGhpcy5pc1Jldm9raW5nVG9rZW4gPSB0cnVlO1xyXG5cclxuICAgICAgY29uc3QgYXBpT3B0aW9uczogSUFwaU9wdGlvbnMgPSB7XHJcbiAgICAgICAgLi4udGhpcy5idWlsZEFwaU9wdGlvbnModGhpcy5sb2NhbGl6ZVRva2VuU2VydmljZS5jb25maWcucmV2b2tlVG9rZW5VcmwpLFxyXG4gICAgICAgIHJlZnJlc2hUb2tlbjogdHJ1ZSxcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gY29uc3QgcmV2b2tlVG9rZW4gPSBhd2FpdCB0aGlzLnBlcmZvcm1SZXF1ZXN0KGFwaU9wdGlvbnMpO1xyXG4gICAgICBjb25zdCByZXZva2VUb2tlbiA9IGF3YWl0IEFwaUhlbHBlci5wZXJmb3JtUmVxdWVzdFdpdGhSZXRyeShcclxuICAgICAgICBhcGlPcHRpb25zLFxyXG4gICAgICAgIHRoaXMuY29uZmlnLFxyXG4gICAgICAgIHRoaXMucGVyZm9ybVJlcXVlc3QuYmluZCh0aGlzKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgYXdhaXQgdGhpcy5oYW5kbGVPblRva2VuUmV2b2tlZChyZXZva2VUb2tlbik7XHJcblxyXG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgICAvLyBIYW5kbGUgdGhlIGVycm9yLCBsb2cgaXRcclxuICAgICAgYXdhaXQgQXBpSGVscGVyLmludm9rZUhvb2sodGhpcy5jb25maWcub25BdXRvTG9nb3V0KTtcclxuXHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICAvLyBSZXNldCB0aGUgcmV2b2tpbmcgdG9rZW4gc3RhdGVcclxuICAgICAgdGhpcy5pc1Jldm9raW5nVG9rZW4gPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBkZWZhdWx0IGh0dHAgcmVxdWVzdCBvcHRpb25zICovXHJcbiAgcHJpdmF0ZSBidWlsZEhlYWRlck9wdGlvbnMob3B0aW9uczogSUFwaU9wdGlvbnMpOiBIdHRwSGVhZGVycyB7XHJcblxyXG4gICAgY29uc3QgaGVhZGVyczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcclxuICAgICAgLi4uKG9wdGlvbnMucmVmcmVzaFRva2VuICYmIHsgW1NDSEVNRVMuWF9SRUZSRVNIX1RPS0VOXTogYCR7dGhpcy5yZWZyZXNoVG9rZW59YCB9KSxcclxuICAgICAgLi4uKCFvcHRpb25zLmlzRm9ybURhdGEgJiYgeyBbU0NIRU1FUy5DT05URU5UX1RZUEVdOiAnYXBwbGljYXRpb24vanNvbicgfSksXHJcbiAgICAgICAgW1NDSEVNRVMuQVVUSE9SSVpBVElPTl06IGBCZWFyZXIgJHt0aGlzLmFjY2Vzc1Rva2VufWAsXHJcbiAgICAgICAgLi4uKHRoaXMubmVlZFRlbmFudCAmJiB7IFtTQ0hFTUVTLlhfVEVOQU5UXTogYCR7dGhpcy50ZW5hbnRUb2tlbn1gIH0pXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBuZXcgSHR0cEhlYWRlcnMoeyAuLi5oZWFkZXJzLCAuLi5vcHRpb25zLmhlYWRlcnMgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkQXBpT3B0aW9ucyhcclxuICAgIGJhc2VVcmw6IHN0cmluZyxcclxuICAgIHBhdGg6IHN0cmluZyA9ICcnLFxyXG4gICAgbWV0aG9kOiBFTWV0aG9kID0gRU1ldGhvZC5HRVQsXHJcbiAgICByZXF1ZXN0Qm9keTogYW55ID0gbnVsbCxcclxuICAgIGhlYWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XHJcbiAgKTogSUFwaU9wdGlvbnMge1xyXG5cclxuICAgIGNvbnN0IHJlcXVlc3RVcmwgPSBBcGlIZWxwZXIuYnVpbGRVcmwoYmFzZVVybCwgcGF0aCk7XHJcbiAgICBjb25zdCBpc0Zvcm1EYXRhID0gcmVxdWVzdEJvZHkgJiYgcmVxdWVzdEJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLnRoaXMuYXBpT3B0aW9ucyxcclxuICAgICAgLi4ueyBoZWFkZXJzLCBtZXRob2QsIHJlcXVlc3RVcmwsIHJlcXVlc3RCb2R5LCBpc0Zvcm1EYXRhIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyB0b1dhaXRGb3JQcmV2aW91c1JlcXVlc3QoKSB7XHJcbiAgICB0aGlzLmlzUmV2b2tpbmdUb2tlbiAmJlxyXG4gICAgICAoYXdhaXQgd2FpdFVudGlsKCgpID0+ICF0aGlzLmlzUmV2b2tpbmdUb2tlbikpO1xyXG5cclxuICAgIC8vIHRvIHdhaXQgZm9yIGVhY2ggcmVxdWVzdCBpbiA1MG1zLCBldmVuIGlmIHRoZSByZXF1ZXN0IGlzIG5vdCBjb21wbGV0ZWRcclxuICAgIHRoaXMuY29uZmlnLndhaXRFYWNoUmVxdWVzdD8ubWlsbGlzZWNvbmRzICYmXHJcbiAgICAgIChhd2FpdCB3YWl0Rm9yKHRoaXMuY29uZmlnLndhaXRFYWNoUmVxdWVzdC5taWxsaXNlY29uZHMsIHRoaXMuaXNSZXF1ZXN0aW5nKSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVPblRva2VuUmV2b2tlZChyZXNwb25zZTogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcblxyXG4gICAgaWYgKHJlc3BvbnNlPy5zdGF0dXMpIHtcclxuICAgICAgLy8gSWYgdGhlIHJlc3BvbnNlIGlzIHN1Y2Nlc3NmdWwsIHVwZGF0ZSB0aGUgYWNjZXNzIHRva2VuXHJcbiAgICAgIHRoaXMuYWNjZXNzVG9rZW4gPSByZXNwb25zZS5tZXNzYWdlO1xyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIElmIHRoZSByZXNwb25zZSBpbmRpY2F0ZXMgYW4gZXJyb3IsIGludm9rZSB0aGUgb25SZXZva2VVbmF1dGhvcml6ZWQgaG9va1xyXG4gICAgICBjb25zb2xlLndhcm4oJ1Rva2VuIHJldm9jYXRpb24gZmFpbGVkLCByZWZyZXNoIHRva2VuIGlzIGV4cGlyZWQuJywgcmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgIGF3YWl0IEFwaUhlbHBlci5pbnZva2VIb29rKHRoaXMuY29uZmlnLm9uUmV2b2tlVW5hdXRob3JpemVkKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGludGVyY2VwdFJldm9rZVRva2VuKCkge1xyXG5cclxuICAgIGlmICh0aGlzLmlzUmV2b2tpbmdUb2tlbikge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ1Rva2VuIGlzIGFscmVhZHkgYmVpbmcgcmV2b2tlZC4gV2FpdGluZyBmb3IgdGhlIGN1cnJlbnQgb3BlcmF0aW9uIHRvIGNvbXBsZXRlLi4uJyk7XHJcbiAgICAgIGF3YWl0IHdhaXRVbnRpbCgoKSA9PiAhdGhpcy5pc1Jldm9raW5nVG9rZW4pO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMucmVmcmVzaFRva2VuKSB7XHJcbiAgICAgIC8vIGF3YWl0IEFwaUhlbHBlci5pbnZva2VIb29rKHRoaXMuYXBpQ29uZmlncy5vbkF1dG9Mb2dvdXQpO1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZnJlc2ggdG9rZW4gaXMgbWlzc2luZy4gUGxlYXNlIGxvZ2luIGFnYWluLicpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVDb25maWcoKTogdm9pZCB7XHJcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ1N1YmplY3QudmFsdWUgYXMgSUxvY2FsaXplQXBpQ29uZmlncztcclxuICAgIGlmICh0aGlzLmxvY2FsaXplVG9rZW5TZXJ2aWNlLmNvbmZpZy5uZWVkVGVuYW50ICYmICFjb25maWcudGVuYW50VG9rZW5OYW1lPy50cmltKCkubGVuZ3RoKSB7XHJcbiAgICAgIHRocm93IEVycm9yKCdUZW5hbnQgdG9rZW4gaXMgcmVxdWlyZWQgYnV0IHRlbmFudFRva2VuTmFtZSBpcyBub3QgY29uZmlndXJlZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5sb2NhbGl6ZVRva2VuU2VydmljZS5jb25maWcucmV2b2tlVG9rZW5VcmwudHJpbSgpLmxlbmd0aCkge1xyXG4gICAgICB0aHJvdyBFcnJvcignUmV2b2tlIHRva2VuIFVSTCBpcyBub3QgY29uZmlndXJlZCAtIHRva2VuIHJlZnJlc2ggd2lsbCBub3Qgd29yaycpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIl19
|
|
@@ -666,10 +666,7 @@ class LocalizeApiService {
|
|
|
666
666
|
}
|
|
667
667
|
/** default http request options */
|
|
668
668
|
buildHeaderOptions(options) {
|
|
669
|
-
|
|
670
|
-
if (!options.refreshToken) {
|
|
671
|
-
headers = Object.assign(Object.assign(Object.assign({}, headers), { [SCHEMES.AUTHORIZATION]: `Bearer ${this.accessToken}` }), (this.needTenant && { [SCHEMES.X_TENANT]: `${this.tenantToken}` }));
|
|
672
|
-
}
|
|
669
|
+
const headers = Object.assign(Object.assign(Object.assign(Object.assign({}, (options.refreshToken && { [SCHEMES.X_REFRESH_TOKEN]: `${this.refreshToken}` })), (!options.isFormData && { [SCHEMES.CONTENT_TYPE]: 'application/json' })), { [SCHEMES.AUTHORIZATION]: `Bearer ${this.accessToken}` }), (this.needTenant && { [SCHEMES.X_TENANT]: `${this.tenantToken}` }));
|
|
673
670
|
return new HttpHeaders(Object.assign(Object.assign({}, headers), options.headers));
|
|
674
671
|
}
|
|
675
672
|
buildApiOptions(baseUrl, path = '', method = EMethod.GET, requestBody = null, headers) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sambath999-localize-token.js","sources":["../../src/localize-token/helpers/localize.api.assets.ts","../../src/localize-token/localize.token.storage.ts","../../src/localize-token/localize.token.ts","../../src/localize-token/localize.token.service.ts","../../src/localize-token/helpers/interfaces.ts","../../src/localize-token/helpers/loccalize.api.helper.ts","../../src/localize-token/localize.api.service.ts","../../src/localize-token/localize.token.module.ts","../../src/localize-logindlg/localize-logindlg.component.ts","../../src/localize-logindlg/localize-logindlg.service.ts","../../src/localize-logindlg/localize-logindlg.module.ts","../../src/sambath999-localize-token.ts"],"sourcesContent":["export const LOCALIZE_API_ASSETS = {\r\n network: {\r\n noConnection: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <svg id=\"lze-no-connection\" data-name=\"Layer 2\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 77.29 70.98\">\r\n <defs>\r\n <style> .cls-1 { fill: #fff; } .cls-2, .cls-3 { fill: #e30613; } .cls-3 { stroke: #e30613; stroke-miterlimit: 10; stroke-width: .25px; } </style>\r\n </defs>\r\n <g id=\"Layer_3\" data-name=\"Layer 3\">\r\n <g>\r\n <path class=\"cls-1\" d=\"m73.29,35c-1.2,0-2.33-.53-3.09-1.46-.48-.57-11.23-13.2-31.55-13.2s-31.11,12.66-31.56,13.2c-1.4,1.71-3.92,1.95-5.63.55-1.71-1.4-1.95-3.92-.55-5.63.54-.66,13.47-16.12,37.74-16.12s37.2,15.46,37.74,16.12c1.4,1.71,1.15,4.23-.56,5.62-.71.58-1.61.9-2.53.9Z\"/>\r\n <path class=\"cls-1\" d=\"m63.96,45.66c-1.19,0-2.32-.53-3.08-1.44-5.79-6.05-13.86-9.39-22.24-9.21-8.38-.18-16.45,3.16-22.24,9.22-1.46,1.65-3.99,1.81-5.64.35-1.57-1.39-1.8-3.77-.52-5.43,7.32-7.89,17.64-12.29,28.4-12.12,10.76-.17,21.08,4.24,28.4,12.12,1.4,1.71,1.15,4.23-.56,5.62-.71.58-1.6.9-2.53.9Z\"/>\r\n <path class=\"cls-1\" d=\"m53.3,56.32c-1.24,0-2.41-.57-3.16-1.55-5.73-6.35-15.52-6.85-21.87-1.13-.4.36-.77.73-1.13,1.13-1.36,1.73-3.88,2.03-5.61.67-1.71-1.34-2.03-3.8-.73-5.54,8.39-9.85,23.18-11.04,33.03-2.65.95.81,1.84,1.69,2.65,2.65,1.34,1.75,1,4.26-.75,5.6-.7.53-1.55.82-2.43.82Z\"/>\r\n </g>\r\n <path class=\"cls-2\" d=\"m47.21,9.45l-4.06,41.36c-.64,5.42-8.39,5.39-9.01,0,0,0-4.06-41.36-4.06-41.36-.46-4.73,2.99-8.94,7.72-9.4,5.33-.58,9.97,4.09,9.4,9.4h0Z\"/>\r\n <circle class=\"cls-3\" cx=\"38.64\" cy=\"64.79\" r=\"6.07\"/>\r\n </g>\r\n </svg>`\r\n }\r\n}","import { extractMainDomain } from \"./localize.token\";\r\n\r\nexport interface ICookieOptions {\r\n /**\r\n * Cookie expiration date in days from now. If not provided the cookie is a session cookie\r\n */\r\n expires?: number | Date;\r\n path?: string;\r\n domain?: string;\r\n secure?: boolean;\r\n samesite?: \"strict\" | \"lax\" | \"none\";\r\n}\r\n\r\n/**\r\n* Assembly of @package ng2-cookies @see https://www.npmjs.com/package/ng2-cookies\r\n*\r\n* Reassembled by\r\n* @author sambath999\r\n* @date_29_09_2021\r\n* Updated from raw parameters to\r\n* @param {ICookieOptions} options and added another newer cookie flag\r\n* @param {string} samesite\r\n* @param {constant} SameSiteTypes, @param {string} strict \"strict\", @param {string} lax \"lax\", @param {string} none \"none\"\r\n*\r\n* @enum\r\n*/\r\nexport class LocalizeTokenStorage {\r\n\r\n private get getDefaultOptions(): ICookieOptions {\r\n const mainDomain = extractMainDomain(window.location.hostname);\r\n return {\r\n path: '/',\r\n domain: mainDomain,\r\n secure: true,\r\n // samesite: SameSiteType.strict,\r\n expires: 1\r\n }\r\n }\r\n\r\n private readonly defaultOptions: ICookieOptions;\r\n constructor(_defaultOptions?: ICookieOptions) {\r\n this.defaultOptions = _defaultOptions ?? this.getDefaultOptions;\r\n }\r\n\r\n /**\r\n * Checks the existence of a single cookie by it's name\r\n *\r\n * @param {string} name Identification of the cookie\r\n * @returns existence of the cookie\r\n */\r\n check(name: string): boolean {\r\n if (typeof document === \"undefined\") return false;\r\n name = encodeURIComponent(name);\r\n const regexp = new RegExp('(?:^' + name + '|;\\\\s*' + name + ')=(.*?)(?:;|$)', 'g');\r\n return regexp.test(document.cookie);\r\n }\r\n\r\n /**\r\n * Retrieves a single cookie by it's name\r\n *\r\n * @param {string} name Identification of the Cookie\r\n * @returns The Cookie's value\r\n */\r\n get(name: string): string | undefined {\r\n if (!this.check(name)) return undefined;\r\n\r\n name = encodeURIComponent(name);\r\n const regexp = new RegExp('(?:^' + name + '|;\\\\s*' + name + ')=(.*?)(?:;|$)', 'g');\r\n const result = regexp.exec(document.cookie);\r\n return result ? decodeURIComponent(result[1]) : undefined;\r\n }\r\n\r\n /**\r\n * Retrieves a a list of all cookie avaiable\r\n *\r\n * @returns Object with all Cookies\r\n */\r\n getAll(): any {\r\n const cookies: any = {};\r\n if (document.cookie) {\r\n const split = document.cookie.split(';');\r\n for (const s of split) {\r\n const currCookie = s.split('=');\r\n currCookie[0] = currCookie[0].trim();\r\n cookies[decodeURIComponent(currCookie[0])] = decodeURIComponent(currCookie[1]);\r\n }\r\n }\r\n\r\n return cookies;\r\n }\r\n\r\n set(name: string, value: string, options?: ICookieOptions) {\r\n options ??= this.defaultOptions;\r\n const { expires, path, domain, secure, samesite } = { ...this.defaultOptions, ...options };\r\n let cookieStr = `${encodeURIComponent(name)}=${encodeURIComponent(value)};`;\r\n\r\n if (expires) {\r\n const dtExpires = typeof expires === 'number' ? new Date(Date.now() + expires * 864e5) : expires;\r\n cookieStr += `expires=${dtExpires.toUTCString()};`;\r\n }\r\n\r\n cookieStr += path ? `path=${path};` : '';\r\n cookieStr += domain ? `domain=${domain};` : '';\r\n cookieStr += secure ? 'secure;' : '';\r\n cookieStr += samesite ? `samesite=${samesite};` : '';\r\n\r\n document.cookie = cookieStr;\r\n }\r\n\r\n /**\r\n * Removes specified Cookie\r\n *\r\n * @param {string} name Cookie's identification\r\n * @param {string} path Path relative to the domain where the cookie should be avaiable. Default /\r\n * @param {string} domain Domain where the cookie should be avaiable. Default current domain\r\n */\r\n delete(name: string, path: string = '/', domain: string = window.location.hostname): void {\r\n this.set(name, '', { path, domain, expires: -1 });\r\n }\r\n\r\n /**\r\n * Delete all cookie avaiable\r\n */\r\n deleteAll(path?: string, domain?: string): void {\r\n const cookies = this.getAll();\r\n\r\n for (const cookieName of Object.keys(cookies)) {\r\n this.delete(cookieName, path, domain);\r\n }\r\n }\r\n\r\n}\r\n","import { LocalizeTokenStorage } from \"./localize.token.storage\";\r\nexport interface ILocalizeTokenConfig {\r\n /**\r\n * The main domain of the application to set the cookies to be available for cross application with subdomains.\r\n * \r\n * Default is location.hostname (current domain) and automatically set extracted main domain if it is subdomain.\r\n */\r\n mainDomain?: string;\r\n authTokenName?: string;\r\n // tenantTokenName?: string;\r\n refreshTokenName?: string;\r\n /**\r\n * Flag to determine if the tenant token is required.\r\n */\r\n needTenant: boolean;\r\n isProduction: boolean;\r\n revokeTokenUrl: string;\r\n}\r\n\r\nexport class LocalizeToken {\r\n\r\n static readonly storage = new LocalizeTokenStorage();\r\n\r\n static readonly httpHeaders = {\r\n AUTHORIZATION: 'Authorization',\r\n X_TENANT: 'X-Tenant',\r\n X_REFRESH_TOKEN: 'X-RefreshToken',\r\n CONTENT_TYPE: 'Content-Type',\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Waits for a specified amount of time.\r\n * @param milliseconds - The milliseconds to wait.\r\n * @param when - The condition to wait for. Default is true.\r\n * @returns - Promise<void>\r\n */\r\nexport async function waitFor(milliseconds: number, when: boolean = true) {\r\n if (!when) return;\r\n await new Promise(resolve => setTimeout(resolve, milliseconds));\r\n}\r\n\r\n/**\r\n * Waits until the condition is met.\r\n * @param when - The condition to wait for.\r\n * @param intervalNumber - The interval number in milliseconds to check the condition. Default is 50.\r\n */\r\nexport async function waitUntil(when: () => any, intervalNumber: number = 50) {\r\n await new Promise(resolve => {\r\n const interval = setInterval(async () => {\r\n const cond = when();\r\n const result = cond instanceof Promise ? await cond : cond;\r\n if (result) {\r\n clearInterval(interval);\r\n resolve(true);\r\n }\r\n }, intervalNumber);\r\n });\r\n}\r\n\r\nexport function extractMainDomain(subdomain?: string): string {\r\n subdomain ??= window.location.hostname;\r\n const parts = subdomain.split('.');\r\n return parts.length > 2 ? parts.slice(-2).join('.') : subdomain;\r\n}","import { Injectable, OnDestroy } from '@angular/core';\r\nimport { extractMainDomain, ILocalizeTokenConfig, LocalizeToken } from './localize.token';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport * as jwt_decode from 'jwt-decode';\r\nexport interface JwtPayload extends jwt_decode.JwtPayload {\r\n // Define the structure of your JWT payload here\r\n email: string;\r\n sub: string;\r\n name: string;\r\n iat: number;\r\n exp: number;\r\n // Add other fields as needed\r\n}\r\n\r\ninterface IAuthToken {\r\n token: string;\r\n revoke: boolean;\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class LocalizeTokenService implements OnDestroy {\r\n private readonly configSubject = new BehaviorSubject<Partial<ILocalizeTokenConfig>>({});\r\n readonly isRevokingTokenSubject = new BehaviorSubject<boolean>(false);\r\n private readonly defaultConfig: Partial<ILocalizeTokenConfig> = {\r\n mainDomain: extractMainDomain(),\r\n authTokenName: 'auth-token',\r\n refreshTokenName: '_lze_rftkp_',\r\n }\r\n\r\n get config(): ILocalizeTokenConfig {\r\n this.throwIfNotInitialized();\r\n return this.configSubject.value as ILocalizeTokenConfig;\r\n }\r\n\r\n private isInitialized = false;\r\n\r\n init(config: ILocalizeTokenConfig) {\r\n console.log('LocalizeTokenService is initialized.');\r\n this.configSubject.next({ ...this.defaultConfig, ...config });\r\n this.isInitialized = true;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n // this.configSubject.complete();\r\n // this.isRevokingTokenSubject.complete();\r\n }\r\n\r\n private get authToken() { return this.storageGet() }\r\n private set authToken(value: IAuthToken | undefined) {\r\n value\r\n ? this.storageSet(value)\r\n : LocalizeToken.storage.delete(this.config.authTokenName!);\r\n }\r\n\r\n get refreshToken() { return LocalizeToken.storage.get(this.config.refreshTokenName!) }\r\n get accessToken() { return this.authToken?.token }\r\n\r\n set accessToken(value: string | undefined) {\r\n value && (this.authToken = { token: value, revoke: false })\r\n }\r\n\r\n get isRevokingToken() { return this.isRevokingTokenSubject.value /* this.authToken?.revoke ?? false */ }\r\n\r\n set isRevokingToken(value: boolean) {\r\n this.isRevokingTokenSubject.next(value);\r\n this.authToken && (this.authToken = { ...this.authToken, revoke: value })\r\n }\r\n\r\n tenantToken(name: string | undefined) {\r\n if (!name) return undefined;\r\n return LocalizeToken.storage.get(name)\r\n }\r\n\r\n private storageGet() {\r\n try {\r\n const encoded = LocalizeToken.storage.get(this.config.authTokenName!);\r\n const decoded = atob(encoded || '');\r\n return JSON.parse(decoded) as IAuthToken;\r\n } catch {\r\n return undefined\r\n }\r\n }\r\n\r\n private storageSet(value: IAuthToken) {\r\n const base64 = btoa(JSON.stringify(value));\r\n LocalizeToken.storage.set(this.config.authTokenName!, base64);\r\n }\r\n\r\n tokensValid(tenantTokenName?: string): boolean {\r\n return !!this.refreshToken?.length\r\n && (!this.config.needTenant || !!this.tenantToken(tenantTokenName)?.length);\r\n }\r\n\r\n decodeToken = (token: string) => jwt_decode.jwtDecode<JwtPayload>(token);\r\n get decodeRefreshToken() {\r\n const token = LocalizeToken.storage.get(this.config.refreshTokenName!);\r\n return !token ? null : this.decodeToken(token);\r\n }\r\n\r\n private throwIfNotInitialized() {\r\n if (!this.isInitialized) {\r\n throw new Error('LocalizeTokenService is not initialized. Call init() method before using it.');\r\n }\r\n }\r\n\r\n}\r\n","\r\n/**\r\n * Http method options\r\n */\r\nexport enum EMethod {\r\n POST = 'post',\r\n GET = 'get',\r\n PUT = 'put',\r\n DELETE = 'delete',\r\n PATCH = 'patch',\r\n}\r\n\r\nexport interface IOnConnectionError {\r\n /**\r\n * Callback function to execute when a connection error occurs.\r\n * This function should return a Promise or any value.\r\n */\r\n callback?: (error: INormalizedError) => Promise<void> | any;\r\n /**\r\n * If true, the request will block the screen with overlay on connection errors.\r\n * Default is false.\r\n */\r\n blockScreen?: boolean;\r\n\r\n /** Optional z-index for the block screen overlay.\r\n * Default is 10000.\r\n */\r\n blockScreenZIndex?: number;\r\n\r\n /**\r\n * Optional message to display when a connection error occurs.\r\n */\r\n message?: string;\r\n suggestionMessage?: string;\r\n}\r\n\r\ninterface IRetryOptions {\r\n\r\n /**\r\n * Maximum number of retries for a failed request.\r\n * Default is 100.\r\n */\r\n maxRetries?: number;\r\n\r\n /**\r\n * Delay in milliseconds before retrying a failed request.\r\n * Default is 500ms.\r\n */\r\n delay?: number;\r\n\r\n /**\r\n * Function to determine if a request should be retried based on the error.\r\n * If not provided, the default function will retry for network errors and server errors (status 500-599).\r\n * @param error - The error object from the failed request.\r\n * @returns true if the request should be retried, false otherwise.\r\n */\r\n retryFunction?: (error: INormalizedError) => Promise<boolean> | any;\r\n\r\n /**\r\n * Function to execute when a connection error occurs.\r\n * This function should return a Promise or any value.\r\n */\r\n onConnectionError?: IOnConnectionError;\r\n\r\n}\r\n\r\nexport interface ILocalizeApiConfigs {\r\n tenantTokenName?: string;\r\n onPrepareRequest?: () => Promise<void> | any;\r\n onAutoLogout?: () => Promise<void> | any;\r\n onRevokeUnauthorized?: () => Promise<void> | any;\r\n\r\n waitEachRequest?: {\r\n milliseconds: number;\r\n };\r\n enableRequestCancellation?: boolean;\r\n\r\n /**\r\n * Config for retrying failed requests.\r\n * If not provided, the default retry options will be used.\r\n */\r\n retryOptions?: IRetryOptions;\r\n}\r\n\r\nexport interface IApiOptions {\r\n headers?: { [key: string]: string };\r\n method: EMethod;\r\n requestUrl: string;\r\n requestBody?: any;\r\n isFormData?: boolean;\r\n /**\r\n * If true, the request will use the refresh token for authorization.\r\n */\r\n refreshToken?: boolean;\r\n}\r\n\r\nexport interface IHeader {\r\n [key: string]: string;\r\n}\r\n\r\nexport interface INormalizedError {\r\n code: string;\r\n message: string;\r\n details?: any;\r\n status: number;\r\n}\r\n","import { HttpClient, HttpErrorResponse, HttpHeaders } from \"@angular/common/http\";\r\nimport { IApiOptions, ILocalizeApiConfigs, INormalizedError, IOnConnectionError } from \"./interfaces\";\r\nimport { takeUntil, catchError, throwError, Subject } from \"rxjs\";\r\nimport { waitFor } from \"../localize.token\";\r\nimport { LOCALIZE_API_ASSETS } from \"./localize.api.assets\";\r\n\r\ninterface IRequestInstance {\r\n client: HttpClient;\r\n destroy$: () => Subject<void>;\r\n}\r\n\r\ninterface IRetryOptions {\r\n maxRetries: () => number;\r\n delay: number;\r\n callback: () => Promise<any> | any;\r\n retryUnless?: (error: any) => boolean;\r\n onError?: (error: any) => Promise<void> | any;\r\n connectionError?: IOnConnectionError\r\n}\r\n\r\nclass LocalizeApiHelper {\r\n\r\n readonly defaultRetryOptions: Partial<IRetryOptions> = {\r\n connectionError: {\r\n message: 'Connection error occurred. Please wait',\r\n blockScreen: true,\r\n blockScreenZIndex: 10000\r\n }\r\n };\r\n\r\n async performRetry<T = any>(options: IRetryOptions): Promise<T> {\r\n let attempts = 0;\r\n let lastError: any;\r\n let consoleCount = 0;\r\n\r\n // Merge default retry options with provided options\r\n options = { ...this.defaultRetryOptions, ...options }\r\n\r\n let styleElement: HTMLStyleElement | undefined;\r\n\r\n while (attempts < options.maxRetries()) {\r\n try {\r\n const result = await options.callback();\r\n this.removeBlocker(styleElement);\r\n return result;\r\n\r\n } catch (error: any) {\r\n lastError = error;\r\n\r\n if (consoleCount >= 7) {\r\n console.clear();\r\n consoleCount = 0;\r\n }\r\n\r\n if (options.retryUnless && !options.retryUnless(error))\r\n throw error; // If the error should not be retried, rethrow it\r\n\r\n // Handle connection error\r\n styleElement = await this.onConnectionError(options, error);\r\n\r\n if (options.onError)\r\n await this.invokeHook(options.onError.bind(this, error));\r\n\r\n if (attempts >= options.maxRetries() - 1)\r\n throw error;\r\n\r\n attempts++;\r\n consoleCount++;\r\n console.warn(`Attempt ${attempts} failed. Retrying...`, error);\r\n await waitFor(options.delay);\r\n }\r\n }\r\n\r\n console.warn(`Failed after ${options.maxRetries} attempts`);\r\n throw lastError;\r\n }\r\n\r\n async performRequestWithRetry<T = any>(\r\n options: IApiOptions,\r\n config: ILocalizeApiConfigs,\r\n performRequest: <T = any>(options: IApiOptions) => Promise<T>\r\n ): Promise<T> {\r\n\r\n const retryUnless = config.retryOptions?.retryFunction\r\n || this.isConnectionError;\r\n\r\n return await this.performRetry({\r\n connectionError: config.retryOptions?.onConnectionError,\r\n maxRetries: () => config.retryOptions?.maxRetries ?? 1000,\r\n delay: config.retryOptions?.delay ?? 500,\r\n callback: () => performRequest<T>(options),\r\n retryUnless: retryUnless,\r\n })\r\n }\r\n\r\n buildUrl(baseUrl: string, path: string): string {\r\n const normalizedUrl = `${baseUrl.trim().replace(/\\/?$/, '/')}${path.trim().replace(/^\\//, '')}`;\r\n return normalizedUrl.endsWith('/')\r\n ? normalizedUrl.slice(0, -1)\r\n : normalizedUrl;\r\n }\r\n\r\n normalizeError(error: HttpErrorResponse): INormalizedError {\r\n return {\r\n code: error.error?.code || `HTTP_${error.status}`,\r\n message: error.error?.message || error.message,\r\n details: error.error?.details,\r\n status: error.status\r\n };\r\n }\r\n\r\n async invokeHook(callback?: () => Promise<any> | any): Promise<any> {\r\n if (!callback) return;\r\n\r\n const result = callback();\r\n if (result instanceof Promise) {\r\n await result;\r\n }\r\n }\r\n\r\n createRequest<T = any>(\r\n instance: Required<IRequestInstance>,\r\n method: string,\r\n url: string,\r\n body: any,\r\n options: { headers: HttpHeaders }\r\n ) {\r\n const request$ = instance.client.request<T>(method, url, {\r\n ...options,\r\n body,\r\n observe: 'response',\r\n }).pipe(\r\n takeUntil(instance.destroy$()),\r\n catchError((error: HttpErrorResponse) => {\r\n // Convert to a non-observable error to handle in the promise\r\n return throwError(() => this.normalizeError(error));\r\n })\r\n );\r\n\r\n return request$;\r\n }\r\n\r\n defaultRetryFunction(error: INormalizedError): boolean {\r\n\r\n // Don't retry for other errors (like 400, 401, 403, etc.)\r\n if (!this.isConnectionError(error))\r\n throw error;\r\n\r\n return true;\r\n }\r\n\r\n isConnectionError(error: INormalizedError): boolean {\r\n const isNetworkError = error.status === 0;\r\n const isServerError = error.status >= 1000 && error.status < 600;\r\n return isNetworkError || isServerError;\r\n }\r\n\r\n async onConnectionError(\r\n options: IRetryOptions,\r\n error: any\r\n ): Promise<Promise<void> | any> {\r\n\r\n if (!options.connectionError)\r\n return;\r\n\r\n let styleElement: HTMLStyleElement | undefined;\r\n if (this.isConnectionError(error)) {\r\n\r\n styleElement = this.screenBlocker(options, error, true);\r\n\r\n await this.invokeHook(options.connectionError.callback?.bind(this, error));\r\n return styleElement;\r\n } else {\r\n this.screenBlocker(options, error, false);\r\n styleElement?.remove();\r\n }\r\n }\r\n\r\n screenBlocker(optons: IRetryOptions,\r\n error?: any,\r\n add: boolean = true): HTMLStyleElement | undefined {\r\n\r\n if (!optons.connectionError?.blockScreen)\r\n return;\r\n\r\n if (error instanceof HttpErrorResponse)\r\n error = this.normalizeError(error);\r\n\r\n const message = optons.connectionError?.message\r\n || 'Connection error occurred. Please wait';\r\n const errorMessage = error?.message || 'An error occurred';\r\n const suggestinMessage = optons.connectionError?.suggestionMessage\r\n || 'Please check your internet connection or the server status.';\r\n\r\n const zIndex = optons.connectionError?.blockScreenZIndex || 10000;\r\n\r\n const body = document.body;\r\n const blcokerHtml = `\r\n <div class=\"lze-blocker\">\r\n ${LOCALIZE_API_ASSETS.network.noConnection}\r\n <div class=\"lze-blocker__message\">\r\n ${message}\r\n <span class=\"lze-blocker__dotting\">\r\n <span class=\"lze-blocker__dot\"></span>\r\n <span class=\"lze-blocker__dot\"></span>\r\n <span class=\"lze-blocker__dot\"></span>\r\n </span>\r\n </div>\r\n <div class=\"lze-blocker__error\">${errorMessage}</div>\r\n <div class=\"lze-blocker__error_suggestion\">${suggestinMessage}</div>\r\n </div>\r\n `;\r\n const style = `\r\n div.lze-blocker {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n background: rgba(0, 0, 0, 0.85) !important;\r\n z-index: ${zIndex};\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n flex-direction: column;\r\n color: #fff !important;\r\n font-family: Arial, sans-serif;\r\n text-align: center;\r\n padding: 20px;\r\n box-sizing: border-box;\r\n overflow: hidden;\r\n user-select: none;\r\n }\r\n\r\n svg#lze-no-connection {\r\n width: 75px;\r\n height: 75px;\r\n margin-bottom: 20px;\r\n }\r\n \r\n div.lze-blocker__message {\r\n color: #fff !important;\r\n font-size: 18px !important;\r\n margin-bottom: 10px;\r\n }\r\n \r\n .lze-blocker__dotting {\r\n display: inline-block;\r\n vertical-align: middle;\r\n }\r\n span.lze-blocker__dot {\r\n display: inline-block;\r\n width: 7px;\r\n height: 7px;\r\n background-color: #ffffff !important;\r\n border-radius: 50%;\r\n margin-left: 3px;\r\n opacity: 0.3;\r\n animation: dotting 1s infinite;\r\n }\r\n .lze-blocker__dot:nth-child(1) {\r\n animation-delay: 0s;\r\n opacity: 1;\r\n }\r\n .lze-blocker__dot:nth-child(2) {\r\n animation-delay: 0.2s;\r\n }\r\n .lze-blocker__dot:nth-child(3) {\r\n animation-delay: 0.4s;\r\n }\r\n\r\n @keyframes dotting {\r\n 0%, 80%, 100% { opacity: 0.3; }\r\n 40% { opacity: 1; }\r\n }\r\n\r\n div.lze-blocker__error {\r\n color: #f00;\r\n font-size: 14px !important;\r\n margin-bottom: 10px;\r\n text-shadow: 0 0 1px #ff5f5f !important;\r\n }\r\n\r\n div.lze-blocker__error_suggestion {\r\n color: #ccc !important;\r\n font-size: 14px !important;\r\n margin-top: 10px;\r\n }\r\n \r\n @keyframes spin {\r\n 0% { transform: rotate(0deg); }\r\n 100% { transform: rotate(360deg); }\r\n }\r\n `;\r\n\r\n const styleElement = document.createElement('style');\r\n\r\n if (add) {\r\n if (!document.querySelector('.lze-blocker')) {\r\n styleElement.innerHTML = style;\r\n document.head.appendChild(styleElement);\r\n body.insertAdjacentHTML('beforeend', blcokerHtml);\r\n }\r\n } else {\r\n this.removeBlocker(styleElement);\r\n }\r\n\r\n return styleElement;\r\n }\r\n\r\n private removeBlocker(styleElement: HTMLStyleElement | undefined): void {\r\n const blocker = document.querySelector('.lze-blocker');\r\n blocker?.remove();\r\n styleElement?.remove();\r\n }\r\n}\r\n\r\nexport const ApiHelper = new LocalizeApiHelper();","import { Injectable, OnDestroy } from \"@angular/core\";\r\nimport { LocalizeTokenService } from \"./localize.token.service\";\r\nimport { HttpClient, HttpErrorResponse, HttpHeaders } from \"@angular/common/http\";\r\nimport { LocalizeToken, waitFor, waitUntil } from \"./localize.token\";\r\nimport { BehaviorSubject, Subject } from \"rxjs\";\r\nimport { ILocalizeApiConfigs, IApiOptions, EMethod, IHeader } from \"./helpers/interfaces\";\r\nimport { ApiHelper } from \"./public-api\";\r\n\r\nconst SCHEMES = LocalizeToken.httpHeaders;\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocalizeApiService implements OnDestroy {\r\n private readonly destroy$ = new Subject<void>();\r\n private readonly configSubject = new BehaviorSubject<Partial<ILocalizeApiConfigs>>({});\r\n readonly isRequestingSubject = new BehaviorSubject<boolean>(false);\r\n readonly isResolvingStartupSubject = new BehaviorSubject<boolean>(false);\r\n get isResolvingStartup() { return this.isResolvingStartupSubject.value; }\r\n\r\n get needTenant(): boolean { return this.localizeTokenService.config.needTenant; }\r\n\r\n get isRequesting() { return this.isRequestingSubject.value; }\r\n get isRevokingToken() { return this.localizeTokenService.isRevokingToken; }\r\n set isRevokingToken(value: boolean) { this.localizeTokenService.isRevokingToken = value; }\r\n\r\n get accessToken(): string | undefined { return this.localizeTokenService.accessToken; }\r\n set accessToken(value: string | undefined) { this.localizeTokenService.accessToken = value; }\r\n\r\n get refreshToken(): string | undefined { return this.localizeTokenService.refreshToken; }\r\n get tenantToken(): string | undefined { return this.localizeTokenService.tenantToken(this.config.tenantTokenName); }\r\n\r\n private defaultConfig: Partial<ILocalizeApiConfigs> = {\r\n waitEachRequest: { milliseconds: 0 },\r\n enableRequestCancellation: true,\r\n\r\n retryOptions: {\r\n maxRetries: 1000,\r\n delay: 1000,\r\n retryFunction: ApiHelper.defaultRetryFunction.bind(this),\r\n },\r\n\r\n };\r\n\r\n private get config(): Partial<ILocalizeApiConfigs> {\r\n this.validateConfig();\r\n return this.configSubject.value;\r\n }\r\n\r\n private apiOptions: Partial<IApiOptions> = {\r\n method: EMethod.GET,\r\n requestBody: null,\r\n };\r\n\r\n constructor(readonly httpClient: HttpClient,\r\n private readonly localizeTokenService: LocalizeTokenService\r\n ) { }\r\n\r\n /**\r\n * Initialize the API service.\r\n * @param apiConfigs - The API configurations.\r\n */\r\n init(apiConfigs: ILocalizeApiConfigs) {\r\n console.log('LocalizeApiService is initialized.');\r\n this.configSubject.next({ ...this.defaultConfig, ...apiConfigs });\r\n }\r\n\r\n cancelPendingRequests(): void {\r\n this.config.enableRequestCancellation\r\n && this.destroy$.next();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n // this.isResolvingStartupSubject.complete();\r\n // this.isRequestingSubject.complete();\r\n // this.configSubject.complete();\r\n }\r\n\r\n /**\r\n * A higher-order function that returns a curried function for making API requests.\r\n *\r\n * @param baseUrl - The base URL of the API.\r\n * @returns A curried function that can be used to make API requests.\r\n */\r\n func = (baseUrl: string) =>\r\n <T = any>(path: string, method: EMethod = EMethod.GET, reqBody: any = null, reqHeaders?: IHeader) =>\r\n this.request<T>(baseUrl, path, method, reqBody, reqHeaders)\r\n\r\n public async request<T = any>(baseUrl: string,\r\n path: string,\r\n method: EMethod = EMethod.GET,\r\n reqBody: any = null,\r\n reqHeaders?: IHeader): Promise<T> {\r\n\r\n await waitUntil(() => !this.isResolvingStartup, 500);\r\n\r\n await ApiHelper.invokeHook(this.config.onPrepareRequest);\r\n\r\n const apiOptions = this.buildApiOptions(baseUrl, path, method, reqBody, reqHeaders);\r\n\r\n try {\r\n await this.toWaitForPreviousRequest();\r\n\r\n return await ApiHelper.performRequestWithRetry<T>(\r\n apiOptions,\r\n this.config,\r\n this.performRequest.bind(this)\r\n );\r\n\r\n }\r\n catch (error: any) {\r\n return await this.handleOnRequestError(error, apiOptions);\r\n }\r\n }\r\n\r\n private async handleOnRequestError(error: HttpErrorResponse, options: IApiOptions): Promise<any> {\r\n if (error.status !== 401)\r\n throw error;\r\n\r\n await waitUntil(() => !this.isResolvingStartup, 500);\r\n\r\n return await ApiHelper.performRetry({\r\n maxRetries: () => 1000,\r\n delay: 500,\r\n retryUnless: (error) => error.status === 401 || ApiHelper.isConnectionError(error),\r\n callback: async () => {\r\n // Only handle 401 Unauthorized errors\r\n await this.revokeToken();\r\n\r\n // Retry the request with the new access token\r\n return await this.performRequest(options);\r\n }\r\n })\r\n\r\n }\r\n\r\n private async performRequest<T = any>(options: IApiOptions): Promise<T> {\r\n\r\n // Build the request options\r\n const buildOptions = { headers: this.buildHeaderOptions(options) };\r\n\r\n // Create the request observable\r\n const request$ = ApiHelper.createRequest<T>({\r\n client: this.httpClient,\r\n destroy$: () => this.destroy$\r\n }, options.method, options.requestUrl, options.requestBody, buildOptions);\r\n\r\n // Set the isRequesting state to true before making the request\r\n this.isRequestingSubject.next(true);\r\n\r\n const response = await new Promise<any>((resolve, reject) =>\r\n request$.subscribe({ next: (res) => resolve(res.body), error: reject }));\r\n\r\n // Reset the isRequesting state after the request completes\r\n this.isRequestingSubject.next(false);\r\n\r\n return response;\r\n }\r\n\r\n private async revokeToken(): Promise<void> {\r\n\r\n try {\r\n if (await this.interceptRevokeToken())\r\n return;\r\n\r\n this.isRevokingToken = true;\r\n\r\n const apiOptions: IApiOptions = {\r\n ...this.buildApiOptions(this.localizeTokenService.config.revokeTokenUrl),\r\n refreshToken: true,\r\n }\r\n\r\n // const revokeToken = await this.performRequest(apiOptions);\r\n const revokeToken = await ApiHelper.performRequestWithRetry(\r\n apiOptions,\r\n this.config,\r\n this.performRequest.bind(this)\r\n );\r\n\r\n await this.handleOnTokenRevoked(revokeToken);\r\n\r\n } catch (error: any) {\r\n // Handle the error, log it\r\n await ApiHelper.invokeHook(this.config.onAutoLogout);\r\n\r\n } finally {\r\n // Reset the revoking token state\r\n this.isRevokingToken = false;\r\n }\r\n }\r\n\r\n /** default http request options */\r\n private buildHeaderOptions(options: IApiOptions): HttpHeaders {\r\n\r\n let headers: { [key: string]: string } = {\r\n ...(options.refreshToken && { [SCHEMES.X_REFRESH_TOKEN]: `${this.refreshToken}` }),\r\n ...(!options.isFormData && { [SCHEMES.CONTENT_TYPE]: 'application/json' })\r\n };\r\n\r\n if (!options.refreshToken) {\r\n headers = {\r\n ...headers,\r\n [SCHEMES.AUTHORIZATION]: `Bearer ${this.accessToken}`,\r\n ...(this.needTenant && { [SCHEMES.X_TENANT]: `${this.tenantToken}` })\r\n };\r\n }\r\n\r\n return new HttpHeaders({ ...headers, ...options.headers });\r\n }\r\n\r\n private buildApiOptions(\r\n baseUrl: string,\r\n path: string = '',\r\n method: EMethod = EMethod.GET,\r\n requestBody: any = null,\r\n headers?: { [key: string]: string }\r\n ): IApiOptions {\r\n\r\n const requestUrl = ApiHelper.buildUrl(baseUrl, path);\r\n const isFormData = requestBody && requestBody instanceof FormData;\r\n return {\r\n ...this.apiOptions,\r\n ...{ headers, method, requestUrl, requestBody, isFormData }\r\n };\r\n }\r\n\r\n\r\n private async toWaitForPreviousRequest() {\r\n this.isRevokingToken &&\r\n (await waitUntil(() => !this.isRevokingToken));\r\n\r\n // to wait for each request in 50ms, even if the request is not completed\r\n this.config.waitEachRequest?.milliseconds &&\r\n (await waitFor(this.config.waitEachRequest.milliseconds, this.isRequesting));\r\n }\r\n\r\n\r\n private async handleOnTokenRevoked(response: any): Promise<void> {\r\n\r\n if (response?.status) {\r\n // If the response is successful, update the access token\r\n this.accessToken = response.message;\r\n\r\n } else {\r\n // If the response indicates an error, invoke the onRevokeUnauthorized hook\r\n console.warn('Token revocation failed, refresh token is expired.', response.message);\r\n await ApiHelper.invokeHook(this.config.onRevokeUnauthorized);\r\n }\r\n\r\n }\r\n\r\n private async interceptRevokeToken() {\r\n\r\n if (this.isRevokingToken) {\r\n console.warn('Token is already being revoked. Waiting for the current operation to complete...');\r\n await waitUntil(() => !this.isRevokingToken);\r\n return true;\r\n }\r\n\r\n if (!this.refreshToken) {\r\n // await ApiHelper.invokeHook(this.apiConfigs.onAutoLogout);\r\n throw new Error('Refresh token is missing. Please login again.');\r\n }\r\n return false;\r\n }\r\n\r\n validateConfig(): void {\r\n const config = this.configSubject.value as ILocalizeApiConfigs;\r\n if (this.localizeTokenService.config.needTenant && !config.tenantTokenName?.trim().length) {\r\n throw Error('Tenant token is required but tenantTokenName is not configured');\r\n }\r\n\r\n if (!this.localizeTokenService.config.revokeTokenUrl.trim().length) {\r\n throw Error('Revoke token URL is not configured - token refresh will not work');\r\n }\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { LocalizeTokenService } from './localize.token.service';\r\nimport { LocalizeApiService } from './localize.api.service';\r\n\r\n@NgModule({\r\n providers: [\r\n LocalizeTokenService,\r\n LocalizeApiService\r\n ]\r\n})\r\nexport class LocalizeTokenModule { }","import { HttpClient } from \"@angular/common/http\";\r\nimport {\r\n ChangeDetectorRef,\r\n Component,\r\n OnInit,\r\n ViewEncapsulation,\r\n} from \"@angular/core\";\r\nimport { MessageService } from \"primeng/api\";\r\nimport { DynamicDialogConfig, DynamicDialogRef } from \"primeng/dynamicdialog\";\r\nimport { JwtPayload, LocalizeTokenService } from \"../localize-token/localize.token.service\";\r\nimport { LocalizeToken } from \"../localize-token/localize.token\";\r\nimport { ILoginDialogConfig, ILoginDialogProperties } from \"./localize-logindlg.service\";\r\nimport { DomSanitizer } from \"@angular/platform-browser\";\r\n\r\n@Component({\r\n styles: [`\r\n #login-dlg-wrap {\r\n width: 100%;\r\n max-width: 400px;\r\n margin: 0 auto;\r\n padding: 30px;\r\n height: 100%;\r\n }\r\n \r\n .login-dlg-elm {\r\n margin-top: 1rem;\r\n }\r\n\r\n .login-dlg-elm.login-dlg-suggest {\r\n display: flex ;\r\n align-items: center;\r\n user-select: none;\r\n border-bottom: solid 1px #ddd;\r\n border-radius: 5px;\r\n padding: 5px 10px;\r\n background: #f9f9f9;\r\n box-shadow: 1px 5px 10px -12px #000;\r\n }\r\n \r\n #login-dlg-header {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n }\r\n \r\n #login-dlg-header h3 {\r\n font-weight: bold;\r\n font-size: 0.9rem;\r\n color: orange;\r\n text-align: center;\r\n }\r\n \r\n #login-logo {\r\n height: 55px;\r\n width: 55px;\r\n /* background: url(\"/assets/images/logo-300px.png\") no-repeat; */\r\n background-size: contain !important;\r\n }\r\n \r\n #login-dlg-content .p-inputgroup {\r\n height: 45px;\r\n }\r\n \r\n #login-dlg-content .p-inputgroup .p-inputgroup-addon {\r\n height: 45px;\r\n border-radius: 15px 0 0 15px;\r\n width: 50px;\r\n }\r\n #login-dlg-content *{\r\n font-size: .9rem;\r\n /* font-family: 'Lexend', 'Roboto', sans-serif, 'material-icons-round'; */\r\n }\r\n \r\n #login-dlg-content .p-inputgroup .p-inputgroup-addon * {\r\n font-size: 1rem;\r\n }\r\n \r\n #login-dlg-content .p-inputgroup input {\r\n height: 45px;\r\n border-radius: 0 15px 15px 0;\r\n }\r\n \r\n #login-dlg-content button {\r\n height: 45px;\r\n border-radius: 15px;\r\n }\r\n \r\n /*check animation block*/\r\n \r\n .check-animation-wrap {\r\n top: 0;\r\n left: 0;\r\n position: absolute;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n width: 100%;\r\n height: calc(100% - 200px);\r\n min-height: 400px;\r\n }\r\n \r\n .check-main-container {\r\n width: 100%;\r\n height: 100vh;\r\n display: flex;\r\n flex-flow: column;\r\n justify-content: center;\r\n align-items: center;\r\n }\r\n \r\n .check-container {\r\n width: 6.25rem;\r\n height: 7.5rem;\r\n display: flex;\r\n flex-flow: column;\r\n align-items: center;\r\n justify-content: space-between;\r\n }\r\n \r\n .check-container .check-background {\r\n width: 100%;\r\n height: calc(100% - 1.25rem);\r\n background: linear-gradient(to bottom right, #5de593, #41d67c);\r\n box-shadow: 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset;\r\n transform: scale(0.84);\r\n border-radius: 50%;\r\n animation: animateContainer 0.75s ease-out forwards 0.75s;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n opacity: 0;\r\n }\r\n \r\n .check-container .check-background svg {\r\n width: 65%;\r\n transform: translateY(0.25rem);\r\n stroke-dasharray: 80;\r\n stroke-dashoffset: 80;\r\n animation: animateCheck 0.35s forwards 1.25s ease-out;\r\n min-width: auto !important;\r\n }\r\n \r\n .check-container .check-shadow {\r\n bottom: calc(-15% - 5px);\r\n left: 0;\r\n border-radius: 50%;\r\n background: radial-gradient(closest-side, rgba(73, 218, 131, 1), transparent);\r\n animation: animateShadow 0.75s ease-out forwards 0.75s;\r\n }\r\n \r\n @keyframes animateContainer {\r\n 0% {\r\n opacity: 0;\r\n transform: scale(0);\r\n box-shadow: 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 25% {\r\n opacity: 1;\r\n transform: scale(0.9);\r\n box-shadow: 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 43.75% {\r\n transform: scale(1.15);\r\n box-shadow: 0px 0px 0px 43.334px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 62.5% {\r\n transform: scale(1);\r\n box-shadow: 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 21.667px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 81.25% {\r\n box-shadow: 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 100% {\r\n opacity: 1;\r\n box-shadow: 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n }\r\n \r\n @keyframes animateCheck {\r\n from {\r\n stroke-dashoffset: 80;\r\n }\r\n \r\n to {\r\n stroke-dashoffset: 0;\r\n }\r\n }\r\n \r\n @keyframes animateShadow {\r\n 0% {\r\n opacity: 0;\r\n width: 100%;\r\n height: 15%;\r\n }\r\n \r\n 25% {\r\n opacity: 0.25;\r\n }\r\n \r\n 43.75% {\r\n width: 40%;\r\n height: 7%;\r\n opacity: 0.35;\r\n }\r\n \r\n 100% {\r\n width: 85%;\r\n height: 15%;\r\n opacity: 0.25;\r\n }\r\n }\r\n #login-dlg-wrap .loader-wrap {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n height:100%;\r\n width:100%;\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n z-index: 100;\r\n background: #ffffff42;\r\n backdrop-filter: blur(1px);\r\n }\r\n\r\n #login-dlg-wrap .login-dlg-loader {\r\n border: 15px solid #e7e7e7;\r\n border-top: 15px solid #52dba1;\r\n border-radius: 50%;\r\n width: 100px;\r\n height: 100px;\r\n animation: spinloader 2s linear infinite;\r\n }\r\n\r\n #login-dlg-wrap .loader-wrap::before {\r\n content: \"\";\r\n position: absolute;\r\n width: 70px;\r\n height: 70px;\r\n transform: translate(-50%, -50%);\r\n z-index: 1;\r\n border: 15px solid #e7e7e700;\r\n border-top: 15px solid #52dba1c9;\r\n border-radius: 50%;\r\n animation: spinloader .75s linear infinite;\r\n }\r\n\r\n @keyframes spinloader {\r\n 0% { transform: rotate(0deg); }\r\n 100% { transform: rotate(360deg); }\r\n }\r\n `],\r\n template: `<p-toast key=\"$login-dlg\" position=\"top-center\"></p-toast>\r\n <div id=\"login-dlg-wrap\">\r\n <div id=\"login-dlg-header\">\r\n <div id=\"login-logo\" class=\"p-mb-2\" style=\"background: url('{{properties.logoImage}}') no-repeat\"></div>\r\n <h3 *ngIf=\"!success\" [innerHTML]=\"sanitizedTitle\"></h3>\r\n <h3 *ngIf=\"success\" style=\"color:green !important;\">{{properties.loginSuccessMessage}}</h3>\r\n </div>\r\n <div id=\"login-dlg-content\">\r\n <ng-container *ngIf=\"!success\">\r\n <div *ngIf=\"loading\" class=\"loader-wrap\">\r\n <div class=\"login-dlg-loader\"></div>\r\n </div>\r\n <div class=\"login-dlg-elm\">\r\n <div class=\"p-inputgroup\">\r\n <span class=\"p-inputgroup-addon\">\r\n <i class=\"material-icons-round\">person</i>\r\n </span>\r\n <input disabled pInputText type=\"text\" placeholder=\"{{properties.username?.placeHolder}}\" [value]=\"decodeToken?.email\" />\r\n </div>\r\n </div>\r\n \r\n <div class=\"login-dlg-elm\">\r\n <div class=\"p-inputgroup\">\r\n <span class=\"p-inputgroup-addon\">\r\n <i class=\"material-icons-round\">lock</i>\r\n </span>\r\n <input [disabled]=\"loading\" (keydown.enter)=\"clickLogin()\" pInputText type=\"password\" \r\n placeholder=\"{{properties.password?.placeHolder}}\" [(ngModel)]=\"password\"\r\n autofocus />\r\n </div>\r\n </div>\r\n <div class=\"login-dlg-elm\">\r\n <button style=\"width: 100%;\" pButton type=\"button\" label=\"{{properties.loginButton?.placeHolder}}\" (click)=\"clickLogin()\"\r\n [disabled]=\"!password || loading\"></button>\r\n </div>\r\n \r\n <div class=\"login-dlg-elm login-dlg-suggest\" style=\"display:flex;align-items: center;user-select: none;\">\r\n <span>{{properties.logoutButton?.message}}</span>\r\n <button class=\"p-button-text\" pButton type=\"button\" label=\"{{properties.logoutButton?.placeHolder}}\" \r\n (click)=\"clickLogout()\"></button>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"success\">\r\n <div style=\"margin-top:35px;\"></div>\r\n <div class=\"check-animation-wrap\">\r\n <div class=\"check-main-container\">\r\n <div class=\"check-container\">\r\n <div class=\"check-background\">\r\n <svg viewBox=\"0 0 65 51\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M7 25L27.3077 44L58.5 7\" stroke=\"white\" stroke-width=\"13\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>`,\r\n selector: \"app-localize-logindlg\",\r\n providers: [MessageService],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class LocalizeLogindlgComponent implements OnInit {\r\n readonly messageKey = \"$login-dlg\";\r\n password: any;\r\n readonly decodeToken: JwtPayload | null;\r\n loading = false;\r\n success = false;\r\n private get config() { return this.tokenService.config; }\r\n private readonly loginConfig: ILoginDialogConfig\r\n\r\n private logout?: () => any\r\n private loginUrl?: string;\r\n readonly properties: ILoginDialogProperties;\r\n\r\n\r\n constructor(\r\n private readonly messageService: MessageService,\r\n private readonly cdt: ChangeDetectorRef,\r\n private readonly dlgRef: DynamicDialogRef,\r\n private readonly dlgConfig: DynamicDialogConfig,\r\n private readonly tokenService: LocalizeTokenService,\r\n private readonly httpClient: HttpClient,\r\n private readonly sanitizer: DomSanitizer\r\n ) {\r\n this.decodeToken = this.tokenService.decodeRefreshToken;\r\n this.loginConfig = this.dlgConfig.data.loginConfig;\r\n this.properties = this.loginConfig.properties!;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.dlgConfig.closable = false;\r\n this.logout = this.loginConfig.logoutFunc;\r\n this.loginUrl = this.loginConfig.loginUrl\r\n\r\n if (!this.decodeToken) {\r\n this.showMessage(\"error\", \"Token is invalid\");\r\n setTimeout(() => this.logout?.(), 2000);\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.cdt.detectChanges();\r\n }\r\n\r\n async clickLogin() {\r\n if (!this.isValidPassword) {\r\n return this.showMessage(\"error\", \"Password is required and must be at least 6 characters\");\r\n }\r\n\r\n this.loading = true;\r\n const loginRes = await this.login();\r\n if (!loginRes?.status) {\r\n return this.showMessage(\"error\", loginRes.message ?? \"An error occurred\");\r\n }\r\n\r\n this.tokenService.accessToken = loginRes.tokens.accessToken;\r\n const cookieOptions = { expires: this.loginConfig.expire ?? 365 }\r\n LocalizeToken.storage.set(this.config.refreshTokenName!, loginRes.tokens.refreshToken, cookieOptions);\r\n this.success = true;\r\n setTimeout(() => {\r\n this.dlgConfig.dismissableMask = true;\r\n this.dlgConfig.modal = false;\r\n this.dlgRef.close(true);\r\n }, 2000);\r\n }\r\n\r\n private async login() {\r\n if (!this.loginUrl?.trim().length) {\r\n this.showMessage(\"error\", \"Login url is required\");\r\n throw new Error(\"Login url is required\");\r\n }\r\n\r\n try {\r\n\r\n if (this.loginConfig.loginFunction) {\r\n console.log(\"Using custom login function\");\r\n return await this.loginConfig.loginFunction(this.decodeToken?.email ?? '', this.password.trim(), this.getHeaders());\r\n }\r\n\r\n return await new Promise<any>((resolve, reject) =>\r\n this.httpClient.post(this.loginUrl!,\r\n { password: this.password.trim() },\r\n { headers: this.getHeaders() }).subscribe({ next: resolve, error: reject }));\r\n\r\n } catch (e: any) {\r\n this.showMessage(\"error\", e.message);\r\n return null;\r\n }\r\n }\r\n\r\n private getHeaders() {\r\n return {\r\n [LocalizeToken.httpHeaders.X_REFRESH_TOKEN]: LocalizeToken.storage.get(this.config.refreshTokenName!) ?? \"\",\r\n [LocalizeToken.httpHeaders.X_TENANT]: LocalizeToken.storage.get(this.loginConfig.tenantTokenName!) ?? \"\",\r\n };\r\n }\r\n\r\n get isValidPassword(): boolean {\r\n this.loading = false;\r\n return this.properties.passwordValidator\r\n ? this.properties.passwordValidator(this.password)\r\n : this.password && this.password.trim().length >= 6 && this.password.trim().length <= 50;\r\n }\r\n\r\n clickLogout = () => this.logout?.();\r\n\r\n private showMessage(severity: string, summary: string) {\r\n this.messageService.add({ key: this.messageKey, severity, summary });\r\n this.loading = false;\r\n }\r\n\r\n get sanitizedTitle() {\r\n return this.sanitizer.bypassSecurityTrustHtml(this.properties.title ?? '');\r\n }\r\n}\r\n","import { Injectable, Injector } from '@angular/core';\nimport { DialogService, DynamicDialogConfig } from 'primeng/dynamicdialog';\nimport { LocalizeLogindlgComponent } from './localize-logindlg.component';\nexport interface ILoginDialogPlaceHolder {\n /**\n * Message to display in the input field, typically used for error messages or hints.\n * This is optional and can be used to provide additional context or instructions to the user.\n */\n message?: string;\n /**\n * Placeholder or label text for the input field\n */\n placeHolder?: string;\n}\n\nexport interface ILoginDialogProperties {\n /**\n * Title of the login dialog\n */\n title?: string;\n loginSuccessMessage?: string;\n /**\n * Logog image path or URL to display in the login dialog\n * If not provided, the \"/assets/images/logo-300px.png\" image will be used.\n */\n logoImage?: string;\n username?: ILoginDialogPlaceHolder;\n password?: ILoginDialogPlaceHolder;\n loginButton?: ILoginDialogPlaceHolder;\n logoutButton?: ILoginDialogPlaceHolder;\n /**\n * Function to validate the password.\n * If not provided, the default validation checks if the password is between 6 and 50 characters long.\n * @param password\n * @returns\n */\n passwordValidator?: (password: string) => boolean;\n}\n\nexport interface ILoginDialogConfig {\n loginUrl?: string;\n logoutUrl?: string;\n loginFunction?: (username: string, password: string, headers?: { [key: string]: string }) => Promise<any>;\n logoutFunc?: () => void;\n /**\n * Cookie expiration date in days from now. If not provided the cookie is a session cookie\n */\n expire?: number;\n tenantTokenName?: string;\n /**\n * Configuration for the login dialog.\n * This interface defines the properties that can be used to customize the login dialog's behavior and appearance\n */\n properties?: ILoginDialogProperties;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LocalizeLogindlgService {\n\n constructor(private readonly injector: Injector) { }\n\n async openLoginDialog(loginConfig: ILoginDialogConfig, config?: DynamicDialogConfig) {\n\n config = this.intercepDialogConfig(config);\n this.initConfig(loginConfig);\n\n config.data = { ...(config.data || {}), ...{ loginConfig } };\n\n const dialogService = this.injector.get(DialogService);\n const dialog = dialogService.open(LocalizeLogindlgComponent, config);\n\n await new Promise<void>((resolve) =>\n dialog.onClose.subscribe(res => {\n if (res) {\n resolve();\n }\n }));\n }\n\n private intercepDialogConfig(config?: DynamicDialogConfig) {\n config ??= {\n header: 'Login',\n style: { 'max-width': '400px', width: '100%', 'height': '650px' },\n modal: true,\n closable: false,\n showHeader: false,\n }\n\n config = {\n ...config, ...{\n contentStyle: { 'height': '100%', 'border-radius': '20px' }\n }\n }\n config.style = { ...config.style, ...{ 'border-radius': '20px' } };\n return config;\n }\n\n\n private initConfig(loginConfig: ILoginDialogConfig) {\n loginConfig ??= {}\n loginConfig.properties ??= {\n title: 'Your session is expired!<br/> Please login again to continue.',\n loginSuccessMessage: 'You have successfully logged in.',\n logoImage: '/assets/images/logo-300px.png',\n username: { placeHolder: 'Username' },\n password: { placeHolder: 'Password' },\n loginButton: { placeHolder: 'Login' },\n logoutButton: {\n message: 'No, I want to login with another user.',\n placeHolder: 'Logout'\n }\n }\n }\n}\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { LocalizeLogindlgComponent } from \"./localize-logindlg.component\";\nimport { ToastModule } from \"primeng/toast\";\nimport { InputTextModule } from \"primeng/inputtext\";\nimport { ButtonModule } from \"primeng/button\";\nimport { BrowserModule } from '@angular/platform-browser';\nimport { FormsModule } from '@angular/forms';\nimport { LocalizeLogindlgService } from \"./localize-logindlg.service\";\n\n@NgModule({\n declarations: [LocalizeLogindlgComponent],\n exports: [LocalizeLogindlgComponent],\n imports: [\n CommonModule,\n ToastModule,\n InputTextModule,\n BrowserModule,\n FormsModule,\n ButtonModule,\n ],\n providers: [LocalizeLogindlgService],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class LocalizeLogindlgModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sambath999-localize-token.js","sources":["../../src/localize-token/helpers/localize.api.assets.ts","../../src/localize-token/localize.token.storage.ts","../../src/localize-token/localize.token.ts","../../src/localize-token/localize.token.service.ts","../../src/localize-token/helpers/interfaces.ts","../../src/localize-token/helpers/loccalize.api.helper.ts","../../src/localize-token/localize.api.service.ts","../../src/localize-token/localize.token.module.ts","../../src/localize-logindlg/localize-logindlg.component.ts","../../src/localize-logindlg/localize-logindlg.service.ts","../../src/localize-logindlg/localize-logindlg.module.ts","../../src/sambath999-localize-token.ts"],"sourcesContent":["export const LOCALIZE_API_ASSETS = {\r\n network: {\r\n noConnection: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <svg id=\"lze-no-connection\" data-name=\"Layer 2\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 77.29 70.98\">\r\n <defs>\r\n <style> .cls-1 { fill: #fff; } .cls-2, .cls-3 { fill: #e30613; } .cls-3 { stroke: #e30613; stroke-miterlimit: 10; stroke-width: .25px; } </style>\r\n </defs>\r\n <g id=\"Layer_3\" data-name=\"Layer 3\">\r\n <g>\r\n <path class=\"cls-1\" d=\"m73.29,35c-1.2,0-2.33-.53-3.09-1.46-.48-.57-11.23-13.2-31.55-13.2s-31.11,12.66-31.56,13.2c-1.4,1.71-3.92,1.95-5.63.55-1.71-1.4-1.95-3.92-.55-5.63.54-.66,13.47-16.12,37.74-16.12s37.2,15.46,37.74,16.12c1.4,1.71,1.15,4.23-.56,5.62-.71.58-1.61.9-2.53.9Z\"/>\r\n <path class=\"cls-1\" d=\"m63.96,45.66c-1.19,0-2.32-.53-3.08-1.44-5.79-6.05-13.86-9.39-22.24-9.21-8.38-.18-16.45,3.16-22.24,9.22-1.46,1.65-3.99,1.81-5.64.35-1.57-1.39-1.8-3.77-.52-5.43,7.32-7.89,17.64-12.29,28.4-12.12,10.76-.17,21.08,4.24,28.4,12.12,1.4,1.71,1.15,4.23-.56,5.62-.71.58-1.6.9-2.53.9Z\"/>\r\n <path class=\"cls-1\" d=\"m53.3,56.32c-1.24,0-2.41-.57-3.16-1.55-5.73-6.35-15.52-6.85-21.87-1.13-.4.36-.77.73-1.13,1.13-1.36,1.73-3.88,2.03-5.61.67-1.71-1.34-2.03-3.8-.73-5.54,8.39-9.85,23.18-11.04,33.03-2.65.95.81,1.84,1.69,2.65,2.65,1.34,1.75,1,4.26-.75,5.6-.7.53-1.55.82-2.43.82Z\"/>\r\n </g>\r\n <path class=\"cls-2\" d=\"m47.21,9.45l-4.06,41.36c-.64,5.42-8.39,5.39-9.01,0,0,0-4.06-41.36-4.06-41.36-.46-4.73,2.99-8.94,7.72-9.4,5.33-.58,9.97,4.09,9.4,9.4h0Z\"/>\r\n <circle class=\"cls-3\" cx=\"38.64\" cy=\"64.79\" r=\"6.07\"/>\r\n </g>\r\n </svg>`\r\n }\r\n}","import { extractMainDomain } from \"./localize.token\";\r\n\r\nexport interface ICookieOptions {\r\n /**\r\n * Cookie expiration date in days from now. If not provided the cookie is a session cookie\r\n */\r\n expires?: number | Date;\r\n path?: string;\r\n domain?: string;\r\n secure?: boolean;\r\n samesite?: \"strict\" | \"lax\" | \"none\";\r\n}\r\n\r\n/**\r\n* Assembly of @package ng2-cookies @see https://www.npmjs.com/package/ng2-cookies\r\n*\r\n* Reassembled by\r\n* @author sambath999\r\n* @date_29_09_2021\r\n* Updated from raw parameters to\r\n* @param {ICookieOptions} options and added another newer cookie flag\r\n* @param {string} samesite\r\n* @param {constant} SameSiteTypes, @param {string} strict \"strict\", @param {string} lax \"lax\", @param {string} none \"none\"\r\n*\r\n* @enum\r\n*/\r\nexport class LocalizeTokenStorage {\r\n\r\n private get getDefaultOptions(): ICookieOptions {\r\n const mainDomain = extractMainDomain(window.location.hostname);\r\n return {\r\n path: '/',\r\n domain: mainDomain,\r\n secure: true,\r\n // samesite: SameSiteType.strict,\r\n expires: 1\r\n }\r\n }\r\n\r\n private readonly defaultOptions: ICookieOptions;\r\n constructor(_defaultOptions?: ICookieOptions) {\r\n this.defaultOptions = _defaultOptions ?? this.getDefaultOptions;\r\n }\r\n\r\n /**\r\n * Checks the existence of a single cookie by it's name\r\n *\r\n * @param {string} name Identification of the cookie\r\n * @returns existence of the cookie\r\n */\r\n check(name: string): boolean {\r\n if (typeof document === \"undefined\") return false;\r\n name = encodeURIComponent(name);\r\n const regexp = new RegExp('(?:^' + name + '|;\\\\s*' + name + ')=(.*?)(?:;|$)', 'g');\r\n return regexp.test(document.cookie);\r\n }\r\n\r\n /**\r\n * Retrieves a single cookie by it's name\r\n *\r\n * @param {string} name Identification of the Cookie\r\n * @returns The Cookie's value\r\n */\r\n get(name: string): string | undefined {\r\n if (!this.check(name)) return undefined;\r\n\r\n name = encodeURIComponent(name);\r\n const regexp = new RegExp('(?:^' + name + '|;\\\\s*' + name + ')=(.*?)(?:;|$)', 'g');\r\n const result = regexp.exec(document.cookie);\r\n return result ? decodeURIComponent(result[1]) : undefined;\r\n }\r\n\r\n /**\r\n * Retrieves a a list of all cookie avaiable\r\n *\r\n * @returns Object with all Cookies\r\n */\r\n getAll(): any {\r\n const cookies: any = {};\r\n if (document.cookie) {\r\n const split = document.cookie.split(';');\r\n for (const s of split) {\r\n const currCookie = s.split('=');\r\n currCookie[0] = currCookie[0].trim();\r\n cookies[decodeURIComponent(currCookie[0])] = decodeURIComponent(currCookie[1]);\r\n }\r\n }\r\n\r\n return cookies;\r\n }\r\n\r\n set(name: string, value: string, options?: ICookieOptions) {\r\n options ??= this.defaultOptions;\r\n const { expires, path, domain, secure, samesite } = { ...this.defaultOptions, ...options };\r\n let cookieStr = `${encodeURIComponent(name)}=${encodeURIComponent(value)};`;\r\n\r\n if (expires) {\r\n const dtExpires = typeof expires === 'number' ? new Date(Date.now() + expires * 864e5) : expires;\r\n cookieStr += `expires=${dtExpires.toUTCString()};`;\r\n }\r\n\r\n cookieStr += path ? `path=${path};` : '';\r\n cookieStr += domain ? `domain=${domain};` : '';\r\n cookieStr += secure ? 'secure;' : '';\r\n cookieStr += samesite ? `samesite=${samesite};` : '';\r\n\r\n document.cookie = cookieStr;\r\n }\r\n\r\n /**\r\n * Removes specified Cookie\r\n *\r\n * @param {string} name Cookie's identification\r\n * @param {string} path Path relative to the domain where the cookie should be avaiable. Default /\r\n * @param {string} domain Domain where the cookie should be avaiable. Default current domain\r\n */\r\n delete(name: string, path: string = '/', domain: string = window.location.hostname): void {\r\n this.set(name, '', { path, domain, expires: -1 });\r\n }\r\n\r\n /**\r\n * Delete all cookie avaiable\r\n */\r\n deleteAll(path?: string, domain?: string): void {\r\n const cookies = this.getAll();\r\n\r\n for (const cookieName of Object.keys(cookies)) {\r\n this.delete(cookieName, path, domain);\r\n }\r\n }\r\n\r\n}\r\n","import { LocalizeTokenStorage } from \"./localize.token.storage\";\r\nexport interface ILocalizeTokenConfig {\r\n /**\r\n * The main domain of the application to set the cookies to be available for cross application with subdomains.\r\n * \r\n * Default is location.hostname (current domain) and automatically set extracted main domain if it is subdomain.\r\n */\r\n mainDomain?: string;\r\n authTokenName?: string;\r\n // tenantTokenName?: string;\r\n refreshTokenName?: string;\r\n /**\r\n * Flag to determine if the tenant token is required.\r\n */\r\n needTenant: boolean;\r\n isProduction: boolean;\r\n revokeTokenUrl: string;\r\n}\r\n\r\nexport class LocalizeToken {\r\n\r\n static readonly storage = new LocalizeTokenStorage();\r\n\r\n static readonly httpHeaders = {\r\n AUTHORIZATION: 'Authorization',\r\n X_TENANT: 'X-Tenant',\r\n X_REFRESH_TOKEN: 'X-RefreshToken',\r\n CONTENT_TYPE: 'Content-Type',\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Waits for a specified amount of time.\r\n * @param milliseconds - The milliseconds to wait.\r\n * @param when - The condition to wait for. Default is true.\r\n * @returns - Promise<void>\r\n */\r\nexport async function waitFor(milliseconds: number, when: boolean = true) {\r\n if (!when) return;\r\n await new Promise(resolve => setTimeout(resolve, milliseconds));\r\n}\r\n\r\n/**\r\n * Waits until the condition is met.\r\n * @param when - The condition to wait for.\r\n * @param intervalNumber - The interval number in milliseconds to check the condition. Default is 50.\r\n */\r\nexport async function waitUntil(when: () => any, intervalNumber: number = 50) {\r\n await new Promise(resolve => {\r\n const interval = setInterval(async () => {\r\n const cond = when();\r\n const result = cond instanceof Promise ? await cond : cond;\r\n if (result) {\r\n clearInterval(interval);\r\n resolve(true);\r\n }\r\n }, intervalNumber);\r\n });\r\n}\r\n\r\nexport function extractMainDomain(subdomain?: string): string {\r\n subdomain ??= window.location.hostname;\r\n const parts = subdomain.split('.');\r\n return parts.length > 2 ? parts.slice(-2).join('.') : subdomain;\r\n}","import { Injectable, OnDestroy } from '@angular/core';\r\nimport { extractMainDomain, ILocalizeTokenConfig, LocalizeToken } from './localize.token';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport * as jwt_decode from 'jwt-decode';\r\nexport interface JwtPayload extends jwt_decode.JwtPayload {\r\n // Define the structure of your JWT payload here\r\n email: string;\r\n sub: string;\r\n name: string;\r\n iat: number;\r\n exp: number;\r\n // Add other fields as needed\r\n}\r\n\r\ninterface IAuthToken {\r\n token: string;\r\n revoke: boolean;\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class LocalizeTokenService implements OnDestroy {\r\n private readonly configSubject = new BehaviorSubject<Partial<ILocalizeTokenConfig>>({});\r\n readonly isRevokingTokenSubject = new BehaviorSubject<boolean>(false);\r\n private readonly defaultConfig: Partial<ILocalizeTokenConfig> = {\r\n mainDomain: extractMainDomain(),\r\n authTokenName: 'auth-token',\r\n refreshTokenName: '_lze_rftkp_',\r\n }\r\n\r\n get config(): ILocalizeTokenConfig {\r\n this.throwIfNotInitialized();\r\n return this.configSubject.value as ILocalizeTokenConfig;\r\n }\r\n\r\n private isInitialized = false;\r\n\r\n init(config: ILocalizeTokenConfig) {\r\n console.log('LocalizeTokenService is initialized.');\r\n this.configSubject.next({ ...this.defaultConfig, ...config });\r\n this.isInitialized = true;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n // this.configSubject.complete();\r\n // this.isRevokingTokenSubject.complete();\r\n }\r\n\r\n private get authToken() { return this.storageGet() }\r\n private set authToken(value: IAuthToken | undefined) {\r\n value\r\n ? this.storageSet(value)\r\n : LocalizeToken.storage.delete(this.config.authTokenName!);\r\n }\r\n\r\n get refreshToken() { return LocalizeToken.storage.get(this.config.refreshTokenName!) }\r\n get accessToken() { return this.authToken?.token }\r\n\r\n set accessToken(value: string | undefined) {\r\n value && (this.authToken = { token: value, revoke: false })\r\n }\r\n\r\n get isRevokingToken() { return this.isRevokingTokenSubject.value /* this.authToken?.revoke ?? false */ }\r\n\r\n set isRevokingToken(value: boolean) {\r\n this.isRevokingTokenSubject.next(value);\r\n this.authToken && (this.authToken = { ...this.authToken, revoke: value })\r\n }\r\n\r\n tenantToken(name: string | undefined) {\r\n if (!name) return undefined;\r\n return LocalizeToken.storage.get(name)\r\n }\r\n\r\n private storageGet() {\r\n try {\r\n const encoded = LocalizeToken.storage.get(this.config.authTokenName!);\r\n const decoded = atob(encoded || '');\r\n return JSON.parse(decoded) as IAuthToken;\r\n } catch {\r\n return undefined\r\n }\r\n }\r\n\r\n private storageSet(value: IAuthToken) {\r\n const base64 = btoa(JSON.stringify(value));\r\n LocalizeToken.storage.set(this.config.authTokenName!, base64);\r\n }\r\n\r\n tokensValid(tenantTokenName?: string): boolean {\r\n return !!this.refreshToken?.length\r\n && (!this.config.needTenant || !!this.tenantToken(tenantTokenName)?.length);\r\n }\r\n\r\n decodeToken = (token: string) => jwt_decode.jwtDecode<JwtPayload>(token);\r\n get decodeRefreshToken() {\r\n const token = LocalizeToken.storage.get(this.config.refreshTokenName!);\r\n return !token ? null : this.decodeToken(token);\r\n }\r\n\r\n private throwIfNotInitialized() {\r\n if (!this.isInitialized) {\r\n throw new Error('LocalizeTokenService is not initialized. Call init() method before using it.');\r\n }\r\n }\r\n\r\n}\r\n","\r\n/**\r\n * Http method options\r\n */\r\nexport enum EMethod {\r\n POST = 'post',\r\n GET = 'get',\r\n PUT = 'put',\r\n DELETE = 'delete',\r\n PATCH = 'patch',\r\n}\r\n\r\nexport interface IOnConnectionError {\r\n /**\r\n * Callback function to execute when a connection error occurs.\r\n * This function should return a Promise or any value.\r\n */\r\n callback?: (error: INormalizedError) => Promise<void> | any;\r\n /**\r\n * If true, the request will block the screen with overlay on connection errors.\r\n * Default is false.\r\n */\r\n blockScreen?: boolean;\r\n\r\n /** Optional z-index for the block screen overlay.\r\n * Default is 10000.\r\n */\r\n blockScreenZIndex?: number;\r\n\r\n /**\r\n * Optional message to display when a connection error occurs.\r\n */\r\n message?: string;\r\n suggestionMessage?: string;\r\n}\r\n\r\ninterface IRetryOptions {\r\n\r\n /**\r\n * Maximum number of retries for a failed request.\r\n * Default is 100.\r\n */\r\n maxRetries?: number;\r\n\r\n /**\r\n * Delay in milliseconds before retrying a failed request.\r\n * Default is 500ms.\r\n */\r\n delay?: number;\r\n\r\n /**\r\n * Function to determine if a request should be retried based on the error.\r\n * If not provided, the default function will retry for network errors and server errors (status 500-599).\r\n * @param error - The error object from the failed request.\r\n * @returns true if the request should be retried, false otherwise.\r\n */\r\n retryFunction?: (error: INormalizedError) => Promise<boolean> | any;\r\n\r\n /**\r\n * Function to execute when a connection error occurs.\r\n * This function should return a Promise or any value.\r\n */\r\n onConnectionError?: IOnConnectionError;\r\n\r\n}\r\n\r\nexport interface ILocalizeApiConfigs {\r\n tenantTokenName?: string;\r\n onPrepareRequest?: () => Promise<void> | any;\r\n onAutoLogout?: () => Promise<void> | any;\r\n onRevokeUnauthorized?: () => Promise<void> | any;\r\n\r\n waitEachRequest?: {\r\n milliseconds: number;\r\n };\r\n enableRequestCancellation?: boolean;\r\n\r\n /**\r\n * Config for retrying failed requests.\r\n * If not provided, the default retry options will be used.\r\n */\r\n retryOptions?: IRetryOptions;\r\n}\r\n\r\nexport interface IApiOptions {\r\n headers?: { [key: string]: string };\r\n method: EMethod;\r\n requestUrl: string;\r\n requestBody?: any;\r\n isFormData?: boolean;\r\n /**\r\n * If true, the request will use the refresh token for authorization.\r\n */\r\n refreshToken?: boolean;\r\n}\r\n\r\nexport interface IHeader {\r\n [key: string]: string;\r\n}\r\n\r\nexport interface INormalizedError {\r\n code: string;\r\n message: string;\r\n details?: any;\r\n status: number;\r\n}\r\n","import { HttpClient, HttpErrorResponse, HttpHeaders } from \"@angular/common/http\";\r\nimport { IApiOptions, ILocalizeApiConfigs, INormalizedError, IOnConnectionError } from \"./interfaces\";\r\nimport { takeUntil, catchError, throwError, Subject } from \"rxjs\";\r\nimport { waitFor } from \"../localize.token\";\r\nimport { LOCALIZE_API_ASSETS } from \"./localize.api.assets\";\r\n\r\ninterface IRequestInstance {\r\n client: HttpClient;\r\n destroy$: () => Subject<void>;\r\n}\r\n\r\ninterface IRetryOptions {\r\n maxRetries: () => number;\r\n delay: number;\r\n callback: () => Promise<any> | any;\r\n retryUnless?: (error: any) => boolean;\r\n onError?: (error: any) => Promise<void> | any;\r\n connectionError?: IOnConnectionError\r\n}\r\n\r\nclass LocalizeApiHelper {\r\n\r\n readonly defaultRetryOptions: Partial<IRetryOptions> = {\r\n connectionError: {\r\n message: 'Connection error occurred. Please wait',\r\n blockScreen: true,\r\n blockScreenZIndex: 10000\r\n }\r\n };\r\n\r\n async performRetry<T = any>(options: IRetryOptions): Promise<T> {\r\n let attempts = 0;\r\n let lastError: any;\r\n let consoleCount = 0;\r\n\r\n // Merge default retry options with provided options\r\n options = { ...this.defaultRetryOptions, ...options }\r\n\r\n let styleElement: HTMLStyleElement | undefined;\r\n\r\n while (attempts < options.maxRetries()) {\r\n try {\r\n const result = await options.callback();\r\n this.removeBlocker(styleElement);\r\n return result;\r\n\r\n } catch (error: any) {\r\n lastError = error;\r\n\r\n if (consoleCount >= 7) {\r\n console.clear();\r\n consoleCount = 0;\r\n }\r\n\r\n if (options.retryUnless && !options.retryUnless(error))\r\n throw error; // If the error should not be retried, rethrow it\r\n\r\n // Handle connection error\r\n styleElement = await this.onConnectionError(options, error);\r\n\r\n if (options.onError)\r\n await this.invokeHook(options.onError.bind(this, error));\r\n\r\n if (attempts >= options.maxRetries() - 1)\r\n throw error;\r\n\r\n attempts++;\r\n consoleCount++;\r\n console.warn(`Attempt ${attempts} failed. Retrying...`, error);\r\n await waitFor(options.delay);\r\n }\r\n }\r\n\r\n console.warn(`Failed after ${options.maxRetries} attempts`);\r\n throw lastError;\r\n }\r\n\r\n async performRequestWithRetry<T = any>(\r\n options: IApiOptions,\r\n config: ILocalizeApiConfigs,\r\n performRequest: <T = any>(options: IApiOptions) => Promise<T>\r\n ): Promise<T> {\r\n\r\n const retryUnless = config.retryOptions?.retryFunction\r\n || this.isConnectionError;\r\n\r\n return await this.performRetry({\r\n connectionError: config.retryOptions?.onConnectionError,\r\n maxRetries: () => config.retryOptions?.maxRetries ?? 1000,\r\n delay: config.retryOptions?.delay ?? 500,\r\n callback: () => performRequest<T>(options),\r\n retryUnless: retryUnless,\r\n })\r\n }\r\n\r\n buildUrl(baseUrl: string, path: string): string {\r\n const normalizedUrl = `${baseUrl.trim().replace(/\\/?$/, '/')}${path.trim().replace(/^\\//, '')}`;\r\n return normalizedUrl.endsWith('/')\r\n ? normalizedUrl.slice(0, -1)\r\n : normalizedUrl;\r\n }\r\n\r\n normalizeError(error: HttpErrorResponse): INormalizedError {\r\n return {\r\n code: error.error?.code || `HTTP_${error.status}`,\r\n message: error.error?.message || error.message,\r\n details: error.error?.details,\r\n status: error.status\r\n };\r\n }\r\n\r\n async invokeHook(callback?: () => Promise<any> | any): Promise<any> {\r\n if (!callback) return;\r\n\r\n const result = callback();\r\n if (result instanceof Promise) {\r\n await result;\r\n }\r\n }\r\n\r\n createRequest<T = any>(\r\n instance: Required<IRequestInstance>,\r\n method: string,\r\n url: string,\r\n body: any,\r\n options: { headers: HttpHeaders }\r\n ) {\r\n const request$ = instance.client.request<T>(method, url, {\r\n ...options,\r\n body,\r\n observe: 'response',\r\n }).pipe(\r\n takeUntil(instance.destroy$()),\r\n catchError((error: HttpErrorResponse) => {\r\n // Convert to a non-observable error to handle in the promise\r\n return throwError(() => this.normalizeError(error));\r\n })\r\n );\r\n\r\n return request$;\r\n }\r\n\r\n defaultRetryFunction(error: INormalizedError): boolean {\r\n\r\n // Don't retry for other errors (like 400, 401, 403, etc.)\r\n if (!this.isConnectionError(error))\r\n throw error;\r\n\r\n return true;\r\n }\r\n\r\n isConnectionError(error: INormalizedError): boolean {\r\n const isNetworkError = error.status === 0;\r\n const isServerError = error.status >= 1000 && error.status < 600;\r\n return isNetworkError || isServerError;\r\n }\r\n\r\n async onConnectionError(\r\n options: IRetryOptions,\r\n error: any\r\n ): Promise<Promise<void> | any> {\r\n\r\n if (!options.connectionError)\r\n return;\r\n\r\n let styleElement: HTMLStyleElement | undefined;\r\n if (this.isConnectionError(error)) {\r\n\r\n styleElement = this.screenBlocker(options, error, true);\r\n\r\n await this.invokeHook(options.connectionError.callback?.bind(this, error));\r\n return styleElement;\r\n } else {\r\n this.screenBlocker(options, error, false);\r\n styleElement?.remove();\r\n }\r\n }\r\n\r\n screenBlocker(optons: IRetryOptions,\r\n error?: any,\r\n add: boolean = true): HTMLStyleElement | undefined {\r\n\r\n if (!optons.connectionError?.blockScreen)\r\n return;\r\n\r\n if (error instanceof HttpErrorResponse)\r\n error = this.normalizeError(error);\r\n\r\n const message = optons.connectionError?.message\r\n || 'Connection error occurred. Please wait';\r\n const errorMessage = error?.message || 'An error occurred';\r\n const suggestinMessage = optons.connectionError?.suggestionMessage\r\n || 'Please check your internet connection or the server status.';\r\n\r\n const zIndex = optons.connectionError?.blockScreenZIndex || 10000;\r\n\r\n const body = document.body;\r\n const blcokerHtml = `\r\n <div class=\"lze-blocker\">\r\n ${LOCALIZE_API_ASSETS.network.noConnection}\r\n <div class=\"lze-blocker__message\">\r\n ${message}\r\n <span class=\"lze-blocker__dotting\">\r\n <span class=\"lze-blocker__dot\"></span>\r\n <span class=\"lze-blocker__dot\"></span>\r\n <span class=\"lze-blocker__dot\"></span>\r\n </span>\r\n </div>\r\n <div class=\"lze-blocker__error\">${errorMessage}</div>\r\n <div class=\"lze-blocker__error_suggestion\">${suggestinMessage}</div>\r\n </div>\r\n `;\r\n const style = `\r\n div.lze-blocker {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n background: rgba(0, 0, 0, 0.85) !important;\r\n z-index: ${zIndex};\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n flex-direction: column;\r\n color: #fff !important;\r\n font-family: Arial, sans-serif;\r\n text-align: center;\r\n padding: 20px;\r\n box-sizing: border-box;\r\n overflow: hidden;\r\n user-select: none;\r\n }\r\n\r\n svg#lze-no-connection {\r\n width: 75px;\r\n height: 75px;\r\n margin-bottom: 20px;\r\n }\r\n \r\n div.lze-blocker__message {\r\n color: #fff !important;\r\n font-size: 18px !important;\r\n margin-bottom: 10px;\r\n }\r\n \r\n .lze-blocker__dotting {\r\n display: inline-block;\r\n vertical-align: middle;\r\n }\r\n span.lze-blocker__dot {\r\n display: inline-block;\r\n width: 7px;\r\n height: 7px;\r\n background-color: #ffffff !important;\r\n border-radius: 50%;\r\n margin-left: 3px;\r\n opacity: 0.3;\r\n animation: dotting 1s infinite;\r\n }\r\n .lze-blocker__dot:nth-child(1) {\r\n animation-delay: 0s;\r\n opacity: 1;\r\n }\r\n .lze-blocker__dot:nth-child(2) {\r\n animation-delay: 0.2s;\r\n }\r\n .lze-blocker__dot:nth-child(3) {\r\n animation-delay: 0.4s;\r\n }\r\n\r\n @keyframes dotting {\r\n 0%, 80%, 100% { opacity: 0.3; }\r\n 40% { opacity: 1; }\r\n }\r\n\r\n div.lze-blocker__error {\r\n color: #f00;\r\n font-size: 14px !important;\r\n margin-bottom: 10px;\r\n text-shadow: 0 0 1px #ff5f5f !important;\r\n }\r\n\r\n div.lze-blocker__error_suggestion {\r\n color: #ccc !important;\r\n font-size: 14px !important;\r\n margin-top: 10px;\r\n }\r\n \r\n @keyframes spin {\r\n 0% { transform: rotate(0deg); }\r\n 100% { transform: rotate(360deg); }\r\n }\r\n `;\r\n\r\n const styleElement = document.createElement('style');\r\n\r\n if (add) {\r\n if (!document.querySelector('.lze-blocker')) {\r\n styleElement.innerHTML = style;\r\n document.head.appendChild(styleElement);\r\n body.insertAdjacentHTML('beforeend', blcokerHtml);\r\n }\r\n } else {\r\n this.removeBlocker(styleElement);\r\n }\r\n\r\n return styleElement;\r\n }\r\n\r\n private removeBlocker(styleElement: HTMLStyleElement | undefined): void {\r\n const blocker = document.querySelector('.lze-blocker');\r\n blocker?.remove();\r\n styleElement?.remove();\r\n }\r\n}\r\n\r\nexport const ApiHelper = new LocalizeApiHelper();","import { Injectable, OnDestroy } from \"@angular/core\";\r\nimport { LocalizeTokenService } from \"./localize.token.service\";\r\nimport { HttpClient, HttpErrorResponse, HttpHeaders } from \"@angular/common/http\";\r\nimport { LocalizeToken, waitFor, waitUntil } from \"./localize.token\";\r\nimport { BehaviorSubject, Subject } from \"rxjs\";\r\nimport { ILocalizeApiConfigs, IApiOptions, EMethod, IHeader } from \"./helpers/interfaces\";\r\nimport { ApiHelper } from \"./public-api\";\r\n\r\nconst SCHEMES = LocalizeToken.httpHeaders;\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocalizeApiService implements OnDestroy {\r\n private readonly destroy$ = new Subject<void>();\r\n private readonly configSubject = new BehaviorSubject<Partial<ILocalizeApiConfigs>>({});\r\n readonly isRequestingSubject = new BehaviorSubject<boolean>(false);\r\n readonly isResolvingStartupSubject = new BehaviorSubject<boolean>(false);\r\n get isResolvingStartup() { return this.isResolvingStartupSubject.value; }\r\n\r\n get needTenant(): boolean { return this.localizeTokenService.config.needTenant; }\r\n\r\n get isRequesting() { return this.isRequestingSubject.value; }\r\n get isRevokingToken() { return this.localizeTokenService.isRevokingToken; }\r\n set isRevokingToken(value: boolean) { this.localizeTokenService.isRevokingToken = value; }\r\n\r\n get accessToken(): string | undefined { return this.localizeTokenService.accessToken; }\r\n set accessToken(value: string | undefined) { this.localizeTokenService.accessToken = value; }\r\n\r\n get refreshToken(): string | undefined { return this.localizeTokenService.refreshToken; }\r\n get tenantToken(): string | undefined { return this.localizeTokenService.tenantToken(this.config.tenantTokenName); }\r\n\r\n private defaultConfig: Partial<ILocalizeApiConfigs> = {\r\n waitEachRequest: { milliseconds: 0 },\r\n enableRequestCancellation: true,\r\n\r\n retryOptions: {\r\n maxRetries: 1000,\r\n delay: 1000,\r\n retryFunction: ApiHelper.defaultRetryFunction.bind(this),\r\n },\r\n\r\n };\r\n\r\n private get config(): Partial<ILocalizeApiConfigs> {\r\n this.validateConfig();\r\n return this.configSubject.value;\r\n }\r\n\r\n private apiOptions: Partial<IApiOptions> = {\r\n method: EMethod.GET,\r\n requestBody: null,\r\n };\r\n\r\n constructor(readonly httpClient: HttpClient,\r\n private readonly localizeTokenService: LocalizeTokenService\r\n ) { }\r\n\r\n /**\r\n * Initialize the API service.\r\n * @param apiConfigs - The API configurations.\r\n */\r\n init(apiConfigs: ILocalizeApiConfigs) {\r\n console.log('LocalizeApiService is initialized.');\r\n this.configSubject.next({ ...this.defaultConfig, ...apiConfigs });\r\n }\r\n\r\n cancelPendingRequests(): void {\r\n this.config.enableRequestCancellation\r\n && this.destroy$.next();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n // this.isResolvingStartupSubject.complete();\r\n // this.isRequestingSubject.complete();\r\n // this.configSubject.complete();\r\n }\r\n\r\n /**\r\n * A higher-order function that returns a curried function for making API requests.\r\n *\r\n * @param baseUrl - The base URL of the API.\r\n * @returns A curried function that can be used to make API requests.\r\n */\r\n func = (baseUrl: string) =>\r\n <T = any>(path: string, method: EMethod = EMethod.GET, reqBody: any = null, reqHeaders?: IHeader) =>\r\n this.request<T>(baseUrl, path, method, reqBody, reqHeaders)\r\n\r\n public async request<T = any>(baseUrl: string,\r\n path: string,\r\n method: EMethod = EMethod.GET,\r\n reqBody: any = null,\r\n reqHeaders?: IHeader): Promise<T> {\r\n\r\n await waitUntil(() => !this.isResolvingStartup, 500);\r\n\r\n await ApiHelper.invokeHook(this.config.onPrepareRequest);\r\n\r\n const apiOptions = this.buildApiOptions(baseUrl, path, method, reqBody, reqHeaders);\r\n\r\n try {\r\n await this.toWaitForPreviousRequest();\r\n\r\n return await ApiHelper.performRequestWithRetry<T>(\r\n apiOptions,\r\n this.config,\r\n this.performRequest.bind(this)\r\n );\r\n\r\n }\r\n catch (error: any) {\r\n return await this.handleOnRequestError(error, apiOptions);\r\n }\r\n }\r\n\r\n private async handleOnRequestError(error: HttpErrorResponse, options: IApiOptions): Promise<any> {\r\n if (error.status !== 401)\r\n throw error;\r\n\r\n await waitUntil(() => !this.isResolvingStartup, 500);\r\n\r\n return await ApiHelper.performRetry({\r\n maxRetries: () => 1000,\r\n delay: 500,\r\n retryUnless: (error) => error.status === 401 || ApiHelper.isConnectionError(error),\r\n callback: async () => {\r\n // Only handle 401 Unauthorized errors\r\n await this.revokeToken();\r\n\r\n // Retry the request with the new access token\r\n return await this.performRequest(options);\r\n }\r\n })\r\n\r\n }\r\n\r\n private async performRequest<T = any>(options: IApiOptions): Promise<T> {\r\n\r\n // Build the request options\r\n const buildOptions = { headers: this.buildHeaderOptions(options) };\r\n\r\n // Create the request observable\r\n const request$ = ApiHelper.createRequest<T>({\r\n client: this.httpClient,\r\n destroy$: () => this.destroy$\r\n }, options.method, options.requestUrl, options.requestBody, buildOptions);\r\n\r\n // Set the isRequesting state to true before making the request\r\n this.isRequestingSubject.next(true);\r\n\r\n const response = await new Promise<any>((resolve, reject) =>\r\n request$.subscribe({ next: (res) => resolve(res.body), error: reject }));\r\n\r\n // Reset the isRequesting state after the request completes\r\n this.isRequestingSubject.next(false);\r\n\r\n return response;\r\n }\r\n\r\n private async revokeToken(): Promise<void> {\r\n\r\n try {\r\n if (await this.interceptRevokeToken())\r\n return;\r\n\r\n this.isRevokingToken = true;\r\n\r\n const apiOptions: IApiOptions = {\r\n ...this.buildApiOptions(this.localizeTokenService.config.revokeTokenUrl),\r\n refreshToken: true,\r\n }\r\n\r\n // const revokeToken = await this.performRequest(apiOptions);\r\n const revokeToken = await ApiHelper.performRequestWithRetry(\r\n apiOptions,\r\n this.config,\r\n this.performRequest.bind(this)\r\n );\r\n\r\n await this.handleOnTokenRevoked(revokeToken);\r\n\r\n } catch (error: any) {\r\n // Handle the error, log it\r\n await ApiHelper.invokeHook(this.config.onAutoLogout);\r\n\r\n } finally {\r\n // Reset the revoking token state\r\n this.isRevokingToken = false;\r\n }\r\n }\r\n\r\n /** default http request options */\r\n private buildHeaderOptions(options: IApiOptions): HttpHeaders {\r\n\r\n const headers: { [key: string]: string } = {\r\n ...(options.refreshToken && { [SCHEMES.X_REFRESH_TOKEN]: `${this.refreshToken}` }),\r\n ...(!options.isFormData && { [SCHEMES.CONTENT_TYPE]: 'application/json' }),\r\n [SCHEMES.AUTHORIZATION]: `Bearer ${this.accessToken}`,\r\n ...(this.needTenant && { [SCHEMES.X_TENANT]: `${this.tenantToken}` })\r\n };\r\n\r\n return new HttpHeaders({ ...headers, ...options.headers });\r\n }\r\n\r\n private buildApiOptions(\r\n baseUrl: string,\r\n path: string = '',\r\n method: EMethod = EMethod.GET,\r\n requestBody: any = null,\r\n headers?: { [key: string]: string }\r\n ): IApiOptions {\r\n\r\n const requestUrl = ApiHelper.buildUrl(baseUrl, path);\r\n const isFormData = requestBody && requestBody instanceof FormData;\r\n return {\r\n ...this.apiOptions,\r\n ...{ headers, method, requestUrl, requestBody, isFormData }\r\n };\r\n }\r\n\r\n\r\n private async toWaitForPreviousRequest() {\r\n this.isRevokingToken &&\r\n (await waitUntil(() => !this.isRevokingToken));\r\n\r\n // to wait for each request in 50ms, even if the request is not completed\r\n this.config.waitEachRequest?.milliseconds &&\r\n (await waitFor(this.config.waitEachRequest.milliseconds, this.isRequesting));\r\n }\r\n\r\n\r\n private async handleOnTokenRevoked(response: any): Promise<void> {\r\n\r\n if (response?.status) {\r\n // If the response is successful, update the access token\r\n this.accessToken = response.message;\r\n\r\n } else {\r\n // If the response indicates an error, invoke the onRevokeUnauthorized hook\r\n console.warn('Token revocation failed, refresh token is expired.', response.message);\r\n await ApiHelper.invokeHook(this.config.onRevokeUnauthorized);\r\n }\r\n\r\n }\r\n\r\n private async interceptRevokeToken() {\r\n\r\n if (this.isRevokingToken) {\r\n console.warn('Token is already being revoked. Waiting for the current operation to complete...');\r\n await waitUntil(() => !this.isRevokingToken);\r\n return true;\r\n }\r\n\r\n if (!this.refreshToken) {\r\n // await ApiHelper.invokeHook(this.apiConfigs.onAutoLogout);\r\n throw new Error('Refresh token is missing. Please login again.');\r\n }\r\n return false;\r\n }\r\n\r\n validateConfig(): void {\r\n const config = this.configSubject.value as ILocalizeApiConfigs;\r\n if (this.localizeTokenService.config.needTenant && !config.tenantTokenName?.trim().length) {\r\n throw Error('Tenant token is required but tenantTokenName is not configured');\r\n }\r\n\r\n if (!this.localizeTokenService.config.revokeTokenUrl.trim().length) {\r\n throw Error('Revoke token URL is not configured - token refresh will not work');\r\n }\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { LocalizeTokenService } from './localize.token.service';\r\nimport { LocalizeApiService } from './localize.api.service';\r\n\r\n@NgModule({\r\n providers: [\r\n LocalizeTokenService,\r\n LocalizeApiService\r\n ]\r\n})\r\nexport class LocalizeTokenModule { }","import { HttpClient } from \"@angular/common/http\";\r\nimport {\r\n ChangeDetectorRef,\r\n Component,\r\n OnInit,\r\n ViewEncapsulation,\r\n} from \"@angular/core\";\r\nimport { MessageService } from \"primeng/api\";\r\nimport { DynamicDialogConfig, DynamicDialogRef } from \"primeng/dynamicdialog\";\r\nimport { JwtPayload, LocalizeTokenService } from \"../localize-token/localize.token.service\";\r\nimport { LocalizeToken } from \"../localize-token/localize.token\";\r\nimport { ILoginDialogConfig, ILoginDialogProperties } from \"./localize-logindlg.service\";\r\nimport { DomSanitizer } from \"@angular/platform-browser\";\r\n\r\n@Component({\r\n styles: [`\r\n #login-dlg-wrap {\r\n width: 100%;\r\n max-width: 400px;\r\n margin: 0 auto;\r\n padding: 30px;\r\n height: 100%;\r\n }\r\n \r\n .login-dlg-elm {\r\n margin-top: 1rem;\r\n }\r\n\r\n .login-dlg-elm.login-dlg-suggest {\r\n display: flex ;\r\n align-items: center;\r\n user-select: none;\r\n border-bottom: solid 1px #ddd;\r\n border-radius: 5px;\r\n padding: 5px 10px;\r\n background: #f9f9f9;\r\n box-shadow: 1px 5px 10px -12px #000;\r\n }\r\n \r\n #login-dlg-header {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n }\r\n \r\n #login-dlg-header h3 {\r\n font-weight: bold;\r\n font-size: 0.9rem;\r\n color: orange;\r\n text-align: center;\r\n }\r\n \r\n #login-logo {\r\n height: 55px;\r\n width: 55px;\r\n /* background: url(\"/assets/images/logo-300px.png\") no-repeat; */\r\n background-size: contain !important;\r\n }\r\n \r\n #login-dlg-content .p-inputgroup {\r\n height: 45px;\r\n }\r\n \r\n #login-dlg-content .p-inputgroup .p-inputgroup-addon {\r\n height: 45px;\r\n border-radius: 15px 0 0 15px;\r\n width: 50px;\r\n }\r\n #login-dlg-content *{\r\n font-size: .9rem;\r\n /* font-family: 'Lexend', 'Roboto', sans-serif, 'material-icons-round'; */\r\n }\r\n \r\n #login-dlg-content .p-inputgroup .p-inputgroup-addon * {\r\n font-size: 1rem;\r\n }\r\n \r\n #login-dlg-content .p-inputgroup input {\r\n height: 45px;\r\n border-radius: 0 15px 15px 0;\r\n }\r\n \r\n #login-dlg-content button {\r\n height: 45px;\r\n border-radius: 15px;\r\n }\r\n \r\n /*check animation block*/\r\n \r\n .check-animation-wrap {\r\n top: 0;\r\n left: 0;\r\n position: absolute;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n width: 100%;\r\n height: calc(100% - 200px);\r\n min-height: 400px;\r\n }\r\n \r\n .check-main-container {\r\n width: 100%;\r\n height: 100vh;\r\n display: flex;\r\n flex-flow: column;\r\n justify-content: center;\r\n align-items: center;\r\n }\r\n \r\n .check-container {\r\n width: 6.25rem;\r\n height: 7.5rem;\r\n display: flex;\r\n flex-flow: column;\r\n align-items: center;\r\n justify-content: space-between;\r\n }\r\n \r\n .check-container .check-background {\r\n width: 100%;\r\n height: calc(100% - 1.25rem);\r\n background: linear-gradient(to bottom right, #5de593, #41d67c);\r\n box-shadow: 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset;\r\n transform: scale(0.84);\r\n border-radius: 50%;\r\n animation: animateContainer 0.75s ease-out forwards 0.75s;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n opacity: 0;\r\n }\r\n \r\n .check-container .check-background svg {\r\n width: 65%;\r\n transform: translateY(0.25rem);\r\n stroke-dasharray: 80;\r\n stroke-dashoffset: 80;\r\n animation: animateCheck 0.35s forwards 1.25s ease-out;\r\n min-width: auto !important;\r\n }\r\n \r\n .check-container .check-shadow {\r\n bottom: calc(-15% - 5px);\r\n left: 0;\r\n border-radius: 50%;\r\n background: radial-gradient(closest-side, rgba(73, 218, 131, 1), transparent);\r\n animation: animateShadow 0.75s ease-out forwards 0.75s;\r\n }\r\n \r\n @keyframes animateContainer {\r\n 0% {\r\n opacity: 0;\r\n transform: scale(0);\r\n box-shadow: 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 25% {\r\n opacity: 1;\r\n transform: scale(0.9);\r\n box-shadow: 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 43.75% {\r\n transform: scale(1.15);\r\n box-shadow: 0px 0px 0px 43.334px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 62.5% {\r\n transform: scale(1);\r\n box-shadow: 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 21.667px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 81.25% {\r\n box-shadow: 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 100% {\r\n opacity: 1;\r\n box-shadow: 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n }\r\n \r\n @keyframes animateCheck {\r\n from {\r\n stroke-dashoffset: 80;\r\n }\r\n \r\n to {\r\n stroke-dashoffset: 0;\r\n }\r\n }\r\n \r\n @keyframes animateShadow {\r\n 0% {\r\n opacity: 0;\r\n width: 100%;\r\n height: 15%;\r\n }\r\n \r\n 25% {\r\n opacity: 0.25;\r\n }\r\n \r\n 43.75% {\r\n width: 40%;\r\n height: 7%;\r\n opacity: 0.35;\r\n }\r\n \r\n 100% {\r\n width: 85%;\r\n height: 15%;\r\n opacity: 0.25;\r\n }\r\n }\r\n #login-dlg-wrap .loader-wrap {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n height:100%;\r\n width:100%;\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n z-index: 100;\r\n background: #ffffff42;\r\n backdrop-filter: blur(1px);\r\n }\r\n\r\n #login-dlg-wrap .login-dlg-loader {\r\n border: 15px solid #e7e7e7;\r\n border-top: 15px solid #52dba1;\r\n border-radius: 50%;\r\n width: 100px;\r\n height: 100px;\r\n animation: spinloader 2s linear infinite;\r\n }\r\n\r\n #login-dlg-wrap .loader-wrap::before {\r\n content: \"\";\r\n position: absolute;\r\n width: 70px;\r\n height: 70px;\r\n transform: translate(-50%, -50%);\r\n z-index: 1;\r\n border: 15px solid #e7e7e700;\r\n border-top: 15px solid #52dba1c9;\r\n border-radius: 50%;\r\n animation: spinloader .75s linear infinite;\r\n }\r\n\r\n @keyframes spinloader {\r\n 0% { transform: rotate(0deg); }\r\n 100% { transform: rotate(360deg); }\r\n }\r\n `],\r\n template: `<p-toast key=\"$login-dlg\" position=\"top-center\"></p-toast>\r\n <div id=\"login-dlg-wrap\">\r\n <div id=\"login-dlg-header\">\r\n <div id=\"login-logo\" class=\"p-mb-2\" style=\"background: url('{{properties.logoImage}}') no-repeat\"></div>\r\n <h3 *ngIf=\"!success\" [innerHTML]=\"sanitizedTitle\"></h3>\r\n <h3 *ngIf=\"success\" style=\"color:green !important;\">{{properties.loginSuccessMessage}}</h3>\r\n </div>\r\n <div id=\"login-dlg-content\">\r\n <ng-container *ngIf=\"!success\">\r\n <div *ngIf=\"loading\" class=\"loader-wrap\">\r\n <div class=\"login-dlg-loader\"></div>\r\n </div>\r\n <div class=\"login-dlg-elm\">\r\n <div class=\"p-inputgroup\">\r\n <span class=\"p-inputgroup-addon\">\r\n <i class=\"material-icons-round\">person</i>\r\n </span>\r\n <input disabled pInputText type=\"text\" placeholder=\"{{properties.username?.placeHolder}}\" [value]=\"decodeToken?.email\" />\r\n </div>\r\n </div>\r\n \r\n <div class=\"login-dlg-elm\">\r\n <div class=\"p-inputgroup\">\r\n <span class=\"p-inputgroup-addon\">\r\n <i class=\"material-icons-round\">lock</i>\r\n </span>\r\n <input [disabled]=\"loading\" (keydown.enter)=\"clickLogin()\" pInputText type=\"password\" \r\n placeholder=\"{{properties.password?.placeHolder}}\" [(ngModel)]=\"password\"\r\n autofocus />\r\n </div>\r\n </div>\r\n <div class=\"login-dlg-elm\">\r\n <button style=\"width: 100%;\" pButton type=\"button\" label=\"{{properties.loginButton?.placeHolder}}\" (click)=\"clickLogin()\"\r\n [disabled]=\"!password || loading\"></button>\r\n </div>\r\n \r\n <div class=\"login-dlg-elm login-dlg-suggest\" style=\"display:flex;align-items: center;user-select: none;\">\r\n <span>{{properties.logoutButton?.message}}</span>\r\n <button class=\"p-button-text\" pButton type=\"button\" label=\"{{properties.logoutButton?.placeHolder}}\" \r\n (click)=\"clickLogout()\"></button>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"success\">\r\n <div style=\"margin-top:35px;\"></div>\r\n <div class=\"check-animation-wrap\">\r\n <div class=\"check-main-container\">\r\n <div class=\"check-container\">\r\n <div class=\"check-background\">\r\n <svg viewBox=\"0 0 65 51\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M7 25L27.3077 44L58.5 7\" stroke=\"white\" stroke-width=\"13\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>`,\r\n selector: \"app-localize-logindlg\",\r\n providers: [MessageService],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class LocalizeLogindlgComponent implements OnInit {\r\n readonly messageKey = \"$login-dlg\";\r\n password: any;\r\n readonly decodeToken: JwtPayload | null;\r\n loading = false;\r\n success = false;\r\n private get config() { return this.tokenService.config; }\r\n private readonly loginConfig: ILoginDialogConfig\r\n\r\n private logout?: () => any\r\n private loginUrl?: string;\r\n readonly properties: ILoginDialogProperties;\r\n\r\n\r\n constructor(\r\n private readonly messageService: MessageService,\r\n private readonly cdt: ChangeDetectorRef,\r\n private readonly dlgRef: DynamicDialogRef,\r\n private readonly dlgConfig: DynamicDialogConfig,\r\n private readonly tokenService: LocalizeTokenService,\r\n private readonly httpClient: HttpClient,\r\n private readonly sanitizer: DomSanitizer\r\n ) {\r\n this.decodeToken = this.tokenService.decodeRefreshToken;\r\n this.loginConfig = this.dlgConfig.data.loginConfig;\r\n this.properties = this.loginConfig.properties!;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.dlgConfig.closable = false;\r\n this.logout = this.loginConfig.logoutFunc;\r\n this.loginUrl = this.loginConfig.loginUrl\r\n\r\n if (!this.decodeToken) {\r\n this.showMessage(\"error\", \"Token is invalid\");\r\n setTimeout(() => this.logout?.(), 2000);\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.cdt.detectChanges();\r\n }\r\n\r\n async clickLogin() {\r\n if (!this.isValidPassword) {\r\n return this.showMessage(\"error\", \"Password is required and must be at least 6 characters\");\r\n }\r\n\r\n this.loading = true;\r\n const loginRes = await this.login();\r\n if (!loginRes?.status) {\r\n return this.showMessage(\"error\", loginRes.message ?? \"An error occurred\");\r\n }\r\n\r\n this.tokenService.accessToken = loginRes.tokens.accessToken;\r\n const cookieOptions = { expires: this.loginConfig.expire ?? 365 }\r\n LocalizeToken.storage.set(this.config.refreshTokenName!, loginRes.tokens.refreshToken, cookieOptions);\r\n this.success = true;\r\n setTimeout(() => {\r\n this.dlgConfig.dismissableMask = true;\r\n this.dlgConfig.modal = false;\r\n this.dlgRef.close(true);\r\n }, 2000);\r\n }\r\n\r\n private async login() {\r\n if (!this.loginUrl?.trim().length) {\r\n this.showMessage(\"error\", \"Login url is required\");\r\n throw new Error(\"Login url is required\");\r\n }\r\n\r\n try {\r\n\r\n if (this.loginConfig.loginFunction) {\r\n console.log(\"Using custom login function\");\r\n return await this.loginConfig.loginFunction(this.decodeToken?.email ?? '', this.password.trim(), this.getHeaders());\r\n }\r\n\r\n return await new Promise<any>((resolve, reject) =>\r\n this.httpClient.post(this.loginUrl!,\r\n { password: this.password.trim() },\r\n { headers: this.getHeaders() }).subscribe({ next: resolve, error: reject }));\r\n\r\n } catch (e: any) {\r\n this.showMessage(\"error\", e.message);\r\n return null;\r\n }\r\n }\r\n\r\n private getHeaders() {\r\n return {\r\n [LocalizeToken.httpHeaders.X_REFRESH_TOKEN]: LocalizeToken.storage.get(this.config.refreshTokenName!) ?? \"\",\r\n [LocalizeToken.httpHeaders.X_TENANT]: LocalizeToken.storage.get(this.loginConfig.tenantTokenName!) ?? \"\",\r\n };\r\n }\r\n\r\n get isValidPassword(): boolean {\r\n this.loading = false;\r\n return this.properties.passwordValidator\r\n ? this.properties.passwordValidator(this.password)\r\n : this.password && this.password.trim().length >= 6 && this.password.trim().length <= 50;\r\n }\r\n\r\n clickLogout = () => this.logout?.();\r\n\r\n private showMessage(severity: string, summary: string) {\r\n this.messageService.add({ key: this.messageKey, severity, summary });\r\n this.loading = false;\r\n }\r\n\r\n get sanitizedTitle() {\r\n return this.sanitizer.bypassSecurityTrustHtml(this.properties.title ?? '');\r\n }\r\n}\r\n","import { Injectable, Injector } from '@angular/core';\nimport { DialogService, DynamicDialogConfig } from 'primeng/dynamicdialog';\nimport { LocalizeLogindlgComponent } from './localize-logindlg.component';\nexport interface ILoginDialogPlaceHolder {\n /**\n * Message to display in the input field, typically used for error messages or hints.\n * This is optional and can be used to provide additional context or instructions to the user.\n */\n message?: string;\n /**\n * Placeholder or label text for the input field\n */\n placeHolder?: string;\n}\n\nexport interface ILoginDialogProperties {\n /**\n * Title of the login dialog\n */\n title?: string;\n loginSuccessMessage?: string;\n /**\n * Logog image path or URL to display in the login dialog\n * If not provided, the \"/assets/images/logo-300px.png\" image will be used.\n */\n logoImage?: string;\n username?: ILoginDialogPlaceHolder;\n password?: ILoginDialogPlaceHolder;\n loginButton?: ILoginDialogPlaceHolder;\n logoutButton?: ILoginDialogPlaceHolder;\n /**\n * Function to validate the password.\n * If not provided, the default validation checks if the password is between 6 and 50 characters long.\n * @param password\n * @returns\n */\n passwordValidator?: (password: string) => boolean;\n}\n\nexport interface ILoginDialogConfig {\n loginUrl?: string;\n logoutUrl?: string;\n loginFunction?: (username: string, password: string, headers?: { [key: string]: string }) => Promise<any>;\n logoutFunc?: () => void;\n /**\n * Cookie expiration date in days from now. If not provided the cookie is a session cookie\n */\n expire?: number;\n tenantTokenName?: string;\n /**\n * Configuration for the login dialog.\n * This interface defines the properties that can be used to customize the login dialog's behavior and appearance\n */\n properties?: ILoginDialogProperties;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LocalizeLogindlgService {\n\n constructor(private readonly injector: Injector) { }\n\n async openLoginDialog(loginConfig: ILoginDialogConfig, config?: DynamicDialogConfig) {\n\n config = this.intercepDialogConfig(config);\n this.initConfig(loginConfig);\n\n config.data = { ...(config.data || {}), ...{ loginConfig } };\n\n const dialogService = this.injector.get(DialogService);\n const dialog = dialogService.open(LocalizeLogindlgComponent, config);\n\n await new Promise<void>((resolve) =>\n dialog.onClose.subscribe(res => {\n if (res) {\n resolve();\n }\n }));\n }\n\n private intercepDialogConfig(config?: DynamicDialogConfig) {\n config ??= {\n header: 'Login',\n style: { 'max-width': '400px', width: '100%', 'height': '650px' },\n modal: true,\n closable: false,\n showHeader: false,\n }\n\n config = {\n ...config, ...{\n contentStyle: { 'height': '100%', 'border-radius': '20px' }\n }\n }\n config.style = { ...config.style, ...{ 'border-radius': '20px' } };\n return config;\n }\n\n\n private initConfig(loginConfig: ILoginDialogConfig) {\n loginConfig ??= {}\n loginConfig.properties ??= {\n title: 'Your session is expired!<br/> Please login again to continue.',\n loginSuccessMessage: 'You have successfully logged in.',\n logoImage: '/assets/images/logo-300px.png',\n username: { placeHolder: 'Username' },\n password: { placeHolder: 'Password' },\n loginButton: { placeHolder: 'Login' },\n logoutButton: {\n message: 'No, I want to login with another user.',\n placeHolder: 'Logout'\n }\n }\n }\n}\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { LocalizeLogindlgComponent } from \"./localize-logindlg.component\";\nimport { ToastModule } from \"primeng/toast\";\nimport { InputTextModule } from \"primeng/inputtext\";\nimport { ButtonModule } from \"primeng/button\";\nimport { BrowserModule } from '@angular/platform-browser';\nimport { FormsModule } from '@angular/forms';\nimport { LocalizeLogindlgService } from \"./localize-logindlg.service\";\n\n@NgModule({\n declarations: [LocalizeLogindlgComponent],\n exports: [LocalizeLogindlgComponent],\n imports: [\n CommonModule,\n ToastModule,\n InputTextModule,\n BrowserModule,\n FormsModule,\n ButtonModule,\n ],\n providers: [LocalizeLogindlgService],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class LocalizeLogindlgModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|