@murabei-data-science/pumpwood-services 1.0.0

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.
Files changed (95) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +504 -0
  3. package/dist/example-usage.d.ts +8 -0
  4. package/dist/example-usage.d.ts.map +1 -0
  5. package/dist/example-usage.js +156 -0
  6. package/dist/example-usage.js.map +1 -0
  7. package/dist/index.d.ts +22 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +43 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/jest.setup.d.ts +2 -0
  12. package/dist/jest.setup.d.ts.map +1 -0
  13. package/dist/jest.setup.js +8 -0
  14. package/dist/jest.setup.js.map +1 -0
  15. package/dist/src/core/api-service.d.ts +58 -0
  16. package/dist/src/core/api-service.d.ts.map +1 -0
  17. package/dist/src/core/api-service.js +192 -0
  18. package/dist/src/core/api-service.js.map +1 -0
  19. package/dist/src/core/pumpwood-client.d.ts +46 -0
  20. package/dist/src/core/pumpwood-client.d.ts.map +1 -0
  21. package/dist/src/core/pumpwood-client.js +110 -0
  22. package/dist/src/core/pumpwood-client.js.map +1 -0
  23. package/dist/src/core/safe-await.d.ts +20 -0
  24. package/dist/src/core/safe-await.d.ts.map +1 -0
  25. package/dist/src/core/safe-await.js +31 -0
  26. package/dist/src/core/safe-await.js.map +1 -0
  27. package/dist/src/services/delete.d.ts +17 -0
  28. package/dist/src/services/delete.d.ts.map +1 -0
  29. package/dist/src/services/delete.js +28 -0
  30. package/dist/src/services/delete.js.map +1 -0
  31. package/dist/src/services/execute-action-file.d.ts +43 -0
  32. package/dist/src/services/execute-action-file.d.ts.map +1 -0
  33. package/dist/src/services/execute-action-file.js +50 -0
  34. package/dist/src/services/execute-action-file.js.map +1 -0
  35. package/dist/src/services/execute-action.d.ts +47 -0
  36. package/dist/src/services/execute-action.d.ts.map +1 -0
  37. package/dist/src/services/execute-action.js +54 -0
  38. package/dist/src/services/execute-action.js.map +1 -0
  39. package/dist/src/services/execute-static-action-file.d.ts +46 -0
  40. package/dist/src/services/execute-static-action-file.d.ts.map +1 -0
  41. package/dist/src/services/execute-static-action-file.js +55 -0
  42. package/dist/src/services/execute-static-action-file.js.map +1 -0
  43. package/dist/src/services/execute-static-action.d.ts +33 -0
  44. package/dist/src/services/execute-static-action.d.ts.map +1 -0
  45. package/dist/src/services/execute-static-action.js +44 -0
  46. package/dist/src/services/execute-static-action.js.map +1 -0
  47. package/dist/src/services/get-sso-token.d.ts +19 -0
  48. package/dist/src/services/get-sso-token.d.ts.map +1 -0
  49. package/dist/src/services/get-sso-token.js +58 -0
  50. package/dist/src/services/get-sso-token.js.map +1 -0
  51. package/dist/src/services/list-without-pag.d.ts +23 -0
  52. package/dist/src/services/list-without-pag.d.ts.map +1 -0
  53. package/dist/src/services/list-without-pag.js +37 -0
  54. package/dist/src/services/list-without-pag.js.map +1 -0
  55. package/dist/src/services/list.d.ts +18 -0
  56. package/dist/src/services/list.d.ts.map +1 -0
  57. package/dist/src/services/list.js +32 -0
  58. package/dist/src/services/list.js.map +1 -0
  59. package/dist/src/services/login-sso.d.ts +16 -0
  60. package/dist/src/services/login-sso.d.ts.map +1 -0
  61. package/dist/src/services/login-sso.js +50 -0
  62. package/dist/src/services/login-sso.js.map +1 -0
  63. package/dist/src/services/login.d.ts +21 -0
  64. package/dist/src/services/login.d.ts.map +1 -0
  65. package/dist/src/services/login.js +54 -0
  66. package/dist/src/services/login.js.map +1 -0
  67. package/dist/src/services/retrieve-file.d.ts +25 -0
  68. package/dist/src/services/retrieve-file.d.ts.map +1 -0
  69. package/dist/src/services/retrieve-file.js +36 -0
  70. package/dist/src/services/retrieve-file.js.map +1 -0
  71. package/dist/src/services/retrieve-options.d.ts +18 -0
  72. package/dist/src/services/retrieve-options.d.ts.map +1 -0
  73. package/dist/src/services/retrieve-options.js +29 -0
  74. package/dist/src/services/retrieve-options.js.map +1 -0
  75. package/dist/src/services/retrieve.d.ts +13 -0
  76. package/dist/src/services/retrieve.d.ts.map +1 -0
  77. package/dist/src/services/retrieve.js +26 -0
  78. package/dist/src/services/retrieve.js.map +1 -0
  79. package/dist/src/services/save.d.ts +18 -0
  80. package/dist/src/services/save.d.ts.map +1 -0
  81. package/dist/src/services/save.js +31 -0
  82. package/dist/src/services/save.js.map +1 -0
  83. package/dist/src/services/upload.d.ts +25 -0
  84. package/dist/src/services/upload.d.ts.map +1 -0
  85. package/dist/src/services/upload.js +41 -0
  86. package/dist/src/services/upload.js.map +1 -0
  87. package/dist/src/types/error.d.ts +13 -0
  88. package/dist/src/types/error.d.ts.map +1 -0
  89. package/dist/src/types/error.js +53 -0
  90. package/dist/src/types/error.js.map +1 -0
  91. package/dist/src/types/http.d.ts +42 -0
  92. package/dist/src/types/http.d.ts.map +1 -0
  93. package/dist/src/types/http.js +3 -0
  94. package/dist/src/types/http.js.map +1 -0
  95. package/package.json +34 -0
@@ -0,0 +1,22 @@
1
+ export type { IErrorDict } from "./src/types/error.js";
2
+ export { normalizeToErrorDict, isUnauthorizedError } from "./src/types/error.js";
3
+ export type { HttpMethod, IFileData, ApiServiceConfig, TokenProvider, IPumpwoodClientConfig, UnauthorizedHandler, IRetrieveOptions, ISaveOptions, ILoginResult, ILoginSSOResult, IGetSSOTokenUser, IGetSSOTokenResult } from "./src/types/http.js";
4
+ export { safeAwait } from "./src/core/safe-await.js";
5
+ export { ApiService } from "./src/core/api-service.js";
6
+ export { PumpwoodClient } from "./src/core/pumpwood-client.js";
7
+ export { ListService } from "./src/services/list.js";
8
+ export { ListWithoutPagService } from "./src/services/list-without-pag.js";
9
+ export { RetrieveService } from "./src/services/retrieve.js";
10
+ export { RetrieveOptionsService } from "./src/services/retrieve-options.js";
11
+ export { RetrieveFileService } from "./src/services/retrieve-file.js";
12
+ export { SaveService } from "./src/services/save.js";
13
+ export { DeleteService } from "./src/services/delete.js";
14
+ export { UploadFileService } from "./src/services/upload.js";
15
+ export { ExecuteActionService } from "./src/services/execute-action.js";
16
+ export { ExecuteStaticActionService } from "./src/services/execute-static-action.js";
17
+ export { ExecuteActionFileService } from "./src/services/execute-action-file.js";
18
+ export { ExecuteStaticActionFileService } from "./src/services/execute-static-action-file.js";
19
+ export { LoginService } from "./src/services/login.js";
20
+ export { LoginSSOService } from "./src/services/login-sso.js";
21
+ export { GetSSOTokenService } from "./src/services/get-sso-token.js";
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACjF,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,aAAa,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACnP,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AACrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,8BAA8B,EAAE,MAAM,8CAA8C,CAAC;AAC9F,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetSSOTokenService = exports.LoginSSOService = exports.LoginService = exports.ExecuteStaticActionFileService = exports.ExecuteActionFileService = exports.ExecuteStaticActionService = exports.ExecuteActionService = exports.UploadFileService = exports.DeleteService = exports.SaveService = exports.RetrieveFileService = exports.RetrieveOptionsService = exports.RetrieveService = exports.ListWithoutPagService = exports.ListService = exports.PumpwoodClient = exports.ApiService = exports.safeAwait = exports.isUnauthorizedError = exports.normalizeToErrorDict = void 0;
4
+ var error_js_1 = require("./src/types/error.js");
5
+ Object.defineProperty(exports, "normalizeToErrorDict", { enumerable: true, get: function () { return error_js_1.normalizeToErrorDict; } });
6
+ Object.defineProperty(exports, "isUnauthorizedError", { enumerable: true, get: function () { return error_js_1.isUnauthorizedError; } });
7
+ var safe_await_js_1 = require("./src/core/safe-await.js");
8
+ Object.defineProperty(exports, "safeAwait", { enumerable: true, get: function () { return safe_await_js_1.safeAwait; } });
9
+ var api_service_js_1 = require("./src/core/api-service.js");
10
+ Object.defineProperty(exports, "ApiService", { enumerable: true, get: function () { return api_service_js_1.ApiService; } });
11
+ var pumpwood_client_js_1 = require("./src/core/pumpwood-client.js");
12
+ Object.defineProperty(exports, "PumpwoodClient", { enumerable: true, get: function () { return pumpwood_client_js_1.PumpwoodClient; } });
13
+ var list_js_1 = require("./src/services/list.js");
14
+ Object.defineProperty(exports, "ListService", { enumerable: true, get: function () { return list_js_1.ListService; } });
15
+ var list_without_pag_js_1 = require("./src/services/list-without-pag.js");
16
+ Object.defineProperty(exports, "ListWithoutPagService", { enumerable: true, get: function () { return list_without_pag_js_1.ListWithoutPagService; } });
17
+ var retrieve_js_1 = require("./src/services/retrieve.js");
18
+ Object.defineProperty(exports, "RetrieveService", { enumerable: true, get: function () { return retrieve_js_1.RetrieveService; } });
19
+ var retrieve_options_js_1 = require("./src/services/retrieve-options.js");
20
+ Object.defineProperty(exports, "RetrieveOptionsService", { enumerable: true, get: function () { return retrieve_options_js_1.RetrieveOptionsService; } });
21
+ var retrieve_file_js_1 = require("./src/services/retrieve-file.js");
22
+ Object.defineProperty(exports, "RetrieveFileService", { enumerable: true, get: function () { return retrieve_file_js_1.RetrieveFileService; } });
23
+ var save_js_1 = require("./src/services/save.js");
24
+ Object.defineProperty(exports, "SaveService", { enumerable: true, get: function () { return save_js_1.SaveService; } });
25
+ var delete_js_1 = require("./src/services/delete.js");
26
+ Object.defineProperty(exports, "DeleteService", { enumerable: true, get: function () { return delete_js_1.DeleteService; } });
27
+ var upload_js_1 = require("./src/services/upload.js");
28
+ Object.defineProperty(exports, "UploadFileService", { enumerable: true, get: function () { return upload_js_1.UploadFileService; } });
29
+ var execute_action_js_1 = require("./src/services/execute-action.js");
30
+ Object.defineProperty(exports, "ExecuteActionService", { enumerable: true, get: function () { return execute_action_js_1.ExecuteActionService; } });
31
+ var execute_static_action_js_1 = require("./src/services/execute-static-action.js");
32
+ Object.defineProperty(exports, "ExecuteStaticActionService", { enumerable: true, get: function () { return execute_static_action_js_1.ExecuteStaticActionService; } });
33
+ var execute_action_file_js_1 = require("./src/services/execute-action-file.js");
34
+ Object.defineProperty(exports, "ExecuteActionFileService", { enumerable: true, get: function () { return execute_action_file_js_1.ExecuteActionFileService; } });
35
+ var execute_static_action_file_js_1 = require("./src/services/execute-static-action-file.js");
36
+ Object.defineProperty(exports, "ExecuteStaticActionFileService", { enumerable: true, get: function () { return execute_static_action_file_js_1.ExecuteStaticActionFileService; } });
37
+ var login_js_1 = require("./src/services/login.js");
38
+ Object.defineProperty(exports, "LoginService", { enumerable: true, get: function () { return login_js_1.LoginService; } });
39
+ var login_sso_js_1 = require("./src/services/login-sso.js");
40
+ Object.defineProperty(exports, "LoginSSOService", { enumerable: true, get: function () { return login_sso_js_1.LoginSSOService; } });
41
+ var get_sso_token_js_1 = require("./src/services/get-sso-token.js");
42
+ Object.defineProperty(exports, "GetSSOTokenService", { enumerable: true, get: function () { return get_sso_token_js_1.GetSSOTokenService; } });
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AACA,iDAAiF;AAAxE,gHAAA,oBAAoB,OAAA;AAAE,+GAAA,mBAAmB,OAAA;AAElD,0DAAqD;AAA5C,0GAAA,SAAS,OAAA;AAClB,4DAAuD;AAA9C,4GAAA,UAAU,OAAA;AACnB,oEAA+D;AAAtD,oHAAA,cAAc,OAAA;AACvB,kDAAqD;AAA5C,sGAAA,WAAW,OAAA;AACpB,0EAA2E;AAAlE,4HAAA,qBAAqB,OAAA;AAC9B,0DAA6D;AAApD,8GAAA,eAAe,OAAA;AACxB,0EAA4E;AAAnE,6HAAA,sBAAsB,OAAA;AAC/B,oEAAsE;AAA7D,uHAAA,mBAAmB,OAAA;AAC5B,kDAAqD;AAA5C,sGAAA,WAAW,OAAA;AACpB,sDAAyD;AAAhD,0GAAA,aAAa,OAAA;AACtB,sDAA6D;AAApD,8GAAA,iBAAiB,OAAA;AAC1B,sEAAwE;AAA/D,yHAAA,oBAAoB,OAAA;AAC7B,oFAAqF;AAA5E,sIAAA,0BAA0B,OAAA;AACnC,gFAAiF;AAAxE,kIAAA,wBAAwB,OAAA;AACjC,8FAA8F;AAArF,+IAAA,8BAA8B,OAAA;AACvC,oDAAuD;AAA9C,wGAAA,YAAY,OAAA;AACrB,4DAA8D;AAArD,+GAAA,eAAe,OAAA;AACxB,oEAAqE;AAA5D,sHAAA,kBAAkB,OAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=jest.setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jest.setup.d.ts","sourceRoot":"","sources":["../jest.setup.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const jest_fetch_mock_1 = __importDefault(require("jest-fetch-mock"));
7
+ jest_fetch_mock_1.default.enableMocks();
8
+ //# sourceMappingURL=jest.setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jest.setup.js","sourceRoot":"","sources":["../jest.setup.ts"],"names":[],"mappings":";;;;;AAAA,sEAAwC;AAExC,yBAAS,CAAC,WAAW,EAAE,CAAC"}
@@ -0,0 +1,58 @@
1
+ import type { HttpMethod, IFileData, ApiServiceConfig } from "../types/http.js";
2
+ export declare class ApiService {
3
+ private baseUrl;
4
+ private token;
5
+ private onUnauthorized;
6
+ /**
7
+ * Creates an instance of ApiService.
8
+ * @param {ApiServiceConfig} config - The configuration for the API service.
9
+ * @param {string} config.baseUrl - The base URL of the API.
10
+ * @param {string} config.token - The authentication token.
11
+ * @param {UnauthorizedHandler} [config.onUnauthorized] - Called when the API returns 401.
12
+ */
13
+ constructor({ baseUrl, token, onUnauthorized }: ApiServiceConfig);
14
+ private handleErrorResponse;
15
+ /**
16
+ * Performs an API request.
17
+ * @template T - The expected type of the response data.
18
+ * @param {HttpMethod} method - The HTTP method for the request.
19
+ * @param {string} endpoint - The API endpoint to call.
20
+ * @param {any} [body] - The request body for POST, PUT requests.
21
+ * @param {Record<string, string>} [queryParams] - Optional query parameters to append to the URL.
22
+ * @returns {Promise<T>} A promise that resolves with the response data.
23
+ * @throws {Error} Throws an error if the baseUrl is not set or if the API request fails.
24
+ */
25
+ request<T = any>(method: HttpMethod, endpoint: string, body?: any, queryParams?: Record<string, string>): Promise<T>;
26
+ /**
27
+ * Performs a file upload request using FormData.
28
+ * @template T - The expected type of the response data.
29
+ * @param {string} endpoint - The API endpoint to call.
30
+ * @param {FormData} formData - The FormData containing the file and other data.
31
+ * @param {Record<string, string>} [queryParams] - Optional query parameters to append to the URL.
32
+ * @returns {Promise<T>} A promise that resolves with the response data.
33
+ * @throws {Error} Throws an error if the baseUrl is not set or if the API request fails.
34
+ */
35
+ uploadRequest<T = any>(endpoint: string, formData: FormData, queryParams?: Record<string, string>): Promise<T>;
36
+ /**
37
+ * Performs a file download request.
38
+ * Returns a Blob that allows the caller to manage URL lifecycle (create/revoke).
39
+ * ⚠️ NOT SERIALIZABLE for SSR - blob must be used on the same side (client or server).
40
+ * @param {string} endpoint - The API endpoint to call.
41
+ * @param {Record<string, string>} [queryParams] - Optional query parameters to append to the URL.
42
+ * @returns {Promise<IFileData>} A promise that resolves with the file data (blob).
43
+ * @throws {Error} Throws an error if the baseUrl is not set or if the API request fails.
44
+ */
45
+ fileRequest(endpoint: string, queryParams?: Record<string, string>): Promise<IFileData>;
46
+ /**
47
+ * Performs a POST request with a JSON body and returns the binary response as a file.
48
+ * Used for actions that generate file downloads (e.g., Excel, PDF exports).
49
+ * ⚠️ NOT SERIALIZABLE for SSR - blob must be used on the same side (client or server).
50
+ * @param {string} endpoint - The API endpoint to call.
51
+ * @param {any} [body] - Optional JSON body for the POST request.
52
+ * @param {Record<string, string>} [queryParams] - Optional query parameters to append to the URL.
53
+ * @returns {Promise<IFileData>} A promise that resolves with the file data (blob).
54
+ * @throws {Error} Throws an error if the baseUrl is not set or if the API request fails.
55
+ */
56
+ postFileRequest(endpoint: string, body?: any, queryParams?: Record<string, string>): Promise<IFileData>;
57
+ }
58
+ //# sourceMappingURL=api-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-service.d.ts","sourceRoot":"","sources":["../../../src/core/api-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAuB,MAAM,kBAAkB,CAAC;AA4BrG,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,cAAc,CAAkC;IAExD;;;;;;OAMG;gBACS,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,gBAAgB;YAMlD,mBAAmB;IAQjC;;;;;;;;;OASG;IACG,OAAO,CAAC,CAAC,GAAG,GAAG,EACnB,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,GAAG,EACV,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,CAAC,CAAC;IAqCb;;;;;;;;OAQG;IACG,aAAa,CAAC,CAAC,GAAG,GAAG,EACzB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,EAClB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,CAAC,CAAC;IAqCb;;;;;;;;OAQG;IACG,WAAW,CACf,QAAQ,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,SAAS,CAAC;IAwCrB;;;;;;;;;OASG;IACG,eAAe,CACnB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,GAAG,EACV,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,SAAS,CAAC;CAyCtB"}
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ApiService = void 0;
4
+ /**
5
+ * Parses API error response body into an Error with PumpWood fields attached.
6
+ * If the body is valid JSON, all fields are copied dynamically.
7
+ * The 'message' field from JSON is stored as 'apiMessage' to avoid overwriting Error.message.
8
+ */
9
+ function parseApiError(status, statusText, errorText) {
10
+ const baseMessage = `API Error: ${status} ${statusText}`;
11
+ let error;
12
+ try {
13
+ const errorJson = JSON.parse(errorText);
14
+ const parsed = new Error(baseMessage);
15
+ Object.keys(errorJson).forEach(key => {
16
+ parsed[key === "message" ? "apiMessage" : key] = errorJson[key];
17
+ });
18
+ error = parsed;
19
+ }
20
+ catch {
21
+ error = new Error(`${baseMessage} - ${errorText}`);
22
+ }
23
+ error.status = status;
24
+ return error;
25
+ }
26
+ class ApiService {
27
+ baseUrl;
28
+ token;
29
+ onUnauthorized;
30
+ /**
31
+ * Creates an instance of ApiService.
32
+ * @param {ApiServiceConfig} config - The configuration for the API service.
33
+ * @param {string} config.baseUrl - The base URL of the API.
34
+ * @param {string} config.token - The authentication token.
35
+ * @param {UnauthorizedHandler} [config.onUnauthorized] - Called when the API returns 401.
36
+ */
37
+ constructor({ baseUrl, token, onUnauthorized }) {
38
+ this.baseUrl = baseUrl;
39
+ this.token = token;
40
+ this.onUnauthorized = onUnauthorized;
41
+ }
42
+ async handleErrorResponse(response) {
43
+ const errorText = await response.text();
44
+ if (response.status === 401 && this.onUnauthorized) {
45
+ await this.onUnauthorized();
46
+ }
47
+ throw parseApiError(response.status, response.statusText, errorText);
48
+ }
49
+ /**
50
+ * Performs an API request.
51
+ * @template T - The expected type of the response data.
52
+ * @param {HttpMethod} method - The HTTP method for the request.
53
+ * @param {string} endpoint - The API endpoint to call.
54
+ * @param {any} [body] - The request body for POST, PUT requests.
55
+ * @param {Record<string, string>} [queryParams] - Optional query parameters to append to the URL.
56
+ * @returns {Promise<T>} A promise that resolves with the response data.
57
+ * @throws {Error} Throws an error if the baseUrl is not set or if the API request fails.
58
+ */
59
+ async request(method, endpoint, body, queryParams) {
60
+ if (!this.baseUrl) {
61
+ throw new Error("ApiService: baseUrl is missing. Ensure it is provided when creating the ApiService instance.");
62
+ }
63
+ /**
64
+ * This replaces the '/' with nothing
65
+ **/
66
+ let url = `${this.baseUrl.replace(/\/$/, "")}/${endpoint.replace(/^\//, "")}`;
67
+ if (queryParams && Object.keys(queryParams).length > 0) {
68
+ const queryString = new URLSearchParams(queryParams).toString();
69
+ url = `${url}?${queryString}`;
70
+ }
71
+ const headers = {
72
+ Authorization: `Token ${this.token}`,
73
+ "Content-Type": "application/json",
74
+ };
75
+ const options = { method, headers };
76
+ if (body)
77
+ options.body = JSON.stringify(body);
78
+ const response = await fetch(url, options);
79
+ if (!response.ok) {
80
+ return this.handleErrorResponse(response);
81
+ }
82
+ return response.status === 204 ? null : await response.json();
83
+ }
84
+ /**
85
+ * Performs a file upload request using FormData.
86
+ * @template T - The expected type of the response data.
87
+ * @param {string} endpoint - The API endpoint to call.
88
+ * @param {FormData} formData - The FormData containing the file and other data.
89
+ * @param {Record<string, string>} [queryParams] - Optional query parameters to append to the URL.
90
+ * @returns {Promise<T>} A promise that resolves with the response data.
91
+ * @throws {Error} Throws an error if the baseUrl is not set or if the API request fails.
92
+ */
93
+ async uploadRequest(endpoint, formData, queryParams) {
94
+ if (!this.baseUrl) {
95
+ throw new Error("ApiService: baseUrl is missing. Ensure it is provided when creating the ApiService instance.");
96
+ }
97
+ let url = `${this.baseUrl.replace(/\/$/, "")}/${endpoint.replace(/^\//, "")}`;
98
+ if (queryParams && Object.keys(queryParams).length > 0) {
99
+ const queryString = new URLSearchParams(queryParams).toString();
100
+ url = `${url}?${queryString}`;
101
+ }
102
+ // Note: Don't set Content-Type header for FormData - browser will set it automatically with boundary
103
+ const headers = {
104
+ Authorization: `Token ${this.token}`,
105
+ };
106
+ const options = {
107
+ method: "POST",
108
+ headers,
109
+ body: formData
110
+ };
111
+ const response = await fetch(url, options);
112
+ if (!response.ok) {
113
+ return this.handleErrorResponse(response);
114
+ }
115
+ return response.status === 204 ? null : await response.json();
116
+ }
117
+ /**
118
+ * Performs a file download request.
119
+ * Returns a Blob that allows the caller to manage URL lifecycle (create/revoke).
120
+ * ⚠️ NOT SERIALIZABLE for SSR - blob must be used on the same side (client or server).
121
+ * @param {string} endpoint - The API endpoint to call.
122
+ * @param {Record<string, string>} [queryParams] - Optional query parameters to append to the URL.
123
+ * @returns {Promise<IFileData>} A promise that resolves with the file data (blob).
124
+ * @throws {Error} Throws an error if the baseUrl is not set or if the API request fails.
125
+ */
126
+ async fileRequest(endpoint, queryParams) {
127
+ if (!this.baseUrl) {
128
+ throw new Error("ApiService: baseUrl is missing. Ensure it is provided when creating the ApiService instance.");
129
+ }
130
+ let url = `${this.baseUrl.replace(/\/$/, "")}/${endpoint.replace(/^\//, "")}`;
131
+ if (queryParams && Object.keys(queryParams).length > 0) {
132
+ const queryString = new URLSearchParams(queryParams).toString();
133
+ url = `${url}?${queryString}`;
134
+ }
135
+ const headers = {
136
+ Authorization: `Token ${this.token}`,
137
+ };
138
+ const options = {
139
+ method: "GET",
140
+ headers
141
+ };
142
+ const response = await fetch(url, options);
143
+ if (!response.ok) {
144
+ return this.handleErrorResponse(response);
145
+ }
146
+ const blob = await response.blob();
147
+ return {
148
+ blob: blob,
149
+ contentType: blob.type,
150
+ };
151
+ }
152
+ /**
153
+ * Performs a POST request with a JSON body and returns the binary response as a file.
154
+ * Used for actions that generate file downloads (e.g., Excel, PDF exports).
155
+ * ⚠️ NOT SERIALIZABLE for SSR - blob must be used on the same side (client or server).
156
+ * @param {string} endpoint - The API endpoint to call.
157
+ * @param {any} [body] - Optional JSON body for the POST request.
158
+ * @param {Record<string, string>} [queryParams] - Optional query parameters to append to the URL.
159
+ * @returns {Promise<IFileData>} A promise that resolves with the file data (blob).
160
+ * @throws {Error} Throws an error if the baseUrl is not set or if the API request fails.
161
+ */
162
+ async postFileRequest(endpoint, body, queryParams) {
163
+ if (!this.baseUrl) {
164
+ throw new Error("ApiService: baseUrl is missing. Ensure it is provided when creating the ApiService instance.");
165
+ }
166
+ let url = `${this.baseUrl.replace(/\/$/, "")}/${endpoint.replace(/^\//, "")}`;
167
+ if (queryParams && Object.keys(queryParams).length > 0) {
168
+ const queryString = new URLSearchParams(queryParams).toString();
169
+ url = `${url}?${queryString}`;
170
+ }
171
+ const headers = {
172
+ Authorization: `Token ${this.token}`,
173
+ "Content-Type": "application/json",
174
+ };
175
+ const options = {
176
+ method: "POST",
177
+ headers,
178
+ ...(body !== undefined && { body: JSON.stringify(body) }),
179
+ };
180
+ const response = await fetch(url, options);
181
+ if (!response.ok) {
182
+ return this.handleErrorResponse(response);
183
+ }
184
+ const blob = await response.blob();
185
+ return {
186
+ blob,
187
+ contentType: blob.type,
188
+ };
189
+ }
190
+ }
191
+ exports.ApiService = ApiService;
192
+ //# sourceMappingURL=api-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-service.js","sourceRoot":"","sources":["../../../src/core/api-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import type { IFileData, IPumpwoodClientConfig, ILoginResult, ILoginSSOResult, IGetSSOTokenResult, IRetrieveOptions, ISaveOptions } from "../types/http.js";
2
+ import type { IErrorDict } from "../types/error.js";
3
+ export declare class PumpwoodClient {
4
+ readonly list: <T>(modelClass: string, body?: any, queryParams?: Record<string, string>) => Promise<[T | null, IErrorDict | null]>;
5
+ readonly listWithoutPag: <T>(modelClass: string, body?: any, queryParams?: Record<string, string>) => Promise<[T | null, IErrorDict | null]>;
6
+ readonly retrieve: <T>(modelClass: string, pk: number, options?: IRetrieveOptions) => Promise<[T | null, IErrorDict | null]>;
7
+ readonly retrieveFile: (modelClass: string, pk: number, fileField?: string) => Promise<[IFileData | null, IErrorDict | null]>;
8
+ readonly retrieveOptions: <T>(modelClass: string, body?: Record<string, any>) => Promise<[T | null, IErrorDict | null]>;
9
+ readonly save: <T>(modelClass: string, body: Record<any, any>, options?: ISaveOptions) => Promise<[T | null, IErrorDict | null]>;
10
+ readonly delete: <T = void>(modelClass: string, pk: number) => Promise<[T | null, IErrorDict | null]>;
11
+ readonly uploadFile: <T>(modelClass: string, file: File, jsonData: Record<string, any>, queryParams?: Record<string, string>) => Promise<[T | null, IErrorDict | null]>;
12
+ readonly executeAction: <T = any>(params: {
13
+ modelClass: string;
14
+ pk: number;
15
+ actionName: string;
16
+ parameters?: Record<string, any>;
17
+ queryParams?: Record<string, string>;
18
+ }) => Promise<[T | null, IErrorDict | null]>;
19
+ readonly executeStaticAction: <T = any>(params: {
20
+ modelClass: string;
21
+ actionName: string;
22
+ parameters?: Record<string, any>;
23
+ queryParams?: Record<string, string>;
24
+ }) => Promise<[T | null, IErrorDict | null]>;
25
+ readonly executeActionFile: (params: {
26
+ modelClass: string;
27
+ pk: number;
28
+ actionName: string;
29
+ parameters?: Record<string, any>;
30
+ queryParams?: Record<string, string>;
31
+ }) => Promise<[IFileData | null, IErrorDict | null]>;
32
+ readonly executeStaticActionFile: (params: {
33
+ modelClass: string;
34
+ actionName: string;
35
+ parameters?: Record<string, any>;
36
+ queryParams?: Record<string, string>;
37
+ }) => Promise<[IFileData | null, IErrorDict | null]>;
38
+ readonly loginWithCredentials: (credentials: {
39
+ username: string;
40
+ password: string;
41
+ }) => Promise<[ILoginResult | null, IErrorDict | null]>;
42
+ readonly loginWithSSO: (email: string) => Promise<[ILoginSSOResult | null, IErrorDict | null]>;
43
+ readonly getSSOToken: (url: string) => Promise<[IGetSSOTokenResult | null, IErrorDict | null]>;
44
+ constructor({ baseUrl, token, onUnauthorized }: IPumpwoodClientConfig);
45
+ }
46
+ //# sourceMappingURL=pumpwood-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pumpwood-client.d.ts","sourceRoot":"","sources":["../../../src/core/pumpwood-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PumpwoodClient = void 0;
4
+ const api_service_js_1 = require("./api-service.js");
5
+ const list_js_1 = require("../services/list.js");
6
+ const list_without_pag_js_1 = require("../services/list-without-pag.js");
7
+ const retrieve_js_1 = require("../services/retrieve.js");
8
+ const retrieve_options_js_1 = require("../services/retrieve-options.js");
9
+ const retrieve_file_js_1 = require("../services/retrieve-file.js");
10
+ const save_js_1 = require("../services/save.js");
11
+ const delete_js_1 = require("../services/delete.js");
12
+ const upload_js_1 = require("../services/upload.js");
13
+ const execute_action_js_1 = require("../services/execute-action.js");
14
+ const execute_static_action_js_1 = require("../services/execute-static-action.js");
15
+ const execute_action_file_js_1 = require("../services/execute-action-file.js");
16
+ const execute_static_action_file_js_1 = require("../services/execute-static-action-file.js");
17
+ const login_js_1 = require("../services/login.js");
18
+ const login_sso_js_1 = require("../services/login-sso.js");
19
+ const get_sso_token_js_1 = require("../services/get-sso-token.js");
20
+ async function resolveToken(token) {
21
+ if (typeof token === "function") {
22
+ return await token();
23
+ }
24
+ return token;
25
+ }
26
+ function optionsToQueryParams(options) {
27
+ const result = {};
28
+ for (const [key, value] of Object.entries(options)) {
29
+ if (value === undefined || value === null)
30
+ continue;
31
+ result[key] = String(value);
32
+ }
33
+ return result;
34
+ }
35
+ class PumpwoodClient {
36
+ list;
37
+ listWithoutPag;
38
+ retrieve;
39
+ retrieveFile;
40
+ retrieveOptions;
41
+ save;
42
+ delete;
43
+ uploadFile;
44
+ executeAction;
45
+ executeStaticAction;
46
+ executeActionFile;
47
+ executeStaticActionFile;
48
+ loginWithCredentials;
49
+ loginWithSSO;
50
+ getSSOToken;
51
+ constructor({ baseUrl, token, onUnauthorized }) {
52
+ const buildApi = async () => {
53
+ const resolvedToken = await resolveToken(token);
54
+ return new api_service_js_1.ApiService({
55
+ baseUrl,
56
+ token: resolvedToken,
57
+ ...(onUnauthorized !== undefined && { onUnauthorized }),
58
+ });
59
+ };
60
+ this.list = async (modelClass, body, queryParams) => {
61
+ return (0, list_js_1.ListService)(await buildApi(), modelClass, body, queryParams);
62
+ };
63
+ this.listWithoutPag = async (modelClass, body, queryParams) => {
64
+ return (0, list_without_pag_js_1.ListWithoutPagService)(await buildApi(), modelClass, body, queryParams);
65
+ };
66
+ this.retrieve = async (modelClass, pk, options) => {
67
+ const queryParams = options ? optionsToQueryParams(options) : undefined;
68
+ return (0, retrieve_js_1.RetrieveService)(await buildApi(), modelClass, pk, queryParams);
69
+ };
70
+ this.retrieveFile = async (modelClass, pk, fileField) => {
71
+ return (0, retrieve_file_js_1.RetrieveFileService)(await buildApi(), modelClass, pk, fileField);
72
+ };
73
+ this.retrieveOptions = async (modelClass, body) => {
74
+ return (0, retrieve_options_js_1.RetrieveOptionsService)(await buildApi(), modelClass, body);
75
+ };
76
+ this.save = async (modelClass, body, options) => {
77
+ const queryParams = options ? optionsToQueryParams(options) : undefined;
78
+ return (0, save_js_1.SaveService)(await buildApi(), modelClass, body, queryParams);
79
+ };
80
+ this.delete = async (modelClass, pk) => {
81
+ return (0, delete_js_1.DeleteService)(await buildApi(), modelClass, pk);
82
+ };
83
+ this.uploadFile = async (modelClass, file, jsonData, queryParams) => {
84
+ return (0, upload_js_1.UploadFileService)(await buildApi(), modelClass, file, jsonData, queryParams);
85
+ };
86
+ this.executeAction = async ({ modelClass, pk, actionName, parameters, queryParams }) => {
87
+ return (0, execute_action_js_1.ExecuteActionService)({ api: await buildApi(), modelClass, pk, actionName, ...(parameters !== undefined && { parameters }), ...(queryParams !== undefined && { queryParams }) });
88
+ };
89
+ this.executeStaticAction = async ({ modelClass, actionName, parameters, queryParams }) => {
90
+ return (0, execute_static_action_js_1.ExecuteStaticActionService)({ api: await buildApi(), modelClass, actionName, ...(parameters !== undefined && { parameters }), ...(queryParams !== undefined && { queryParams }) });
91
+ };
92
+ this.executeActionFile = async ({ modelClass, actionName, parameters, queryParams }) => {
93
+ return (0, execute_action_file_js_1.ExecuteActionFileService)({ api: await buildApi(), modelClass, actionName, ...(parameters !== undefined && { parameters }), ...(queryParams !== undefined && { queryParams }) });
94
+ };
95
+ this.executeStaticActionFile = async ({ modelClass, actionName, parameters, queryParams }) => {
96
+ return (0, execute_static_action_file_js_1.ExecuteStaticActionFileService)({ api: await buildApi(), modelClass, actionName, ...(parameters !== undefined && { parameters }), ...(queryParams !== undefined && { queryParams }) });
97
+ };
98
+ this.loginWithCredentials = async (credentials) => {
99
+ return (0, login_js_1.LoginService)(baseUrl, credentials);
100
+ };
101
+ this.loginWithSSO = async (email) => {
102
+ return (0, login_sso_js_1.LoginSSOService)(baseUrl, email);
103
+ };
104
+ this.getSSOToken = async (url) => {
105
+ return (0, get_sso_token_js_1.GetSSOTokenService)(url);
106
+ };
107
+ }
108
+ }
109
+ exports.PumpwoodClient = PumpwoodClient;
110
+ //# sourceMappingURL=pumpwood-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pumpwood-client.js","sourceRoot":"","sources":["../../../src/core/pumpwood-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { IErrorDict } from "../types/error.js";
2
+ /**
3
+ * Safely awaits a promise, returning a tuple with either the resolved data or an error dictionary.
4
+ * Errors are normalized to the PumpWood IErrorDict format.
5
+ *
6
+ * @template T - The type of the resolved promise value.
7
+ *
8
+ * @param {Promise<T>} promise - The promise to be awaited.
9
+ *
10
+ * @returns {Promise<[T, null] | [null, IErrorDict]>} A tuple where:
11
+ * - First element (`T`) is the resolved data and second is `null` (success),
12
+ * - OR first element is `null` and second (`IErrorDict`) is the normalized error (failure).
13
+ *
14
+ * @example
15
+ * const [data, error] = await safeAwait(fetchData());
16
+ * if (error) console.error("Failed:", error.message);
17
+ * else console.log("Data:", data);
18
+ */
19
+ export declare function safeAwait<T>(promise: Promise<T>): Promise<[T, null] | [null, IErrorDict]>;
20
+ //# sourceMappingURL=safe-await.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-await.d.ts","sourceRoot":"","sources":["../../../src/core/safe-await.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC/B,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAClB,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAOzC"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.safeAwait = safeAwait;
4
+ const error_js_1 = require("../types/error.js");
5
+ /**
6
+ * Safely awaits a promise, returning a tuple with either the resolved data or an error dictionary.
7
+ * Errors are normalized to the PumpWood IErrorDict format.
8
+ *
9
+ * @template T - The type of the resolved promise value.
10
+ *
11
+ * @param {Promise<T>} promise - The promise to be awaited.
12
+ *
13
+ * @returns {Promise<[T, null] | [null, IErrorDict]>} A tuple where:
14
+ * - First element (`T`) is the resolved data and second is `null` (success),
15
+ * - OR first element is `null` and second (`IErrorDict`) is the normalized error (failure).
16
+ *
17
+ * @example
18
+ * const [data, error] = await safeAwait(fetchData());
19
+ * if (error) console.error("Failed:", error.message);
20
+ * else console.log("Data:", data);
21
+ */
22
+ async function safeAwait(promise) {
23
+ try {
24
+ const data = await promise;
25
+ return [data, null];
26
+ }
27
+ catch (error) {
28
+ return [null, (0, error_js_1.normalizeToErrorDict)(error)];
29
+ }
30
+ }
31
+ //# sourceMappingURL=safe-await.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-await.js","sourceRoot":"","sources":["../../../src/core/safe-await.ts"],"names":[],"mappings":";;AAoBA,8BASC;AA5BD,gDAAyD;AAEzD;;;;;;;;;;;;;;;;GAgBG;AACI,KAAK,UAAU,SAAS,CAC7B,OAAmB;IAEnB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC;QAC3B,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,EAAE,IAAA,+BAAoB,EAAC,KAAK,CAAC,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { IErrorDict } from "../types/error.js";
2
+ import type { ApiService } from "../core/api-service.js";
3
+ /**
4
+ * Deletes an item for a given model from the API.
5
+ * @template T - The expected type of the delete response data (defaults to void).
6
+ * @param {ApiService} api - An instance of the ApiService.
7
+ * @param {string} modelClass - The name of the model class to delete from.
8
+ * @param {number} pk - The primary key of the item to delete.
9
+ * @returns {Promise<[T | null, IErrorDict | null]>} A tuple containing the response data or an error, consistent with safeAwait.
10
+ *
11
+ * @example
12
+ * const [result, error] = await DeleteService(api, "users", 123);
13
+ * if (error) console.error("Failed to delete user:", error);
14
+ * else console.log("User deleted successfully");
15
+ */
16
+ export declare const DeleteService: <T = void>(api: ApiService, modelClass: string, pk: number) => Promise<[T | null, IErrorDict | null]>;
17
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/services/delete.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGzD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,aAAa,GAAU,CAAC,GAAG,IAAI,EAC1C,KAAK,UAAU,EACf,YAAY,MAAM,EAClB,IAAI,MAAM,KACT,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC,CAavC,CAAC"}