@turndown/library 0.1.63 → 0.1.64

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 +1 @@
1
- {"version":3,"sources":["../node_modules/dayjs/dayjs.min.js","../node_modules/dayjs/plugin/isoWeek.js","../node_modules/dayjs/plugin/relativeTime.js","../src/helpers/date/index.ts","../src/helpers/object/index.ts","../src/helpers/string/index.ts","../src/helpers/index.ts","../src/types/api/index.ts","../src/types/validation/index.ts","../src/types/user/constants.ts","../src/types/auth/routes.ts","../src/types/auth/index.ts","../src/types/base/paging.types.ts","../src/types/base/index.ts","../src/types/company/constants.ts","../src/types/company/routes.ts","../src/types/damage-report/index.ts","../src/types/errors/index.ts","../src/types/health/index.ts","../src/types/image/index.ts","../src/types/inventory/index.ts","../src/types/property/constants.ts","../src/types/property/routes.ts","../src/types/room/constants.ts","../src/types/room/routes.ts","../src/types/subscription/index.ts","../src/types/user/routes.ts","../src/types/work-session/index.ts"],"sourcesContent":["!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isoWeek=t()}(this,(function(){\"use strict\";var e=\"day\";return function(t,i,s){var a=function(t){return t.add(4-t.isoWeekday(),e)},d=i.prototype;d.isoWeekYear=function(){return a(this).year()},d.isoWeek=function(t){if(!this.$utils().u(t))return this.add(7*(t-this.isoWeek()),e);var i,d,n,o,r=a(this),u=(i=this.isoWeekYear(),d=this.$u,n=(d?s.utc:s)().year(i).startOf(\"year\"),o=4-n.isoWeekday(),n.isoWeekday()>4&&(o+=7),n.add(o,e));return r.diff(u,\"week\")+1},d.isoWeekday=function(e){return this.$utils().u(e)?this.day()||7:this.day(this.day()%7?e:e-7)};var n=d.startOf;d.startOf=function(e,t){var i=this.$utils(),s=!!i.u(t)||t;return\"isoweek\"===i.p(e)?s?this.date(this.date()-(this.isoWeekday()-1)).startOf(\"day\"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf(\"day\"):n.bind(this)(e,t)}}}));","!function(r,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(r=\"undefined\"!=typeof globalThis?globalThis:r||self).dayjs_plugin_relativeTime=e()}(this,(function(){\"use strict\";return function(r,e,t){r=r||{};var n=e.prototype,o={future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"};function i(r,e,t,o){return n.fromToBase(r,e,t,o)}t.en.relativeTime=o,n.fromToBase=function(e,n,i,d,u){for(var f,a,s,l=i.$locale().relativeTime||o,h=r.thresholds||[{l:\"s\",r:44,d:\"second\"},{l:\"m\",r:89},{l:\"mm\",r:44,d:\"minute\"},{l:\"h\",r:89},{l:\"hh\",r:21,d:\"hour\"},{l:\"d\",r:35},{l:\"dd\",r:25,d:\"day\"},{l:\"M\",r:45},{l:\"MM\",r:10,d:\"month\"},{l:\"y\",r:17},{l:\"yy\",d:\"year\"}],m=h.length,c=0;c<m;c+=1){var y=h[c];y.d&&(f=d?t(e).diff(i,y.d,!0):i.diff(e,y.d,!0));var p=(r.rounding||Math.round)(Math.abs(f));if(s=f>0,p<=y.r||!y.r){p<=1&&c>0&&(y=h[c-1]);var v=l[y.l];u&&(p=u(\"\"+p)),a=\"string\"==typeof v?v.replace(\"%d\",p):v(p,n,y.l,s);break}}if(n)return a;var M=s?l.future:l.past;return\"function\"==typeof M?M(a):M.replace(\"%s\",a)},n.to=function(r,e){return i(r,e,this,!0)},n.from=function(r,e){return i(r,e,this)};var d=function(r){return r.$u?t.utc():t()};n.toNow=function(r){return this.to(d(this),r)},n.fromNow=function(r){return this.from(d(this),r)}}}));","import dayjs from \"dayjs\";\nimport isoWeek from \"dayjs/plugin/isoWeek\";\nimport relativeTime from \"dayjs/plugin/relativeTime\";\n\ndayjs.extend(relativeTime);\ndayjs.extend(isoWeek);\n\nexport type TDateInput = Date | string | number | null | undefined;\nexport type TDateFormat = \"MM/DD/YYYY\" | \"MM/DD/YY HH:mm A\" | string;\n\nconst defaultDateFallback = \"--\";\n\nconst isValidDateInput = (date: TDateInput): boolean => {\n return date !== null && date !== undefined && dayjs(date).isValid();\n};\n\n/**\n * Format a date using a dayjs format string.\n *\n * @param {TDateInput} date - Date-like value to format.\n * @param {TDateFormat} format - dayjs format string.\n * @returns {string} Formatted date or `--` for missing/invalid input.\n */\nexport const formatDate = (\n date?: TDateInput,\n format: TDateFormat = \"MM/DD/YYYY\",\n): string => {\n if (!isValidDateInput(date)) {\n return defaultDateFallback;\n }\n\n return dayjs(date).format(format);\n};\n\n/**\n * Return a human-readable relative time string.\n *\n * @param {TDateInput} date - Date-like value to compare against now.\n * @returns {string} Relative time or `--` for missing/invalid input.\n */\nexport const timeAgo = (date: TDateInput): string => {\n if (!isValidDateInput(date)) {\n return defaultDateFallback;\n }\n\n return dayjs(date).fromNow();\n};\n\n/**\n * Add days to a date.\n *\n * @param {TDateInput} date - Source date.\n * @param {number} days - Number of days to add.\n * @returns {Date} Updated date.\n */\nexport const addDays = (date: TDateInput, days: number): Date => {\n return dayjs(date).add(days, \"day\").toDate();\n};\n\n/**\n * Subtract days from a date.\n *\n * @param {TDateInput} date - Source date.\n * @param {number} days - Number of days to subtract.\n * @returns {Date} Updated date.\n */\nexport const subtractDays = (date: TDateInput, days: number): Date => {\n return dayjs(date).subtract(days, \"day\").toDate();\n};\n\n/**\n * Return the absolute number of whole day boundaries between two dates.\n *\n * @param {TDateInput} dateA - First date.\n * @param {TDateInput} dateB - Second date.\n * @returns {number} Absolute difference in days, or 0 for invalid input.\n */\nexport const daysBetween = (dateA: TDateInput, dateB: TDateInput): number => {\n if (!isValidDateInput(dateA) || !isValidDateInput(dateB)) {\n return 0;\n }\n\n return Math.abs(dayjs(dateA).diff(dayjs(dateB), \"day\"));\n};\n\n/**\n * Check whether a date is today.\n *\n * @param {TDateInput} date - Date-like value.\n * @returns {boolean} True when the date is today.\n */\nexport const isToday = (date: TDateInput): boolean => {\n if (!isValidDateInput(date)) {\n return false;\n }\n\n return dayjs(date).isSame(dayjs(), \"day\");\n};\n\n/**\n * Check whether a date is in the past.\n *\n * @param {TDateInput} date - Date-like value.\n * @returns {boolean} True when the date is before now.\n */\nexport const isPast = (date: TDateInput): boolean => {\n if (!isValidDateInput(date)) {\n return false;\n }\n\n return dayjs(date).isBefore(dayjs());\n};\n\n/**\n * Check whether a date is in the future.\n *\n * @param {TDateInput} date - Date-like value.\n * @returns {boolean} True when the date is after now.\n */\nexport const isFuture = (date: TDateInput): boolean => {\n if (!isValidDateInput(date)) {\n return false;\n }\n\n return dayjs(date).isAfter(dayjs());\n};\n\n/**\n * Return the start of the day for a date.\n *\n * @param {TDateInput} date - Source date.\n * @returns {Date} Date set to 00:00:00.000.\n */\nexport const startOfDay = (date: TDateInput): Date => {\n return dayjs(date).startOf(\"day\").toDate();\n};\n\n/**\n * Return the end of the day for a date.\n *\n * @param {TDateInput} date - Source date.\n * @returns {Date} Date set to 23:59:59.999.\n */\nexport const endOfDay = (date: TDateInput): Date => {\n return dayjs(date).endOf(\"day\").toDate();\n};\n\n/**\n * Return the ISO week start date, Monday at 00:00:00.000.\n *\n * @param {TDateInput} date - Source date.\n * @returns {Date} Start of ISO week.\n */\nexport const startOfWeek = (date: TDateInput): Date => {\n return dayjs(date).startOf(\"isoWeek\").toDate();\n};\n\n/**\n * Return the ISO week end date, Sunday at 23:59:59.999.\n *\n * @param {TDateInput} date - Source date.\n * @returns {Date} End of ISO week.\n */\nexport const endOfWeek = (date: TDateInput): Date => {\n return dayjs(date).endOf(\"isoWeek\").toDate();\n};\n\n/**\n * Return all seven dates in the ISO week containing the provided date.\n *\n * @param {TDateInput} date - Source date.\n * @returns {Date[]} Monday-through-Sunday dates at the start of each day.\n */\nexport const getWeekDays = (date: TDateInput): Date[] => {\n const weekStart = dayjs(date).startOf(\"isoWeek\");\n\n return Array.from({ length: 7 }, (_value, index) => {\n return weekStart.add(index, \"day\").startOf(\"day\").toDate();\n });\n};\n\n/**\n * Add weeks to a date.\n *\n * @param {TDateInput} date - Source date.\n * @param {number} weeks - Number of weeks to add.\n * @returns {Date} Updated date.\n */\nexport const addWeeks = (date: TDateInput, weeks: number): Date => {\n return dayjs(date).add(weeks, \"week\").toDate();\n};\n\n/**\n * Subtract weeks from a date.\n *\n * @param {TDateInput} date - Source date.\n * @param {number} weeks - Number of weeks to subtract.\n * @returns {Date} Updated date.\n */\nexport const subtractWeeks = (date: TDateInput, weeks: number): Date => {\n return dayjs(date).subtract(weeks, \"week\").toDate();\n};\n","import type {\n IFilterCondition,\n ISortCondition,\n} from \"../../types/base/paging.types\";\n\ntype TRecord = Record<string, unknown>;\ntype TPropertyRecord = Record<PropertyKey, unknown>;\ntype TSortableValue =\n | string\n | number\n | bigint\n | boolean\n | Date\n | null\n | undefined;\n\ntype TReplaceNulls<TValue> = TValue extends null\n ? \"\"\n : TValue extends (infer TItem)[]\n ? TReplaceNulls<TItem>[]\n : TValue extends Date\n ? TValue\n : TValue extends object\n ? { [TKey in keyof TValue]: TReplaceNulls<TValue[TKey]> }\n : TValue;\n\nconst unsafePathSegments = new Set([\"__proto__\", \"prototype\", \"constructor\"]);\n\nconst isRecord = (value: unknown): value is TRecord => {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n !(value instanceof Date)\n );\n};\n\nconst isSafePathSegment = (segment: string): boolean => {\n return segment.length > 0 && !unsafePathSegments.has(segment);\n};\n\nconst getPathSegments = (path: string): string[] => {\n return path.split(\".\").filter((segment) => segment.length > 0);\n};\n\n/**\n * Safely parse a JSON string into a typed value.\n *\n * When a fallback value is provided, the function always returns that generic\n * type. Without a fallback value, parse failures return an empty object.\n *\n * @typeParam TParsed - Expected parsed value type.\n * @param {string | null | undefined} jsonString - JSON string to parse.\n * @param {TParsed} [fallbackValue] - Value returned when parsing fails.\n * @returns {TParsed | Record<string, unknown>} Parsed value or fallback.\n * @example\n * parseJSON<{ a: number }>('{\"a\":1}', { a: 0 }) // => { a: 1 }\n * parseJSON('not json') // => {}\n */\nexport function parseJSON<TParsed>(\n jsonString: string | null | undefined,\n fallbackValue: TParsed,\n): TParsed;\nexport function parseJSON(\n jsonString: string | null | undefined,\n): Record<string, unknown>;\nexport function parseJSON<TParsed>(\n jsonString: string | null | undefined,\n fallbackValue?: TParsed,\n): TParsed | Record<string, unknown> {\n if (!jsonString) {\n return fallbackValue ?? {};\n }\n\n try {\n const parsedValue = JSON.parse(jsonString) as unknown;\n\n return parsedValue as TParsed;\n } catch {\n return fallbackValue ?? {};\n }\n}\n\n/**\n * Stringify a value to JSON while skipping circular references.\n *\n * Uses an internal cache to omit repeated object references that would\n * normally cause `JSON.stringify` to throw.\n *\n * @param {unknown} value - Value to stringify.\n * @returns {string | undefined} JSON string with circulars omitted.\n * @example\n * const value: Record<string, unknown> = {}; value.self = value;\n * JSONStringify(value) // => \"{}\"\n */\nexport const JSONStringify = (value: unknown): string | undefined => {\n const seenValues = new WeakSet<object>();\n\n try {\n return JSON.stringify(value, (_key, nestedValue) => {\n if (typeof nestedValue === \"bigint\") {\n return nestedValue.toString();\n }\n\n if (typeof nestedValue === \"object\" && nestedValue !== null) {\n if (seenValues.has(nestedValue)) {\n return undefined;\n }\n\n seenValues.add(nestedValue);\n }\n\n return nestedValue;\n });\n } catch {\n return undefined;\n }\n};\n\n/**\n * Deep-remove `undefined` properties while preserving Dates and arrays.\n *\n * Object properties with `undefined` values are removed. Array items are\n * preserved so array indexes do not shift.\n *\n * @typeParam TValue - Input value type.\n * @param {TValue} value - Input value.\n * @returns {TValue} Cleaned clone with `undefined` object properties removed.\n */\nexport const removeUndefined = <TValue>(value: TValue): TValue => {\n if (Array.isArray(value)) {\n return value.map((item) => removeUndefined(item)) as TValue;\n }\n\n if (isRecord(value)) {\n const updatedValue = Object.entries(value).reduce<TRecord>(\n (accumulator, [key, nestedValue]) => {\n if (nestedValue !== undefined) {\n accumulator[key] = removeUndefined(nestedValue);\n }\n\n return accumulator;\n },\n {},\n );\n\n return updatedValue as TValue;\n }\n\n return value;\n};\n\n/**\n * Test whether a location object's `pathname` equals a key.\n *\n * @param {{ pathname?: string } | null | undefined} location - Object expected\n * to have a `pathname`.\n * @param {string} key - Path to compare.\n * @returns {boolean}\n * @example\n * validPath({ pathname: \"/home\" }, \"/home\") // true\n */\nexport const validPath = (\n location: { pathname?: string } | null | undefined,\n key: string,\n): boolean => {\n return location?.pathname === key;\n};\n\n/**\n * Return the first element if the input is an array; otherwise return the value itself.\n *\n * @typeParam T - Element type.\n * @param {T | T[]} input - A single value or an array.\n * @returns {T} First element or the input value.\n * @example\n * returnObject([1,2,3]) // 1\n * returnObject(5) // 5\n */\nexport const returnObject = <T>(input: T | T[]): T => {\n return Array.isArray(input) ? input[0] : input;\n};\n\n/**\n * Filter out items from `array1` whose `id` appears in `array2`.\n *\n * @typeParam T - Object type with an `id` field.\n * @param {T[]} [array1] - Source array.\n * @param {T[]} [array2] - Items whose `id`s should be excluded.\n * @returns {T[]} Filtered array (or `[]` on invalid input).\n */\nexport const filterArrayById = <T extends { id: number | string }>(\n array1?: T[],\n array2?: T[],\n): T[] => {\n if (!Array.isArray(array1) || !Array.isArray(array2)) {\n return [];\n }\n\n const idsToExclude = new Set(array2.map((item) => item.id));\n return array1.filter((item) => !idsToExclude.has(item.id));\n};\n\n/**\n * Sort an array of objects by a given property (ascending).\n *\n * Mutates the original array (uses `Array.prototype.sort`).\n *\n * @typeParam T - Object type.\n * @typeParam TKey - Sortable property key.\n * @param {T[]} array - Array to sort.\n * @param {TKey} property - Property name to sort by.\n * @returns {T[]} The same array instance, sorted (or empty array if input invalid).\n */\nexport const sortArrayByProperty = <\n TKey extends PropertyKey,\n T extends Record<TKey, TSortableValue>,\n>(\n array: T[],\n property: TKey,\n): T[] => {\n if (!Array.isArray(array) || array.length === 0) return [];\n\n return array.sort((a, b) => {\n const firstValue = a[property];\n const secondValue = b[property];\n\n if (firstValue === secondValue) return 0;\n if (firstValue === null || firstValue === undefined) return 1;\n if (secondValue === null || secondValue === undefined) return -1;\n if (firstValue < secondValue) return -1;\n if (firstValue > secondValue) return 1;\n return 0;\n });\n};\n\n/**\n * Recursively replace `null` values with empty strings.\n *\n * Works on primitives, arrays, Dates, and plain objects.\n *\n * @typeParam TValue - Input value type.\n * @param {TValue} value - Input value.\n * @returns {TReplaceNulls<TValue>} Value with all `null` replaced by `\"\"`.\n */\nexport const replaceNulls = <TValue>(value: TValue): TReplaceNulls<TValue> => {\n if (value === null) {\n return \"\" as TReplaceNulls<TValue>;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => replaceNulls(item)) as TReplaceNulls<TValue>;\n }\n\n if (isRecord(value)) {\n const updatedValue = Object.entries(value).reduce<TRecord>(\n (accumulator, [key, nestedValue]) => {\n accumulator[key] = replaceNulls(nestedValue);\n return accumulator;\n },\n {},\n );\n\n return updatedValue as TReplaceNulls<TValue>;\n }\n\n return value as TReplaceNulls<TValue>;\n};\n\n/**\n * Recursively remove object keys that contain a dot (`.`).\n *\n * @typeParam TValue - Input value type.\n * @param {TValue} value - Input object or array.\n * @returns {TValue} New value with dotted keys removed at all levels.\n */\nexport const removeFormProperties = <TValue>(value: TValue): TValue => {\n if (Array.isArray(value)) {\n return value.map((item) => removeFormProperties(item)) as TValue;\n }\n\n if (isRecord(value)) {\n const updatedValue = Object.entries(value).reduce<TRecord>(\n (accumulator, [key, nestedValue]) => {\n if (!key.includes(\".\")) {\n accumulator[key] = removeFormProperties(nestedValue);\n }\n\n return accumulator;\n },\n {},\n );\n\n return updatedValue as TValue;\n }\n\n return value;\n};\n\n/**\n * Recursively convert string booleans `\"true\"`/`\"false\"` to actual booleans.\n *\n * Leaves all other values unchanged.\n *\n * @typeParam TValue - Input value type.\n * @param {TValue} value - Input object or array.\n * @returns {TValue} New value with boolean-like strings converted.\n */\nexport const convertStringBooleans = <TValue>(value: TValue): TValue => {\n if (Array.isArray(value)) {\n return value.map((item) => convertStringBooleans(item)) as TValue;\n }\n\n if (isRecord(value)) {\n const updatedValue = Object.entries(value).reduce<TRecord>(\n (accumulator, [key, nestedValue]) => {\n if (nestedValue === \"true\") {\n accumulator[key] = true;\n } else if (nestedValue === \"false\") {\n accumulator[key] = false;\n } else {\n accumulator[key] = convertStringBooleans(nestedValue);\n }\n\n return accumulator;\n },\n {},\n );\n\n return updatedValue as TValue;\n }\n\n return value;\n};\n\n/**\n * Convenience helper to clean form-like data:\n * - Removes `undefined` properties\n * - Converts string booleans to booleans\n * - Removes keys containing a dot (`.`)\n *\n * @typeParam TObject - Form data object type.\n * @param {TObject} objectToClean - Input data.\n * @returns {Partial<TObject>} Cleaned clone.\n */\nexport const cleanFormData = <TObject extends TRecord>(\n objectToClean: TObject,\n): Partial<TObject> => {\n return removeFormProperties(\n convertStringBooleans(removeUndefined(objectToClean)),\n ) as Partial<TObject>;\n};\n\n/**\n * Return a default pagination object, allowing optional sort and filters.\n *\n * @param {ISortCondition[]} [sort] - Optional sort conditions.\n * @param {IFilterCondition[]} [filters] - Optional filter conditions.\n * @returns {{ page: number; size: number; sort: ISortCondition[]; filters: IFilterCondition[] }}\n * @example\n * resetPagination() // => { page:1, size:25, sort:[], filters:[] }\n */\nexport const resetPagination = (\n sort?: ISortCondition[],\n filters?: IFilterCondition[],\n) => {\n return {\n page: 1,\n size: 25,\n sort: sort || [],\n filters: filters || [],\n };\n};\n\n/**\n * Format a string of digits into a U.S. phone number.\n *\n * Strips non-numeric characters and formats 10 digits as `(XXX) XXX-XXXX`.\n * Strips a leading US country code when 11 digits are provided.\n * If a value cannot be formatted, returns the original value as a string.\n *\n * @param {string | number} value - Phone number digits (string or number).\n * @returns {string} Formatted phone number, or original input if invalid length.\n * @example\n * formatPhoneNumber(\"1234567890\") // \"(123) 456-7890\"\n * formatPhoneNumber(9876543210) // \"(987) 654-3210\"\n * formatPhoneNumber(\"555\") // \"555\"\n */\nexport const formatPhoneNumber = (value: string | number): string => {\n const originalValue = value.toString();\n const digits = originalValue.replace(/\\D/g, \"\");\n const normalizedDigits =\n digits.length === 11 && digits.startsWith(\"1\") ? digits.slice(1) : digits;\n\n if (normalizedDigits.length !== 10) return originalValue;\n\n const area = normalizedDigits.slice(0, 3);\n const prefix = normalizedDigits.slice(3, 6);\n const line = normalizedDigits.slice(6);\n\n return `(${area}) ${prefix}-${line}`;\n};\n\n/**\n * Format a number with thousands separators (commas).\n *\n * @param {number} value - Number to format.\n * @returns {string} String with commas.\n * @example\n * formatNumber(1234567) // \"1,234,567\"\n */\nexport const formatNumber = (value: number): string => {\n return value.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n};\n\n/**\n * Remove comma separators from a number-like value.\n *\n * @param {number | string} value - Number-like value.\n * @returns {string} Value without comma separators.\n */\nexport const parseNumber = (value: number | string): string => {\n return value.toString().replace(/,/g, \"\");\n};\n\n/**\n * Delete a property from an object if it exists (no-op if it doesn't).\n *\n * @typeParam TObject - Object type.\n * @param {TObject} objectToUpdate - Target object (mutated).\n * @param {keyof TObject | string} propertyName - Property to delete.\n * @returns {void}\n */\nexport const deletePropertyIfExists = <TObject extends TRecord>(\n objectToUpdate: TObject,\n propertyName: keyof TObject | string,\n): void => {\n if (Object.prototype.hasOwnProperty.call(objectToUpdate, propertyName)) {\n delete objectToUpdate[propertyName as keyof TObject];\n }\n};\n\n/**\n * Split an array into chunks of a given size.\n *\n * @typeParam T - Element type.\n * @param {T[]} array - Source array.\n * @param {number} chunkSize - Size of each chunk.\n * @returns {T[][]} Array of chunks (last one may be smaller).\n * @example\n * chunkArray([1,2,3,4,5], 2) // [[1,2],[3,4],[5]]\n */\nexport const chunkArray = <T>(array: T[], chunkSize: number): T[][] => {\n if (!Array.isArray(array) || chunkSize <= 0 || !Number.isFinite(chunkSize)) {\n return [];\n }\n\n const result: T[][] = [];\n const normalizedChunkSize = Math.floor(chunkSize);\n\n for (let i = 0; i < array.length; i += normalizedChunkSize) {\n result.push(array.slice(i, i + normalizedChunkSize));\n }\n\n return result;\n};\n\n/**\n * Return a shallow clone of `objectToOmitFrom` without the listed properties.\n *\n * @typeParam TObject - Source object type.\n * @typeParam TKey - Keys to omit.\n * @param {TObject} objectToOmitFrom - Source object.\n * @param {readonly TKey[]} propsToOmit - Property names to omit.\n * @returns {Omit<TObject, TKey>} New object without omitted props.\n * @example\n * omitProperties({a:1,b:2}, [\"b\"]) // { a:1 }\n */\nexport const omitProperties = <\n TObject extends TRecord,\n TKey extends keyof TObject,\n>(\n objectToOmitFrom: TObject,\n propsToOmit: readonly TKey[],\n): Omit<TObject, TKey> => {\n const updatedObject: Partial<TObject> = { ...objectToOmitFrom };\n\n propsToOmit.forEach((propertyName) => {\n delete updatedObject[propertyName];\n });\n\n return updatedObject as Omit<TObject, TKey>;\n};\n\n/**\n * Safe `hasOwnProperty` check.\n *\n * @param {unknown} value - Value to test.\n * @param {PropertyKey} key - Property name.\n * @returns {boolean}\n */\nexport const hasProperty = <TKey extends PropertyKey>(\n value: unknown,\n key: TKey,\n): value is Record<TKey, unknown> => {\n if (value === null || value === undefined) return false;\n return Object.prototype.hasOwnProperty.call(value, key);\n};\n\n/**\n * Safe `hasOwnProperty` alias from the reference utilities.\n *\n * @param {unknown} value - Value to test.\n * @param {PropertyKey} key - Property name.\n * @returns {boolean}\n */\nexport const hasOwnProp = <TKey extends PropertyKey>(\n value: unknown,\n key: TKey,\n): value is Record<TKey, unknown> => {\n return hasProperty(value, key);\n};\n\n/**\n * Determine if an object has at least one own enumerable property.\n *\n * @param {unknown} value - Object to test.\n * @returns {boolean} `true` if there is at least one key.\n */\nexport const hasProperties = (value: unknown): boolean => {\n return isRecord(value) && Object.keys(value).length > 0;\n};\n\n/**\n * Get the first own enumerable property value from an object.\n *\n * @typeParam TObject - Source object type.\n * @param {TObject | null | undefined} value - Source object.\n * @returns {TObject[keyof TObject] | null} First value, or null for empty/non-object input.\n */\nexport const getFirstPropertyValue = <TObject extends TRecord>(\n value: TObject | null | undefined,\n): TObject[keyof TObject] | null => {\n if (value === null || value === undefined || !hasProperties(value)) {\n return null;\n }\n\n const source = value as TObject;\n const keys = Object.keys(source) as (keyof TObject)[];\n return source[keys[0]];\n};\n\n/**\n * Get a nested value from an object using dot notation.\n *\n * @param {unknown} value - Source object.\n * @param {string} path - Dot-delimited path.\n * @returns {unknown} Nested value, or undefined when the path cannot be resolved.\n * @example\n * getNestedValue({ user: { name: \"John\" } }, \"user.name\") // \"John\"\n */\nexport const getNestedValue = (value: unknown, path: string): unknown => {\n const pathSegments = getPathSegments(path);\n\n if (pathSegments.length === 0) {\n return value;\n }\n\n let currentValue: unknown = value;\n\n for (const pathSegment of pathSegments) {\n if (!isSafePathSegment(pathSegment)) {\n return undefined;\n }\n\n if (currentValue === null || currentValue === undefined) {\n return undefined;\n }\n\n if (\n typeof currentValue !== \"object\" &&\n typeof currentValue !== \"function\"\n ) {\n return undefined;\n }\n\n currentValue = (currentValue as TPropertyRecord)[pathSegment];\n }\n\n return currentValue;\n};\n\n/**\n * Set a nested value on an object using dot notation.\n *\n * Mutates and returns the provided object. Unsafe path segments are ignored to\n * prevent prototype pollution.\n *\n * @typeParam TObject - Target object type.\n * @param {TObject} objectToUpdate - Target object.\n * @param {string} path - Dot-delimited path.\n * @param {unknown} value - Value to set.\n * @returns {TObject} The mutated target object.\n * @example\n * setNestedValue({}, \"user.name\", \"John\") // { user: { name: \"John\" } }\n */\nexport const setNestedValue = <TObject extends TRecord>(\n objectToUpdate: TObject,\n path: string,\n value: unknown,\n): TObject => {\n const pathSegments = getPathSegments(path);\n\n if (\n pathSegments.length === 0 ||\n pathSegments.some((pathSegment) => !isSafePathSegment(pathSegment))\n ) {\n return objectToUpdate;\n }\n\n let currentValue: TRecord = objectToUpdate;\n\n for (let i = 0; i < pathSegments.length - 1; i += 1) {\n const pathSegment = pathSegments[i];\n const nextValue = currentValue[pathSegment];\n\n if (!isRecord(nextValue)) {\n currentValue[pathSegment] = {};\n }\n\n currentValue = currentValue[pathSegment] as TRecord;\n }\n\n currentValue[pathSegments[pathSegments.length - 1]] = value;\n return objectToUpdate;\n};\n\n/**\n * Deep clone a value while preserving Dates and circular references.\n *\n * @typeParam TValue - Input value type.\n * @param {TValue} value - Value to clone.\n * @returns {TValue} Deep clone of the input.\n */\nexport const deepClone = <TValue>(value: TValue): TValue => {\n const cloneValue = <TNestedValue>(\n nestedValue: TNestedValue,\n seenValues: WeakMap<object, unknown>,\n ): TNestedValue => {\n if (nestedValue === null || typeof nestedValue !== \"object\") {\n return nestedValue;\n }\n\n if (nestedValue instanceof Date) {\n return new Date(nestedValue.getTime()) as TNestedValue;\n }\n\n if (seenValues.has(nestedValue)) {\n return seenValues.get(nestedValue) as TNestedValue;\n }\n\n if (Array.isArray(nestedValue)) {\n const clonedArray: unknown[] = [];\n seenValues.set(nestedValue, clonedArray);\n\n nestedValue.forEach((item) => {\n clonedArray.push(cloneValue(item, seenValues));\n });\n\n return clonedArray as TNestedValue;\n }\n\n const clonedObject = Object.create(\n Object.getPrototypeOf(nestedValue),\n ) as TPropertyRecord;\n seenValues.set(nestedValue, clonedObject);\n\n Reflect.ownKeys(nestedValue).forEach((key) => {\n clonedObject[key] = cloneValue(\n (nestedValue as TPropertyRecord)[key],\n seenValues,\n );\n });\n\n return clonedObject as TNestedValue;\n };\n\n return cloneValue(value, new WeakMap<object, unknown>());\n};\n\n/**\n * Flatten a nested object into dot notation.\n *\n * Arrays and Dates are treated as leaf values.\n *\n * @param {TRecord} value - Source object.\n * @param {string} [prefix] - Internal prefix for recursion.\n * @returns {TRecord} Flattened object.\n * @example\n * flatten({ user: { name: \"John\" } }) // { \"user.name\": \"John\" }\n */\nexport const flatten = (value: TRecord, prefix = \"\"): TRecord => {\n const result: TRecord = {};\n\n Object.entries(value).forEach(([key, nestedValue]) => {\n const newKey = prefix ? `${prefix}.${key}` : key;\n\n if (isRecord(nestedValue)) {\n Object.assign(result, flatten(nestedValue, newKey));\n return;\n }\n\n result[newKey] = nestedValue;\n });\n\n return result;\n};\n\n/**\n * Convert a dot-notation object into a nested object.\n *\n * Unsafe path segments are ignored to prevent prototype pollution.\n *\n * @param {TRecord} value - Dot-notation source object.\n * @returns {TRecord} Nested object.\n * @example\n * unflatten({ \"user.name\": \"John\" }) // { user: { name: \"John\" } }\n */\nexport const unflatten = (value: TRecord): TRecord => {\n const result: TRecord = {};\n\n Object.entries(value).forEach(([key, nestedValue]) => {\n setNestedValue(result, key, nestedValue);\n });\n\n return result;\n};\n","/**\n * String utilities for common text manipulation tasks.\n */\n\nimport { TUSStateCode } from \"@/types\";\n\nconst wordBoundaryRegex = /([a-z0-9])([A-Z])/g;\nconst acronymBoundaryRegex = /([A-Z]+)([A-Z][a-z])/g;\n\nconst getWords = (value: string): string[] => {\n return value\n .trim()\n .replace(acronymBoundaryRegex, \"$1 $2\")\n .replace(wordBoundaryRegex, \"$1 $2\")\n .replace(/[^a-zA-Z0-9]+/g, \" \")\n .trim()\n .split(/\\s+/)\n .filter(Boolean);\n};\n\nconst capitalizeWord = (value: string): string => {\n if (!value) {\n return \"\";\n }\n\n return value.charAt(0).toUpperCase() + value.slice(1).toLowerCase();\n};\n\n/**\n * Adds commas to a number for thousands separators.\n *\n * @example formatNumber(1000) => '1,000'\n * @example formatNumber('1234567') => '1,234,567'\n * @example formatNumber(1234567.89) => '1,234,567.89'\n */\nexport const formatNumber = (value: string | number): string => {\n const str = String(value);\n const [integer, decimal] = str.split(\".\");\n const formattedInteger = integer.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n\n return decimal !== undefined\n ? `${formattedInteger}.${decimal}`\n : formattedInteger;\n};\n\nexport const normalCase = (str?: string): string => {\n if (!str) {\n return \"\";\n }\n\n return getWords(str).map(capitalizeWord).join(\" \");\n};\n\nexport const sentenceCase = (str?: string): string => {\n if (!str) {\n return \"\";\n }\n\n const normalizedValue = str.trim().toLowerCase();\n\n return normalizedValue.charAt(0).toUpperCase() + normalizedValue.slice(1);\n};\n\nexport const upperCase = (str?: string): string => {\n return str?.toUpperCase() ?? \"\";\n};\n\nexport const lowerCase = (str?: string): string => {\n return str?.toLowerCase() ?? \"\";\n};\n\n/**\n * Converts a string to camelCase.\n *\n * @example toCamelCase('hello-world') => 'helloWorld'\n * @example toCamelCase('hello_world') => 'helloWorld'\n */\nexport const toCamelCase = (str: string): string => {\n const words = getWords(str);\n\n if (words.length === 0) {\n return \"\";\n }\n\n const [firstWord, ...remainingWords] = words;\n\n return [firstWord.toLowerCase(), ...remainingWords.map(capitalizeWord)].join(\n \"\",\n );\n};\n\nexport const camelCase = toCamelCase;\n\n/**\n * Converts a string to kebab-case.\n *\n * @example toKebabCase('helloWorld') => 'hello-world'\n * @example toKebabCase('Hello_World') => 'hello-world'\n */\nexport const toKebabCase = (str: string): string => {\n return getWords(str)\n .map((word) => word.toLowerCase())\n .join(\"-\");\n};\n\nexport const kebabCase = toKebabCase;\n\n/**\n * Converts a string to snake_case.\n *\n * @example toSnakeCase('helloWorld') => 'hello_world'\n * @example toSnakeCase('hello-world') => 'hello_world'\n */\nexport const toSnakeCase = (str: string): string => {\n return getWords(str)\n .map((word) => word.toLowerCase())\n .join(\"_\");\n};\n\nexport const snakeCase = toSnakeCase;\n\n/**\n * Converts a string to PascalCase.\n *\n * @example toPascalCase('hello-world') => 'HelloWorld'\n * @example toPascalCase('hello_world') => 'HelloWorld'\n */\nexport const toPascalCase = (str: string): string => {\n return getWords(str).map(capitalizeWord).join(\"\");\n};\n\nexport const pascalCase = toPascalCase;\n\nexport const snakeCaseToSpaces = (str: string): string => {\n return str.replace(/_+/g, \" \").trim();\n};\n\nexport const kebabToSpaces = (str: string): string => {\n return str.replace(/-+/g, \" \").trim();\n};\n\n/**\n * Capitalizes the first character of a string.\n *\n * @example capitalize('hello world') => 'Hello world'\n */\nexport const capitalize = (str: string): string => {\n if (!str) {\n return \"\";\n }\n\n return str.charAt(0).toUpperCase() + str.slice(1);\n};\n\n/**\n * Capitalizes the first letter of each word.\n *\n * @example titleCase('hello world') => 'Hello World'\n */\nexport const titleCase = (str: string): string => {\n return str.replace(/\\b\\w/g, (char) => char.toUpperCase());\n};\n\n/**\n * Truncates a string to a specified length and adds ellipsis.\n *\n * @example truncate('hello world', 5) => 'he...'\n */\nexport const truncate = (\n str: string,\n length: number,\n suffix = \"...\",\n): string => {\n if (length <= 0) {\n return \"\";\n }\n\n if (str.length <= length) {\n return str;\n }\n\n const maxLength = Math.max(0, length - suffix.length);\n\n if (maxLength === 0) {\n return suffix.length > length ? \"\" : suffix;\n }\n\n return str.slice(0, maxLength) + suffix;\n};\n\n/**\n * Removes all whitespace from a string.\n *\n * @example removeWhitespace('hello world') => 'helloworld'\n */\nexport const removeWhitespace = (str: string): string => {\n return str.replace(/\\s+/g, \"\");\n};\n\n/**\n * Removes all non-alphanumeric characters.\n *\n * @example removeSpecialChars('hello@world#123') => 'helloworld123'\n */\nexport const removeSpecialChars = (str: string): string => {\n return str.replace(/[^a-zA-Z0-9]/g, \"\");\n};\n\n/**\n * Generates a URL-friendly slug from a string.\n *\n * @example slug('Hello World 2024!') => 'hello-world-2024'\n */\nexport const slug = (str: string): string => {\n return str\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, \"\")\n .replace(/[\\s_]+/g, \"-\")\n .replace(/-+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n};\n\n/**\n * Validates if a string is a valid email.\n *\n * @example isEmail('user@example.com') => true\n */\nexport const isEmail = (str: string): boolean => {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(str.trim());\n};\n\n/**\n * Validates if a string is a valid URL.\n *\n * @example isUrl('https://example.com') => true\n */\nexport const isUrl = (str: string): boolean => {\n try {\n const parsedUrl = new URL(str);\n return parsedUrl.protocol === \"http:\" || parsedUrl.protocol === \"https:\";\n } catch {\n return false;\n }\n};\n\n/**\n * Validates if a string contains only numbers.\n *\n * @example isNumeric('12345') => true\n * @example isNumeric('123abc') => false\n */\nexport const isNumeric = (str: string): boolean => {\n return /^\\d+$/.test(str);\n};\n\n/**\n * Checks if a string is empty or contains only whitespace.\n *\n * @example isEmpty(' ') => true\n * @example isEmpty('hello') => false\n */\nexport const isEmpty = (str: string): boolean => {\n return str.trim().length === 0;\n};\n\n/**\n * Reverses a string.\n *\n * @example reverse('hello') => 'olleh'\n */\nexport const reverse = (str: string): string => {\n return Array.from(str).reverse().join(\"\");\n};\n\n/**\n * Repeats a string a specified number of times.\n *\n * @example repeat('ab', 3) => 'ababab'\n */\nexport const repeat = (str: string, times: number): string => {\n return str.repeat(Math.max(0, Math.floor(times)));\n};\n\n/**\n * Pads a string to a specified length.\n *\n * @example padStart('5', 3, '0') => '005'\n * @example padEnd('5', 3, '0') => '500'\n */\nexport const padStart = (\n str: string,\n length: number,\n padChar = \" \",\n): string => {\n return str.padStart(length, padChar);\n};\n\nexport const padEnd = (str: string, length: number, padChar = \" \"): string => {\n return str.padEnd(length, padChar);\n};\n\n/**\n * Encodes a string to Base64.\n *\n * @example toBase64('hello') => 'aGVsbG8='\n */\nexport const toBase64 = (str: string): string => {\n return Buffer.from(str, \"utf-8\").toString(\"base64\");\n};\n\n/**\n * Decodes a Base64 string.\n *\n * @example fromBase64('aGVsbG8=') => 'hello'\n */\nexport const fromBase64 = (str: string): string => {\n return Buffer.from(str, \"base64\").toString(\"utf-8\");\n};\n\n/**\n * Counts the number of words in a string.\n *\n * @example wordCount('hello world test') => 3\n */\nexport const wordCount = (str: string): number => {\n const trimmedValue = str.trim();\n\n if (!trimmedValue) {\n return 0;\n }\n\n return trimmedValue.split(/\\s+/).length;\n};\n\n/**\n * Counts the number of characters, excluding whitespace.\n *\n * @example charCount('hello world') => 10\n */\nexport const charCount = (str: string): number => {\n return str.replace(/\\s/g, \"\").length;\n};\n\n/**\n * Repeats a character a specified number of times.\n *\n * @example repeatChar('*', 5) => '*****'\n */\nexport const repeatChar = (char: string, times: number): string => {\n return char.repeat(Math.max(0, Math.floor(times)));\n};\n\n/**\n * Extracts numbers from a string.\n *\n * @example extractNumbers('abc123def456') => '123456'\n */\nexport const extractNumbers = (str: string): string => {\n return str.replace(/\\D/g, \"\");\n};\n\n/**\n * Removes duplicate consecutive characters.\n *\n * @example removeDuplicates('aabbccdd') => 'abcd'\n */\nexport const removeDuplicates = (str: string): string => {\n return str.replace(/(.)\\1+/g, \"$1\");\n};\n\n/**\n * Checks if a string is a palindrome.\n *\n * @example isPalindrome('racecar') => true\n * @example isPalindrome('hello') => false\n */\nexport const isPalindrome = (str: string): boolean => {\n const cleaned = str.toLowerCase().replace(/[^a-z0-9]/g, \"\");\n return cleaned === cleaned.split(\"\").reverse().join(\"\");\n};\n\n/**\n * Finds the longest word in a string.\n *\n * @example longestWord('the quick brown fox') => 'quick'\n */\nexport const longestWord = (str: string): string => {\n const words = str.trim().split(/\\s+/).filter(Boolean);\n\n return words.reduce(\n (longest, word) => (word.length > longest.length ? word : longest),\n \"\",\n );\n};\n\n/**\n * Pluralizes common English words using a simple ruleset.\n *\n * @example pluralize('cat') => 'cats'\n * @example pluralize('box') => 'boxes'\n */\nexport const pluralize = (word: string): string => {\n const exceptions: Record<string, string> = {\n child: \"children\",\n person: \"people\",\n man: \"men\",\n woman: \"women\",\n tooth: \"teeth\",\n foot: \"feet\",\n mouse: \"mice\",\n };\n const lowercaseWord = word.toLowerCase();\n const exception = exceptions[lowercaseWord];\n\n if (exception) {\n return word.charAt(0) === word.charAt(0).toUpperCase()\n ? capitalize(exception)\n : exception;\n }\n\n if (/[^aeiou]y$/i.test(word)) {\n return `${word.slice(0, -1)}ies`;\n }\n\n if (/(s|x|z|ch|sh)$/i.test(word)) {\n return `${word}es`;\n }\n\n if (/fe$/i.test(word)) {\n return `${word.slice(0, -2)}ves`;\n }\n\n if (/f$/i.test(word)) {\n return `${word.slice(0, -1)}ves`;\n }\n\n return `${word}s`;\n};\n\n/**\n * Highlights a substring within a string by wrapping it with markers.\n *\n * @example highlight('hello world', 'world', '**') => 'hello **world**'\n */\nexport const highlight = (\n str: string,\n substring: string,\n marker = \"**\",\n): string => {\n if (!substring) {\n return str;\n }\n\n return str.replace(\n new RegExp(`(${escapeRegex(substring)})`, \"gi\"),\n `${marker}$1${marker}`,\n );\n};\n\n/**\n * Converts a string to a regex-safe string.\n *\n * @example escapeRegex('a.b*c') => 'a\\\\.b\\\\*c'\n */\nexport const escapeRegex = (str: string): string => {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n};\n\n/**\n * Finds similarity between two strings using Levenshtein distance.\n * Returns a value between 0 and 1, where 1 means identical.\n *\n * @example stringSimilarity('hello', 'hallo') => 0.8\n */\nexport const stringSimilarity = (str1: string, str2: string): number => {\n const s1 = str1.toLowerCase();\n const s2 = str2.toLowerCase();\n const longer = s1.length > s2.length ? s1 : s2;\n const shorter = s1.length > s2.length ? s2 : s1;\n\n if (longer.length === 0) {\n return 1;\n }\n\n const editDistance = getEditDistance(longer, shorter);\n return (longer.length - editDistance) / longer.length;\n};\n\n/**\n * Helper function to calculate edit distance (Levenshtein distance).\n */\nconst getEditDistance = (s1: string, s2: string): number => {\n const costs: number[] = [];\n\n for (let i = 0; i <= s1.length; i += 1) {\n let lastValue = i;\n\n for (let j = 0; j <= s2.length; j += 1) {\n if (i === 0) {\n costs[j] = j;\n } else if (j > 0) {\n let newValue = costs[j - 1];\n\n if (s1.charAt(i - 1) !== s2.charAt(j - 1)) {\n newValue = Math.min(Math.min(newValue, lastValue), costs[j]) + 1;\n }\n\n costs[j - 1] = lastValue;\n lastValue = newValue;\n }\n }\n\n if (i > 0) {\n costs[s2.length] = lastValue;\n }\n }\n\n return costs[s2.length];\n};\n\n/**\n * Strips HTML tags from a string.\n *\n * @example stripHtml('<p>Hello <b>world</b></p>') => 'Hello world'\n */\nexport const stripHtml = (str: string): string => {\n return str.replace(/<[^>]*>/g, \"\");\n};\n\n/**\n * Replaces multiple spaces with a single space.\n *\n * @example normalizeSpaces('hello world') => 'hello world'\n */\nexport const normalizeSpaces = (str: string): string => {\n return str.replace(/\\s+/g, \" \").trim();\n};\n\n/**\n * Converts a string to a number, returning null if not valid.\n *\n * @example toNumber('123') => 123\n * @example toNumber('abc') => null\n */\nexport const toNumber = (str: string): number | null => {\n if (str.trim() === \"\") {\n return null;\n }\n\n const num = Number(str);\n return Number.isNaN(num) ? null : num;\n};\n\n/**\n * Splits a string by multiple delimiters.\n *\n * @example splitMultiple('a,b;c:d', ',', ';', ':') => ['a', 'b', 'c', 'd']\n */\nexport const splitMultiple = (\n str: string,\n ...delimiters: string[]\n): string[] => {\n if (delimiters.length === 0) {\n return [str].filter((part) => part.length > 0);\n }\n\n let result = [str];\n\n delimiters.forEach((delimiter) => {\n if (delimiter !== \"\") {\n result = result.flatMap((part) => part.split(delimiter));\n }\n });\n\n return result.filter((part) => part.length > 0);\n};\n\n/**\n * Checks if a string contains any of the provided substrings.\n *\n * @example containsAny('hello world', 'foo', 'world') => true\n */\nexport const containsAny = (str: string, ...substrings: string[]): boolean => {\n return substrings.some((substring) => str.includes(substring));\n};\n\n/**\n * Checks if a string contains all of the provided substrings.\n *\n * @example containsAll('hello world', 'hello', 'world') => true\n */\nexport const containsAll = (str: string, ...substrings: string[]): boolean => {\n return substrings.every((substring) => str.includes(substring));\n};\n\nexport interface IAddress {\n addressLine1: string;\n addressLine2?: string;\n city: string;\n stateCode: TUSStateCode;\n postalCode: string;\n}\n\nexport const formatAddress = (address: IAddress): string => {\n const parts = [\n address.addressLine1,\n address.addressLine2,\n address.city,\n address.stateCode,\n address.postalCode,\n ].filter(Boolean);\n\n return parts.join(\", \");\n};\n","export * from \"./date\";\nexport * from \"./object\";\nexport {\n camelCase,\n capitalize,\n charCount,\n containsAll,\n containsAny,\n escapeRegex,\n extractNumbers,\n formatAddress,\n fromBase64,\n highlight,\n isEmail,\n isEmpty,\n isNumeric,\n isPalindrome,\n isUrl,\n kebabCase,\n kebabToSpaces,\n longestWord,\n lowerCase,\n normalCase,\n normalizeSpaces,\n padEnd,\n padStart,\n pascalCase,\n pluralize,\n removeDuplicates,\n removeSpecialChars,\n removeWhitespace,\n repeat,\n repeatChar,\n reverse,\n sentenceCase,\n slug,\n snakeCase,\n snakeCaseToSpaces,\n splitMultiple,\n stringSimilarity,\n stripHtml,\n titleCase,\n toBase64,\n toCamelCase,\n toKebabCase,\n toNumber,\n toPascalCase,\n toSnakeCase,\n truncate,\n upperCase,\n wordCount,\n} from \"./string\";\n\nexport type { IAddress } from \"./string\";\n\ntype Success<T> = {\n data: T;\n error: null;\n};\n\ntype Failure<E> = {\n data: null;\n error: E;\n};\n\ntype Result<T, E = unknown> = Success<T> | Failure<E>;\n\nexport const tryCatch = async <T, E = unknown>(\n callback: () => T | Promise<T>,\n): Promise<Result<T, E>> => {\n try {\n const data = await callback();\n\n return {\n data,\n error: null,\n };\n } catch (error) {\n return {\n data: null,\n error: error as E,\n };\n }\n};\n","/**\n * API Response Types\n * Standard response structure for all API endpoints.\n */\n\nimport type { TDateTimeString, TEnvironment, TJsonValue } from \"../base\";\n\nexport const HTTP_METHOD = {\n GET: \"GET\",\n POST: \"POST\",\n PUT: \"PUT\",\n PATCH: \"PATCH\",\n DELETE: \"DELETE\",\n} as const;\n\nexport type THttpMethod = (typeof HTTP_METHOD)[keyof typeof HTTP_METHOD];\n\n/**\n * Error Codes\n * Standardized error codes used across the platform.\n */\nexport const ERROR_CODES = {\n BAD_REQUEST: \"BAD_REQUEST\",\n VALIDATION_ERROR: \"VALIDATION_ERROR\",\n MISSING_FIELDS: \"MISSING_FIELDS\",\n UNAUTHORIZED: \"UNAUTHORIZED\",\n INVALID_TOKEN: \"INVALID_TOKEN\",\n INVALID_CREDENTIALS: \"INVALID_CREDENTIALS\",\n FORBIDDEN: \"FORBIDDEN\",\n NOT_FOUND: \"NOT_FOUND\",\n CONFLICT: \"CONFLICT\",\n ALREADY_EXISTS: \"ALREADY_EXISTS\",\n RATE_LIMIT: \"RATE_LIMIT\",\n RATE_LIMIT_EXCEEDED: \"RATE_LIMIT_EXCEEDED\",\n INTERNAL_ERROR: \"INTERNAL_ERROR\",\n DATABASE_ERROR: \"DATABASE_ERROR\",\n NOT_IMPLEMENTED: \"NOT_IMPLEMENTED\",\n} as const;\n\nexport type TErrorCode = (typeof ERROR_CODES)[keyof typeof ERROR_CODES];\n\n/**\n * HTTP Status Codes\n * Common status codes used in API responses.\n */\nexport const HTTP_STATUS = {\n Ok: 200,\n Created: 201,\n NoContent: 204,\n BadRequest: 400,\n Unauthorized: 401,\n Forbidden: 403,\n NotFound: 404,\n Conflict: 409,\n UnprocessableEntity: 422,\n TooManyRequests: 429,\n InternalError: 500,\n} as const;\n\nexport type THttpStatusCode = (typeof HTTP_STATUS)[keyof typeof HTTP_STATUS];\n\nexport type TApiErrorDetails = TJsonValue;\n\nexport interface IApiError<TDetails = TApiErrorDetails> {\n message: string;\n code?: TErrorCode;\n details?: TDetails;\n}\n\nexport interface IApiMeta {\n timestamp: TDateTimeString;\n version: string;\n environment: TEnvironment;\n requestId?: string;\n}\n\nexport interface IApiSuccessResponse<TData = null> {\n success: true;\n data: TData;\n meta: IApiMeta;\n}\n\nexport interface IApiErrorResponse<TErrorDetails = TApiErrorDetails> {\n success: false;\n error: IApiError<TErrorDetails>;\n meta: IApiMeta;\n}\n\nexport type IApiResponse<TData = null, TErrorDetails = TApiErrorDetails> =\n | IApiSuccessResponse<TData>\n | IApiErrorResponse<TErrorDetails>;\n","export type TValidationIssueType =\n | \"INVALID_BODY\"\n | \"MISSING_FIELD\"\n | \"INVALID_FIELD\"\n | \"UNSUPPORTED_FIELD\";\n\nexport interface IValidationIssue<TFieldName extends string = string> {\n fieldName: TFieldName;\n type: TValidationIssueType;\n}\n\nexport interface IValidationResult<TValue extends object> {\n success: boolean;\n data?: TValue;\n issues: IValidationIssue[];\n}\n\nexport type TMissingValuePolicy = \"Nullish\" | \"BlankString\";\n\nexport interface IValidationField<TValue, TRequired extends boolean> {\n readonly valueType?: TValue;\n required: TRequired;\n missingValuePolicy: TMissingValuePolicy;\n validate: (value: unknown) => boolean;\n}\n\nexport type TValidationFieldMap = Record<\n string,\n IValidationField<unknown, boolean>\n>;\n\ntype TRequiredSchemaKeys<TFields extends TValidationFieldMap> = {\n [TKey in keyof TFields]: TFields[TKey] extends IValidationField<unknown, true>\n ? TKey\n : never;\n}[keyof TFields];\n\ntype TOptionalSchemaKeys<TFields extends TValidationFieldMap> = Exclude<\n keyof TFields,\n TRequiredSchemaKeys<TFields>\n>;\n\ntype TFieldValue<TField> =\n TField extends IValidationField<infer TValue, boolean> ? TValue : never;\n\nexport type TInferValidationFields<TFields extends TValidationFieldMap> = {\n [TKey in TRequiredSchemaKeys<TFields>]: TFieldValue<TFields[TKey]>;\n} & {\n [TKey in TOptionalSchemaKeys<TFields>]?: TFieldValue<TFields[TKey]>;\n};\n\nexport type TInferValidationSchemaInput<TSchema> =\n TSchema extends IRuntimeValidationSchema<infer TFields>\n ? TInferValidationFields<TFields>\n : never;\n\nexport interface IRuntimeValidationSchema<\n TFields extends TValidationFieldMap = TValidationFieldMap,\n> {\n fields: TFields;\n allowedFields: readonly Extract<keyof TFields, string>[];\n requiredFields: readonly Extract<TRequiredSchemaKeys<TFields>, string>[];\n validate: (\n value: unknown,\n options?: IRuntimeValidationOptions,\n ) => IValidationResult<TInferValidationFields<TFields>>;\n}\n\nexport interface IRuntimeValidationOptions {\n rejectUnknownFields?: boolean;\n}\n\nexport const createValidationSchema = <TFields extends TValidationFieldMap>(\n fields: TFields,\n): IRuntimeValidationSchema<TFields> => {\n const allowedFields = Object.keys(fields) as Extract<keyof TFields, string>[];\n const requiredFields = allowedFields.filter((fieldName) => {\n return fields[fieldName].required;\n }) as Extract<TRequiredSchemaKeys<TFields>, string>[];\n\n return {\n fields,\n allowedFields,\n requiredFields,\n validate: (value, options = {}) => {\n if (!isRecord(value)) {\n return {\n success: false,\n issues: [\n {\n fieldName: \"body\",\n type: \"INVALID_BODY\",\n },\n ],\n };\n }\n\n const issues = getValidationIssues(fields, value, options);\n\n if (issues.length > 0) {\n return {\n success: false,\n issues,\n };\n }\n\n return {\n success: true,\n data: value as TInferValidationFields<TFields>,\n issues: [],\n };\n },\n };\n};\n\nexport const requiredStringField = (\n missingValuePolicy: TMissingValuePolicy = \"Nullish\",\n): IValidationField<string, true> => ({\n required: true,\n missingValuePolicy,\n validate: isNonEmptyString,\n});\n\nexport const optionalStringField = (): IValidationField<string, false> => ({\n required: false,\n missingValuePolicy: \"Nullish\",\n validate: isNonEmptyString,\n});\n\nexport const optionalNullableStringField = (): IValidationField<\n string | null,\n false\n> => ({\n required: false,\n missingValuePolicy: \"Nullish\",\n validate: (value): value is string | null => {\n return value === null || isNonEmptyString(value);\n },\n});\n\nexport const requiredEmailField = (\n missingValuePolicy: TMissingValuePolicy = \"BlankString\",\n): IValidationField<string, true> => ({\n required: true,\n missingValuePolicy,\n validate: isEmail,\n});\n\nexport const requiredUuidField = (\n missingValuePolicy: TMissingValuePolicy = \"Nullish\",\n): IValidationField<string, true> => ({\n required: true,\n missingValuePolicy,\n validate: isUuid,\n});\n\nexport const optionalNullableNonNegativeIntegerField = (): IValidationField<\n number | null,\n false\n> => ({\n required: false,\n missingValuePolicy: \"Nullish\",\n validate: (value): value is number | null => {\n return value === null || (Number.isInteger(value) && Number(value) >= 0);\n },\n});\n\nexport const optionalRecordField = (): IValidationField<\n Record<string, unknown>,\n false\n> => ({\n required: false,\n missingValuePolicy: \"Nullish\",\n validate: isRecord,\n});\n\nexport const requiredEnumField = <TValue extends string>(\n allowedValues: readonly TValue[],\n missingValuePolicy: TMissingValuePolicy = \"Nullish\",\n): IValidationField<TValue, true> => ({\n required: true,\n missingValuePolicy,\n validate: (value): value is TValue => {\n return isAllowedStringValue(value, allowedValues);\n },\n});\n\nexport const optionalEnumField = <TValue extends string>(\n allowedValues: readonly TValue[],\n): IValidationField<TValue, false> => ({\n required: false,\n missingValuePolicy: \"Nullish\",\n validate: (value): value is TValue => {\n return isAllowedStringValue(value, allowedValues);\n },\n});\n\nexport const optionalNullableEnumField = <TValue extends string>(\n allowedValues: readonly TValue[],\n): IValidationField<TValue | null, false> => ({\n required: false,\n missingValuePolicy: \"Nullish\",\n validate: (value): value is TValue | null => {\n return value === null || isAllowedStringValue(value, allowedValues);\n },\n});\n\nconst getValidationIssues = <TFields extends TValidationFieldMap>(\n fields: TFields,\n value: Record<string, unknown>,\n options: IRuntimeValidationOptions,\n): IValidationIssue[] => {\n const allowedFieldSet = new Set(Object.keys(fields));\n const issues: IValidationIssue[] = [];\n\n Object.entries(fields).forEach(([fieldName, field]) => {\n const fieldValue = value[fieldName];\n\n if (\n field.required &&\n isMissingValue(fieldValue, field.missingValuePolicy)\n ) {\n issues.push({\n fieldName,\n type: \"MISSING_FIELD\",\n });\n return;\n }\n\n if (fieldValue === undefined) {\n return;\n }\n\n if (!field.validate(fieldValue)) {\n issues.push({\n fieldName,\n type: \"INVALID_FIELD\",\n });\n }\n });\n\n if (options.rejectUnknownFields === true) {\n Object.keys(value).forEach((fieldName) => {\n if (!allowedFieldSet.has(fieldName)) {\n issues.push({\n fieldName,\n type: \"UNSUPPORTED_FIELD\",\n });\n }\n });\n }\n\n return issues;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n};\n\nconst isMissingValue = (\n value: unknown,\n missingValuePolicy: TMissingValuePolicy,\n): boolean => {\n if (value === undefined || value === null) {\n return true;\n }\n\n return (\n missingValuePolicy === \"BlankString\" &&\n typeof value === \"string\" &&\n value.trim().length === 0\n );\n};\n\nconst isNonEmptyString = (value: unknown): value is string => {\n return typeof value === \"string\" && value.trim().length > 0;\n};\n\nconst isAllowedStringValue = <TValue extends string>(\n value: unknown,\n allowedValues: readonly TValue[],\n): value is TValue => {\n return typeof value === \"string\" && allowedValues.includes(value as TValue);\n};\n\nconst isEmail = (value: unknown): value is string => {\n if (!isNonEmptyString(value)) {\n return false;\n }\n\n return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value.trim());\n};\n\nconst isUuid = (value: unknown): value is string => {\n if (!isNonEmptyString(value)) {\n return false;\n }\n\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(\n value,\n );\n};\n","import type { TRecordValue } from \"../base\";\n\nexport const ACCOUNT_TYPE = {\n TURNDOWN_ADMIN: \"TURNDOWN_ADMIN\",\n ACCOUNT_ADMIN: \"ACCOUNT_ADMIN\",\n MANAGER: \"MANAGER\",\n STAFF: \"STAFF\",\n GUEST: \"GUEST\",\n} as const;\n\nexport type TAccountType = TRecordValue<typeof ACCOUNT_TYPE>;\n\nexport const ACCOUNT_STATUS = {\n ACTIVE: \"ACTIVE\",\n INACTIVE: \"INACTIVE\",\n SUSPENDED: \"SUSPENDED\",\n PENDING: \"PENDING\",\n} as const;\n\nexport type TAccountStatus = TRecordValue<typeof ACCOUNT_STATUS>;\n\nexport const LANGUAGE = {\n ENGLISH: \"ENGLISH\",\n FRENCH: \"FRENCH\",\n SPANISH: \"SPANISH\",\n GERMAN: \"GERMAN\",\n} as const;\n\nexport type TLanguage = TRecordValue<typeof LANGUAGE>;\n","import {\n createValidationSchema,\n optionalRecordField,\n optionalStringField,\n requiredEmailField,\n requiredEnumField,\n requiredStringField,\n type TInferValidationSchemaInput,\n} from \"../validation\";\nimport type { IAuthTokenResponse } from \"./index\";\nimport type { IEmptyRouteRequest, TDateTimeString } from \"../base\";\nimport { ACCOUNT_TYPE, type TAccountType } from \"../user/constants\";\nimport type { IDeviceInfo } from \"../user\";\nimport type { IGetUserResponse } from \"../user/routes\";\n\n// Route Params\nexport interface IAuthSessionIdParams {\n sessionId: string;\n}\n\nexport interface IAuthInvitationTokenParams {\n token: string;\n}\n\nexport interface IAuthInvitationIdParams {\n invitationId: string;\n}\n\n// Shared Responses\nexport interface IAuthMessageResponse {\n message: string;\n}\n\nexport interface IAuthRefreshTokenResponse extends IAuthTokenResponse {}\n\nexport interface IAuthInvitationBaseResponse {\n id: string;\n companyId: string;\n companyName: string;\n role: TAccountType;\n invitedBy: string;\n invitedByName: string;\n expiresAt: TDateTimeString;\n}\n\nconst AccountTypeValues = Object.values(ACCOUNT_TYPE);\n\n// Core Authentication\nexport const RegisterRequestSchema = createValidationSchema({\n email: requiredEmailField(),\n password: requiredStringField(\"BlankString\"),\n firstName: requiredStringField(\"BlankString\"),\n lastName: optionalStringField(),\n accountType: requiredEnumField(AccountTypeValues, \"BlankString\"),\n deviceInfo: optionalRecordField(),\n});\n\nexport type IRegisterRequest = Omit<\n TInferValidationSchemaInput<typeof RegisterRequestSchema>,\n \"deviceInfo\"\n> & {\n deviceInfo?: IDeviceInfo;\n};\n\nexport interface IRegisterResponse extends IAuthTokenResponse {}\n\nexport const LoginRequestSchema = createValidationSchema({\n email: requiredEmailField(),\n password: requiredStringField(\"BlankString\"),\n deviceInfo: optionalRecordField(),\n});\n\nexport type ILoginRequest = Omit<\n TInferValidationSchemaInput<typeof LoginRequestSchema>,\n \"deviceInfo\"\n> & {\n deviceInfo?: IDeviceInfo;\n};\n\nexport interface ILoginResponse extends IAuthTokenResponse {\n passwordResetRequired: boolean;\n}\n\nexport const RefreshSessionRequestSchema = createValidationSchema({\n refreshToken: requiredStringField(\"BlankString\"),\n deviceInfo: optionalRecordField(),\n});\n\nexport type IRefreshSessionRequest = Omit<\n TInferValidationSchemaInput<typeof RefreshSessionRequestSchema>,\n \"deviceInfo\"\n> & {\n deviceInfo?: IDeviceInfo;\n};\n\nexport interface IRefreshSessionResponse extends IAuthRefreshTokenResponse {}\n\nexport const LogoutRequestSchema = createValidationSchema({\n refreshToken: optionalStringField(),\n});\n\nexport type ILogoutRequest = TInferValidationSchemaInput<\n typeof LogoutRequestSchema\n>;\n\nexport interface ILogoutResponse extends IAuthMessageResponse {}\n\nexport interface ILogoutAllRequest {\n userId: string;\n}\n\nexport interface ILogoutAllResponse extends IAuthMessageResponse {}\n\nexport interface IGetMeRequest {\n userId: string;\n}\n\nexport interface IGetMeResponse extends IGetUserResponse {}\n\n// Session Management\nexport type IGetSessionsRequest = IEmptyRouteRequest;\n\nexport interface IGetSessionsResponse {\n id: string;\n deviceInfo: string;\n createdAt: TDateTimeString;\n lastUsedAt: TDateTimeString;\n}\n\nexport interface IRevokeSessionRequest extends IAuthSessionIdParams {}\n\nexport interface IRevokeSessionResponse extends IAuthMessageResponse {}\n\n// Password Management\nexport const ChangePasswordRequestSchema = createValidationSchema({\n currentPassword: requiredStringField(\"BlankString\"),\n newPassword: requiredStringField(\"BlankString\"),\n});\n\nexport type IChangePasswordRequest = TInferValidationSchemaInput<\n typeof ChangePasswordRequestSchema\n>;\n\nexport interface IChangePasswordResponse extends IGetUserResponse {}\n\nexport const ForgotPasswordRequestSchema = createValidationSchema({\n email: requiredEmailField(),\n});\n\nexport type IForgotPasswordRequest = TInferValidationSchemaInput<\n typeof ForgotPasswordRequestSchema\n>;\n\nexport interface IForgotPasswordResponse extends IAuthMessageResponse {}\n\nexport type IGetLoginHistoryRequest = IEmptyRouteRequest;\n\nexport interface IGetLoginHistoryResponse {\n id: string;\n email: string;\n ipAddress: string;\n userAgent: string;\n success: boolean;\n failureReason: string | null;\n createdAt: TDateTimeString;\n}\n\nexport interface IGetLoginHistoryListResponse {\n history: IGetLoginHistoryResponse[];\n length: number;\n}\n\n// Invitations\nexport interface IValidateInvitationRequest extends IAuthInvitationTokenParams {}\n\nexport interface IValidateInvitationResponse extends IAuthInvitationBaseResponse {\n email: string;\n userExists: boolean;\n}\n\nexport const RegisterWithInvitationRequestSchema = createValidationSchema({\n token: requiredStringField(\"BlankString\"),\n password: requiredStringField(\"BlankString\"),\n firstName: requiredStringField(\"BlankString\"),\n lastName: optionalStringField(),\n deviceInfo: optionalRecordField(),\n});\n\nexport type IRegisterWithInvitationRequest = Omit<\n TInferValidationSchemaInput<typeof RegisterWithInvitationRequestSchema>,\n \"deviceInfo\"\n> & {\n deviceInfo?: IDeviceInfo;\n};\n\nexport interface IRegisterWithInvitationResponse extends IAuthTokenResponse {}\n\nexport const AcceptInvitationRequestSchema = createValidationSchema({\n userId: optionalStringField(),\n token: requiredStringField(\"BlankString\"),\n});\n\nexport type IAcceptInvitationRequest = TInferValidationSchemaInput<\n typeof AcceptInvitationRequestSchema\n>;\n\nexport interface IAcceptInvitationResponse {\n companyId: string;\n companyName: string;\n role: TAccountType;\n}\n\nexport interface IAcceptInvitationRouteResponse {\n invite: IAcceptInvitationResponse;\n message: string;\n}\n\nexport type IGetPendingInvitationsRequest = IEmptyRouteRequest;\n\nexport interface IGetPendingInvitationsResponse extends IAuthInvitationBaseResponse {\n token: string;\n createdAt: TDateTimeString;\n}\n\nexport interface IGetPendingInvitationsListResponse {\n invitations: IGetPendingInvitationsResponse[];\n length: number;\n}\n\nexport interface IRevokeInvitationRequest extends IAuthInvitationIdParams {\n revokedBy?: string;\n}\n\nexport interface IRevokeInvitationResponse extends IAuthMessageResponse {}\n","export * from \"./routes\";\n\nimport type { TDateTimeString, TServiceType } from \"../base\";\nimport type { IUserSafe } from \"../user\";\n\nexport const AUTH_STATUS = {\n Initializing: \"Initializing\",\n Unauthenticated: \"Unauthenticated\",\n Authenticated: \"Authenticated\",\n Refreshing: \"Refreshing\",\n SessionExpired: \"SessionExpired\",\n} as const;\n\nexport type TAuthStatus = (typeof AUTH_STATUS)[keyof typeof AUTH_STATUS];\n\nexport interface ITokenPayload {\n userId: string;\n email: string;\n name: string;\n}\n\nexport interface IRefreshTokenData {\n token: string;\n tokenHash: string;\n tokenFamily: string;\n expiresAt: TDateTimeString;\n}\n\nexport interface IAuthTokenBundle {\n accessToken: string;\n refreshToken: string;\n expiresAt: TDateTimeString | null;\n}\n\nexport interface IStoredAuthSession {\n accessToken: string | null;\n refreshToken: string | null;\n expiresAt: TDateTimeString | null;\n}\n\nexport interface IAuthTokenResponse extends IAuthTokenBundle {\n user: IUserSafe | null;\n companyId: string | null;\n}\n\nexport interface IAuthSession {\n user: IUserSafe | null;\n accessToken: string | null;\n expiresAt: TDateTimeString | null;\n}\n\nexport interface ISetAuthSessionParams extends IAuthTokenBundle {\n user: IUserSafe | null;\n}\n\nexport interface ILoginCredentials {\n email: string;\n password: string;\n rememberMe: boolean;\n}\n\nexport interface IRegisterCredentials {\n businessType: TServiceType[];\n firstName: string;\n lastName: string;\n email: string;\n password: string;\n}\n\nexport interface IPasswordValidationRules {\n minLength: number;\n requireUppercase: boolean;\n requireLowercase: boolean;\n requireNumbers: boolean;\n requireSpecialChars: boolean;\n}\n\nexport interface IPasswordValidationResult {\n valid: boolean;\n errors: string[];\n}\n\nexport interface IEmailValidationResult {\n valid: boolean;\n error?: string;\n}\n\nexport interface IRateLimitStatus {\n isLimited: boolean;\n attempts: number;\n maxAttempts: number;\n resetTime: TDateTimeString | null;\n}\n","/**\n * Pagination metadata for a paginated response.\n */\nexport interface IPagingResult {\n hasNextPage: boolean;\n totalPages: number;\n totalRecords: number;\n}\n\n/**\n * Generic wrapper for paginated data.\n */\nexport interface IDataWithPagingResult<TData> {\n data: TData;\n pagination: IPagingResult;\n}\n\nexport const SortDirection = {\n Asc: \"Asc\",\n Desc: \"Desc\",\n} as const;\n\nexport type TSortDirection = (typeof SortDirection)[keyof typeof SortDirection];\n\n/**\n * Sorting condition for query results.\n */\nexport interface ISortCondition {\n name: string;\n direction: TSortDirection;\n}\n\nexport const FilterCondition = {\n Equal: \"=\",\n GreaterThan: \">\",\n LessThan: \"<\",\n NotEqual: \"!=\",\n Like: \"LIKE\",\n In: \"IN\",\n GreaterThanOrEqual: \">=\",\n LessThanOrEqual: \"<=\",\n} as const;\n\nexport type TFilterCondition =\n (typeof FilterCondition)[keyof typeof FilterCondition];\n\nexport interface IFilterConditionBase {\n name: string;\n condition: TFilterCondition;\n useAnd?: boolean;\n}\n\nexport interface IStringFilterCondition extends IFilterConditionBase {\n valueString: string;\n valueNumber?: never;\n valueBoolean?: never;\n}\n\nexport interface INumberFilterCondition extends IFilterConditionBase {\n valueString?: never;\n valueNumber: number;\n valueBoolean?: never;\n}\n\nexport interface IBooleanFilterCondition extends IFilterConditionBase {\n valueString?: never;\n valueNumber?: never;\n valueBoolean: boolean;\n}\n\n/**\n * Filter condition for querying data.\n *\n * Exactly one value field should be provided.\n */\nexport type TFilterConditionValue =\n | IStringFilterCondition\n | INumberFilterCondition\n | IBooleanFilterCondition;\n\n/**\n * Kept as an exported alias to preserve the existing public API name.\n */\nexport type IFilterCondition = TFilterConditionValue;\n\n/**\n * Request shape for paginated data with optional sorting and filtering.\n */\nexport interface IPaginationRequest {\n page: number;\n size: number;\n sort?: ISortCondition[];\n filters?: IFilterCondition[];\n}\n\nexport interface IPagingObject {\n pagination: IPaginationRequest;\n}\n\nexport const createPagingObject = (\n page: number,\n size: number,\n sort?: ISortCondition[],\n filters?: IFilterCondition[],\n): IPagingObject => ({\n pagination: {\n page,\n size,\n sort,\n filters,\n },\n});\n","export type TJsonPrimitive = string | number | boolean | null;\n\nexport type TJsonObject = {\n [key: string]: TJsonValue;\n};\n\nexport type TJsonValue = TJsonPrimitive | TJsonValue[] | TJsonObject;\n\nexport type TUnknownRecord = Record<string, unknown>;\n\n/**\n * Serialized ISO-8601 date/time value returned by API JSON contracts.\n */\nexport type TDateTimeString = string;\n\nexport type TurndownObject<TObject extends object = TUnknownRecord> = TObject;\n\nexport type TEmptyObject = Record<string, never>;\n\nexport type IEmptyRouteRequest = TEmptyObject;\n\nexport type IEmptyRouteParams = TEmptyObject;\n\nexport const ENVIRONMENT = {\n Prod: \"Prod\",\n Dev: \"Dev\",\n Local: \"Local\",\n Test: \"Test\",\n} as const;\n\nexport type TEnvironment = (typeof ENVIRONMENT)[keyof typeof ENVIRONMENT];\n\nexport interface IMessageResponse {\n message: string;\n}\n\nexport interface ISuccessResponse {\n success: boolean;\n}\n\nexport interface ICountResponse {\n count: number;\n}\n\nexport interface IMetaData {\n createdAt: TDateTimeString;\n updatedAt: TDateTimeString;\n deletedAt: TDateTimeString | null;\n}\n\nexport type TRecordValue<TRecord extends object> = TRecord[keyof TRecord];\n\nexport type TRecordKeys<TRecord extends object> = keyof TRecord;\n\nexport interface IVersion {\n major: number;\n minor: number;\n patch: number;\n}\n\nexport type TVersionInput = string | IVersion;\n\nexport interface ISelectOption<TValue extends string = string> {\n label: string;\n value: TValue;\n}\n\nexport const MODE = {\n Create: \"Create\",\n Edit: \"Edit\",\n Delete: \"Delete\",\n Details: \"Details\",\n} as const;\n\nexport type TMode = TRecordValue<typeof MODE> | null;\n\nexport const IMAGE_ENTITY = {\n USER_PROFILE: \"USER_PROFILE\",\n PROPERTY: \"PROPERTY\",\n COMPANY: \"COMPANY\",\n CHECKLIST_ITEM: \"CHECKLIST_ITEM\",\n PROPERTY_ROOM: \"PROPERTY_ROOM\",\n MAINTENANCE_TICKET: \"MAINTENANCE_TICKET\",\n WORK_REPORT: \"WORK_REPORT\",\n CLEANING_REPORT: \"CLEANING_REPORT\",\n TURNDOWN_DEFAULT: \"TURNDOWN_DEFAULT\",\n} as const;\n\nexport type TImageEntityType = TRecordValue<typeof IMAGE_ENTITY>;\n\nexport type TUSStateCode = TRecordKeys<typeof US_JURISDICTIONS>;\n\nexport const US_JURISDICTIONS = {\n // 50 States\n AL: \"Alabama\",\n AK: \"Alaska\",\n AZ: \"Arizona\",\n AR: \"Arkansas\",\n CA: \"California\",\n CO: \"Colorado\",\n CT: \"Connecticut\",\n DE: \"Delaware\",\n FL: \"Florida\",\n GA: \"Georgia\",\n HI: \"Hawaii\",\n ID: \"Idaho\",\n IL: \"Illinois\",\n IN: \"Indiana\",\n IA: \"Iowa\",\n KS: \"Kansas\",\n KY: \"Kentucky\",\n LA: \"Louisiana\",\n ME: \"Maine\",\n MD: \"Maryland\",\n MA: \"Massachusetts\",\n MI: \"Michigan\",\n MN: \"Minnesota\",\n MS: \"Mississippi\",\n MO: \"Missouri\",\n MT: \"Montana\",\n NE: \"Nebraska\",\n NV: \"Nevada\",\n NH: \"New Hampshire\",\n NJ: \"New Jersey\",\n NM: \"New Mexico\",\n NY: \"New York\",\n NC: \"North Carolina\",\n ND: \"North Dakota\",\n OH: \"Ohio\",\n OK: \"Oklahoma\",\n OR: \"Oregon\",\n PA: \"Pennsylvania\",\n RI: \"Rhode Island\",\n SC: \"South Carolina\",\n SD: \"South Dakota\",\n TN: \"Tennessee\",\n TX: \"Texas\",\n UT: \"Utah\",\n VT: \"Vermont\",\n VA: \"Virginia\",\n WA: \"Washington\",\n WV: \"West Virginia\",\n WI: \"Wisconsin\",\n WY: \"Wyoming\",\n\n // Territories\n DC: \"District of Columbia\",\n PR: \"Puerto Rico\",\n GU: \"Guam\",\n VI: \"United States Virgin Islands\",\n AS: \"American Samoa\",\n MP: \"Northern Mariana Islands\",\n} as const;\n\nexport type TUSJurisdiction = TRecordValue<typeof US_JURISDICTIONS>;\n\nexport const STATUS = {\n PENDING: \"PENDING\",\n IN_PROGRESS: \"IN_PROGRESS\",\n COMPLETED: \"COMPLETED\",\n OVERDUE: \"OVERDUE\",\n ACTIVE: \"ACTIVE\",\n INACTIVE: \"INACTIVE\",\n} as const;\n\nexport type TStatus = TRecordValue<typeof STATUS>;\n\nexport const SEVERITY = {\n LOW: \"LOW\",\n MEDIUM: \"MEDIUM\",\n HIGH: \"HIGH\",\n} as const;\n\nexport type TSeverity = TRecordValue<typeof SEVERITY>;\n\nexport const SERVICE_TYPES = {\n PROPERTY: \"PROPERTY\",\n CLEANING: \"CLEANING\",\n MAINTENANCE: \"MAINTENANCE\",\n INSPECTION: \"INSPECTION\",\n OTHER: \"OTHER\",\n} as const;\n\nexport type TServiceType = TRecordValue<typeof SERVICE_TYPES>;\n\nexport const MONTHS = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n] as const;\n\nexport type TMonths = (typeof MONTHS)[number];\n\nexport const WEEK_DAY = {\n Sunday: \"Sunday\",\n Monday: \"Monday\",\n Tuesday: \"Tuesday\",\n Wednesday: \"Wednesday\",\n Thursday: \"Thursday\",\n Friday: \"Friday\",\n Saturday: \"Saturday\",\n} as const;\n\nexport type TWeekDay = TRecordValue<typeof WEEK_DAY>;\n\nexport const WEEK_DAY_SHORT_LABEL = {\n Sunday: \"Sun\",\n Monday: \"Mon\",\n Tuesday: \"Tue\",\n Wednesday: \"Wed\",\n Thursday: \"Thu\",\n Friday: \"Fri\",\n Saturday: \"Sat\",\n} as const satisfies Record<TWeekDay, string>;\n\nexport type TWeekDayShortLabel = TRecordValue<typeof WEEK_DAY_SHORT_LABEL>;\n\nexport const WEEK_DAY_LETTER = {\n Sunday: \"S\",\n Monday: \"M\",\n Tuesday: \"T\",\n Wednesday: \"W\",\n Thursday: \"T\",\n Friday: \"F\",\n Saturday: \"S\",\n} as const satisfies Record<TWeekDay, string>;\n\nexport type TWeekDayLetter = TRecordValue<typeof WEEK_DAY_LETTER>;\n\nexport interface IWeekDay {\n date: Date;\n dayOfMonth: number;\n day: TWeekDay;\n shortLabel: TWeekDayShortLabel;\n letter: TWeekDayLetter;\n isToday: boolean;\n}\n\nconst createSelectOptions = <TValue extends string>(\n values: readonly TValue[],\n): ISelectOption<TValue>[] =>\n values.map((value) => ({\n label: value,\n value,\n }));\n\nconst getRecordValues = <TRecord extends Record<string, string>>(\n record: TRecord,\n): TRecordValue<TRecord>[] => Object.values(record) as TRecordValue<TRecord>[];\n\nexport const UnitedStatesJurisdictionOptions = createSelectOptions(\n getRecordValues(US_JURISDICTIONS),\n);\n\nexport const StatusOptions: ISelectOption<TStatus>[] = [\n { label: \"Pending\", value: STATUS.PENDING },\n { label: \"In Progress\", value: STATUS.IN_PROGRESS },\n { label: \"Completed\", value: STATUS.COMPLETED },\n { label: \"Overdue\", value: STATUS.OVERDUE },\n { label: \"Active\", value: STATUS.ACTIVE },\n { label: \"Inactive\", value: STATUS.INACTIVE },\n];\n\nexport const SeverityOptions: ISelectOption<TSeverity>[] = [\n { label: \"Low\", value: SEVERITY.LOW },\n { label: \"Medium\", value: SEVERITY.MEDIUM },\n { label: \"High\", value: SEVERITY.HIGH },\n];\n\nexport const ServiceTypeOptions: ISelectOption<TServiceType>[] = [\n { label: \"Property\", value: SERVICE_TYPES.PROPERTY },\n { label: \"Cleaning\", value: SERVICE_TYPES.CLEANING },\n { label: \"Maintenance\", value: SERVICE_TYPES.MAINTENANCE },\n { label: \"Inspection\", value: SERVICE_TYPES.INSPECTION },\n { label: \"Other\", value: SERVICE_TYPES.OTHER },\n];\n\nexport * from \"./paging.types\";\n","import type { TRecordValue } from \"../base\";\n\nexport const COMPANY_RELATIONSHIP_STATUS = {\n ACTIVE: \"ACTIVE\",\n INACTIVE: \"INACTIVE\",\n SUSPENDED: \"SUSPENDED\",\n} as const;\n\nexport const INVITATION_STATUS = {\n PENDING: \"PENDING\",\n ACCEPTED: \"ACCEPTED\",\n EXPIRED: \"EXPIRED\",\n REVOKED: \"REVOKED\",\n DECLINED: \"DECLINED\",\n} as const;\n\nexport type TInvitationStatus = TRecordValue<typeof INVITATION_STATUS>;\n\nexport type TCompanyRelationshipStatus =\n | TRecordValue<typeof COMPANY_RELATIONSHIP_STATUS>\n | typeof INVITATION_STATUS.PENDING\n | null;\n\nexport const COMPANY_TYPES = {\n PROPERTY_MANAGEMENT: \"PROPERTY_MANAGEMENT\",\n MAINTENANCE: \"MAINTENANCE\",\n CLEANER: \"CLEANER\",\n OTHER: \"OTHER\",\n} as const;\n\nexport type TCompanyType = TRecordValue<typeof COMPANY_TYPES>;\n","import type { ICompany, ICompanyWithRelationshipStatus } from \".\";\nimport { COMPANY_TYPES } from \"./constants\";\nimport type {\n IEmptyRouteRequest,\n IMessageResponse,\n TDateTimeString,\n TUSStateCode,\n} from \"../base\";\nimport { US_JURISDICTIONS } from \"../base\";\nimport { ACCOUNT_TYPE, type TAccountType } from \"../user/constants\";\nimport {\n createValidationSchema,\n optionalEnumField,\n optionalNullableStringField,\n optionalStringField,\n requiredEmailField,\n requiredEnumField,\n requiredStringField,\n requiredUuidField,\n type TInferValidationSchemaInput,\n} from \"../validation\";\n\nexport interface ICompanyRouteParams {\n companyId: string;\n}\n\nexport interface ICompanyUserRouteParams {\n userId: string;\n}\n\nexport interface ICompanyInvitationTokenParams {\n token: string;\n}\n\nexport interface ICompanyInvitationIdParams extends ICompanyRouteParams {\n invitationId: string;\n}\n\nexport const CompanyFilter = {\n Active: \"active\",\n Pending: \"pending\",\n All: \"all\",\n} as const;\n\nexport type TCompanyFilter = (typeof CompanyFilter)[keyof typeof CompanyFilter];\n\nexport interface IGetCompaniesQuery {\n companyId?: string;\n search?: string;\n filter?: TCompanyFilter;\n}\n\nconst CompanyTypeValues = Object.values(COMPANY_TYPES);\nconst StateCodeValues = Object.keys(US_JURISDICTIONS) as TUSStateCode[];\nconst InviteUserRoleValues = Object.values(ACCOUNT_TYPE).filter(\n (accountType) => accountType !== ACCOUNT_TYPE.TURNDOWN_ADMIN,\n);\n\nexport const CreateCompanyRequestSchema = createValidationSchema({\n displayName: requiredStringField(\"BlankString\"),\n addressLine1: requiredStringField(\"BlankString\"),\n addressLine2: optionalNullableStringField(),\n city: requiredStringField(\"BlankString\"),\n stateCode: requiredEnumField(StateCodeValues, \"BlankString\"),\n postalCode: requiredStringField(\"BlankString\"),\n companyType: requiredEnumField(CompanyTypeValues, \"BlankString\"),\n country: optionalNullableStringField(),\n timezone: optionalNullableStringField(),\n imageUrl: optionalNullableStringField(),\n});\n\nexport type ICreateCompanyRequest = TInferValidationSchemaInput<\n typeof CreateCompanyRequestSchema\n> & {\n stateCode: TUSStateCode;\n companyType: ICompany[\"companyType\"];\n};\n\nexport interface ICreateCompanyResponse extends ICompanyWithRelationshipStatus {}\n\nexport type IGetCompaniesRequest = IEmptyRouteRequest;\nexport type IGetCompaniesResponse = ICompanyWithRelationshipStatus[];\n\nexport interface IGetCompanyByIdRequest extends ICompanyRouteParams {}\nexport interface IGetCompanyByIdResponse extends ICompanyWithRelationshipStatus {}\n\nexport const UpdateCompanyRequestSchema = createValidationSchema({\n displayName: optionalStringField(),\n addressLine1: optionalStringField(),\n addressLine2: optionalNullableStringField(),\n city: optionalStringField(),\n stateCode: optionalEnumField(StateCodeValues),\n postalCode: optionalStringField(),\n companyType: optionalEnumField(CompanyTypeValues),\n country: optionalNullableStringField(),\n timezone: optionalNullableStringField(),\n imageUrl: optionalNullableStringField(),\n});\n\nexport type IUpdateCompanyRequest = TInferValidationSchemaInput<\n typeof UpdateCompanyRequestSchema\n> & {\n stateCode?: TUSStateCode;\n companyType?: ICompany[\"companyType\"];\n};\n\nexport interface IUpdateCompanyResponse extends ICompanyWithRelationshipStatus {}\n\nexport const InviteUserToCompanyRequestSchema = createValidationSchema({\n email: requiredEmailField(),\n role: requiredEnumField(InviteUserRoleValues, \"BlankString\"),\n});\n\nexport type IInviteUserToCompanyRequest = TInferValidationSchemaInput<\n typeof InviteUserToCompanyRequestSchema\n> & {\n role: TAccountType;\n};\n\nexport interface IInviteUserToCompanyResponse extends IMessageResponse {}\n\nexport interface IGetCompanyUsersRequest extends ICompanyRouteParams {}\nexport interface ICompanyUserSummary {\n id: string;\n email: string;\n firstName: string;\n lastName: string | null;\n role: TAccountType;\n}\nexport interface ICompanyWithUsers extends ICompanyWithRelationshipStatus {\n users: ICompanyUserSummary[];\n}\nexport interface IGetCompanyUsersResponse extends ICompanyWithUsers {}\n\nexport interface IGetUserCompaniesRequest extends ICompanyUserRouteParams {}\nexport type IGetUserCompaniesResponse = ICompanyWithRelationshipStatus[];\n\nexport const InviteCompanyToCompanyRequestSchema = createValidationSchema({\n providerCompanyId: requiredUuidField(),\n message: optionalNullableStringField(),\n});\n\nexport type IInviteCompanyToCompanyRequest = TInferValidationSchemaInput<\n typeof InviteCompanyToCompanyRequestSchema\n>;\n\nexport interface IInviteCompanyToCompanyResponse {\n id: string;\n token: string;\n expiresAt: TDateTimeString;\n}\n\nexport interface IValidateCompanyInvitationRequest extends ICompanyInvitationTokenParams {}\nexport interface IValidateCompanyInvitationResponse {\n id: string;\n requesterCompanyId: string;\n providerCompanyId: string;\n invitedBy: string;\n message: string | null;\n expiresAt: TDateTimeString;\n requesterCompanyName: string;\n providerCompanyName: string;\n invitedByName: string;\n}\n\nexport interface IAcceptCompanyInvitationRequest extends ICompanyInvitationTokenParams {}\nexport interface IAcceptCompanyInvitationResponse {\n requesterCompanyId: string;\n providerCompanyId: string;\n requesterCompanyName: string;\n providerCompanyName: string;\n}\n\nexport interface IDeclineCompanyInvitationRequest extends ICompanyInvitationTokenParams {}\nexport interface IDeclineCompanyInvitationResponse extends IMessageResponse {}\n\nexport interface IGetPendingCompanyInvitationsRequest extends ICompanyRouteParams {}\nexport interface ICompanyInvitationSummary extends IValidateCompanyInvitationResponse {\n token: string;\n createdAt: TDateTimeString;\n}\n\nexport type IGetPendingCompanyInvitationsResponse = ICompanyInvitationSummary[];\n\nexport interface IRevokeCompanyInvitationRequest extends ICompanyInvitationIdParams {}\nexport interface IRevokeCompanyInvitationResponse extends IMessageResponse {}\n","import type { TDateTimeString, TRecordValue } from \"../base\";\n\nexport const DAMAGE_SEVERITY = {\n LOW: \"LOW\",\n MEDIUM: \"MEDIUM\",\n HIGH: \"HIGH\",\n CRITICAL: \"CRITICAL\",\n} as const;\n\nexport type TDamageSeverity = TRecordValue<typeof DAMAGE_SEVERITY>;\n\nexport const DAMAGE_STATUS = {\n OPEN: \"OPEN\",\n IN_REVIEW: \"IN_REVIEW\",\n ASSIGNED: \"ASSIGNED\",\n IN_PROGRESS: \"IN_PROGRESS\",\n RESOLVED: \"RESOLVED\",\n CLOSED: \"CLOSED\",\n ESCALATED: \"ESCALATED\",\n} as const;\n\nexport type TDamageStatus = TRecordValue<typeof DAMAGE_STATUS>;\n\nexport const WORK_ORDER_PRIORITY = {\n LOW: \"LOW\",\n NORMAL: \"NORMAL\",\n HIGH: \"HIGH\",\n URGENT: \"URGENT\",\n} as const;\n\nexport type TWorkOrderPriority = TRecordValue<typeof WORK_ORDER_PRIORITY>;\n\nexport const WORK_ORDER_STATUS = {\n PENDING: \"PENDING\",\n SCHEDULED: \"SCHEDULED\",\n IN_PROGRESS: \"IN_PROGRESS\",\n COMPLETED: \"COMPLETED\",\n CANCELLED: \"CANCELLED\",\n} as const;\n\nexport type TWorkOrderStatus = TRecordValue<typeof WORK_ORDER_STATUS>;\n\nexport interface IDamageReport {\n id: string;\n propertyId: string;\n roomId: string;\n workSessionId: string | null;\n cleaningSessionId: string | null;\n reportedBy: string;\n reportedAt: TDateTimeString;\n severity: TDamageSeverity;\n status: TDamageStatus;\n title: string;\n description: string;\n locationDetails: string | null;\n estimatedCost: number | null;\n actualCost: number | null;\n assignedTo: string | null;\n assignedAt: TDateTimeString | null;\n resolvedAt: TDateTimeString | null;\n resolvedBy: string | null;\n resolutionNotes: string | null;\n requiresProfessional: boolean;\n vendorInfo: string | null;\n insuranceClaimNumber: string | null;\n isTenantResponsible: boolean;\n tenantChargeAmount: number | null;\n createdAt: TDateTimeString;\n updatedAt: TDateTimeString;\n photos?: IDamagePhoto[];\n comments?: IDamageComment[];\n}\n\nexport interface IDamageReportPhoto {\n id: string;\n damageReportId: string;\n photoId: string;\n imageUrl: string | null;\n caption: string | null;\n isBeforePhoto: boolean;\n displayOrder: number;\n uploadedBy: string | null;\n createdAt: TDateTimeString;\n}\n\nexport interface IDamagePhoto extends IDamageReportPhoto {}\n\nexport interface IDamageComment {\n id: string;\n damageReportId: string;\n userId: string;\n userName: string | null;\n comment: string;\n isInternal: boolean;\n createdAt: TDateTimeString;\n updatedAt: TDateTimeString;\n}\n\nexport interface IDamageReportStatusHistory {\n id: string;\n damageReportId: string;\n previousStatus: TDamageStatus | null;\n newStatus: TDamageStatus;\n changedBy: string;\n reason: string | null;\n createdAt: TDateTimeString;\n}\n\nexport interface IWorkOrder {\n id: string;\n damageReportId: string | null;\n propertyId: string;\n roomId: string | null;\n workOrderNumber: string | null;\n priority: TWorkOrderPriority;\n category: string | null;\n assignedTo: string | null;\n assignedAt: TDateTimeString | null;\n scheduledDate: TDateTimeString | null;\n scheduledTimeStart: string | null;\n scheduledTimeEnd: string | null;\n startedAt: TDateTimeString | null;\n completedAt: TDateTimeString | null;\n completedBy: string | null;\n description: string;\n workPerformed: string | null;\n materialsUsed: string | null;\n laborHours: number | null;\n laborCost: number | null;\n materialsCost: number | null;\n totalCost: number | null;\n status: TWorkOrderStatus;\n createdAt: TDateTimeString;\n updatedAt: TDateTimeString;\n}\n\nexport interface ICreateDamageReportInput {\n propertyId: string;\n roomId: string;\n workSessionId?: string;\n reportedBy: string;\n severity: TDamageSeverity;\n title: string;\n description: string;\n locationDetails?: string;\n estimatedCost?: number;\n requiresProfessional?: boolean;\n isTenantResponsible?: boolean;\n tenantChargeAmount?: number;\n}\n\nexport interface ICreateWorkOrderInput {\n damageReportId?: string;\n propertyId: string;\n roomId?: string;\n priority?: TWorkOrderPriority;\n category?: string;\n description: string;\n scheduledDate?: TDateTimeString;\n scheduledTimeStart?: string;\n scheduledTimeEnd?: string;\n}\n\nexport * from \"./routes\";\n","/**\n * Error Types\n * Custom error types and validation error structures.\n */\n\nimport { ERROR_CODES } from \"../api\";\nimport type { TErrorCode } from \"../api\";\nimport type { TJsonObject, TJsonValue } from \"../base\";\n\n/**\n * Detailed information about a validation error.\n */\nexport interface IValidationErrorDetail {\n field: string;\n message: string;\n value?: TJsonValue;\n}\n\n/**\n * Information about missing required fields.\n */\nexport interface IMissingFieldsErrorDetail {\n missingFields: string[];\n}\n\n/**\n * Information about rate limiting.\n */\nexport interface IRateLimitErrorDetail {\n retryAfter?: number;\n message: string;\n}\n\nexport type TErrorResponseDetail =\n | IValidationErrorDetail[]\n | IMissingFieldsErrorDetail\n | IRateLimitErrorDetail\n | TJsonObject\n | string;\n\nexport interface ITypedApiError<TDetails = TErrorResponseDetail> {\n message: string;\n code: TErrorCode;\n details?: TDetails;\n}\n\nexport type TValidationError = ITypedApiError<IValidationErrorDetail[]>;\nexport type TMissingFieldsError = ITypedApiError<IMissingFieldsErrorDetail>;\nexport type TRateLimitError = ITypedApiError<IRateLimitErrorDetail>;\n\ntype TErrorLike = {\n code?: string;\n details?: unknown;\n};\n\nconst isErrorLike = (error: unknown): error is TErrorLike => {\n return typeof error === \"object\" && error !== null;\n};\n\n/**\n * Type guard for validation errors.\n */\nexport function isValidationError(error: unknown): error is TValidationError {\n return (\n isErrorLike(error) &&\n error.code === ERROR_CODES.VALIDATION_ERROR &&\n Array.isArray(error.details)\n );\n}\n\n/**\n * Type guard for missing-field errors.\n */\nexport function isMissingFieldsError(\n error: unknown,\n): error is TMissingFieldsError {\n return (\n isErrorLike(error) &&\n error.code === ERROR_CODES.MISSING_FIELDS &&\n typeof error.details === \"object\" &&\n error.details !== null &&\n \"missingFields\" in error.details &&\n Array.isArray(error.details.missingFields)\n );\n}\n\n/**\n * Type guard for rate-limit errors.\n */\nexport function isRateLimitError(error: unknown): error is TRateLimitError {\n return isErrorLike(error) && error.code === ERROR_CODES.RATE_LIMIT_EXCEEDED;\n}\n\n/**\n * Type guard for authentication errors.\n */\nexport function isAuthError(error: unknown): boolean {\n return (\n isErrorLike(error) &&\n (error.code === ERROR_CODES.UNAUTHORIZED ||\n error.code === ERROR_CODES.INVALID_TOKEN ||\n error.code === ERROR_CODES.INVALID_CREDENTIALS)\n );\n}\n","import type { TDateTimeString, TEnvironment } from \"../base\";\n\nexport * from \"./routes\";\n\nexport const SERVER_STATUS = {\n Healthy: \"Healthy\",\n Unhealthy: \"UnHealthy\",\n} as const;\n\nexport type TServerStatus = (typeof SERVER_STATUS)[keyof typeof SERVER_STATUS];\n\nexport const DATABASE_STATUS = {\n Unknown: \"Unknown\",\n Connected: \"Connected\",\n Disconnected: \"Disconnected\",\n} as const;\n\nexport type TDatabaseStatus =\n (typeof DATABASE_STATUS)[keyof typeof DATABASE_STATUS];\n\nexport interface IHealthCheckResponse {\n status: TServerStatus;\n database: TDatabaseStatus;\n timestamp: TDateTimeString;\n environment: TEnvironment;\n}\n\nexport interface IHealthChecks {\n database: TDatabaseStatus;\n uptime: number;\n memory: {\n rss: number;\n heapTotal: number;\n heapUsed: number;\n external: number;\n arrayBuffers: number;\n };\n timestamp: TDateTimeString;\n databaseError?: string;\n}\n","import type { TDateTimeString } from \"../base\";\n\nexport * from \"./routes\";\n\nexport const IMAGE_ENTITY_TYPE = {\n USER_PROFILE: \"USER_PROFILE\",\n PROPERTY: \"PROPERTY\",\n COMPANY: \"COMPANY\",\n CHECKLIST_ITEM: \"CHECKLIST_ITEM\",\n PROPERTY_ROOM: \"PROPERTY_ROOM\",\n MAINTENANCE_TICKET: \"MAINTENANCE_TICKET\",\n WORK_REPORT: \"WORK_REPORT\",\n CLEANING_REPORT: \"CLEANING_REPORT\",\n TURNDOWN_DEFAULT: \"TURNDOWN_DEFAULT\",\n} as const;\n\nexport type TStoredImageEntityType =\n (typeof IMAGE_ENTITY_TYPE)[keyof typeof IMAGE_ENTITY_TYPE];\n\nexport interface IImage {\n id: string;\n s3Key: string;\n s3Bucket: string;\n entityType: TStoredImageEntityType;\n entityId: string;\n fileName: string;\n mimeType: string;\n fileSizeBytes: number | null;\n width: number | null;\n height: number | null;\n isPublic: boolean;\n category: string | null;\n displayOrder: number;\n uploadedBy: string | null;\n createdAt: TDateTimeString;\n updatedAt: TDateTimeString;\n deletedAt: TDateTimeString | null;\n}\n\nexport interface IImageWithUrl extends IImage {\n url: string;\n}\n","import type { IMetaData, TDateTimeString, TRecordValue } from \"../base\";\nexport * from \"./routes\";\n\nexport const INVENTORY_RESTOCK_ORDER_STATUS = {\n PENDING: \"PENDING\",\n ORDERED: \"ORDERED\",\n SHIPPED: \"SHIPPED\",\n RECEIVED: \"RECEIVED\",\n} as const;\n\nexport type TInventoryRestockOrderStatus = TRecordValue<\n typeof INVENTORY_RESTOCK_ORDER_STATUS\n>;\n\nexport const INVENTORY_UNITS = {\n COUNT: \"COUNT\",\n ROLLS: \"ROLLS\",\n PODS: \"PODS\",\n BOXES: \"BOXES\",\n BOTTLES: \"BOTTLES\",\n PACKS: \"PACKS\",\n BAGS: \"BAGS\",\n GALLONS: \"GALLONS\",\n LITERS: \"LITERS\",\n KILOGRAMS: \"KILOGRAMS\",\n POUNDS: \"POUNDS\",\n OUNCES: \"OUNCES\",\n GRAMS: \"GRAMS\",\n SHEETS: \"SHEETS\",\n CASES: \"CASES\",\n CARTONS: \"CARTONS\",\n OTHER: \"OTHER\",\n} as const;\n\nexport type TInventoryUnitType = TRecordValue<typeof INVENTORY_UNITS>;\n\nexport const INVENTORY_ITEM_TYPE = {\n CONSUMABLE: \"CONSUMABLE\",\n FIXED: \"FIXED\",\n} as const;\n\nexport type TInventoryItemType = TRecordValue<typeof INVENTORY_ITEM_TYPE>;\n\nexport interface IInventoryItem extends IMetaData {\n id: string;\n companyId: string;\n name: string;\n description: string | null;\n itemType: TInventoryItemType;\n unit: TInventoryUnitType;\n unitCustom: string | null;\n minimumLevel: number;\n reorderLevel: number;\n maximumLevel: number | null;\n costPerUnit: number | null;\n supplierInfo: string | null;\n sku: string | null;\n barcode: string | null;\n}\n\nexport interface IRoomInventory extends IMetaData {\n id: string;\n roomId: string;\n inventoryItemId: string;\n currentLevel: number;\n minimumLevel: number;\n maximumLevel: number | null;\n parLevel: number | null;\n lastRestockedAt: TDateTimeString | null;\n lastRestockedBy: string | null;\n lastCheckedAt: TDateTimeString | null;\n lastCheckedBy: string | null;\n autoReorder: boolean;\n locationNotes: string | null;\n}\n\nexport interface IPropertyInventory extends IMetaData {\n id: string;\n propertyId: string;\n inventoryItemId: string;\n currentLevel: number;\n minimumLevel: number;\n maximumLevel: number | null;\n parLevel: number | null;\n lastRestockedAt: TDateTimeString | null;\n lastRestockedBy: string | null;\n lastCheckedAt: TDateTimeString | null;\n lastCheckedBy: string | null;\n autoReorder: boolean;\n locationNotes: string | null;\n}\n\nexport interface IInventoryCount {\n id: string;\n checklistExecutionId: string;\n roomInventoryId: string;\n previousLevel: number;\n countedLevel: number;\n consumedAmount: number;\n restockedAmount: number;\n finalLevel: number;\n countedBy: string;\n countedAt: TDateTimeString;\n needsRestock: boolean;\n notes: string | null;\n createdAt: TDateTimeString;\n}\n\nexport interface IInventoryRestockOrder {\n id: string;\n companyId: string;\n orderNumber: string | null;\n status: TInventoryRestockOrderStatus;\n totalItems: number | null;\n totalCost: number | null;\n orderedBy: string | null;\n orderedAt: TDateTimeString | null;\n expectedDelivery: TDateTimeString | null;\n receivedBy: string | null;\n receivedAt: TDateTimeString | null;\n supplierInfo: string | null;\n notes: string | null;\n createdAt: TDateTimeString;\n updatedAt: TDateTimeString;\n}\n\nexport interface IInventoryRestockOrderItem {\n id: string;\n orderId: string;\n inventoryItemId: string;\n roomInventoryId: string | null;\n propertyInventoryId: string | null;\n quantityOrdered: number;\n quantityReceived: number;\n unitCost: number | null;\n totalCost: number | null;\n createdAt: TDateTimeString;\n}\n","import type { ISelectOption, TRecordValue } from \"../base\";\n\nexport const PROPERTY_STATUS = {\n ACTIVE: \"ACTIVE\",\n INACTIVE: \"INACTIVE\",\n} as const;\n\nexport type TPropertyStatus = TRecordValue<typeof PROPERTY_STATUS>;\n\nexport const PropertyStatusOptions: ISelectOption<TPropertyStatus>[] = [\n {\n label: \"Active\",\n value: PROPERTY_STATUS.ACTIVE,\n },\n {\n label: \"Inactive\",\n value: PROPERTY_STATUS.INACTIVE,\n },\n];\n\nexport const PROPERTY_TYPES = {\n APARTMENT: \"APARTMENT\",\n COMMERCIAL: \"COMMERCIAL\",\n CONDO: \"CONDO\",\n DUPLEX: \"DUPLEX\",\n HOUSE: \"HOUSE\",\n MULTI_FAMILY: \"MULTI_FAMILY\",\n OFFICE: \"OFFICE\",\n RETAIL: \"RETAIL\",\n TOWNHOUSE: \"TOWNHOUSE\",\n VACATION_RENTAL: \"VACATION_RENTAL\",\n WAREHOUSE: \"WAREHOUSE\",\n} as const;\n\nexport type TPropertyType = TRecordValue<typeof PROPERTY_TYPES>;\n\nexport const PropertyTypeOptions: ISelectOption<TPropertyType>[] = [\n {\n label: \"Apartment\",\n value: PROPERTY_TYPES.APARTMENT,\n },\n {\n label: \"Commercial\",\n value: PROPERTY_TYPES.COMMERCIAL,\n },\n {\n label: \"Condo\",\n value: PROPERTY_TYPES.CONDO,\n },\n {\n label: \"Duplex\",\n value: PROPERTY_TYPES.DUPLEX,\n },\n {\n label: \"House\",\n value: PROPERTY_TYPES.HOUSE,\n },\n {\n label: \"Multi-Family\",\n value: PROPERTY_TYPES.MULTI_FAMILY,\n },\n {\n label: \"Office\",\n value: PROPERTY_TYPES.OFFICE,\n },\n {\n label: \"Retail\",\n value: PROPERTY_TYPES.RETAIL,\n },\n {\n label: \"Townhouse\",\n value: PROPERTY_TYPES.TOWNHOUSE,\n },\n {\n label: \"Vacation Rental\",\n value: PROPERTY_TYPES.VACATION_RENTAL,\n },\n {\n label: \"Warehouse\",\n value: PROPERTY_TYPES.WAREHOUSE,\n },\n];\n","import type {\n IProperty,\n IPropertyAccessInformation,\n IPropertyDetail,\n IPropertySummary,\n TPropertyStatus,\n TPropertyType,\n} from \".\";\nimport { PROPERTY_STATUS, PROPERTY_TYPES } from \"./constants\";\nimport type { IMessageResponse, TUSStateCode } from \"../base\";\nimport { US_JURISDICTIONS } from \"../base\";\nimport {\n createValidationSchema,\n optionalEnumField,\n optionalNullableEnumField,\n optionalNullableNonNegativeIntegerField,\n optionalNullableStringField,\n optionalStringField,\n requiredEnumField,\n requiredStringField,\n type TInferValidationSchemaInput,\n} from \"../validation\";\n\nexport interface IPropertyIdParams {\n propertyId: string;\n}\n\nexport interface ICompanyIdParams {\n companyId: string;\n}\n\nconst PropertyTypeValues = Object.values(PROPERTY_TYPES);\nconst PropertyStatusValues = Object.values(PROPERTY_STATUS);\nconst StateCodeValues = Object.keys(US_JURISDICTIONS) as TUSStateCode[];\n\nexport const CreatePropertyRequestSchema = createValidationSchema({\n companyId: requiredStringField(),\n displayName: requiredStringField(),\n propertyType: requiredEnumField(PropertyTypeValues),\n status: optionalNullableEnumField(PropertyStatusValues),\n addressLine1: requiredStringField(),\n addressLine2: optionalNullableStringField(),\n city: requiredStringField(),\n stateCode: requiredEnumField(StateCodeValues),\n postalCode: requiredStringField(),\n country: optionalNullableStringField(),\n sqft: optionalNullableNonNegativeIntegerField(),\n timezone: optionalNullableStringField(),\n imageUrl: optionalNullableStringField(),\n specialNotes: optionalNullableStringField(),\n});\n\nexport type ICreatePropertyRequest = TInferValidationSchemaInput<\n typeof CreatePropertyRequestSchema\n> & {\n propertyType: TPropertyType;\n status?: TPropertyStatus | null;\n stateCode: TUSStateCode;\n};\n\nexport const UpdatePropertyRequestSchema = createValidationSchema({\n displayName: optionalStringField(),\n propertyType: optionalNullableEnumField(PropertyTypeValues),\n status: optionalNullableEnumField(PropertyStatusValues),\n addressLine1: optionalStringField(),\n addressLine2: optionalNullableStringField(),\n city: optionalStringField(),\n stateCode: optionalEnumField(StateCodeValues),\n postalCode: optionalStringField(),\n country: optionalNullableStringField(),\n sqft: optionalNullableNonNegativeIntegerField(),\n timezone: optionalNullableStringField(),\n imageUrl: optionalNullableStringField(),\n specialNotes: optionalNullableStringField(),\n});\n\nexport type IUpdatePropertyRequest = TInferValidationSchemaInput<\n typeof UpdatePropertyRequestSchema\n> & {\n propertyType?: TPropertyType | null;\n status?: TPropertyStatus | null;\n stateCode?: TUSStateCode;\n};\n\nexport interface IGetPropertiesRequest {\n companyId?: string;\n}\n\nexport interface IGetPropertyByIdRequest extends IPropertyIdParams {}\n\nexport interface IDeletePropertyRequest extends IPropertyIdParams {}\n\nexport type IGetPropertiesResponse = IPropertySummary[];\n\nexport interface IGetPropertyResponse extends IPropertyDetail {}\n\nexport interface ICreatePropertyResponse extends IPropertyDetail {}\n\nexport interface IUpdatePropertyResponse extends IPropertyDetail {}\n\nexport interface IDeletePropertyResponse extends IMessageResponse {}\n\nexport const UpdatePropertyAccessInformationRequestSchema =\n createValidationSchema({\n entryInstructions: optionalNullableStringField(),\n accessCode: optionalNullableStringField(),\n wifiName: optionalNullableStringField(),\n wifiPassword: optionalNullableStringField(),\n alarmCode: optionalNullableStringField(),\n parkingInfo: optionalNullableStringField(),\n specialNotes: optionalNullableStringField(),\n });\n\nexport type IUpdatePropertyAccessInformationRequest =\n TInferValidationSchemaInput<\n typeof UpdatePropertyAccessInformationRequestSchema\n >;\n\nexport interface IUpdatePropertyAccessInformationResponse extends IPropertyAccessInformation {}\n\nexport interface IGetPropertyAccessInformationRequest extends IPropertyIdParams {}\n\nexport type IGetPropertyAccessInformationResponse =\n IPropertyAccessInformation | null;\n\nexport interface IGetPropertyByIdResponse extends IGetPropertyResponse {}\n\nexport interface IGetPropertiesByCompanyIdRequest extends ICompanyIdParams {}\nexport type IGetPropertiesByCompanyIdResponse = IProperty[];\n","import type { TRecordValue } from \"../base\";\n\nexport const ROOM_TYPE = {\n BEDROOM: \"BEDROOM\",\n BATHROOM: \"BATHROOM\",\n KITCHEN: \"KITCHEN\",\n LIVING_ROOM: \"LIVING_ROOM\",\n DINING_ROOM: \"DINING_ROOM\",\n OFFICE: \"OFFICE\",\n GARAGE: \"GARAGE\",\n LAUNDRY_ROOM: \"LAUNDRY_ROOM\",\n BASEMENT: \"BASEMENT\",\n ATTIC: \"ATTIC\",\n BALCONY: \"BALCONY\",\n PORCH: \"PORCH\",\n GARDEN: \"GARDEN\",\n OTHER: \"OTHER\",\n} as const;\n\nexport type TRoomType = TRecordValue<typeof ROOM_TYPE>;\n","import type { IRoom } from \".\";\nimport { ROOM_TYPE } from \"./constants\";\nimport type { IMessageResponse } from \"../base\";\nimport {\n createValidationSchema,\n optionalNullableEnumField,\n optionalNullableStringField,\n optionalStringField,\n requiredStringField,\n type TInferValidationSchemaInput,\n} from \"../validation\";\n\nexport interface IRoomPropertyRouteParams {\n propertyId: string;\n}\n\nexport interface IRoomRouteParams {\n roomId: string;\n}\n\nconst RoomTypeValues = Object.values(ROOM_TYPE);\n\nexport const CreateRoomRequestSchema = createValidationSchema({\n propertyId: requiredStringField(),\n displayName: requiredStringField(),\n description: optionalNullableStringField(),\n checklistTemplateId: optionalNullableStringField(),\n roomType: optionalNullableEnumField(RoomTypeValues),\n heroPhoto: optionalNullableStringField(),\n});\n\nexport type ICreateRoomRequest = TInferValidationSchemaInput<\n typeof CreateRoomRequestSchema\n> & {\n roomType?: IRoom[\"roomType\"];\n};\n\nexport interface ICreateRoomResponse extends IRoom {}\n\nexport interface IGetRoomsRequest {\n propertyId?: string;\n}\n\nexport interface IGetRoomsByPropertyIdRequest extends IRoomPropertyRouteParams {}\nexport type IGetRoomsByPropertyIdResponse = IRoom[];\n\nexport interface IGetDetailedRoomsByPropertyIdRequest extends IRoomPropertyRouteParams {}\nexport type IGetDetailedRoomsByPropertyIdResponse = IRoom[];\n\nexport interface IGetRoomByIdRequest extends IRoomRouteParams {}\nexport interface IGetRoomByIdResponse extends IRoom {}\n\nexport const UpdateRoomRequestSchema = createValidationSchema({\n displayName: optionalStringField(),\n description: optionalNullableStringField(),\n checklistTemplateId: optionalNullableStringField(),\n roomType: optionalNullableEnumField(RoomTypeValues),\n heroPhoto: optionalNullableStringField(),\n});\n\nexport type IUpdateRoomRequest = TInferValidationSchemaInput<\n typeof UpdateRoomRequestSchema\n> & {\n roomType?: IRoom[\"roomType\"];\n};\n\nexport interface IUpdateRoomResponse extends IRoom {}\n\nexport interface IDeleteRoomRequest extends IRoomRouteParams {}\nexport interface IDeleteRoomResponse extends IMessageResponse {}\n","import type { TDateTimeString, TRecordValue } from \"../base\";\n\nexport const SUBSCRIPTION_STATUS = {\n ACTIVE: \"ACTIVE\",\n CANCELED: \"CANCELED\",\n EXPIRED: \"EXPIRED\",\n PAST_DUE: \"PAST_DUE\",\n TRIALING: \"TRIALING\",\n} as const;\n\nexport type TSubscriptionStatus = TRecordValue<typeof SUBSCRIPTION_STATUS>;\n\nexport const SUBSCRIPTION_PROVIDER = {\n STRIPE: \"STRIPE\",\n APPLE: \"APPLE\",\n GOOGLE: \"GOOGLE\",\n} as const;\n\nexport type TSubscriptionProvider = TRecordValue<typeof SUBSCRIPTION_PROVIDER>;\n\nexport const BILLING_PERIOD = {\n MONTHLY: \"MONTHLY\",\n YEARLY: \"YEARLY\",\n} as const;\n\nexport type TBillingPeriod = TRecordValue<typeof BILLING_PERIOD>;\n\nexport interface IUserSubscription {\n id: string;\n userId: string;\n planId: string;\n status: TSubscriptionStatus;\n billingPeriod: TBillingPeriod;\n currentPeriodStart: TDateTimeString;\n currentPeriodEnd: TDateTimeString;\n provider: TSubscriptionProvider;\n providerSubscriptionId: string;\n cancelAtPeriodEnd: boolean;\n}\n","import type { IUserSafe, TAccountType } from \".\";\nimport { LANGUAGE } from \"./constants\";\nimport type { IEmptyRouteRequest, IMessageResponse } from \"../base\";\nimport {\n createValidationSchema,\n optionalEnumField,\n optionalNullableStringField,\n optionalStringField,\n type TInferValidationSchemaInput,\n} from \"../validation\";\n\nexport interface IUserIdParams {\n id: string;\n}\n\nexport interface IGetUserResponse {\n user: IUserSafe | null;\n}\n\nexport type IGetCurrentUserRequest = IEmptyRouteRequest;\nexport interface IGetCurrentUserResponse extends IGetUserResponse {}\n\nexport interface IGetUserByIdRequest extends IUserIdParams {}\nexport interface IGetUserByIdResponse extends IGetUserResponse {}\n\nexport interface IGetUserByEmailRequest {\n email: string;\n}\nexport interface IGetUserByEmailResponse extends IGetUserResponse {}\n\nexport type IGetStaffRequest = IEmptyRouteRequest;\nexport interface IGetStaffResponse {\n staff: IUserSafe[];\n}\n\nconst LanguageValues = Object.values(LANGUAGE);\n\nexport const UpdateUserRequestSchema = createValidationSchema({\n firstName: optionalStringField(),\n lastName: optionalNullableStringField(),\n mi: optionalNullableStringField(),\n username: optionalNullableStringField(),\n email: optionalStringField(),\n phoneNumber: optionalNullableStringField(),\n phoneFormat: optionalNullableStringField(),\n preferredLanguage: optionalEnumField(LanguageValues),\n});\n\nexport type IUpdateUserRequest = TInferValidationSchemaInput<\n typeof UpdateUserRequestSchema\n> & {\n preferredLanguage?: IUserSafe[\"preferredLanguage\"];\n};\n\nexport const UpdateCurrentUserRequestSchema = createValidationSchema({\n firstName: optionalStringField(),\n lastName: optionalStringField(),\n});\n\nexport type IUpdateCurrentUserRequest = TInferValidationSchemaInput<\n typeof UpdateCurrentUserRequestSchema\n>;\n\nexport interface IUpdateUserResponse {\n user: IUserSafe;\n}\n\nexport type IDeleteUserRequest = IEmptyRouteRequest;\nexport interface IDeleteUserResponse extends IMessageResponse {}\n\nexport interface IGetUsersByAccountTypeRequest {\n accountType: TAccountType;\n}\nexport interface IGetUsersByAccountTypeResponse {\n users: IUserSafe[];\n}\n","import type { TDateTimeString, TRecordValue } from \"../base\";\nexport * from \"./routes\";\n\n/**\n * Work session status enum.\n */\nexport const WORK_SESSION_STATUS = {\n IN_PROGRESS: \"IN_PROGRESS\",\n COMPLETED: \"COMPLETED\",\n CANCELLED: \"CANCELLED\",\n} as const;\n\nexport type TWorkSessionStatus = TRecordValue<typeof WORK_SESSION_STATUS>;\n\n/**\n * Checklist execution status enum.\n */\nexport const CHECKLIST_EXECUTION_STATUS = {\n PENDING: \"PENDING\",\n IN_PROGRESS: \"IN_PROGRESS\",\n COMPLETED: \"COMPLETED\",\n SKIPPED: \"SKIPPED\",\n} as const;\n\nexport type TChecklistExecutionStatus = TRecordValue<\n typeof CHECKLIST_EXECUTION_STATUS\n>;\n\n/**\n * Work session.\n */\nexport interface IWorkSession {\n id: string;\n propertyId: string;\n serviceProviderCompanyId: string;\n performedBy: string;\n status: TWorkSessionStatus;\n scheduledDate: TDateTimeString | null;\n startedAt: TDateTimeString;\n completedAt: TDateTimeString | null;\n totalTimeMinutes: number | null;\n notes: string | null;\n createdAt: TDateTimeString;\n updatedAt: TDateTimeString;\n}\n\n/**\n * Checklist execution.\n */\nexport interface IChecklistExecution {\n id: string;\n workSessionId: string;\n roomChecklistId: string;\n roomId: string;\n workerId: string;\n status: TChecklistExecutionStatus;\n startedAt: TDateTimeString | null;\n completedAt: TDateTimeString | null;\n timeSpentMinutes: number | null;\n notes: string | null;\n createdAt: TDateTimeString;\n updatedAt: TDateTimeString;\n}\n\n/**\n * Checklist item completion.\n */\nexport interface IChecklistItemCompletion {\n id: string;\n checklistExecutionId: string;\n roomChecklistItemId: string;\n completedBy: string;\n completedAt: TDateTimeString;\n photoId: string | null;\n notes: string | null;\n skipped: boolean;\n skipReason: string | null;\n createdAt: TDateTimeString;\n}\n\n/**\n * Work session with executions.\n */\nexport interface IWorkSessionWithExecutions extends IWorkSession {\n executions: IChecklistExecution[];\n}\n\n/**\n * Input for creating a work session.\n */\nexport interface ICreateWorkSessionInput {\n propertyId: string;\n serviceProviderCompanyId: string;\n performedBy: string;\n scheduledDate?: TDateTimeString;\n notes?: string;\n}\n\n/**\n * Input for completing a checklist item.\n */\nexport interface ICompleteChecklistItemInput {\n roomChecklistItemId: string;\n completedBy: string;\n photoId?: string;\n notes?: string;\n skipped?: boolean;\n skipReason?: string;\n}\n"],"mappings":"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","names":["t","e","n","r","i","s","u","a","M","m","f","l","$","y","v","g","D","o","d","c","h","t","i","d","n","e","s","r","e","t","o","n","i","d","dayjs","relativeTime","isoWeek","isRecord","isEmail","StateCodeValues"]}
1
+ {"version":3,"sources":["../node_modules/dayjs/dayjs.min.js","../node_modules/dayjs/plugin/isoWeek.js","../node_modules/dayjs/plugin/relativeTime.js","../src/helpers/date/index.ts","../src/helpers/object/index.ts","../src/helpers/string/index.ts","../src/helpers/index.ts","../src/types/api/index.ts","../src/types/validation/index.ts","../src/types/user/constants.ts","../src/types/auth/routes.ts","../src/types/auth/index.ts","../src/types/base/paging.types.ts","../src/types/base/index.ts","../src/types/company/constants.ts","../src/types/company/routes.ts","../src/types/damage-report/index.ts","../src/types/errors/index.ts","../src/types/health/index.ts","../src/types/image/index.ts","../src/types/inventory/index.ts","../src/types/property/constants.ts","../src/types/property/routes.ts","../src/types/room/constants.ts","../src/types/room/routes.ts","../src/types/subscription/index.ts","../src/types/user/routes.ts","../src/types/work-session/index.ts"],"sourcesContent":["!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isoWeek=t()}(this,(function(){\"use strict\";var e=\"day\";return function(t,i,s){var a=function(t){return t.add(4-t.isoWeekday(),e)},d=i.prototype;d.isoWeekYear=function(){return a(this).year()},d.isoWeek=function(t){if(!this.$utils().u(t))return this.add(7*(t-this.isoWeek()),e);var i,d,n,o,r=a(this),u=(i=this.isoWeekYear(),d=this.$u,n=(d?s.utc:s)().year(i).startOf(\"year\"),o=4-n.isoWeekday(),n.isoWeekday()>4&&(o+=7),n.add(o,e));return r.diff(u,\"week\")+1},d.isoWeekday=function(e){return this.$utils().u(e)?this.day()||7:this.day(this.day()%7?e:e-7)};var n=d.startOf;d.startOf=function(e,t){var i=this.$utils(),s=!!i.u(t)||t;return\"isoweek\"===i.p(e)?s?this.date(this.date()-(this.isoWeekday()-1)).startOf(\"day\"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf(\"day\"):n.bind(this)(e,t)}}}));","!function(r,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(r=\"undefined\"!=typeof globalThis?globalThis:r||self).dayjs_plugin_relativeTime=e()}(this,(function(){\"use strict\";return function(r,e,t){r=r||{};var n=e.prototype,o={future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"};function i(r,e,t,o){return n.fromToBase(r,e,t,o)}t.en.relativeTime=o,n.fromToBase=function(e,n,i,d,u){for(var f,a,s,l=i.$locale().relativeTime||o,h=r.thresholds||[{l:\"s\",r:44,d:\"second\"},{l:\"m\",r:89},{l:\"mm\",r:44,d:\"minute\"},{l:\"h\",r:89},{l:\"hh\",r:21,d:\"hour\"},{l:\"d\",r:35},{l:\"dd\",r:25,d:\"day\"},{l:\"M\",r:45},{l:\"MM\",r:10,d:\"month\"},{l:\"y\",r:17},{l:\"yy\",d:\"year\"}],m=h.length,c=0;c<m;c+=1){var y=h[c];y.d&&(f=d?t(e).diff(i,y.d,!0):i.diff(e,y.d,!0));var p=(r.rounding||Math.round)(Math.abs(f));if(s=f>0,p<=y.r||!y.r){p<=1&&c>0&&(y=h[c-1]);var v=l[y.l];u&&(p=u(\"\"+p)),a=\"string\"==typeof v?v.replace(\"%d\",p):v(p,n,y.l,s);break}}if(n)return a;var M=s?l.future:l.past;return\"function\"==typeof M?M(a):M.replace(\"%s\",a)},n.to=function(r,e){return i(r,e,this,!0)},n.from=function(r,e){return i(r,e,this)};var d=function(r){return r.$u?t.utc():t()};n.toNow=function(r){return this.to(d(this),r)},n.fromNow=function(r){return this.from(d(this),r)}}}));","import dayjs from \"dayjs\";\nimport isoWeek from \"dayjs/plugin/isoWeek\";\nimport relativeTime from \"dayjs/plugin/relativeTime\";\n\ndayjs.extend(relativeTime);\ndayjs.extend(isoWeek);\n\nexport type TDateInput = Date | string | number | null | undefined;\nexport type TDateFormat = \"MM/DD/YYYY\" | \"MM/DD/YY HH:mm A\" | string;\n\nconst defaultDateFallback = \"--\";\n\nconst isValidDateInput = (date: TDateInput): boolean => {\n return date !== null && date !== undefined && dayjs(date).isValid();\n};\n\n/**\n * Format a date using a dayjs format string.\n *\n * @param {TDateInput} date - Date-like value to format.\n * @param {TDateFormat} format - dayjs format string.\n * @returns {string} Formatted date or `--` for missing/invalid input.\n */\nexport const formatDate = (\n date?: TDateInput,\n format: TDateFormat = \"MM/DD/YYYY\",\n): string => {\n if (!isValidDateInput(date)) {\n return defaultDateFallback;\n }\n\n return dayjs(date).format(format);\n};\n\n/**\n * Return a human-readable relative time string.\n *\n * @param {TDateInput} date - Date-like value to compare against now.\n * @returns {string} Relative time or `--` for missing/invalid input.\n */\nexport const timeAgo = (date: TDateInput): string => {\n if (!isValidDateInput(date)) {\n return defaultDateFallback;\n }\n\n return dayjs(date).fromNow();\n};\n\n/**\n * Add days to a date.\n *\n * @param {TDateInput} date - Source date.\n * @param {number} days - Number of days to add.\n * @returns {Date} Updated date.\n */\nexport const addDays = (date: TDateInput, days: number): Date => {\n return dayjs(date).add(days, \"day\").toDate();\n};\n\n/**\n * Subtract days from a date.\n *\n * @param {TDateInput} date - Source date.\n * @param {number} days - Number of days to subtract.\n * @returns {Date} Updated date.\n */\nexport const subtractDays = (date: TDateInput, days: number): Date => {\n return dayjs(date).subtract(days, \"day\").toDate();\n};\n\n/**\n * Return the absolute number of whole day boundaries between two dates.\n *\n * @param {TDateInput} dateA - First date.\n * @param {TDateInput} dateB - Second date.\n * @returns {number} Absolute difference in days, or 0 for invalid input.\n */\nexport const daysBetween = (dateA: TDateInput, dateB: TDateInput): number => {\n if (!isValidDateInput(dateA) || !isValidDateInput(dateB)) {\n return 0;\n }\n\n return Math.abs(dayjs(dateA).diff(dayjs(dateB), \"day\"));\n};\n\n/**\n * Check whether a date is today.\n *\n * @param {TDateInput} date - Date-like value.\n * @returns {boolean} True when the date is today.\n */\nexport const isToday = (date: TDateInput): boolean => {\n if (!isValidDateInput(date)) {\n return false;\n }\n\n return dayjs(date).isSame(dayjs(), \"day\");\n};\n\n/**\n * Check whether a date is in the past.\n *\n * @param {TDateInput} date - Date-like value.\n * @returns {boolean} True when the date is before now.\n */\nexport const isPast = (date: TDateInput): boolean => {\n if (!isValidDateInput(date)) {\n return false;\n }\n\n return dayjs(date).isBefore(dayjs());\n};\n\n/**\n * Check whether a date is in the future.\n *\n * @param {TDateInput} date - Date-like value.\n * @returns {boolean} True when the date is after now.\n */\nexport const isFuture = (date: TDateInput): boolean => {\n if (!isValidDateInput(date)) {\n return false;\n }\n\n return dayjs(date).isAfter(dayjs());\n};\n\n/**\n * Return the start of the day for a date.\n *\n * @param {TDateInput} date - Source date.\n * @returns {Date} Date set to 00:00:00.000.\n */\nexport const startOfDay = (date: TDateInput): Date => {\n return dayjs(date).startOf(\"day\").toDate();\n};\n\n/**\n * Return the end of the day for a date.\n *\n * @param {TDateInput} date - Source date.\n * @returns {Date} Date set to 23:59:59.999.\n */\nexport const endOfDay = (date: TDateInput): Date => {\n return dayjs(date).endOf(\"day\").toDate();\n};\n\n/**\n * Return the ISO week start date, Monday at 00:00:00.000.\n *\n * @param {TDateInput} date - Source date.\n * @returns {Date} Start of ISO week.\n */\nexport const startOfWeek = (date: TDateInput): Date => {\n return dayjs(date).startOf(\"isoWeek\").toDate();\n};\n\n/**\n * Return the ISO week end date, Sunday at 23:59:59.999.\n *\n * @param {TDateInput} date - Source date.\n * @returns {Date} End of ISO week.\n */\nexport const endOfWeek = (date: TDateInput): Date => {\n return dayjs(date).endOf(\"isoWeek\").toDate();\n};\n\n/**\n * Return all seven dates in the ISO week containing the provided date.\n *\n * @param {TDateInput} date - Source date.\n * @returns {Date[]} Monday-through-Sunday dates at the start of each day.\n */\nexport const getWeekDays = (date: TDateInput): Date[] => {\n const weekStart = dayjs(date).startOf(\"isoWeek\");\n\n return Array.from({ length: 7 }, (_value, index) => {\n return weekStart.add(index, \"day\").startOf(\"day\").toDate();\n });\n};\n\n/**\n * Add weeks to a date.\n *\n * @param {TDateInput} date - Source date.\n * @param {number} weeks - Number of weeks to add.\n * @returns {Date} Updated date.\n */\nexport const addWeeks = (date: TDateInput, weeks: number): Date => {\n return dayjs(date).add(weeks, \"week\").toDate();\n};\n\n/**\n * Subtract weeks from a date.\n *\n * @param {TDateInput} date - Source date.\n * @param {number} weeks - Number of weeks to subtract.\n * @returns {Date} Updated date.\n */\nexport const subtractWeeks = (date: TDateInput, weeks: number): Date => {\n return dayjs(date).subtract(weeks, \"week\").toDate();\n};\n","import type {\n IFilterCondition,\n ISortCondition,\n} from \"../../types/base/paging.types\";\n\ntype TRecord = Record<string, unknown>;\ntype TPropertyRecord = Record<PropertyKey, unknown>;\ntype TSortableValue =\n | string\n | number\n | bigint\n | boolean\n | Date\n | null\n | undefined;\n\ntype TReplaceNulls<TValue> = TValue extends null\n ? \"\"\n : TValue extends (infer TItem)[]\n ? TReplaceNulls<TItem>[]\n : TValue extends Date\n ? TValue\n : TValue extends object\n ? { [TKey in keyof TValue]: TReplaceNulls<TValue[TKey]> }\n : TValue;\n\nconst unsafePathSegments = new Set([\"__proto__\", \"prototype\", \"constructor\"]);\n\nconst isRecord = (value: unknown): value is TRecord => {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n !(value instanceof Date)\n );\n};\n\nconst isSafePathSegment = (segment: string): boolean => {\n return segment.length > 0 && !unsafePathSegments.has(segment);\n};\n\nconst getPathSegments = (path: string): string[] => {\n return path.split(\".\").filter((segment) => segment.length > 0);\n};\n\n/**\n * Safely parse a JSON string into a typed value.\n *\n * When a fallback value is provided, the function always returns that generic\n * type. Without a fallback value, parse failures return an empty object.\n *\n * @typeParam TParsed - Expected parsed value type.\n * @param {string | null | undefined} jsonString - JSON string to parse.\n * @param {TParsed} [fallbackValue] - Value returned when parsing fails.\n * @returns {TParsed | Record<string, unknown>} Parsed value or fallback.\n * @example\n * parseJSON<{ a: number }>('{\"a\":1}', { a: 0 }) // => { a: 1 }\n * parseJSON('not json') // => {}\n */\nexport function parseJSON<TParsed>(\n jsonString: string | null | undefined,\n fallbackValue: TParsed,\n): TParsed;\nexport function parseJSON(\n jsonString: string | null | undefined,\n): Record<string, unknown>;\nexport function parseJSON<TParsed>(\n jsonString: string | null | undefined,\n fallbackValue?: TParsed,\n): TParsed | Record<string, unknown> {\n if (!jsonString) {\n return fallbackValue ?? {};\n }\n\n try {\n const parsedValue = JSON.parse(jsonString) as unknown;\n\n return parsedValue as TParsed;\n } catch {\n return fallbackValue ?? {};\n }\n}\n\n/**\n * Stringify a value to JSON while skipping circular references.\n *\n * Uses an internal cache to omit repeated object references that would\n * normally cause `JSON.stringify` to throw.\n *\n * @param {unknown} value - Value to stringify.\n * @returns {string | undefined} JSON string with circulars omitted.\n * @example\n * const value: Record<string, unknown> = {}; value.self = value;\n * JSONStringify(value) // => \"{}\"\n */\nexport const JSONStringify = (value: unknown): string | undefined => {\n const seenValues = new WeakSet<object>();\n\n try {\n return JSON.stringify(value, (_key, nestedValue) => {\n if (typeof nestedValue === \"bigint\") {\n return nestedValue.toString();\n }\n\n if (typeof nestedValue === \"object\" && nestedValue !== null) {\n if (seenValues.has(nestedValue)) {\n return undefined;\n }\n\n seenValues.add(nestedValue);\n }\n\n return nestedValue;\n });\n } catch {\n return undefined;\n }\n};\n\n/**\n * Deep-remove `undefined` properties while preserving Dates and arrays.\n *\n * Object properties with `undefined` values are removed. Array items are\n * preserved so array indexes do not shift.\n *\n * @typeParam TValue - Input value type.\n * @param {TValue} value - Input value.\n * @returns {TValue} Cleaned clone with `undefined` object properties removed.\n */\nexport const removeUndefined = <TValue>(value: TValue): TValue => {\n if (Array.isArray(value)) {\n return value.map((item) => removeUndefined(item)) as TValue;\n }\n\n if (isRecord(value)) {\n const updatedValue = Object.entries(value).reduce<TRecord>(\n (accumulator, [key, nestedValue]) => {\n if (nestedValue !== undefined) {\n accumulator[key] = removeUndefined(nestedValue);\n }\n\n return accumulator;\n },\n {},\n );\n\n return updatedValue as TValue;\n }\n\n return value;\n};\n\n/**\n * Test whether a location object's `pathname` equals a key.\n *\n * @param {{ pathname?: string } | null | undefined} location - Object expected\n * to have a `pathname`.\n * @param {string} key - Path to compare.\n * @returns {boolean}\n * @example\n * validPath({ pathname: \"/home\" }, \"/home\") // true\n */\nexport const validPath = (\n location: { pathname?: string } | null | undefined,\n key: string,\n): boolean => {\n return location?.pathname === key;\n};\n\n/**\n * Return the first element if the input is an array; otherwise return the value itself.\n *\n * @typeParam T - Element type.\n * @param {T | T[]} input - A single value or an array.\n * @returns {T} First element or the input value.\n * @example\n * returnObject([1,2,3]) // 1\n * returnObject(5) // 5\n */\nexport const returnObject = <T>(input: T | T[]): T => {\n return Array.isArray(input) ? input[0] : input;\n};\n\n/**\n * Filter out items from `array1` whose `id` appears in `array2`.\n *\n * @typeParam T - Object type with an `id` field.\n * @param {T[]} [array1] - Source array.\n * @param {T[]} [array2] - Items whose `id`s should be excluded.\n * @returns {T[]} Filtered array (or `[]` on invalid input).\n */\nexport const filterArrayById = <T extends { id: number | string }>(\n array1?: T[],\n array2?: T[],\n): T[] => {\n if (!Array.isArray(array1) || !Array.isArray(array2)) {\n return [];\n }\n\n const idsToExclude = new Set(array2.map((item) => item.id));\n return array1.filter((item) => !idsToExclude.has(item.id));\n};\n\n/**\n * Sort an array of objects by a given property (ascending).\n *\n * Mutates the original array (uses `Array.prototype.sort`).\n *\n * @typeParam T - Object type.\n * @typeParam TKey - Sortable property key.\n * @param {T[]} array - Array to sort.\n * @param {TKey} property - Property name to sort by.\n * @returns {T[]} The same array instance, sorted (or empty array if input invalid).\n */\nexport const sortArrayByProperty = <\n TKey extends PropertyKey,\n T extends Record<TKey, TSortableValue>,\n>(\n array: T[],\n property: TKey,\n): T[] => {\n if (!Array.isArray(array) || array.length === 0) return [];\n\n return array.sort((a, b) => {\n const firstValue = a[property];\n const secondValue = b[property];\n\n if (firstValue === secondValue) return 0;\n if (firstValue === null || firstValue === undefined) return 1;\n if (secondValue === null || secondValue === undefined) return -1;\n if (firstValue < secondValue) return -1;\n if (firstValue > secondValue) return 1;\n return 0;\n });\n};\n\n/**\n * Recursively replace `null` values with empty strings.\n *\n * Works on primitives, arrays, Dates, and plain objects.\n *\n * @typeParam TValue - Input value type.\n * @param {TValue} value - Input value.\n * @returns {TReplaceNulls<TValue>} Value with all `null` replaced by `\"\"`.\n */\nexport const replaceNulls = <TValue>(value: TValue): TReplaceNulls<TValue> => {\n if (value === null) {\n return \"\" as TReplaceNulls<TValue>;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => replaceNulls(item)) as TReplaceNulls<TValue>;\n }\n\n if (isRecord(value)) {\n const updatedValue = Object.entries(value).reduce<TRecord>(\n (accumulator, [key, nestedValue]) => {\n accumulator[key] = replaceNulls(nestedValue);\n return accumulator;\n },\n {},\n );\n\n return updatedValue as TReplaceNulls<TValue>;\n }\n\n return value as TReplaceNulls<TValue>;\n};\n\n/**\n * Recursively remove object keys that contain a dot (`.`).\n *\n * @typeParam TValue - Input value type.\n * @param {TValue} value - Input object or array.\n * @returns {TValue} New value with dotted keys removed at all levels.\n */\nexport const removeFormProperties = <TValue>(value: TValue): TValue => {\n if (Array.isArray(value)) {\n return value.map((item) => removeFormProperties(item)) as TValue;\n }\n\n if (isRecord(value)) {\n const updatedValue = Object.entries(value).reduce<TRecord>(\n (accumulator, [key, nestedValue]) => {\n if (!key.includes(\".\")) {\n accumulator[key] = removeFormProperties(nestedValue);\n }\n\n return accumulator;\n },\n {},\n );\n\n return updatedValue as TValue;\n }\n\n return value;\n};\n\n/**\n * Recursively convert string booleans `\"true\"`/`\"false\"` to actual booleans.\n *\n * Leaves all other values unchanged.\n *\n * @typeParam TValue - Input value type.\n * @param {TValue} value - Input object or array.\n * @returns {TValue} New value with boolean-like strings converted.\n */\nexport const convertStringBooleans = <TValue>(value: TValue): TValue => {\n if (Array.isArray(value)) {\n return value.map((item) => convertStringBooleans(item)) as TValue;\n }\n\n if (isRecord(value)) {\n const updatedValue = Object.entries(value).reduce<TRecord>(\n (accumulator, [key, nestedValue]) => {\n if (nestedValue === \"true\") {\n accumulator[key] = true;\n } else if (nestedValue === \"false\") {\n accumulator[key] = false;\n } else {\n accumulator[key] = convertStringBooleans(nestedValue);\n }\n\n return accumulator;\n },\n {},\n );\n\n return updatedValue as TValue;\n }\n\n return value;\n};\n\n/**\n * Convenience helper to clean form-like data:\n * - Removes `undefined` properties\n * - Converts string booleans to booleans\n * - Removes keys containing a dot (`.`)\n *\n * @typeParam TObject - Form data object type.\n * @param {TObject} objectToClean - Input data.\n * @returns {Partial<TObject>} Cleaned clone.\n */\nexport const cleanFormData = <TObject extends TRecord>(\n objectToClean: TObject,\n): Partial<TObject> => {\n return removeFormProperties(\n convertStringBooleans(removeUndefined(objectToClean)),\n ) as Partial<TObject>;\n};\n\n/**\n * Return a default pagination object, allowing optional sort and filters.\n *\n * @param {ISortCondition[]} [sort] - Optional sort conditions.\n * @param {IFilterCondition[]} [filters] - Optional filter conditions.\n * @returns {{ page: number; size: number; sort: ISortCondition[]; filters: IFilterCondition[] }}\n * @example\n * resetPagination() // => { page:1, size:25, sort:[], filters:[] }\n */\nexport const resetPagination = (\n sort?: ISortCondition[],\n filters?: IFilterCondition[],\n) => {\n return {\n page: 1,\n size: 25,\n sort: sort || [],\n filters: filters || [],\n };\n};\n\n/**\n * Format a string of digits into a U.S. phone number.\n *\n * Strips non-numeric characters and formats 10 digits as `(XXX) XXX-XXXX`.\n * Strips a leading US country code when 11 digits are provided.\n * If a value cannot be formatted, returns the original value as a string.\n *\n * @param {string | number} value - Phone number digits (string or number).\n * @returns {string} Formatted phone number, or original input if invalid length.\n * @example\n * formatPhoneNumber(\"1234567890\") // \"(123) 456-7890\"\n * formatPhoneNumber(9876543210) // \"(987) 654-3210\"\n * formatPhoneNumber(\"555\") // \"555\"\n */\nexport const formatPhoneNumber = (value: string | number): string => {\n const originalValue = value.toString();\n const digits = originalValue.replace(/\\D/g, \"\");\n const normalizedDigits =\n digits.length === 11 && digits.startsWith(\"1\") ? digits.slice(1) : digits;\n\n if (normalizedDigits.length !== 10) return originalValue;\n\n const area = normalizedDigits.slice(0, 3);\n const prefix = normalizedDigits.slice(3, 6);\n const line = normalizedDigits.slice(6);\n\n return `(${area}) ${prefix}-${line}`;\n};\n\n/**\n * Format a number with thousands separators (commas).\n *\n * @param {number} value - Number to format.\n * @returns {string} String with commas.\n * @example\n * formatNumber(1234567) // \"1,234,567\"\n */\nexport const formatNumber = (value: number): string => {\n return value.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n};\n\n/**\n * Remove comma separators from a number-like value.\n *\n * @param {number | string} value - Number-like value.\n * @returns {string} Value without comma separators.\n */\nexport const parseNumber = (value: number | string): string => {\n return value.toString().replace(/,/g, \"\");\n};\n\n/**\n * Delete a property from an object if it exists (no-op if it doesn't).\n *\n * @typeParam TObject - Object type.\n * @param {TObject} objectToUpdate - Target object (mutated).\n * @param {keyof TObject | string} propertyName - Property to delete.\n * @returns {void}\n */\nexport const deletePropertyIfExists = <TObject extends TRecord>(\n objectToUpdate: TObject,\n propertyName: keyof TObject | string,\n): void => {\n if (Object.prototype.hasOwnProperty.call(objectToUpdate, propertyName)) {\n delete objectToUpdate[propertyName as keyof TObject];\n }\n};\n\n/**\n * Split an array into chunks of a given size.\n *\n * @typeParam T - Element type.\n * @param {T[]} array - Source array.\n * @param {number} chunkSize - Size of each chunk.\n * @returns {T[][]} Array of chunks (last one may be smaller).\n * @example\n * chunkArray([1,2,3,4,5], 2) // [[1,2],[3,4],[5]]\n */\nexport const chunkArray = <T>(array: T[], chunkSize: number): T[][] => {\n if (!Array.isArray(array) || chunkSize <= 0 || !Number.isFinite(chunkSize)) {\n return [];\n }\n\n const result: T[][] = [];\n const normalizedChunkSize = Math.floor(chunkSize);\n\n for (let i = 0; i < array.length; i += normalizedChunkSize) {\n result.push(array.slice(i, i + normalizedChunkSize));\n }\n\n return result;\n};\n\n/**\n * Return a shallow clone of `objectToOmitFrom` without the listed properties.\n *\n * @typeParam TObject - Source object type.\n * @typeParam TKey - Keys to omit.\n * @param {TObject} objectToOmitFrom - Source object.\n * @param {readonly TKey[]} propsToOmit - Property names to omit.\n * @returns {Omit<TObject, TKey>} New object without omitted props.\n * @example\n * omitProperties({a:1,b:2}, [\"b\"]) // { a:1 }\n */\nexport const omitProperties = <\n TObject extends TRecord,\n TKey extends keyof TObject,\n>(\n objectToOmitFrom: TObject,\n propsToOmit: readonly TKey[],\n): Omit<TObject, TKey> => {\n const updatedObject: Partial<TObject> = { ...objectToOmitFrom };\n\n propsToOmit.forEach((propertyName) => {\n delete updatedObject[propertyName];\n });\n\n return updatedObject as Omit<TObject, TKey>;\n};\n\n/**\n * Safe `hasOwnProperty` check.\n *\n * @param {unknown} value - Value to test.\n * @param {PropertyKey} key - Property name.\n * @returns {boolean}\n */\nexport const hasProperty = <TKey extends PropertyKey>(\n value: unknown,\n key: TKey,\n): value is Record<TKey, unknown> => {\n if (value === null || value === undefined) return false;\n return Object.prototype.hasOwnProperty.call(value, key);\n};\n\n/**\n * Safe `hasOwnProperty` alias from the reference utilities.\n *\n * @param {unknown} value - Value to test.\n * @param {PropertyKey} key - Property name.\n * @returns {boolean}\n */\nexport const hasOwnProp = <TKey extends PropertyKey>(\n value: unknown,\n key: TKey,\n): value is Record<TKey, unknown> => {\n return hasProperty(value, key);\n};\n\n/**\n * Determine if an object has at least one own enumerable property.\n *\n * @param {unknown} value - Object to test.\n * @returns {boolean} `true` if there is at least one key.\n */\nexport const hasProperties = (value: unknown): boolean => {\n return isRecord(value) && Object.keys(value).length > 0;\n};\n\n/**\n * Get the first own enumerable property value from an object.\n *\n * @typeParam TObject - Source object type.\n * @param {TObject | null | undefined} value - Source object.\n * @returns {TObject[keyof TObject] | null} First value, or null for empty/non-object input.\n */\nexport const getFirstPropertyValue = <TObject extends TRecord>(\n value: TObject | null | undefined,\n): TObject[keyof TObject] | null => {\n if (value === null || value === undefined || !hasProperties(value)) {\n return null;\n }\n\n const source = value as TObject;\n const keys = Object.keys(source) as (keyof TObject)[];\n return source[keys[0]];\n};\n\n/**\n * Get a nested value from an object using dot notation.\n *\n * @param {unknown} value - Source object.\n * @param {string} path - Dot-delimited path.\n * @returns {unknown} Nested value, or undefined when the path cannot be resolved.\n * @example\n * getNestedValue({ user: { name: \"John\" } }, \"user.name\") // \"John\"\n */\nexport const getNestedValue = (value: unknown, path: string): unknown => {\n const pathSegments = getPathSegments(path);\n\n if (pathSegments.length === 0) {\n return value;\n }\n\n let currentValue: unknown = value;\n\n for (const pathSegment of pathSegments) {\n if (!isSafePathSegment(pathSegment)) {\n return undefined;\n }\n\n if (currentValue === null || currentValue === undefined) {\n return undefined;\n }\n\n if (\n typeof currentValue !== \"object\" &&\n typeof currentValue !== \"function\"\n ) {\n return undefined;\n }\n\n currentValue = (currentValue as TPropertyRecord)[pathSegment];\n }\n\n return currentValue;\n};\n\n/**\n * Set a nested value on an object using dot notation.\n *\n * Mutates and returns the provided object. Unsafe path segments are ignored to\n * prevent prototype pollution.\n *\n * @typeParam TObject - Target object type.\n * @param {TObject} objectToUpdate - Target object.\n * @param {string} path - Dot-delimited path.\n * @param {unknown} value - Value to set.\n * @returns {TObject} The mutated target object.\n * @example\n * setNestedValue({}, \"user.name\", \"John\") // { user: { name: \"John\" } }\n */\nexport const setNestedValue = <TObject extends TRecord>(\n objectToUpdate: TObject,\n path: string,\n value: unknown,\n): TObject => {\n const pathSegments = getPathSegments(path);\n\n if (\n pathSegments.length === 0 ||\n pathSegments.some((pathSegment) => !isSafePathSegment(pathSegment))\n ) {\n return objectToUpdate;\n }\n\n let currentValue: TRecord = objectToUpdate;\n\n for (let i = 0; i < pathSegments.length - 1; i += 1) {\n const pathSegment = pathSegments[i];\n const nextValue = currentValue[pathSegment];\n\n if (!isRecord(nextValue)) {\n currentValue[pathSegment] = {};\n }\n\n currentValue = currentValue[pathSegment] as TRecord;\n }\n\n currentValue[pathSegments[pathSegments.length - 1]] = value;\n return objectToUpdate;\n};\n\n/**\n * Deep clone a value while preserving Dates and circular references.\n *\n * @typeParam TValue - Input value type.\n * @param {TValue} value - Value to clone.\n * @returns {TValue} Deep clone of the input.\n */\nexport const deepClone = <TValue>(value: TValue): TValue => {\n const cloneValue = <TNestedValue>(\n nestedValue: TNestedValue,\n seenValues: WeakMap<object, unknown>,\n ): TNestedValue => {\n if (nestedValue === null || typeof nestedValue !== \"object\") {\n return nestedValue;\n }\n\n if (nestedValue instanceof Date) {\n return new Date(nestedValue.getTime()) as TNestedValue;\n }\n\n if (seenValues.has(nestedValue)) {\n return seenValues.get(nestedValue) as TNestedValue;\n }\n\n if (Array.isArray(nestedValue)) {\n const clonedArray: unknown[] = [];\n seenValues.set(nestedValue, clonedArray);\n\n nestedValue.forEach((item) => {\n clonedArray.push(cloneValue(item, seenValues));\n });\n\n return clonedArray as TNestedValue;\n }\n\n const clonedObject = Object.create(\n Object.getPrototypeOf(nestedValue),\n ) as TPropertyRecord;\n seenValues.set(nestedValue, clonedObject);\n\n Reflect.ownKeys(nestedValue).forEach((key) => {\n clonedObject[key] = cloneValue(\n (nestedValue as TPropertyRecord)[key],\n seenValues,\n );\n });\n\n return clonedObject as TNestedValue;\n };\n\n return cloneValue(value, new WeakMap<object, unknown>());\n};\n\n/**\n * Flatten a nested object into dot notation.\n *\n * Arrays and Dates are treated as leaf values.\n *\n * @param {TRecord} value - Source object.\n * @param {string} [prefix] - Internal prefix for recursion.\n * @returns {TRecord} Flattened object.\n * @example\n * flatten({ user: { name: \"John\" } }) // { \"user.name\": \"John\" }\n */\nexport const flatten = (value: TRecord, prefix = \"\"): TRecord => {\n const result: TRecord = {};\n\n Object.entries(value).forEach(([key, nestedValue]) => {\n const newKey = prefix ? `${prefix}.${key}` : key;\n\n if (isRecord(nestedValue)) {\n Object.assign(result, flatten(nestedValue, newKey));\n return;\n }\n\n result[newKey] = nestedValue;\n });\n\n return result;\n};\n\n/**\n * Convert a dot-notation object into a nested object.\n *\n * Unsafe path segments are ignored to prevent prototype pollution.\n *\n * @param {TRecord} value - Dot-notation source object.\n * @returns {TRecord} Nested object.\n * @example\n * unflatten({ \"user.name\": \"John\" }) // { user: { name: \"John\" } }\n */\nexport const unflatten = (value: TRecord): TRecord => {\n const result: TRecord = {};\n\n Object.entries(value).forEach(([key, nestedValue]) => {\n setNestedValue(result, key, nestedValue);\n });\n\n return result;\n};\n","/**\n * String utilities for common text manipulation tasks.\n */\n\nimport { TUSStateCode } from \"@/types\";\n\nconst wordBoundaryRegex = /([a-z0-9])([A-Z])/g;\nconst acronymBoundaryRegex = /([A-Z]+)([A-Z][a-z])/g;\n\nconst getWords = (value: string): string[] => {\n return value\n .trim()\n .replace(acronymBoundaryRegex, \"$1 $2\")\n .replace(wordBoundaryRegex, \"$1 $2\")\n .replace(/[^a-zA-Z0-9]+/g, \" \")\n .trim()\n .split(/\\s+/)\n .filter(Boolean);\n};\n\nconst capitalizeWord = (value: string): string => {\n if (!value) {\n return \"\";\n }\n\n return value.charAt(0).toUpperCase() + value.slice(1).toLowerCase();\n};\n\n/**\n * Adds commas to a number for thousands separators.\n *\n * @example formatNumber(1000) => '1,000'\n * @example formatNumber('1234567') => '1,234,567'\n * @example formatNumber(1234567.89) => '1,234,567.89'\n */\nexport const formatNumber = (value: string | number): string => {\n const str = String(value);\n const [integer, decimal] = str.split(\".\");\n const formattedInteger = integer.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n\n return decimal !== undefined\n ? `${formattedInteger}.${decimal}`\n : formattedInteger;\n};\n\nexport const normalCase = (str?: string): string => {\n if (!str) {\n return \"\";\n }\n\n return getWords(str).map(capitalizeWord).join(\" \");\n};\n\nexport const sentenceCase = (str?: string): string => {\n if (!str) {\n return \"\";\n }\n\n const normalizedValue = str.trim().toLowerCase();\n\n return normalizedValue.charAt(0).toUpperCase() + normalizedValue.slice(1);\n};\n\nexport const upperCase = (str?: string): string => {\n return str?.toUpperCase() ?? \"\";\n};\n\nexport const lowerCase = (str?: string): string => {\n return str?.toLowerCase() ?? \"\";\n};\n\n/**\n * Converts a string to camelCase.\n *\n * @example toCamelCase('hello-world') => 'helloWorld'\n * @example toCamelCase('hello_world') => 'helloWorld'\n */\nexport const toCamelCase = (str: string): string => {\n const words = getWords(str);\n\n if (words.length === 0) {\n return \"\";\n }\n\n const [firstWord, ...remainingWords] = words;\n\n return [firstWord.toLowerCase(), ...remainingWords.map(capitalizeWord)].join(\n \"\",\n );\n};\n\nexport const camelCase = toCamelCase;\n\n/**\n * Converts a string to kebab-case.\n *\n * @example toKebabCase('helloWorld') => 'hello-world'\n * @example toKebabCase('Hello_World') => 'hello-world'\n */\nexport const toKebabCase = (str: string): string => {\n return getWords(str)\n .map((word) => word.toLowerCase())\n .join(\"-\");\n};\n\nexport const kebabCase = toKebabCase;\n\n/**\n * Converts a string to snake_case.\n *\n * @example toSnakeCase('helloWorld') => 'hello_world'\n * @example toSnakeCase('hello-world') => 'hello_world'\n */\nexport const toSnakeCase = (str: string): string => {\n return getWords(str)\n .map((word) => word.toLowerCase())\n .join(\"_\");\n};\n\nexport const snakeCase = toSnakeCase;\n\n/**\n * Converts a string to PascalCase.\n *\n * @example toPascalCase('hello-world') => 'HelloWorld'\n * @example toPascalCase('hello_world') => 'HelloWorld'\n */\nexport const toPascalCase = (str: string): string => {\n return getWords(str).map(capitalizeWord).join(\"\");\n};\n\nexport const pascalCase = toPascalCase;\n\nexport const snakeCaseToSpaces = (str: string): string => {\n return str.replace(/_+/g, \" \").trim();\n};\n\nexport const kebabToSpaces = (str: string): string => {\n return str.replace(/-+/g, \" \").trim();\n};\n\n/**\n * Capitalizes the first character of a string.\n *\n * @example capitalize('hello world') => 'Hello world'\n */\nexport const capitalize = (str: string): string => {\n if (!str) {\n return \"\";\n }\n\n return str.charAt(0).toUpperCase() + str.slice(1);\n};\n\n/**\n * Capitalizes the first letter of each word.\n *\n * @example titleCase('hello world') => 'Hello World'\n */\nexport const titleCase = (str: string): string => {\n return str.replace(/\\b\\w/g, (char) => char.toUpperCase());\n};\n\n/**\n * Truncates a string to a specified length and adds ellipsis.\n *\n * @example truncate('hello world', 5) => 'he...'\n */\nexport const truncate = (\n str: string,\n length: number,\n suffix = \"...\",\n): string => {\n if (length <= 0) {\n return \"\";\n }\n\n if (str.length <= length) {\n return str;\n }\n\n const maxLength = Math.max(0, length - suffix.length);\n\n if (maxLength === 0) {\n return suffix.length > length ? \"\" : suffix;\n }\n\n return str.slice(0, maxLength) + suffix;\n};\n\n/**\n * Removes all whitespace from a string.\n *\n * @example removeWhitespace('hello world') => 'helloworld'\n */\nexport const removeWhitespace = (str: string): string => {\n return str.replace(/\\s+/g, \"\");\n};\n\n/**\n * Removes all non-alphanumeric characters.\n *\n * @example removeSpecialChars('hello@world#123') => 'helloworld123'\n */\nexport const removeSpecialChars = (str: string): string => {\n return str.replace(/[^a-zA-Z0-9]/g, \"\");\n};\n\n/**\n * Generates a URL-friendly slug from a string.\n *\n * @example slug('Hello World 2024!') => 'hello-world-2024'\n */\nexport const slug = (str: string): string => {\n return str\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, \"\")\n .replace(/[\\s_]+/g, \"-\")\n .replace(/-+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n};\n\n/**\n * Validates if a string is a valid email.\n *\n * @example isEmail('user@example.com') => true\n */\nexport const isEmail = (str: string): boolean => {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(str.trim());\n};\n\n/**\n * Validates if a string is a valid URL.\n *\n * @example isUrl('https://example.com') => true\n */\nexport const isUrl = (str: string): boolean => {\n try {\n const parsedUrl = new URL(str);\n return parsedUrl.protocol === \"http:\" || parsedUrl.protocol === \"https:\";\n } catch {\n return false;\n }\n};\n\n/**\n * Validates if a string contains only numbers.\n *\n * @example isNumeric('12345') => true\n * @example isNumeric('123abc') => false\n */\nexport const isNumeric = (str: string): boolean => {\n return /^\\d+$/.test(str);\n};\n\n/**\n * Checks if a string is empty or contains only whitespace.\n *\n * @example isEmpty(' ') => true\n * @example isEmpty('hello') => false\n */\nexport const isEmpty = (str: string): boolean => {\n return str.trim().length === 0;\n};\n\n/**\n * Reverses a string.\n *\n * @example reverse('hello') => 'olleh'\n */\nexport const reverse = (str: string): string => {\n return Array.from(str).reverse().join(\"\");\n};\n\n/**\n * Repeats a string a specified number of times.\n *\n * @example repeat('ab', 3) => 'ababab'\n */\nexport const repeat = (str: string, times: number): string => {\n return str.repeat(Math.max(0, Math.floor(times)));\n};\n\n/**\n * Pads a string to a specified length.\n *\n * @example padStart('5', 3, '0') => '005'\n * @example padEnd('5', 3, '0') => '500'\n */\nexport const padStart = (\n str: string,\n length: number,\n padChar = \" \",\n): string => {\n return str.padStart(length, padChar);\n};\n\nexport const padEnd = (str: string, length: number, padChar = \" \"): string => {\n return str.padEnd(length, padChar);\n};\n\n/**\n * Encodes a string to Base64.\n *\n * @example toBase64('hello') => 'aGVsbG8='\n */\nexport const toBase64 = (str: string): string => {\n return Buffer.from(str, \"utf-8\").toString(\"base64\");\n};\n\n/**\n * Decodes a Base64 string.\n *\n * @example fromBase64('aGVsbG8=') => 'hello'\n */\nexport const fromBase64 = (str: string): string => {\n return Buffer.from(str, \"base64\").toString(\"utf-8\");\n};\n\n/**\n * Counts the number of words in a string.\n *\n * @example wordCount('hello world test') => 3\n */\nexport const wordCount = (str: string): number => {\n const trimmedValue = str.trim();\n\n if (!trimmedValue) {\n return 0;\n }\n\n return trimmedValue.split(/\\s+/).length;\n};\n\n/**\n * Counts the number of characters, excluding whitespace.\n *\n * @example charCount('hello world') => 10\n */\nexport const charCount = (str: string): number => {\n return str.replace(/\\s/g, \"\").length;\n};\n\n/**\n * Repeats a character a specified number of times.\n *\n * @example repeatChar('*', 5) => '*****'\n */\nexport const repeatChar = (char: string, times: number): string => {\n return char.repeat(Math.max(0, Math.floor(times)));\n};\n\n/**\n * Extracts numbers from a string.\n *\n * @example extractNumbers('abc123def456') => '123456'\n */\nexport const extractNumbers = (str: string): string => {\n return str.replace(/\\D/g, \"\");\n};\n\n/**\n * Removes duplicate consecutive characters.\n *\n * @example removeDuplicates('aabbccdd') => 'abcd'\n */\nexport const removeDuplicates = (str: string): string => {\n return str.replace(/(.)\\1+/g, \"$1\");\n};\n\n/**\n * Checks if a string is a palindrome.\n *\n * @example isPalindrome('racecar') => true\n * @example isPalindrome('hello') => false\n */\nexport const isPalindrome = (str: string): boolean => {\n const cleaned = str.toLowerCase().replace(/[^a-z0-9]/g, \"\");\n return cleaned === cleaned.split(\"\").reverse().join(\"\");\n};\n\n/**\n * Finds the longest word in a string.\n *\n * @example longestWord('the quick brown fox') => 'quick'\n */\nexport const longestWord = (str: string): string => {\n const words = str.trim().split(/\\s+/).filter(Boolean);\n\n return words.reduce(\n (longest, word) => (word.length > longest.length ? word : longest),\n \"\",\n );\n};\n\n/**\n * Pluralizes common English words using a simple ruleset.\n *\n * @example pluralize('cat') => 'cats'\n * @example pluralize('box') => 'boxes'\n */\nexport const pluralize = (word: string): string => {\n const exceptions: Record<string, string> = {\n child: \"children\",\n person: \"people\",\n man: \"men\",\n woman: \"women\",\n tooth: \"teeth\",\n foot: \"feet\",\n mouse: \"mice\",\n };\n const lowercaseWord = word.toLowerCase();\n const exception = exceptions[lowercaseWord];\n\n if (exception) {\n return word.charAt(0) === word.charAt(0).toUpperCase()\n ? capitalize(exception)\n : exception;\n }\n\n if (/[^aeiou]y$/i.test(word)) {\n return `${word.slice(0, -1)}ies`;\n }\n\n if (/(s|x|z|ch|sh)$/i.test(word)) {\n return `${word}es`;\n }\n\n if (/fe$/i.test(word)) {\n return `${word.slice(0, -2)}ves`;\n }\n\n if (/f$/i.test(word)) {\n return `${word.slice(0, -1)}ves`;\n }\n\n return `${word}s`;\n};\n\n/**\n * Highlights a substring within a string by wrapping it with markers.\n *\n * @example highlight('hello world', 'world', '**') => 'hello **world**'\n */\nexport const highlight = (\n str: string,\n substring: string,\n marker = \"**\",\n): string => {\n if (!substring) {\n return str;\n }\n\n return str.replace(\n new RegExp(`(${escapeRegex(substring)})`, \"gi\"),\n `${marker}$1${marker}`,\n );\n};\n\n/**\n * Converts a string to a regex-safe string.\n *\n * @example escapeRegex('a.b*c') => 'a\\\\.b\\\\*c'\n */\nexport const escapeRegex = (str: string): string => {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n};\n\n/**\n * Finds similarity between two strings using Levenshtein distance.\n * Returns a value between 0 and 1, where 1 means identical.\n *\n * @example stringSimilarity('hello', 'hallo') => 0.8\n */\nexport const stringSimilarity = (str1: string, str2: string): number => {\n const s1 = str1.toLowerCase();\n const s2 = str2.toLowerCase();\n const longer = s1.length > s2.length ? s1 : s2;\n const shorter = s1.length > s2.length ? s2 : s1;\n\n if (longer.length === 0) {\n return 1;\n }\n\n const editDistance = getEditDistance(longer, shorter);\n return (longer.length - editDistance) / longer.length;\n};\n\n/**\n * Helper function to calculate edit distance (Levenshtein distance).\n */\nconst getEditDistance = (s1: string, s2: string): number => {\n const costs: number[] = [];\n\n for (let i = 0; i <= s1.length; i += 1) {\n let lastValue = i;\n\n for (let j = 0; j <= s2.length; j += 1) {\n if (i === 0) {\n costs[j] = j;\n } else if (j > 0) {\n let newValue = costs[j - 1];\n\n if (s1.charAt(i - 1) !== s2.charAt(j - 1)) {\n newValue = Math.min(Math.min(newValue, lastValue), costs[j]) + 1;\n }\n\n costs[j - 1] = lastValue;\n lastValue = newValue;\n }\n }\n\n if (i > 0) {\n costs[s2.length] = lastValue;\n }\n }\n\n return costs[s2.length];\n};\n\n/**\n * Strips HTML tags from a string.\n *\n * @example stripHtml('<p>Hello <b>world</b></p>') => 'Hello world'\n */\nexport const stripHtml = (str: string): string => {\n return str.replace(/<[^>]*>/g, \"\");\n};\n\n/**\n * Replaces multiple spaces with a single space.\n *\n * @example normalizeSpaces('hello world') => 'hello world'\n */\nexport const normalizeSpaces = (str: string): string => {\n return str.replace(/\\s+/g, \" \").trim();\n};\n\n/**\n * Converts a string to a number, returning null if not valid.\n *\n * @example toNumber('123') => 123\n * @example toNumber('abc') => null\n */\nexport const toNumber = (str: string): number | null => {\n if (str.trim() === \"\") {\n return null;\n }\n\n const num = Number(str);\n return Number.isNaN(num) ? null : num;\n};\n\n/**\n * Splits a string by multiple delimiters.\n *\n * @example splitMultiple('a,b;c:d', ',', ';', ':') => ['a', 'b', 'c', 'd']\n */\nexport const splitMultiple = (\n str: string,\n ...delimiters: string[]\n): string[] => {\n if (delimiters.length === 0) {\n return [str].filter((part) => part.length > 0);\n }\n\n let result = [str];\n\n delimiters.forEach((delimiter) => {\n if (delimiter !== \"\") {\n result = result.flatMap((part) => part.split(delimiter));\n }\n });\n\n return result.filter((part) => part.length > 0);\n};\n\n/**\n * Checks if a string contains any of the provided substrings.\n *\n * @example containsAny('hello world', 'foo', 'world') => true\n */\nexport const containsAny = (str: string, ...substrings: string[]): boolean => {\n return substrings.some((substring) => str.includes(substring));\n};\n\n/**\n * Checks if a string contains all of the provided substrings.\n *\n * @example containsAll('hello world', 'hello', 'world') => true\n */\nexport const containsAll = (str: string, ...substrings: string[]): boolean => {\n return substrings.every((substring) => str.includes(substring));\n};\n\nexport interface IAddress {\n addressLine1: string;\n addressLine2?: string;\n city: string;\n stateCode: TUSStateCode;\n postalCode: string;\n}\n\nexport const formatAddress = (address: IAddress): string => {\n const parts = [\n address.addressLine1,\n address.addressLine2,\n address.city,\n address.stateCode,\n address.postalCode,\n ].filter(Boolean);\n\n return parts.join(\", \");\n};\n","export * from \"./date\";\nexport * from \"./object\";\nexport {\n camelCase,\n capitalize,\n charCount,\n containsAll,\n containsAny,\n escapeRegex,\n extractNumbers,\n formatAddress,\n fromBase64,\n highlight,\n isEmail,\n isEmpty,\n isNumeric,\n isPalindrome,\n isUrl,\n kebabCase,\n kebabToSpaces,\n longestWord,\n lowerCase,\n normalCase,\n normalizeSpaces,\n padEnd,\n padStart,\n pascalCase,\n pluralize,\n removeDuplicates,\n removeSpecialChars,\n removeWhitespace,\n repeat,\n repeatChar,\n reverse,\n sentenceCase,\n slug,\n snakeCase,\n snakeCaseToSpaces,\n splitMultiple,\n stringSimilarity,\n stripHtml,\n titleCase,\n toBase64,\n toCamelCase,\n toKebabCase,\n toNumber,\n toPascalCase,\n toSnakeCase,\n truncate,\n upperCase,\n wordCount,\n} from \"./string\";\n\nexport type { IAddress } from \"./string\";\n\ntype Success<T> = {\n data: T;\n error: null;\n};\n\ntype Failure<E> = {\n data: null;\n error: E;\n};\n\ntype Result<T, E = unknown> = Success<T> | Failure<E>;\n\nexport const tryCatch = async <T, E = unknown>(\n callback: () => T | Promise<T>,\n): Promise<Result<T, E>> => {\n try {\n const data = await callback();\n\n return {\n data,\n error: null,\n };\n } catch (error) {\n return {\n data: null,\n error: error as E,\n };\n }\n};\n","/**\n * API Response Types\n * Standard response structure for all API endpoints.\n */\n\nimport type { TDateTimeString, TEnvironment, TJsonValue } from \"../base\";\n\nexport const HTTP_METHOD = {\n GET: \"GET\",\n POST: \"POST\",\n PUT: \"PUT\",\n PATCH: \"PATCH\",\n DELETE: \"DELETE\",\n} as const;\n\nexport type THttpMethod = (typeof HTTP_METHOD)[keyof typeof HTTP_METHOD];\n\n/**\n * Error Codes\n * Standardized error codes used across the platform.\n */\nexport const ERROR_CODES = {\n BAD_REQUEST: \"BAD_REQUEST\",\n VALIDATION_ERROR: \"VALIDATION_ERROR\",\n MISSING_FIELDS: \"MISSING_FIELDS\",\n UNAUTHORIZED: \"UNAUTHORIZED\",\n INVALID_TOKEN: \"INVALID_TOKEN\",\n INVALID_CREDENTIALS: \"INVALID_CREDENTIALS\",\n FORBIDDEN: \"FORBIDDEN\",\n NOT_FOUND: \"NOT_FOUND\",\n CONFLICT: \"CONFLICT\",\n ALREADY_EXISTS: \"ALREADY_EXISTS\",\n RATE_LIMIT: \"RATE_LIMIT\",\n RATE_LIMIT_EXCEEDED: \"RATE_LIMIT_EXCEEDED\",\n INTERNAL_ERROR: \"INTERNAL_ERROR\",\n DATABASE_ERROR: \"DATABASE_ERROR\",\n NOT_IMPLEMENTED: \"NOT_IMPLEMENTED\",\n} as const;\n\nexport type TErrorCode = (typeof ERROR_CODES)[keyof typeof ERROR_CODES];\n\n/**\n * HTTP Status Codes\n * Common status codes used in API responses.\n */\nexport const HTTP_STATUS = {\n Ok: 200,\n Created: 201,\n NoContent: 204,\n BadRequest: 400,\n Unauthorized: 401,\n Forbidden: 403,\n NotFound: 404,\n Conflict: 409,\n UnprocessableEntity: 422,\n TooManyRequests: 429,\n InternalError: 500,\n} as const;\n\nexport type THttpStatusCode = (typeof HTTP_STATUS)[keyof typeof HTTP_STATUS];\n\nexport type TApiErrorDetails = TJsonValue;\n\nexport interface IApiError<TDetails = TApiErrorDetails> {\n message: string;\n code?: TErrorCode;\n details?: TDetails;\n}\n\nexport interface IApiMeta {\n timestamp: TDateTimeString;\n version: string;\n environment: TEnvironment;\n requestId?: string;\n}\n\nexport interface IApiSuccessResponse<TData = null> {\n success: true;\n data: TData;\n meta: IApiMeta;\n}\n\nexport interface IApiErrorResponse<TErrorDetails = TApiErrorDetails> {\n success: false;\n error: IApiError<TErrorDetails>;\n meta: IApiMeta;\n}\n\nexport type IApiResponse<TData = null, TErrorDetails = TApiErrorDetails> =\n | IApiSuccessResponse<TData>\n | IApiErrorResponse<TErrorDetails>;\n","export type TValidationIssueType =\n | \"INVALID_BODY\"\n | \"MISSING_FIELD\"\n | \"INVALID_FIELD\"\n | \"UNSUPPORTED_FIELD\";\n\nexport interface IValidationIssue<TFieldName extends string = string> {\n fieldName: TFieldName;\n type: TValidationIssueType;\n}\n\nexport interface IValidationResult<TValue extends object> {\n success: boolean;\n data?: TValue;\n issues: IValidationIssue[];\n}\n\nexport type TMissingValuePolicy = \"Nullish\" | \"BlankString\";\n\nexport interface IValidationField<TValue, TRequired extends boolean> {\n readonly valueType?: TValue;\n required: TRequired;\n missingValuePolicy: TMissingValuePolicy;\n validate: (value: unknown) => boolean;\n}\n\nexport type TValidationFieldMap = Record<\n string,\n IValidationField<unknown, boolean>\n>;\n\ntype TRequiredSchemaKeys<TFields extends TValidationFieldMap> = {\n [TKey in keyof TFields]: TFields[TKey] extends IValidationField<unknown, true>\n ? TKey\n : never;\n}[keyof TFields];\n\ntype TOptionalSchemaKeys<TFields extends TValidationFieldMap> = Exclude<\n keyof TFields,\n TRequiredSchemaKeys<TFields>\n>;\n\ntype TFieldValue<TField> =\n TField extends IValidationField<infer TValue, boolean> ? TValue : never;\n\nexport type TInferValidationFields<TFields extends TValidationFieldMap> = {\n [TKey in TRequiredSchemaKeys<TFields>]: TFieldValue<TFields[TKey]>;\n} & {\n [TKey in TOptionalSchemaKeys<TFields>]?: TFieldValue<TFields[TKey]>;\n};\n\nexport type TInferValidationSchemaInput<TSchema> =\n TSchema extends IRuntimeValidationSchema<infer TFields>\n ? TInferValidationFields<TFields>\n : never;\n\nexport interface IRuntimeValidationSchema<\n TFields extends TValidationFieldMap = TValidationFieldMap,\n> {\n fields: TFields;\n allowedFields: readonly Extract<keyof TFields, string>[];\n requiredFields: readonly Extract<TRequiredSchemaKeys<TFields>, string>[];\n validate: (\n value: unknown,\n options?: IRuntimeValidationOptions,\n ) => IValidationResult<TInferValidationFields<TFields>>;\n}\n\nexport interface IRuntimeValidationOptions {\n rejectUnknownFields?: boolean;\n}\n\nexport const createValidationSchema = <TFields extends TValidationFieldMap>(\n fields: TFields,\n): IRuntimeValidationSchema<TFields> => {\n const allowedFields = Object.keys(fields) as Extract<keyof TFields, string>[];\n const requiredFields = allowedFields.filter((fieldName) => {\n return fields[fieldName].required;\n }) as Extract<TRequiredSchemaKeys<TFields>, string>[];\n\n return {\n fields,\n allowedFields,\n requiredFields,\n validate: (value, options = {}) => {\n if (!isRecord(value)) {\n return {\n success: false,\n issues: [\n {\n fieldName: \"body\",\n type: \"INVALID_BODY\",\n },\n ],\n };\n }\n\n const issues = getValidationIssues(fields, value, options);\n\n if (issues.length > 0) {\n return {\n success: false,\n issues,\n };\n }\n\n return {\n success: true,\n data: value as TInferValidationFields<TFields>,\n issues: [],\n };\n },\n };\n};\n\nexport const requiredStringField = (\n missingValuePolicy: TMissingValuePolicy = \"Nullish\",\n): IValidationField<string, true> => ({\n required: true,\n missingValuePolicy,\n validate: isNonEmptyString,\n});\n\nexport const optionalStringField = (): IValidationField<string, false> => ({\n required: false,\n missingValuePolicy: \"Nullish\",\n validate: isNonEmptyString,\n});\n\nexport const optionalNullableStringField = (): IValidationField<\n string | null,\n false\n> => ({\n required: false,\n missingValuePolicy: \"Nullish\",\n validate: (value): value is string | null => {\n return value === null || isNonEmptyString(value);\n },\n});\n\nexport const requiredEmailField = (\n missingValuePolicy: TMissingValuePolicy = \"BlankString\",\n): IValidationField<string, true> => ({\n required: true,\n missingValuePolicy,\n validate: isEmail,\n});\n\nexport const requiredUuidField = (\n missingValuePolicy: TMissingValuePolicy = \"Nullish\",\n): IValidationField<string, true> => ({\n required: true,\n missingValuePolicy,\n validate: isUuid,\n});\n\nexport const optionalNullableNonNegativeIntegerField = (): IValidationField<\n number | null,\n false\n> => ({\n required: false,\n missingValuePolicy: \"Nullish\",\n validate: (value): value is number | null => {\n return value === null || (Number.isInteger(value) && Number(value) >= 0);\n },\n});\n\nexport const optionalRecordField = (): IValidationField<\n Record<string, unknown>,\n false\n> => ({\n required: false,\n missingValuePolicy: \"Nullish\",\n validate: isRecord,\n});\n\nexport const requiredEnumField = <TValue extends string>(\n allowedValues: readonly TValue[],\n missingValuePolicy: TMissingValuePolicy = \"Nullish\",\n): IValidationField<TValue, true> => ({\n required: true,\n missingValuePolicy,\n validate: (value): value is TValue => {\n return isAllowedStringValue(value, allowedValues);\n },\n});\n\nexport const optionalEnumField = <TValue extends string>(\n allowedValues: readonly TValue[],\n): IValidationField<TValue, false> => ({\n required: false,\n missingValuePolicy: \"Nullish\",\n validate: (value): value is TValue => {\n return isAllowedStringValue(value, allowedValues);\n },\n});\n\nexport const optionalNullableEnumField = <TValue extends string>(\n allowedValues: readonly TValue[],\n): IValidationField<TValue | null, false> => ({\n required: false,\n missingValuePolicy: \"Nullish\",\n validate: (value): value is TValue | null => {\n return value === null || isAllowedStringValue(value, allowedValues);\n },\n});\n\nconst getValidationIssues = <TFields extends TValidationFieldMap>(\n fields: TFields,\n value: Record<string, unknown>,\n options: IRuntimeValidationOptions,\n): IValidationIssue[] => {\n const allowedFieldSet = new Set(Object.keys(fields));\n const issues: IValidationIssue[] = [];\n\n Object.entries(fields).forEach(([fieldName, field]) => {\n const fieldValue = value[fieldName];\n\n if (\n field.required &&\n isMissingValue(fieldValue, field.missingValuePolicy)\n ) {\n issues.push({\n fieldName,\n type: \"MISSING_FIELD\",\n });\n return;\n }\n\n if (fieldValue === undefined) {\n return;\n }\n\n if (!field.validate(fieldValue)) {\n issues.push({\n fieldName,\n type: \"INVALID_FIELD\",\n });\n }\n });\n\n if (options.rejectUnknownFields === true) {\n Object.keys(value).forEach((fieldName) => {\n if (!allowedFieldSet.has(fieldName)) {\n issues.push({\n fieldName,\n type: \"UNSUPPORTED_FIELD\",\n });\n }\n });\n }\n\n return issues;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n};\n\nconst isMissingValue = (\n value: unknown,\n missingValuePolicy: TMissingValuePolicy,\n): boolean => {\n if (value === undefined || value === null) {\n return true;\n }\n\n return (\n missingValuePolicy === \"BlankString\" &&\n typeof value === \"string\" &&\n value.trim().length === 0\n );\n};\n\nconst isNonEmptyString = (value: unknown): value is string => {\n return typeof value === \"string\" && value.trim().length > 0;\n};\n\nconst isAllowedStringValue = <TValue extends string>(\n value: unknown,\n allowedValues: readonly TValue[],\n): value is TValue => {\n return typeof value === \"string\" && allowedValues.includes(value as TValue);\n};\n\nconst isEmail = (value: unknown): value is string => {\n if (!isNonEmptyString(value)) {\n return false;\n }\n\n return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value.trim());\n};\n\nconst isUuid = (value: unknown): value is string => {\n if (!isNonEmptyString(value)) {\n return false;\n }\n\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(\n value,\n );\n};\n","import type { TRecordValue } from \"../base\";\n\nexport const ACCOUNT_TYPE = {\n TURNDOWN_ADMIN: \"TURNDOWN_ADMIN\",\n ACCOUNT_ADMIN: \"ACCOUNT_ADMIN\",\n MANAGER: \"MANAGER\",\n STAFF: \"STAFF\",\n GUEST: \"GUEST\",\n} as const;\n\nexport type TAccountType = TRecordValue<typeof ACCOUNT_TYPE>;\n\nexport const ACCOUNT_STATUS = {\n ACTIVE: \"ACTIVE\",\n INACTIVE: \"INACTIVE\",\n SUSPENDED: \"SUSPENDED\",\n PENDING: \"PENDING\",\n} as const;\n\nexport type TAccountStatus = TRecordValue<typeof ACCOUNT_STATUS>;\n\nexport const LANGUAGE = {\n ENGLISH: \"ENGLISH\",\n FRENCH: \"FRENCH\",\n SPANISH: \"SPANISH\",\n GERMAN: \"GERMAN\",\n} as const;\n\nexport type TLanguage = TRecordValue<typeof LANGUAGE>;\n","import {\n createValidationSchema,\n optionalRecordField,\n optionalStringField,\n requiredEmailField,\n requiredEnumField,\n requiredStringField,\n type TInferValidationSchemaInput,\n} from \"../validation\";\nimport type { IAuthTokenResponse } from \"./index\";\nimport type { IEmptyRouteRequest, TDateTimeString } from \"../base\";\nimport { ACCOUNT_TYPE, type TAccountType } from \"../user/constants\";\nimport type { IDeviceInfo } from \"../user\";\nimport type { IGetUserResponse } from \"../user/routes\";\n\n// Route Params\nexport interface IAuthSessionIdParams {\n sessionId: string;\n}\n\nexport interface IAuthInvitationTokenParams {\n token: string;\n}\n\nexport interface IAuthInvitationIdParams {\n invitationId: string;\n}\n\n// Shared Responses\nexport interface IAuthMessageResponse {\n message: string;\n}\n\nexport interface IAuthRefreshTokenResponse extends IAuthTokenResponse {}\n\nexport interface IAuthInvitationBaseResponse {\n id: string;\n companyId: string;\n companyName: string;\n role: TAccountType;\n invitedBy: string;\n invitedByName: string;\n expiresAt: TDateTimeString;\n}\n\nconst AccountTypeValues = Object.values(ACCOUNT_TYPE);\n\n// Core Authentication\nexport const RegisterRequestSchema = createValidationSchema({\n email: requiredEmailField(),\n password: requiredStringField(\"BlankString\"),\n firstName: requiredStringField(\"BlankString\"),\n lastName: optionalStringField(),\n accountType: requiredEnumField(AccountTypeValues, \"BlankString\"),\n deviceInfo: optionalRecordField(),\n});\n\nexport type IRegisterRequest = Omit<\n TInferValidationSchemaInput<typeof RegisterRequestSchema>,\n \"deviceInfo\"\n> & {\n deviceInfo?: IDeviceInfo;\n};\n\nexport interface IRegisterResponse extends IAuthTokenResponse {}\n\nexport const LoginRequestSchema = createValidationSchema({\n email: requiredEmailField(),\n password: requiredStringField(\"BlankString\"),\n deviceInfo: optionalRecordField(),\n});\n\nexport type ILoginRequest = Omit<\n TInferValidationSchemaInput<typeof LoginRequestSchema>,\n \"deviceInfo\"\n> & {\n deviceInfo?: IDeviceInfo;\n};\n\nexport interface ILoginResponse extends IAuthTokenResponse {\n passwordResetRequired: boolean;\n}\n\nexport const RefreshSessionRequestSchema = createValidationSchema({\n refreshToken: requiredStringField(\"BlankString\"),\n deviceInfo: optionalRecordField(),\n});\n\nexport type IRefreshSessionRequest = Omit<\n TInferValidationSchemaInput<typeof RefreshSessionRequestSchema>,\n \"deviceInfo\"\n> & {\n deviceInfo?: IDeviceInfo;\n};\n\nexport interface IRefreshSessionResponse extends IAuthRefreshTokenResponse {}\n\nexport const LogoutRequestSchema = createValidationSchema({\n refreshToken: optionalStringField(),\n});\n\nexport type ILogoutRequest = TInferValidationSchemaInput<\n typeof LogoutRequestSchema\n>;\n\nexport interface ILogoutResponse extends IAuthMessageResponse {}\n\nexport interface ILogoutAllRequest {\n userId: string;\n}\n\nexport interface ILogoutAllResponse extends IAuthMessageResponse {}\n\nexport interface IGetMeRequest {\n userId: string;\n}\n\nexport interface IGetMeResponse extends IGetUserResponse {}\n\n// Session Management\nexport type IGetSessionsRequest = IEmptyRouteRequest;\n\nexport interface IGetSessionsResponse {\n id: string;\n deviceInfo: string;\n createdAt: TDateTimeString;\n lastUsedAt: TDateTimeString;\n}\n\nexport interface IRevokeSessionRequest extends IAuthSessionIdParams {}\n\nexport interface IRevokeSessionResponse extends IAuthMessageResponse {}\n\n// Password Management\nexport const ChangePasswordRequestSchema = createValidationSchema({\n currentPassword: requiredStringField(\"BlankString\"),\n newPassword: requiredStringField(\"BlankString\"),\n});\n\nexport type IChangePasswordRequest = TInferValidationSchemaInput<\n typeof ChangePasswordRequestSchema\n>;\n\nexport interface IChangePasswordResponse extends IGetUserResponse {}\n\nexport const ForgotPasswordRequestSchema = createValidationSchema({\n email: requiredEmailField(),\n});\n\nexport type IForgotPasswordRequest = TInferValidationSchemaInput<\n typeof ForgotPasswordRequestSchema\n>;\n\nexport interface IForgotPasswordResponse extends IAuthMessageResponse {}\n\nexport type IGetLoginHistoryRequest = IEmptyRouteRequest;\n\nexport interface IGetLoginHistoryResponse {\n id: string;\n email: string;\n ipAddress: string;\n userAgent: string;\n success: boolean;\n failureReason: string | null;\n createdAt: TDateTimeString;\n}\n\nexport interface IGetLoginHistoryListResponse {\n history: IGetLoginHistoryResponse[];\n length: number;\n}\n\n// Invitations\nexport interface IValidateInvitationRequest extends IAuthInvitationTokenParams {}\n\nexport interface IValidateInvitationResponse extends IAuthInvitationBaseResponse {\n email: string;\n userExists: boolean;\n}\n\nexport const RegisterWithInvitationRequestSchema = createValidationSchema({\n token: requiredStringField(\"BlankString\"),\n password: requiredStringField(\"BlankString\"),\n firstName: requiredStringField(\"BlankString\"),\n lastName: optionalStringField(),\n deviceInfo: optionalRecordField(),\n});\n\nexport type IRegisterWithInvitationRequest = Omit<\n TInferValidationSchemaInput<typeof RegisterWithInvitationRequestSchema>,\n \"deviceInfo\"\n> & {\n deviceInfo?: IDeviceInfo;\n};\n\nexport interface IRegisterWithInvitationResponse extends IAuthTokenResponse {}\n\nexport const AcceptInvitationRequestSchema = createValidationSchema({\n userId: optionalStringField(),\n token: requiredStringField(\"BlankString\"),\n});\n\nexport type IAcceptInvitationRequest = TInferValidationSchemaInput<\n typeof AcceptInvitationRequestSchema\n>;\n\nexport interface IAcceptInvitationResponse {\n companyId: string;\n companyName: string;\n role: TAccountType;\n}\n\nexport interface IAcceptInvitationRouteResponse {\n invite: IAcceptInvitationResponse;\n message: string;\n}\n\nexport type IGetPendingInvitationsRequest = IEmptyRouteRequest;\n\nexport interface IGetPendingInvitationsResponse extends IAuthInvitationBaseResponse {\n token: string;\n createdAt: TDateTimeString;\n}\n\nexport interface IGetPendingInvitationsListResponse {\n invitations: IGetPendingInvitationsResponse[];\n length: number;\n}\n\nexport interface IRevokeInvitationRequest extends IAuthInvitationIdParams {\n revokedBy?: string;\n}\n\nexport interface IRevokeInvitationResponse extends IAuthMessageResponse {}\n","export * from \"./routes\";\n\nimport type { TDateTimeString, TServiceType } from \"../base\";\nimport type { IUserSafe } from \"../user\";\n\nexport const AUTH_STATUS = {\n Initializing: \"Initializing\",\n Unauthenticated: \"Unauthenticated\",\n Authenticated: \"Authenticated\",\n Refreshing: \"Refreshing\",\n SessionExpired: \"SessionExpired\",\n} as const;\n\nexport type TAuthStatus = (typeof AUTH_STATUS)[keyof typeof AUTH_STATUS];\n\nexport interface ITokenPayload {\n userId: string;\n email: string;\n name: string;\n}\n\nexport interface IRefreshTokenData {\n token: string;\n tokenHash: string;\n tokenFamily: string;\n expiresAt: TDateTimeString;\n}\n\nexport interface IAuthTokenBundle {\n accessToken: string;\n refreshToken: string;\n expiresAt: TDateTimeString | null;\n}\n\nexport interface IStoredAuthSession {\n accessToken: string | null;\n refreshToken: string | null;\n expiresAt: TDateTimeString | null;\n}\n\nexport interface IAuthTokenResponse extends IAuthTokenBundle {\n user: IUserSafe | null;\n companyId: string | null;\n}\n\nexport interface IAuthSession {\n user: IUserSafe | null;\n accessToken: string | null;\n expiresAt: TDateTimeString | null;\n}\n\nexport interface ISetAuthSessionParams extends IAuthTokenBundle {\n user: IUserSafe | null;\n}\n\nexport interface ILoginCredentials {\n email: string;\n password: string;\n rememberMe: boolean;\n}\n\nexport interface IRegisterCredentials {\n businessType: TServiceType[];\n firstName: string;\n lastName: string;\n email: string;\n password: string;\n}\n\nexport interface IPasswordValidationRules {\n minLength: number;\n requireUppercase: boolean;\n requireLowercase: boolean;\n requireNumbers: boolean;\n requireSpecialChars: boolean;\n}\n\nexport interface IPasswordValidationResult {\n valid: boolean;\n errors: string[];\n}\n\nexport interface IEmailValidationResult {\n valid: boolean;\n error?: string;\n}\n\nexport interface IRateLimitStatus {\n isLimited: boolean;\n attempts: number;\n maxAttempts: number;\n resetTime: TDateTimeString | null;\n}\n","/**\n * Pagination metadata for a paginated response.\n */\nexport interface IPagingResult {\n hasNextPage: boolean;\n totalPages: number;\n totalRecords: number;\n}\n\n/**\n * Generic wrapper for paginated data.\n */\nexport interface IDataWithPagingResult<TData> {\n data: TData;\n pagination: IPagingResult;\n}\n\nexport const SortDirection = {\n Asc: \"Asc\",\n Desc: \"Desc\",\n} as const;\n\nexport type TSortDirection = (typeof SortDirection)[keyof typeof SortDirection];\n\n/**\n * Sorting condition for query results.\n */\nexport interface ISortCondition {\n name: string;\n direction: TSortDirection;\n}\n\nexport const FilterCondition = {\n Equal: \"=\",\n GreaterThan: \">\",\n LessThan: \"<\",\n NotEqual: \"!=\",\n Like: \"LIKE\",\n In: \"IN\",\n GreaterThanOrEqual: \">=\",\n LessThanOrEqual: \"<=\",\n} as const;\n\nexport type TFilterCondition =\n (typeof FilterCondition)[keyof typeof FilterCondition];\n\nexport interface IFilterConditionBase {\n name: string;\n condition: TFilterCondition;\n useAnd?: boolean;\n}\n\nexport interface IStringFilterCondition extends IFilterConditionBase {\n valueString: string;\n valueNumber?: never;\n valueBoolean?: never;\n}\n\nexport interface INumberFilterCondition extends IFilterConditionBase {\n valueString?: never;\n valueNumber: number;\n valueBoolean?: never;\n}\n\nexport interface IBooleanFilterCondition extends IFilterConditionBase {\n valueString?: never;\n valueNumber?: never;\n valueBoolean: boolean;\n}\n\n/**\n * Filter condition for querying data.\n *\n * Exactly one value field should be provided.\n */\nexport type TFilterConditionValue =\n | IStringFilterCondition\n | INumberFilterCondition\n | IBooleanFilterCondition;\n\n/**\n * Kept as an exported alias to preserve the existing public API name.\n */\nexport type IFilterCondition = TFilterConditionValue;\n\n/**\n * Request shape for paginated data with optional sorting and filtering.\n */\nexport interface IPaginationRequest {\n page: number;\n size: number;\n sort?: ISortCondition[];\n filters?: IFilterCondition[];\n}\n\nexport interface IPagingObject {\n pagination: IPaginationRequest;\n}\n\nexport const createPagingObject = (\n page: number,\n size: number,\n sort?: ISortCondition[],\n filters?: IFilterCondition[],\n): IPagingObject => ({\n pagination: {\n page,\n size,\n sort,\n filters,\n },\n});\n","export type TJsonPrimitive = string | number | boolean | null;\n\nexport type TJsonObject = {\n [key: string]: TJsonValue;\n};\n\nexport type TJsonValue = TJsonPrimitive | TJsonValue[] | TJsonObject;\n\nexport type TUnknownRecord = Record<string, unknown>;\n\n/**\n * Serialized ISO-8601 date/time value returned by API JSON contracts.\n */\nexport type TDateTimeString = string;\n\nexport type TurndownObject<TObject extends object = TUnknownRecord> = TObject;\n\nexport type TEmptyObject = Record<string, never>;\n\nexport type IEmptyRouteRequest = TEmptyObject;\n\nexport type IEmptyRouteParams = TEmptyObject;\n\nexport const ENVIRONMENT = {\n Prod: \"Prod\",\n Dev: \"Dev\",\n Local: \"Local\",\n Test: \"Test\",\n} as const;\n\nexport type TEnvironment = (typeof ENVIRONMENT)[keyof typeof ENVIRONMENT];\n\nexport interface IMessageResponse {\n message: string;\n}\n\nexport interface ISuccessResponse {\n success: boolean;\n}\n\nexport interface ICountResponse {\n count: number;\n}\n\nexport interface IMetaData {\n createdAt: TDateTimeString;\n updatedAt: TDateTimeString;\n deletedAt: TDateTimeString | null;\n}\n\nexport type TRecordValue<TRecord extends object> = TRecord[keyof TRecord];\n\nexport type TRecordKeys<TRecord extends object> = keyof TRecord;\n\nexport interface IVersion {\n major: number;\n minor: number;\n patch: number;\n}\n\nexport type TVersionInput = string | IVersion;\n\nexport interface ISelectOption<TValue extends string = string> {\n label: string;\n value: TValue;\n}\n\nexport const MODE = {\n Create: \"Create\",\n Edit: \"Edit\",\n Delete: \"Delete\",\n Details: \"Details\",\n} as const;\n\nexport type TMode = TRecordValue<typeof MODE> | null;\n\nexport const IMAGE_ENTITY = {\n USER_PROFILE: \"USER_PROFILE\",\n PROPERTY: \"PROPERTY\",\n COMPANY: \"COMPANY\",\n CHECKLIST_ITEM: \"CHECKLIST_ITEM\",\n PROPERTY_ROOM: \"PROPERTY_ROOM\",\n MAINTENANCE_TICKET: \"MAINTENANCE_TICKET\",\n WORK_REPORT: \"WORK_REPORT\",\n CLEANING_REPORT: \"CLEANING_REPORT\",\n TURNDOWN_DEFAULT: \"TURNDOWN_DEFAULT\",\n} as const;\n\nexport type TImageEntityType = TRecordValue<typeof IMAGE_ENTITY>;\n\nexport type TUSStateCode = TRecordKeys<typeof US_JURISDICTIONS>;\n\nexport const US_JURISDICTIONS = {\n // 50 States\n AL: \"Alabama\",\n AK: \"Alaska\",\n AZ: \"Arizona\",\n AR: \"Arkansas\",\n CA: \"California\",\n CO: \"Colorado\",\n CT: \"Connecticut\",\n DE: \"Delaware\",\n FL: \"Florida\",\n GA: \"Georgia\",\n HI: \"Hawaii\",\n ID: \"Idaho\",\n IL: \"Illinois\",\n IN: \"Indiana\",\n IA: \"Iowa\",\n KS: \"Kansas\",\n KY: \"Kentucky\",\n LA: \"Louisiana\",\n ME: \"Maine\",\n MD: \"Maryland\",\n MA: \"Massachusetts\",\n MI: \"Michigan\",\n MN: \"Minnesota\",\n MS: \"Mississippi\",\n MO: \"Missouri\",\n MT: \"Montana\",\n NE: \"Nebraska\",\n NV: \"Nevada\",\n NH: \"New Hampshire\",\n NJ: \"New Jersey\",\n NM: \"New Mexico\",\n NY: \"New York\",\n NC: \"North Carolina\",\n ND: \"North Dakota\",\n OH: \"Ohio\",\n OK: \"Oklahoma\",\n OR: \"Oregon\",\n PA: \"Pennsylvania\",\n RI: \"Rhode Island\",\n SC: \"South Carolina\",\n SD: \"South Dakota\",\n TN: \"Tennessee\",\n TX: \"Texas\",\n UT: \"Utah\",\n VT: \"Vermont\",\n VA: \"Virginia\",\n WA: \"Washington\",\n WV: \"West Virginia\",\n WI: \"Wisconsin\",\n WY: \"Wyoming\",\n\n // Territories\n DC: \"District of Columbia\",\n PR: \"Puerto Rico\",\n GU: \"Guam\",\n VI: \"United States Virgin Islands\",\n AS: \"American Samoa\",\n MP: \"Northern Mariana Islands\",\n} as const;\n\nexport type TUSJurisdiction = TRecordValue<typeof US_JURISDICTIONS>;\n\nexport const STATUS = {\n PENDING: \"PENDING\",\n IN_PROGRESS: \"IN_PROGRESS\",\n COMPLETED: \"COMPLETED\",\n OVERDUE: \"OVERDUE\",\n ACTIVE: \"ACTIVE\",\n INACTIVE: \"INACTIVE\",\n} as const;\n\nexport type TStatus = TRecordValue<typeof STATUS>;\n\nexport const SEVERITY = {\n LOW: \"LOW\",\n MEDIUM: \"MEDIUM\",\n HIGH: \"HIGH\",\n} as const;\n\nexport type TSeverity = TRecordValue<typeof SEVERITY>;\n\nexport const SERVICE_TYPES = {\n PROPERTY: \"PROPERTY\",\n CLEANING: \"CLEANING\",\n MAINTENANCE: \"MAINTENANCE\",\n INSPECTION: \"INSPECTION\",\n OTHER: \"OTHER\",\n} as const;\n\nexport type TServiceType = TRecordValue<typeof SERVICE_TYPES>;\n\nexport const MONTHS = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n] as const;\n\nexport type TMonths = (typeof MONTHS)[number];\n\nexport const WEEK_DAY = {\n Sunday: \"Sunday\",\n Monday: \"Monday\",\n Tuesday: \"Tuesday\",\n Wednesday: \"Wednesday\",\n Thursday: \"Thursday\",\n Friday: \"Friday\",\n Saturday: \"Saturday\",\n} as const;\n\nexport type TWeekDay = TRecordValue<typeof WEEK_DAY>;\n\nexport const WEEK_DAY_SHORT_LABEL = {\n Sunday: \"Sun\",\n Monday: \"Mon\",\n Tuesday: \"Tue\",\n Wednesday: \"Wed\",\n Thursday: \"Thu\",\n Friday: \"Fri\",\n Saturday: \"Sat\",\n} as const satisfies Record<TWeekDay, string>;\n\nexport type TWeekDayShortLabel = TRecordValue<typeof WEEK_DAY_SHORT_LABEL>;\n\nexport const WEEK_DAY_LETTER = {\n Sunday: \"S\",\n Monday: \"M\",\n Tuesday: \"T\",\n Wednesday: \"W\",\n Thursday: \"T\",\n Friday: \"F\",\n Saturday: \"S\",\n} as const satisfies Record<TWeekDay, string>;\n\nexport type TWeekDayLetter = TRecordValue<typeof WEEK_DAY_LETTER>;\n\nexport interface IWeekDay {\n date: Date;\n dayOfMonth: number;\n day: TWeekDay;\n shortLabel: TWeekDayShortLabel;\n letter: TWeekDayLetter;\n isToday: boolean;\n}\n\nconst createSelectOptions = <TValue extends string>(\n values: readonly TValue[],\n): ISelectOption<TValue>[] =>\n values.map((value) => ({\n label: value,\n value,\n }));\n\nconst getRecordValues = <TRecord extends Record<string, string>>(\n record: TRecord,\n): TRecordValue<TRecord>[] => Object.values(record) as TRecordValue<TRecord>[];\n\nexport const UnitedStatesJurisdictionOptions = createSelectOptions(\n getRecordValues(US_JURISDICTIONS),\n);\n\nexport const StatusOptions: ISelectOption<TStatus>[] = [\n { label: \"Pending\", value: STATUS.PENDING },\n { label: \"In Progress\", value: STATUS.IN_PROGRESS },\n { label: \"Completed\", value: STATUS.COMPLETED },\n { label: \"Overdue\", value: STATUS.OVERDUE },\n { label: \"Active\", value: STATUS.ACTIVE },\n { label: \"Inactive\", value: STATUS.INACTIVE },\n];\n\nexport const SeverityOptions: ISelectOption<TSeverity>[] = [\n { label: \"Low\", value: SEVERITY.LOW },\n { label: \"Medium\", value: SEVERITY.MEDIUM },\n { label: \"High\", value: SEVERITY.HIGH },\n];\n\nexport const ServiceTypeOptions: ISelectOption<TServiceType>[] = [\n { label: \"Property\", value: SERVICE_TYPES.PROPERTY },\n { label: \"Cleaning\", value: SERVICE_TYPES.CLEANING },\n { label: \"Maintenance\", value: SERVICE_TYPES.MAINTENANCE },\n { label: \"Inspection\", value: SERVICE_TYPES.INSPECTION },\n { label: \"Other\", value: SERVICE_TYPES.OTHER },\n];\n\nexport * from \"./paging.types\";\n","import type { TRecordValue } from \"../base\";\n\nexport const COMPANY_RELATIONSHIP_STATUS = {\n ACTIVE: \"ACTIVE\",\n INACTIVE: \"INACTIVE\",\n SUSPENDED: \"SUSPENDED\",\n} as const;\n\nexport const INVITATION_STATUS = {\n PENDING: \"PENDING\",\n ACCEPTED: \"ACCEPTED\",\n EXPIRED: \"EXPIRED\",\n REVOKED: \"REVOKED\",\n DECLINED: \"DECLINED\",\n} as const;\n\nexport type TInvitationStatus = TRecordValue<typeof INVITATION_STATUS>;\n\nexport type TCompanyRelationshipStatus =\n | TRecordValue<typeof COMPANY_RELATIONSHIP_STATUS>\n | typeof INVITATION_STATUS.PENDING\n | null;\n\nexport const COMPANY_TYPES = {\n PROPERTY_MANAGEMENT: \"PROPERTY_MANAGEMENT\",\n MAINTENANCE: \"MAINTENANCE\",\n CLEANER: \"CLEANER\",\n OTHER: \"OTHER\",\n} as const;\n\nexport type TCompanyType = TRecordValue<typeof COMPANY_TYPES>;\n","import type { ICompany, ICompanyWithRelationshipStatus } from \".\";\nimport { COMPANY_TYPES } from \"./constants\";\nimport type {\n IEmptyRouteRequest,\n IMessageResponse,\n TDateTimeString,\n TUSStateCode,\n} from \"../base\";\nimport { US_JURISDICTIONS } from \"../base\";\nimport { ACCOUNT_TYPE, type TAccountType } from \"../user/constants\";\nimport {\n createValidationSchema,\n optionalEnumField,\n optionalNullableStringField,\n optionalStringField,\n requiredEmailField,\n requiredEnumField,\n requiredStringField,\n requiredUuidField,\n type TInferValidationSchemaInput,\n} from \"../validation\";\n\nexport interface ICompanyRouteParams {\n companyId: string;\n}\n\nexport interface ICompanyUserRouteParams {\n userId: string;\n}\n\nexport interface ICompanyInvitationTokenParams {\n token: string;\n}\n\nexport interface ICompanyInvitationIdParams extends ICompanyRouteParams {\n invitationId: string;\n}\n\nexport const CompanyFilter = {\n Active: \"active\",\n Pending: \"pending\",\n All: \"all\",\n} as const;\n\nexport type TCompanyFilter = (typeof CompanyFilter)[keyof typeof CompanyFilter];\n\nexport interface IGetCompaniesQuery {\n companyId?: string;\n search?: string;\n filter?: TCompanyFilter;\n}\n\nconst CompanyTypeValues = Object.values(COMPANY_TYPES);\nconst StateCodeValues = Object.keys(US_JURISDICTIONS) as TUSStateCode[];\nconst InviteUserRoleValues = Object.values(ACCOUNT_TYPE).filter(\n (accountType) => accountType !== ACCOUNT_TYPE.TURNDOWN_ADMIN,\n);\n\nexport const CreateCompanyRequestSchema = createValidationSchema({\n displayName: requiredStringField(\"BlankString\"),\n addressLine1: requiredStringField(\"BlankString\"),\n addressLine2: optionalNullableStringField(),\n city: requiredStringField(\"BlankString\"),\n stateCode: requiredEnumField(StateCodeValues, \"BlankString\"),\n postalCode: requiredStringField(\"BlankString\"),\n companyType: requiredEnumField(CompanyTypeValues, \"BlankString\"),\n country: optionalNullableStringField(),\n timezone: optionalNullableStringField(),\n imageUrl: optionalNullableStringField(),\n});\n\nexport type ICreateCompanyRequest = TInferValidationSchemaInput<\n typeof CreateCompanyRequestSchema\n> & {\n stateCode: TUSStateCode;\n companyType: ICompany[\"companyType\"];\n};\n\nexport interface ICreateCompanyResponse extends ICompanyWithRelationshipStatus {}\n\nexport type IGetCompaniesRequest = IEmptyRouteRequest;\nexport type IGetCompaniesResponse = ICompanyWithRelationshipStatus[];\n\nexport interface IGetCompanyByIdRequest extends ICompanyRouteParams {}\nexport interface IGetCompanyByIdResponse extends ICompanyWithRelationshipStatus {}\n\nexport const UpdateCompanyRequestSchema = createValidationSchema({\n displayName: optionalStringField(),\n addressLine1: optionalStringField(),\n addressLine2: optionalNullableStringField(),\n city: optionalStringField(),\n stateCode: optionalEnumField(StateCodeValues),\n postalCode: optionalStringField(),\n companyType: optionalEnumField(CompanyTypeValues),\n country: optionalNullableStringField(),\n timezone: optionalNullableStringField(),\n imageUrl: optionalNullableStringField(),\n});\n\nexport type IUpdateCompanyRequest = TInferValidationSchemaInput<\n typeof UpdateCompanyRequestSchema\n> & {\n stateCode?: TUSStateCode;\n companyType?: ICompany[\"companyType\"];\n};\n\nexport interface IUpdateCompanyResponse extends ICompanyWithRelationshipStatus {}\n\nexport const InviteUserToCompanyRequestSchema = createValidationSchema({\n email: requiredEmailField(),\n role: requiredEnumField(InviteUserRoleValues, \"BlankString\"),\n});\n\nexport type IInviteUserToCompanyRequest = TInferValidationSchemaInput<\n typeof InviteUserToCompanyRequestSchema\n> & {\n role: TAccountType;\n};\n\nexport interface IInviteUserToCompanyResponse extends IMessageResponse {}\n\nexport interface IGetCompanyUsersRequest extends ICompanyRouteParams {}\nexport interface ICompanyUserSummary {\n id: string;\n email: string;\n firstName: string;\n lastName: string | null;\n role: TAccountType;\n}\nexport interface ICompanyWithUsers extends ICompanyWithRelationshipStatus {\n users: ICompanyUserSummary[];\n}\nexport interface IGetCompanyUsersResponse extends ICompanyWithUsers {}\n\nexport interface IGetUserCompaniesRequest extends ICompanyUserRouteParams {}\nexport type IGetUserCompaniesResponse = ICompanyWithRelationshipStatus[];\n\nexport const InviteCompanyToCompanyRequestSchema = createValidationSchema({\n providerCompanyId: requiredUuidField(),\n message: optionalNullableStringField(),\n});\n\nexport type IInviteCompanyToCompanyRequest = TInferValidationSchemaInput<\n typeof InviteCompanyToCompanyRequestSchema\n>;\n\nexport interface IInviteCompanyToCompanyResponse {\n id: string;\n token: string;\n expiresAt: TDateTimeString;\n}\n\nexport interface IValidateCompanyInvitationRequest extends ICompanyInvitationTokenParams {}\nexport interface IValidateCompanyInvitationResponse {\n id: string;\n requesterCompanyId: string;\n providerCompanyId: string;\n invitedBy: string;\n message: string | null;\n expiresAt: TDateTimeString;\n requesterCompanyName: string;\n providerCompanyName: string;\n invitedByName: string;\n}\n\nexport interface IAcceptCompanyInvitationRequest extends ICompanyInvitationTokenParams {}\nexport interface IAcceptCompanyInvitationResponse {\n requesterCompanyId: string;\n providerCompanyId: string;\n requesterCompanyName: string;\n providerCompanyName: string;\n}\n\nexport interface IDeclineCompanyInvitationRequest extends ICompanyInvitationTokenParams {}\nexport interface IDeclineCompanyInvitationResponse extends IMessageResponse {}\n\nexport interface IGetPendingCompanyInvitationsRequest extends ICompanyRouteParams {}\nexport interface ICompanyInvitationSummary extends IValidateCompanyInvitationResponse {\n token: string;\n createdAt: TDateTimeString;\n}\n\nexport type IGetPendingCompanyInvitationsResponse = ICompanyInvitationSummary[];\n\nexport interface IRevokeCompanyInvitationRequest extends ICompanyInvitationIdParams {}\nexport interface IRevokeCompanyInvitationResponse extends IMessageResponse {}\n","import type { TDateTimeString, TRecordValue } from \"../base\";\n\nexport const DAMAGE_SEVERITY = {\n LOW: \"LOW\",\n MEDIUM: \"MEDIUM\",\n HIGH: \"HIGH\",\n CRITICAL: \"CRITICAL\",\n} as const;\n\nexport type TDamageSeverity = TRecordValue<typeof DAMAGE_SEVERITY>;\n\nexport const DAMAGE_STATUS = {\n OPEN: \"OPEN\",\n IN_REVIEW: \"IN_REVIEW\",\n ASSIGNED: \"ASSIGNED\",\n IN_PROGRESS: \"IN_PROGRESS\",\n RESOLVED: \"RESOLVED\",\n CLOSED: \"CLOSED\",\n ESCALATED: \"ESCALATED\",\n} as const;\n\nexport type TDamageStatus = TRecordValue<typeof DAMAGE_STATUS>;\n\nexport const WORK_ORDER_PRIORITY = {\n LOW: \"LOW\",\n NORMAL: \"NORMAL\",\n HIGH: \"HIGH\",\n URGENT: \"URGENT\",\n} as const;\n\nexport type TWorkOrderPriority = TRecordValue<typeof WORK_ORDER_PRIORITY>;\n\nexport const WORK_ORDER_STATUS = {\n PENDING: \"PENDING\",\n SCHEDULED: \"SCHEDULED\",\n IN_PROGRESS: \"IN_PROGRESS\",\n COMPLETED: \"COMPLETED\",\n CANCELLED: \"CANCELLED\",\n} as const;\n\nexport type TWorkOrderStatus = TRecordValue<typeof WORK_ORDER_STATUS>;\n\nexport interface IDamageReport {\n id: string;\n propertyId: string;\n roomId: string;\n workSessionId: string | null;\n cleaningSessionId: string | null;\n reportedBy: string;\n reportedAt: TDateTimeString;\n severity: TDamageSeverity;\n status: TDamageStatus;\n title: string;\n description: string;\n locationDetails: string | null;\n estimatedCost: number | null;\n actualCost: number | null;\n assignedTo: string | null;\n assignedAt: TDateTimeString | null;\n resolvedAt: TDateTimeString | null;\n resolvedBy: string | null;\n resolutionNotes: string | null;\n requiresProfessional: boolean;\n vendorInfo: string | null;\n insuranceClaimNumber: string | null;\n isTenantResponsible: boolean;\n tenantChargeAmount: number | null;\n createdAt: TDateTimeString;\n updatedAt: TDateTimeString;\n photos?: IDamagePhoto[];\n comments?: IDamageComment[];\n}\n\nexport interface IDamageReportPhoto {\n id: string;\n damageReportId: string;\n photoId: string;\n imageUrl: string | null;\n caption: string | null;\n isBeforePhoto: boolean;\n displayOrder: number;\n uploadedBy: string | null;\n createdAt: TDateTimeString;\n}\n\nexport interface IDamagePhoto extends IDamageReportPhoto {}\n\nexport interface IDamageComment {\n id: string;\n damageReportId: string;\n userId: string;\n userName: string | null;\n comment: string;\n isInternal: boolean;\n createdAt: TDateTimeString;\n updatedAt: TDateTimeString;\n}\n\nexport interface IDamageReportStatusHistory {\n id: string;\n damageReportId: string;\n previousStatus: TDamageStatus | null;\n newStatus: TDamageStatus;\n changedBy: string;\n reason: string | null;\n createdAt: TDateTimeString;\n}\n\nexport interface IWorkOrder {\n id: string;\n damageReportId: string | null;\n propertyId: string;\n roomId: string | null;\n workOrderNumber: string | null;\n priority: TWorkOrderPriority;\n category: string | null;\n assignedTo: string | null;\n assignedAt: TDateTimeString | null;\n scheduledDate: TDateTimeString | null;\n scheduledTimeStart: string | null;\n scheduledTimeEnd: string | null;\n startedAt: TDateTimeString | null;\n completedAt: TDateTimeString | null;\n completedBy: string | null;\n description: string;\n workPerformed: string | null;\n materialsUsed: string | null;\n laborHours: number | null;\n laborCost: number | null;\n materialsCost: number | null;\n totalCost: number | null;\n status: TWorkOrderStatus;\n createdAt: TDateTimeString;\n updatedAt: TDateTimeString;\n}\n\nexport interface ICreateDamageReportInput {\n propertyId: string;\n roomId: string;\n workSessionId?: string;\n reportedBy: string;\n severity: TDamageSeverity;\n title: string;\n description: string;\n locationDetails?: string;\n estimatedCost?: number;\n requiresProfessional?: boolean;\n isTenantResponsible?: boolean;\n tenantChargeAmount?: number;\n}\n\nexport interface ICreateWorkOrderInput {\n damageReportId?: string;\n propertyId: string;\n roomId?: string;\n priority?: TWorkOrderPriority;\n category?: string;\n description: string;\n scheduledDate?: TDateTimeString;\n scheduledTimeStart?: string;\n scheduledTimeEnd?: string;\n}\n\nexport * from \"./routes\";\n","/**\n * Error Types\n * Custom error types and validation error structures.\n */\n\nimport { ERROR_CODES } from \"../api\";\nimport type { TErrorCode } from \"../api\";\nimport type { TJsonObject, TJsonValue } from \"../base\";\n\n/**\n * Detailed information about a validation error.\n */\nexport interface IValidationErrorDetail {\n field: string;\n message: string;\n value?: TJsonValue;\n}\n\n/**\n * Information about missing required fields.\n */\nexport interface IMissingFieldsErrorDetail {\n missingFields: string[];\n}\n\n/**\n * Information about rate limiting.\n */\nexport interface IRateLimitErrorDetail {\n retryAfter?: number;\n message: string;\n}\n\nexport type TErrorResponseDetail =\n | IValidationErrorDetail[]\n | IMissingFieldsErrorDetail\n | IRateLimitErrorDetail\n | TJsonObject\n | string;\n\nexport interface ITypedApiError<TDetails = TErrorResponseDetail> {\n message: string;\n code: TErrorCode;\n details?: TDetails;\n}\n\nexport type TValidationError = ITypedApiError<IValidationErrorDetail[]>;\nexport type TMissingFieldsError = ITypedApiError<IMissingFieldsErrorDetail>;\nexport type TRateLimitError = ITypedApiError<IRateLimitErrorDetail>;\n\ntype TErrorLike = {\n code?: string;\n details?: unknown;\n};\n\nconst isErrorLike = (error: unknown): error is TErrorLike => {\n return typeof error === \"object\" && error !== null;\n};\n\n/**\n * Type guard for validation errors.\n */\nexport function isValidationError(error: unknown): error is TValidationError {\n return (\n isErrorLike(error) &&\n error.code === ERROR_CODES.VALIDATION_ERROR &&\n Array.isArray(error.details)\n );\n}\n\n/**\n * Type guard for missing-field errors.\n */\nexport function isMissingFieldsError(\n error: unknown,\n): error is TMissingFieldsError {\n return (\n isErrorLike(error) &&\n error.code === ERROR_CODES.MISSING_FIELDS &&\n typeof error.details === \"object\" &&\n error.details !== null &&\n \"missingFields\" in error.details &&\n Array.isArray(error.details.missingFields)\n );\n}\n\n/**\n * Type guard for rate-limit errors.\n */\nexport function isRateLimitError(error: unknown): error is TRateLimitError {\n return isErrorLike(error) && error.code === ERROR_CODES.RATE_LIMIT_EXCEEDED;\n}\n\n/**\n * Type guard for authentication errors.\n */\nexport function isAuthError(error: unknown): boolean {\n return (\n isErrorLike(error) &&\n (error.code === ERROR_CODES.UNAUTHORIZED ||\n error.code === ERROR_CODES.INVALID_TOKEN ||\n error.code === ERROR_CODES.INVALID_CREDENTIALS)\n );\n}\n","import type { TDateTimeString, TEnvironment } from \"../base\";\n\nexport * from \"./routes\";\n\nexport const SERVER_STATUS = {\n Healthy: \"Healthy\",\n Unhealthy: \"UnHealthy\",\n} as const;\n\nexport type TServerStatus = (typeof SERVER_STATUS)[keyof typeof SERVER_STATUS];\n\nexport const DATABASE_STATUS = {\n Unknown: \"Unknown\",\n Connected: \"Connected\",\n Disconnected: \"Disconnected\",\n} as const;\n\nexport type TDatabaseStatus =\n (typeof DATABASE_STATUS)[keyof typeof DATABASE_STATUS];\n\nexport interface IHealthCheckResponse {\n status: TServerStatus;\n database: TDatabaseStatus;\n timestamp: TDateTimeString;\n environment: TEnvironment;\n}\n\nexport interface IHealthChecks {\n database: TDatabaseStatus;\n uptime: number;\n memory: {\n rss: number;\n heapTotal: number;\n heapUsed: number;\n external: number;\n arrayBuffers: number;\n };\n timestamp: TDateTimeString;\n databaseError?: string;\n}\n","import type { TDateTimeString } from \"../base\";\n\nexport * from \"./routes\";\n\nexport const IMAGE_ENTITY_TYPE = {\n USER_PROFILE: \"USER_PROFILE\",\n PROPERTY: \"PROPERTY\",\n COMPANY: \"COMPANY\",\n CHECKLIST_ITEM: \"CHECKLIST_ITEM\",\n PROPERTY_ROOM: \"PROPERTY_ROOM\",\n MAINTENANCE_TICKET: \"MAINTENANCE_TICKET\",\n WORK_REPORT: \"WORK_REPORT\",\n CLEANING_REPORT: \"CLEANING_REPORT\",\n TURNDOWN_DEFAULT: \"TURNDOWN_DEFAULT\",\n} as const;\n\nexport type TStoredImageEntityType =\n (typeof IMAGE_ENTITY_TYPE)[keyof typeof IMAGE_ENTITY_TYPE];\n\nexport interface IImage {\n id: string;\n s3Key: string;\n s3Bucket: string;\n entityType: TStoredImageEntityType;\n entityId: string;\n fileName: string;\n mimeType: string;\n fileSizeBytes: number | null;\n width: number | null;\n height: number | null;\n isPublic: boolean;\n category: string | null;\n displayOrder: number;\n uploadedBy: string | null;\n createdAt: TDateTimeString;\n updatedAt: TDateTimeString;\n deletedAt: TDateTimeString | null;\n}\n\nexport interface IImageWithUrl extends IImage {\n url: string;\n}\n","import type { IMetaData, TDateTimeString, TRecordValue } from \"../base\";\nexport * from \"./routes\";\n\nexport const INVENTORY_RESTOCK_ORDER_STATUS = {\n PENDING: \"PENDING\",\n ORDERED: \"ORDERED\",\n SHIPPED: \"SHIPPED\",\n RECEIVED: \"RECEIVED\",\n} as const;\n\nexport type TInventoryRestockOrderStatus = TRecordValue<\n typeof INVENTORY_RESTOCK_ORDER_STATUS\n>;\n\nexport const INVENTORY_UNITS = {\n COUNT: \"COUNT\",\n ROLLS: \"ROLLS\",\n PODS: \"PODS\",\n BOXES: \"BOXES\",\n BOTTLES: \"BOTTLES\",\n PACKS: \"PACKS\",\n BAGS: \"BAGS\",\n GALLONS: \"GALLONS\",\n LITERS: \"LITERS\",\n KILOGRAMS: \"KILOGRAMS\",\n POUNDS: \"POUNDS\",\n OUNCES: \"OUNCES\",\n GRAMS: \"GRAMS\",\n SHEETS: \"SHEETS\",\n CASES: \"CASES\",\n CARTONS: \"CARTONS\",\n OTHER: \"OTHER\",\n} as const;\n\nexport type TInventoryUnitType = TRecordValue<typeof INVENTORY_UNITS>;\n\nexport const INVENTORY_ITEM_TYPE = {\n CONSUMABLE: \"CONSUMABLE\",\n FIXED: \"FIXED\",\n} as const;\n\nexport type TInventoryItemType = TRecordValue<typeof INVENTORY_ITEM_TYPE>;\n\nexport interface IInventoryItem extends IMetaData {\n id: string;\n companyId: string;\n name: string;\n description: string | null;\n itemType: TInventoryItemType;\n unit: TInventoryUnitType;\n unitCustom: string | null;\n minimumLevel: number;\n reorderLevel: number;\n maximumLevel: number | null;\n costPerUnit: number | null;\n supplierInfo: string | null;\n sku: string | null;\n barcode: string | null;\n}\n\nexport interface IRoomInventory extends IMetaData {\n id: string;\n roomId: string;\n inventoryItemId: string;\n currentLevel: number;\n minimumLevel: number;\n maximumLevel: number | null;\n parLevel: number | null;\n lastRestockedAt: TDateTimeString | null;\n lastRestockedBy: string | null;\n lastCheckedAt: TDateTimeString | null;\n lastCheckedBy: string | null;\n autoReorder: boolean;\n locationNotes: string | null;\n}\n\nexport interface IPropertyInventory extends IMetaData {\n id: string;\n propertyId: string;\n inventoryItemId: string;\n currentLevel: number;\n minimumLevel: number;\n maximumLevel: number | null;\n parLevel: number | null;\n lastRestockedAt: TDateTimeString | null;\n lastRestockedBy: string | null;\n lastCheckedAt: TDateTimeString | null;\n lastCheckedBy: string | null;\n autoReorder: boolean;\n locationNotes: string | null;\n}\n\nexport interface IInventoryCount {\n id: string;\n checklistExecutionId: string;\n roomInventoryId: string;\n previousLevel: number;\n countedLevel: number;\n consumedAmount: number;\n restockedAmount: number;\n finalLevel: number;\n countedBy: string;\n countedAt: TDateTimeString;\n needsRestock: boolean;\n notes: string | null;\n createdAt: TDateTimeString;\n}\n\nexport interface IInventoryRestockOrder {\n id: string;\n companyId: string;\n orderNumber: string | null;\n status: TInventoryRestockOrderStatus;\n totalItems: number | null;\n totalCost: number | null;\n orderedBy: string | null;\n orderedAt: TDateTimeString | null;\n expectedDelivery: TDateTimeString | null;\n receivedBy: string | null;\n receivedAt: TDateTimeString | null;\n supplierInfo: string | null;\n notes: string | null;\n createdAt: TDateTimeString;\n updatedAt: TDateTimeString;\n}\n\nexport interface IInventoryRestockOrderItem {\n id: string;\n orderId: string;\n inventoryItemId: string;\n roomInventoryId: string | null;\n propertyInventoryId: string | null;\n quantityOrdered: number;\n quantityReceived: number;\n unitCost: number | null;\n totalCost: number | null;\n createdAt: TDateTimeString;\n}\n","import type { ISelectOption, TRecordValue } from \"../base\";\n\nexport const PROPERTY_STATUS = {\n ACTIVE: \"ACTIVE\",\n INACTIVE: \"INACTIVE\",\n} as const;\n\nexport type TPropertyStatus = TRecordValue<typeof PROPERTY_STATUS>;\n\nexport const PropertyStatusOptions: ISelectOption<TPropertyStatus>[] = [\n {\n label: \"Active\",\n value: PROPERTY_STATUS.ACTIVE,\n },\n {\n label: \"Inactive\",\n value: PROPERTY_STATUS.INACTIVE,\n },\n];\n\nexport const PROPERTY_TYPES = {\n APARTMENT: \"APARTMENT\",\n COMMERCIAL: \"COMMERCIAL\",\n CONDO: \"CONDO\",\n DUPLEX: \"DUPLEX\",\n HOUSE: \"HOUSE\",\n MULTI_FAMILY: \"MULTI_FAMILY\",\n OFFICE: \"OFFICE\",\n RETAIL: \"RETAIL\",\n TOWNHOUSE: \"TOWNHOUSE\",\n VACATION_RENTAL: \"VACATION_RENTAL\",\n WAREHOUSE: \"WAREHOUSE\",\n} as const;\n\nexport type TPropertyType = TRecordValue<typeof PROPERTY_TYPES>;\n\nexport const PropertyTypeOptions: ISelectOption<TPropertyType>[] = [\n {\n label: \"Apartment\",\n value: PROPERTY_TYPES.APARTMENT,\n },\n {\n label: \"Commercial\",\n value: PROPERTY_TYPES.COMMERCIAL,\n },\n {\n label: \"Condo\",\n value: PROPERTY_TYPES.CONDO,\n },\n {\n label: \"Duplex\",\n value: PROPERTY_TYPES.DUPLEX,\n },\n {\n label: \"House\",\n value: PROPERTY_TYPES.HOUSE,\n },\n {\n label: \"Multi-Family\",\n value: PROPERTY_TYPES.MULTI_FAMILY,\n },\n {\n label: \"Office\",\n value: PROPERTY_TYPES.OFFICE,\n },\n {\n label: \"Retail\",\n value: PROPERTY_TYPES.RETAIL,\n },\n {\n label: \"Townhouse\",\n value: PROPERTY_TYPES.TOWNHOUSE,\n },\n {\n label: \"Vacation Rental\",\n value: PROPERTY_TYPES.VACATION_RENTAL,\n },\n {\n label: \"Warehouse\",\n value: PROPERTY_TYPES.WAREHOUSE,\n },\n];\n","import type {\n IProperty,\n IPropertyAccessInformation,\n IPropertyDetail,\n IPropertySummary,\n TPropertyStatus,\n TPropertyType,\n} from \".\";\nimport { PROPERTY_STATUS, PROPERTY_TYPES } from \"./constants\";\nimport type { IMessageResponse, TUSStateCode } from \"../base\";\nimport { US_JURISDICTIONS } from \"../base\";\nimport {\n createValidationSchema,\n optionalEnumField,\n optionalNullableEnumField,\n optionalNullableNonNegativeIntegerField,\n optionalNullableStringField,\n optionalStringField,\n requiredEnumField,\n requiredStringField,\n type TInferValidationSchemaInput,\n} from \"../validation\";\n\nexport interface IPropertyIdParams {\n propertyId: string;\n}\n\nexport interface ICompanyIdParams {\n companyId: string;\n}\n\nconst PropertyTypeValues = Object.values(PROPERTY_TYPES);\nconst PropertyStatusValues = Object.values(PROPERTY_STATUS);\nconst StateCodeValues = Object.keys(US_JURISDICTIONS) as TUSStateCode[];\n\nexport const CreatePropertyRequestSchema = createValidationSchema({\n displayName: requiredStringField(),\n propertyType: requiredEnumField(PropertyTypeValues),\n status: optionalNullableEnumField(PropertyStatusValues),\n addressLine1: requiredStringField(),\n addressLine2: optionalNullableStringField(),\n city: requiredStringField(),\n stateCode: requiredEnumField(StateCodeValues),\n postalCode: requiredStringField(),\n country: optionalNullableStringField(),\n sqft: optionalNullableNonNegativeIntegerField(),\n timezone: optionalNullableStringField(),\n imageUrl: optionalNullableStringField(),\n specialNotes: optionalNullableStringField(),\n});\n\nexport type ICreatePropertyRequest = TInferValidationSchemaInput<\n typeof CreatePropertyRequestSchema\n> & {\n propertyType: TPropertyType;\n status?: TPropertyStatus | null;\n stateCode: TUSStateCode;\n};\n\nexport const UpdatePropertyRequestSchema = createValidationSchema({\n displayName: optionalStringField(),\n propertyType: optionalNullableEnumField(PropertyTypeValues),\n status: optionalNullableEnumField(PropertyStatusValues),\n addressLine1: optionalStringField(),\n addressLine2: optionalNullableStringField(),\n city: optionalStringField(),\n stateCode: optionalEnumField(StateCodeValues),\n postalCode: optionalStringField(),\n country: optionalNullableStringField(),\n sqft: optionalNullableNonNegativeIntegerField(),\n timezone: optionalNullableStringField(),\n imageUrl: optionalNullableStringField(),\n specialNotes: optionalNullableStringField(),\n});\n\nexport type IUpdatePropertyRequest = TInferValidationSchemaInput<\n typeof UpdatePropertyRequestSchema\n> & {\n propertyType?: TPropertyType | null;\n status?: TPropertyStatus | null;\n stateCode?: TUSStateCode;\n};\n\nexport interface IGetPropertiesRequest {\n companyId?: string;\n}\n\nexport interface IGetPropertyByIdRequest extends IPropertyIdParams {}\n\nexport interface IDeletePropertyRequest extends IPropertyIdParams {}\n\nexport type IGetPropertiesResponse = IPropertySummary[];\n\nexport interface IGetPropertyResponse extends IPropertyDetail {}\n\nexport interface ICreatePropertyResponse extends IPropertyDetail {}\n\nexport interface IUpdatePropertyResponse extends IPropertyDetail {}\n\nexport interface IDeletePropertyResponse extends IMessageResponse {}\n\nexport const UpdatePropertyAccessInformationRequestSchema =\n createValidationSchema({\n entryInstructions: optionalNullableStringField(),\n accessCode: optionalNullableStringField(),\n wifiName: optionalNullableStringField(),\n wifiPassword: optionalNullableStringField(),\n alarmCode: optionalNullableStringField(),\n parkingInfo: optionalNullableStringField(),\n specialNotes: optionalNullableStringField(),\n });\n\nexport type IUpdatePropertyAccessInformationRequest =\n TInferValidationSchemaInput<\n typeof UpdatePropertyAccessInformationRequestSchema\n >;\n\nexport interface IUpdatePropertyAccessInformationResponse extends IPropertyAccessInformation {}\n\nexport interface IGetPropertyAccessInformationRequest extends IPropertyIdParams {}\n\nexport type IGetPropertyAccessInformationResponse =\n IPropertyAccessInformation | null;\n\nexport interface IGetPropertyByIdResponse extends IGetPropertyResponse {}\n\nexport interface IGetPropertiesByCompanyIdRequest extends ICompanyIdParams {}\nexport type IGetPropertiesByCompanyIdResponse = IProperty[];\n","import type { TRecordValue } from \"../base\";\n\nexport const ROOM_TYPE = {\n BEDROOM: \"BEDROOM\",\n BATHROOM: \"BATHROOM\",\n KITCHEN: \"KITCHEN\",\n LIVING_ROOM: \"LIVING_ROOM\",\n DINING_ROOM: \"DINING_ROOM\",\n OFFICE: \"OFFICE\",\n GARAGE: \"GARAGE\",\n LAUNDRY_ROOM: \"LAUNDRY_ROOM\",\n BASEMENT: \"BASEMENT\",\n ATTIC: \"ATTIC\",\n BALCONY: \"BALCONY\",\n PORCH: \"PORCH\",\n GARDEN: \"GARDEN\",\n OTHER: \"OTHER\",\n} as const;\n\nexport type TRoomType = TRecordValue<typeof ROOM_TYPE>;\n","import type { IRoom } from \".\";\nimport { ROOM_TYPE } from \"./constants\";\nimport type { IMessageResponse } from \"../base\";\nimport {\n createValidationSchema,\n optionalNullableEnumField,\n optionalNullableStringField,\n optionalStringField,\n requiredStringField,\n type TInferValidationSchemaInput,\n} from \"../validation\";\n\nexport interface IRoomPropertyRouteParams {\n propertyId: string;\n}\n\nexport interface IRoomRouteParams {\n roomId: string;\n}\n\nconst RoomTypeValues = Object.values(ROOM_TYPE);\n\nexport const CreateRoomRequestSchema = createValidationSchema({\n propertyId: requiredStringField(),\n displayName: requiredStringField(),\n description: optionalNullableStringField(),\n checklistTemplateId: optionalNullableStringField(),\n roomType: optionalNullableEnumField(RoomTypeValues),\n heroPhoto: optionalNullableStringField(),\n});\n\nexport type ICreateRoomRequest = TInferValidationSchemaInput<\n typeof CreateRoomRequestSchema\n> & {\n roomType?: IRoom[\"roomType\"];\n};\n\nexport interface ICreateRoomResponse extends IRoom {}\n\nexport interface IGetRoomsRequest {\n propertyId?: string;\n}\n\nexport interface IGetRoomsByPropertyIdRequest extends IRoomPropertyRouteParams {}\nexport type IGetRoomsByPropertyIdResponse = IRoom[];\n\nexport interface IGetDetailedRoomsByPropertyIdRequest extends IRoomPropertyRouteParams {}\nexport type IGetDetailedRoomsByPropertyIdResponse = IRoom[];\n\nexport interface IGetRoomByIdRequest extends IRoomRouteParams {}\nexport interface IGetRoomByIdResponse extends IRoom {}\n\nexport const UpdateRoomRequestSchema = createValidationSchema({\n displayName: optionalStringField(),\n description: optionalNullableStringField(),\n checklistTemplateId: optionalNullableStringField(),\n roomType: optionalNullableEnumField(RoomTypeValues),\n heroPhoto: optionalNullableStringField(),\n});\n\nexport type IUpdateRoomRequest = TInferValidationSchemaInput<\n typeof UpdateRoomRequestSchema\n> & {\n roomType?: IRoom[\"roomType\"];\n};\n\nexport interface IUpdateRoomResponse extends IRoom {}\n\nexport interface IDeleteRoomRequest extends IRoomRouteParams {}\nexport interface IDeleteRoomResponse extends IMessageResponse {}\n","import type { TDateTimeString, TRecordValue } from \"../base\";\n\nexport const SUBSCRIPTION_STATUS = {\n ACTIVE: \"ACTIVE\",\n CANCELED: \"CANCELED\",\n EXPIRED: \"EXPIRED\",\n PAST_DUE: \"PAST_DUE\",\n TRIALING: \"TRIALING\",\n} as const;\n\nexport type TSubscriptionStatus = TRecordValue<typeof SUBSCRIPTION_STATUS>;\n\nexport const SUBSCRIPTION_PROVIDER = {\n STRIPE: \"STRIPE\",\n APPLE: \"APPLE\",\n GOOGLE: \"GOOGLE\",\n} as const;\n\nexport type TSubscriptionProvider = TRecordValue<typeof SUBSCRIPTION_PROVIDER>;\n\nexport const BILLING_PERIOD = {\n MONTHLY: \"MONTHLY\",\n YEARLY: \"YEARLY\",\n} as const;\n\nexport type TBillingPeriod = TRecordValue<typeof BILLING_PERIOD>;\n\nexport interface IUserSubscription {\n id: string;\n userId: string;\n planId: string;\n status: TSubscriptionStatus;\n billingPeriod: TBillingPeriod;\n currentPeriodStart: TDateTimeString;\n currentPeriodEnd: TDateTimeString;\n provider: TSubscriptionProvider;\n providerSubscriptionId: string;\n cancelAtPeriodEnd: boolean;\n}\n","import type { IUserSafe, TAccountType } from \".\";\nimport { LANGUAGE } from \"./constants\";\nimport type { IEmptyRouteRequest, IMessageResponse } from \"../base\";\nimport {\n createValidationSchema,\n optionalEnumField,\n optionalNullableStringField,\n optionalStringField,\n type TInferValidationSchemaInput,\n} from \"../validation\";\n\nexport interface IUserIdParams {\n id: string;\n}\n\nexport interface IGetUserResponse {\n user: IUserSafe | null;\n}\n\nexport type IGetCurrentUserRequest = IEmptyRouteRequest;\nexport interface IGetCurrentUserResponse extends IGetUserResponse {}\n\nexport interface IGetUserByIdRequest extends IUserIdParams {}\nexport interface IGetUserByIdResponse extends IGetUserResponse {}\n\nexport interface IGetUserByEmailRequest {\n email: string;\n}\nexport interface IGetUserByEmailResponse extends IGetUserResponse {}\n\nexport type IGetStaffRequest = IEmptyRouteRequest;\nexport interface IGetStaffResponse {\n staff: IUserSafe[];\n}\n\nconst LanguageValues = Object.values(LANGUAGE);\n\nexport const UpdateUserRequestSchema = createValidationSchema({\n firstName: optionalStringField(),\n lastName: optionalNullableStringField(),\n mi: optionalNullableStringField(),\n username: optionalNullableStringField(),\n email: optionalStringField(),\n phoneNumber: optionalNullableStringField(),\n phoneFormat: optionalNullableStringField(),\n preferredLanguage: optionalEnumField(LanguageValues),\n});\n\nexport type IUpdateUserRequest = TInferValidationSchemaInput<\n typeof UpdateUserRequestSchema\n> & {\n preferredLanguage?: IUserSafe[\"preferredLanguage\"];\n};\n\nexport const UpdateCurrentUserRequestSchema = createValidationSchema({\n firstName: optionalStringField(),\n lastName: optionalStringField(),\n});\n\nexport type IUpdateCurrentUserRequest = TInferValidationSchemaInput<\n typeof UpdateCurrentUserRequestSchema\n>;\n\nexport interface IUpdateUserResponse {\n user: IUserSafe;\n}\n\nexport type IDeleteUserRequest = IEmptyRouteRequest;\nexport interface IDeleteUserResponse extends IMessageResponse {}\n\nexport interface IGetUsersByAccountTypeRequest {\n accountType: TAccountType;\n}\nexport interface IGetUsersByAccountTypeResponse {\n users: IUserSafe[];\n}\n","import type { TDateTimeString, TRecordValue } from \"../base\";\nexport * from \"./routes\";\n\n/**\n * Work session status enum.\n */\nexport const WORK_SESSION_STATUS = {\n IN_PROGRESS: \"IN_PROGRESS\",\n COMPLETED: \"COMPLETED\",\n CANCELLED: \"CANCELLED\",\n} as const;\n\nexport type TWorkSessionStatus = TRecordValue<typeof WORK_SESSION_STATUS>;\n\n/**\n * Checklist execution status enum.\n */\nexport const CHECKLIST_EXECUTION_STATUS = {\n PENDING: \"PENDING\",\n IN_PROGRESS: \"IN_PROGRESS\",\n COMPLETED: \"COMPLETED\",\n SKIPPED: \"SKIPPED\",\n} as const;\n\nexport type TChecklistExecutionStatus = TRecordValue<\n typeof CHECKLIST_EXECUTION_STATUS\n>;\n\n/**\n * Work session.\n */\nexport interface IWorkSession {\n id: string;\n propertyId: string;\n serviceProviderCompanyId: string;\n performedBy: string;\n status: TWorkSessionStatus;\n scheduledDate: TDateTimeString | null;\n startedAt: TDateTimeString;\n completedAt: TDateTimeString | null;\n totalTimeMinutes: number | null;\n notes: string | null;\n createdAt: TDateTimeString;\n updatedAt: TDateTimeString;\n}\n\n/**\n * Checklist execution.\n */\nexport interface IChecklistExecution {\n id: string;\n workSessionId: string;\n roomChecklistId: string;\n roomId: string;\n workerId: string;\n status: TChecklistExecutionStatus;\n startedAt: TDateTimeString | null;\n completedAt: TDateTimeString | null;\n timeSpentMinutes: number | null;\n notes: string | null;\n createdAt: TDateTimeString;\n updatedAt: TDateTimeString;\n}\n\n/**\n * Checklist item completion.\n */\nexport interface IChecklistItemCompletion {\n id: string;\n checklistExecutionId: string;\n roomChecklistItemId: string;\n completedBy: string;\n completedAt: TDateTimeString;\n photoId: string | null;\n notes: string | null;\n skipped: boolean;\n skipReason: string | null;\n createdAt: TDateTimeString;\n}\n\n/**\n * Work session with executions.\n */\nexport interface IWorkSessionWithExecutions extends IWorkSession {\n executions: IChecklistExecution[];\n}\n\n/**\n * Input for creating a work session.\n */\nexport interface ICreateWorkSessionInput {\n propertyId: string;\n serviceProviderCompanyId: string;\n performedBy: string;\n scheduledDate?: TDateTimeString;\n notes?: string;\n}\n\n/**\n * Input for completing a checklist item.\n */\nexport interface ICompleteChecklistItemInput {\n roomChecklistItemId: string;\n completedBy: string;\n photoId?: string;\n notes?: string;\n skipped?: boolean;\n skipReason?: string;\n}\n"],"mappings":"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","names":["t","e","n","r","i","s","u","a","M","m","f","l","$","y","v","g","D","o","d","c","h","t","i","d","n","e","s","r","e","t","o","n","i","d","dayjs","relativeTime","isoWeek","isRecord","isEmail","StateCodeValues"]}