@kodaris/krubble-http 1.0.10 → 1.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ []
package/dist/http.d.ts CHANGED
@@ -97,6 +97,10 @@ export declare class KRHttp {
97
97
  * });
98
98
  */
99
99
  static configure(config: KRHttpConfig): void;
100
+ /**
101
+ * Returns the active base URL (devUrl on localhost, baseUrl otherwise).
102
+ */
103
+ static getBaseUrl(): string;
100
104
  /**
101
105
  * Make an HTTP request.
102
106
  *
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AAEH;;;GAGG;AACH,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC;IAC5D,wDAAwD;IACxD,GAAG,EAAE,MAAM,CAAC;IACZ,2BAA2B;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,0DAA0D;IAC1D,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,qBAAa,MAAM;IAEf,uCAAuC;IACvC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAM;IAC7B,2CAA2C;IAC3C,MAAM,CAAC,OAAO,EAAE,MAAM,CAAM;IAE5B;;;;;;;;;;OAUG;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAS5C;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC;CA+E1D"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AAEH;;;GAGG;AACH,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC;IAC5D,wDAAwD;IACxD,GAAG,EAAE,MAAM,CAAC;IACZ,2BAA2B;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,0DAA0D;IAC1D,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,qBAAa,MAAM;IAEf,uCAAuC;IACvC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAM;IAC7B,2CAA2C;IAC3C,MAAM,CAAC,OAAO,EAAE,MAAM,CAAM;IAE5B;;;;;;;;;;OAUG;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAS5C;;OAEG;IACH,MAAM,CAAC,UAAU,IAAI,MAAM;IAQ3B;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC;CA2E1D"}
package/dist/http.js CHANGED
@@ -79,6 +79,16 @@ export class KRHttp {
79
79
  KRHttp._devUrl = config.devUrl;
80
80
  }
81
81
  }
82
+ /**
83
+ * Returns the active base URL (devUrl on localhost, baseUrl otherwise).
84
+ */
85
+ static getBaseUrl() {
86
+ var isDev = window.location.hostname === 'localhost' && window.location.port.startsWith('4');
87
+ if (isDev && KRHttp._devUrl) {
88
+ return KRHttp._devUrl;
89
+ }
90
+ return KRHttp._baseUrl;
91
+ }
82
92
  /**
83
93
  * Make an HTTP request.
84
94
  *
@@ -97,10 +107,7 @@ export class KRHttp {
97
107
  static fetch(options) {
98
108
  let url = options.url;
99
109
  var isDev = window.location.hostname === 'localhost' && window.location.port.startsWith('4');
100
- let finalBaseUrl = KRHttp._baseUrl;
101
- if (isDev && KRHttp._devUrl) {
102
- finalBaseUrl = KRHttp._devUrl;
103
- }
110
+ let finalBaseUrl = KRHttp.getBaseUrl();
104
111
  // Add on the default base url if user
105
112
  // has not provided the full url
106
113
  if (url.indexOf('http') !== 0) {
@@ -128,15 +135,7 @@ export class KRHttp {
128
135
  Object.assign(headers, options.headers);
129
136
  }
130
137
  }
131
- if (!headers['Content-Type']) {
132
- headers['Content-Type'] = 'application/json';
133
- }
134
- options.headers = headers;
135
- // Default credentials to include in dev mode
136
- if (isDev && !options.credentials) {
137
- options.credentials = 'include';
138
- }
139
- // Auto-stringify plain object bodies (skip native body types)
138
+ // Auto-stringify plain object bodies and default Content-Type to JSON
140
139
  if (options.body && typeof options.body === 'object'
141
140
  && !(options.body instanceof ReadableStream)
142
141
  && !(options.body instanceof Blob)
@@ -144,6 +143,14 @@ export class KRHttp {
144
143
  && !(options.body instanceof FormData)
145
144
  && !(options.body instanceof URLSearchParams)) {
146
145
  options.body = JSON.stringify(options.body);
146
+ if (!headers['Content-Type']) {
147
+ headers['Content-Type'] = 'application/json';
148
+ }
149
+ }
150
+ options.headers = headers;
151
+ // Default credentials to include in dev mode
152
+ if (isDev && !options.credentials) {
153
+ options.credentials = 'include';
147
154
  }
148
155
  // User and Customer apis require CSRF tokens on non-GET requests
149
156
  let token;
package/dist/http.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AAyBH;;;GAGG;AACH,MAAM,OAAO,MAAM;IAOf;;;;;;;;;;OAUG;IACH,MAAM,CAAC,SAAS,CAAC,MAAoB;QACjC,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;QACrC,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;QACnC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,KAAK,CAAC,OAAsB;QAE/B,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QAEtB,IAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAE7F,IAAI,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC;QACnC,IAAI,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YAC1B,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC;QAClC,CAAC;QAED,sCAAsC;QACtC,gCAAgC;QAChC,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,GAAG,GAAG,YAAY,GAAG,GAAG,CAAC;QAC7B,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACjB,GAAG,IAAI,GAAG,CAAC;YAEX,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;gBAChD,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;oBACb,GAAG,IAAI,GAAG,CAAC;gBACf,CAAC;gBACD,GAAG,IAAI,GAAG,GAAG,IAAI,OAAO,CAAC,MAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5C,CAAC,CAAC,CAAC;QACP,CAAC;QAED,6DAA6D;QAC7D,IAAI,OAAO,GAA2B,EAAE,CAAC;QACzC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,OAAO,CAAC,OAAO,YAAY,OAAO,EAAE,CAAC;gBACrC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7D,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAC5C,CAAC;QACL,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;QACjD,CAAC;QAED,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;QAE1B,6CAA6C;QAC7C,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAChC,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;QACpC,CAAC;QAED,8DAA8D;QAC9D,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ;eAC7C,CAAC,CAAC,OAAO,CAAC,IAAI,YAAY,cAAc,CAAC;eACzC,CAAC,CAAC,OAAO,CAAC,IAAI,YAAY,IAAI,CAAC;eAC/B,CAAC,CAAC,OAAO,CAAC,IAAI,YAAY,WAAW,CAAC;eACtC,CAAC,CAAC,OAAO,CAAC,IAAI,YAAY,QAAQ,CAAC;eACnC,CAAC,CAAC,OAAO,CAAC,IAAI,YAAY,eAAe,CAAC,EAAE,CAAC;YAChD,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC;QAED,iEAAiE;QACjE,IAAI,KAA+B,CAAC;QACpC,IAAI,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACvE,KAAK,GAAG,KAAK,CAAC,GAAG,YAAY,8BAA8B,EAAE,EAAC,WAAW,EAAE,SAAS,EAAC,CAAC,CAAA;QAC1F,CAAC;aAAM,CAAC;YACJ,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QAED,OAAO,KAAK;aACP,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;aACxB,IAAI,CAAC,GAAG,CAAC,EAAE;YACR,IAAI,GAAG,EAAE,IAAI,EAAE,CAAC;gBACZ,OAAO,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;YACvC,CAAC;YAED,OAAO,KAAK,CAAC,GAAG,EAAE,OAAsB,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACX,CAAC;;AAtHD,uCAAuC;AAChC,eAAQ,GAAW,EAAE,CAAC;AAC7B,2CAA2C;AACpC,cAAO,GAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
@@ -79,6 +79,16 @@ class KRHttp {
79
79
  KRHttp._devUrl = config.devUrl;
80
80
  }
81
81
  }
82
+ /**
83
+ * Returns the active base URL (devUrl on localhost, baseUrl otherwise).
84
+ */
85
+ static getBaseUrl() {
86
+ var isDev = window.location.hostname === 'localhost' && window.location.port.startsWith('4');
87
+ if (isDev && KRHttp._devUrl) {
88
+ return KRHttp._devUrl;
89
+ }
90
+ return KRHttp._baseUrl;
91
+ }
82
92
  /**
83
93
  * Make an HTTP request.
84
94
  *
@@ -97,10 +107,7 @@ class KRHttp {
97
107
  static fetch(options) {
98
108
  let url = options.url;
99
109
  var isDev = window.location.hostname === 'localhost' && window.location.port.startsWith('4');
100
- let finalBaseUrl = KRHttp._baseUrl;
101
- if (isDev && KRHttp._devUrl) {
102
- finalBaseUrl = KRHttp._devUrl;
103
- }
110
+ let finalBaseUrl = KRHttp.getBaseUrl();
104
111
  // Add on the default base url if user
105
112
  // has not provided the full url
106
113
  if (url.indexOf('http') !== 0) {
@@ -128,15 +135,7 @@ class KRHttp {
128
135
  Object.assign(headers, options.headers);
129
136
  }
130
137
  }
131
- if (!headers['Content-Type']) {
132
- headers['Content-Type'] = 'application/json';
133
- }
134
- options.headers = headers;
135
- // Default credentials to include in dev mode
136
- if (isDev && !options.credentials) {
137
- options.credentials = 'include';
138
- }
139
- // Auto-stringify plain object bodies (skip native body types)
138
+ // Auto-stringify plain object bodies and default Content-Type to JSON
140
139
  if (options.body && typeof options.body === 'object'
141
140
  && !(options.body instanceof ReadableStream)
142
141
  && !(options.body instanceof Blob)
@@ -144,6 +143,14 @@ class KRHttp {
144
143
  && !(options.body instanceof FormData)
145
144
  && !(options.body instanceof URLSearchParams)) {
146
145
  options.body = JSON.stringify(options.body);
146
+ if (!headers['Content-Type']) {
147
+ headers['Content-Type'] = 'application/json';
148
+ }
149
+ }
150
+ options.headers = headers;
151
+ // Default credentials to include in dev mode
152
+ if (isDev && !options.credentials) {
153
+ options.credentials = 'include';
147
154
  }
148
155
  // User and Customer apis require CSRF tokens on non-GET requests
149
156
  let token;
@@ -1 +1 @@
1
- {"version":3,"file":"krubble-http.bundled.js","sources":["http.js"],"sourcesContent":["/**\n * @kodaris/krubble-http\n *\n * HTTP client for making API requests with automatic base URL handling\n * and Kodaris API conveniences (CSRF tokens, credentials).\n *\n * ## Usage\n *\n * ### Web App (UMD)\n * ```html\n * <script src=\"krubble-http.umd.js\"></script>\n * <script>\n * // Configure once at startup\n * kr.http.configure({\n * baseUrl: 'https://kodaris.com',\n * devUrl: 'https://localhost:4201'\n * });\n *\n * // Make requests\n * kr.http.fetch({\n * url: '/api/system/customer/list',\n * method: 'POST',\n * body: JSON.stringify({ page: 0, size: 20 })\n * })\n * .then(response => response.json())\n * .then(data => console.log(data));\n * </script>\n * ```\n *\n * ### Angular / ESM\n * ```typescript\n * // app.config.ts - configure once at startup\n * import { KRHttp } from '@kodaris/krubble-http';\n *\n * KRHttp.configure({\n * baseUrl: 'https://kodaris.com',\n * devUrl: 'https://localhost:4201'\n * });\n *\n * // In a service or component\n * import { KRHttp } from '@kodaris/krubble-http';\n *\n * getCustomers() {\n * return KRHttp.fetch({\n * url: '/api/system/customer/list',\n * method: 'POST',\n * body: JSON.stringify({ page: 0, size: 20 })\n * })\n * .then(response => response.json());\n * }\n * ```\n *\n * ## URL Resolution\n * - On localhost: uses `devUrl` if configured, otherwise `baseUrl`\n * - On production: always uses `baseUrl`\n * - If URL starts with 'http', it's used as-is (no base URL prepended)\n */\n/**\n * HTTP client with static methods for making API requests.\n * Automatically handles base URL resolution and Kodaris API conveniences.\n */\nexport class KRHttp {\n /**\n * Configure the HTTP client. Call once at application startup.\n *\n * @param config - Configuration options\n *\n * @example\n * KRHttp.configure({\n * baseUrl: 'https://kodaris.com',\n * devUrl: 'https://localhost:4201'\n * });\n */\n static configure(config) {\n if (config.baseUrl !== undefined) {\n KRHttp._baseUrl = config.baseUrl;\n }\n if (config.devUrl !== undefined) {\n KRHttp._devUrl = config.devUrl;\n }\n }\n /**\n * Make an HTTP request.\n *\n * @param options - Request options\n * @returns Promise resolving to the Response object\n *\n * @example\n * KRHttp.fetch({\n * url: '/api/system/customer/list',\n * method: 'POST',\n * body: JSON.stringify({ page: 0, size: 20 })\n * })\n * .then(response => response.json())\n * .then(data => console.log(data));\n */\n static fetch(options) {\n let url = options.url;\n var isDev = window.location.hostname === 'localhost' && window.location.port.startsWith('4');\n let finalBaseUrl = KRHttp._baseUrl;\n if (isDev && KRHttp._devUrl) {\n finalBaseUrl = KRHttp._devUrl;\n }\n // Add on the default base url if user\n // has not provided the full url\n if (url.indexOf('http') !== 0) {\n url = finalBaseUrl + url;\n }\n if (options.params) {\n url += '?';\n Object.keys(options.params).forEach((key, keyIdx) => {\n if (keyIdx > 0) {\n url += '&';\n }\n url += `${key}=${options.params[key]}`;\n });\n }\n // Normalize headers to a plain object so we can set defaults\n var headers = {};\n if (options.headers) {\n if (options.headers instanceof Headers) {\n options.headers.forEach((v, k) => { headers[k] = v; });\n }\n else if (Array.isArray(options.headers)) {\n options.headers.forEach(([k, v]) => { headers[k] = v; });\n }\n else {\n Object.assign(headers, options.headers);\n }\n }\n if (!headers['Content-Type']) {\n headers['Content-Type'] = 'application/json';\n }\n options.headers = headers;\n // Default credentials to include in dev mode\n if (isDev && !options.credentials) {\n options.credentials = 'include';\n }\n // Auto-stringify plain object bodies (skip native body types)\n if (options.body && typeof options.body === 'object'\n && !(options.body instanceof ReadableStream)\n && !(options.body instanceof Blob)\n && !(options.body instanceof ArrayBuffer)\n && !(options.body instanceof FormData)\n && !(options.body instanceof URLSearchParams)) {\n options.body = JSON.stringify(options.body);\n }\n // User and Customer apis require CSRF tokens on non-GET requests\n let token;\n if (url.indexOf('/api/user/') > -1 || url.indexOf('/api/customer/') > -1) {\n token = fetch(`${finalBaseUrl}/api/user/customer/authToken`, { credentials: 'include' });\n }\n else {\n token = Promise.resolve(null);\n }\n return token\n .then(res => res?.json())\n .then(res => {\n if (res?.data) {\n headers['X-CSRF-TOKEN'] = res.data;\n }\n return fetch(url, options);\n });\n }\n}\n/** Base URL for production requests */\nKRHttp._baseUrl = '';\n/** Base URL for development (localhost) */\nKRHttp._devUrl = '';\n//# sourceMappingURL=http.js.map"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"krubble-http.bundled.js","sources":["http.js"],"sourcesContent":["/**\n * @kodaris/krubble-http\n *\n * HTTP client for making API requests with automatic base URL handling\n * and Kodaris API conveniences (CSRF tokens, credentials).\n *\n * ## Usage\n *\n * ### Web App (UMD)\n * ```html\n * <script src=\"krubble-http.umd.js\"></script>\n * <script>\n * // Configure once at startup\n * kr.http.configure({\n * baseUrl: 'https://kodaris.com',\n * devUrl: 'https://localhost:4201'\n * });\n *\n * // Make requests\n * kr.http.fetch({\n * url: '/api/system/customer/list',\n * method: 'POST',\n * body: JSON.stringify({ page: 0, size: 20 })\n * })\n * .then(response => response.json())\n * .then(data => console.log(data));\n * </script>\n * ```\n *\n * ### Angular / ESM\n * ```typescript\n * // app.config.ts - configure once at startup\n * import { KRHttp } from '@kodaris/krubble-http';\n *\n * KRHttp.configure({\n * baseUrl: 'https://kodaris.com',\n * devUrl: 'https://localhost:4201'\n * });\n *\n * // In a service or component\n * import { KRHttp } from '@kodaris/krubble-http';\n *\n * getCustomers() {\n * return KRHttp.fetch({\n * url: '/api/system/customer/list',\n * method: 'POST',\n * body: JSON.stringify({ page: 0, size: 20 })\n * })\n * .then(response => response.json());\n * }\n * ```\n *\n * ## URL Resolution\n * - On localhost: uses `devUrl` if configured, otherwise `baseUrl`\n * - On production: always uses `baseUrl`\n * - If URL starts with 'http', it's used as-is (no base URL prepended)\n */\n/**\n * HTTP client with static methods for making API requests.\n * Automatically handles base URL resolution and Kodaris API conveniences.\n */\nexport class KRHttp {\n /**\n * Configure the HTTP client. Call once at application startup.\n *\n * @param config - Configuration options\n *\n * @example\n * KRHttp.configure({\n * baseUrl: 'https://kodaris.com',\n * devUrl: 'https://localhost:4201'\n * });\n */\n static configure(config) {\n if (config.baseUrl !== undefined) {\n KRHttp._baseUrl = config.baseUrl;\n }\n if (config.devUrl !== undefined) {\n KRHttp._devUrl = config.devUrl;\n }\n }\n /**\n * Returns the active base URL (devUrl on localhost, baseUrl otherwise).\n */\n static getBaseUrl() {\n var isDev = window.location.hostname === 'localhost' && window.location.port.startsWith('4');\n if (isDev && KRHttp._devUrl) {\n return KRHttp._devUrl;\n }\n return KRHttp._baseUrl;\n }\n /**\n * Make an HTTP request.\n *\n * @param options - Request options\n * @returns Promise resolving to the Response object\n *\n * @example\n * KRHttp.fetch({\n * url: '/api/system/customer/list',\n * method: 'POST',\n * body: JSON.stringify({ page: 0, size: 20 })\n * })\n * .then(response => response.json())\n * .then(data => console.log(data));\n */\n static fetch(options) {\n let url = options.url;\n var isDev = window.location.hostname === 'localhost' && window.location.port.startsWith('4');\n let finalBaseUrl = KRHttp.getBaseUrl();\n // Add on the default base url if user\n // has not provided the full url\n if (url.indexOf('http') !== 0) {\n url = finalBaseUrl + url;\n }\n if (options.params) {\n url += '?';\n Object.keys(options.params).forEach((key, keyIdx) => {\n if (keyIdx > 0) {\n url += '&';\n }\n url += `${key}=${options.params[key]}`;\n });\n }\n // Normalize headers to a plain object so we can set defaults\n var headers = {};\n if (options.headers) {\n if (options.headers instanceof Headers) {\n options.headers.forEach((v, k) => { headers[k] = v; });\n }\n else if (Array.isArray(options.headers)) {\n options.headers.forEach(([k, v]) => { headers[k] = v; });\n }\n else {\n Object.assign(headers, options.headers);\n }\n }\n // Auto-stringify plain object bodies and default Content-Type to JSON\n if (options.body && typeof options.body === 'object'\n && !(options.body instanceof ReadableStream)\n && !(options.body instanceof Blob)\n && !(options.body instanceof ArrayBuffer)\n && !(options.body instanceof FormData)\n && !(options.body instanceof URLSearchParams)) {\n options.body = JSON.stringify(options.body);\n if (!headers['Content-Type']) {\n headers['Content-Type'] = 'application/json';\n }\n }\n options.headers = headers;\n // Default credentials to include in dev mode\n if (isDev && !options.credentials) {\n options.credentials = 'include';\n }\n // User and Customer apis require CSRF tokens on non-GET requests\n let token;\n if (url.indexOf('/api/user/') > -1 || url.indexOf('/api/customer/') > -1) {\n token = fetch(`${finalBaseUrl}/api/user/customer/authToken`, { credentials: 'include' });\n }\n else {\n token = Promise.resolve(null);\n }\n return token\n .then(res => res?.json())\n .then(res => {\n if (res?.data) {\n headers['X-CSRF-TOKEN'] = res.data;\n }\n return fetch(url, options);\n });\n }\n}\n/** Base URL for production requests */\nKRHttp._baseUrl = '';\n/** Base URL for development (localhost) */\nKRHttp._devUrl = '';\n//# sourceMappingURL=http.js.map"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- class e{static configure(a){void 0!==a.baseUrl&&(e._baseUrl=a.baseUrl),void 0!==a.devUrl&&(e._devUrl=a.devUrl)}static fetch(a){let r=a.url;var t="localhost"===window.location.hostname&&window.location.port.startsWith("4");let s=e._baseUrl;t&&e._devUrl&&(s=e._devUrl),0!==r.indexOf("http")&&(r=s+r),a.params&&(r+="?",Object.keys(a.params).forEach((e,t)=>{t>0&&(r+="&"),r+=`${e}=${a.params[e]}`}));var o={};let n;return a.headers&&(a.headers instanceof Headers?a.headers.forEach((e,a)=>{o[a]=e}):Array.isArray(a.headers)?a.headers.forEach(([e,a])=>{o[e]=a}):Object.assign(o,a.headers)),o["Content-Type"]||(o["Content-Type"]="application/json"),a.headers=o,t&&!a.credentials&&(a.credentials="include"),!a.body||"object"!=typeof a.body||a.body instanceof ReadableStream||a.body instanceof Blob||a.body instanceof ArrayBuffer||a.body instanceof FormData||a.body instanceof URLSearchParams||(a.body=JSON.stringify(a.body)),n=r.indexOf("/api/user/")>-1||r.indexOf("/api/customer/")>-1?fetch(`${s}/api/user/customer/authToken`,{credentials:"include"}):Promise.resolve(null),n.then(e=>e?.json()).then(e=>(e?.data&&(o["X-CSRF-TOKEN"]=e.data),fetch(r,a)))}}e._baseUrl="",e._devUrl="";export{e as KRHttp,e as http};
1
+ class e{static configure(a){void 0!==a.baseUrl&&(e._baseUrl=a.baseUrl),void 0!==a.devUrl&&(e._devUrl=a.devUrl)}static getBaseUrl(){return"localhost"===window.location.hostname&&window.location.port.startsWith("4")&&e._devUrl?e._devUrl:e._baseUrl}static fetch(a){let t=a.url;var r="localhost"===window.location.hostname&&window.location.port.startsWith("4");let o=e.getBaseUrl();0!==t.indexOf("http")&&(t=o+t),a.params&&(t+="?",Object.keys(a.params).forEach(((e,r)=>{r>0&&(t+="&"),t+=`${e}=${a.params[e]}`})));var s={};let n;return a.headers&&(a.headers instanceof Headers?a.headers.forEach(((e,a)=>{s[a]=e})):Array.isArray(a.headers)?a.headers.forEach((([e,a])=>{s[e]=a})):Object.assign(s,a.headers)),!a.body||"object"!=typeof a.body||a.body instanceof ReadableStream||a.body instanceof Blob||a.body instanceof ArrayBuffer||a.body instanceof FormData||a.body instanceof URLSearchParams||(a.body=JSON.stringify(a.body),s["Content-Type"]||(s["Content-Type"]="application/json")),a.headers=s,r&&!a.credentials&&(a.credentials="include"),n=t.indexOf("/api/user/")>-1||t.indexOf("/api/customer/")>-1?fetch(`${o}/api/user/customer/authToken`,{credentials:"include"}):Promise.resolve(null),n.then((e=>e?.json())).then((e=>(e?.data&&(s["X-CSRF-TOKEN"]=e.data),fetch(t,a))))}}e._baseUrl="",e._devUrl="";export{e as KRHttp,e as http};
2
2
  //# sourceMappingURL=krubble-http.bundled.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"krubble-http.bundled.min.js","sources":["http.js"],"sourcesContent":["/**\n * @kodaris/krubble-http\n *\n * HTTP client for making API requests with automatic base URL handling\n * and Kodaris API conveniences (CSRF tokens, credentials).\n *\n * ## Usage\n *\n * ### Web App (UMD)\n * ```html\n * <script src=\"krubble-http.umd.js\"></script>\n * <script>\n * // Configure once at startup\n * kr.http.configure({\n * baseUrl: 'https://kodaris.com',\n * devUrl: 'https://localhost:4201'\n * });\n *\n * // Make requests\n * kr.http.fetch({\n * url: '/api/system/customer/list',\n * method: 'POST',\n * body: JSON.stringify({ page: 0, size: 20 })\n * })\n * .then(response => response.json())\n * .then(data => console.log(data));\n * </script>\n * ```\n *\n * ### Angular / ESM\n * ```typescript\n * // app.config.ts - configure once at startup\n * import { KRHttp } from '@kodaris/krubble-http';\n *\n * KRHttp.configure({\n * baseUrl: 'https://kodaris.com',\n * devUrl: 'https://localhost:4201'\n * });\n *\n * // In a service or component\n * import { KRHttp } from '@kodaris/krubble-http';\n *\n * getCustomers() {\n * return KRHttp.fetch({\n * url: '/api/system/customer/list',\n * method: 'POST',\n * body: JSON.stringify({ page: 0, size: 20 })\n * })\n * .then(response => response.json());\n * }\n * ```\n *\n * ## URL Resolution\n * - On localhost: uses `devUrl` if configured, otherwise `baseUrl`\n * - On production: always uses `baseUrl`\n * - If URL starts with 'http', it's used as-is (no base URL prepended)\n */\n/**\n * HTTP client with static methods for making API requests.\n * Automatically handles base URL resolution and Kodaris API conveniences.\n */\nexport class KRHttp {\n /**\n * Configure the HTTP client. Call once at application startup.\n *\n * @param config - Configuration options\n *\n * @example\n * KRHttp.configure({\n * baseUrl: 'https://kodaris.com',\n * devUrl: 'https://localhost:4201'\n * });\n */\n static configure(config) {\n if (config.baseUrl !== undefined) {\n KRHttp._baseUrl = config.baseUrl;\n }\n if (config.devUrl !== undefined) {\n KRHttp._devUrl = config.devUrl;\n }\n }\n /**\n * Make an HTTP request.\n *\n * @param options - Request options\n * @returns Promise resolving to the Response object\n *\n * @example\n * KRHttp.fetch({\n * url: '/api/system/customer/list',\n * method: 'POST',\n * body: JSON.stringify({ page: 0, size: 20 })\n * })\n * .then(response => response.json())\n * .then(data => console.log(data));\n */\n static fetch(options) {\n let url = options.url;\n var isDev = window.location.hostname === 'localhost' && window.location.port.startsWith('4');\n let finalBaseUrl = KRHttp._baseUrl;\n if (isDev && KRHttp._devUrl) {\n finalBaseUrl = KRHttp._devUrl;\n }\n // Add on the default base url if user\n // has not provided the full url\n if (url.indexOf('http') !== 0) {\n url = finalBaseUrl + url;\n }\n if (options.params) {\n url += '?';\n Object.keys(options.params).forEach((key, keyIdx) => {\n if (keyIdx > 0) {\n url += '&';\n }\n url += `${key}=${options.params[key]}`;\n });\n }\n // Normalize headers to a plain object so we can set defaults\n var headers = {};\n if (options.headers) {\n if (options.headers instanceof Headers) {\n options.headers.forEach((v, k) => { headers[k] = v; });\n }\n else if (Array.isArray(options.headers)) {\n options.headers.forEach(([k, v]) => { headers[k] = v; });\n }\n else {\n Object.assign(headers, options.headers);\n }\n }\n if (!headers['Content-Type']) {\n headers['Content-Type'] = 'application/json';\n }\n options.headers = headers;\n // Default credentials to include in dev mode\n if (isDev && !options.credentials) {\n options.credentials = 'include';\n }\n // Auto-stringify plain object bodies (skip native body types)\n if (options.body && typeof options.body === 'object'\n && !(options.body instanceof ReadableStream)\n && !(options.body instanceof Blob)\n && !(options.body instanceof ArrayBuffer)\n && !(options.body instanceof FormData)\n && !(options.body instanceof URLSearchParams)) {\n options.body = JSON.stringify(options.body);\n }\n // User and Customer apis require CSRF tokens on non-GET requests\n let token;\n if (url.indexOf('/api/user/') > -1 || url.indexOf('/api/customer/') > -1) {\n token = fetch(`${finalBaseUrl}/api/user/customer/authToken`, { credentials: 'include' });\n }\n else {\n token = Promise.resolve(null);\n }\n return token\n .then(res => res?.json())\n .then(res => {\n if (res?.data) {\n headers['X-CSRF-TOKEN'] = res.data;\n }\n return fetch(url, options);\n });\n }\n}\n/** Base URL for production requests */\nKRHttp._baseUrl = '';\n/** Base URL for development (localhost) */\nKRHttp._devUrl = '';\n//# sourceMappingURL=http.js.map"],"names":["KRHttp","configure","config","undefined","baseUrl","_baseUrl","devUrl","_devUrl","fetch","options","url","isDev","window","location","hostname","port","startsWith","finalBaseUrl","indexOf","params","Object","keys","forEach","key","keyIdx","headers","token","Headers","v","k","Array","isArray","assign","credentials","body","ReadableStream","Blob","ArrayBuffer","FormData","URLSearchParams","JSON","stringify","Promise","resolve","then","res","json","data"],"mappings":"AA6DO,MAAMA,EAYT,gBAAOC,CAAUC,QACUC,IAAnBD,EAAOE,UACPJ,EAAOK,SAAWH,EAAOE,cAEPD,IAAlBD,EAAOI,SACPN,EAAOO,QAAUL,EAAOI,OAEhC,CAgBA,YAAOE,CAAMC,GACT,IAAIC,EAAMD,EAAQC,IAClB,IAAIC,EAAqC,cAA7BC,OAAOC,SAASC,UAA4BF,OAAOC,SAASE,KAAKC,WAAW,KACxF,IAAIC,EAAejB,EAAOK,SACtBM,GAASX,EAAOO,UAChBU,EAAejB,EAAOO,SAIE,IAAxBG,EAAIQ,QAAQ,UACZR,EAAMO,EAAeP,GAErBD,EAAQU,SACRT,GAAO,IACPU,OAAOC,KAAKZ,EAAQU,QAAQG,QAAQ,CAACC,EAAKC,KAClCA,EAAS,IACTd,GAAO,KAEXA,GAAO,GAAGa,KAAOd,EAAQU,OAAOI,QAIxC,IAAIE,EAAU,CAAA,EA8Bd,IAAIC,EAOJ,OApCIjB,EAAQgB,UACJhB,EAAQgB,mBAAmBE,QAC3BlB,EAAQgB,QAAQH,QAAQ,CAACM,EAAGC,KAAQJ,EAAQI,GAAKD,IAE5CE,MAAMC,QAAQtB,EAAQgB,SAC3BhB,EAAQgB,QAAQH,QAAQ,EAAEO,EAAGD,MAASH,EAAQI,GAAKD,IAGnDR,OAAOY,OAAOP,EAAShB,EAAQgB,UAGlCA,EAAQ,kBACTA,EAAQ,gBAAkB,oBAE9BhB,EAAQgB,QAAUA,EAEdd,IAAUF,EAAQwB,cAClBxB,EAAQwB,YAAc,YAGtBxB,EAAQyB,MAAgC,iBAAjBzB,EAAQyB,MAC1BzB,EAAQyB,gBAAgBC,gBACxB1B,EAAQyB,gBAAgBE,MACxB3B,EAAQyB,gBAAgBG,aACxB5B,EAAQyB,gBAAgBI,UACxB7B,EAAQyB,gBAAgBK,kBAC7B9B,EAAQyB,KAAOM,KAAKC,UAAUhC,EAAQyB,OAKtCR,EADAhB,EAAIQ,QAAQ,eAAgB,GAAMR,EAAIQ,QAAQ,qBACtCV,MAAM,GAAGS,gCAA4C,CAAEgB,YAAa,YAGpES,QAAQC,QAAQ,MAErBjB,EACFkB,KAAKC,GAAOA,GAAKC,QACjBF,KAAKC,IACFA,GAAKE,OACLtB,EAAQ,gBAAkBoB,EAAIE,MAE3BvC,MAAME,EAAKD,IAE1B,EAGJT,EAAOK,SAAW,GAElBL,EAAOO,QAAU"}
1
+ {"version":3,"file":"krubble-http.bundled.min.js","sources":["http.js"],"sourcesContent":["/**\n * @kodaris/krubble-http\n *\n * HTTP client for making API requests with automatic base URL handling\n * and Kodaris API conveniences (CSRF tokens, credentials).\n *\n * ## Usage\n *\n * ### Web App (UMD)\n * ```html\n * <script src=\"krubble-http.umd.js\"></script>\n * <script>\n * // Configure once at startup\n * kr.http.configure({\n * baseUrl: 'https://kodaris.com',\n * devUrl: 'https://localhost:4201'\n * });\n *\n * // Make requests\n * kr.http.fetch({\n * url: '/api/system/customer/list',\n * method: 'POST',\n * body: JSON.stringify({ page: 0, size: 20 })\n * })\n * .then(response => response.json())\n * .then(data => console.log(data));\n * </script>\n * ```\n *\n * ### Angular / ESM\n * ```typescript\n * // app.config.ts - configure once at startup\n * import { KRHttp } from '@kodaris/krubble-http';\n *\n * KRHttp.configure({\n * baseUrl: 'https://kodaris.com',\n * devUrl: 'https://localhost:4201'\n * });\n *\n * // In a service or component\n * import { KRHttp } from '@kodaris/krubble-http';\n *\n * getCustomers() {\n * return KRHttp.fetch({\n * url: '/api/system/customer/list',\n * method: 'POST',\n * body: JSON.stringify({ page: 0, size: 20 })\n * })\n * .then(response => response.json());\n * }\n * ```\n *\n * ## URL Resolution\n * - On localhost: uses `devUrl` if configured, otherwise `baseUrl`\n * - On production: always uses `baseUrl`\n * - If URL starts with 'http', it's used as-is (no base URL prepended)\n */\n/**\n * HTTP client with static methods for making API requests.\n * Automatically handles base URL resolution and Kodaris API conveniences.\n */\nexport class KRHttp {\n /**\n * Configure the HTTP client. Call once at application startup.\n *\n * @param config - Configuration options\n *\n * @example\n * KRHttp.configure({\n * baseUrl: 'https://kodaris.com',\n * devUrl: 'https://localhost:4201'\n * });\n */\n static configure(config) {\n if (config.baseUrl !== undefined) {\n KRHttp._baseUrl = config.baseUrl;\n }\n if (config.devUrl !== undefined) {\n KRHttp._devUrl = config.devUrl;\n }\n }\n /**\n * Returns the active base URL (devUrl on localhost, baseUrl otherwise).\n */\n static getBaseUrl() {\n var isDev = window.location.hostname === 'localhost' && window.location.port.startsWith('4');\n if (isDev && KRHttp._devUrl) {\n return KRHttp._devUrl;\n }\n return KRHttp._baseUrl;\n }\n /**\n * Make an HTTP request.\n *\n * @param options - Request options\n * @returns Promise resolving to the Response object\n *\n * @example\n * KRHttp.fetch({\n * url: '/api/system/customer/list',\n * method: 'POST',\n * body: JSON.stringify({ page: 0, size: 20 })\n * })\n * .then(response => response.json())\n * .then(data => console.log(data));\n */\n static fetch(options) {\n let url = options.url;\n var isDev = window.location.hostname === 'localhost' && window.location.port.startsWith('4');\n let finalBaseUrl = KRHttp.getBaseUrl();\n // Add on the default base url if user\n // has not provided the full url\n if (url.indexOf('http') !== 0) {\n url = finalBaseUrl + url;\n }\n if (options.params) {\n url += '?';\n Object.keys(options.params).forEach((key, keyIdx) => {\n if (keyIdx > 0) {\n url += '&';\n }\n url += `${key}=${options.params[key]}`;\n });\n }\n // Normalize headers to a plain object so we can set defaults\n var headers = {};\n if (options.headers) {\n if (options.headers instanceof Headers) {\n options.headers.forEach((v, k) => { headers[k] = v; });\n }\n else if (Array.isArray(options.headers)) {\n options.headers.forEach(([k, v]) => { headers[k] = v; });\n }\n else {\n Object.assign(headers, options.headers);\n }\n }\n // Auto-stringify plain object bodies and default Content-Type to JSON\n if (options.body && typeof options.body === 'object'\n && !(options.body instanceof ReadableStream)\n && !(options.body instanceof Blob)\n && !(options.body instanceof ArrayBuffer)\n && !(options.body instanceof FormData)\n && !(options.body instanceof URLSearchParams)) {\n options.body = JSON.stringify(options.body);\n if (!headers['Content-Type']) {\n headers['Content-Type'] = 'application/json';\n }\n }\n options.headers = headers;\n // Default credentials to include in dev mode\n if (isDev && !options.credentials) {\n options.credentials = 'include';\n }\n // User and Customer apis require CSRF tokens on non-GET requests\n let token;\n if (url.indexOf('/api/user/') > -1 || url.indexOf('/api/customer/') > -1) {\n token = fetch(`${finalBaseUrl}/api/user/customer/authToken`, { credentials: 'include' });\n }\n else {\n token = Promise.resolve(null);\n }\n return token\n .then(res => res?.json())\n .then(res => {\n if (res?.data) {\n headers['X-CSRF-TOKEN'] = res.data;\n }\n return fetch(url, options);\n });\n }\n}\n/** Base URL for production requests */\nKRHttp._baseUrl = '';\n/** Base URL for development (localhost) */\nKRHttp._devUrl = '';\n//# sourceMappingURL=http.js.map"],"names":["KRHttp","configure","config","undefined","baseUrl","_baseUrl","devUrl","_devUrl","getBaseUrl","window","location","hostname","port","startsWith","fetch","options","url","isDev","finalBaseUrl","indexOf","params","Object","keys","forEach","key","keyIdx","headers","token","Headers","v","k","Array","isArray","assign","body","ReadableStream","Blob","ArrayBuffer","FormData","URLSearchParams","JSON","stringify","credentials","Promise","resolve","then","res","json","data"],"mappings":"AA6DO,MAAMA,EAYT,gBAAOC,CAAUC,QACUC,IAAnBD,EAAOE,UACPJ,EAAOK,SAAWH,EAAOE,cAEPD,IAAlBD,EAAOI,SACPN,EAAOO,QAAUL,EAAOI,OAEhC,CAIA,iBAAOE,GAEH,MADyC,cAA7BC,OAAOC,SAASC,UAA4BF,OAAOC,SAASE,KAAKC,WAAW,MAC3Eb,EAAOO,QACTP,EAAOO,QAEXP,EAAOK,QAClB,CAgBA,YAAOS,CAAMC,GACT,IAAIC,EAAMD,EAAQC,IAClB,IAAIC,EAAqC,cAA7BR,OAAOC,SAASC,UAA4BF,OAAOC,SAASE,KAAKC,WAAW,KACxF,IAAIK,EAAelB,EAAOQ,aAGE,IAAxBQ,EAAIG,QAAQ,UACZH,EAAME,EAAeF,GAErBD,EAAQK,SACRJ,GAAO,IACPK,OAAOC,KAAKP,EAAQK,QAAQG,SAAQ,CAACC,EAAKC,KAClCA,EAAS,IACTT,GAAO,KAEXA,GAAO,GAAGQ,KAAOT,EAAQK,OAAOI,IAAM,KAI9C,IAAIE,EAAU,CAAA,EA8Bd,IAAIC,EAOJ,OApCIZ,EAAQW,UACJX,EAAQW,mBAAmBE,QAC3Bb,EAAQW,QAAQH,SAAQ,CAACM,EAAGC,KAAQJ,EAAQI,GAAKD,CAAC,IAE7CE,MAAMC,QAAQjB,EAAQW,SAC3BX,EAAQW,QAAQH,SAAQ,EAAEO,EAAGD,MAASH,EAAQI,GAAKD,CAAC,IAGpDR,OAAOY,OAAOP,EAASX,EAAQW,WAInCX,EAAQmB,MAAgC,iBAAjBnB,EAAQmB,MAC1BnB,EAAQmB,gBAAgBC,gBACxBpB,EAAQmB,gBAAgBE,MACxBrB,EAAQmB,gBAAgBG,aACxBtB,EAAQmB,gBAAgBI,UACxBvB,EAAQmB,gBAAgBK,kBAC7BxB,EAAQmB,KAAOM,KAAKC,UAAU1B,EAAQmB,MACjCR,EAAQ,kBACTA,EAAQ,gBAAkB,qBAGlCX,EAAQW,QAAUA,EAEdT,IAAUF,EAAQ2B,cAClB3B,EAAQ2B,YAAc,WAKtBf,EADAX,EAAIG,QAAQ,eAAgB,GAAMH,EAAIG,QAAQ,qBACtCL,MAAM,GAAGI,gCAA4C,CAAEwB,YAAa,YAGpEC,QAAQC,QAAQ,MAErBjB,EACFkB,MAAKC,GAAOA,GAAKC,SACjBF,MAAKC,IACFA,GAAKE,OACLtB,EAAQ,gBAAkBoB,EAAIE,MAE3BlC,MAAME,EAAKD,KAE1B,EAGJf,EAAOK,SAAW,GAElBL,EAAOO,QAAU"}
@@ -85,6 +85,16 @@
85
85
  KRHttp._devUrl = config.devUrl;
86
86
  }
87
87
  }
88
+ /**
89
+ * Returns the active base URL (devUrl on localhost, baseUrl otherwise).
90
+ */
91
+ static getBaseUrl() {
92
+ var isDev = window.location.hostname === 'localhost' && window.location.port.startsWith('4');
93
+ if (isDev && KRHttp._devUrl) {
94
+ return KRHttp._devUrl;
95
+ }
96
+ return KRHttp._baseUrl;
97
+ }
88
98
  /**
89
99
  * Make an HTTP request.
90
100
  *
@@ -103,10 +113,7 @@
103
113
  static fetch(options) {
104
114
  let url = options.url;
105
115
  var isDev = window.location.hostname === 'localhost' && window.location.port.startsWith('4');
106
- let finalBaseUrl = KRHttp._baseUrl;
107
- if (isDev && KRHttp._devUrl) {
108
- finalBaseUrl = KRHttp._devUrl;
109
- }
116
+ let finalBaseUrl = KRHttp.getBaseUrl();
110
117
  // Add on the default base url if user
111
118
  // has not provided the full url
112
119
  if (url.indexOf('http') !== 0) {
@@ -134,15 +141,7 @@
134
141
  Object.assign(headers, options.headers);
135
142
  }
136
143
  }
137
- if (!headers['Content-Type']) {
138
- headers['Content-Type'] = 'application/json';
139
- }
140
- options.headers = headers;
141
- // Default credentials to include in dev mode
142
- if (isDev && !options.credentials) {
143
- options.credentials = 'include';
144
- }
145
- // Auto-stringify plain object bodies (skip native body types)
144
+ // Auto-stringify plain object bodies and default Content-Type to JSON
146
145
  if (options.body && typeof options.body === 'object'
147
146
  && !(options.body instanceof ReadableStream)
148
147
  && !(options.body instanceof Blob)
@@ -150,6 +149,14 @@
150
149
  && !(options.body instanceof FormData)
151
150
  && !(options.body instanceof URLSearchParams)) {
152
151
  options.body = JSON.stringify(options.body);
152
+ if (!headers['Content-Type']) {
153
+ headers['Content-Type'] = 'application/json';
154
+ }
155
+ }
156
+ options.headers = headers;
157
+ // Default credentials to include in dev mode
158
+ if (isDev && !options.credentials) {
159
+ options.credentials = 'include';
153
160
  }
154
161
  // User and Customer apis require CSRF tokens on non-GET requests
155
162
  let token;
@@ -1 +1 @@
1
- {"version":3,"file":"krubble-http.umd.js","sources":["http.js"],"sourcesContent":["/**\n * @kodaris/krubble-http\n *\n * HTTP client for making API requests with automatic base URL handling\n * and Kodaris API conveniences (CSRF tokens, credentials).\n *\n * ## Usage\n *\n * ### Web App (UMD)\n * ```html\n * <script src=\"krubble-http.umd.js\"></script>\n * <script>\n * // Configure once at startup\n * kr.http.configure({\n * baseUrl: 'https://kodaris.com',\n * devUrl: 'https://localhost:4201'\n * });\n *\n * // Make requests\n * kr.http.fetch({\n * url: '/api/system/customer/list',\n * method: 'POST',\n * body: JSON.stringify({ page: 0, size: 20 })\n * })\n * .then(response => response.json())\n * .then(data => console.log(data));\n * </script>\n * ```\n *\n * ### Angular / ESM\n * ```typescript\n * // app.config.ts - configure once at startup\n * import { KRHttp } from '@kodaris/krubble-http';\n *\n * KRHttp.configure({\n * baseUrl: 'https://kodaris.com',\n * devUrl: 'https://localhost:4201'\n * });\n *\n * // In a service or component\n * import { KRHttp } from '@kodaris/krubble-http';\n *\n * getCustomers() {\n * return KRHttp.fetch({\n * url: '/api/system/customer/list',\n * method: 'POST',\n * body: JSON.stringify({ page: 0, size: 20 })\n * })\n * .then(response => response.json());\n * }\n * ```\n *\n * ## URL Resolution\n * - On localhost: uses `devUrl` if configured, otherwise `baseUrl`\n * - On production: always uses `baseUrl`\n * - If URL starts with 'http', it's used as-is (no base URL prepended)\n */\n/**\n * HTTP client with static methods for making API requests.\n * Automatically handles base URL resolution and Kodaris API conveniences.\n */\nexport class KRHttp {\n /**\n * Configure the HTTP client. Call once at application startup.\n *\n * @param config - Configuration options\n *\n * @example\n * KRHttp.configure({\n * baseUrl: 'https://kodaris.com',\n * devUrl: 'https://localhost:4201'\n * });\n */\n static configure(config) {\n if (config.baseUrl !== undefined) {\n KRHttp._baseUrl = config.baseUrl;\n }\n if (config.devUrl !== undefined) {\n KRHttp._devUrl = config.devUrl;\n }\n }\n /**\n * Make an HTTP request.\n *\n * @param options - Request options\n * @returns Promise resolving to the Response object\n *\n * @example\n * KRHttp.fetch({\n * url: '/api/system/customer/list',\n * method: 'POST',\n * body: JSON.stringify({ page: 0, size: 20 })\n * })\n * .then(response => response.json())\n * .then(data => console.log(data));\n */\n static fetch(options) {\n let url = options.url;\n var isDev = window.location.hostname === 'localhost' && window.location.port.startsWith('4');\n let finalBaseUrl = KRHttp._baseUrl;\n if (isDev && KRHttp._devUrl) {\n finalBaseUrl = KRHttp._devUrl;\n }\n // Add on the default base url if user\n // has not provided the full url\n if (url.indexOf('http') !== 0) {\n url = finalBaseUrl + url;\n }\n if (options.params) {\n url += '?';\n Object.keys(options.params).forEach((key, keyIdx) => {\n if (keyIdx > 0) {\n url += '&';\n }\n url += `${key}=${options.params[key]}`;\n });\n }\n // Normalize headers to a plain object so we can set defaults\n var headers = {};\n if (options.headers) {\n if (options.headers instanceof Headers) {\n options.headers.forEach((v, k) => { headers[k] = v; });\n }\n else if (Array.isArray(options.headers)) {\n options.headers.forEach(([k, v]) => { headers[k] = v; });\n }\n else {\n Object.assign(headers, options.headers);\n }\n }\n if (!headers['Content-Type']) {\n headers['Content-Type'] = 'application/json';\n }\n options.headers = headers;\n // Default credentials to include in dev mode\n if (isDev && !options.credentials) {\n options.credentials = 'include';\n }\n // Auto-stringify plain object bodies (skip native body types)\n if (options.body && typeof options.body === 'object'\n && !(options.body instanceof ReadableStream)\n && !(options.body instanceof Blob)\n && !(options.body instanceof ArrayBuffer)\n && !(options.body instanceof FormData)\n && !(options.body instanceof URLSearchParams)) {\n options.body = JSON.stringify(options.body);\n }\n // User and Customer apis require CSRF tokens on non-GET requests\n let token;\n if (url.indexOf('/api/user/') > -1 || url.indexOf('/api/customer/') > -1) {\n token = fetch(`${finalBaseUrl}/api/user/customer/authToken`, { credentials: 'include' });\n }\n else {\n token = Promise.resolve(null);\n }\n return token\n .then(res => res?.json())\n .then(res => {\n if (res?.data) {\n headers['X-CSRF-TOKEN'] = res.data;\n }\n return fetch(url, options);\n });\n }\n}\n/** Base URL for production requests */\nKRHttp._baseUrl = '';\n/** Base URL for development (localhost) */\nKRHttp._devUrl = '';\n//# sourceMappingURL=http.js.map"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"krubble-http.umd.js","sources":["http.js"],"sourcesContent":["/**\n * @kodaris/krubble-http\n *\n * HTTP client for making API requests with automatic base URL handling\n * and Kodaris API conveniences (CSRF tokens, credentials).\n *\n * ## Usage\n *\n * ### Web App (UMD)\n * ```html\n * <script src=\"krubble-http.umd.js\"></script>\n * <script>\n * // Configure once at startup\n * kr.http.configure({\n * baseUrl: 'https://kodaris.com',\n * devUrl: 'https://localhost:4201'\n * });\n *\n * // Make requests\n * kr.http.fetch({\n * url: '/api/system/customer/list',\n * method: 'POST',\n * body: JSON.stringify({ page: 0, size: 20 })\n * })\n * .then(response => response.json())\n * .then(data => console.log(data));\n * </script>\n * ```\n *\n * ### Angular / ESM\n * ```typescript\n * // app.config.ts - configure once at startup\n * import { KRHttp } from '@kodaris/krubble-http';\n *\n * KRHttp.configure({\n * baseUrl: 'https://kodaris.com',\n * devUrl: 'https://localhost:4201'\n * });\n *\n * // In a service or component\n * import { KRHttp } from '@kodaris/krubble-http';\n *\n * getCustomers() {\n * return KRHttp.fetch({\n * url: '/api/system/customer/list',\n * method: 'POST',\n * body: JSON.stringify({ page: 0, size: 20 })\n * })\n * .then(response => response.json());\n * }\n * ```\n *\n * ## URL Resolution\n * - On localhost: uses `devUrl` if configured, otherwise `baseUrl`\n * - On production: always uses `baseUrl`\n * - If URL starts with 'http', it's used as-is (no base URL prepended)\n */\n/**\n * HTTP client with static methods for making API requests.\n * Automatically handles base URL resolution and Kodaris API conveniences.\n */\nexport class KRHttp {\n /**\n * Configure the HTTP client. Call once at application startup.\n *\n * @param config - Configuration options\n *\n * @example\n * KRHttp.configure({\n * baseUrl: 'https://kodaris.com',\n * devUrl: 'https://localhost:4201'\n * });\n */\n static configure(config) {\n if (config.baseUrl !== undefined) {\n KRHttp._baseUrl = config.baseUrl;\n }\n if (config.devUrl !== undefined) {\n KRHttp._devUrl = config.devUrl;\n }\n }\n /**\n * Returns the active base URL (devUrl on localhost, baseUrl otherwise).\n */\n static getBaseUrl() {\n var isDev = window.location.hostname === 'localhost' && window.location.port.startsWith('4');\n if (isDev && KRHttp._devUrl) {\n return KRHttp._devUrl;\n }\n return KRHttp._baseUrl;\n }\n /**\n * Make an HTTP request.\n *\n * @param options - Request options\n * @returns Promise resolving to the Response object\n *\n * @example\n * KRHttp.fetch({\n * url: '/api/system/customer/list',\n * method: 'POST',\n * body: JSON.stringify({ page: 0, size: 20 })\n * })\n * .then(response => response.json())\n * .then(data => console.log(data));\n */\n static fetch(options) {\n let url = options.url;\n var isDev = window.location.hostname === 'localhost' && window.location.port.startsWith('4');\n let finalBaseUrl = KRHttp.getBaseUrl();\n // Add on the default base url if user\n // has not provided the full url\n if (url.indexOf('http') !== 0) {\n url = finalBaseUrl + url;\n }\n if (options.params) {\n url += '?';\n Object.keys(options.params).forEach((key, keyIdx) => {\n if (keyIdx > 0) {\n url += '&';\n }\n url += `${key}=${options.params[key]}`;\n });\n }\n // Normalize headers to a plain object so we can set defaults\n var headers = {};\n if (options.headers) {\n if (options.headers instanceof Headers) {\n options.headers.forEach((v, k) => { headers[k] = v; });\n }\n else if (Array.isArray(options.headers)) {\n options.headers.forEach(([k, v]) => { headers[k] = v; });\n }\n else {\n Object.assign(headers, options.headers);\n }\n }\n // Auto-stringify plain object bodies and default Content-Type to JSON\n if (options.body && typeof options.body === 'object'\n && !(options.body instanceof ReadableStream)\n && !(options.body instanceof Blob)\n && !(options.body instanceof ArrayBuffer)\n && !(options.body instanceof FormData)\n && !(options.body instanceof URLSearchParams)) {\n options.body = JSON.stringify(options.body);\n if (!headers['Content-Type']) {\n headers['Content-Type'] = 'application/json';\n }\n }\n options.headers = headers;\n // Default credentials to include in dev mode\n if (isDev && !options.credentials) {\n options.credentials = 'include';\n }\n // User and Customer apis require CSRF tokens on non-GET requests\n let token;\n if (url.indexOf('/api/user/') > -1 || url.indexOf('/api/customer/') > -1) {\n token = fetch(`${finalBaseUrl}/api/user/customer/authToken`, { credentials: 'include' });\n }\n else {\n token = Promise.resolve(null);\n }\n return token\n .then(res => res?.json())\n .then(res => {\n if (res?.data) {\n headers['X-CSRF-TOKEN'] = res.data;\n }\n return fetch(url, options);\n });\n }\n}\n/** Base URL for production requests */\nKRHttp._baseUrl = '';\n/** Base URL for development (localhost) */\nKRHttp._devUrl = '';\n//# sourceMappingURL=http.js.map"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).kr=e.kr||{})}(this,function(e){"use strict";class t{static configure(e){void 0!==e.baseUrl&&(t._baseUrl=e.baseUrl),void 0!==e.devUrl&&(t._devUrl=e.devUrl)}static fetch(e){let a=e.url;var o="localhost"===window.location.hostname&&window.location.port.startsWith("4");let r=t._baseUrl;o&&t._devUrl&&(r=t._devUrl),0!==a.indexOf("http")&&(a=r+a),e.params&&(a+="?",Object.keys(e.params).forEach((t,o)=>{o>0&&(a+="&"),a+=`${t}=${e.params[t]}`}));var s={};let n;return e.headers&&(e.headers instanceof Headers?e.headers.forEach((e,t)=>{s[t]=e}):Array.isArray(e.headers)?e.headers.forEach(([e,t])=>{s[e]=t}):Object.assign(s,e.headers)),s["Content-Type"]||(s["Content-Type"]="application/json"),e.headers=s,o&&!e.credentials&&(e.credentials="include"),!e.body||"object"!=typeof e.body||e.body instanceof ReadableStream||e.body instanceof Blob||e.body instanceof ArrayBuffer||e.body instanceof FormData||e.body instanceof URLSearchParams||(e.body=JSON.stringify(e.body)),n=a.indexOf("/api/user/")>-1||a.indexOf("/api/customer/")>-1?fetch(`${r}/api/user/customer/authToken`,{credentials:"include"}):Promise.resolve(null),n.then(e=>e?.json()).then(t=>(t?.data&&(s["X-CSRF-TOKEN"]=t.data),fetch(a,e)))}}t._baseUrl="",t._devUrl="",e.KRHttp=t,e.http=t}),function(e){Object.keys(e).forEach(function(t){t.startsWith("KR")&&"function"==typeof e[t]&&(e[t.slice(2)]=e[t])})}(kr);
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).kr=e.kr||{})}(this,(function(e){"use strict";class t{static configure(e){void 0!==e.baseUrl&&(t._baseUrl=e.baseUrl),void 0!==e.devUrl&&(t._devUrl=e.devUrl)}static getBaseUrl(){return"localhost"===window.location.hostname&&window.location.port.startsWith("4")&&t._devUrl?t._devUrl:t._baseUrl}static fetch(e){let a=e.url;var o="localhost"===window.location.hostname&&window.location.port.startsWith("4");let r=t.getBaseUrl();0!==a.indexOf("http")&&(a=r+a),e.params&&(a+="?",Object.keys(e.params).forEach(((t,o)=>{o>0&&(a+="&"),a+=`${t}=${e.params[t]}`})));var s={};let n;return e.headers&&(e.headers instanceof Headers?e.headers.forEach(((e,t)=>{s[t]=e})):Array.isArray(e.headers)?e.headers.forEach((([e,t])=>{s[e]=t})):Object.assign(s,e.headers)),!e.body||"object"!=typeof e.body||e.body instanceof ReadableStream||e.body instanceof Blob||e.body instanceof ArrayBuffer||e.body instanceof FormData||e.body instanceof URLSearchParams||(e.body=JSON.stringify(e.body),s["Content-Type"]||(s["Content-Type"]="application/json")),e.headers=s,o&&!e.credentials&&(e.credentials="include"),n=a.indexOf("/api/user/")>-1||a.indexOf("/api/customer/")>-1?fetch(`${r}/api/user/customer/authToken`,{credentials:"include"}):Promise.resolve(null),n.then((e=>e?.json())).then((t=>(t?.data&&(s["X-CSRF-TOKEN"]=t.data),fetch(a,e))))}}t._baseUrl="",t._devUrl="",e.KRHttp=t,e.http=t})),function(e){Object.keys(e).forEach((function(t){t.startsWith("KR")&&"function"==typeof e[t]&&(e[t.slice(2)]=e[t])}))}(kr);
2
2
  //# sourceMappingURL=krubble-http.umd.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"krubble-http.umd.min.js","sources":["http.js"],"sourcesContent":["/**\n * @kodaris/krubble-http\n *\n * HTTP client for making API requests with automatic base URL handling\n * and Kodaris API conveniences (CSRF tokens, credentials).\n *\n * ## Usage\n *\n * ### Web App (UMD)\n * ```html\n * <script src=\"krubble-http.umd.js\"></script>\n * <script>\n * // Configure once at startup\n * kr.http.configure({\n * baseUrl: 'https://kodaris.com',\n * devUrl: 'https://localhost:4201'\n * });\n *\n * // Make requests\n * kr.http.fetch({\n * url: '/api/system/customer/list',\n * method: 'POST',\n * body: JSON.stringify({ page: 0, size: 20 })\n * })\n * .then(response => response.json())\n * .then(data => console.log(data));\n * </script>\n * ```\n *\n * ### Angular / ESM\n * ```typescript\n * // app.config.ts - configure once at startup\n * import { KRHttp } from '@kodaris/krubble-http';\n *\n * KRHttp.configure({\n * baseUrl: 'https://kodaris.com',\n * devUrl: 'https://localhost:4201'\n * });\n *\n * // In a service or component\n * import { KRHttp } from '@kodaris/krubble-http';\n *\n * getCustomers() {\n * return KRHttp.fetch({\n * url: '/api/system/customer/list',\n * method: 'POST',\n * body: JSON.stringify({ page: 0, size: 20 })\n * })\n * .then(response => response.json());\n * }\n * ```\n *\n * ## URL Resolution\n * - On localhost: uses `devUrl` if configured, otherwise `baseUrl`\n * - On production: always uses `baseUrl`\n * - If URL starts with 'http', it's used as-is (no base URL prepended)\n */\n/**\n * HTTP client with static methods for making API requests.\n * Automatically handles base URL resolution and Kodaris API conveniences.\n */\nexport class KRHttp {\n /**\n * Configure the HTTP client. Call once at application startup.\n *\n * @param config - Configuration options\n *\n * @example\n * KRHttp.configure({\n * baseUrl: 'https://kodaris.com',\n * devUrl: 'https://localhost:4201'\n * });\n */\n static configure(config) {\n if (config.baseUrl !== undefined) {\n KRHttp._baseUrl = config.baseUrl;\n }\n if (config.devUrl !== undefined) {\n KRHttp._devUrl = config.devUrl;\n }\n }\n /**\n * Make an HTTP request.\n *\n * @param options - Request options\n * @returns Promise resolving to the Response object\n *\n * @example\n * KRHttp.fetch({\n * url: '/api/system/customer/list',\n * method: 'POST',\n * body: JSON.stringify({ page: 0, size: 20 })\n * })\n * .then(response => response.json())\n * .then(data => console.log(data));\n */\n static fetch(options) {\n let url = options.url;\n var isDev = window.location.hostname === 'localhost' && window.location.port.startsWith('4');\n let finalBaseUrl = KRHttp._baseUrl;\n if (isDev && KRHttp._devUrl) {\n finalBaseUrl = KRHttp._devUrl;\n }\n // Add on the default base url if user\n // has not provided the full url\n if (url.indexOf('http') !== 0) {\n url = finalBaseUrl + url;\n }\n if (options.params) {\n url += '?';\n Object.keys(options.params).forEach((key, keyIdx) => {\n if (keyIdx > 0) {\n url += '&';\n }\n url += `${key}=${options.params[key]}`;\n });\n }\n // Normalize headers to a plain object so we can set defaults\n var headers = {};\n if (options.headers) {\n if (options.headers instanceof Headers) {\n options.headers.forEach((v, k) => { headers[k] = v; });\n }\n else if (Array.isArray(options.headers)) {\n options.headers.forEach(([k, v]) => { headers[k] = v; });\n }\n else {\n Object.assign(headers, options.headers);\n }\n }\n if (!headers['Content-Type']) {\n headers['Content-Type'] = 'application/json';\n }\n options.headers = headers;\n // Default credentials to include in dev mode\n if (isDev && !options.credentials) {\n options.credentials = 'include';\n }\n // Auto-stringify plain object bodies (skip native body types)\n if (options.body && typeof options.body === 'object'\n && !(options.body instanceof ReadableStream)\n && !(options.body instanceof Blob)\n && !(options.body instanceof ArrayBuffer)\n && !(options.body instanceof FormData)\n && !(options.body instanceof URLSearchParams)) {\n options.body = JSON.stringify(options.body);\n }\n // User and Customer apis require CSRF tokens on non-GET requests\n let token;\n if (url.indexOf('/api/user/') > -1 || url.indexOf('/api/customer/') > -1) {\n token = fetch(`${finalBaseUrl}/api/user/customer/authToken`, { credentials: 'include' });\n }\n else {\n token = Promise.resolve(null);\n }\n return token\n .then(res => res?.json())\n .then(res => {\n if (res?.data) {\n headers['X-CSRF-TOKEN'] = res.data;\n }\n return fetch(url, options);\n });\n }\n}\n/** Base URL for production requests */\nKRHttp._baseUrl = '';\n/** Base URL for development (localhost) */\nKRHttp._devUrl = '';\n//# sourceMappingURL=http.js.map"],"names":["KRHttp","configure","config","undefined","baseUrl","_baseUrl","devUrl","_devUrl","fetch","options","url","isDev","window","location","hostname","port","startsWith","finalBaseUrl","indexOf","params","Object","keys","forEach","key","keyIdx","headers","token","Headers","v","k","Array","isArray","assign","credentials","body","ReadableStream","Blob","ArrayBuffer","FormData","URLSearchParams","JSON","stringify","Promise","resolve","then","res","json","data"],"mappings":"+OA6DO,MAAMA,EAYT,gBAAOC,CAAUC,QACUC,IAAnBD,EAAOE,UACPJ,EAAOK,SAAWH,EAAOE,cAEPD,IAAlBD,EAAOI,SACPN,EAAOO,QAAUL,EAAOI,OAEhC,CAgBA,YAAOE,CAAMC,GACT,IAAIC,EAAMD,EAAQC,IAClB,IAAIC,EAAqC,cAA7BC,OAAOC,SAASC,UAA4BF,OAAOC,SAASE,KAAKC,WAAW,KACxF,IAAIC,EAAejB,EAAOK,SACtBM,GAASX,EAAOO,UAChBU,EAAejB,EAAOO,SAIE,IAAxBG,EAAIQ,QAAQ,UACZR,EAAMO,EAAeP,GAErBD,EAAQU,SACRT,GAAO,IACPU,OAAOC,KAAKZ,EAAQU,QAAQG,QAAQ,CAACC,EAAKC,KAClCA,EAAS,IACTd,GAAO,KAEXA,GAAO,GAAGa,KAAOd,EAAQU,OAAOI,QAIxC,IAAIE,EAAU,CAAA,EA8Bd,IAAIC,EAOJ,OApCIjB,EAAQgB,UACJhB,EAAQgB,mBAAmBE,QAC3BlB,EAAQgB,QAAQH,QAAQ,CAACM,EAAGC,KAAQJ,EAAQI,GAAKD,IAE5CE,MAAMC,QAAQtB,EAAQgB,SAC3BhB,EAAQgB,QAAQH,QAAQ,EAAEO,EAAGD,MAASH,EAAQI,GAAKD,IAGnDR,OAAOY,OAAOP,EAAShB,EAAQgB,UAGlCA,EAAQ,kBACTA,EAAQ,gBAAkB,oBAE9BhB,EAAQgB,QAAUA,EAEdd,IAAUF,EAAQwB,cAClBxB,EAAQwB,YAAc,YAGtBxB,EAAQyB,MAAgC,iBAAjBzB,EAAQyB,MAC1BzB,EAAQyB,gBAAgBC,gBACxB1B,EAAQyB,gBAAgBE,MACxB3B,EAAQyB,gBAAgBG,aACxB5B,EAAQyB,gBAAgBI,UACxB7B,EAAQyB,gBAAgBK,kBAC7B9B,EAAQyB,KAAOM,KAAKC,UAAUhC,EAAQyB,OAKtCR,EADAhB,EAAIQ,QAAQ,eAAgB,GAAMR,EAAIQ,QAAQ,qBACtCV,MAAM,GAAGS,gCAA4C,CAAEgB,YAAa,YAGpES,QAAQC,QAAQ,MAErBjB,EACFkB,KAAKC,GAAOA,GAAKC,QACjBF,KAAKC,IACFA,GAAKE,OACLtB,EAAQ,gBAAkBoB,EAAIE,MAE3BvC,MAAME,EAAKD,IAE1B,EAGJT,EAAOK,SAAW,GAElBL,EAAOO,QAAU"}
1
+ {"version":3,"file":"krubble-http.umd.min.js","sources":["http.js"],"sourcesContent":["/**\n * @kodaris/krubble-http\n *\n * HTTP client for making API requests with automatic base URL handling\n * and Kodaris API conveniences (CSRF tokens, credentials).\n *\n * ## Usage\n *\n * ### Web App (UMD)\n * ```html\n * <script src=\"krubble-http.umd.js\"></script>\n * <script>\n * // Configure once at startup\n * kr.http.configure({\n * baseUrl: 'https://kodaris.com',\n * devUrl: 'https://localhost:4201'\n * });\n *\n * // Make requests\n * kr.http.fetch({\n * url: '/api/system/customer/list',\n * method: 'POST',\n * body: JSON.stringify({ page: 0, size: 20 })\n * })\n * .then(response => response.json())\n * .then(data => console.log(data));\n * </script>\n * ```\n *\n * ### Angular / ESM\n * ```typescript\n * // app.config.ts - configure once at startup\n * import { KRHttp } from '@kodaris/krubble-http';\n *\n * KRHttp.configure({\n * baseUrl: 'https://kodaris.com',\n * devUrl: 'https://localhost:4201'\n * });\n *\n * // In a service or component\n * import { KRHttp } from '@kodaris/krubble-http';\n *\n * getCustomers() {\n * return KRHttp.fetch({\n * url: '/api/system/customer/list',\n * method: 'POST',\n * body: JSON.stringify({ page: 0, size: 20 })\n * })\n * .then(response => response.json());\n * }\n * ```\n *\n * ## URL Resolution\n * - On localhost: uses `devUrl` if configured, otherwise `baseUrl`\n * - On production: always uses `baseUrl`\n * - If URL starts with 'http', it's used as-is (no base URL prepended)\n */\n/**\n * HTTP client with static methods for making API requests.\n * Automatically handles base URL resolution and Kodaris API conveniences.\n */\nexport class KRHttp {\n /**\n * Configure the HTTP client. Call once at application startup.\n *\n * @param config - Configuration options\n *\n * @example\n * KRHttp.configure({\n * baseUrl: 'https://kodaris.com',\n * devUrl: 'https://localhost:4201'\n * });\n */\n static configure(config) {\n if (config.baseUrl !== undefined) {\n KRHttp._baseUrl = config.baseUrl;\n }\n if (config.devUrl !== undefined) {\n KRHttp._devUrl = config.devUrl;\n }\n }\n /**\n * Returns the active base URL (devUrl on localhost, baseUrl otherwise).\n */\n static getBaseUrl() {\n var isDev = window.location.hostname === 'localhost' && window.location.port.startsWith('4');\n if (isDev && KRHttp._devUrl) {\n return KRHttp._devUrl;\n }\n return KRHttp._baseUrl;\n }\n /**\n * Make an HTTP request.\n *\n * @param options - Request options\n * @returns Promise resolving to the Response object\n *\n * @example\n * KRHttp.fetch({\n * url: '/api/system/customer/list',\n * method: 'POST',\n * body: JSON.stringify({ page: 0, size: 20 })\n * })\n * .then(response => response.json())\n * .then(data => console.log(data));\n */\n static fetch(options) {\n let url = options.url;\n var isDev = window.location.hostname === 'localhost' && window.location.port.startsWith('4');\n let finalBaseUrl = KRHttp.getBaseUrl();\n // Add on the default base url if user\n // has not provided the full url\n if (url.indexOf('http') !== 0) {\n url = finalBaseUrl + url;\n }\n if (options.params) {\n url += '?';\n Object.keys(options.params).forEach((key, keyIdx) => {\n if (keyIdx > 0) {\n url += '&';\n }\n url += `${key}=${options.params[key]}`;\n });\n }\n // Normalize headers to a plain object so we can set defaults\n var headers = {};\n if (options.headers) {\n if (options.headers instanceof Headers) {\n options.headers.forEach((v, k) => { headers[k] = v; });\n }\n else if (Array.isArray(options.headers)) {\n options.headers.forEach(([k, v]) => { headers[k] = v; });\n }\n else {\n Object.assign(headers, options.headers);\n }\n }\n // Auto-stringify plain object bodies and default Content-Type to JSON\n if (options.body && typeof options.body === 'object'\n && !(options.body instanceof ReadableStream)\n && !(options.body instanceof Blob)\n && !(options.body instanceof ArrayBuffer)\n && !(options.body instanceof FormData)\n && !(options.body instanceof URLSearchParams)) {\n options.body = JSON.stringify(options.body);\n if (!headers['Content-Type']) {\n headers['Content-Type'] = 'application/json';\n }\n }\n options.headers = headers;\n // Default credentials to include in dev mode\n if (isDev && !options.credentials) {\n options.credentials = 'include';\n }\n // User and Customer apis require CSRF tokens on non-GET requests\n let token;\n if (url.indexOf('/api/user/') > -1 || url.indexOf('/api/customer/') > -1) {\n token = fetch(`${finalBaseUrl}/api/user/customer/authToken`, { credentials: 'include' });\n }\n else {\n token = Promise.resolve(null);\n }\n return token\n .then(res => res?.json())\n .then(res => {\n if (res?.data) {\n headers['X-CSRF-TOKEN'] = res.data;\n }\n return fetch(url, options);\n });\n }\n}\n/** Base URL for production requests */\nKRHttp._baseUrl = '';\n/** Base URL for development (localhost) */\nKRHttp._devUrl = '';\n//# sourceMappingURL=http.js.map"],"names":["KRHttp","configure","config","undefined","baseUrl","_baseUrl","devUrl","_devUrl","getBaseUrl","window","location","hostname","port","startsWith","fetch","options","url","isDev","finalBaseUrl","indexOf","params","Object","keys","forEach","key","keyIdx","headers","token","Headers","v","k","Array","isArray","assign","body","ReadableStream","Blob","ArrayBuffer","FormData","URLSearchParams","JSON","stringify","credentials","Promise","resolve","then","res","json","data"],"mappings":"gPA6DO,MAAMA,EAYT,gBAAOC,CAAUC,QACUC,IAAnBD,EAAOE,UACPJ,EAAOK,SAAWH,EAAOE,cAEPD,IAAlBD,EAAOI,SACPN,EAAOO,QAAUL,EAAOI,OAEhC,CAIA,iBAAOE,GAEH,MADyC,cAA7BC,OAAOC,SAASC,UAA4BF,OAAOC,SAASE,KAAKC,WAAW,MAC3Eb,EAAOO,QACTP,EAAOO,QAEXP,EAAOK,QAClB,CAgBA,YAAOS,CAAMC,GACT,IAAIC,EAAMD,EAAQC,IAClB,IAAIC,EAAqC,cAA7BR,OAAOC,SAASC,UAA4BF,OAAOC,SAASE,KAAKC,WAAW,KACxF,IAAIK,EAAelB,EAAOQ,aAGE,IAAxBQ,EAAIG,QAAQ,UACZH,EAAME,EAAeF,GAErBD,EAAQK,SACRJ,GAAO,IACPK,OAAOC,KAAKP,EAAQK,QAAQG,SAAQ,CAACC,EAAKC,KAClCA,EAAS,IACTT,GAAO,KAEXA,GAAO,GAAGQ,KAAOT,EAAQK,OAAOI,IAAM,KAI9C,IAAIE,EAAU,CAAA,EA8Bd,IAAIC,EAOJ,OApCIZ,EAAQW,UACJX,EAAQW,mBAAmBE,QAC3Bb,EAAQW,QAAQH,SAAQ,CAACM,EAAGC,KAAQJ,EAAQI,GAAKD,CAAC,IAE7CE,MAAMC,QAAQjB,EAAQW,SAC3BX,EAAQW,QAAQH,SAAQ,EAAEO,EAAGD,MAASH,EAAQI,GAAKD,CAAC,IAGpDR,OAAOY,OAAOP,EAASX,EAAQW,WAInCX,EAAQmB,MAAgC,iBAAjBnB,EAAQmB,MAC1BnB,EAAQmB,gBAAgBC,gBACxBpB,EAAQmB,gBAAgBE,MACxBrB,EAAQmB,gBAAgBG,aACxBtB,EAAQmB,gBAAgBI,UACxBvB,EAAQmB,gBAAgBK,kBAC7BxB,EAAQmB,KAAOM,KAAKC,UAAU1B,EAAQmB,MACjCR,EAAQ,kBACTA,EAAQ,gBAAkB,qBAGlCX,EAAQW,QAAUA,EAEdT,IAAUF,EAAQ2B,cAClB3B,EAAQ2B,YAAc,WAKtBf,EADAX,EAAIG,QAAQ,eAAgB,GAAMH,EAAIG,QAAQ,qBACtCL,MAAM,GAAGI,gCAA4C,CAAEwB,YAAa,YAGpEC,QAAQC,QAAQ,MAErBjB,EACFkB,MAAKC,GAAOA,GAAKC,SACjBF,MAAKC,IACFA,GAAKE,OACLtB,EAAQ,gBAAkBoB,EAAIE,MAE3BlC,MAAME,EAAKD,KAE1B,EAGJf,EAAOK,SAAW,GAElBL,EAAOO,QAAU"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kodaris/krubble-http",
3
- "version": "1.0.10",
3
+ "version": "1.0.12",
4
4
  "description": "Krubble HTTP client",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -13,9 +13,12 @@
13
13
  }
14
14
  },
15
15
  "files": [
16
- "dist"
16
+ "dist",
17
+ "breaking-changes.json",
18
+ "postinstall.cjs"
17
19
  ],
18
20
  "scripts": {
21
+ "postinstall": "node postinstall.cjs",
19
22
  "build": "npm run clean && tsc && npm run build:bundle",
20
23
  "build:bundle": "rollup -c",
21
24
  "clean": "rm -rf dist",
@@ -34,5 +37,8 @@
34
37
  "api",
35
38
  "fetch"
36
39
  ],
37
- "license": "SEE LICENSE IN LICENSE"
40
+ "license": "SEE LICENSE IN LICENSE",
41
+ "publishConfig": {
42
+ "access": "public"
43
+ }
38
44
  }
@@ -0,0 +1,30 @@
1
+ try {
2
+ var fs = require('fs');
3
+ var path = require('path');
4
+ var changesFile = path.join(__dirname, 'breaking-changes.json');
5
+ var changes = JSON.parse(fs.readFileSync(changesFile, 'utf8'));
6
+
7
+ if (!changes.length) {
8
+ process.exit(0);
9
+ }
10
+
11
+ var pkg = require(path.join(__dirname, 'package.json'));
12
+ var lines = [];
13
+ lines.push('');
14
+ lines.push('========================================');
15
+ lines.push(' ' + pkg.name + ' — BREAKING CHANGES');
16
+ lines.push('========================================');
17
+
18
+ for (var i = 0; i < changes.length; i++) {
19
+ lines.push('');
20
+ lines.push(' [v' + changes[i].version + '] ' + changes[i].description);
21
+ }
22
+
23
+ lines.push('');
24
+ lines.push('========================================');
25
+ lines.push('');
26
+
27
+ console.warn(lines.join('\n'));
28
+ } catch (e) {
29
+ // Never fail the install
30
+ }