erpnext-queue-client 1.0.6 → 1.1.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 (76) hide show
  1. package/dist/client.js +41 -16
  2. package/dist/erpnext/decryptFromErpNext.server.d.ts +1 -1
  3. package/dist/erpnext/doctypeResourceRequest.d.ts +38 -0
  4. package/dist/erpnext/doctypeResourceRequest.js +59 -0
  5. package/dist/erpnext/doctypeSubmittableResourceRequest.d.ts +8 -0
  6. package/dist/erpnext/doctypeSubmittableResourceRequest.js +39 -0
  7. package/dist/erpnext/doctypes/address.d.ts +263 -0
  8. package/dist/erpnext/doctypes/address.js +46 -0
  9. package/dist/erpnext/doctypes/contact.d.ts +383 -0
  10. package/dist/erpnext/doctypes/contact.js +46 -0
  11. package/dist/erpnext/doctypes/deliveryNote.d.ts +985 -0
  12. package/dist/erpnext/doctypes/deliveryNote.js +38 -0
  13. package/dist/erpnext/doctypes/item.d.ts +572 -0
  14. package/dist/erpnext/doctypes/item.js +95 -0
  15. package/dist/erpnext/doctypes/purchaseReceipt.d.ts +743 -0
  16. package/dist/erpnext/doctypes/purchaseReceipt.js +50 -0
  17. package/dist/erpnext/doctypes/shipment.d.ts +752 -0
  18. package/dist/erpnext/doctypes/shipment.js +51 -0
  19. package/dist/erpnext/erpnextRequestWrapper.js +15 -13
  20. package/dist/erpnext/fileRequests.d.ts +10 -0
  21. package/dist/erpnext/fileRequests.js +42 -0
  22. package/dist/erpnext/methodRequest.d.ts +15 -0
  23. package/dist/erpnext/methodRequest.js +32 -0
  24. package/dist/erpnext/model/Address.d.ts +200 -198
  25. package/dist/erpnext/model/Address.js +3 -2
  26. package/dist/erpnext/model/Contact.d.ts +343 -344
  27. package/dist/erpnext/model/Contact.js +2 -2
  28. package/dist/erpnext/model/Country.d.ts +83 -31
  29. package/dist/erpnext/model/Country.js +2 -6
  30. package/dist/erpnext/model/Customer.d.ts +64 -65
  31. package/dist/erpnext/model/Customer.js +2 -2
  32. package/dist/erpnext/model/DeliveryNote.d.ts +1048 -1048
  33. package/dist/erpnext/model/DispatchRun.d.ts +399 -399
  34. package/dist/erpnext/model/DispatcherPreset.d.ts +94 -94
  35. package/dist/erpnext/model/ERPNextRequest.d.ts +47 -30
  36. package/dist/erpnext/model/ERPNextResponse.d.ts +4 -4
  37. package/dist/erpnext/model/File.d.ts +88 -88
  38. package/dist/erpnext/model/Fulfiller.d.ts +97 -97
  39. package/dist/erpnext/model/FulfillerSettings.d.ts +66 -66
  40. package/dist/erpnext/model/FulfillmentStation.d.ts +2 -2
  41. package/dist/erpnext/model/Item.d.ts +819 -819
  42. package/dist/erpnext/model/Item.js +2 -2
  43. package/dist/erpnext/model/PaymentEntry.d.ts +197 -0
  44. package/dist/erpnext/model/PaymentEntry.js +63 -0
  45. package/dist/erpnext/model/ProjectedQuantityReport.d.ts +178 -178
  46. package/dist/erpnext/model/PurchaseOrder.d.ts +528 -528
  47. package/dist/erpnext/model/Receipt.d.ts +448 -448
  48. package/dist/erpnext/model/Receipt.js +2 -2
  49. package/dist/erpnext/model/ReceiptDraft.d.ts +392 -392
  50. package/dist/erpnext/model/Shipment.d.ts +709 -709
  51. package/dist/erpnext/model/ShippingProvider.d.ts +198 -198
  52. package/dist/erpnext/model/StockEntry.d.ts +248 -0
  53. package/dist/erpnext/model/StockEntry.js +76 -0
  54. package/dist/erpnext/model/StockReconciliation.d.ts +187 -0
  55. package/dist/erpnext/model/StockReconciliation.js +44 -0
  56. package/dist/erpnext/model/Supplier.d.ts +105 -0
  57. package/dist/erpnext/model/Supplier.js +39 -0
  58. package/dist/erpnext/model/Waitlist.d.ts +32 -0
  59. package/dist/erpnext/model/Waitlist.js +19 -0
  60. package/dist/erpnext/model/WarehouseCategory.d.ts +6 -6
  61. package/dist/erpnext/resourceRequest.d.ts +39 -10
  62. package/dist/erpnext/resourceRequest.js +115 -14
  63. package/dist/index.d.ts +39 -4
  64. package/dist/index.js +43 -8
  65. package/dist/utils/fernet.server.d.ts +11 -11
  66. package/dist/utils/fernet.server.js +0 -1
  67. package/dist/utils/request.js +2 -2
  68. package/dist/utils/zodUtils.d.ts +2 -1
  69. package/dist/utils/zodUtils.js +14 -1
  70. package/package.json +4 -1
  71. package/dist/erpnext/doctypes/country.d.ts +0 -9
  72. package/dist/erpnext/doctypes/country.js +0 -28
  73. package/dist/erpnext/erpnextRequests.d.ts +0 -1
  74. package/dist/erpnext/erpnextRequests.js +0 -15
  75. package/dist/erpnext.d.ts +0 -20
  76. package/dist/erpnext.js +0 -45
@@ -0,0 +1,32 @@
1
+ import { z } from "zod";
2
+ export declare const WaitlistInput: z.ZodObject<{
3
+ sku: z.ZodString;
4
+ e_mail: z.ZodString;
5
+ }, "strip", z.ZodTypeAny, {
6
+ sku: string;
7
+ e_mail: string;
8
+ }, {
9
+ sku: string;
10
+ e_mail: string;
11
+ }>;
12
+ export type WaitlistInputType = z.infer<typeof WaitlistInput>;
13
+ export declare const Waitlist: z.ZodObject<{
14
+ sku: z.ZodString;
15
+ e_mail: z.ZodString;
16
+ name: z.ZodString;
17
+ is_notified: z.ZodNumber;
18
+ requested_at: z.ZodString;
19
+ }, "strip", z.ZodTypeAny, {
20
+ name: string;
21
+ sku: string;
22
+ e_mail: string;
23
+ is_notified: number;
24
+ requested_at: string;
25
+ }, {
26
+ name: string;
27
+ sku: string;
28
+ e_mail: string;
29
+ is_notified: number;
30
+ requested_at: string;
31
+ }>;
32
+ export type WaitlistType = z.infer<typeof Waitlist>;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Waitlist = exports.WaitlistInput = void 0;
4
+ const zod_1 = require("zod");
5
+ exports.WaitlistInput = zod_1.z
6
+ .object({
7
+ sku: zod_1.z.string(),
8
+ e_mail: zod_1.z.string(),
9
+ })
10
+ .describe("WaitlistInput");
11
+ exports.Waitlist = zod_1.z
12
+ .object({
13
+ sku: zod_1.z.string(),
14
+ e_mail: zod_1.z.string(),
15
+ name: zod_1.z.string(),
16
+ is_notified: zod_1.z.number(),
17
+ requested_at: zod_1.z.string(),
18
+ })
19
+ .describe("Waitlist");
@@ -2,19 +2,19 @@ import { z } from "zod";
2
2
  export declare const WarehouseCategoryList: z.ZodArray<z.ZodObject<{
3
3
  name: z.ZodString;
4
4
  }, "strip", z.ZodTypeAny, {
5
- name?: string;
5
+ name: string;
6
6
  }, {
7
- name?: string;
7
+ name: string;
8
8
  }>, "many">;
9
9
  export type WarehouseCategoryListType = z.infer<typeof WarehouseCategoryList>;
10
10
  export declare const WarehouseCategoryMethodResponse: z.ZodArray<z.ZodObject<{
11
11
  name: z.ZodString;
12
12
  fulfillment_stations: z.ZodArray<z.ZodString, "many">;
13
13
  }, "strip", z.ZodTypeAny, {
14
- name?: string;
15
- fulfillment_stations?: string[];
14
+ name: string;
15
+ fulfillment_stations: string[];
16
16
  }, {
17
- name?: string;
18
- fulfillment_stations?: string[];
17
+ name: string;
18
+ fulfillment_stations: string[];
19
19
  }>, "many">;
20
20
  export type WarehouseCategoryMethodResponseType = z.infer<typeof WarehouseCategoryMethodResponse>;
@@ -1,16 +1,45 @@
1
- import { ZodTypeAny } from "zod";
1
+ import { z, ZodObject, ZodTypeAny } from "zod";
2
2
  import { TemporalClient } from "../client";
3
3
  export declare class ERPNextResourceRequest {
4
- private client;
5
- constructor(client: TemporalClient);
6
- getParams: (fields: string[], filters?: string[][]) => string;
7
- getList: <T extends ZodTypeAny, K extends ZodTypeAny>({ doctype, fields, filters, inputValidationModel, responseValidationModel, skip, limit, }: {
8
- doctype: string;
9
- fields: string[];
4
+ protected temporalClient: TemporalClient;
5
+ constructor(temporalClient: TemporalClient);
6
+ private getParams;
7
+ getList<T extends ZodObject<any>, K extends keyof T["_type"], B extends boolean>({ resourceName, fields, filters, resourceModel, skip, limit, priority, asDict, params, }: {
8
+ resourceName: string;
9
+ fields?: K[];
10
10
  filters?: string[][];
11
- inputValidationModel?: K | false;
12
- responseValidationModel: T | false;
11
+ resourceModel?: T;
13
12
  skip?: number;
14
13
  limit?: number;
15
- }) => Promise<typeof responseValidationModel>;
14
+ priority?: number;
15
+ asDict?: B;
16
+ params?: string;
17
+ }): Promise<B extends false ? Array<Array<string>> : T extends undefined ? any : Array<Pick<z.infer<T>, K extends keyof z.infer<T> ? K : never>>>;
18
+ getById<T extends ZodTypeAny>({ resourceName, resourceId, resourceModel, priority, }: {
19
+ resourceName: string;
20
+ resourceId: string;
21
+ resourceModel?: T;
22
+ priority?: number;
23
+ }): Promise<z.TypeOf<T>>;
24
+ updateById<T extends ZodTypeAny, K extends ZodTypeAny>({ resourceName, resourceId, inputValidationModel, resourceModel, body, priority, }: {
25
+ resourceName: string;
26
+ resourceId: string;
27
+ inputValidationModel?: K;
28
+ resourceModel?: T;
29
+ priority?: number;
30
+ body: z.TypeOf<K>;
31
+ }): Promise<z.TypeOf<T>>;
32
+ create<T extends ZodTypeAny, K extends ZodTypeAny>({ resourceName, inputValidationModel, resourceModel, body, priority, }: {
33
+ resourceName: string;
34
+ inputValidationModel?: K;
35
+ resourceModel?: T;
36
+ priority?: number;
37
+ body: z.TypeOf<K>;
38
+ }): Promise<z.TypeOf<T>>;
39
+ deleteById<T extends ZodTypeAny, K extends ZodTypeAny>({ resourceName, resourceId, resourceModel, priority, }: {
40
+ resourceName: string;
41
+ resourceId: string;
42
+ resourceModel?: T;
43
+ priority?: number;
44
+ }): Promise<z.TypeOf<T>>;
16
45
  }
@@ -10,25 +10,126 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.ERPNextResourceRequest = void 0;
13
+ const zod_1 = require("zod");
14
+ const zodUtils_1 = require("../utils/zodUtils");
13
15
  class ERPNextResourceRequest {
14
- constructor(client) {
15
- this.getParams = (fields, filters) => {
16
- const fieldsAndFilters = `?fields=${JSON.stringify(fields)}${filters
17
- ? `&filters=[${filters.map((f) => JSON.stringify(f)).join(",")}]`
18
- : ""}`;
19
- return fieldsAndFilters;
16
+ constructor(temporalClient) {
17
+ this.getParams = (fields, filters, asDict, params) => {
18
+ const fieldsParams = fields ? `fields=${JSON.stringify(fields)}` : "";
19
+ const filtersParams = filters
20
+ ? `filters=[${encodeURIComponent(filters.map((f) => JSON.stringify(f)).join(","))}]`
21
+ : "";
22
+ const asDictParams = asDict === false ? `as_dict=False` : "";
23
+ const allParams = `?${[
24
+ ...(fieldsParams ? [fieldsParams] : []),
25
+ ...(filtersParams ? [filtersParams] : []),
26
+ ...(asDictParams ? [asDictParams] : []),
27
+ ...(params ? [params] : []),
28
+ ].join("&")}`;
29
+ console.log(allParams);
30
+ return allParams;
20
31
  };
21
- this.getList = (_a) => __awaiter(this, [_a], void 0, function* ({ doctype, fields, filters, inputValidationModel, responseValidationModel, skip, limit, }) {
22
- return yield this.client.executeERPNextRequestWorkflow("getList", {
32
+ this.temporalClient = temporalClient;
33
+ }
34
+ getList(_a) {
35
+ return __awaiter(this, arguments, void 0, function* ({ resourceName, fields, filters, resourceModel, skip, limit, priority = 5, asDict, params, }) {
36
+ if (resourceModel && !resourceModel.description)
37
+ throw new Error("Resource model must have a description");
38
+ const erpNextFields = (fields === null || fields === void 0 ? void 0 : fields.length) ? fields : ["name"];
39
+ const schema = asDict === false
40
+ ? zod_1.z
41
+ .object({
42
+ data: zod_1.z.array(zod_1.z.array(zod_1.z.string())),
43
+ })
44
+ .describe(`${(resourceModel === null || resourceModel === void 0 ? void 0 : resourceModel.description)
45
+ ? (resourceModel === null || resourceModel === void 0 ? void 0 : resourceModel.description) + " "
46
+ : ""}List with fields ${JSON.stringify(erpNextFields)} as dict = false`)
47
+ : resourceModel
48
+ ? zod_1.z
49
+ .object({
50
+ data: zod_1.z.array((0, zodUtils_1.pickFromSchema)(resourceModel, erpNextFields)),
51
+ })
52
+ .describe(`${resourceModel.description} List with fields ${JSON.stringify(erpNextFields)}`)
53
+ : zod_1.z.any().describe("Any response");
54
+ const result = yield this.temporalClient.executeERPNextRequestWorkflow(`GET-${resourceName.toLowerCase()}-List`, {
23
55
  requestMethod: "GET",
24
- resourceName: doctype,
25
- inputValidationModel,
26
- responseValidationModel,
27
- params: this.getParams(fields, filters) +
56
+ resourceName,
57
+ responseValidationModel: schema,
58
+ params: this.getParams(fields, filters, asDict, params) +
28
59
  `${skip ? `&skip=${skip}` : ""}&limit=${limit || 0}`,
29
- }, "erpnext");
60
+ }, "erpnext", priority);
61
+ return result.data;
62
+ });
63
+ }
64
+ getById(_a) {
65
+ return __awaiter(this, arguments, void 0, function* ({ resourceName, resourceId, resourceModel, priority = 5, }) {
66
+ if (resourceModel && !resourceModel.description)
67
+ throw new Error("Resource model must have a description");
68
+ const result = yield this.temporalClient.executeERPNextRequestWorkflow(`GET-${resourceName}-${resourceId}`, {
69
+ requestMethod: "GET",
70
+ resourceName,
71
+ resourceId,
72
+ responseValidationModel: resourceModel
73
+ ? zod_1.z
74
+ .object({ data: resourceModel })
75
+ .describe(resourceModel.description)
76
+ : undefined,
77
+ }, "erpnext", priority);
78
+ return result.data;
79
+ });
80
+ }
81
+ updateById(_a) {
82
+ return __awaiter(this, arguments, void 0, function* ({ resourceName, resourceId, inputValidationModel, resourceModel, body, priority = 5, }) {
83
+ if (resourceModel && !resourceModel.description)
84
+ throw new Error("Resource model must have a description");
85
+ const result = yield this.temporalClient.executeERPNextRequestWorkflow(`PUT-${resourceName}-${resourceId}`, {
86
+ requestMethod: "PUT",
87
+ resourceId,
88
+ resourceName,
89
+ inputValidationModel,
90
+ responseValidationModel: resourceModel
91
+ ? zod_1.z
92
+ .object({ data: resourceModel })
93
+ .describe(resourceModel.description)
94
+ : undefined,
95
+ body,
96
+ }, "erpnext", priority);
97
+ return result.data;
98
+ });
99
+ }
100
+ create(_a) {
101
+ return __awaiter(this, arguments, void 0, function* ({ resourceName, inputValidationModel, resourceModel, body, priority = 5, }) {
102
+ if (resourceModel && !resourceModel.description)
103
+ throw new Error("Resource model must have a description");
104
+ const result = yield this.temporalClient.executeERPNextRequestWorkflow(`POST-${resourceName}`, {
105
+ requestMethod: "POST",
106
+ resourceName,
107
+ inputValidationModel,
108
+ responseValidationModel: resourceModel
109
+ ? zod_1.z
110
+ .object({ data: resourceModel })
111
+ .describe(resourceModel.description)
112
+ : undefined,
113
+ body,
114
+ }, "erpnext", priority);
115
+ return result.data;
116
+ });
117
+ }
118
+ deleteById(_a) {
119
+ return __awaiter(this, arguments, void 0, function* ({ resourceName, resourceId, resourceModel, priority = 5, }) {
120
+ if (resourceModel && !resourceModel.description)
121
+ throw new Error("Resource model must have a description");
122
+ return yield this.temporalClient.executeERPNextRequestWorkflow(`DELETE-${resourceName}`, {
123
+ requestMethod: "DELETE",
124
+ resourceName,
125
+ resourceId,
126
+ responseValidationModel: zod_1.z
127
+ .object({
128
+ message: zod_1.z.string(),
129
+ })
130
+ .describe("Delete response"),
131
+ }, "erpnext", priority);
30
132
  });
31
- this.client = client;
32
133
  }
33
134
  }
34
135
  exports.ERPNextResourceRequest = ERPNextResourceRequest;
package/dist/index.d.ts CHANGED
@@ -1,12 +1,46 @@
1
1
  import { TemporalClient } from "./client";
2
- import { ERPNextCountry } from "./erpnext/doctypes/country";
2
+ import { ERPNextDoctypeResourceRequest } from "./erpnext/doctypeResourceRequest";
3
+ import { ERPNextAddress } from "./erpnext/doctypes/address";
4
+ import { ERPNextContact } from "./erpnext/doctypes/contact";
5
+ import { ERPNextDeliveryNote } from "./erpnext/doctypes/deliveryNote";
6
+ import { ERPNextItem } from "./erpnext/doctypes/item";
7
+ import { ERPNextPurchaseReceipt } from "./erpnext/doctypes/purchaseReceipt";
8
+ import { ERPNextShipment } from "./erpnext/doctypes/shipment";
9
+ import { ERPNextDoctypeSubmittableResourceRequest } from "./erpnext/doctypeSubmittableResourceRequest";
10
+ import { ERPNextFileRequests } from "./erpnext/fileRequests";
11
+ import { ERPNextMethodRequest } from "./erpnext/methodRequest";
12
+ import { Country } from "./erpnext/model/Country";
13
+ import { Customer } from "./erpnext/model/Customer";
3
14
  import { ERPNextQueueClientContructorOptions } from "./erpnext/model/ERPNextQueue";
15
+ import { PaymentEntry } from "./erpnext/model/PaymentEntry";
16
+ import { PurchaseOrder } from "./erpnext/model/PurchaseOrder";
17
+ import { ShippingProvider } from "./erpnext/model/ShippingProvider";
18
+ import { StockEntry } from "./erpnext/model/StockEntry";
19
+ import { StockReconciliation } from "./erpnext/model/StockReconciliation";
20
+ import { Supplier } from "./erpnext/model/Supplier";
21
+ import { Waitlist } from "./erpnext/model/Waitlist";
4
22
  import { ERPNextResourceRequest } from "./erpnext/resourceRequest";
5
23
  export declare class ERPNextQueueClient {
6
- client: TemporalClient;
7
- private credentials;
24
+ temporalClient: TemporalClient;
25
+ private credentials?;
8
26
  resourceRequest: ERPNextResourceRequest;
9
- country: ERPNextCountry;
27
+ methodRequest: ERPNextMethodRequest;
28
+ country: ERPNextDoctypeResourceRequest<typeof Country>;
29
+ address: ERPNextAddress;
30
+ contact: ERPNextContact;
31
+ customer: ERPNextDoctypeResourceRequest<typeof Customer>;
32
+ deliveryNote: ERPNextDeliveryNote;
33
+ fileRequests: ERPNextFileRequests;
34
+ shipment: ERPNextShipment;
35
+ shippingProvider: ERPNextDoctypeResourceRequest<typeof ShippingProvider>;
36
+ item: ERPNextItem;
37
+ purchaseOrder: ERPNextDoctypeSubmittableResourceRequest<typeof PurchaseOrder>;
38
+ purchaseReceipt: ERPNextPurchaseReceipt;
39
+ waitlist: ERPNextDoctypeResourceRequest<typeof Waitlist>;
40
+ stockEntry: ERPNextDoctypeSubmittableResourceRequest<typeof StockEntry>;
41
+ supplier: ERPNextDoctypeResourceRequest<typeof Supplier>;
42
+ paymentEntry: ERPNextDoctypeSubmittableResourceRequest<typeof PaymentEntry>;
43
+ stockReconciliation: ERPNextDoctypeSubmittableResourceRequest<typeof StockReconciliation>;
10
44
  /**
11
45
  * @description Provide either a temporal client or connection details to create a new client
12
46
  */
@@ -16,3 +50,4 @@ export declare class ERPNextQueueClient {
16
50
  };
17
51
  }
18
52
  export { ERPNextMethodResponse, ERPNextMethodResponseType, ERPNextResourceResponse, ERPNextResourceResponseType, } from "./erpnext/model/ERPNextResponse";
53
+ export { pickFromSchema } from "./utils/zodUtils";
package/dist/index.js CHANGED
@@ -1,27 +1,62 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ERPNextResourceResponse = exports.ERPNextMethodResponse = exports.ERPNextQueueClient = void 0;
3
+ exports.pickFromSchema = exports.ERPNextResourceResponse = exports.ERPNextMethodResponse = exports.ERPNextQueueClient = void 0;
4
4
  const client_1 = require("./client");
5
5
  const decryptFromErpNext_server_1 = require("./erpnext/decryptFromErpNext.server");
6
- const country_1 = require("./erpnext/doctypes/country");
6
+ const doctypeResourceRequest_1 = require("./erpnext/doctypeResourceRequest");
7
+ const address_1 = require("./erpnext/doctypes/address");
8
+ const contact_1 = require("./erpnext/doctypes/contact");
9
+ const deliveryNote_1 = require("./erpnext/doctypes/deliveryNote");
10
+ const item_1 = require("./erpnext/doctypes/item");
11
+ const purchaseReceipt_1 = require("./erpnext/doctypes/purchaseReceipt");
12
+ const shipment_1 = require("./erpnext/doctypes/shipment");
13
+ const doctypeSubmittableResourceRequest_1 = require("./erpnext/doctypeSubmittableResourceRequest");
14
+ const fileRequests_1 = require("./erpnext/fileRequests");
15
+ const methodRequest_1 = require("./erpnext/methodRequest");
16
+ const Country_1 = require("./erpnext/model/Country");
17
+ const Customer_1 = require("./erpnext/model/Customer");
18
+ const PaymentEntry_1 = require("./erpnext/model/PaymentEntry");
19
+ const PurchaseOrder_1 = require("./erpnext/model/PurchaseOrder");
20
+ const ShippingProvider_1 = require("./erpnext/model/ShippingProvider");
21
+ const StockEntry_1 = require("./erpnext/model/StockEntry");
22
+ const StockReconciliation_1 = require("./erpnext/model/StockReconciliation");
23
+ const Supplier_1 = require("./erpnext/model/Supplier");
24
+ const Waitlist_1 = require("./erpnext/model/Waitlist");
7
25
  const resourceRequest_1 = require("./erpnext/resourceRequest");
8
26
  class ERPNextQueueClient {
9
27
  /**
10
28
  * @description Provide either a temporal client or connection details to create a new client
11
29
  */
12
30
  constructor(options) {
13
- var _a;
14
31
  this.utils = {
15
32
  decryptFromErpNext: (encryptedString) => (0, decryptFromErpNext_server_1.decryptFromErpNext)(this.credentials, encryptedString),
16
33
  };
17
- this.credentials = options.erpnextCredentials;
18
- this.client =
19
- (_a = this.client) !== null && _a !== void 0 ? _a : new client_1.TemporalClient(options.temporalCredentials);
20
- this.resourceRequest = new resourceRequest_1.ERPNextResourceRequest(this.client);
21
- this.country = new country_1.ERPNextCountry(this.client);
34
+ if (options.erpnextCredentials)
35
+ this.credentials = options.erpnextCredentials;
36
+ this.temporalClient = new client_1.TemporalClient(options.temporalCredentials);
37
+ this.resourceRequest = new resourceRequest_1.ERPNextResourceRequest(this.temporalClient);
38
+ this.methodRequest = new methodRequest_1.ERPNextMethodRequest(this.temporalClient);
39
+ this.country = new doctypeResourceRequest_1.ERPNextDoctypeResourceRequest(this.temporalClient, "Country", Country_1.Country);
40
+ this.address = new address_1.ERPNextAddress(this.temporalClient);
41
+ this.contact = new contact_1.ERPNextContact(this.temporalClient);
42
+ this.customer = new doctypeResourceRequest_1.ERPNextDoctypeResourceRequest(this.temporalClient, "Customer", Customer_1.Customer);
43
+ this.fileRequests = new fileRequests_1.ERPNextFileRequests(this.temporalClient, this.credentials);
44
+ this.deliveryNote = new deliveryNote_1.ERPNextDeliveryNote(this.temporalClient, this.fileRequests);
45
+ this.shipment = new shipment_1.ERPNextShipment(this.temporalClient);
46
+ this.shippingProvider = new doctypeResourceRequest_1.ERPNextDoctypeResourceRequest(this.temporalClient, "Shipping Provider", ShippingProvider_1.ShippingProvider);
47
+ this.item = new item_1.ERPNextItem(this.temporalClient);
48
+ this.purchaseOrder = new doctypeSubmittableResourceRequest_1.ERPNextDoctypeSubmittableResourceRequest(this.temporalClient, "Purchase Order", PurchaseOrder_1.PurchaseOrder);
49
+ this.purchaseReceipt = new purchaseReceipt_1.ERPNextPurchaseReceipt(this.temporalClient);
50
+ this.waitlist = new doctypeResourceRequest_1.ERPNextDoctypeResourceRequest(this.temporalClient, "Waitlist", Waitlist_1.Waitlist);
51
+ this.stockEntry = new doctypeSubmittableResourceRequest_1.ERPNextDoctypeSubmittableResourceRequest(this.temporalClient, "Stock Entry", StockEntry_1.StockEntry);
52
+ this.supplier = new doctypeResourceRequest_1.ERPNextDoctypeResourceRequest(this.temporalClient, "Supplier", Supplier_1.Supplier);
53
+ this.paymentEntry = new doctypeSubmittableResourceRequest_1.ERPNextDoctypeSubmittableResourceRequest(this.temporalClient, "Payment Entry", PaymentEntry_1.PaymentEntry);
54
+ this.stockReconciliation = new doctypeSubmittableResourceRequest_1.ERPNextDoctypeSubmittableResourceRequest(this.temporalClient, "Stock Reconciliation", StockReconciliation_1.StockReconciliation);
22
55
  }
23
56
  }
24
57
  exports.ERPNextQueueClient = ERPNextQueueClient;
25
58
  var ERPNextResponse_1 = require("./erpnext/model/ERPNextResponse");
26
59
  Object.defineProperty(exports, "ERPNextMethodResponse", { enumerable: true, get: function () { return ERPNextResponse_1.ERPNextMethodResponse; } });
27
60
  Object.defineProperty(exports, "ERPNextResourceResponse", { enumerable: true, get: function () { return ERPNextResponse_1.ERPNextResourceResponse; } });
61
+ var zodUtils_1 = require("./utils/zodUtils");
62
+ Object.defineProperty(exports, "pickFromSchema", { enumerable: true, get: function () { return zodUtils_1.pickFromSchema; } });
@@ -105,24 +105,24 @@ interface FernetOptions {
105
105
  * Token object to perform encryption/decryption
106
106
  */
107
107
  declare class Token {
108
- secret?: Secret;
109
- ttl?: number;
108
+ secret?: Secret | undefined;
109
+ ttl?: number | undefined;
110
110
  message: string;
111
111
  /** cipher text to decrypt */
112
- cipherText?: CryptoJS.lib.WordArray;
113
- cipherTextHex?: string;
112
+ cipherText?: CryptoJS.lib.WordArray | undefined;
113
+ cipherTextHex?: string | undefined;
114
114
  /** token string */
115
- token?: string;
115
+ token?: string | undefined;
116
116
  /** version of token */
117
- version?: string | number;
117
+ version?: string | number | undefined;
118
118
  /** the IV array */
119
- optsIV?: CryptoJS.lib.WordArray;
119
+ optsIV?: CryptoJS.lib.WordArray | undefined;
120
120
  maxClockSkew: number;
121
121
  time: Date | CryptoJS.lib.WordArray;
122
122
  encoded: boolean;
123
- iv?: CryptoJS.lib.WordArray;
124
- ivHex?: string;
125
- hmacHex?: string;
123
+ iv?: CryptoJS.lib.WordArray | undefined;
124
+ ivHex?: string | undefined;
125
+ hmacHex?: string | undefined;
126
126
  /**
127
127
  * Token object to perform encryption/decryption
128
128
  * @param {TokenOptions} opts - options for token initialization
@@ -132,7 +132,7 @@ declare class Token {
132
132
  * converts token to string
133
133
  * @return {String} to stringified token
134
134
  */
135
- toString(): string;
135
+ toString(): string | undefined;
136
136
  /**
137
137
  * Encrypts a message
138
138
  * @param {String} message - message to encrypt
@@ -31,7 +31,6 @@ const hmac_sha256_1 = __importDefault(require("crypto-js/hmac-sha256"));
31
31
  const defaults = {
32
32
  ttl: 0,
33
33
  versionHex: "80",
34
- secret: undefined,
35
34
  };
36
35
  exports.defaults = defaults;
37
36
  const URLBase64 = {
@@ -55,7 +55,7 @@ exports.RequestError = RequestError;
55
55
  function request(options) {
56
56
  return __awaiter(this, void 0, void 0, function* () {
57
57
  var _a, _b;
58
- const _c = options || {}, { body, url, inputValidationModel, responseValidationModel } = _c, requestOptions = __rest(_c, ["body", "url", "inputValidationModel", "responseValidationModel"]);
58
+ const _c = options || {}, { body, url, inputValidationModel, responseValidationModel, credentials, headers } = _c, requestOptions = __rest(_c, ["body", "url", "inputValidationModel", "responseValidationModel", "credentials", "headers"]);
59
59
  // Validate the request body
60
60
  const validatedBody = inputValidationModel
61
61
  ? (0, zodUtils_1.validateData)(body, inputValidationModel)
@@ -71,7 +71,7 @@ function request(options) {
71
71
  contentType !== "application/x-www-form-urlencoded"
72
72
  ? JSON.stringify(validatedBody)
73
73
  : undefined;
74
- const convertedOptions = Object.assign(Object.assign({}, requestOptions), (options.method !== "GET"
74
+ const convertedOptions = Object.assign(Object.assign(Object.assign(Object.assign({}, requestOptions), (headers ? { headers } : {})), (credentials ? { credentials } : {})), (options.method !== "GET"
75
75
  ? { body: stringifiedBody !== null && stringifiedBody !== void 0 ? stringifiedBody : validatedBody }
76
76
  : {}));
77
77
  // Log requests
@@ -1,2 +1,3 @@
1
- import { z } from "zod";
1
+ import { z, ZodObject, ZodRawShape } from "zod";
2
2
  export declare function validateData<T extends z.ZodTypeAny>(data: unknown, ValidationModel: T): z.infer<T>;
3
+ export declare function pickFromSchema<T extends ZodRawShape, K extends keyof T>(schema: ZodObject<T>, keys: readonly K[]): ZodObject<Pick<T, K>>;
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.validateData = validateData;
4
+ exports.pickFromSchema = pickFromSchema;
5
+ const zod_1 = require("zod");
4
6
  const constants_1 = require("../constants");
5
7
  function validateData(data, ValidationModel) {
6
8
  if (!ValidationModel.description)
@@ -10,8 +12,19 @@ function validateData(data, ValidationModel) {
10
12
  throw {
11
13
  message: `Validation error in model ${ValidationModel.description}`,
12
14
  error: validationResult.error,
13
- input: constants_1.constants.DEBUG_MODE === "true" ? data : "set DEBUG_MODE to true to see the input",
15
+ input: constants_1.constants.DEBUG_MODE === "true"
16
+ ? data
17
+ : "set DEBUG_MODE to true to see the input",
14
18
  };
15
19
  }
16
20
  return validationResult.data;
17
21
  }
22
+ function pickFromSchema(schema, keys) {
23
+ const pickedShape = keys === null || keys === void 0 ? void 0 : keys.reduce((acc, key) => {
24
+ if (key in schema.shape) {
25
+ acc[key] = schema.shape[key];
26
+ }
27
+ return acc;
28
+ }, {});
29
+ return zod_1.z.object(pickedShape);
30
+ }
package/package.json CHANGED
@@ -6,6 +6,7 @@
6
6
  ],
7
7
  "main": "dist/index.js",
8
8
  "scripts": {
9
+ "dev": "tsc -w",
9
10
  "test": "dotenv -c test vitest",
10
11
  "build": "tsc",
11
12
  "release": "npm run build && npm publish"
@@ -23,9 +24,11 @@
23
24
  "winston": "^3.15.0",
24
25
  "zod": "^3.23.8"
25
26
  },
26
- "version": "1.0.6",
27
+ "version": "1.1.0",
27
28
  "devDependencies": {
28
29
  "@types/crypto-js": "^4.2.2",
30
+ "@types/lodash": "^4.17.13",
31
+ "@types/randombytes": "^2.0.3",
29
32
  "typescript": "^5.6.3",
30
33
  "vitest": "^2.1.8"
31
34
  }
@@ -1,9 +0,0 @@
1
- import { TemporalClient } from "../../client";
2
- export declare class ERPNextCountry {
3
- private client;
4
- constructor(client: TemporalClient);
5
- getCountryList: () => Promise<{
6
- code?: string;
7
- name?: string;
8
- }[]>;
9
- }
@@ -1,28 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.ERPNextCountry = void 0;
13
- const Country_1 = require("../model/Country");
14
- class ERPNextCountry {
15
- constructor(client) {
16
- this.getCountryList = () => __awaiter(this, void 0, void 0, function* () {
17
- const result = yield this.client.executeERPNextRequestWorkflow("getCountryList", {
18
- requestMethod: "GET",
19
- responseValidationModel: (0, Country_1.CountryList)(["name", "code"]),
20
- resourceName: "Country",
21
- params: `?fields=["name", "code"]`,
22
- }, "erpnext");
23
- return result;
24
- });
25
- this.client = client;
26
- }
27
- }
28
- exports.ERPNextCountry = ERPNextCountry;
@@ -1 +0,0 @@
1
- export {};
@@ -1,15 +0,0 @@
1
- "use strict";
2
- // import { isArray } from "lodash";
3
- // import {
4
- // AddressListName,
5
- // type AddressPostBodyType,
6
- // type ShipstormAddressType,
7
- // } from "./model/Address";
8
- // import { ErpNextResponseDictFalse } from "./model/Item";
9
- // import {
10
- // GetProjectedQuantity,
11
- // GetProjectedQuantityRequestBody,
12
- // type GetProjectedQuantityInputOptionsType,
13
- // type ProjectedQuantityType,
14
- // } from "./model/ProjectedQuantityReport";
15
- Object.defineProperty(exports, "__esModule", { value: true });
package/dist/erpnext.d.ts DELETED
@@ -1,20 +0,0 @@
1
- import { TypeOf, ZodTypeAny } from "zod";
2
- import { ERPNextCredentials, ERPNextQueueType } from "./erpnext/model/ERPNextQueue";
3
- import { ERPNextRequestOptions } from "./erpnext/model/ERPNextRequest";
4
- import { TemporalClient } from "./client";
5
- /**
6
- * @description Provide either a temporal client or connection details to create a new client
7
- */
8
- export declare class ERPNext {
9
- private client;
10
- private credentials;
11
- execute: <T extends ZodTypeAny, K extends ZodTypeAny>(requestName: string, options: ERPNextRequestOptions<T, K>, queue: ERPNextQueueType, priority: number) => Promise<TypeOf<T>>;
12
- constructor(client: TemporalClient, erpnextCredentials: ERPNextCredentials);
13
- request: {
14
- fileDownload: <T extends ZodTypeAny, K extends ZodTypeAny>(url: string) => Promise<Buffer<ArrayBufferLike>>;
15
- executeWithoutTemporalQueue: <T extends ZodTypeAny, K extends ZodTypeAny>(options: ERPNextRequestOptions<T, K>) => Promise<TypeOf<T>>;
16
- };
17
- utils: {
18
- decryptFromErpNext: (encryptedPassword: string) => string;
19
- };
20
- }