lua-cli 2.2.8-alpha.1 → 2.3.0-alpha.1

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 (191) hide show
  1. package/API_REFERENCE.md +1408 -0
  2. package/CLI_REFERENCE.md +818 -0
  3. package/GETTING_STARTED.md +1040 -0
  4. package/README.md +738 -424
  5. package/TEMPLATE_GUIDE.md +1398 -0
  6. package/dist/api/agent.api.service.d.ts +45 -0
  7. package/dist/api/agent.api.service.js +57 -0
  8. package/dist/api/auth.api.service.d.ts +48 -0
  9. package/dist/api/auth.api.service.js +54 -0
  10. package/dist/api/basket.api.service.d.ts +85 -0
  11. package/dist/api/basket.api.service.js +164 -0
  12. package/dist/api/chat.api.service.d.ts +21 -0
  13. package/dist/api/chat.api.service.js +24 -0
  14. package/dist/api/credentials.d.ts +24 -0
  15. package/dist/api/credentials.js +46 -0
  16. package/dist/api/custom.data.api.service.d.ts +69 -0
  17. package/dist/api/custom.data.api.service.js +125 -0
  18. package/dist/api/lazy-instances.d.ts +49 -0
  19. package/dist/api/lazy-instances.js +95 -0
  20. package/dist/api/order.api.service.d.ts +53 -0
  21. package/dist/api/order.api.service.js +95 -0
  22. package/dist/api/products.api.service.d.ts +66 -0
  23. package/dist/api/products.api.service.js +112 -0
  24. package/dist/api/skills.api.service.d.ts +77 -0
  25. package/dist/api/skills.api.service.js +88 -0
  26. package/dist/api/tool.api.service.d.ts +52 -0
  27. package/dist/api/tool.api.service.js +73 -0
  28. package/dist/api/user.data.api.service.d.ts +33 -0
  29. package/dist/api/user.data.api.service.js +59 -0
  30. package/dist/api-exports.d.ts +271 -0
  31. package/dist/api-exports.js +372 -0
  32. package/dist/cli/command-definitions.d.ts +30 -0
  33. package/dist/cli/command-definitions.js +71 -0
  34. package/dist/commands/agents.d.ts +20 -0
  35. package/dist/commands/agents.js +24 -2
  36. package/dist/commands/apiKey.d.ts +23 -0
  37. package/dist/commands/apiKey.js +23 -0
  38. package/dist/commands/compile.d.ts +24 -0
  39. package/dist/commands/compile.js +67 -759
  40. package/dist/commands/configure.d.ts +24 -0
  41. package/dist/commands/configure.js +31 -96
  42. package/dist/commands/deploy.d.ts +31 -19
  43. package/dist/commands/deploy.js +45 -74
  44. package/dist/commands/destroy.d.ts +27 -0
  45. package/dist/commands/destroy.js +27 -1
  46. package/dist/commands/dev.d.ts +25 -62
  47. package/dist/commands/dev.js +58 -873
  48. package/dist/commands/init.d.ts +27 -0
  49. package/dist/commands/init.js +98 -260
  50. package/dist/commands/push.d.ts +24 -21
  51. package/dist/commands/push.js +39 -92
  52. package/dist/commands/test.d.ts +26 -0
  53. package/dist/commands/test.js +41 -188
  54. package/dist/common/basket.instance.d.ts +78 -0
  55. package/dist/common/basket.instance.js +132 -0
  56. package/dist/common/data.entry.instance.d.ts +39 -0
  57. package/dist/common/data.entry.instance.js +76 -0
  58. package/dist/common/http.client.d.ts +64 -0
  59. package/dist/common/http.client.js +133 -0
  60. package/dist/common/order.instance.d.ts +40 -0
  61. package/dist/common/order.instance.js +79 -0
  62. package/dist/common/product.instance.d.ts +33 -0
  63. package/dist/common/product.instance.js +63 -0
  64. package/dist/common/product.pagination.instance.d.ts +43 -0
  65. package/dist/common/product.pagination.instance.js +74 -0
  66. package/dist/common/product.search.instance.d.ts +22 -0
  67. package/dist/common/product.search.instance.js +40 -0
  68. package/dist/common/user.instance.d.ts +41 -0
  69. package/dist/common/user.instance.js +84 -0
  70. package/dist/config/auth.constants.d.ts +11 -0
  71. package/dist/config/auth.constants.js +11 -0
  72. package/dist/config/compile.constants.d.ts +67 -0
  73. package/dist/config/compile.constants.js +99 -0
  74. package/dist/config/constants.d.ts +5 -0
  75. package/dist/config/constants.js +5 -0
  76. package/dist/config/dev.constants.d.ts +65 -0
  77. package/dist/config/dev.constants.js +79 -0
  78. package/dist/config/init.constants.d.ts +23 -0
  79. package/dist/config/init.constants.js +41 -0
  80. package/dist/index.d.ts +19 -3
  81. package/dist/index.js +28 -44
  82. package/dist/interfaces/admin.d.ts +101 -0
  83. package/dist/interfaces/admin.js +5 -0
  84. package/dist/interfaces/agent.d.ts +107 -0
  85. package/dist/interfaces/agent.js +5 -0
  86. package/dist/interfaces/baskets.d.ts +135 -0
  87. package/dist/interfaces/baskets.js +19 -0
  88. package/dist/interfaces/chat.d.ts +61 -0
  89. package/dist/interfaces/chat.js +5 -0
  90. package/dist/interfaces/common.d.ts +62 -0
  91. package/dist/interfaces/common.js +8 -0
  92. package/dist/interfaces/compile.d.ts +11 -0
  93. package/dist/interfaces/compile.js +4 -0
  94. package/dist/interfaces/custom.data.d.ts +82 -0
  95. package/dist/interfaces/custom.data.js +5 -0
  96. package/dist/interfaces/deploy.d.ts +29 -0
  97. package/dist/interfaces/deploy.js +4 -0
  98. package/dist/interfaces/dev.d.ts +53 -0
  99. package/dist/interfaces/dev.js +5 -0
  100. package/dist/interfaces/init.d.ts +60 -0
  101. package/dist/interfaces/init.js +4 -0
  102. package/dist/interfaces/orders.d.ts +91 -0
  103. package/dist/interfaces/orders.js +19 -0
  104. package/dist/interfaces/product.d.ts +65 -0
  105. package/dist/interfaces/product.js +5 -0
  106. package/dist/interfaces/push.d.ts +26 -0
  107. package/dist/interfaces/push.js +4 -0
  108. package/dist/interfaces/test.d.ts +36 -0
  109. package/dist/interfaces/test.js +4 -0
  110. package/dist/services/auth.d.ts +54 -99
  111. package/dist/services/auth.js +76 -12
  112. package/dist/types/api-contracts.d.ts +211 -0
  113. package/dist/types/api-contracts.js +8 -0
  114. package/dist/types/compile.types.d.ts +76 -0
  115. package/dist/types/compile.types.js +4 -0
  116. package/dist/types/index.d.ts +23 -85
  117. package/dist/types/index.js +25 -14
  118. package/dist/types/skill.d.ts +142 -0
  119. package/dist/{skill.js → types/skill.js} +66 -19
  120. package/dist/types/tool-validation.d.ts +34 -0
  121. package/dist/types/tool-validation.js +42 -0
  122. package/dist/utils/auth-flows.d.ts +26 -0
  123. package/dist/utils/auth-flows.js +141 -0
  124. package/dist/utils/bundling.d.ts +36 -0
  125. package/dist/utils/bundling.js +137 -0
  126. package/dist/utils/compile.d.ts +37 -0
  127. package/dist/utils/compile.js +242 -0
  128. package/dist/utils/deploy-api.d.ts +26 -0
  129. package/dist/utils/deploy-api.js +53 -0
  130. package/dist/utils/deploy-helpers.d.ts +46 -0
  131. package/dist/utils/deploy-helpers.js +86 -0
  132. package/dist/utils/deployment.d.ts +25 -0
  133. package/dist/utils/deployment.js +161 -0
  134. package/dist/utils/dev-api.d.ts +61 -0
  135. package/dist/utils/dev-api.js +262 -0
  136. package/dist/utils/dev-helpers.d.ts +46 -0
  137. package/dist/utils/dev-helpers.js +83 -0
  138. package/dist/utils/dev-server.d.ts +24 -0
  139. package/dist/utils/dev-server.js +555 -0
  140. package/dist/utils/dev-watcher.d.ts +31 -0
  141. package/dist/utils/dev-watcher.js +110 -0
  142. package/dist/utils/files.js +0 -5
  143. package/dist/utils/init-agent.d.ts +34 -0
  144. package/dist/utils/init-agent.js +129 -0
  145. package/dist/utils/init-helpers.d.ts +41 -0
  146. package/dist/utils/init-helpers.js +73 -0
  147. package/dist/utils/init-prompts.d.ts +47 -0
  148. package/dist/utils/init-prompts.js +168 -0
  149. package/dist/utils/push-api.d.ts +15 -0
  150. package/dist/utils/push-api.js +48 -0
  151. package/dist/utils/push-helpers.d.ts +38 -0
  152. package/dist/utils/push-helpers.js +84 -0
  153. package/dist/utils/sandbox-storage.d.ts +27 -0
  154. package/dist/utils/sandbox-storage.js +71 -0
  155. package/dist/utils/sandbox.js +78 -118
  156. package/dist/utils/skill-management.d.ts +14 -0
  157. package/dist/utils/skill-management.js +148 -0
  158. package/dist/utils/test-helpers.d.ts +40 -0
  159. package/dist/utils/test-helpers.js +92 -0
  160. package/dist/utils/test-prompts.d.ts +23 -0
  161. package/dist/utils/test-prompts.js +186 -0
  162. package/dist/utils/tool-detection.d.ts +18 -0
  163. package/dist/utils/tool-detection.js +110 -0
  164. package/dist/web/app.css +14 -9
  165. package/package.json +11 -12
  166. package/template/QUICKSTART.md +299 -144
  167. package/template/README.md +928 -349
  168. package/template/TOOL_EXAMPLES.md +655 -0
  169. package/template/package-lock.json +3781 -0
  170. package/template/package.json +1 -1
  171. package/template/src/index.ts +81 -40
  172. package/template/src/tools/BasketTool.ts +128 -0
  173. package/template/src/tools/CustomDataTool.ts +7 -13
  174. package/template/src/tools/OrderTool.ts +54 -0
  175. package/template/src/tools/PaymentTool.ts +1 -1
  176. package/template/src/tools/ProductsTool.ts +56 -118
  177. package/template/src/tools/UserDataTool.ts +4 -27
  178. package/dist/custom-data-api.d.ts +0 -72
  179. package/dist/custom-data-api.js +0 -174
  180. package/dist/product-api.d.ts +0 -197
  181. package/dist/product-api.js +0 -152
  182. package/dist/services/api.d.ts +0 -569
  183. package/dist/services/api.js +0 -625
  184. package/dist/skill.d.ts +0 -50
  185. package/dist/types.d.ts +0 -1
  186. package/dist/types.js +0 -2
  187. package/dist/user-data-api.d.ts +0 -39
  188. package/dist/user-data-api.js +0 -50
  189. package/template/API.md +0 -604
  190. package/template/DEVELOPER.md +0 -771
  191. package/template/lua.skill.yaml +0 -16
@@ -1,6 +1,5 @@
1
- import { LuaTool } from "lua-cli/skill";
1
+ import { LuaTool, User } from "lua-cli";
2
2
  import { z } from "zod";
3
- import { user } from 'lua-cli/user-data-api';
4
3
 
5
4
 
6
5
  export class GetUserDataTool implements LuaTool {
@@ -11,30 +10,7 @@ export class GetUserDataTool implements LuaTool {
11
10
  constructor() {}
12
11
 
13
12
  async execute(input: z.infer<typeof this.inputSchema>) {
14
- return user.data.get();
15
- }
16
- }
17
-
18
-
19
- export class CreateUserDataTool implements LuaTool {
20
- name = "create_user_data";
21
- description = "Get the user data for a given user id";
22
- inputSchema = z.object({
23
- data: z.object({
24
- name: z.string(),
25
- age: z.number()
26
- })
27
- });
28
-
29
- constructor() {}
30
-
31
- async execute(input: z.infer<typeof this.inputSchema>) {
32
- console.log('createUserData tool', input);
33
- const userData = await user.data.get();
34
- if (userData.data) {
35
- return user.data.update(input.data);
36
- }
37
- return user.data.create(input.data);
13
+ return User.get();
38
14
  }
39
15
  }
40
16
 
@@ -51,6 +27,7 @@ export class UpdateUserDataTool implements LuaTool {
51
27
  constructor() {}
52
28
 
53
29
  async execute(input: z.infer<typeof this.inputSchema>) {
54
- return user.data.update(input.data);
30
+ const user = await User.get(); //get instance of user
31
+ return await user.update(input.data);
55
32
  }
56
33
  }
@@ -1,72 +0,0 @@
1
- export interface CustomDataEntry {
2
- id: string;
3
- data: any;
4
- createdAt: number;
5
- updatedAt: number;
6
- searchText?: string;
7
- }
8
- export interface CreateCustomDataRequest {
9
- data: any;
10
- searchText?: string;
11
- }
12
- export interface CreateCustomDataResponse {
13
- id: string;
14
- data: any;
15
- createdAt: number;
16
- updatedAt: number;
17
- searchText?: string;
18
- }
19
- export interface GetCustomDataResponse {
20
- data: CustomDataEntry[];
21
- pagination: {
22
- currentPage: number;
23
- totalPages: number;
24
- totalCount: number;
25
- limit: number;
26
- hasNextPage: boolean;
27
- hasPrevPage: boolean;
28
- };
29
- }
30
- export interface UpdateCustomDataRequest {
31
- data: any;
32
- searchText?: string;
33
- }
34
- export interface UpdateCustomDataResponse {
35
- status: string;
36
- message: string;
37
- }
38
- export interface SearchCustomDataResponse {
39
- data: Array<CustomDataEntry & {
40
- score: number;
41
- }>;
42
- count: number;
43
- }
44
- export interface DeleteCustomDataResponse {
45
- status: string;
46
- message: string;
47
- }
48
- export declare class CustomDataAPI {
49
- private collections;
50
- constructor();
51
- private generateId;
52
- private getCollection;
53
- create(collectionName: string, data: CreateCustomDataRequest): Promise<CreateCustomDataResponse>;
54
- get(collectionName: string, filter?: any, page?: number, limit?: number): Promise<GetCustomDataResponse>;
55
- getEntry(collectionName: string, entryId: string): Promise<CustomDataEntry | null>;
56
- update(collectionName: string, entryId: string, data: UpdateCustomDataRequest): Promise<UpdateCustomDataResponse>;
57
- search(collectionName: string, searchText: string, limit?: number, scoreThreshold?: number): Promise<SearchCustomDataResponse>;
58
- delete(collectionName: string, entryId: string): Promise<DeleteCustomDataResponse>;
59
- private matchesFilter;
60
- private calculateSimilarity;
61
- getAllCollections(): Map<string, CustomDataEntry[]>;
62
- clearCollection(collectionName: string): void;
63
- clearAllCollections(): void;
64
- }
65
- export declare const customData: {
66
- create: (collectionName: string, data: CreateCustomDataRequest) => Promise<CreateCustomDataResponse>;
67
- get: (collectionName: string, filter?: any, page?: number, limit?: number) => Promise<GetCustomDataResponse>;
68
- getEntry: (collectionName: string, entryId: string) => Promise<CustomDataEntry | null>;
69
- update: (collectionName: string, entryId: string, data: UpdateCustomDataRequest) => Promise<UpdateCustomDataResponse>;
70
- search: (collectionName: string, searchText: string, limit?: number, scoreThreshold?: number) => Promise<SearchCustomDataResponse>;
71
- delete: (collectionName: string, entryId: string) => Promise<DeleteCustomDataResponse>;
72
- };
@@ -1,174 +0,0 @@
1
- export class CustomDataAPI {
2
- constructor() {
3
- // Store data by collection name
4
- this.collections = new Map();
5
- }
6
- generateId() {
7
- return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
8
- const r = Math.random() * 16 | 0;
9
- const v = c == 'x' ? r : (r & 0x3 | 0x8);
10
- return v.toString(16);
11
- });
12
- }
13
- getCollection(collectionName) {
14
- if (!this.collections.has(collectionName)) {
15
- this.collections.set(collectionName, []);
16
- }
17
- return this.collections.get(collectionName);
18
- }
19
- async create(collectionName, data) {
20
- const collection = this.getCollection(collectionName);
21
- const now = Date.now();
22
- const entry = {
23
- id: this.generateId(),
24
- data: data.data,
25
- createdAt: now,
26
- updatedAt: now,
27
- searchText: data.searchText
28
- };
29
- collection.push(entry);
30
- return {
31
- id: entry.id,
32
- data: entry.data,
33
- createdAt: entry.createdAt,
34
- updatedAt: entry.updatedAt,
35
- searchText: entry.searchText
36
- };
37
- }
38
- async get(collectionName, filter, page = 1, limit = 10) {
39
- const collection = this.getCollection(collectionName);
40
- let filteredData = [...collection];
41
- // Apply filter if provided
42
- if (filter) {
43
- filteredData = collection.filter(entry => {
44
- return this.matchesFilter(entry.data, filter);
45
- });
46
- }
47
- // Apply pagination
48
- const startIndex = (page - 1) * limit;
49
- const endIndex = startIndex + limit;
50
- const paginatedData = filteredData.slice(startIndex, endIndex);
51
- const totalCount = filteredData.length;
52
- const totalPages = Math.ceil(totalCount / limit);
53
- return {
54
- data: paginatedData,
55
- pagination: {
56
- currentPage: page,
57
- totalPages: totalPages,
58
- totalCount: totalCount,
59
- limit: limit,
60
- hasNextPage: page < totalPages,
61
- hasPrevPage: page > 1
62
- }
63
- };
64
- }
65
- async getEntry(collectionName, entryId) {
66
- const collection = this.getCollection(collectionName);
67
- return collection.find(entry => entry.id === entryId) || null;
68
- }
69
- async update(collectionName, entryId, data) {
70
- const collection = this.getCollection(collectionName);
71
- const entryIndex = collection.findIndex(entry => entry.id === entryId);
72
- if (entryIndex === -1) {
73
- return {
74
- status: 'error',
75
- message: 'Custom data entry not found'
76
- };
77
- }
78
- const entry = collection[entryIndex];
79
- entry.data = { ...entry.data, ...data.data };
80
- entry.updatedAt = Date.now();
81
- if (data.searchText !== undefined) {
82
- entry.searchText = data.searchText;
83
- }
84
- return {
85
- status: 'success',
86
- message: 'Custom data entry updated'
87
- };
88
- }
89
- async search(collectionName, searchText, limit = 10, scoreThreshold = 0.6) {
90
- const collection = this.getCollection(collectionName);
91
- const results = [];
92
- for (const entry of collection) {
93
- if (entry.searchText) {
94
- const score = this.calculateSimilarity(searchText.toLowerCase(), entry.searchText.toLowerCase());
95
- if (score >= scoreThreshold) {
96
- results.push({ ...entry, score });
97
- }
98
- }
99
- }
100
- // Sort by score descending
101
- results.sort((a, b) => b.score - a.score);
102
- // Apply limit
103
- const limitedResults = results.slice(0, limit);
104
- return {
105
- data: limitedResults,
106
- count: limitedResults.length
107
- };
108
- }
109
- async delete(collectionName, entryId) {
110
- const collection = this.getCollection(collectionName);
111
- const initialLength = collection.length;
112
- const updatedCollection = collection.filter(entry => entry.id !== entryId);
113
- this.collections.set(collectionName, updatedCollection);
114
- if (updatedCollection.length < initialLength) {
115
- return {
116
- status: 'success',
117
- message: 'Custom data entry deleted'
118
- };
119
- }
120
- else {
121
- return {
122
- status: 'error',
123
- message: 'Custom data entry not found'
124
- };
125
- }
126
- }
127
- // Helper method to check if an object matches a filter
128
- matchesFilter(obj, filter) {
129
- for (const key in filter) {
130
- if (filter.hasOwnProperty(key)) {
131
- if (typeof filter[key] === 'object' && filter[key] !== null) {
132
- if (typeof obj[key] !== 'object' || !this.matchesFilter(obj[key], filter[key])) {
133
- return false;
134
- }
135
- }
136
- else {
137
- if (obj[key] !== filter[key]) {
138
- return false;
139
- }
140
- }
141
- }
142
- }
143
- return true;
144
- }
145
- // Simple similarity calculation (Jaccard similarity for words)
146
- calculateSimilarity(str1, str2) {
147
- const words1 = new Set(str1.split(/\s+/));
148
- const words2 = new Set(str2.split(/\s+/));
149
- const intersection = new Set([...words1].filter(x => words2.has(x)));
150
- const union = new Set([...words1, ...words2]);
151
- return intersection.size / union.size;
152
- }
153
- // Method to get all collections (for debugging/testing)
154
- getAllCollections() {
155
- return this.collections;
156
- }
157
- // Method to clear a collection (for testing)
158
- clearCollection(collectionName) {
159
- this.collections.set(collectionName, []);
160
- }
161
- // Method to clear all collections (for testing)
162
- clearAllCollections() {
163
- this.collections.clear();
164
- }
165
- }
166
- const customDataAPI = new CustomDataAPI();
167
- export const customData = {
168
- create: (collectionName, data) => customDataAPI.create(collectionName, data),
169
- get: (collectionName, filter, page, limit) => customDataAPI.get(collectionName, filter, page, limit),
170
- getEntry: (collectionName, entryId) => customDataAPI.getEntry(collectionName, entryId),
171
- update: (collectionName, entryId, data) => customDataAPI.update(collectionName, entryId, data),
172
- search: (collectionName, searchText, limit, scoreThreshold) => customDataAPI.search(collectionName, searchText, limit, scoreThreshold),
173
- delete: (collectionName, entryId) => customDataAPI.delete(collectionName, entryId),
174
- };
@@ -1,197 +0,0 @@
1
- export interface Product {
2
- id: string;
3
- [key: string]: any;
4
- }
5
- export interface ProductsResponse {
6
- success: boolean;
7
- data: Product[];
8
- pagination: {
9
- currentPage: number;
10
- totalPages: number;
11
- totalCount: number;
12
- limit: number;
13
- hasNextPage: boolean;
14
- hasPrevPage: boolean;
15
- nextPage: number | null;
16
- prevPage: number | null;
17
- };
18
- }
19
- export interface CreateProductResponse {
20
- updated: boolean;
21
- isNew: boolean;
22
- product: Product;
23
- }
24
- export interface UpdateProductResponse {
25
- updated: boolean;
26
- isNew: boolean;
27
- product: Product;
28
- }
29
- export interface DeleteProductResponse {
30
- deleted: boolean;
31
- }
32
- export interface SearchProductsResponse {
33
- success: boolean;
34
- message: string;
35
- data: Product[];
36
- }
37
- export interface BasketItem {
38
- id: string;
39
- price: number;
40
- quantity: number;
41
- SKU?: string;
42
- addedAt?: string;
43
- [key: string]: any;
44
- }
45
- export interface Basket {
46
- id: string;
47
- userId: string;
48
- agentId: string;
49
- data: {
50
- currency: string;
51
- metadata?: any;
52
- items: BasketItem[];
53
- createdAt: string;
54
- };
55
- common: {
56
- status: 'active' | 'checked_out' | 'abandoned' | 'expired';
57
- totalAmount: string | number;
58
- itemCount: number;
59
- };
60
- createdAt: string;
61
- updatedAt: string;
62
- __v: number;
63
- }
64
- export interface CreateBasketRequest {
65
- currency: string;
66
- metadata?: any;
67
- }
68
- export interface CreateBasketResponse {
69
- success: boolean;
70
- message: string;
71
- data: Basket;
72
- }
73
- export interface GetBasketsResponse {
74
- success: boolean;
75
- message: string;
76
- data: Basket[];
77
- }
78
- export interface AddItemToBasketRequest {
79
- id: string;
80
- price: number;
81
- quantity: number;
82
- [key: string]: any;
83
- }
84
- export interface AddItemToBasketResponse {
85
- success: boolean;
86
- message: string;
87
- data: Basket;
88
- }
89
- export interface RemoveItemFromBasketResponse {
90
- success: boolean;
91
- message: string;
92
- data: Basket;
93
- }
94
- export interface ClearBasketResponse {
95
- success: boolean;
96
- message: string;
97
- data: Basket;
98
- }
99
- export interface UpdateBasketStatusResponse {
100
- success: boolean;
101
- message: string;
102
- data: Basket;
103
- }
104
- export interface Order {
105
- id: string;
106
- userId: string;
107
- agentId: string;
108
- orderId: string;
109
- data: {
110
- currency: string;
111
- items: BasketItem[];
112
- createdAt: string;
113
- basketId: string;
114
- orderDate: string;
115
- orderId: string;
116
- [key: string]: any;
117
- };
118
- common: {
119
- status: 'pending' | 'confirmed' | 'fulfilled' | 'cancelled';
120
- totalAmount: string | number;
121
- currency: string;
122
- itemCount: number;
123
- };
124
- createdAt: string;
125
- updatedAt: string;
126
- __v: number;
127
- }
128
- export interface CreateOrderRequest {
129
- basketId: string;
130
- data: {
131
- [key: string]: any;
132
- };
133
- }
134
- export interface CreateOrderResponse {
135
- success: boolean;
136
- message: string;
137
- data: Order;
138
- }
139
- export interface UpdateOrderStatusResponse {
140
- success: boolean;
141
- message: string;
142
- data: Order;
143
- }
144
- export interface GetUserOrdersResponse {
145
- success: boolean;
146
- message: string;
147
- data: Order[];
148
- }
149
- export interface UpdateBasketMetadataResponse {
150
- success: boolean;
151
- message: string;
152
- }
153
- export type BasketStatus = 'active' | 'checked_out' | 'abandoned' | 'expired';
154
- export type OrderStatus = 'pending' | 'confirmed' | 'fulfilled' | 'cancelled';
155
- export declare class ProductAPI {
156
- products: Product[];
157
- baskets: Basket[];
158
- orders: Order[];
159
- constructor();
160
- get(page?: number, limit?: number): Promise<ProductsResponse>;
161
- create(data: Record<string, any>): Promise<CreateProductResponse>;
162
- update(data: Record<string, any>, productId: string): Promise<UpdateProductResponse>;
163
- delete(productId: string): Promise<DeleteProductResponse>;
164
- search(searchQuery: string): Promise<SearchProductsResponse>;
165
- createBasket(data: CreateBasketRequest): Promise<CreateBasketResponse>;
166
- updateBasketMetadata(basketId: string, metadata: any): Promise<UpdateBasketMetadataResponse>;
167
- getBaskets(status?: BasketStatus): Promise<GetBasketsResponse>;
168
- addItemToBasket(basketId: string, data: AddItemToBasketRequest): Promise<AddItemToBasketResponse>;
169
- removeItemFromBasket(basketId: string, itemId: string): Promise<RemoveItemFromBasketResponse>;
170
- clearBasket(basketId: string): Promise<ClearBasketResponse>;
171
- updateBasketStatus(basketId: string, status: BasketStatus): Promise<UpdateBasketStatusResponse>;
172
- createOrder(data: CreateOrderRequest): Promise<CreateOrderResponse>;
173
- updateOrderStatus(orderId: string, status: OrderStatus): Promise<UpdateOrderStatusResponse>;
174
- getUserOrders(): Promise<GetUserOrdersResponse>;
175
- }
176
- export declare const product: {
177
- create: (data: Record<string, any>) => Promise<CreateProductResponse>;
178
- get: (page?: number, limit?: number) => Promise<ProductsResponse>;
179
- update: (data: Record<string, any>, productId: string) => Promise<UpdateProductResponse>;
180
- delete: (productId: string) => Promise<DeleteProductResponse>;
181
- search: (searchQuery: string) => Promise<SearchProductsResponse>;
182
- data: ProductAPI;
183
- basket: {
184
- create: (data: CreateBasketRequest) => Promise<CreateBasketResponse>;
185
- get: (status?: BasketStatus) => Promise<GetBasketsResponse>;
186
- addItem: (basketId: string, data: AddItemToBasketRequest) => Promise<AddItemToBasketResponse>;
187
- removeItem: (basketId: string, itemId: string) => Promise<RemoveItemFromBasketResponse>;
188
- clear: (basketId: string) => Promise<ClearBasketResponse>;
189
- updateStatus: (basketId: string, status: BasketStatus) => Promise<UpdateBasketStatusResponse>;
190
- updateMetadata: (basketId: string, metadata: any) => Promise<UpdateBasketMetadataResponse>;
191
- };
192
- order: {
193
- create: (data: CreateOrderRequest) => Promise<CreateOrderResponse>;
194
- updateStatus: (orderId: string, status: OrderStatus) => Promise<UpdateOrderStatusResponse>;
195
- get: () => Promise<GetUserOrdersResponse>;
196
- };
197
- };
@@ -1,152 +0,0 @@
1
- export class ProductAPI {
2
- constructor() {
3
- this.products = [];
4
- this.baskets = [];
5
- this.orders = [];
6
- }
7
- async get(page = 1, limit = 10) {
8
- return {
9
- success: true,
10
- data: this.products,
11
- pagination: {
12
- currentPage: page,
13
- totalPages: 1,
14
- totalCount: this.products.length,
15
- limit: limit,
16
- hasNextPage: false,
17
- hasPrevPage: false,
18
- nextPage: null,
19
- prevPage: null
20
- }
21
- };
22
- }
23
- async create(data) {
24
- const product = data;
25
- const existingIndex = this.products.findIndex(p => p.id === product.id);
26
- if (existingIndex >= 0) {
27
- this.products[existingIndex] = product;
28
- return { updated: true, isNew: false, product };
29
- }
30
- else {
31
- this.products.push(product);
32
- return { updated: false, isNew: true, product };
33
- }
34
- }
35
- async update(data, productId) {
36
- const product = data;
37
- const existingIndex = this.products.findIndex(p => p.id === productId);
38
- if (existingIndex >= 0) {
39
- this.products[existingIndex] = { ...this.products[existingIndex], ...product };
40
- return { updated: true, isNew: false, product: this.products[existingIndex] };
41
- }
42
- else {
43
- this.products.push(product);
44
- return { updated: false, isNew: true, product };
45
- }
46
- }
47
- async delete(productId) {
48
- const initialLength = this.products.length;
49
- this.products = this.products.filter((product) => product.id !== productId);
50
- return { deleted: this.products.length < initialLength };
51
- }
52
- async search(searchQuery) {
53
- const results = this.products.filter(product => Object.values(product).some(value => String(value).toLowerCase().includes(searchQuery.toLowerCase())));
54
- return {
55
- success: true,
56
- message: `Successfully found ${results.length} products for "${searchQuery}"`,
57
- data: results
58
- };
59
- }
60
- async createBasket(data) {
61
- const basket = { ...data, createdAt: new Date().toISOString(), updatedAt: new Date().toISOString(), __v: 0 };
62
- this.baskets.push(basket);
63
- return { success: true, message: 'Basket created successfully', data: basket };
64
- }
65
- async updateBasketMetadata(basketId, metadata) {
66
- const basket = this.baskets.find((basket) => basket.id === basketId);
67
- if (basket) {
68
- basket.data.metadata = metadata;
69
- return { success: true, message: 'Basket metadata updated successfully' };
70
- }
71
- else {
72
- return { success: false, message: 'Basket not found' };
73
- }
74
- }
75
- async getBaskets(status) {
76
- if (status) {
77
- return { success: true, message: 'Baskets fetched successfully', data: this.baskets.filter((basket) => basket.common.status === status) };
78
- }
79
- return { success: true, message: 'Baskets fetched successfully', data: this.baskets };
80
- }
81
- async addItemToBasket(basketId, data) {
82
- const basket = this.baskets.find((basket) => basket.id === basketId);
83
- if (basket) {
84
- basket.data.items.push(data);
85
- return { success: true, message: 'Item added to basket successfully', data: basket };
86
- }
87
- return { success: false, message: 'Basket not found', data: null };
88
- }
89
- async removeItemFromBasket(basketId, itemId) {
90
- const basket = this.baskets.find((basket) => basket.id === basketId);
91
- if (basket) {
92
- basket.data.items = basket.data.items.filter((item) => item.id !== itemId);
93
- return { success: true, message: 'Item removed from basket successfully', data: basket };
94
- }
95
- return { success: false, message: 'Basket not found', data: null };
96
- }
97
- async clearBasket(basketId) {
98
- const basket = this.baskets.find((basket) => basket.id === basketId);
99
- if (basket) {
100
- basket.data.items = [];
101
- return { success: true, message: 'Basket cleared successfully', data: basket };
102
- }
103
- return { success: false, message: 'Basket not found', data: null };
104
- }
105
- async updateBasketStatus(basketId, status) {
106
- const basket = this.baskets.find((basket) => basket.id === basketId);
107
- if (basket) {
108
- basket.common.status = status;
109
- return { success: true, message: 'Basket status updated successfully', data: basket };
110
- }
111
- return { success: false, message: 'Basket not found', data: null };
112
- }
113
- async createOrder(data) {
114
- const order = { ...data, createdAt: new Date().toISOString(), updatedAt: new Date().toISOString(), __v: 0 };
115
- this.orders.push(order);
116
- return { success: true, message: 'Order created successfully', data: order };
117
- }
118
- async updateOrderStatus(orderId, status) {
119
- const order = this.orders.find((order) => order.id === orderId);
120
- if (order) {
121
- order.common.status = status;
122
- return { success: true, message: 'Order status updated successfully', data: order };
123
- }
124
- return { success: false, message: 'Order not found', data: null };
125
- }
126
- async getUserOrders() {
127
- return { success: true, message: 'User orders fetched successfully', data: this.orders };
128
- }
129
- }
130
- const productAPI = new ProductAPI();
131
- export const product = {
132
- create: productAPI.create,
133
- get: productAPI.get,
134
- update: productAPI.update,
135
- delete: productAPI.delete,
136
- search: productAPI.search,
137
- data: productAPI,
138
- basket: {
139
- create: productAPI.createBasket,
140
- get: productAPI.getBaskets,
141
- addItem: productAPI.addItemToBasket,
142
- removeItem: productAPI.removeItemFromBasket,
143
- clear: productAPI.clearBasket,
144
- updateStatus: productAPI.updateBasketStatus,
145
- updateMetadata: productAPI.updateBasketMetadata
146
- },
147
- order: {
148
- create: productAPI.createOrder,
149
- updateStatus: productAPI.updateOrderStatus,
150
- get: productAPI.getUserOrders
151
- }
152
- };