@posiwise/common-services 0.1.87 → 0.1.88

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.
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLXNlcnZpY2VzLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uLXNlcnZpY2VzL3NyYy9saWIvY29tbW9uLXNlcnZpY2VzLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGFnaW5nLCBVc2VyIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvZmlsZURhdGEge1xuICAgIGlkPzogbnVtYmVyO1xuICAgIHNlbmRfbWFya2V0aW5nX2VtYWlscz86IHN0cmluZ1tdO1xuICAgIGF2YXRhcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaW5kb3dEYXRhIHtcbiAgICBnYTogKGNvbW1hbmQ6IHN0cmluZywgZmllbGROYW1lOiBzdHJpbmcsIGZpZWxkVmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcGlTZXJ2aWNlIHtcbiAgICBwb3N0KHVybDogc3RyaW5nLCBib2R5OiBvYmplY3QpOiBPYnNlcnZhYmxlPG9iamVjdD47XG59XG5cbi8vIERlZmluZSBhIHR5cGUgZm9yIGFjdGlvbiB0eXBlc1xudHlwZSBBY3Rpb25UeXBlID0gJ2FiX3Rlc3QnIHwgJ2Fub3RoZXJfYWN0aW9uX3R5cGUnO1xuXG4vLyBEZWZpbmUgYW4gaW50ZXJmYWNlIGZvciB0aGUgcGF5bG9hZFxuZXhwb3J0IGludGVyZmFjZSBFeHBlcmltZW50UGF5bG9hZCB7XG4gICAgdGVzdF9uYW1lOiBzdHJpbmc7XG4gICAgYWN0aW9uX3R5cGU6IEFjdGlvblR5cGU7XG59XG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RQYXJhbXMge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnblVwVmFsdWVzIHtcbiAgICBjb25maXJtYXRpb25fcGF0aDogc3RyaW5nO1xuICAgIGNvbnRhY3RfbmFtZT86IHN0cmluZztcbiAgICBlbWFpbD86IHN0cmluZztcbiAgICB1c2VyX3NpZ251cF91cmw6IHN0cmluZztcbiAgICBvcmdhbmlzYXRpb24/OiBzdHJpbmc7XG4gICAgcHJvZHVjdF9pZDogbnVtYmVyO1xuICAgIHVuaXRzOiBudW1iZXI7XG4gICAgc3RyaXBlX3Rva2VuOiBzdHJpbmc7XG4gICAgbWFzdGVyX3N1YnNjcmlwdGlvbl9pZDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldEZhcVBhcmFtcyB7XG4gICAgc3Vic2NyaXB0aW9uX2lkPzogbnVtYmVyO1xuICAgIGZlYXR1cmVfa2V5Pzogc3RyaW5nO1xuICAgIHBhZ2U/OiBudW1iZXI7XG4gICAgcGFnZVNpemU/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkUHJvamVjdFBpY3R1cmVzRGF0YSB7XG4gICAgcHJvamVjdF9pZDogbnVtYmVyO1xuICAgIGltYWdlOiBGaWxlO1xufVxuZXhwb3J0IGludGVyZmFjZSBBaG95RXZlbnQge1xuICAgIGlkOiBudW1iZXI7XG4gICAgdXNlcl9pZDogbnVtYmVyO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBwcm9wZXJ0aWVzOiBQYWdpbmc7XG4gICAgdGltZTogc3RyaW5nO1xuICAgIHZpc2l0X2lkOiBudW1iZXI7XG4gICAgdXNlcjogVXNlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBaG95RXZlbnRSZXNwb25zZSB7XG4gICAgZXZlbnRzOiBBaG95RXZlbnRbXTtcbiAgICBvYmplY3RfY291bnQ6IG51bWJlcjtcbiAgICB1bmZpbHRlcmVkX2NvdW50OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBBaG95TWVzc2FnZSB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICB0b2tlbjogc3RyaW5nO1xuICAgIHRvOiBzdHJpbmc7XG4gICAgdXNlcl9pZDogbnVtYmVyO1xuICAgIHVzZXJfdHlwZTogc3RyaW5nO1xuICAgIG1haWxlcjogc3RyaW5nO1xuICAgIHN1YmplY3Q6IHN0cmluZztcbiAgICB1dG1fc291cmNlOiBzdHJpbmc7XG4gICAgdXRtX21lZGl1bTogc3RyaW5nO1xuICAgIHV0bV90ZXJtOiBzdHJpbmc7XG4gICAgdXRtX2NvbnRlbnQ6IHN0cmluZztcbiAgICB1dG1fY2FtcGFpZ246IHN0cmluZztcbiAgICBzZW50X2F0OiBzdHJpbmc7XG4gICAgb3BlbmVkX2F0OiBzdHJpbmc7XG4gICAgY2xpY2tlZF9hdDogc3RyaW5nO1xuICAgIG9wZW5fY291bnQ6IG51bWJlcjtcbiAgICBjbGlja19jb3VudDogbnVtYmVyO1xuICAgIHVzZXI6IFVzZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWhveU1lc3NhZ2VSZXNwb25zZSB7XG4gICAgbWVzc2FnZXM6IEFob3lNZXNzYWdlW107XG4gICAgb2JqZWN0X2NvdW50OiBudW1iZXI7XG4gICAgdW5maWx0ZXJlZF9jb3VudDogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgQWhveVZpc2l0IHtcbiAgICBpZDogbnVtYmVyO1xuICAgIHZpc2l0X3Rva2VuOiBzdHJpbmc7XG4gICAgdmlzaXRvcl90b2tlbjogc3RyaW5nO1xuICAgIHVzZXJfaWQ6IG51bWJlcjtcbiAgICBpcDogc3RyaW5nO1xuICAgIHVzZXJfYWdlbnQ6IHN0cmluZztcbiAgICByZWZlcnJlcjogc3RyaW5nO1xuICAgIHJlZmVycmluZ19kb21haW46IHN0cmluZztcbiAgICBsYW5kaW5nX3BhZ2U6IHN0cmluZztcbiAgICBicm93c2VyOiBzdHJpbmc7XG4gICAgb3M6IHN0cmluZztcbiAgICBkZXZpY2VfdHlwZTogc3RyaW5nO1xuICAgIGNvdW50cnk6IHN0cmluZztcbiAgICByZWdpb246IHN0cmluZztcbiAgICBjaXR5OiBzdHJpbmc7XG4gICAgcG9zdGFsX2NvZGU6IHN0cmluZztcbiAgICBsYXRpdHVkZTogc3RyaW5nO1xuICAgIGxvbmdpdHVkZTogc3RyaW5nO1xuICAgIHV0bV9zb3VyY2U6IHN0cmluZztcbiAgICB1dG1fbWVkaXVtOiBzdHJpbmc7XG4gICAgdXRtX3Rlcm06IHN0cmluZztcbiAgICB1dG1fY29udGVudDogc3RyaW5nO1xuICAgIHV0bV9jYW1wYWlnbjogc3RyaW5nO1xuICAgIHN0YXJ0ZWRfYXQ6IHN0cmluZztcbiAgICBwbGF0Zm9ybTogc3RyaW5nO1xuICAgIHVzZXI6IFVzZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWhveVZpc2l0UmVzcG9uc2Uge1xuICAgIHZpc2l0czogQWhveVZpc2l0W107XG4gICAgb2JqZWN0X2NvdW50OiBudW1iZXI7XG4gICAgdW5maWx0ZXJlZF9jb3VudDogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgVHJhY2tFdmVudCB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICB1c2VyX2lkOiBudW1iZXI7XG4gICAgcmVsYXRlZF9lbnRpdHlfaWQ6IG51bWJlcjtcbiAgICByZWxhdGVkX2VudGl0eV90eXBlOiBzdHJpbmc7XG4gICAgZXZlbnRfdHlwZTogc3RyaW5nO1xuICAgIGNyZWF0ZWRfYXQ6IHN0cmluZztcbiAgICB1cGRhdGVkX2F0OiBzdHJpbmc7XG4gICAgdXNlcjogVXNlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFja0V2ZW50UmVzcG9uc2Uge1xuICAgIGV2ZW50czogVHJhY2tFdmVudFtdO1xuICAgIG9iamVjdF9jb3VudDogbnVtYmVyO1xuICAgIHVuZmlsdGVyZWRfY291bnQ6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEF1dGhvciB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZW1haWw6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIE9iamVjdERldGFpbHMge1xuICAgIGlkOiBudW1iZXI7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIGN1cnJlbnRfc2lnbl9pbl9hdDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQWhveVZlcnNpb24ge1xuICAgIGl0ZW1faWQ6IG51bWJlcjtcbiAgICBpdGVtX3R5cGU6IHN0cmluZztcbiAgICBldmVudDogc3RyaW5nO1xuICAgIG9iamVjdDogT2JqZWN0RGV0YWlscztcbiAgICBjcmVhdGVkX2F0OiBzdHJpbmc7XG4gICAgdXBkYXRlZF9hdDogc3RyaW5nO1xuICAgIHdob0RvbmVJdDogbnVtYmVyO1xuICAgIGF1dGhvcjogQXV0aG9yO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFob3lWZXJzaW9uUmVzcG9uc2Uge1xuICAgIHZlcnNpb25zOiBBaG95VmVyc2lvbltdO1xuICAgIG9iamVjdF9jb3VudDogbnVtYmVyO1xuICAgIHVuZmlsdGVyZWRfY291bnQ6IG51bWJlcjtcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLXNlcnZpY2VzLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uLXNlcnZpY2VzL3NyYy9saWIvY29tbW9uLXNlcnZpY2VzLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGFnaW5nLCBVc2VyIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvZmlsZURhdGEge1xuICAgIGlkPzogbnVtYmVyO1xuICAgIHNlbmRfbWFya2V0aW5nX2VtYWlscz86IHN0cmluZ1tdO1xuICAgIGF2YXRhcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBVVEMgZGF0ZXRpbWUgd2hlbiB0aGUgdXNlciBhY2NlcHRlZCB0aGUgbGF0ZXN0IFRlcm1zIG9mIFNlcnZpY2UuXG4gICAgICogVGhpcyBpcyB3cml0dGVuIHZpYSB0aGUgZ2VuZXJpYyBgL3VzZXJgIHByb2ZpbGUgdXBkYXRlIGVuZHBvaW50LlxuICAgICAqL1xuICAgIHRvc19hY2NlcHRlZF9hdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaW5kb3dEYXRhIHtcbiAgICBnYTogKGNvbW1hbmQ6IHN0cmluZywgZmllbGROYW1lOiBzdHJpbmcsIGZpZWxkVmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcGlTZXJ2aWNlIHtcbiAgICBwb3N0KHVybDogc3RyaW5nLCBib2R5OiBvYmplY3QpOiBPYnNlcnZhYmxlPG9iamVjdD47XG59XG5cbi8vIERlZmluZSBhIHR5cGUgZm9yIGFjdGlvbiB0eXBlc1xudHlwZSBBY3Rpb25UeXBlID0gJ2FiX3Rlc3QnIHwgJ2Fub3RoZXJfYWN0aW9uX3R5cGUnO1xuXG4vLyBEZWZpbmUgYW4gaW50ZXJmYWNlIGZvciB0aGUgcGF5bG9hZFxuZXhwb3J0IGludGVyZmFjZSBFeHBlcmltZW50UGF5bG9hZCB7XG4gICAgdGVzdF9uYW1lOiBzdHJpbmc7XG4gICAgYWN0aW9uX3R5cGU6IEFjdGlvblR5cGU7XG59XG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RQYXJhbXMge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnblVwVmFsdWVzIHtcbiAgICBjb25maXJtYXRpb25fcGF0aDogc3RyaW5nO1xuICAgIGNvbnRhY3RfbmFtZT86IHN0cmluZztcbiAgICBlbWFpbD86IHN0cmluZztcbiAgICB1c2VyX3NpZ251cF91cmw6IHN0cmluZztcbiAgICBvcmdhbmlzYXRpb24/OiBzdHJpbmc7XG4gICAgcHJvZHVjdF9pZDogbnVtYmVyO1xuICAgIHVuaXRzOiBudW1iZXI7XG4gICAgc3RyaXBlX3Rva2VuOiBzdHJpbmc7XG4gICAgbWFzdGVyX3N1YnNjcmlwdGlvbl9pZDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldEZhcVBhcmFtcyB7XG4gICAgc3Vic2NyaXB0aW9uX2lkPzogbnVtYmVyO1xuICAgIGZlYXR1cmVfa2V5Pzogc3RyaW5nO1xuICAgIHBhZ2U/OiBudW1iZXI7XG4gICAgcGFnZVNpemU/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkUHJvamVjdFBpY3R1cmVzRGF0YSB7XG4gICAgcHJvamVjdF9pZDogbnVtYmVyO1xuICAgIGltYWdlOiBGaWxlO1xufVxuZXhwb3J0IGludGVyZmFjZSBBaG95RXZlbnQge1xuICAgIGlkOiBudW1iZXI7XG4gICAgdXNlcl9pZDogbnVtYmVyO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBwcm9wZXJ0aWVzOiBQYWdpbmc7XG4gICAgdGltZTogc3RyaW5nO1xuICAgIHZpc2l0X2lkOiBudW1iZXI7XG4gICAgdXNlcjogVXNlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBaG95RXZlbnRSZXNwb25zZSB7XG4gICAgZXZlbnRzOiBBaG95RXZlbnRbXTtcbiAgICBvYmplY3RfY291bnQ6IG51bWJlcjtcbiAgICB1bmZpbHRlcmVkX2NvdW50OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBBaG95TWVzc2FnZSB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICB0b2tlbjogc3RyaW5nO1xuICAgIHRvOiBzdHJpbmc7XG4gICAgdXNlcl9pZDogbnVtYmVyO1xuICAgIHVzZXJfdHlwZTogc3RyaW5nO1xuICAgIG1haWxlcjogc3RyaW5nO1xuICAgIHN1YmplY3Q6IHN0cmluZztcbiAgICB1dG1fc291cmNlOiBzdHJpbmc7XG4gICAgdXRtX21lZGl1bTogc3RyaW5nO1xuICAgIHV0bV90ZXJtOiBzdHJpbmc7XG4gICAgdXRtX2NvbnRlbnQ6IHN0cmluZztcbiAgICB1dG1fY2FtcGFpZ246IHN0cmluZztcbiAgICBzZW50X2F0OiBzdHJpbmc7XG4gICAgb3BlbmVkX2F0OiBzdHJpbmc7XG4gICAgY2xpY2tlZF9hdDogc3RyaW5nO1xuICAgIG9wZW5fY291bnQ6IG51bWJlcjtcbiAgICBjbGlja19jb3VudDogbnVtYmVyO1xuICAgIHVzZXI6IFVzZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWhveU1lc3NhZ2VSZXNwb25zZSB7XG4gICAgbWVzc2FnZXM6IEFob3lNZXNzYWdlW107XG4gICAgb2JqZWN0X2NvdW50OiBudW1iZXI7XG4gICAgdW5maWx0ZXJlZF9jb3VudDogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgQWhveVZpc2l0IHtcbiAgICBpZDogbnVtYmVyO1xuICAgIHZpc2l0X3Rva2VuOiBzdHJpbmc7XG4gICAgdmlzaXRvcl90b2tlbjogc3RyaW5nO1xuICAgIHVzZXJfaWQ6IG51bWJlcjtcbiAgICBpcDogc3RyaW5nO1xuICAgIHVzZXJfYWdlbnQ6IHN0cmluZztcbiAgICByZWZlcnJlcjogc3RyaW5nO1xuICAgIHJlZmVycmluZ19kb21haW46IHN0cmluZztcbiAgICBsYW5kaW5nX3BhZ2U6IHN0cmluZztcbiAgICBicm93c2VyOiBzdHJpbmc7XG4gICAgb3M6IHN0cmluZztcbiAgICBkZXZpY2VfdHlwZTogc3RyaW5nO1xuICAgIGNvdW50cnk6IHN0cmluZztcbiAgICByZWdpb246IHN0cmluZztcbiAgICBjaXR5OiBzdHJpbmc7XG4gICAgcG9zdGFsX2NvZGU6IHN0cmluZztcbiAgICBsYXRpdHVkZTogc3RyaW5nO1xuICAgIGxvbmdpdHVkZTogc3RyaW5nO1xuICAgIHV0bV9zb3VyY2U6IHN0cmluZztcbiAgICB1dG1fbWVkaXVtOiBzdHJpbmc7XG4gICAgdXRtX3Rlcm06IHN0cmluZztcbiAgICB1dG1fY29udGVudDogc3RyaW5nO1xuICAgIHV0bV9jYW1wYWlnbjogc3RyaW5nO1xuICAgIHN0YXJ0ZWRfYXQ6IHN0cmluZztcbiAgICBwbGF0Zm9ybTogc3RyaW5nO1xuICAgIHVzZXI6IFVzZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWhveVZpc2l0UmVzcG9uc2Uge1xuICAgIHZpc2l0czogQWhveVZpc2l0W107XG4gICAgb2JqZWN0X2NvdW50OiBudW1iZXI7XG4gICAgdW5maWx0ZXJlZF9jb3VudDogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgVHJhY2tFdmVudCB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICB1c2VyX2lkOiBudW1iZXI7XG4gICAgcmVsYXRlZF9lbnRpdHlfaWQ6IG51bWJlcjtcbiAgICByZWxhdGVkX2VudGl0eV90eXBlOiBzdHJpbmc7XG4gICAgZXZlbnRfdHlwZTogc3RyaW5nO1xuICAgIGNyZWF0ZWRfYXQ6IHN0cmluZztcbiAgICB1cGRhdGVkX2F0OiBzdHJpbmc7XG4gICAgdXNlcjogVXNlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFja0V2ZW50UmVzcG9uc2Uge1xuICAgIGV2ZW50czogVHJhY2tFdmVudFtdO1xuICAgIG9iamVjdF9jb3VudDogbnVtYmVyO1xuICAgIHVuZmlsdGVyZWRfY291bnQ6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEF1dGhvciB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZW1haWw6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIE9iamVjdERldGFpbHMge1xuICAgIGlkOiBudW1iZXI7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIGN1cnJlbnRfc2lnbl9pbl9hdDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQWhveVZlcnNpb24ge1xuICAgIGl0ZW1faWQ6IG51bWJlcjtcbiAgICBpdGVtX3R5cGU6IHN0cmluZztcbiAgICBldmVudDogc3RyaW5nO1xuICAgIG9iamVjdDogT2JqZWN0RGV0YWlscztcbiAgICBjcmVhdGVkX2F0OiBzdHJpbmc7XG4gICAgdXBkYXRlZF9hdDogc3RyaW5nO1xuICAgIHdob0RvbmVJdDogbnVtYmVyO1xuICAgIGF1dGhvcjogQXV0aG9yO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFob3lWZXJzaW9uUmVzcG9uc2Uge1xuICAgIHZlcnNpb25zOiBBaG95VmVyc2lvbltdO1xuICAgIG9iamVjdF9jb3VudDogbnVtYmVyO1xuICAgIHVuZmlsdGVyZWRfY291bnQ6IG51bWJlcjtcbn1cbiJdfQ==
@@ -1,21 +1,34 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { Router } from '@angular/router';
3
- import { getUser } from '@posiwise/app-store';
3
+ import { AppConfigService } from '@posiwise/app-config-service';
4
+ import { getUser, SetUser } from '@posiwise/app-store';
4
5
  import { USER_PATH } from '@posiwise/common-utilities';
5
6
  import { HelperService } from '@posiwise/helper-service';
7
+ import moment from 'moment';
6
8
  import { tap } from 'rxjs';
9
+ import { take } from 'rxjs/operators';
10
+ import swal from 'sweetalert2';
7
11
  import { Store } from '@ngrx/store';
8
12
  import { MainApiHttpService } from './main-api-http.service';
13
+ import { ProfileService } from './profile.service';
14
+ import { CustomToastService } from './toast.service';
9
15
  import * as i0 from "@angular/core";
10
16
  import * as i1 from "./main-api-http.service";
11
17
  import * as i2 from "@ngrx/store";
12
18
  import * as i3 from "@angular/router";
19
+ import * as i4 from "@posiwise/app-config-service";
20
+ import * as i5 from "./profile.service";
21
+ import * as i6 from "./toast.service";
13
22
  export class UserService {
14
- constructor(api, store, router) {
23
+ constructor(api, store, router, appConfigService, profileService, toast) {
15
24
  this.api = api;
16
25
  this.store = store;
17
26
  this.router = router;
27
+ this.appConfigService = appConfigService;
28
+ this.profileService = profileService;
29
+ this.toast = toast;
18
30
  this.endpoint = USER_PATH;
31
+ this.isTosModalOpen = false;
19
32
  }
20
33
  getUserState() {
21
34
  return this.store.select(getUser);
@@ -26,8 +39,82 @@ export class UserService {
26
39
  if (data?.auth?.should_enforce_2fa) {
27
40
  this.router.navigate(['settings/security']);
28
41
  }
42
+ this.checkAndHandleTosAcceptance(data);
29
43
  }));
30
44
  }
45
+ /**
46
+ * Ensure the current user has accepted the latest Terms of Service for this domain.
47
+ * If the domain has a newer TOS version than the user's accepted timestamp, a blocking
48
+ * SweetAlert2 modal is shown that forces the user to accept before continuing.
49
+ */
50
+ checkAndHandleTosAcceptance(user) {
51
+ if (!user || this.isTosModalOpen) {
52
+ return;
53
+ }
54
+ this.appConfigService.appConfig$.pipe(take(1)).subscribe(config => {
55
+ const tosUpdatedAt = config?.['tos_updated_at'];
56
+ if (!tosUpdatedAt) {
57
+ return;
58
+ }
59
+ const userAcceptedAt = user.tos_accepted_at;
60
+ // If user has already accepted a TOS version that is newer or equal, nothing to do
61
+ if (userAcceptedAt && !moment(userAcceptedAt).isBefore(moment(tosUpdatedAt))) {
62
+ return;
63
+ }
64
+ this.isTosModalOpen = true;
65
+ const mainTosId = config?.['main_tos_id'] ?? null;
66
+ const tosUrl = mainTosId ? `/privacy-and-tos/${mainTosId}` : '/privacy-and-tos';
67
+ void swal
68
+ .fire({
69
+ icon: 'info',
70
+ title: 'Accept Terms of Service',
71
+ html: `By clicking continue, you agree to the terms of our <a href="${tosUrl}" target="_blank" rel="noopener noreferrer">Privacy Policy and Platform Agreement</a>.`,
72
+ confirmButtonText: 'Accept and Continue',
73
+ allowOutsideClick: false,
74
+ allowEscapeKey: false,
75
+ showCancelButton: false,
76
+ reverseButtons: false,
77
+ focusConfirm: true
78
+ })
79
+ .then(result => {
80
+ if (!result.isConfirmed) {
81
+ // Modal cannot really be dismissed without confirmation due to config above,
82
+ // but guard just in case.
83
+ this.isTosModalOpen = false;
84
+ return;
85
+ }
86
+ // Match the backend ISO 8601 format (e.g. 2025-12-15T10:27:11.250Z)
87
+ const nowUtc = new Date().toISOString();
88
+ this.profileService.updateUserProfile({ tos_accepted_at: nowUtc }).subscribe({
89
+ next: () => {
90
+ const updatedUser = {
91
+ ...user,
92
+ tos_accepted_at: nowUtc
93
+ };
94
+ this.store.dispatch(new SetUser(updatedUser));
95
+ this.toast.success('Terms of Service accepted');
96
+ this.isTosModalOpen = false;
97
+ },
98
+ error: err => {
99
+ const message = HelperService.getErrorMessage(err?.error || err);
100
+ void swal
101
+ .fire({
102
+ icon: 'error',
103
+ title: 'Unable to record acceptance',
104
+ text: message,
105
+ confirmButtonText: 'Try again',
106
+ allowOutsideClick: false,
107
+ allowEscapeKey: false
108
+ })
109
+ .then(() => {
110
+ this.isTosModalOpen = false;
111
+ this.checkAndHandleTosAcceptance(user);
112
+ });
113
+ }
114
+ });
115
+ });
116
+ });
117
+ }
31
118
  followUser(id) {
32
119
  return this.api.post(`${this.endpoint}/toggle_relationship/${id}`);
33
120
  }
@@ -103,7 +190,7 @@ export class UserService {
103
190
  refreshUserApiTokens() {
104
191
  return this.api.get(`${this.endpoint}/refresh_user_api_tokens`);
105
192
  }
106
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UserService, deps: [{ token: i1.MainApiHttpService }, { token: i2.Store }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
193
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UserService, deps: [{ token: i1.MainApiHttpService }, { token: i2.Store }, { token: i3.Router }, { token: i4.AppConfigService }, { token: i5.ProfileService }, { token: i6.CustomToastService }], target: i0.ɵɵFactoryTarget.Injectable }); }
107
194
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UserService, providedIn: 'root' }); }
108
195
  }
109
196
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UserService, decorators: [{
@@ -111,5 +198,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
111
198
  args: [{
112
199
  providedIn: 'root'
113
200
  }]
114
- }], ctorParameters: () => [{ type: i1.MainApiHttpService }, { type: i2.Store }, { type: i3.Router }] });
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24tc2VydmljZXMvc3JjL2xpYi91c2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFZLE9BQU8sRUFBYSxNQUFNLHFCQUFxQixDQUFDO0FBQ25FLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXpELE9BQU8sRUFBYyxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVwQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7QUFLN0QsTUFBTSxPQUFPLFdBQVc7SUFHcEIsWUFDcUIsR0FBdUIsRUFDdkIsS0FBc0IsRUFDdEIsTUFBYztRQUZkLFFBQUcsR0FBSCxHQUFHLENBQW9CO1FBQ3ZCLFVBQUssR0FBTCxLQUFLLENBQWlCO1FBQ3RCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFMbEIsYUFBUSxHQUFHLFNBQVMsQ0FBQztJQU1uQyxDQUFDO0lBRUosWUFBWTtRQUNSLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELFdBQVc7UUFDUCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQ25DLEdBQUcsQ0FBQyxDQUFDLElBQVUsRUFBRSxFQUFFO1lBQ2YsY0FBYztZQUNkLElBQUksSUFBSSxFQUFFLElBQUks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QUFXLEVBQUU7WUFDdkQsR0FBRyxhQUFhLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQztZQUN4QyxPQUFPLEVBQUUsRUFBRTtTQUNkLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxJQUE4QztRQUM5RCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxvQkFBb0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLDBCQUEwQixDQUFDLENBQUM7SUFDcEUsQ0FBQzsrR0F0SVEsV0FBVzttSEFBWCxXQUFXLGNBRlIsTUFBTTs7NEZBRVQsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBBcHBTdGF0ZSwgZ2V0VXNlciwgVXNlclN0YXRlIH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1zdG9yZSc7XG5pbXBvcnQgeyBQYWdpbmcsIFVzZXIsIFVTRVJfUEFUSCB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tdXRpbGl0aWVzJztcbmltcG9ydCB7IEhlbHBlclNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvaGVscGVyLXNlcnZpY2UnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0YXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5cbmltcG9ydCB7IE1haW5BcGlIdHRwU2VydmljZSB9IGZyb20gJy4vbWFpbi1hcGktaHR0cC5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBVc2VyU2VydmljZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludCA9IFVTRVJfUEFUSDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGFwaTogTWFpbkFwaUh0dHBTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlOiBTdG9yZTxBcHBTdGF0ZT4sXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXJcbiAgICApIHt9XG5cbiAgICBnZXRVc2VyU3RhdGUoKTogT2JzZXJ2YWJsZTxVc2VyU3RhdGU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuc2VsZWN0KGdldFVzZXIpO1xuICAgIH1cblxuICAgIGdldFVzZXJJbmZvKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkuZ2V0KHRoaXMuZW5kcG9pbnQpLnBpcGUoXG4gICAgICAgICAgICB0YXAoKGRhdGE6IFVzZXIpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBlbmZvcmNlIDJmYVxuICAgICAgICAgICAgICAgIGlmIChkYXRhPy5hdXRoPy5zaG91bGRfZW5mb3JjZV8yZmEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydzZXR0aW5ncy9zZWN1cml0eSddKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZvbGxvd1VzZXIoaWQ6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkucG9zdChgJHt0aGlzLmVuZHBvaW50fS90b2dnbGVfcmVsYXRpb25zaGlwLyR7aWR9YCk7XG4gICAgfVxuXG4gICAgc2VuZFNTT0FjdGl2YXRpb25FbWFpbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnBvc3QoYC9jb2duaXRvL2NyZWF0ZV9jb2duaXRvX3VzZXJgKTtcbiAgICB9XG5cbiAgICB1cGRhdGVTbHVnKHNsdWc6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkucHV0KGAke3RoaXMuZW5kcG9pbnR9L3VwZGF0ZV9zbHVnYCwgeyBzbHVnIH0pO1xuICAgIH1cblxuICAgIGdldEN1cnJlbnRVc2VyT2JqZWN0KG9iamVjdF90eXBlOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmdldChgJHt0aGlzLmVuZHBvaW50fS9nZXRfY3VycmVudF91c2VyX29iamVjdD9vYmplY3Q9JHtvYmplY3RfdHlwZX1gKTtcbiAgICB9XG5cbiAgICB1cGRhdGVFbWFpbChkYXRhOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KSB7XG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZW1haWwnLCBkYXRhWydlbWFpbCddKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdjb25maXJtYXRpb25fcGF0aCcsIGRhdGFbJ2NvbmZpcm1hdGlvbl9wYXRoJ10pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5wdXQoYCR7dGhpcy5lbmRwb2ludH0vZW1haWxgLCBmb3JtRGF0YSk7XG4gICAgfVxuXG4gICAgY2hlY2tQYXNzd29yZChkYXRhOiB7IHBhc3N3b3JkOiBzdHJpbmcgfSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkucG9zdChgJHt0aGlzLmVuZHBvaW50fS9jaGVja19wYXNzd29yZGAsIGRhdGEpO1xuICAgIH1cblxuICAgIGNvbmZpcm1Vc2VyKFxuICAgICAgICBjb25maXJtYXRpb25fdG9rZW46IHN0cmluZyxcbiAgICAgICAgZW1haWw6IHN0cmluZyxcbiAgICAgICAgcGFzc3dvcmQ6IHN0cmluZyxcbiAgICAgICAgcGFzc3dvcmRfY29uZmlybWF0aW9uOiBzdHJpbmdcbiAgICApIHtcbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdjb25maXJtYXRpb25fdG9rZW4nLCBjb25maXJtYXRpb25fdG9rZW4pO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2VtYWlsJywgZW1haWwpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ3Bhc3N3b3JkJywgcGFzc3dvcmQpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ3Bhc3N3b3JkX2NvbmZpcm1hdGlvbicsIHBhc3N3b3JkX2NvbmZpcm1hdGlvbik7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnB1dChgJHt0aGlzLmVuZHBvaW50fS9jb25maXJtYCwgZm9ybURhdGEpO1xuICAgIH1cblxuICAgIGNoZWNrVG9rZW5WYWxpZGl0eSh0eXBlOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIGVtYWlsOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmdldChcbiAgICAgICAgICAgIGAke3RoaXMuZW5kcG9pbnR9L2NoZWNrX3Rva2VuX3ZhbGlkaXR5P3R5cGU9JHt0eXBlfSZjb25maXJtYXRpb25fdG9rZW49JHt0b2tlbn0mZW1haWw9JHtlbWFpbH1gXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0VXNlck5vdGlmaWNhdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5nZXQoYCR7dGhpcy5lbmRwb2ludH0vdXNlcl9ub3RpZmljYXRpb25zYCk7XG4gICAgfVxuXG4gICAgYWRkQXZhdGFyKGZpbGU6IEZpbGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnVwbG9hZCh0aGlzLmVuZHBvaW50LCBmaWxlLCAnYXZhdGFyJyk7XG4gICAgfVxuXG4gICAgY3JlYXRlVHdvRmFjdG9yQXV0aGVudGljYXRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnB1dChgL3R3b19mYWN0b3JfYXV0aGVudGljYXRvci9jcmVhdGVgKTtcbiAgICB9XG5cbiAgICB2ZXJpZnlUd29GYWN0b3JBdXRoZW50aWNhdG9yKGdvb2dsZV9jb2RlOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnBvc3QoYC90d29fZmFjdG9yX2F1dGhlbnRpY2F0b3IvdmVyaWZpY2F0aW9uX2NvZGVgLCB7IGdvb2dsZV9jb2RlIH0pO1xuICAgIH1cblxuICAgIGVuYWJsZVR3b0ZhY3RvckF1dGhlbnRpY2F0b3IoZ29vZ2xlX2NvZGU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkucHV0KGAvdHdvX2ZhY3Rvcl9hdXRoZW50aWNhdG9yL2VuYWJsZWAsIHsgZ29vZ2xlX2NvZGUgfSk7XG4gICAgfVxuXG4gICAgZGlzYWJsZVR3b0ZhY3RvckF1dGhlbnRpY2F0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5wdXQoYC90d29fZmFjdG9yX2F1dGhlbnRpY2F0b3IvZGlzYWJsZWApO1xuICAgIH1cblxuICAgIC8vIFVzZXIgQVBJIEVuZHNcblxuICAgIHZhbGlkYXRlTmV3RW1haWwoY29uZmlybWF0aW9uVG9rZW46IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkuZ2V0KFxuICAgICAgICAgICAgYCR7dGhpcy5lbmRwb2ludH0vbmV3X2VtYWlsX2NvbmZpcm0/Y29uZmlybWF0aW9uX3Rva2VuPSR7Y29uZmlybWF0aW9uVG9rZW59YFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldFVzZXJTdWJzY3JpcHRpb25zKGlkOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmdldChgL3VzZXJzLyR7aWR9L3N1YnNjcmlwdGlvbnNgKTtcbiAgICB9XG5cbiAgICBhZGROZXdTdWJzY3JpcHRpb25Vc2luZ1N0cmlwZShkYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5wb3N0KCcvc2lnbnVwcy90cmlhbF91c2VyX3N0cmlwZV9hY2NvdW50JywgZGF0YSk7XG4gICAgfVxuXG4gICAgdXBkYXRlUGFzc3dvcmQoZGF0YToge1xuICAgICAgICBwYXNzd29yZDogc3RyaW5nO1xuICAgICAgICBwYXNzd29yZF9jb25maXJtYXRpb246IHN0cmluZztcbiAgICAgICAgb2xkX3Bhc3N3b3JkOiBzdHJpbmc7XG4gICAgfSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkucHV0KCcvcGFzc3dvcmQvdXBkYXRlJywgZGF0YSk7XG4gICAgfVxuXG4gICAgZ2V0VXNlckludm9pY2VzKHBhZ2luZzogUGFnaW5nLCBpZDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5nZXRXaXRoUGFyYW1zKGAke3RoaXMuZW5kcG9pbnR9L2ludm9pY2VzYCwge1xuICAgICAgICAgICAgLi4uSGVscGVyU2VydmljZS5nZXRQYWdpbmdQYXJhbXMocGFnaW5nKSxcbiAgICAgICAgICAgIHVzZXJfaWQ6IGlkXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHBvc3RUaXBzRGlzcmVnYXJkZWQoZGF0YTogeyB0aXBfaWQ6IG51bWJlcjsgZGlzcmVnYXJkZWQ6IGJvb2xlYW4gfSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkucG9zdCgnL3VzZXJzL3VzZXJfdGlwcycsIGRhdGEpO1xuICAgIH1cblxuICAgIHJlZnJlc2hVc2VyQXBpVG9rZW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkuZ2V0KGAke3RoaXMuZW5kcG9pbnR9L3JlZnJlc2hfdXNlcl9hcGlfdG9rZW5zYCk7XG4gICAgfVxufVxuIl19
201
+ }], ctorParameters: () => [{ type: i1.MainApiHttpService }, { type: i2.Store }, { type: i3.Router }, { type: i4.AppConfigService }, { type: i5.ProfileService }, { type: i6.CustomToastService }] });
202
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24tc2VydmljZXMvc3JjL2xpYi91c2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFZLE9BQU8sRUFBRSxPQUFPLEVBQWEsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RSxPQUFPLEVBQWdCLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV6RCxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFjLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxJQUFJLE1BQU0sYUFBYSxDQUFDO0FBRS9CLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFcEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7OztBQUtyRCxNQUFNLE9BQU8sV0FBVztJQUtwQixZQUNxQixHQUF1QixFQUN2QixLQUFzQixFQUN0QixNQUFjLEVBQ2QsZ0JBQWtDLEVBQ2xDLGNBQThCLEVBQzlCLEtBQXlCO1FBTHpCLFFBQUcsR0FBSCxHQUFHLENBQW9CO1FBQ3ZCLFVBQUssR0FBTCxLQUFLLENBQWlCO1FB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QUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsMEJBQTBCLENBQUMsQ0FBQztJQUNwRSxDQUFDOytHQWpPUSxXQUFXO21IQUFYLFdBQVcsY0FGUixNQUFNOzs0RkFFVCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvYXBwLWNvbmZpZy1zZXJ2aWNlJztcbmltcG9ydCB7IEFwcFN0YXRlLCBnZXRVc2VyLCBTZXRVc2VyLCBVc2VyU3RhdGUgfSBmcm9tICdAcG9zaXdpc2UvYXBwLXN0b3JlJztcbmltcG9ydCB7IFBhZ2luZywgVXNlciwgVVNFUl9QQVRIIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuaW1wb3J0IHsgSGVscGVyU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9oZWxwZXItc2VydmljZSc7XG5cbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCBzd2FsIGZyb20gJ3N3ZWV0YWxlcnQyJztcblxuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5cbmltcG9ydCB7IE1haW5BcGlIdHRwU2VydmljZSB9IGZyb20gJy4vbWFpbi1hcGktaHR0cC5zZXJ2aWNlJztcbmltcG9ydCB7IFByb2ZpbGVTZXJ2aWNlIH0gZnJvbSAnLi9wcm9maWxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3VzdG9tVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi90b2FzdC5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBVc2VyU2VydmljZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludCA9IFVTRVJfUEFUSDtcblxuICAgIHByaXZhdGUgaXNUb3NNb2RhbE9wZW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGFwaTogTWFpbkFwaUh0dHBTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlOiBTdG9yZTxBcHBTdGF0ZT4sXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYXBwQ29uZmlnU2VydmljZTogQXBwQ29uZmlnU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBwcm9maWxlU2VydmljZTogUHJvZmlsZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdG9hc3Q6IEN1c3RvbVRvYXN0U2VydmljZVxuICAgICkge31cblxuICAgIGdldFVzZXJTdGF0ZSgpOiBPYnNlcnZhYmxlPFVzZXJTdGF0ZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5zZWxlY3QoZ2V0VXNlcik7XG4gICAgfVxuXG4gICAgZ2V0VXNlckluZm8oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5nZXQodGhpcy5lbmRwb2ludCkucGlwZShcbiAgICAgICAgICAgIHRhcCgoZGF0YTogVXNlcikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGVuZm9yY2UgMmZhXG4gICAgICAgICAgICAgICAgaWYgKGRhdGE/LmF1dGg/LnNob3VsZF9lbmZvcmNlXzJmYSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3NldHRpbmdzL3NlY3VyaXR5J10pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tBbmRIYW5kbGVUb3NBY2NlcHRhbmNlKGRhdGEpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbnN1cmUgdGhlIGN1cnJlbnQgdXNlciBoYXMgYWNjZXB0ZWQgdGhlIGxhdGVzdCBUZXJtcyBvZiBTZXJ2aWNlIGZvciB0aGlzIGRvbWFpbi5cbiAgICAgKiBJZiB0aGUgZG9tYWluIGhhcyBhIG5ld2VyIFRPUyB2ZXJzaW9uIHRoYW4gdGhlIHVzZXIncyBhY2NlcHRlZCB0aW1lc3RhbXAsIGEgYmxvY2tpbmdcbiAgICAgKiBTd2VldEFsZXJ0MiBtb2RhbCBpcyBzaG93biB0aGF0IGZvcmNlcyB0aGUgdXNlciB0byBhY2NlcHQgYmVmb3JlIGNvbnRpbnVpbmcuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjaGVja0FuZEhhbmRsZVRvc0FjY2VwdGFuY2UodXNlcjogVXNlciB8IG51bGwgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF1c2VyIHx8IHRoaXMuaXNUb3NNb2RhbE9wZW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYXBwQ29uZmlnU2VydmljZS5hcHBDb25maWckLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGNvbmZpZyA9PiB7XG4gICAgICAgICAgICBjb25zdCB0b3NVcGRhdGVkQXQgPSBjb25maWc/LlsndG9zX3VwZGF0ZWRfYXQnXTtcblxuICAgICAgICAgICAgaWYgKCF0b3NVcGRhdGVkQXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHVzZXJBY2NlcHRlZEF0ID0gdXNlci50b3NfYWNjZXB0ZWRfYXQ7XG5cbiAgICAgICAgICAgIC8vIElmIHVzZXIgaGFzIGFscmVhZHkgYWNjZXB0ZWQgYSBUT1MgdmVyc2lvbiB0aGF0IGlzIG5ld2VyIG9yIGVxdWFsLCBub3RoaW5nIHRvIGRvXG4gICAgICAgICAgICBpZiAodXNlckFjY2VwdGVkQXQgJiYgIW1vbWVudCh1c2VyQWNjZXB0ZWRBdCkuaXNCZWZvcmUobW9tZW50KHRvc1VwZGF0ZWRBdCkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmlzVG9zTW9kYWxPcGVuID0gdHJ1ZTtcblxuICAgICAgICAgICAgY29uc3QgbWFpblRvc0lkID0gY29uZmlnPy5bJ21haW5fdG9zX2lkJ10gPz8gbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IHRvc1VybCA9IG1haW5Ub3NJZCA/IGAvcHJpdmFjeS1hbmQtdG9zLyR7bWFpblRvc0lkfWAgOiAnL3ByaXZhY3ktYW5kLXRvcyc7XG5cbiAgICAgICAgICAgIHZvaWQgc3dhbFxuICAgICAgICAgICAgICAgIC5maXJlKHtcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8nLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ0FjY2VwdCBUZXJtcyBvZiBTZXJ2aWNlJyxcbiAgICAgICAgICAgICAgICAgICAgaHRtbDogYEJ5IGNsaWNraW5nIGNvbnRpbnVlLCB5b3UgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIG91ciA8YSBocmVmPVwiJHt0b3NVcmx9XCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPlByaXZhY3kgUG9saWN5IGFuZCBQbGF0Zm9ybSBBZ3JlZW1lbnQ8L2E+LmAsXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiAnQWNjZXB0IGFuZCBDb250aW51ZScsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93T3V0c2lkZUNsaWNrOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dFc2NhcGVLZXk6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgcmV2ZXJzZUJ1dHRvbnM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0NvbmZpcm06IHRydWVcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzQ29uZmlybWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBNb2RhbCBjYW5ub3QgcmVhbGx5IGJlIGRpc21pc3NlZCB3aXRob3V0IGNvbmZpcm1hdGlvbiBkdWUgdG8gY29uZmlnIGFib3ZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnV0IGd1YXJkIGp1c3QgaW4gY2FzZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNUb3NNb2RhbE9wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIE1hdGNoIHRoZSBiYWNrZW5kIElTTyA4NjAxIGZvcm1hdCAoZS5nLiAyMDI1LTEyLTE1VDEwOjI3OjExLjI1MFopXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vd1V0YyA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2ZpbGVTZXJ2aWNlLnVwZGF0ZVVzZXJQcm9maWxlKHsgdG9zX2FjY2VwdGVkX2F0OiBub3dVdGMgfSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkVXNlcjogVXNlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udXNlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9zX2FjY2VwdGVkX2F0OiBub3dVdGNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFNldFVzZXIodXBkYXRlZFVzZXIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3MoJ1Rlcm1zIG9mIFNlcnZpY2UgYWNjZXB0ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVG9zTW9kYWxPcGVuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IEhlbHBlclNlcnZpY2UuZ2V0RXJyb3JNZXNzYWdlKGVycj8uZXJyb3IgfHwgZXJyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgc3dhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlyZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdVbmFibGUgdG8gcmVjb3JkIGFjY2VwdGFuY2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogbWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiAnVHJ5IGFnYWluJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93T3V0c2lkZUNsaWNrOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93RXNjYXBlS2V5OiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVG9zTW9kYWxPcGVuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrQW5kSGFuZGxlVG9zQWNjZXB0YW5jZSh1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmb2xsb3dVc2VyKGlkOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnBvc3QoYCR7dGhpcy5lbmRwb2ludH0vdG9nZ2xlX3JlbGF0aW9uc2hpcC8ke2lkfWApO1xuICAgIH1cblxuICAgIHNlbmRTU09BY3RpdmF0aW9uRW1haWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5wb3N0KGAvY29nbml0by9jcmVhdGVfY29nbml0b191c2VyYCk7XG4gICAgfVxuXG4gICAgdXBkYXRlU2x1ZyhzbHVnOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnB1dChgJHt0aGlzLmVuZHBvaW50fS91cGRhdGVfc2x1Z2AsIHsgc2x1ZyB9KTtcbiAgICB9XG5cbiAgICBnZXRDdXJyZW50VXNlck9iamVjdChvYmplY3RfdHlwZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5nZXQoYCR7dGhpcy5lbmRwb2ludH0vZ2V0X2N1cnJlbnRfdXNlcl9vYmplY3Q/b2JqZWN0PSR7b2JqZWN0X3R5cGV9YCk7XG4gICAgfVxuXG4gICAgdXBkYXRlRW1haWwoZGF0YTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkge1xuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2VtYWlsJywgZGF0YVsnZW1haWwnXSk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnY29uZmlybWF0aW9uX3BhdGgnLCBkYXRhWydjb25maXJtYXRpb25fcGF0aCddKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGkucHV0KGAke3RoaXMuZW5kcG9pbnR9L2VtYWlsYCwgZm9ybURhdGEpO1xuICAgIH1cblxuICAgIGNoZWNrUGFzc3dvcmQoZGF0YTogeyBwYXNzd29yZDogc3RyaW5nIH0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnBvc3QoYCR7dGhpcy5lbmRwb2ludH0vY2hlY2tfcGFzc3dvcmRgLCBkYXRhKTtcbiAgICB9XG5cbiAgICBjb25maXJtVXNlcihcbiAgICAgICAgY29uZmlybWF0aW9uX3Rva2VuOiBzdHJpbmcsXG4gICAgICAgIGVtYWlsOiBzdHJpbmcsXG4gICAgICAgIHBhc3N3b3JkOiBzdHJpbmcsXG4gICAgICAgIHBhc3N3b3JkX2NvbmZpcm1hdGlvbjogc3RyaW5nXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnY29uZmlybWF0aW9uX3Rva2VuJywgY29uZmlybWF0aW9uX3Rva2VuKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdlbWFpbCcsIGVtYWlsKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdwYXNzd29yZCcsIHBhc3N3b3JkKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdwYXNzd29yZF9jb25maXJtYXRpb24nLCBwYXNzd29yZF9jb25maXJtYXRpb24pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5wdXQoYCR7dGhpcy5lbmRwb2ludH0vY29uZmlybWAsIGZvcm1EYXRhKTtcbiAgICB9XG5cbiAgICBjaGVja1Rva2VuVmFsaWRpdHkodHlwZTogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCBlbWFpbDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5nZXQoXG4gICAgICAgICAgICBgJHt0aGlzLmVuZHBvaW50fS9jaGVja190b2tlbl92YWxpZGl0eT90eXBlPSR7dHlwZX0mY29uZmlybWF0aW9uX3Rva2VuPSR7dG9rZW59JmVtYWlsPSR7ZW1haWx9YFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldFVzZXJOb3RpZmljYXRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkuZ2V0KGAke3RoaXMuZW5kcG9pbnR9L3VzZXJfbm90aWZpY2F0aW9uc2ApO1xuICAgIH1cblxuICAgIGFkZEF2YXRhcihmaWxlOiBGaWxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS51cGxvYWQodGhpcy5lbmRwb2ludCwgZmlsZSwgJ2F2YXRhcicpO1xuICAgIH1cblxuICAgIGNyZWF0ZVR3b0ZhY3RvckF1dGhlbnRpY2F0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5wdXQoYC90d29fZmFjdG9yX2F1dGhlbnRpY2F0b3IvY3JlYXRlYCk7XG4gICAgfVxuXG4gICAgdmVyaWZ5VHdvRmFjdG9yQXV0aGVudGljYXRvcihnb29nbGVfY29kZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5wb3N0KGAvdHdvX2ZhY3Rvcl9hdXRoZW50aWNhdG9yL3ZlcmlmaWNhdGlvbl9jb2RlYCwgeyBnb29nbGVfY29kZSB9KTtcbiAgICB9XG5cbiAgICBlbmFibGVUd29GYWN0b3JBdXRoZW50aWNhdG9yKGdvb2dsZV9jb2RlOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnB1dChgL3R3b19mYWN0b3JfYXV0aGVudGljYXRvci9lbmFibGVgLCB7IGdvb2dsZV9jb2RlIH0pO1xuICAgIH1cblxuICAgIGRpc2FibGVUd29GYWN0b3JBdXRoZW50aWNhdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkucHV0KGAvdHdvX2ZhY3Rvcl9hdXRoZW50aWNhdG9yL2Rpc2FibGVgKTtcbiAgICB9XG5cbiAgICAvLyBVc2VyIEFQSSBFbmRzXG5cbiAgICB2YWxpZGF0ZU5ld0VtYWlsKGNvbmZpcm1hdGlvblRva2VuOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmdldChcbiAgICAgICAgICAgIGAke3RoaXMuZW5kcG9pbnR9L25ld19lbWFpbF9jb25maXJtP2NvbmZpcm1hdGlvbl90b2tlbj0ke2NvbmZpcm1hdGlvblRva2VufWBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRVc2VyU3Vic2NyaXB0aW9ucyhpZDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5nZXQoYC91c2Vycy8ke2lkfS9zdWJzY3JpcHRpb25zYCk7XG4gICAgfVxuXG4gICAgYWRkTmV3U3Vic2NyaXB0aW9uVXNpbmdTdHJpcGUoZGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkucG9zdCgnL3NpZ251cHMvdHJpYWxfdXNlcl9zdHJpcGVfYWNjb3VudCcsIGRhdGEpO1xuICAgIH1cblxuICAgIHVwZGF0ZVBhc3N3b3JkKGRhdGE6IHtcbiAgICAgICAgcGFzc3dvcmQ6IHN0cmluZztcbiAgICAgICAgcGFzc3dvcmRfY29uZmlybWF0aW9uOiBzdHJpbmc7XG4gICAgICAgIG9sZF9wYXNzd29yZDogc3RyaW5nO1xuICAgIH0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnB1dCgnL3Bhc3N3b3JkL3VwZGF0ZScsIGRhdGEpO1xuICAgIH1cblxuICAgIGdldFVzZXJJbnZvaWNlcyhwYWdpbmc6IFBhZ2luZywgaWQ6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkuZ2V0V2l0aFBhcmFtcyhgJHt0aGlzLmVuZHBvaW50fS9pbnZvaWNlc2AsIHtcbiAgICAgICAgICAgIC4uLkhlbHBlclNlcnZpY2UuZ2V0UGFnaW5nUGFyYW1zKHBhZ2luZyksXG4gICAgICAgICAgICB1c2VyX2lkOiBpZFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwb3N0VGlwc0Rpc3JlZ2FyZGVkKGRhdGE6IHsgdGlwX2lkOiBudW1iZXI7IGRpc3JlZ2FyZGVkOiBib29sZWFuIH0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnBvc3QoJy91c2Vycy91c2VyX3RpcHMnLCBkYXRhKTtcbiAgICB9XG5cbiAgICByZWZyZXNoVXNlckFwaVRva2VucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmdldChgJHt0aGlzLmVuZHBvaW50fS9yZWZyZXNoX3VzZXJfYXBpX3Rva2Vuc2ApO1xuICAgIH1cbn1cbiJdfQ==
@@ -8,23 +8,23 @@ import { DOCUMENT, CommonModule } from '@angular/common';
8
8
  import * as i1$2 from '@angular/common/http';
9
9
  import { HttpErrorResponse, HttpHeaders } from '@angular/common/http';
10
10
  import { throwError, of, BehaviorSubject, tap, timer } from 'rxjs';
11
- import { catchError, switchMap, map, mergeMap, tap as tap$1, distinctUntilChanged } from 'rxjs/operators';
11
+ import { catchError, take, switchMap, map, mergeMap, tap as tap$1, distinctUntilChanged } from 'rxjs/operators';
12
12
  import { HelperService } from '@posiwise/helper-service';
13
13
  import * as i1$1 from 'ngx-toastr';
14
- import { getUser, UserActionTypes, SetUser, appReducers } from '@posiwise/app-store';
14
+ import { getUser, SetUser, UserActionTypes, appReducers } from '@posiwise/app-store';
15
15
  import * as i1$3 from '@ngrx/effects';
16
16
  import { Actions, createEffect, ofType, EffectsModule } from '@ngrx/effects';
17
17
  import * as i2 from '@ngrx/store';
18
18
  import { StoreModule } from '@ngrx/store';
19
- import { INTEGRATIONS_API_PREFIX, MAIN_API_PREFIX, USER_PATH, TOKEN_HEADER_KEY, NEWSLETTER_CONFIRMATION_PATH, NEWSLETTER_UNSUBSCRIBE_PATH, CAPTCHA_VALIDATION_PATH, SOCIAL_LOGIN_PATH, TOKEN_KEY, PERMISSION_NAMES, ADMIN_SUB_MENU_WHITELIST, AB_TEST_ACTIONS, GEO_PATH, PROJECT_PATH, PRODUCT_PATH, CONTACT_US_PATH, INCIDENTS_PATH, INCIDENTS_PATH_ADMIN, NEWSLETTERS_PATH, NEWSLETTER_SUBSCRIPTION_PATH, ADMIN_FAQS_PATH, FAQS_PATH, ORGANIZATIONS_PATH, GLOBAL_SUBSCRIPTION_CONFIGS_PATH, GLOBAL_CONFIGS_PATH, USER_LOGIN_NOTIFICATION, FEEDBACK_QUESTIONS_PATH, USER_FEEDBACKS_PATH, CUSTOMER_SUPPORT_PATH, ADMIN_TAG_PATH, ADMIN_TAG_CATEGORIES_PATH, ADMIN_PATH, QUALIFICATIONS_PATH, SOCKET_TYPE, BRAIN_API_PREFIX } from '@posiwise/common-utilities';
19
+ import { INTEGRATIONS_API_PREFIX, MAIN_API_PREFIX, PROJECT_PATH, USER_PATH, TOKEN_HEADER_KEY, NEWSLETTER_CONFIRMATION_PATH, NEWSLETTER_UNSUBSCRIBE_PATH, CAPTCHA_VALIDATION_PATH, SOCIAL_LOGIN_PATH, TOKEN_KEY, PERMISSION_NAMES, ADMIN_SUB_MENU_WHITELIST, AB_TEST_ACTIONS, GEO_PATH, PRODUCT_PATH, CONTACT_US_PATH, INCIDENTS_PATH, INCIDENTS_PATH_ADMIN, NEWSLETTERS_PATH, NEWSLETTER_SUBSCRIPTION_PATH, ADMIN_FAQS_PATH, FAQS_PATH, ORGANIZATIONS_PATH, GLOBAL_SUBSCRIPTION_CONFIGS_PATH, GLOBAL_CONFIGS_PATH, USER_LOGIN_NOTIFICATION, FEEDBACK_QUESTIONS_PATH, USER_FEEDBACKS_PATH, CUSTOMER_SUPPORT_PATH, ADMIN_TAG_PATH, ADMIN_TAG_CATEGORIES_PATH, ADMIN_PATH, QUALIFICATIONS_PATH, SOCKET_TYPE, BRAIN_API_PREFIX } from '@posiwise/common-utilities';
20
20
  import swal from 'sweetalert2';
21
+ import moment from 'moment';
21
22
  import * as i1$4 from '@angular/platform-browser';
22
23
  import cloneDeep from 'lodash/cloneDeep';
23
24
  import pickBy from 'lodash/pickBy';
24
25
  import * as i2$1 from 'ngx-cookie';
25
26
  import { UntypedFormControl, UntypedFormGroup } from '@angular/forms';
26
27
  import isNumber from 'lodash/isNumber';
27
- import moment from 'moment';
28
28
  import { NgbDateParserFormatter } from '@ng-bootstrap/ng-bootstrap';
29
29
  import { webSocket } from 'rxjs/webSocket';
30
30
  import { StatusCodes } from 'http-status-codes';
@@ -720,12 +720,75 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
720
720
  args: [DOCUMENT]
721
721
  }] }] });
722
722
 
723
+ class ProfileService {
724
+ constructor(api) {
725
+ this.api = api;
726
+ this.endpoint = PROJECT_PATH;
727
+ }
728
+ updateUserProfile(user) {
729
+ const formData = new FormData();
730
+ // eslint-disable-next-line no-restricted-syntax
731
+ for (const key in user) {
732
+ if (key in user) {
733
+ formData.append(key, user[key]);
734
+ }
735
+ }
736
+ return this.api.put('/user', formData);
737
+ }
738
+ getUserProfile(slug) {
739
+ return this.api.get(`/users/${slug}/profile/`);
740
+ }
741
+ getUserObject(objectType, slug) {
742
+ return this.api.get(`/users/${slug}/get_object?object=${objectType}`);
743
+ }
744
+ getProjects(slug) {
745
+ return this.api.get(`/users/${slug}/projects`);
746
+ }
747
+ addProjects(data) {
748
+ return this.api.post(this.endpoint, data);
749
+ }
750
+ updateProjects(id, data) {
751
+ return this.api.put(`${this.endpoint}${id}`, data);
752
+ }
753
+ deleteProject(id) {
754
+ return this.api.delete(`${this.endpoint}/${id}`);
755
+ }
756
+ addProjectPictures(data) {
757
+ return this.api.uploadWithData('/project_pictures', data);
758
+ }
759
+ getProjectPictures(slug) {
760
+ return this.api.get(`/users/${slug}/project_pictures`);
761
+ }
762
+ deletePicture(projectId) {
763
+ return this.api.delete(`/project_pictures/${projectId}`);
764
+ }
765
+ // Recommendations
766
+ postProjectRecommendation(data) {
767
+ return this.api.post(`/project_recommendations`, data);
768
+ }
769
+ postLinks(data) {
770
+ return this.api.post('/user_links', data);
771
+ }
772
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ProfileService, deps: [{ token: MainApiHttpService }], target: i0.ɵɵFactoryTarget.Injectable }); }
773
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ProfileService, providedIn: 'root' }); }
774
+ }
775
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ProfileService, decorators: [{
776
+ type: Injectable,
777
+ args: [{
778
+ providedIn: 'root'
779
+ }]
780
+ }], ctorParameters: () => [{ type: MainApiHttpService }] });
781
+
723
782
  class UserService {
724
- constructor(api, store, router) {
783
+ constructor(api, store, router, appConfigService, profileService, toast) {
725
784
  this.api = api;
726
785
  this.store = store;
727
786
  this.router = router;
787
+ this.appConfigService = appConfigService;
788
+ this.profileService = profileService;
789
+ this.toast = toast;
728
790
  this.endpoint = USER_PATH;
791
+ this.isTosModalOpen = false;
729
792
  }
730
793
  getUserState() {
731
794
  return this.store.select(getUser);
@@ -736,8 +799,82 @@ class UserService {
736
799
  if (data?.auth?.should_enforce_2fa) {
737
800
  this.router.navigate(['settings/security']);
738
801
  }
802
+ this.checkAndHandleTosAcceptance(data);
739
803
  }));
740
804
  }
805
+ /**
806
+ * Ensure the current user has accepted the latest Terms of Service for this domain.
807
+ * If the domain has a newer TOS version than the user's accepted timestamp, a blocking
808
+ * SweetAlert2 modal is shown that forces the user to accept before continuing.
809
+ */
810
+ checkAndHandleTosAcceptance(user) {
811
+ if (!user || this.isTosModalOpen) {
812
+ return;
813
+ }
814
+ this.appConfigService.appConfig$.pipe(take(1)).subscribe(config => {
815
+ const tosUpdatedAt = config?.['tos_updated_at'];
816
+ if (!tosUpdatedAt) {
817
+ return;
818
+ }
819
+ const userAcceptedAt = user.tos_accepted_at;
820
+ // If user has already accepted a TOS version that is newer or equal, nothing to do
821
+ if (userAcceptedAt && !moment(userAcceptedAt).isBefore(moment(tosUpdatedAt))) {
822
+ return;
823
+ }
824
+ this.isTosModalOpen = true;
825
+ const mainTosId = config?.['main_tos_id'] ?? null;
826
+ const tosUrl = mainTosId ? `/privacy-and-tos/${mainTosId}` : '/privacy-and-tos';
827
+ void swal
828
+ .fire({
829
+ icon: 'info',
830
+ title: 'Accept Terms of Service',
831
+ html: `By clicking continue, you agree to the terms of our <a href="${tosUrl}" target="_blank" rel="noopener noreferrer">Privacy Policy and Platform Agreement</a>.`,
832
+ confirmButtonText: 'Accept and Continue',
833
+ allowOutsideClick: false,
834
+ allowEscapeKey: false,
835
+ showCancelButton: false,
836
+ reverseButtons: false,
837
+ focusConfirm: true
838
+ })
839
+ .then(result => {
840
+ if (!result.isConfirmed) {
841
+ // Modal cannot really be dismissed without confirmation due to config above,
842
+ // but guard just in case.
843
+ this.isTosModalOpen = false;
844
+ return;
845
+ }
846
+ // Match the backend ISO 8601 format (e.g. 2025-12-15T10:27:11.250Z)
847
+ const nowUtc = new Date().toISOString();
848
+ this.profileService.updateUserProfile({ tos_accepted_at: nowUtc }).subscribe({
849
+ next: () => {
850
+ const updatedUser = {
851
+ ...user,
852
+ tos_accepted_at: nowUtc
853
+ };
854
+ this.store.dispatch(new SetUser(updatedUser));
855
+ this.toast.success('Terms of Service accepted');
856
+ this.isTosModalOpen = false;
857
+ },
858
+ error: err => {
859
+ const message = HelperService.getErrorMessage(err?.error || err);
860
+ void swal
861
+ .fire({
862
+ icon: 'error',
863
+ title: 'Unable to record acceptance',
864
+ text: message,
865
+ confirmButtonText: 'Try again',
866
+ allowOutsideClick: false,
867
+ allowEscapeKey: false
868
+ })
869
+ .then(() => {
870
+ this.isTosModalOpen = false;
871
+ this.checkAndHandleTosAcceptance(user);
872
+ });
873
+ }
874
+ });
875
+ });
876
+ });
877
+ }
741
878
  followUser(id) {
742
879
  return this.api.post(`${this.endpoint}/toggle_relationship/${id}`);
743
880
  }
@@ -813,7 +950,7 @@ class UserService {
813
950
  refreshUserApiTokens() {
814
951
  return this.api.get(`${this.endpoint}/refresh_user_api_tokens`);
815
952
  }
816
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UserService, deps: [{ token: MainApiHttpService }, { token: i2.Store }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
953
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UserService, deps: [{ token: MainApiHttpService }, { token: i2.Store }, { token: i3.Router }, { token: i1.AppConfigService }, { token: ProfileService }, { token: CustomToastService }], target: i0.ɵɵFactoryTarget.Injectable }); }
817
954
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UserService, providedIn: 'root' }); }
818
955
  }
819
956
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UserService, decorators: [{
@@ -821,7 +958,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
821
958
  args: [{
822
959
  providedIn: 'root'
823
960
  }]
824
- }], ctorParameters: () => [{ type: MainApiHttpService }, { type: i2.Store }, { type: i3.Router }] });
961
+ }], ctorParameters: () => [{ type: MainApiHttpService }, { type: i2.Store }, { type: i3.Router }, { type: i1.AppConfigService }, { type: ProfileService }, { type: CustomToastService }] });
825
962
 
826
963
  class AuthService {
827
964
  constructor(localStorage, secureTokenStorage, router, http, userService, toastr, appConfigService, integrationsApi, document) {
@@ -1594,65 +1731,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
1594
1731
  }]
1595
1732
  }], ctorParameters: () => [{ type: MainApiHttpService }, { type: i2$1.CookieService }] });
1596
1733
 
1597
- class ProfileService {
1598
- constructor(api) {
1599
- this.api = api;
1600
- this.endpoint = PROJECT_PATH;
1601
- }
1602
- updateUserProfile(user) {
1603
- const formData = new FormData();
1604
- // eslint-disable-next-line no-restricted-syntax
1605
- for (const key in user) {
1606
- if (key in user) {
1607
- formData.append(key, user[key]);
1608
- }
1609
- }
1610
- return this.api.put('/user', formData);
1611
- }
1612
- getUserProfile(slug) {
1613
- return this.api.get(`/users/${slug}/profile/`);
1614
- }
1615
- getUserObject(objectType, slug) {
1616
- return this.api.get(`/users/${slug}/get_object?object=${objectType}`);
1617
- }
1618
- getProjects(slug) {
1619
- return this.api.get(`/users/${slug}/projects`);
1620
- }
1621
- addProjects(data) {
1622
- return this.api.post(this.endpoint, data);
1623
- }
1624
- updateProjects(id, data) {
1625
- return this.api.put(`${this.endpoint}${id}`, data);
1626
- }
1627
- deleteProject(id) {
1628
- return this.api.delete(`${this.endpoint}/${id}`);
1629
- }
1630
- addProjectPictures(data) {
1631
- return this.api.uploadWithData('/project_pictures', data);
1632
- }
1633
- getProjectPictures(slug) {
1634
- return this.api.get(`/users/${slug}/project_pictures`);
1635
- }
1636
- deletePicture(projectId) {
1637
- return this.api.delete(`/project_pictures/${projectId}`);
1638
- }
1639
- // Recommendations
1640
- postProjectRecommendation(data) {
1641
- return this.api.post(`/project_recommendations`, data);
1642
- }
1643
- postLinks(data) {
1644
- return this.api.post('/user_links', data);
1645
- }
1646
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ProfileService, deps: [{ token: MainApiHttpService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1647
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ProfileService, providedIn: 'root' }); }
1648
- }
1649
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ProfileService, decorators: [{
1650
- type: Injectable,
1651
- args: [{
1652
- providedIn: 'root'
1653
- }]
1654
- }], ctorParameters: () => [{ type: MainApiHttpService }] });
1655
-
1656
1734
  class SubscriptionService {
1657
1735
  constructor(api) {
1658
1736
  this.api = api;