@sambath999/localize-token 12.0.3

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.
@@ -0,0 +1,101 @@
1
+ import { LocalizeToken } from "./localize.token";
2
+ /**
3
+ * Assembly of @package ng2-cookies @see https://www.npmjs.com/package/ng2-cookies
4
+ *
5
+ * Reassembled by
6
+ * @author sambath999
7
+ * @date_29_09_2021
8
+ * Updated from raw parameters to
9
+ * @param {ICookieOptions} options and added another newer cookie flag
10
+ * @param {string} samesite
11
+ * @param {constant} SameSiteTypes, @param {string} strict "strict", @param {string} lax "lax", @param {string} none "none"
12
+ *
13
+ * @enum
14
+ */
15
+ export class LocalizeTokenStorageHelper {
16
+ /**
17
+ * Checks the existence of a single cookie by it's name
18
+ *
19
+ * @param {string} name Identification of the cookie
20
+ * @returns existence of the cookie
21
+ */
22
+ check(name) {
23
+ if (typeof document === "undefined")
24
+ return false;
25
+ name = encodeURIComponent(name);
26
+ const regexp = new RegExp('(?:^' + name + '|;\\s*' + name + ')=(.*?)(?:;|$)', 'g');
27
+ return regexp.test(document.cookie);
28
+ }
29
+ /**
30
+ * Retrieves a single cookie by it's name
31
+ *
32
+ * @param {string} name Identification of the Cookie
33
+ * @returns The Cookie's value
34
+ */
35
+ get(name) {
36
+ if (!this.check(name))
37
+ return undefined;
38
+ name = encodeURIComponent(name);
39
+ const regexp = new RegExp('(?:^' + name + '|;\\s*' + name + ')=(.*?)(?:;|$)', 'g');
40
+ const result = regexp.exec(document.cookie);
41
+ return result ? decodeURIComponent(result[1]) : undefined;
42
+ }
43
+ /**
44
+ * Retrieves a a list of all cookie avaiable
45
+ *
46
+ * @returns Object with all Cookies
47
+ */
48
+ getAll() {
49
+ const cookies = {};
50
+ if (document.cookie) {
51
+ const split = document.cookie.split(';');
52
+ for (const s of split) {
53
+ const currCookie = s.split('=');
54
+ currCookie[0] = currCookie[0].trim();
55
+ cookies[decodeURIComponent(currCookie[0])] = decodeURIComponent(currCookie[1]);
56
+ }
57
+ }
58
+ return cookies;
59
+ }
60
+ get defaultOptions() { return LocalizeToken.cookieOptions; }
61
+ set(name, value, options) {
62
+ options !== null && options !== void 0 ? options : (options = this.defaultOptions);
63
+ const { expires, path, domain, secure, samesite } = options;
64
+ let cookieStr = `${encodeURIComponent(name)}=${encodeURIComponent(value)};`;
65
+ if (expires) {
66
+ const dtExpires = typeof expires === 'number' ? new Date(Date.now() + expires * 864e5) : expires;
67
+ cookieStr += `expires=${dtExpires.toUTCString()};`;
68
+ }
69
+ cookieStr += path ? `path=${path};` : '';
70
+ cookieStr += domain ? `domain=${domain};` : '';
71
+ cookieStr += secure ? 'secure;' : '';
72
+ cookieStr += samesite ? `samesite=${samesite};` : '';
73
+ document.cookie = cookieStr;
74
+ }
75
+ /**
76
+ * Removes specified Cookie
77
+ *
78
+ * @param {string} name Cookie's identification
79
+ * @param {string} path Path relative to the domain where the cookie should be avaiable. Default /
80
+ * @param {string} domain Domain where the cookie should be avaiable. Default current domain
81
+ */
82
+ delete(name, path = '/', domain = window.location.hostname) {
83
+ this.set(name, '', { path, domain, expires: -1 });
84
+ }
85
+ /**
86
+ * Delete all cookie avaiable
87
+ */
88
+ deleteAll(path, domain) {
89
+ const cookies = this.getAll();
90
+ for (const cookieName of Object.keys(cookies)) {
91
+ this.delete(cookieName, path, domain);
92
+ }
93
+ }
94
+ }
95
+ export var ISameSiteType;
96
+ (function (ISameSiteType) {
97
+ ISameSiteType["strict"] = "strict";
98
+ ISameSiteType["lax"] = "lax";
99
+ ISameSiteType["none"] = "none";
100
+ })(ISameSiteType || (ISameSiteType = {}));
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUudG9rZW4uc3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbG9jYWxpemUudG9rZW4uc3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHakQ7Ozs7Ozs7Ozs7OztFQVlFO0FBQ0YsTUFBTSxPQUFPLDBCQUEwQjtJQUVyQzs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxJQUFZO1FBQ2hCLElBQUksT0FBTyxRQUFRLEtBQUssV0FBVztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ2xELElBQUksR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLFFBQVEsR0FBRyxJQUFJLEdBQUcsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbkYsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxHQUFHLENBQUMsSUFBWTtRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztZQUFFLE9BQU8sU0FBUyxDQUFDO1FBRXhDLElBQUksR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLFFBQVEsR0FBRyxJQUFJLEdBQUcsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbkYsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUMsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENB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QyxDQUFDO1NBQ3ZDO0lBQ0gsQ0FBQztDQUVGO0FBRUQsTUFBTSxDQUFOLElBQVksYUFJWDtBQUpELFdBQVksYUFBYTtJQUN2QixrQ0FBaUIsQ0FBQTtJQUNqQiw0QkFBVyxDQUFBO0lBQ1gsOEJBQWEsQ0FBQTtBQUNmLENBQUMsRUFKVyxhQUFhLEtBQWIsYUFBYSxRQUl4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2FsaXplVG9rZW4gfSBmcm9tIFwiLi9sb2NhbGl6ZS50b2tlblwiO1xyXG5cclxuXHJcbi8qKlxyXG4qIEFzc2VtYmx5IG9mIEBwYWNrYWdlIG5nMi1jb29raWVzIEBzZWUgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbmcyLWNvb2tpZXNcclxuKlxyXG4qIFJlYXNzZW1ibGVkIGJ5XHJcbiogQGF1dGhvciBzYW1iYXRoOTk5XHJcbiogQGRhdGVfMjlfMDlfMjAyMVxyXG4qIFVwZGF0ZWQgZnJvbSByYXcgcGFyYW1ldGVycyB0b1xyXG4qIEBwYXJhbSB7SUNvb2tpZU9wdGlvbnN9IG9wdGlvbnMgYW5kIGFkZGVkIGFub3RoZXIgbmV3ZXIgY29va2llIGZsYWdcclxuKiBAcGFyYW0ge3N0cmluZ30gc2FtZXNpdGVcclxuKiBAcGFyYW0ge2NvbnN0YW50fSBTYW1lU2l0ZVR5cGVzLCBAcGFyYW0ge3N0cmluZ30gc3RyaWN0IFwic3RyaWN0XCIsIEBwYXJhbSB7c3RyaW5nfSBsYXggXCJsYXhcIiwgQHBhcmFtIHtzdHJpbmd9IG5vbmUgXCJub25lXCJcclxuKlxyXG4qIEBlbnVtXHJcbiovXHJcbmV4cG9ydCBjbGFzcyBMb2NhbGl6ZVRva2VuU3RvcmFnZUhlbHBlciB7XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyB0aGUgZXhpc3RlbmNlIG9mIGEgc2luZ2xlIGNvb2tpZSBieSBpdCdzIG5hbWVcclxuICAgKlxyXG4gICAqIEBwYXJhbSAge3N0cmluZ30gbmFtZSBJZGVudGlmaWNhdGlvbiBvZiB0aGUgY29va2llXHJcbiAgICogQHJldHVybnMgZXhpc3RlbmNlIG9mIHRoZSBjb29raWVcclxuICAgKi9cclxuICBjaGVjayhuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBmYWxzZTtcclxuICAgIG5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQobmFtZSk7XHJcbiAgICBjb25zdCByZWdleHAgPSBuZXcgUmVnRXhwKCcoPzpeJyArIG5hbWUgKyAnfDtcXFxccyonICsgbmFtZSArICcpPSguKj8pKD86O3wkKScsICdnJyk7XHJcbiAgICByZXR1cm4gcmVnZXhwLnRlc3QoZG9jdW1lbnQuY29va2llKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyBhIHNpbmdsZSBjb29raWUgYnkgaXQncyBuYW1lXHJcbiAgICpcclxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWUgSWRlbnRpZmljYXRpb24gb2YgdGhlIENvb2tpZVxyXG4gICAqIEByZXR1cm5zIFRoZSBDb29raWUncyB2YWx1ZVxyXG4gICAqL1xyXG4gIGdldChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKCF0aGlzLmNoZWNrKG5hbWUpKSByZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuICAgIG5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQobmFtZSk7XHJcbiAgICBjb25zdCByZWdleHAgPSBuZXcgUmVnRXhwKCcoPzpeJyArIG5hbWUgKyAnfDtcXFxccyonICsgbmFtZSArICcpPSguKj8pKD86O3wkKScsICdnJyk7XHJcbiAgICBjb25zdCByZXN1bHQgPSByZWdleHAuZXhlYyhkb2N1bWVudC5jb29raWUpO1xyXG4gICAgcmV0dXJuIHJlc3VsdCA/IGRlY29kZVVSSUNvbXBvbmVudChyZXN1bHRbMV0pIDogdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIGEgYSBsaXN0IG9mIGFsbCBjb29raWUgYXZhaWFibGVcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIE9iamVjdCB3aXRoIGFsbCBDb29raWVzXHJcbiAgICovXHJcbiAgZ2V0QWxsKCk6IGFueSB7XHJcbiAgICBjb25zdCBjb29raWVzOiBhbnkgPSB7fTtcclxuXHJcbiAgICBpZiAoZG9jdW1lbnQuY29va2llKSB7XHJcbiAgICAgIGNvbnN0IHNwbGl0ID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7XHJcbiAgICAgIGZvciAoY29uc3QgcyBvZiBzcGxpdCkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJDb29raWUgPSBzLnNwbGl0KCc9Jyk7XHJcbiAgICAgICAgY3VyckNvb2tpZVswXSA9IGN1cnJDb29raWVbMF0udHJpbSgpO1xyXG4gICAgICAgIGNvb2tpZXNbZGVjb2RlVVJJQ29tcG9uZW50KGN1cnJDb29raWVbMF0pXSA9IGRlY29kZVVSSUNvbXBvbmVudChjdXJyQ29va2llWzFdKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb29raWVzO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRlZmF1bHRPcHRpb25zKCk6IElDb29raWVPcHRpb25zIHsgcmV0dXJuIExvY2FsaXplVG9rZW4uY29va2llT3B0aW9ucyB9XHJcblxyXG5cclxuICBzZXQobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBvcHRpb25zPzogSUNvb2tpZU9wdGlvbnMpIHtcclxuICAgIG9wdGlvbnMgPz89IHRoaXMuZGVmYXVsdE9wdGlvbnM7XHJcbiAgICBjb25zdCB7IGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlLCBzYW1lc2l0ZSB9ID0gb3B0aW9ucztcclxuICAgIGxldCBjb29raWVTdHIgPSBgJHtlbmNvZGVVUklDb21wb25lbnQobmFtZSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKX07YDtcclxuXHJcbiAgICBpZiAoZXhwaXJlcykge1xyXG4gICAgICBjb25zdCBkdEV4cGlyZXMgPSB0eXBlb2YgZXhwaXJlcyA9PT0gJ251bWJlcicgPyBuZXcgRGF0ZShEYXRlLm5vdygpICsgZXhwaXJlcyAqIDg2NGU1KSA6IGV4cGlyZXM7XHJcbiAgICAgIGNvb2tpZVN0ciArPSBgZXhwaXJlcz0ke2R0RXhwaXJlcy50b1VUQ1N0cmluZygpfTtgO1xyXG4gICAgfVxyXG5cclxuICAgIGNvb2tpZVN0ciArPSBwYXRoID8gYHBhdGg9JHtwYXRofTtgIDogJyc7XHJcbiAgICBjb29raWVTdHIgKz0gZG9tYWluID8gYGRvbWFpbj0ke2RvbWFpbn07YCA6ICcnO1xyXG4gICAgY29va2llU3RyICs9IHNlY3VyZSA/ICdzZWN1cmU7JyA6ICcnO1xyXG4gICAgY29va2llU3RyICs9IHNhbWVzaXRlID8gYHNhbWVzaXRlPSR7c2FtZXNpdGV9O2AgOiAnJztcclxuXHJcbiAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWVTdHI7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmVzIHNwZWNpZmllZCBDb29raWVcclxuICAgKlxyXG4gICAqIEBwYXJhbSAge3N0cmluZ30gbmFtZSBDb29raWUncyBpZGVudGlmaWNhdGlvblxyXG4gICAqIEBwYXJhbSAge3N0cmluZ30gcGF0aCBQYXRoIHJlbGF0aXZlIHRvIHRoZSBkb21haW4gd2hlcmUgdGhlIGNvb2tpZSBzaG91bGQgYmUgYXZhaWFibGUuIERlZmF1bHQgL1xyXG4gICAqIEBwYXJhbSAge3N0cmluZ30gZG9tYWluIERvbWFpbiB3aGVyZSB0aGUgY29va2llIHNob3VsZCBiZSBhdmFpYWJsZS4gRGVmYXVsdCBjdXJyZW50IGRvbWFpblxyXG4gICAqL1xyXG4gIGRlbGV0ZShuYW1lOiBzdHJpbmcsIHBhdGg6IHN0cmluZyA9ICcvJywgZG9tYWluOiBzdHJpbmcgPSB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0KG5hbWUsICcnLCB7IHBhdGgsIGRvbWFpbiwgZXhwaXJlczogLTEgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGUgYWxsIGNvb2tpZSBhdmFpYWJsZVxyXG4gICAqL1xyXG4gIGRlbGV0ZUFsbChwYXRoPzogc3RyaW5nLCBkb21haW4/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNvb2tpZXMgPSB0aGlzLmdldEFsbCgpO1xyXG5cclxuICAgIGZvciAoY29uc3QgY29va2llTmFtZSBvZiBPYmplY3Qua2V5cyhjb29raWVzKSkge1xyXG4gICAgICB0aGlzLmRlbGV0ZShjb29raWVOYW1lLCBwYXRoLCBkb21haW4pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIElTYW1lU2l0ZVR5cGUge1xyXG4gIHN0cmljdCA9IFwic3RyaWN0XCIsXHJcbiAgbGF4ID0gXCJsYXhcIixcclxuICBub25lID0gXCJub25lXCJcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ29va2llT3B0aW9ucyB7XHJcbiAgZXhwaXJlcz86IG51bWJlciB8IERhdGU7XHJcbiAgcGF0aD86IHN0cmluZztcclxuICBkb21haW4/OiBzdHJpbmc7XHJcbiAgc2VjdXJlPzogYm9vbGVhbjtcclxuICBzYW1lc2l0ZT86IHN0cmluZ1xyXG59XHJcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from './lib';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsT0FBTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWInOyJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FtYmF0aDk5OS1sb2NhbGl6ZS10b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zYW1iYXRoOTk5LWxvY2FsaXplLXRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
@@ -0,0 +1,379 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Injectable, NgModule } from '@angular/core';
3
+ import { __awaiter } from 'tslib';
4
+ import { BehaviorSubject } from 'rxjs';
5
+ import * as jwt_decode from 'jwt-decode';
6
+ import { HttpHeaders, HttpClient } from '@angular/common/http';
7
+ import * as i1 from '@angular/common/http/index';
8
+
9
+ /**
10
+ * Assembly of @package ng2-cookies @see https://www.npmjs.com/package/ng2-cookies
11
+ *
12
+ * Reassembled by
13
+ * @author sambath999
14
+ * @date_29_09_2021
15
+ * Updated from raw parameters to
16
+ * @param {ICookieOptions} options and added another newer cookie flag
17
+ * @param {string} samesite
18
+ * @param {constant} SameSiteTypes, @param {string} strict "strict", @param {string} lax "lax", @param {string} none "none"
19
+ *
20
+ * @enum
21
+ */
22
+ class LocalizeTokenStorageHelper {
23
+ /**
24
+ * Checks the existence of a single cookie by it's name
25
+ *
26
+ * @param {string} name Identification of the cookie
27
+ * @returns existence of the cookie
28
+ */
29
+ check(name) {
30
+ if (typeof document === "undefined")
31
+ return false;
32
+ name = encodeURIComponent(name);
33
+ const regexp = new RegExp('(?:^' + name + '|;\\s*' + name + ')=(.*?)(?:;|$)', 'g');
34
+ return regexp.test(document.cookie);
35
+ }
36
+ /**
37
+ * Retrieves a single cookie by it's name
38
+ *
39
+ * @param {string} name Identification of the Cookie
40
+ * @returns The Cookie's value
41
+ */
42
+ get(name) {
43
+ if (!this.check(name))
44
+ return undefined;
45
+ name = encodeURIComponent(name);
46
+ const regexp = new RegExp('(?:^' + name + '|;\\s*' + name + ')=(.*?)(?:;|$)', 'g');
47
+ const result = regexp.exec(document.cookie);
48
+ return result ? decodeURIComponent(result[1]) : undefined;
49
+ }
50
+ /**
51
+ * Retrieves a a list of all cookie avaiable
52
+ *
53
+ * @returns Object with all Cookies
54
+ */
55
+ getAll() {
56
+ const cookies = {};
57
+ if (document.cookie) {
58
+ const split = document.cookie.split(';');
59
+ for (const s of split) {
60
+ const currCookie = s.split('=');
61
+ currCookie[0] = currCookie[0].trim();
62
+ cookies[decodeURIComponent(currCookie[0])] = decodeURIComponent(currCookie[1]);
63
+ }
64
+ }
65
+ return cookies;
66
+ }
67
+ get defaultOptions() { return LocalizeToken.cookieOptions; }
68
+ set(name, value, options) {
69
+ options !== null && options !== void 0 ? options : (options = this.defaultOptions);
70
+ const { expires, path, domain, secure, samesite } = options;
71
+ let cookieStr = `${encodeURIComponent(name)}=${encodeURIComponent(value)};`;
72
+ if (expires) {
73
+ const dtExpires = typeof expires === 'number' ? new Date(Date.now() + expires * 864e5) : expires;
74
+ cookieStr += `expires=${dtExpires.toUTCString()};`;
75
+ }
76
+ cookieStr += path ? `path=${path};` : '';
77
+ cookieStr += domain ? `domain=${domain};` : '';
78
+ cookieStr += secure ? 'secure;' : '';
79
+ cookieStr += samesite ? `samesite=${samesite};` : '';
80
+ document.cookie = cookieStr;
81
+ }
82
+ /**
83
+ * Removes specified Cookie
84
+ *
85
+ * @param {string} name Cookie's identification
86
+ * @param {string} path Path relative to the domain where the cookie should be avaiable. Default /
87
+ * @param {string} domain Domain where the cookie should be avaiable. Default current domain
88
+ */
89
+ delete(name, path = '/', domain = window.location.hostname) {
90
+ this.set(name, '', { path, domain, expires: -1 });
91
+ }
92
+ /**
93
+ * Delete all cookie avaiable
94
+ */
95
+ deleteAll(path, domain) {
96
+ const cookies = this.getAll();
97
+ for (const cookieName of Object.keys(cookies)) {
98
+ this.delete(cookieName, path, domain);
99
+ }
100
+ }
101
+ }
102
+ var ISameSiteType;
103
+ (function (ISameSiteType) {
104
+ ISameSiteType["strict"] = "strict";
105
+ ISameSiteType["lax"] = "lax";
106
+ ISameSiteType["none"] = "none";
107
+ })(ISameSiteType || (ISameSiteType = {}));
108
+
109
+ class LocalizeToken {
110
+ }
111
+ LocalizeToken.config = {
112
+ mainDomain: location.hostname,
113
+ authTokenName: 'auth-token',
114
+ tenantTokenName: 'tenant-token',
115
+ refreshTokenName: 'refresh-token',
116
+ needTenant: false,
117
+ isProduction: false,
118
+ };
119
+ LocalizeToken.cookieOptions = {
120
+ path: '/',
121
+ domain: LocalizeToken.config.mainDomain,
122
+ secure: true,
123
+ // samesite: SameSiteType.strict,
124
+ expires: 1
125
+ };
126
+ LocalizeToken.storage = new LocalizeTokenStorageHelper();
127
+ LocalizeToken.httpHeaders = {
128
+ AUTHORIZATION: 'Authorization',
129
+ X_TENANT: 'X-Tenant',
130
+ X_REFRESH_TOKEN: 'X-RefreshToken',
131
+ CONTENT_TYPE: 'Content-Type',
132
+ };
133
+ /**
134
+ * Waits for a specified amount of time.
135
+ * @param milliseconds - The milliseconds to wait.
136
+ * @param when - The condition to wait for. Default is true.
137
+ * @returns - Promise<void>
138
+ */
139
+ function waitFor(milliseconds, when = true) {
140
+ return __awaiter(this, void 0, void 0, function* () {
141
+ if (!when)
142
+ return;
143
+ yield new Promise(resolve => setTimeout(resolve, milliseconds));
144
+ });
145
+ }
146
+ /**
147
+ * Waits until the condition is met.
148
+ * @param when - The condition to wait for.
149
+ * @param intervalNumber - The interval number in milliseconds to check the condition. Default is 50.
150
+ */
151
+ function waitUntil(when, intervalNumber = 50) {
152
+ return __awaiter(this, void 0, void 0, function* () {
153
+ yield new Promise(resolve => {
154
+ const interval = setInterval(() => __awaiter(this, void 0, void 0, function* () {
155
+ const cond = when();
156
+ const result = cond instanceof Promise ? yield cond : cond;
157
+ if (result) {
158
+ clearInterval(interval);
159
+ resolve(true);
160
+ }
161
+ }), intervalNumber);
162
+ });
163
+ });
164
+ }
165
+
166
+ class LocalizeTokenService {
167
+ constructor() {
168
+ this.isRevokingTokenSubject = new BehaviorSubject(false);
169
+ this.decodeToken = (token) => jwt_decode.jwtDecode(token);
170
+ }
171
+ get authToken() { return this.storageGet(); }
172
+ set authToken(value) {
173
+ value
174
+ ? this.storageSet(value)
175
+ : LocalizeToken.storage.delete(LocalizeToken.config.authTokenName);
176
+ }
177
+ get refreshToken() { return LocalizeToken.storage.get(LocalizeToken.config.refreshTokenName); }
178
+ get accessToken() { var _a; return (_a = this.authToken) === null || _a === void 0 ? void 0 : _a.token; }
179
+ set accessToken(value) {
180
+ if (value) {
181
+ this.authToken = { token: value, revoke: false };
182
+ }
183
+ }
184
+ get isRevokingToken() { return this.isRevokingTokenSubject.value; /* this.authToken?.revoke ?? false */ }
185
+ set isRevokingToken(value) {
186
+ this.isRevokingTokenSubject.next(value);
187
+ if (this.authToken) {
188
+ this.authToken = Object.assign(Object.assign({}, this.authToken), { revoke: value });
189
+ }
190
+ }
191
+ get tenantToken() { return LocalizeToken.storage.get(LocalizeToken.config.tenantTokenName); }
192
+ storageGet() {
193
+ try {
194
+ const encoded = LocalizeToken.storage.get(LocalizeToken.config.authTokenName);
195
+ const decoded = atob(encoded || '');
196
+ return JSON.parse(decoded);
197
+ }
198
+ catch (_a) {
199
+ return undefined;
200
+ }
201
+ }
202
+ storageSet(value) {
203
+ const base64 = btoa(JSON.stringify(value));
204
+ LocalizeToken.storage.set(LocalizeToken.config.authTokenName, base64);
205
+ }
206
+ tokensValid() {
207
+ var _a, _b;
208
+ return ((_a = this.refreshToken) === null || _a === void 0 ? void 0 : _a.length) && (!LocalizeToken.config.needTenant || ((_b = this.tenantToken) === null || _b === void 0 ? void 0 : _b.length));
209
+ }
210
+ get decodeRefreshToken() {
211
+ const token = LocalizeToken.storage.get(LocalizeToken.config.refreshTokenName);
212
+ if (!token)
213
+ return null;
214
+ return this.decodeToken(token);
215
+ }
216
+ }
217
+ LocalizeTokenService.ɵprov = i0.ɵɵdefineInjectable({ factory: function LocalizeTokenService_Factory() { return new LocalizeTokenService(); }, token: LocalizeTokenService, providedIn: "root" });
218
+ LocalizeTokenService.decorators = [
219
+ { type: Injectable, args: [{ providedIn: 'root' },] }
220
+ ];
221
+ LocalizeTokenService.ctorParameters = () => [];
222
+
223
+ class LocalizeTokenModule {
224
+ }
225
+ LocalizeTokenModule.decorators = [
226
+ { type: NgModule, args: [{
227
+ providers: [LocalizeTokenService],
228
+ },] }
229
+ ];
230
+
231
+ /**
232
+ * Http method options
233
+ */
234
+ var EMethod;
235
+ (function (EMethod) {
236
+ EMethod[EMethod["POST"] = 1] = "POST";
237
+ EMethod[EMethod["GET"] = 2] = "GET";
238
+ EMethod[EMethod["PUT"] = 3] = "PUT";
239
+ EMethod[EMethod["DELETE"] = 4] = "DELETE";
240
+ EMethod[EMethod["PATCH"] = 5] = "PATCH";
241
+ })(EMethod || (EMethod = {}));
242
+ class LocalizeApiService {
243
+ constructor(httpClient, localizeTokenService) {
244
+ this.httpClient = httpClient;
245
+ this.localizeTokenService = localizeTokenService;
246
+ this.isRequestingSubject = new BehaviorSubject(false);
247
+ this.isResolvedStartupSubject = new BehaviorSubject(false);
248
+ this.apiConfigs = {};
249
+ /**
250
+ * A higher-order function that returns a curried function for making API requests.
251
+ *
252
+ * @param baseUrl - The base URL of the API.
253
+ * @returns A curried function that can be used to make API requests.
254
+ */
255
+ this.func = (baseUrl) => (path, method = EMethod.GET, value = null, isFormData = false, headers) => this.base(baseUrl, path, method, value, isFormData, headers);
256
+ }
257
+ get isRequesting() { return this.isRequestingSubject.value; }
258
+ get isResolvedStartup() { return this.isResolvedStartupSubject.value; }
259
+ /**
260
+ * Initialize the API service.
261
+ * @param apiConfigs - The API configurations.
262
+ */
263
+ init(apiConfigs) {
264
+ this.apiConfigs = apiConfigs;
265
+ }
266
+ base(baseUrl, path, method = EMethod.GET, value = null, isFormData = false, headers) {
267
+ return __awaiter(this, void 0, void 0, function* () {
268
+ yield this.ifPromise(this.apiConfigs.onPrepareRequest);
269
+ const url = `${baseUrl.trim().replace(/\/?$/, '/')}${path.trim().replace(/^\//, '')}`;
270
+ const httpMethod = EMethod[method].toLowerCase();
271
+ const request = () => { return { body: value, headers: this.options(isFormData, headers) }; };
272
+ // Wait for previous request to complete
273
+ yield this.toWaitForPreviousRequest();
274
+ // Process request
275
+ try {
276
+ return yield this.processRequest(httpMethod, url, request());
277
+ }
278
+ // Handle unauthorized error if any
279
+ catch (error) {
280
+ if (error.status !== 401) {
281
+ throw error;
282
+ }
283
+ return yield this.onUnauthorizedError(httpMethod, url, request);
284
+ }
285
+ });
286
+ }
287
+ onUnauthorizedError(httpMethod, url, request) {
288
+ return __awaiter(this, void 0, void 0, function* () {
289
+ yield this.revokeToken();
290
+ if (!this.isResolvedStartup) {
291
+ return yield this.processRequest(httpMethod, url, request());
292
+ }
293
+ });
294
+ }
295
+ toWaitForPreviousRequest() {
296
+ return __awaiter(this, void 0, void 0, function* () {
297
+ if (this.localizeTokenService.isRevokingToken) {
298
+ yield waitUntil(() => !this.localizeTokenService.isRevokingToken);
299
+ }
300
+ // to wait for each request in 50ms, even if the request is not completed
301
+ yield waitFor(50, this.isRequesting);
302
+ });
303
+ }
304
+ processRequest(method, url, options) {
305
+ return __awaiter(this, void 0, void 0, function* () {
306
+ this.isRequestingSubject.next(true);
307
+ const result = yield new Promise((resolve, reject) => this.httpClient.request(method, url, options).subscribe({ next: resolve, error: reject }));
308
+ this.isRequestingSubject.next(false);
309
+ return result;
310
+ });
311
+ }
312
+ revokeToken(force = false) {
313
+ return __awaiter(this, void 0, void 0, function* () {
314
+ if (this.localizeTokenService.isRevokingToken && !force) {
315
+ yield waitUntil(() => !this.localizeTokenService.isRevokingToken);
316
+ return;
317
+ }
318
+ try {
319
+ this.localizeTokenService.isRevokingToken = true;
320
+ const reqUrl = LocalizeToken.config.revokeTokenUrl;
321
+ const reqHeaders = this.options().append(LocalizeToken.httpHeaders.X_REFRESH_TOKEN, `${this.localizeTokenService.refreshToken}`);
322
+ const revokeToken = yield new Promise((resolve, reject) => this.httpClient.get(reqUrl, { headers: reqHeaders }).subscribe({ next: resolve, error: reject }));
323
+ if (revokeToken === null || revokeToken === void 0 ? void 0 : revokeToken.status) {
324
+ this.localizeTokenService.accessToken = revokeToken.message;
325
+ }
326
+ else if (!this.localizeTokenService.refreshToken) {
327
+ yield this.ifPromise(this.apiConfigs.onAutoLogout);
328
+ }
329
+ else {
330
+ if (this.apiConfigs.onRevokeUnauthorized) {
331
+ yield this.ifPromise(this.apiConfigs.onRevokeUnauthorized);
332
+ yield this.revokeToken(true);
333
+ }
334
+ }
335
+ }
336
+ finally {
337
+ this.localizeTokenService.isRevokingToken = false;
338
+ }
339
+ });
340
+ }
341
+ /** default http request options */
342
+ options(isFormData = false, headers = {}) {
343
+ const defaultHeaders = { [LocalizeToken.httpHeaders.AUTHORIZATION]: `Bearer ${this.localizeTokenService.accessToken}`, };
344
+ if (LocalizeToken.config.needTenant) {
345
+ defaultHeaders[LocalizeToken.httpHeaders.X_TENANT] = `${this.localizeTokenService.tenantToken}`;
346
+ }
347
+ if (!isFormData) {
348
+ defaultHeaders[LocalizeToken.httpHeaders.CONTENT_TYPE] = 'application/json';
349
+ }
350
+ const filteredHeaders = Object.keys(defaultHeaders).filter(key => !Object.keys(headers).includes(key))
351
+ .reduce((acc, key) => (Object.assign(Object.assign({}, acc), { [key]: defaultHeaders[key] })), {});
352
+ const mergedHeaders = Object.assign(Object.assign({}, filteredHeaders), headers);
353
+ return new HttpHeaders(mergedHeaders);
354
+ }
355
+ ifPromise(fn) {
356
+ return __awaiter(this, void 0, void 0, function* () {
357
+ if (!fn)
358
+ return;
359
+ return fn instanceof Promise ? yield fn() : fn();
360
+ });
361
+ }
362
+ } //class
363
+ LocalizeApiService.ɵprov = i0.ɵɵdefineInjectable({ factory: function LocalizeApiService_Factory() { return new LocalizeApiService(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(LocalizeTokenService)); }, token: LocalizeApiService, providedIn: "root" });
364
+ LocalizeApiService.decorators = [
365
+ { type: Injectable, args: [{
366
+ providedIn: 'root'
367
+ },] }
368
+ ];
369
+ LocalizeApiService.ctorParameters = () => [
370
+ { type: HttpClient },
371
+ { type: LocalizeTokenService }
372
+ ];
373
+
374
+ /**
375
+ * Generated bundle index. Do not edit.
376
+ */
377
+
378
+ export { EMethod, ISameSiteType, LocalizeApiService, LocalizeToken, LocalizeTokenModule, LocalizeTokenService, LocalizeTokenStorageHelper, waitFor, waitUntil };
379
+ //# sourceMappingURL=sambath999-localize-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sambath999-localize-token.js","sources":["../../src/lib/localize.token.storage.ts","../../src/lib/localize.token.ts","../../src/lib/localize.token.service.ts","../../src/lib/localize.token.module.ts","../../src/lib/localize.api.service.ts","../../src/sambath999-localize-token.ts"],"sourcesContent":["import { LocalizeToken } from \"./localize.token\";\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 LocalizeTokenStorageHelper {\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\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 get defaultOptions(): ICookieOptions { return LocalizeToken.cookieOptions }\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 } = 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\r\nexport enum ISameSiteType {\r\n strict = \"strict\",\r\n lax = \"lax\",\r\n none = \"none\"\r\n}\r\n\r\nexport interface ICookieOptions {\r\n expires?: number | Date;\r\n path?: string;\r\n domain?: string;\r\n secure?: boolean;\r\n samesite?: string\r\n}\r\n","import { ICookieOptions, LocalizeTokenStorageHelper } from \"./localize.token.storage\";\r\ninterface ILocalizeTokenConfig {\r\n mainDomain: string;\r\n authTokenName: string;\r\n tenantTokenName: string;\r\n refreshTokenName: string;\r\n needTenant: boolean;\r\n isProduction: boolean;\r\n revokeTokenUrl?: string;\r\n}\r\nexport class LocalizeToken {\r\n static config: ILocalizeTokenConfig = {\r\n mainDomain: location.hostname,\r\n authTokenName: 'auth-token',\r\n tenantTokenName: 'tenant-token',\r\n refreshTokenName: 'refresh-token',\r\n needTenant: false,\r\n isProduction: false,\r\n }\r\n\r\n static cookieOptions: ICookieOptions = {\r\n path: '/',\r\n domain: LocalizeToken.config.mainDomain,\r\n secure: true,\r\n // samesite: SameSiteType.strict,\r\n expires: 1\r\n }\r\n static readonly storage = new LocalizeTokenStorageHelper();\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\n export 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 }","import { Injectable } from '@angular/core';\r\nimport { 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 {\r\n readonly isRevokingTokenSubject = new BehaviorSubject<boolean>(false);\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(LocalizeToken.config.authTokenName);\r\n }\r\n\r\n get refreshToken() { return LocalizeToken.storage.get(LocalizeToken.config.refreshTokenName) }\r\n get accessToken() { return this.authToken?.token }\r\n\r\n set accessToken(value: string | undefined) {\r\n if (value) {\r\n this.authToken = { token: value, revoke: false }\r\n }\r\n }\r\n\r\n get isRevokingToken() { return this.isRevokingTokenSubject.value /* this.authToken?.revoke ?? false */ }\r\n set isRevokingToken(value: boolean) {\r\n this.isRevokingTokenSubject.next(value);\r\n if (this.authToken) {\r\n this.authToken = { ...this.authToken, revoke: value };\r\n }\r\n }\r\n\r\n get tenantToken() { return LocalizeToken.storage.get(LocalizeToken.config.tenantTokenName) }\r\n\r\n constructor() { }\r\n\r\n private storageGet() {\r\n try {\r\n const encoded = LocalizeToken.storage.get(LocalizeToken.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(LocalizeToken.config.authTokenName, base64);\r\n }\r\n\r\n tokensValid() {\r\n return this.refreshToken?.length && (!LocalizeToken.config.needTenant || this.tenantToken?.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(LocalizeToken.config.refreshTokenName);\r\n if (!token) return null;\r\n return this.decodeToken(token);\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { LocalizeTokenService } from './localize.token.service';\r\n\r\n@NgModule({\r\n providers: [LocalizeTokenService],\r\n})\r\nexport class LocalizeTokenModule { }","import { Injectable } from \"@angular/core\";\r\nimport { LocalizeTokenService } from \"./localize.token.service\";\r\nimport { HttpClient, HttpHeaders } from \"@angular/common/http\";\r\nimport { LocalizeToken, waitFor, waitUntil } from \"./localize.token\";\r\nimport { BehaviorSubject } from \"rxjs\";\r\n\r\n/**\r\n * Http method options\r\n */\r\nexport enum EMethod {\r\n POST = 1,\r\n GET = 2,\r\n PUT = 3,\r\n DELETE = 4,\r\n PATCH = 5\r\n}\r\n\r\ninterface ILocalizeApiConfigs {\r\n onPrepareRequest?: () => any;\r\n /**\r\n * A function that is called when refresh token is missing then perform the auto logout.\r\n * @returns - The base URL of the API.\r\n */\r\n onAutoLogout?: () => any;\r\n /**\r\n * A function that is called when request revoking token unauthorized.\r\n * @returns - The login dialog service.\r\n */\r\n onRevokeUnauthorized?: () => any;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocalizeApiService {\r\n\r\n readonly isRequestingSubject = new BehaviorSubject<boolean>(false);\r\n readonly isResolvedStartupSubject = new BehaviorSubject<boolean>(false);\r\n get isRequesting() { return this.isRequestingSubject.value; }\r\n get isResolvedStartup() { return this.isResolvedStartupSubject.value; }\r\n\r\n private apiConfigs: ILocalizeApiConfigs = {};\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 this.apiConfigs = apiConfigs;\r\n }\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 (path: string, method: EMethod = EMethod.GET, value: any = null, isFormData: boolean = false, headers?: { [x: string]: string }) =>\r\n this.base(baseUrl, path, method, value, isFormData, headers)\r\n\r\n private async base(baseUrl: string,\r\n path: string,\r\n method: EMethod = EMethod.GET,\r\n value: any = null,\r\n isFormData: boolean = false,\r\n headers?: { [x: string]: string }) {\r\n\r\n await this.ifPromise(this.apiConfigs.onPrepareRequest);\r\n\r\n const url = `${baseUrl.trim().replace(/\\/?$/, '/')}${path.trim().replace(/^\\//, '')}`;\r\n const httpMethod = EMethod[method].toLowerCase();\r\n const request = () => { return { body: value, headers: this.options(isFormData, headers) } };\r\n\r\n // Wait for previous request to complete\r\n await this.toWaitForPreviousRequest();\r\n\r\n // Process request\r\n try { return await this.processRequest(httpMethod, url, request()) }\r\n // Handle unauthorized error if any\r\n catch (error) {\r\n if ((error as any).status !== 401) { throw error; }\r\n return await this.onUnauthorizedError(httpMethod, url, request);\r\n }\r\n }\r\n\r\n private async onUnauthorizedError(httpMethod: string, url: string, request: Function) {\r\n await this.revokeToken();\r\n if (!this.isResolvedStartup) {\r\n return await this.processRequest(httpMethod, url, request());\r\n }\r\n }\r\n\r\n private async toWaitForPreviousRequest() {\r\n if (this.localizeTokenService.isRevokingToken) {\r\n await waitUntil(() => !this.localizeTokenService.isRevokingToken);\r\n }\r\n // to wait for each request in 50ms, even if the request is not completed\r\n await waitFor(50, this.isRequesting);\r\n }\r\n\r\n private async processRequest(method: string, url: string, options: any): Promise<any> {\r\n this.isRequestingSubject.next(true);\r\n const result = await new Promise((resolve, reject) =>\r\n this.httpClient.request<any>(method, url, options).subscribe({ next: resolve, error: reject }))\r\n this.isRequestingSubject.next(false);\r\n return result;\r\n }\r\n\r\n private async revokeToken(force: boolean = false): Promise<void> {\r\n\r\n if (this.localizeTokenService.isRevokingToken && !force) {\r\n await waitUntil(() => !this.localizeTokenService.isRevokingToken)\r\n return;\r\n }\r\n\r\n try {\r\n this.localizeTokenService.isRevokingToken = true;\r\n const reqUrl = LocalizeToken.config.revokeTokenUrl;\r\n const reqHeaders = this.options().append(LocalizeToken.httpHeaders.X_REFRESH_TOKEN, `${this.localizeTokenService.refreshToken}`);\r\n const revokeToken: any = await new Promise((resolve, reject) =>\r\n this.httpClient.get<any>(reqUrl!, { headers: reqHeaders }).subscribe({ next: resolve, error: reject }))\r\n\r\n if (revokeToken?.status) {\r\n this.localizeTokenService.accessToken = revokeToken.message;\r\n } else if (!this.localizeTokenService.refreshToken) {\r\n await this.ifPromise(this.apiConfigs.onAutoLogout)\r\n } else {\r\n if (this.apiConfigs.onRevokeUnauthorized) {\r\n await this.ifPromise(this.apiConfigs.onRevokeUnauthorized);\r\n await this.revokeToken(true);\r\n }\r\n }\r\n } finally {\r\n this.localizeTokenService.isRevokingToken = false;\r\n }\r\n }\r\n\r\n /** default http request options */\r\n private options(isFormData: boolean = false, headers: { [key: string]: string } = {}): HttpHeaders {\r\n const defaultHeaders = { [LocalizeToken.httpHeaders.AUTHORIZATION]: `Bearer ${this.localizeTokenService.accessToken}`, };\r\n if (LocalizeToken.config.needTenant) {\r\n defaultHeaders[LocalizeToken.httpHeaders.X_TENANT] = `${this.localizeTokenService.tenantToken}`;\r\n }\r\n\r\n if (!isFormData) {\r\n defaultHeaders[LocalizeToken.httpHeaders.CONTENT_TYPE] = 'application/json';\r\n }\r\n\r\n const filteredHeaders = Object.keys(defaultHeaders).filter(key => !Object.keys(headers).includes(key))\r\n .reduce((acc, key) => ({ ...acc, [key]: defaultHeaders[key] }), {})\r\n const mergedHeaders = { ...filteredHeaders, ...headers };\r\n return new HttpHeaders(mergedHeaders);\r\n }\r\n\r\n private async ifPromise(fn?: Function) {\r\n if (!fn) return;\r\n return fn instanceof Promise ? await fn() : fn();\r\n }\r\n\r\n}//class\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ export * from './localize.token.service';
2
+ export * from './localize.token';
3
+ export * from './localize.token.storage';
4
+ export * from './localize.token.module';
5
+ export * from './localize.api.service';
@@ -0,0 +1,59 @@
1
+ import { LocalizeTokenService } from "./localize.token.service";
2
+ import { HttpClient } from "@angular/common/http";
3
+ import { BehaviorSubject } from "rxjs";
4
+ /**
5
+ * Http method options
6
+ */
7
+ export declare enum EMethod {
8
+ POST = 1,
9
+ GET = 2,
10
+ PUT = 3,
11
+ DELETE = 4,
12
+ PATCH = 5
13
+ }
14
+ interface ILocalizeApiConfigs {
15
+ onPrepareRequest?: () => any;
16
+ /**
17
+ * A function that is called when refresh token is missing then perform the auto logout.
18
+ * @returns - The base URL of the API.
19
+ */
20
+ onAutoLogout?: () => any;
21
+ /**
22
+ * A function that is called when request revoking token unauthorized.
23
+ * @returns - The login dialog service.
24
+ */
25
+ onRevokeUnauthorized?: () => any;
26
+ }
27
+ export declare class LocalizeApiService {
28
+ readonly httpClient: HttpClient;
29
+ private readonly localizeTokenService;
30
+ readonly isRequestingSubject: BehaviorSubject<boolean>;
31
+ readonly isResolvedStartupSubject: BehaviorSubject<boolean>;
32
+ get isRequesting(): boolean;
33
+ get isResolvedStartup(): boolean;
34
+ private apiConfigs;
35
+ constructor(httpClient: HttpClient, localizeTokenService: LocalizeTokenService);
36
+ /**
37
+ * Initialize the API service.
38
+ * @param apiConfigs - The API configurations.
39
+ */
40
+ init(apiConfigs: ILocalizeApiConfigs): void;
41
+ /**
42
+ * A higher-order function that returns a curried function for making API requests.
43
+ *
44
+ * @param baseUrl - The base URL of the API.
45
+ * @returns A curried function that can be used to make API requests.
46
+ */
47
+ func: (baseUrl: string) => (path: string, method?: EMethod, value?: any, isFormData?: boolean, headers?: {
48
+ [x: string]: string;
49
+ }) => Promise<any>;
50
+ private base;
51
+ private onUnauthorizedError;
52
+ private toWaitForPreviousRequest;
53
+ private processRequest;
54
+ private revokeToken;
55
+ /** default http request options */
56
+ private options;
57
+ private ifPromise;
58
+ }
59
+ export {};