@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.
- package/breaking-changes.json +1 -0
- package/dist/http.d.ts +4 -0
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +20 -13
- package/dist/http.js.map +1 -1
- package/dist/krubble-http.bundled.js +20 -13
- package/dist/krubble-http.bundled.js.map +1 -1
- package/dist/krubble-http.bundled.min.js +1 -1
- package/dist/krubble-http.bundled.min.js.map +1 -1
- package/dist/krubble-http.umd.js +20 -13
- package/dist/krubble-http.umd.js.map +1 -1
- package/dist/krubble-http.umd.min.js +1 -1
- package/dist/krubble-http.umd.min.js.map +1 -1
- package/package.json +9 -3
- package/postinstall.cjs +30 -0
|
@@ -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
|
*
|
package/dist/http.d.ts.map
CHANGED
|
@@ -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;
|
|
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.
|
|
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
|
-
|
|
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
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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
|
|
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.
|
|
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"}
|
package/dist/krubble-http.umd.js
CHANGED
|
@@ -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.
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
}
|
package/postinstall.cjs
ADDED
|
@@ -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
|
+
}
|