@posiwise/common-services 0.1.86 → 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==
@@ -13,7 +13,6 @@ export class CustomPreloadingStrategy {
13
13
  }
14
14
  preload(route, load) {
15
15
  // Skip preloading if we're on the landing page (root path)
16
- console.log("Enrico Tam", this.router.url === '/', this.router.url);
17
16
  if (this.router.url === '/' || this.router.url === '') {
18
17
  console.log('🚫 Skipping preload for route:', route.path, '- on landing page');
19
18
  return of(null);
@@ -36,4 +35,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
36
35
  providedIn: 'root'
37
36
  }]
38
37
  }], ctorParameters: () => [{ type: i1.PermissionService }, { type: i2.Router }] });
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXByZWxvYWRpbmcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uLXNlcnZpY2VzL3NyYy9saWIvY3VzdG9tLXByZWxvYWRpbmcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBNkIsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFcEUsT0FBTyxFQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7O0FBS3pELE1BQU0sT0FBTyx3QkFBd0I7SUFDakMsWUFDcUIsVUFBNkIsRUFDN0IsTUFBYztRQURkLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBQzdCLFdBQU0sR0FBTixNQUFNLENBQVE7SUFDaEMsQ0FBQztJQUVKLE9BQU8sQ0FBQyxLQUFZLEVBQUUsSUFBOEI7UUFDaEQsMkRBQTJEO1FBQzNELE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ25FLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ3BELE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1lBQy9FLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUV0RixPQUFPLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDdkQsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUVPLHFCQUFxQixDQUFDLFNBQVM7UUFDbkMsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFakYsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDOytHQXpCUSx3QkFBd0I7bUhBQXhCLHdCQUF3QixjQUZyQixNQUFNOzs0RkFFVCx3QkFBd0I7a0JBSHBDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUHJlbG9hZGluZ1N0cmF0ZWd5LCBSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZXJnZU1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgUGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICcuL3Blcm1pc3Npb24uc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ3VzdG9tUHJlbG9hZGluZ1N0cmF0ZWd5IGltcGxlbWVudHMgUHJlbG9hZGluZ1N0cmF0ZWd5IHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBwZXJtaXNzaW9uOiBQZXJtaXNzaW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlclxuICAgICkge31cblxuICAgIHByZWxvYWQocm91dGU6IFJvdXRlLCBsb2FkOiAoKSA9PiBPYnNlcnZhYmxlPHN0cmluZz4pOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICAvLyBTa2lwIHByZWxvYWRpbmcgaWYgd2UncmUgb24gdGhlIGxhbmRpbmcgcGFnZSAocm9vdCBwYXRoKVxuICAgICAgICBjb25zb2xlLmxvZyhcIkVucmljbyBUYW1cIiwgdGhpcy5yb3V0ZXIudXJsID09PSAnLycsIHRoaXMucm91dGVyLnVybClcbiAgICAgICAgaWYgKHRoaXMucm91dGVyLnVybCA9PT0gJy8nIHx8IHRoaXMucm91dGVyLnVybCA9PT0gJycpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCfwn5qrIFNraXBwaW5nIHByZWxvYWQgZm9yIHJvdXRlOicsIHJvdXRlLnBhdGgsICctIG9uIGxhbmRpbmcgcGFnZScpO1xuICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbG9hZFJvdXRlID0gZGVsYXkgPT4gKGRlbGF5ID8gdGltZXIoNTAwMCkucGlwZShtZXJnZU1hcChfID0+IGxvYWQoKSkpIDogbG9hZCgpKTtcblxuICAgICAgICByZXR1cm4gcm91dGUuZGF0YSAmJiB0aGlzLmNoZWNrTW9kdWxlUGVybWlzc2lvbihyb3V0ZS5kYXRhKVxuICAgICAgICAgICAgPyBsb2FkUm91dGUocm91dGUuZGF0YVsnZGVsYXknXSlcbiAgICAgICAgICAgIDogb2YobnVsbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja01vZHVsZVBlcm1pc3Npb24ocm91dGVEYXRhKSB7XG4gICAgICAgIGNvbnN0IHJldCA9IHJvdXRlRGF0YS5wcmVsb2FkICYmIHRoaXMucGVybWlzc2lvbi5pc0dyYW50ZWQocm91dGVEYXRhLnBlcm1pc3Npb24pO1xuXG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxufVxuIl19
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXByZWxvYWRpbmcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uLXNlcnZpY2VzL3NyYy9saWIvY3VzdG9tLXByZWxvYWRpbmcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBNkIsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFcEUsT0FBTyxFQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7O0FBS3pELE1BQU0sT0FBTyx3QkFBd0I7SUFDakMsWUFDcUIsVUFBNkIsRUFDN0IsTUFBYztRQURkLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBQzdCLFdBQU0sR0FBTixNQUFNLENBQVE7SUFDaEMsQ0FBQztJQUVKLE9BQU8sQ0FBQyxLQUFZLEVBQUUsSUFBOEI7UUFDaEQsMkRBQTJEO1FBQzNELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ3BELE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1lBQy9FLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUV0RixPQUFPLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDdkQsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUVPLHFCQUFxQixDQUFDLFNBQVM7UUFDbkMsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFakYsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDOytHQXhCUSx3QkFBd0I7bUhBQXhCLHdCQUF3QixjQUZyQixNQUFNOzs0RkFFVCx3QkFBd0I7a0JBSHBDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUHJlbG9hZGluZ1N0cmF0ZWd5LCBSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZXJnZU1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgUGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICcuL3Blcm1pc3Npb24uc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ3VzdG9tUHJlbG9hZGluZ1N0cmF0ZWd5IGltcGxlbWVudHMgUHJlbG9hZGluZ1N0cmF0ZWd5IHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBwZXJtaXNzaW9uOiBQZXJtaXNzaW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlclxuICAgICkge31cblxuICAgIHByZWxvYWQocm91dGU6IFJvdXRlLCBsb2FkOiAoKSA9PiBPYnNlcnZhYmxlPHN0cmluZz4pOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICAvLyBTa2lwIHByZWxvYWRpbmcgaWYgd2UncmUgb24gdGhlIGxhbmRpbmcgcGFnZSAocm9vdCBwYXRoKVxuICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsID09PSAnLycgfHwgdGhpcy5yb3V0ZXIudXJsID09PSAnJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ/CfmqsgU2tpcHBpbmcgcHJlbG9hZCBmb3Igcm91dGU6Jywgcm91dGUucGF0aCwgJy0gb24gbGFuZGluZyBwYWdlJyk7XG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb2FkUm91dGUgPSBkZWxheSA9PiAoZGVsYXkgPyB0aW1lcig1MDAwKS5waXBlKG1lcmdlTWFwKF8gPT4gbG9hZCgpKSkgOiBsb2FkKCkpO1xuXG4gICAgICAgIHJldHVybiByb3V0ZS5kYXRhICYmIHRoaXMuY2hlY2tNb2R1bGVQZXJtaXNzaW9uKHJvdXRlLmRhdGEpXG4gICAgICAgICAgICA/IGxvYWRSb3V0ZShyb3V0ZS5kYXRhWydkZWxheSddKVxuICAgICAgICAgICAgOiBvZihudWxsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrTW9kdWxlUGVybWlzc2lvbihyb3V0ZURhdGEpIHtcbiAgICAgICAgY29uc3QgcmV0ID0gcm91dGVEYXRhLnByZWxvYWQgJiYgdGhpcy5wZXJtaXNzaW9uLmlzR3JhbnRlZChyb3V0ZURhdGEucGVybWlzc2lvbik7XG5cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG59XG4iXX0=
@@ -60,6 +60,12 @@ export class ProductService {
60
60
  getUsersForProduct(id, subscription_id) {
61
61
  return this.api.getWithParams(`${this.endpoint}/${id}/insights`, { subscription_id });
62
62
  }
63
+ getAvailableStripeUnsubscribeBehaviors() {
64
+ return this.api.get(`admin/product/available_stripe_unsubscribe_behaviors`);
65
+ }
66
+ getAvailableStripeProrationBehaviors() {
67
+ return this.api.get(`admin/product/available_stripe_proration_behaviors`);
68
+ }
63
69
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ProductService, deps: [{ token: i1.MainApiHttpService }], target: i0.ɵɵFactoryTarget.Injectable }); }
64
70
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ProductService, providedIn: 'root' }); }
65
71
  }
@@ -69,4 +75,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
69
75
  providedIn: 'root'
70
76
  }]
71
77
  }], ctorParameters: () => [{ type: i1.MainApiHttpService }] });
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24tc2VydmljZXMvc3JjL2xpYi9wcm9kdWN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQVUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXpELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7QUFLN0QsTUFBTSxPQUFPLGNBQWM7SUFHdkIsWUFBNkIsR0FBdUI7UUFBdkIsUUFBRyxHQUFILEdBQUcsQ0FBb0I7UUFGbkMsYUFBUSxHQUFHLGdCQUFnQixDQUFDO0lBRVUsQ0FBQztJQUV4RCx3QkFBd0I7SUFDeEIsd0JBQXdCO0lBQ3hCLHdCQUF3QjtJQUN4QixhQUFhLENBQUMsRUFBVSxFQUFFLGVBQXVCO1FBQzdDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsb0JBQW9CLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFJLEVBQUUsRUFBVTtRQUMxQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsVUFBVSxDQUFDLElBQUk7UUFDWCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELGNBQWMsQ0FBQyxFQUFVLEVBQUUsSUFBSSxFQUFFLGVBQXVCO1FBQ3BELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsbUJBQW1CLEVBQUU7WUFDNUQsR0FBRyxJQUFJO1lBQ1AsZUFBZTtTQUNsQixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQWUsRUFBRSxlQUF3QixFQUFFLE1BQU87UUFDN0QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLFlBQVksVUFBVSxFQUFFO1lBQ3JELEdBQUcsYUFBYSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUM7WUFDeEMsZUFBZTtZQUNmLEdBQUcsTUFBTTtTQUNaLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxvQkFBb0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksdUJBQXVCLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsbUJBQW1CO1FBQ2YsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksb0JBQW9CLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLGtCQUFrQjtJQUNsQix3QkFBd0I7SUFDeEIsV0FBVyxDQUFDLE1BQU07UUFDZCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsWUFBWSwrQkFBK0IsRUFBRTtZQUMxRSxHQUFHLE1BQU07U0FDWixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsY0FBYyxDQUFDLEVBQVU7UUFDckIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxvQkFBb0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksYUFBYSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELGlCQUFpQixDQUFDLGNBQXNCLEVBQUUsV0FBb0IsRUFBRSxTQUFrQjtRQUM5RSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUN6QixnRUFBZ0UsY0FBYyxFQUFFLEVBQ2hGLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxDQUM3QixDQUFDO0lBQ04sQ0FBQztJQUVELGtCQUFrQixDQUFDLEVBQVUsRUFBRSxlQUF1QjtRQUNsRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDMUYsQ0FBQzsrR0FyRVEsY0FBYzttSEFBZCxjQUFjLGNBRlgsTUFBTTs7NEZBRVQsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFBhZ2luZywgUFJPRFVDVF9QQVRIIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuaW1wb3J0IHsgSGVscGVyU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9oZWxwZXItc2VydmljZSc7XG5cbmltcG9ydCB7IE1haW5BcGlIdHRwU2VydmljZSB9IGZyb20gJy4vbWFpbi1hcGktaHR0cC5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQcm9kdWN0U2VydmljZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludCA9ICcvYWRtaW4vcHJvZHVjdCc7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGFwaTogTWFpbkFwaUh0dHBTZXJ2aWNlKSB7fVxuXG4gICAgLy8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8vIC8vIEFETUlOIFBST0RVQ1QgQVBJXG4gICAgLy8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgZGVsZXRlUHJvZHVjdChpZDogbnVtYmVyLCBzdWJzY3JpcHRpb25faWQ6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkuZGVsZXRlKGAke3RoaXMuZW5kcG9pbnR9LyR7aWR9P3N1YnNjcmlwdGlvbl9pZD0ke3N1YnNjcmlwdGlvbl9pZH1gKTtcbiAgICB9XG5cbiAgICB1cGRhdGVQcm9kdWN0KGRhdGEsIGlkOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnB1dChgJHt0aGlzLmVuZHBvaW50fS8ke2lkfWAsIGRhdGEpO1xuICAgIH1cblxuICAgIGFkZFByb2R1Y3QoZGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkucG9zdCh0aGlzLmVuZHBvaW50LCBkYXRhKTtcbiAgICB9XG5cbiAgICBpbnZpdGVGb3JUcmlhbChpZDogbnVtYmVyLCBib2R5LCBzdWJzY3JpcHRpb25faWQ6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkucG9zdChgJHt0aGlzLmVuZHBvaW50fS8ke2lkfS9pbnZpdGVfZm9yX3RyaWFsYCwge1xuICAgICAgICAgICAgLi4uYm9keSxcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbl9pZFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRQcm9kdWN0TGlzdChwYWdpbmc/OiBQYWdpbmcsIHN1YnNjcmlwdGlvbl9pZD86IG51bWJlciwgcGFyYW1zPykge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkuZ2V0V2l0aFBhcmFtcyhgJHtQUk9EVUNUX1BBVEh9L2dldF9hbGxgLCB7XG4gICAgICAgICAgICAuLi5IZWxwZXJTZXJ2aWNlLmdldFBhZ2luZ1BhcmFtcyhwYWdpbmcpLFxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uX2lkLFxuICAgICAgICAgICAgLi4ucGFyYW1zXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFN1cHBvcnRlZEN1cnJlbmN5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkuZ2V0KGAke1BST0RVQ1RfUEFUSH0vc3VwcG9ydGVkX2N1cnJlbmNpZXNgKTtcbiAgICB9XG5cbiAgICBnZXRTdXBwb3J0ZWRSZWdpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkuZ2V0KGAke1BST0RVQ1RfUEFUSH0vc3VwcG9ydGVkX3JlZ2lvbnNgKTtcbiAgICB9XG5cbiAgICAvLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLy8gLy8gUFJPRFVDVCBBUElcbiAgICAvLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBnZXRQcm9kdWN0cyhwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmdldFdpdGhQYXJhbXMoYCR7UFJPRFVDVF9QQVRIfS9nZXRfYWxsP3BhZ2U9MSZwYWdlX3NpemU9MjAwYCwge1xuICAgICAgICAgICAgLi4ucGFyYW1zXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFByb2R1Y3RCeUlkKGlkOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmdldChgJHtQUk9EVUNUX1BBVEh9LyR7aWR9YCk7XG4gICAgfVxuXG4gICAgZ2V0UHJvZHVjdENhdGVnb3JpZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5nZXQoYCR7UFJPRFVDVF9QQVRIfS9jYXRlZ29yaWVzYCk7XG4gICAgfVxuXG4gICAgZ2V0UHJvZHVjdEluc2lnaHQoc3Vic2NyaXB0aW9uSWQ6IG51bWJlciwgc3RhcnRpbmdfYXQ/OiBzdHJpbmcsIGVuZGluZ19hdD86IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkuZ2V0V2l0aFBhcmFtcyhcbiAgICAgICAgICAgIGAvYWRtaW4vc3Vic2NyaXB0aW9uc19hbmFseXRpY3M/dHlwZT1wcm9kdWN0cyZzdWJzY3JpcHRpb25faWQ9JHtzdWJzY3JpcHRpb25JZH1gLFxuICAgICAgICAgICAgeyBzdGFydGluZ19hdCwgZW5kaW5nX2F0IH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRVc2Vyc0ZvclByb2R1Y3QoaWQ6IG51bWJlciwgc3Vic2NyaXB0aW9uX2lkOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmdldFdpdGhQYXJhbXMoYCR7dGhpcy5lbmRwb2ludH0vJHtpZH0vaW5zaWdodHNgLCB7IHN1YnNjcmlwdGlvbl9pZCB9KTtcbiAgICB9XG59XG4iXX0=
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24tc2VydmljZXMvc3JjL2xpYi9wcm9kdWN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQVUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXpELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7QUFLN0QsTUFBTSxPQUFPLGNBQWM7SUFHdkIsWUFBNkIsR0FBdUI7UUFBdkIsUUFBRyxHQUFILEdBQUcsQ0FBb0I7UUFGbkMsYUFBUSxHQUFHLGdCQUFnQixDQUFDO0lBRVUsQ0FBQztJQUV4RCx3QkFBd0I7SUFDeEIsd0JBQXdCO0lBQ3hCLHdCQUF3QjtJQUN4QixhQUFhLENBQUMsRUFBVSxFQUFFLGVBQXVCO1FBQzdDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsb0JBQW9CLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFJLEVBQUUsRUFBVTtRQUMxQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsVUFBVSxDQUFDLElBQUk7UUFDWCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELGNBQWMsQ0FBQyxFQUFVLEVBQUUsSUFBSSxFQUFFLGVBQXVCO1FBQ3BELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsbUJBQW1CLEVBQUU7WUFDNUQsR0FBRyxJQUFJO1lBQ1AsZUFBZTtTQUNsQixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQWUsRUFBRSxlQUF3QixFQUFFLE1BQU87UUFDN0QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLFlBQVksVUFBVSxFQUFFO1lBQ3JELEdBQUcsYUFBYSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUM7WUFDeEMsZUFBZTtZQUNmLEdBQUcsTUFBTTtTQUNaLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxvQkFBb0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksdUJBQXVCLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsbUJBQW1CO1FBQ2YsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksb0JBQW9CLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLGtCQUFrQjtJQUNsQix3QkFBd0I7SUFDeEIsV0FBVyxDQUFDLE1BQU07UUFDZCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsWUFBWSwrQkFBK0IsRUFBRTtZQUMxRSxHQUFHLE1BQU07U0FDWixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsY0FBYyxDQUFDLEVBQVU7UUFDckIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxvQkFBb0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksYUFBYSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELGlCQUFpQixDQUFDLGNBQXNCLEVBQUUsV0FBb0IsRUFBRSxTQUFrQjtRQUM5RSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUN6QixnRUFBZ0UsY0FBYyxFQUFFLEVBQ2hGLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxDQUM3QixDQUFDO0lBQ04sQ0FBQztJQUVELGtCQUFrQixDQUFDLEVBQVUsRUFBRSxlQUF1QjtRQUNsRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVELHNDQUFzQztRQUNsQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVELG9DQUFvQztRQUNoQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7SUFDOUUsQ0FBQzsrR0E3RVEsY0FBYzttSEFBZCxjQUFjLGNBRlgsTUFBTTs7NEZBRVQsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFBhZ2luZywgUFJPRFVDVF9QQVRIIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuaW1wb3J0IHsgSGVscGVyU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9oZWxwZXItc2VydmljZSc7XG5cbmltcG9ydCB7IE1haW5BcGlIdHRwU2VydmljZSB9IGZyb20gJy4vbWFpbi1hcGktaHR0cC5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQcm9kdWN0U2VydmljZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludCA9ICcvYWRtaW4vcHJvZHVjdCc7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGFwaTogTWFpbkFwaUh0dHBTZXJ2aWNlKSB7fVxuXG4gICAgLy8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8vIC8vIEFETUlOIFBST0RVQ1QgQVBJXG4gICAgLy8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgZGVsZXRlUHJvZHVjdChpZDogbnVtYmVyLCBzdWJzY3JpcHRpb25faWQ6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkuZGVsZXRlKGAke3RoaXMuZW5kcG9pbnR9LyR7aWR9P3N1YnNjcmlwdGlvbl9pZD0ke3N1YnNjcmlwdGlvbl9pZH1gKTtcbiAgICB9XG5cbiAgICB1cGRhdGVQcm9kdWN0KGRhdGEsIGlkOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnB1dChgJHt0aGlzLmVuZHBvaW50fS8ke2lkfWAsIGRhdGEpO1xuICAgIH1cblxuICAgIGFkZFByb2R1Y3QoZGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkucG9zdCh0aGlzLmVuZHBvaW50LCBkYXRhKTtcbiAgICB9XG5cbiAgICBpbnZpdGVGb3JUcmlhbChpZDogbnVtYmVyLCBib2R5LCBzdWJzY3JpcHRpb25faWQ6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkucG9zdChgJHt0aGlzLmVuZHBvaW50fS8ke2lkfS9pbnZpdGVfZm9yX3RyaWFsYCwge1xuICAgICAgICAgICAgLi4uYm9keSxcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbl9pZFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRQcm9kdWN0TGlzdChwYWdpbmc/OiBQYWdpbmcsIHN1YnNjcmlwdGlvbl9pZD86IG51bWJlciwgcGFyYW1zPykge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkuZ2V0V2l0aFBhcmFtcyhgJHtQUk9EVUNUX1BBVEh9L2dldF9hbGxgLCB7XG4gICAgICAgICAgICAuLi5IZWxwZXJTZXJ2aWNlLmdldFBhZ2luZ1BhcmFtcyhwYWdpbmcpLFxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uX2lkLFxuICAgICAgICAgICAgLi4ucGFyYW1zXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFN1cHBvcnRlZEN1cnJlbmN5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkuZ2V0KGAke1BST0RVQ1RfUEFUSH0vc3VwcG9ydGVkX2N1cnJlbmNpZXNgKTtcbiAgICB9XG5cbiAgICBnZXRTdXBwb3J0ZWRSZWdpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkuZ2V0KGAke1BST0RVQ1RfUEFUSH0vc3VwcG9ydGVkX3JlZ2lvbnNgKTtcbiAgICB9XG5cbiAgICAvLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLy8gLy8gUFJPRFVDVCBBUElcbiAgICAvLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBnZXRQcm9kdWN0cyhwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmdldFdpdGhQYXJhbXMoYCR7UFJPRFVDVF9QQVRIfS9nZXRfYWxsP3BhZ2U9MSZwYWdlX3NpemU9MjAwYCwge1xuICAgICAgICAgICAgLi4ucGFyYW1zXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFByb2R1Y3RCeUlkKGlkOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmdldChgJHtQUk9EVUNUX1BBVEh9LyR7aWR9YCk7XG4gICAgfVxuXG4gICAgZ2V0UHJvZHVjdENhdGVnb3JpZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5nZXQoYCR7UFJPRFVDVF9QQVRIfS9jYXRlZ29yaWVzYCk7XG4gICAgfVxuXG4gICAgZ2V0UHJvZHVjdEluc2lnaHQoc3Vic2NyaXB0aW9uSWQ6IG51bWJlciwgc3RhcnRpbmdfYXQ/OiBzdHJpbmcsIGVuZGluZ19hdD86IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkuZ2V0V2l0aFBhcmFtcyhcbiAgICAgICAgICAgIGAvYWRtaW4vc3Vic2NyaXB0aW9uc19hbmFseXRpY3M/dHlwZT1wcm9kdWN0cyZzdWJzY3JpcHRpb25faWQ9JHtzdWJzY3JpcHRpb25JZH1gLFxuICAgICAgICAgICAgeyBzdGFydGluZ19hdCwgZW5kaW5nX2F0IH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRVc2Vyc0ZvclByb2R1Y3QoaWQ6IG51bWJlciwgc3Vic2NyaXB0aW9uX2lkOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmdldFdpdGhQYXJhbXMoYCR7dGhpcy5lbmRwb2ludH0vJHtpZH0vaW5zaWdodHNgLCB7IHN1YnNjcmlwdGlvbl9pZCB9KTtcbiAgICB9XG5cbiAgICBnZXRBdmFpbGFibGVTdHJpcGVVbnN1YnNjcmliZUJlaGF2aW9ycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmdldChgYWRtaW4vcHJvZHVjdC9hdmFpbGFibGVfc3RyaXBlX3Vuc3Vic2NyaWJlX2JlaGF2aW9yc2ApO1xuICAgIH1cblxuICAgIGdldEF2YWlsYWJsZVN0cmlwZVByb3JhdGlvbkJlaGF2aW9ycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmdldChgYWRtaW4vcHJvZHVjdC9hdmFpbGFibGVfc3RyaXBlX3Byb3JhdGlvbl9iZWhhdmlvcnNgKTtcbiAgICB9XG59XG4iXX0=
@@ -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
  }
@@ -100,7 +187,10 @@ export class UserService {
100
187
  postTipsDisregarded(data) {
101
188
  return this.api.post('/users/user_tips', data);
102
189
  }
103
- 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 }); }
190
+ refreshUserApiTokens() {
191
+ return this.api.get(`${this.endpoint}/refresh_user_api_tokens`);
192
+ }
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 }); }
104
194
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UserService, providedIn: 'root' }); }
105
195
  }
106
196
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UserService, decorators: [{
@@ -108,5 +198,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
108
198
  args: [{
109
199
  providedIn: 'root'
110
200
  }]
111
- }], ctorParameters: () => [{ type: i1.MainApiHttpService }, { type: i2.Store }, { type: i3.Router }] });
112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24tc2VydmljZXMvc3JjL2xpYi91c2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFZLE9BQU8sRUFBYSxNQUFNLHFCQUFxQixDQUFDO0FBQ25FLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXpELE9BQU8sRUFBYyxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVwQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7QUFLN0QsTUFBTSxPQUFPLFdBQVc7SUFHcEIsWUFDcUIsR0FBdUIsRUFDdkIsS0FBc0IsRUFDdEIsTUFBYztRQUZkLFFBQUcsR0FBSCxHQUFHLENBQW9CO1FBQ3ZCLFVBQUssR0FBTCxLQUFLLENBQWlCO1FBQ3RCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFMbEIsYUFBUSxHQUFHLFNBQVMsQ0FBQztJQU1uQyxDQUFDO0lBRUosWUFBWTtRQUNSLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELFdBQVc7UUFDUCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQ25DLEdBQUcsQ0FBQyxDQUFDLElBQVUsRUFBRSxFQUFFO1lBQ2YsY0FBYztZQUNkLElBQUksSUFBSSxFQUFFLElBQUks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QUFXLEVBQUU7WUFDdkQsR0FBRyxhQUFhLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQztZQUN4QyxPQUFPLEVBQUUsRUFBRTtTQUNkLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxJQUE4QztRQUM5RCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25ELENBQUM7K0dBbElRLFdBQVc7bUhBQVgsV0FBVyxjQUZSLE1BQU07OzRGQUVULFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgQXBwU3RhdGUsIGdldFVzZXIsIFVzZXJTdGF0ZSB9IGZyb20gJ0Bwb3Npd2lzZS9hcHAtc3RvcmUnO1xuaW1wb3J0IHsgUGFnaW5nLCBVc2VyLCBVU0VSX1BBVEggfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXV0aWxpdGllcyc7XG5pbXBvcnQgeyBIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2hlbHBlci1zZXJ2aWNlJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuXG5pbXBvcnQgeyBNYWluQXBpSHR0cFNlcnZpY2UgfSBmcm9tICcuL21haW4tYXBpLWh0dHAuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVXNlclNlcnZpY2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZW5kcG9pbnQgPSBVU0VSX1BBVEg7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBhcGk6IE1haW5BcGlIdHRwU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBzdG9yZTogU3RvcmU8QXBwU3RhdGU+LFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyXG4gICAgKSB7fVxuXG4gICAgZ2V0VXNlclN0YXRlKCk6IE9ic2VydmFibGU8VXNlclN0YXRlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JlLnNlbGVjdChnZXRVc2VyKTtcbiAgICB9XG5cbiAgICBnZXRVc2VySW5mbygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmdldCh0aGlzLmVuZHBvaW50KS5waXBlKFxuICAgICAgICAgICAgdGFwKChkYXRhOiBVc2VyKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZW5mb3JjZSAyZmFcbiAgICAgICAgICAgICAgICBpZiAoZGF0YT8uYXV0aD8uc2hvdWxkX2VuZm9yY2VfMmZhKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnc2V0dGluZ3Mvc2VjdXJpdHknXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmb2xsb3dVc2VyKGlkOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnBvc3QoYCR7dGhpcy5lbmRwb2ludH0vdG9nZ2xlX3JlbGF0aW9uc2hpcC8ke2lkfWApO1xuICAgIH1cblxuICAgIHNlbmRTU09BY3RpdmF0aW9uRW1haWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5wb3N0KGAvY29nbml0by9jcmVhdGVfY29nbml0b191c2VyYCk7XG4gICAgfVxuXG4gICAgdXBkYXRlU2x1ZyhzbHVnOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnB1dChgJHt0aGlzLmVuZHBvaW50fS91cGRhdGVfc2x1Z2AsIHsgc2x1ZyB9KTtcbiAgICB9XG5cbiAgICBnZXRDdXJyZW50VXNlck9iamVjdChvYmplY3RfdHlwZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5nZXQoYCR7dGhpcy5lbmRwb2ludH0vZ2V0X2N1cnJlbnRfdXNlcl9vYmplY3Q/b2JqZWN0PSR7b2JqZWN0X3R5cGV9YCk7XG4gICAgfVxuXG4gICAgdXBkYXRlRW1haWwoZGF0YTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkge1xuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2VtYWlsJywgZGF0YVsnZW1haWwnXSk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnY29uZmlybWF0aW9uX3BhdGgnLCBkYXRhWydjb25maXJtYXRpb25fcGF0aCddKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGkucHV0KGAke3RoaXMuZW5kcG9pbnR9L2VtYWlsYCwgZm9ybURhdGEpO1xuICAgIH1cblxuICAgIGNoZWNrUGFzc3dvcmQoZGF0YTogeyBwYXNzd29yZDogc3RyaW5nIH0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnBvc3QoYCR7dGhpcy5lbmRwb2ludH0vY2hlY2tfcGFzc3dvcmRgLCBkYXRhKTtcbiAgICB9XG5cbiAgICBjb25maXJtVXNlcihcbiAgICAgICAgY29uZmlybWF0aW9uX3Rva2VuOiBzdHJpbmcsXG4gICAgICAgIGVtYWlsOiBzdHJpbmcsXG4gICAgICAgIHBhc3N3b3JkOiBzdHJpbmcsXG4gICAgICAgIHBhc3N3b3JkX2NvbmZpcm1hdGlvbjogc3RyaW5nXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnY29uZmlybWF0aW9uX3Rva2VuJywgY29uZmlybWF0aW9uX3Rva2VuKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdlbWFpbCcsIGVtYWlsKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdwYXNzd29yZCcsIHBhc3N3b3JkKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdwYXNzd29yZF9jb25maXJtYXRpb24nLCBwYXNzd29yZF9jb25maXJtYXRpb24pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5wdXQoYCR7dGhpcy5lbmRwb2ludH0vY29uZmlybWAsIGZvcm1EYXRhKTtcbiAgICB9XG5cbiAgICBjaGVja1Rva2VuVmFsaWRpdHkodHlwZTogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCBlbWFpbDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5nZXQoXG4gICAgICAgICAgICBgJHt0aGlzLmVuZHBvaW50fS9jaGVja190b2tlbl92YWxpZGl0eT90eXBlPSR7dHlwZX0mY29uZmlybWF0aW9uX3Rva2VuPSR7dG9rZW59JmVtYWlsPSR7ZW1haWx9YFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldFVzZXJOb3RpZmljYXRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkuZ2V0KGAke3RoaXMuZW5kcG9pbnR9L3VzZXJfbm90aWZpY2F0aW9uc2ApO1xuICAgIH1cblxuICAgIGFkZEF2YXRhcihmaWxlOiBGaWxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS51cGxvYWQodGhpcy5lbmRwb2ludCwgZmlsZSwgJ2F2YXRhcicpO1xuICAgIH1cblxuICAgIGNyZWF0ZVR3b0ZhY3RvckF1dGhlbnRpY2F0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5wdXQoYC90d29fZmFjdG9yX2F1dGhlbnRpY2F0b3IvY3JlYXRlYCk7XG4gICAgfVxuXG4gICAgdmVyaWZ5VHdvRmFjdG9yQXV0aGVudGljYXRvcihnb29nbGVfY29kZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5wb3N0KGAvdHdvX2ZhY3Rvcl9hdXRoZW50aWNhdG9yL3ZlcmlmaWNhdGlvbl9jb2RlYCwgeyBnb29nbGVfY29kZSB9KTtcbiAgICB9XG5cbiAgICBlbmFibGVUd29GYWN0b3JBdXRoZW50aWNhdG9yKGdvb2dsZV9jb2RlOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnB1dChgL3R3b19mYWN0b3JfYXV0aGVudGljYXRvci9lbmFibGVgLCB7IGdvb2dsZV9jb2RlIH0pO1xuICAgIH1cblxuICAgIGRpc2FibGVUd29GYWN0b3JBdXRoZW50aWNhdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkucHV0KGAvdHdvX2ZhY3Rvcl9hdXRoZW50aWNhdG9yL2Rpc2FibGVgKTtcbiAgICB9XG5cbiAgICAvLyBVc2VyIEFQSSBFbmRzXG5cbiAgICB2YWxpZGF0ZU5ld0VtYWlsKGNvbmZpcm1hdGlvblRva2VuOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmdldChcbiAgICAgICAgICAgIGAke3RoaXMuZW5kcG9pbnR9L25ld19lbWFpbF9jb25maXJtP2NvbmZpcm1hdGlvbl90b2tlbj0ke2NvbmZpcm1hdGlvblRva2VufWBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRVc2VyU3Vic2NyaXB0aW9ucyhpZDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5nZXQoYC91c2Vycy8ke2lkfS9zdWJzY3JpcHRpb25zYCk7XG4gICAgfVxuXG4gICAgYWRkTmV3U3Vic2NyaXB0aW9uVXNpbmdTdHJpcGUoZGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkucG9zdCgnL3NpZ251cHMvdHJpYWxfdXNlcl9zdHJpcGVfYWNjb3VudCcsIGRhdGEpO1xuICAgIH1cblxuICAgIHVwZGF0ZVBhc3N3b3JkKGRhdGE6IHtcbiAgICAgICAgcGFzc3dvcmQ6IHN0cmluZztcbiAgICAgICAgcGFzc3dvcmRfY29uZmlybWF0aW9uOiBzdHJpbmc7XG4gICAgICAgIG9sZF9wYXNzd29yZDogc3RyaW5nO1xuICAgIH0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnB1dCgnL3Bhc3N3b3JkL3VwZGF0ZScsIGRhdGEpO1xuICAgIH1cblxuICAgIGdldFVzZXJJbnZvaWNlcyhwYWdpbmc6IFBhZ2luZywgaWQ6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkuZ2V0V2l0aFBhcmFtcyhgJHt0aGlzLmVuZHBvaW50fS9pbnZvaWNlc2AsIHtcbiAgICAgICAgICAgIC4uLkhlbHBlclNlcnZpY2UuZ2V0UGFnaW5nUGFyYW1zKHBhZ2luZyksXG4gICAgICAgICAgICB1c2VyX2lkOiBpZFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwb3N0VGlwc0Rpc3JlZ2FyZGVkKGRhdGE6IHsgdGlwX2lkOiBudW1iZXI7IGRpc3JlZ2FyZGVkOiBib29sZWFuIH0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnBvc3QoJy91c2Vycy91c2VyX3RpcHMnLCBkYXRhKTtcbiAgICB9XG59XG4iXX0=
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
  }
@@ -810,7 +947,10 @@ class UserService {
810
947
  postTipsDisregarded(data) {
811
948
  return this.api.post('/users/user_tips', data);
812
949
  }
813
- 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 }); }
950
+ refreshUserApiTokens() {
951
+ return this.api.get(`${this.endpoint}/refresh_user_api_tokens`);
952
+ }
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 }); }
814
954
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UserService, providedIn: 'root' }); }
815
955
  }
816
956
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UserService, decorators: [{
@@ -818,7 +958,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
818
958
  args: [{
819
959
  providedIn: 'root'
820
960
  }]
821
- }], 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 }] });
822
962
 
823
963
  class AuthService {
824
964
  constructor(localStorage, secureTokenStorage, router, http, userService, toastr, appConfigService, integrationsApi, document) {
@@ -1489,7 +1629,6 @@ class CustomPreloadingStrategy {
1489
1629
  }
1490
1630
  preload(route, load) {
1491
1631
  // Skip preloading if we're on the landing page (root path)
1492
- console.log("Enrico Tam", this.router.url === '/', this.router.url);
1493
1632
  if (this.router.url === '/' || this.router.url === '') {
1494
1633
  console.log('🚫 Skipping preload for route:', route.path, '- on landing page');
1495
1634
  return of(null);
@@ -1592,65 +1731,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
1592
1731
  }]
1593
1732
  }], ctorParameters: () => [{ type: MainApiHttpService }, { type: i2$1.CookieService }] });
1594
1733
 
1595
- class ProfileService {
1596
- constructor(api) {
1597
- this.api = api;
1598
- this.endpoint = PROJECT_PATH;
1599
- }
1600
- updateUserProfile(user) {
1601
- const formData = new FormData();
1602
- // eslint-disable-next-line no-restricted-syntax
1603
- for (const key in user) {
1604
- if (key in user) {
1605
- formData.append(key, user[key]);
1606
- }
1607
- }
1608
- return this.api.put('/user', formData);
1609
- }
1610
- getUserProfile(slug) {
1611
- return this.api.get(`/users/${slug}/profile/`);
1612
- }
1613
- getUserObject(objectType, slug) {
1614
- return this.api.get(`/users/${slug}/get_object?object=${objectType}`);
1615
- }
1616
- getProjects(slug) {
1617
- return this.api.get(`/users/${slug}/projects`);
1618
- }
1619
- addProjects(data) {
1620
- return this.api.post(this.endpoint, data);
1621
- }
1622
- updateProjects(id, data) {
1623
- return this.api.put(`${this.endpoint}${id}`, data);
1624
- }
1625
- deleteProject(id) {
1626
- return this.api.delete(`${this.endpoint}/${id}`);
1627
- }
1628
- addProjectPictures(data) {
1629
- return this.api.uploadWithData('/project_pictures', data);
1630
- }
1631
- getProjectPictures(slug) {
1632
- return this.api.get(`/users/${slug}/project_pictures`);
1633
- }
1634
- deletePicture(projectId) {
1635
- return this.api.delete(`/project_pictures/${projectId}`);
1636
- }
1637
- // Recommendations
1638
- postProjectRecommendation(data) {
1639
- return this.api.post(`/project_recommendations`, data);
1640
- }
1641
- postLinks(data) {
1642
- return this.api.post('/user_links', data);
1643
- }
1644
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ProfileService, deps: [{ token: MainApiHttpService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1645
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ProfileService, providedIn: 'root' }); }
1646
- }
1647
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ProfileService, decorators: [{
1648
- type: Injectable,
1649
- args: [{
1650
- providedIn: 'root'
1651
- }]
1652
- }], ctorParameters: () => [{ type: MainApiHttpService }] });
1653
-
1654
1734
  class SubscriptionService {
1655
1735
  constructor(api) {
1656
1736
  this.api = api;
@@ -1831,6 +1911,12 @@ class ProductService {
1831
1911
  getUsersForProduct(id, subscription_id) {
1832
1912
  return this.api.getWithParams(`${this.endpoint}/${id}/insights`, { subscription_id });
1833
1913
  }
1914
+ getAvailableStripeUnsubscribeBehaviors() {
1915
+ return this.api.get(`admin/product/available_stripe_unsubscribe_behaviors`);
1916
+ }
1917
+ getAvailableStripeProrationBehaviors() {
1918
+ return this.api.get(`admin/product/available_stripe_proration_behaviors`);
1919
+ }
1834
1920
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ProductService, deps: [{ token: MainApiHttpService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1835
1921
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ProductService, providedIn: 'root' }); }
1836
1922
  }