@nlabs/metropolisjs 0.1.2 → 0.3.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 (329) hide show
  1. package/.github/copilot-instructions.md +167 -0
  2. package/AGENTS.md +13 -0
  3. package/CHANGELOG.md +112 -0
  4. package/GRAPHQL_VALIDATION_RESULTS.md +158 -0
  5. package/PERMISSION_GRAPHQL_INTEGRATION.md +293 -0
  6. package/PERMISSION_IMPLEMENTATION_SUMMARY.md +243 -0
  7. package/README.md +1123 -112
  8. package/SIGNIN_GRAPHQL_VALIDATION.md +125 -0
  9. package/VAULT_GRAPHQL_API_FINDINGS.md +312 -0
  10. package/docs/ACTIONS.md +63 -0
  11. package/docs/COLLECTIONS.md +1038 -0
  12. package/docs/CONNECTIONS.md +1367 -0
  13. package/docs/CRUD_INTEGRATION.md +702 -0
  14. package/examples/connections-usage.tsx +909 -0
  15. package/examples/content-actions-usage.ts +144 -0
  16. package/examples/crud-usage.tsx +847 -0
  17. package/examples/extensibility-usage.tsx +889 -0
  18. package/examples/i18n-import-examples.ts +86 -0
  19. package/examples/i18n-namespace-usage.ts +118 -0
  20. package/examples/i18next-singleton-demo.ts +187 -0
  21. package/examples/permission-system-usage.tsx +415 -0
  22. package/examples/project-details.tsx +397 -0
  23. package/examples/shared-i18n-usage.tsx +203 -0
  24. package/examples/signup-error-handling.ts +100 -0
  25. package/examples/translation-types.ts +86 -0
  26. package/examples/translation-usage.tsx +336 -0
  27. package/index.js +1 -0
  28. package/jest.config.mjs +28 -0
  29. package/lex.config.mjs +11 -2
  30. package/lib/__tests__/e2e/helpers/testGraphQLServer.d.ts +22 -0
  31. package/lib/__tests__/e2e/helpers/testGraphQLServer.d.ts.map +1 -0
  32. package/lib/__tests__/e2e/helpers/testGraphQLServer.js +197 -0
  33. package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.d.ts +3 -0
  34. package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.d.ts.map +1 -0
  35. package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.js +52 -0
  36. package/lib/actions/appActions/appActions.d.ts +29 -0
  37. package/lib/actions/appActions/appActions.d.ts.map +1 -0
  38. package/lib/actions/appActions/appActions.js +159 -0
  39. package/lib/actions/connectionActions/connectionActions.d.ts +19 -0
  40. package/lib/actions/connectionActions/connectionActions.d.ts.map +1 -0
  41. package/lib/actions/connectionActions/connectionActions.js +131 -0
  42. package/lib/actions/contentActions/contentActions.d.ts +34 -0
  43. package/lib/actions/contentActions/contentActions.d.ts.map +1 -0
  44. package/lib/actions/contentActions/contentActions.js +314 -0
  45. package/lib/actions/conversationActions/conversationActions.d.ts +30 -0
  46. package/lib/actions/conversationActions/conversationActions.d.ts.map +1 -0
  47. package/lib/actions/conversationActions/conversationActions.js +225 -0
  48. package/lib/actions/eventActions/eventActions.d.ts +27 -7
  49. package/lib/actions/eventActions/eventActions.d.ts.map +1 -0
  50. package/lib/actions/eventActions/eventActions.js +436 -2
  51. package/lib/actions/groupActions/groupActions.d.ts +30 -0
  52. package/lib/actions/groupActions/groupActions.d.ts.map +1 -0
  53. package/lib/actions/groupActions/groupActions.js +229 -0
  54. package/lib/actions/imageActions/imageActions.d.ts +16 -10
  55. package/lib/actions/imageActions/imageActions.d.ts.map +1 -0
  56. package/lib/actions/imageActions/imageActions.js +593 -2
  57. package/lib/actions/index.d.ts +21 -9
  58. package/lib/actions/index.d.ts.map +1 -0
  59. package/lib/actions/index.js +22 -2
  60. package/lib/actions/locationActions/locationActions.d.ts +11 -9
  61. package/lib/actions/locationActions/locationActions.d.ts.map +1 -0
  62. package/lib/actions/locationActions/locationActions.js +388 -2
  63. package/lib/actions/messageActions/messageActions.d.ts +16 -32
  64. package/lib/actions/messageActions/messageActions.d.ts.map +1 -0
  65. package/lib/actions/messageActions/messageActions.js +235 -2
  66. package/lib/actions/permissionActions/permissionActions.d.ts +34 -0
  67. package/lib/actions/permissionActions/permissionActions.d.ts.map +1 -0
  68. package/lib/actions/permissionActions/permissionActions.js +330 -0
  69. package/lib/actions/personaActions/personaActions.d.ts +65 -0
  70. package/lib/actions/personaActions/personaActions.d.ts.map +1 -0
  71. package/lib/actions/personaActions/personaActions.js +572 -0
  72. package/lib/actions/postActions/postActions.d.ts +12 -32
  73. package/lib/actions/postActions/postActions.d.ts.map +1 -0
  74. package/lib/actions/postActions/postActions.js +447 -2
  75. package/lib/actions/reactionActions/reactionActions.d.ts +13 -27
  76. package/lib/actions/reactionActions/reactionActions.d.ts.map +1 -0
  77. package/lib/actions/reactionActions/reactionActions.js +413 -2
  78. package/lib/actions/sseActions/sseActions.d.ts +1 -0
  79. package/lib/actions/sseActions/sseActions.d.ts.map +1 -0
  80. package/lib/actions/sseActions/sseActions.js +148 -2
  81. package/lib/actions/subscriptionActions/subscriptionActions.d.ts +24 -0
  82. package/lib/actions/subscriptionActions/subscriptionActions.d.ts.map +1 -0
  83. package/lib/actions/subscriptionActions/subscriptionActions.js +329 -0
  84. package/lib/actions/tagActions/tagActions.d.ts +13 -31
  85. package/lib/actions/tagActions/tagActions.d.ts.map +1 -0
  86. package/lib/actions/tagActions/tagActions.js +347 -2
  87. package/lib/actions/translationActions/translationActions.d.ts +38 -0
  88. package/lib/actions/translationActions/translationActions.d.ts.map +1 -0
  89. package/lib/actions/translationActions/translationActions.js +189 -0
  90. package/lib/actions/userActions/userActions.d.ts +44 -95
  91. package/lib/actions/userActions/userActions.d.ts.map +1 -0
  92. package/lib/actions/userActions/userActions.js +870 -2
  93. package/lib/actions/videoActions/videoActions.d.ts +41 -0
  94. package/lib/actions/videoActions/videoActions.d.ts.map +1 -0
  95. package/lib/actions/videoActions/videoActions.js +532 -0
  96. package/lib/actions/websocketActions/websocketActions.d.ts +20 -21
  97. package/lib/actions/websocketActions/websocketActions.d.ts.map +1 -0
  98. package/lib/actions/websocketActions/websocketActions.js +377 -2
  99. package/lib/adapters/appAdapter/appAdapter.d.ts +8 -0
  100. package/lib/adapters/appAdapter/appAdapter.d.ts.map +1 -0
  101. package/lib/adapters/appAdapter/appAdapter.js +90 -0
  102. package/lib/adapters/arangoAdapter/arangoAdapter.d.ts +3 -2
  103. package/lib/adapters/arangoAdapter/arangoAdapter.d.ts.map +1 -0
  104. package/lib/adapters/arangoAdapter/arangoAdapter.js +75 -2
  105. package/lib/adapters/contentAdapter/contentAdapter.d.ts +3 -2
  106. package/lib/adapters/contentAdapter/contentAdapter.d.ts.map +1 -0
  107. package/lib/adapters/contentAdapter/contentAdapter.js +107 -2
  108. package/lib/adapters/conversationAdapter/conversationAdapter.d.ts +3 -2
  109. package/lib/adapters/conversationAdapter/conversationAdapter.d.ts.map +1 -0
  110. package/lib/adapters/conversationAdapter/conversationAdapter.js +75 -2
  111. package/lib/adapters/eventAdapter/eventAdapter.d.ts +5 -2
  112. package/lib/adapters/eventAdapter/eventAdapter.d.ts.map +1 -0
  113. package/lib/adapters/eventAdapter/eventAdapter.js +162 -2
  114. package/lib/adapters/fileAdapter/fileAdapter.d.ts +3 -2
  115. package/lib/adapters/fileAdapter/fileAdapter.d.ts.map +1 -0
  116. package/lib/adapters/fileAdapter/fileAdapter.js +118 -2
  117. package/lib/adapters/groupAdapter/groupAdapter.d.ts +28 -0
  118. package/lib/adapters/groupAdapter/groupAdapter.d.ts.map +1 -0
  119. package/lib/adapters/groupAdapter/groupAdapter.js +66 -0
  120. package/lib/adapters/imageAdapter/imageAdapter.d.ts +9 -2
  121. package/lib/adapters/imageAdapter/imageAdapter.d.ts.map +1 -0
  122. package/lib/adapters/imageAdapter/imageAdapter.js +134 -2
  123. package/lib/adapters/index.d.ts +34 -16
  124. package/lib/adapters/index.d.ts.map +1 -0
  125. package/lib/adapters/index.js +19 -2
  126. package/lib/adapters/locationAdapter/locationAdapter.d.ts +3 -2
  127. package/lib/adapters/locationAdapter/locationAdapter.d.ts.map +1 -0
  128. package/lib/adapters/locationAdapter/locationAdapter.js +95 -2
  129. package/lib/adapters/messageAdapter/messageAdapter.d.ts +23 -19
  130. package/lib/adapters/messageAdapter/messageAdapter.d.ts.map +1 -0
  131. package/lib/adapters/messageAdapter/messageAdapter.js +82 -2
  132. package/lib/adapters/permissionAdapter/permissionAdapter.d.ts +41 -0
  133. package/lib/adapters/permissionAdapter/permissionAdapter.d.ts.map +1 -0
  134. package/lib/adapters/permissionAdapter/permissionAdapter.js +120 -0
  135. package/lib/adapters/personaAdapter/personaAdapter.d.ts +28 -2
  136. package/lib/adapters/personaAdapter/personaAdapter.d.ts.map +1 -0
  137. package/lib/adapters/personaAdapter/personaAdapter.js +161 -2
  138. package/lib/adapters/postAdapter/postAdapter.d.ts +3 -2
  139. package/lib/adapters/postAdapter/postAdapter.d.ts.map +1 -0
  140. package/lib/adapters/postAdapter/postAdapter.js +115 -2
  141. package/lib/adapters/reactionAdapter/reactionAdapter.d.ts +5 -2
  142. package/lib/adapters/reactionAdapter/reactionAdapter.d.ts.map +1 -0
  143. package/lib/adapters/reactionAdapter/reactionAdapter.js +81 -2
  144. package/lib/adapters/reaktorAdapter/reaktorAdapter.d.ts +3 -2
  145. package/lib/adapters/reaktorAdapter/reaktorAdapter.d.ts.map +1 -0
  146. package/lib/adapters/reaktorAdapter/reaktorAdapter.js +58 -2
  147. package/lib/adapters/sessionAdapter/sessionAdapter.d.ts +3 -2
  148. package/lib/adapters/sessionAdapter/sessionAdapter.d.ts.map +1 -0
  149. package/lib/adapters/sessionAdapter/sessionAdapter.js +80 -2
  150. package/lib/adapters/tagAdapter/tagAdapter.d.ts +3 -2
  151. package/lib/adapters/tagAdapter/tagAdapter.d.ts.map +1 -0
  152. package/lib/adapters/tagAdapter/tagAdapter.js +98 -2
  153. package/lib/adapters/translationAdapter/translationAdapter.d.ts +21 -0
  154. package/lib/adapters/translationAdapter/translationAdapter.d.ts.map +1 -0
  155. package/lib/adapters/translationAdapter/translationAdapter.js +55 -0
  156. package/lib/adapters/userAdapter/userAdapter.d.ts +18 -6
  157. package/lib/adapters/userAdapter/userAdapter.d.ts.map +1 -0
  158. package/lib/adapters/userAdapter/userAdapter.js +302 -2
  159. package/lib/adapters/videoAdapter/videoAdapter.d.ts +8 -0
  160. package/lib/adapters/videoAdapter/videoAdapter.d.ts.map +1 -0
  161. package/lib/adapters/videoAdapter/videoAdapter.js +194 -0
  162. package/lib/config/index.d.ts +19 -6
  163. package/lib/config/index.d.ts.map +1 -0
  164. package/lib/config/index.js +97 -2
  165. package/lib/constants/Collections.d.ts +44 -0
  166. package/lib/constants/Collections.d.ts.map +1 -0
  167. package/lib/constants/Collections.js +40 -0
  168. package/lib/constants/MetropolisConstants.d.ts +1 -0
  169. package/lib/constants/MetropolisConstants.d.ts.map +1 -0
  170. package/lib/constants/MetropolisConstants.js +15 -2
  171. package/lib/graphql/message.d.ts +1 -0
  172. package/lib/graphql/message.d.ts.map +1 -0
  173. package/lib/graphql/message.js +6 -4
  174. package/lib/graphql/notification.d.ts +1 -0
  175. package/lib/graphql/notification.d.ts.map +1 -0
  176. package/lib/graphql/notification.js +6 -4
  177. package/lib/graphql/session.d.ts +1 -0
  178. package/lib/graphql/session.d.ts.map +1 -0
  179. package/lib/graphql/session.js +4 -3
  180. package/lib/index.d.ts +45 -22
  181. package/lib/index.d.ts.map +1 -0
  182. package/lib/index.js +248 -2
  183. package/lib/stores/appStore.d.ts +1 -0
  184. package/lib/stores/appStore.d.ts.map +1 -0
  185. package/lib/stores/appStore.js +23 -2
  186. package/lib/stores/contentStore.d.ts +36 -0
  187. package/lib/stores/contentStore.d.ts.map +1 -0
  188. package/lib/stores/contentStore.js +139 -0
  189. package/lib/stores/conversationStore.d.ts +38 -0
  190. package/lib/stores/conversationStore.d.ts.map +1 -0
  191. package/lib/stores/conversationStore.js +117 -0
  192. package/lib/stores/eventStore.d.ts +4 -1
  193. package/lib/stores/eventStore.d.ts.map +1 -0
  194. package/lib/stores/eventStore.js +47 -2
  195. package/lib/stores/groupStore.d.ts +37 -0
  196. package/lib/stores/groupStore.d.ts.map +1 -0
  197. package/lib/stores/groupStore.js +68 -0
  198. package/lib/stores/imageStore.d.ts +6 -1
  199. package/lib/stores/imageStore.d.ts.map +1 -0
  200. package/lib/stores/imageStore.js +53 -2
  201. package/lib/stores/index.d.ts +20 -11
  202. package/lib/stores/index.d.ts.map +1 -0
  203. package/lib/stores/index.js +24 -2
  204. package/lib/stores/locationStore.d.ts +2 -1
  205. package/lib/stores/locationStore.d.ts.map +1 -0
  206. package/lib/stores/locationStore.js +42 -2
  207. package/lib/stores/messageStore.d.ts +19 -4
  208. package/lib/stores/messageStore.d.ts.map +1 -0
  209. package/lib/stores/messageStore.js +137 -2
  210. package/lib/stores/notificationStore.d.ts +33 -0
  211. package/lib/stores/notificationStore.d.ts.map +1 -0
  212. package/lib/stores/notificationStore.js +55 -0
  213. package/lib/stores/permissionStore.d.ts +37 -0
  214. package/lib/stores/permissionStore.d.ts.map +1 -0
  215. package/lib/stores/permissionStore.js +117 -0
  216. package/lib/stores/personaStore.d.ts +26 -0
  217. package/lib/stores/personaStore.d.ts.map +1 -0
  218. package/lib/stores/personaStore.js +118 -0
  219. package/lib/stores/postStore.d.ts +2 -1
  220. package/lib/stores/postStore.d.ts.map +1 -0
  221. package/lib/stores/postStore.js +53 -2
  222. package/lib/stores/reactionStore.d.ts +1 -0
  223. package/lib/stores/reactionStore.d.ts.map +1 -0
  224. package/lib/stores/reactionStore.js +28 -2
  225. package/lib/stores/subscriptionStore.d.ts +41 -0
  226. package/lib/stores/subscriptionStore.d.ts.map +1 -0
  227. package/lib/stores/subscriptionStore.js +85 -0
  228. package/lib/stores/tagStore.d.ts +8 -5
  229. package/lib/stores/tagStore.d.ts.map +1 -0
  230. package/lib/stores/tagStore.js +87 -2
  231. package/lib/stores/translationStore.d.ts +42 -0
  232. package/lib/stores/translationStore.d.ts.map +1 -0
  233. package/lib/stores/translationStore.js +122 -0
  234. package/lib/stores/userStore.d.ts +5 -4
  235. package/lib/stores/userStore.d.ts.map +1 -0
  236. package/lib/stores/userStore.js +319 -2
  237. package/lib/stores/videoStore.d.ts +39 -0
  238. package/lib/stores/videoStore.d.ts.map +1 -0
  239. package/lib/stores/videoStore.js +132 -0
  240. package/lib/stores/websocketStore.d.ts +1 -0
  241. package/lib/stores/websocketStore.d.ts.map +1 -0
  242. package/lib/stores/websocketStore.js +51 -2
  243. package/lib/types/apps.types.d.ts +17 -0
  244. package/lib/types/apps.types.d.ts.map +1 -0
  245. package/lib/types/apps.types.js +6 -0
  246. package/lib/types/common.types.d.ts +31 -0
  247. package/lib/types/common.types.d.ts.map +1 -0
  248. package/lib/types/common.types.js +6 -0
  249. package/lib/types/conversations.types.d.ts +17 -0
  250. package/lib/types/conversations.types.d.ts.map +1 -0
  251. package/lib/types/conversations.types.js +6 -0
  252. package/lib/types/edges.types.d.ts +38 -0
  253. package/lib/types/edges.types.d.ts.map +1 -0
  254. package/lib/types/edges.types.js +6 -0
  255. package/lib/types/groups.types.d.ts +19 -0
  256. package/lib/types/groups.types.d.ts.map +1 -0
  257. package/lib/types/groups.types.js +6 -0
  258. package/lib/types/index.d.ts +12 -0
  259. package/lib/types/index.d.ts.map +1 -0
  260. package/lib/types/index.js +12 -0
  261. package/lib/types/subscriptions.types.d.ts +32 -0
  262. package/lib/types/subscriptions.types.d.ts.map +1 -0
  263. package/lib/types/subscriptions.types.js +6 -0
  264. package/lib/types/videos.types.d.ts +61 -0
  265. package/lib/types/videos.types.d.ts.map +1 -0
  266. package/lib/types/videos.types.js +6 -0
  267. package/lib/utils/MetropolisProvider.d.ts +39 -15
  268. package/lib/utils/MetropolisProvider.d.ts.map +1 -0
  269. package/lib/utils/MetropolisProvider.js +31 -2
  270. package/lib/utils/actionFactory.d.ts +21 -19
  271. package/lib/utils/actionFactory.d.ts.map +1 -0
  272. package/lib/utils/actionFactory.js +95 -2
  273. package/lib/utils/api.d.ts +5 -4
  274. package/lib/utils/api.d.ts.map +1 -0
  275. package/lib/utils/api.js +252 -6
  276. package/lib/utils/app.d.ts +1 -0
  277. package/lib/utils/app.d.ts.map +1 -0
  278. package/lib/utils/app.js +15 -2
  279. package/lib/utils/baseActionFactory.d.ts +5 -23
  280. package/lib/utils/baseActionFactory.d.ts.map +1 -0
  281. package/lib/utils/baseActionFactory.js +72 -2
  282. package/lib/utils/configUtils.d.ts +11 -0
  283. package/lib/utils/configUtils.d.ts.map +1 -0
  284. package/lib/utils/configUtils.js +20 -0
  285. package/lib/utils/dateUtils.d.ts +1 -0
  286. package/lib/utils/dateUtils.d.ts.map +1 -0
  287. package/lib/utils/dateUtils.js +11 -2
  288. package/lib/utils/file.d.ts +3 -1
  289. package/lib/utils/file.d.ts.map +1 -0
  290. package/lib/utils/file.js +156 -2
  291. package/lib/utils/i18n.d.ts +7 -0
  292. package/lib/utils/i18n.d.ts.map +1 -0
  293. package/lib/utils/i18n.js +96 -0
  294. package/lib/utils/index.d.ts +20 -0
  295. package/lib/utils/index.d.ts.map +1 -0
  296. package/lib/utils/index.js +26 -0
  297. package/lib/utils/location.d.ts +4 -3
  298. package/lib/utils/location.d.ts.map +1 -0
  299. package/lib/utils/location.js +82 -2
  300. package/lib/utils/permissionUtils.d.ts +22 -0
  301. package/lib/utils/permissionUtils.d.ts.map +1 -0
  302. package/lib/utils/permissionUtils.js +72 -0
  303. package/lib/utils/requestCache.d.ts +8 -0
  304. package/lib/utils/requestCache.d.ts.map +1 -0
  305. package/lib/utils/requestCache.js +53 -0
  306. package/lib/utils/session.d.ts +14 -0
  307. package/lib/utils/session.d.ts.map +1 -0
  308. package/lib/utils/session.js +107 -0
  309. package/lib/utils/useConversationTyping.d.ts +26 -0
  310. package/lib/utils/useConversationTyping.d.ts.map +1 -0
  311. package/lib/utils/useConversationTyping.js +117 -0
  312. package/lib/utils/useMetropolis.d.ts +67 -12
  313. package/lib/utils/useMetropolis.d.ts.map +1 -0
  314. package/lib/utils/useMetropolis.js +311 -2
  315. package/lib/utils/useTranslations.d.ts +16 -0
  316. package/lib/utils/useTranslations.d.ts.map +1 -0
  317. package/lib/utils/useTranslations.js +105 -0
  318. package/lib/utils/validatorFactory.d.ts +3 -2
  319. package/lib/utils/validatorFactory.d.ts.map +1 -0
  320. package/lib/utils/validatorFactory.js +95 -2
  321. package/package.json +58 -17
  322. package/temp_signin.ts +73 -0
  323. package/lib/actions/profileActions/profileActions.d.ts +0 -50
  324. package/lib/actions/profileActions/profileActions.js +0 -2
  325. package/lib/adapters/profileAdapter/profileAdapter.d.ts +0 -32
  326. package/lib/adapters/profileAdapter/profileAdapter.js +0 -2
  327. package/lib/stores/profileStore.d.ts +0 -24
  328. package/lib/stores/profileStore.js +0 -2
  329. /package/{FACTORY_PATTERN_GUIDE.md → factoryPatternGuide.md} +0 -0
@@ -0,0 +1,197 @@
1
+ import { buildSchema, graphql } from 'graphql';
2
+ import http from 'http';
3
+ /**
4
+ * E2E Test GraphQL Server
5
+ * Mocks only the database/resolver layer while keeping real GraphQL execution
6
+ * Uses minimal HTTP + graphql-core
7
+ */ const typeDefs = `
8
+ type Query {
9
+ health: String!
10
+ }
11
+
12
+ type Mutation {
13
+ users: UsersMutation!
14
+ }
15
+
16
+ type UsersMutation {
17
+ signIn(user: UserInput!, expires: Int): Session
18
+ addUser(user: UserInput!): User
19
+ refreshSession(token: String!, expires: Int): Session
20
+ }
21
+
22
+ type Session {
23
+ token: String!
24
+ expires: Int
25
+ issued: Int
26
+ userId: String!
27
+ username: String!
28
+ }
29
+
30
+ type User {
31
+ userId: String!
32
+ username: String!
33
+ email: String
34
+ }
35
+
36
+ input UserInput {
37
+ username: String!
38
+ email: String
39
+ password: String!
40
+ }
41
+ `;
42
+ // Mock database
43
+ export const MOCK_USER = {
44
+ userId: 'user-123',
45
+ username: 'testuser',
46
+ email: 'test@example.com',
47
+ password: 'password123'
48
+ };
49
+ export const MOCK_SESSION = {
50
+ token: 'auth-token-xyz-123',
51
+ expires: Math.floor(Date.now() / 1000) + 86400,
52
+ issued: Math.floor(Date.now() / 1000),
53
+ userId: MOCK_USER.userId,
54
+ username: MOCK_USER.username
55
+ };
56
+ /**
57
+ * Start test GraphQL server
58
+ */ export const startTestServer = async (port = 3001)=>{
59
+ const schema = buildSchema(typeDefs);
60
+ const server = http.createServer(async (req, res)=>{
61
+ res.setHeader('Access-Control-Allow-Origin', '*');
62
+ res.setHeader('Access-Control-Allow-Methods', 'POST, OPTIONS');
63
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
64
+ res.setHeader('Content-Type', 'application/json');
65
+ if (req.method === 'OPTIONS') {
66
+ res.writeHead(200);
67
+ res.end();
68
+ return;
69
+ }
70
+ if (req.method === 'OPTIONS') {
71
+ res.writeHead(200);
72
+ res.end();
73
+ return;
74
+ }
75
+ if (req.url === '/graphql' && req.method === 'POST') {
76
+ // Handle GraphQL requests
77
+ let body = '';
78
+ req.on('data', (chunk)=>{
79
+ body += chunk.toString();
80
+ });
81
+ req.on('end', async ()=>{
82
+ try {
83
+ const { query, variables } = JSON.parse(body);
84
+ console.log('GraphQL request received', {
85
+ query,
86
+ variables
87
+ });
88
+ // Create root value with proper resolver structure
89
+ const rootValue = {
90
+ health: ()=>'ok',
91
+ users: (_parent, args, context, info)=>{
92
+ // Return an object that resolves the UsersMutation fields
93
+ return {
94
+ signIn: (args)=>{
95
+ const { expires, user = {} } = args;
96
+ const { password, username } = user;
97
+ if (username === MOCK_USER.username && password === MOCK_USER.password) {
98
+ return {
99
+ token: MOCK_SESSION.token,
100
+ expires: expires || MOCK_SESSION.expires,
101
+ issued: MOCK_SESSION.issued,
102
+ userId: MOCK_USER.userId,
103
+ username: MOCK_USER.username
104
+ };
105
+ }
106
+ throw new Error('Invalid credentials');
107
+ },
108
+ addUser: (args)=>{
109
+ const { user } = args;
110
+ return {
111
+ userId: `user-${Date.now()}`,
112
+ username: user.username,
113
+ email: user.email
114
+ };
115
+ },
116
+ refreshSession: (args)=>{
117
+ const { token, expires } = args;
118
+ if (token === MOCK_SESSION.token) {
119
+ return {
120
+ token: MOCK_SESSION.token,
121
+ expires: expires || MOCK_SESSION.expires,
122
+ issued: Math.floor(Date.now() / 1000),
123
+ userId: MOCK_USER.userId,
124
+ username: MOCK_USER.username
125
+ };
126
+ }
127
+ throw new Error('Invalid token');
128
+ }
129
+ };
130
+ }
131
+ };
132
+ const result = await graphql({
133
+ schema,
134
+ source: query,
135
+ rootValue,
136
+ variableValues: variables || {}
137
+ });
138
+ console.log('GraphQL result', JSON.stringify(result, null, 2));
139
+ res.writeHead(200);
140
+ res.end(JSON.stringify(result));
141
+ } catch (error) {
142
+ console.error('GraphQL server error', error);
143
+ res.writeHead(500);
144
+ const errorMessage = error instanceof Error ? error.message : String(error);
145
+ res.end(JSON.stringify({
146
+ errors: [
147
+ {
148
+ message: errorMessage
149
+ }
150
+ ]
151
+ }));
152
+ }
153
+ });
154
+ } else if (req.url === '/upload' && req.method === 'POST') {
155
+ // Handle file upload requests
156
+ console.log('Upload request received');
157
+ // Mock successful upload response
158
+ res.writeHead(200);
159
+ res.end(JSON.stringify({
160
+ data: {
161
+ success: true,
162
+ url: 'https://example.com/uploaded-image.jpg'
163
+ }
164
+ }));
165
+ } else {
166
+ res.writeHead(404);
167
+ res.end(JSON.stringify({
168
+ error: 'Not found'
169
+ }));
170
+ }
171
+ });
172
+ return new Promise((resolve)=>{
173
+ server.listen(port, ()=>{
174
+ console.log(`Test GraphQL server running on http://localhost:${port}/graphql`);
175
+ resolve({
176
+ server,
177
+ port
178
+ });
179
+ });
180
+ });
181
+ };
182
+ // Sanity check so this helper file is treated as a test module without failing
183
+ describe('testGraphQLServer helper', ()=>{
184
+ it('exports startTestServer and stopTestServer', ()=>{
185
+ expect(typeof startTestServer).toBe('function');
186
+ expect(typeof stopTestServer).toBe('function');
187
+ });
188
+ });
189
+ /**
190
+ * Stop test server
191
+ */ export const stopTestServer = (server)=>{
192
+ return new Promise((resolve)=>{
193
+ server.close(resolve);
194
+ });
195
+ };
196
+
197
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvX190ZXN0c19fL2UyZS9oZWxwZXJzL3Rlc3RHcmFwaFFMU2VydmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJ1aWxkU2NoZW1hLCBncmFwaHFsIH0gZnJvbSAnZ3JhcGhxbCc7XG5pbXBvcnQgaHR0cCBmcm9tICdodHRwJztcblxuLyoqXG4gKiBFMkUgVGVzdCBHcmFwaFFMIFNlcnZlclxuICogTW9ja3Mgb25seSB0aGUgZGF0YWJhc2UvcmVzb2x2ZXIgbGF5ZXIgd2hpbGUga2VlcGluZyByZWFsIEdyYXBoUUwgZXhlY3V0aW9uXG4gKiBVc2VzIG1pbmltYWwgSFRUUCArIGdyYXBocWwtY29yZVxuICovXG5cbmNvbnN0IHR5cGVEZWZzID0gYFxuICB0eXBlIFF1ZXJ5IHtcbiAgICBoZWFsdGg6IFN0cmluZyFcbiAgfVxuXG4gIHR5cGUgTXV0YXRpb24ge1xuICAgIHVzZXJzOiBVc2Vyc011dGF0aW9uIVxuICB9XG5cbiAgdHlwZSBVc2Vyc011dGF0aW9uIHtcbiAgICBzaWduSW4odXNlcjogVXNlcklucHV0ISwgZXhwaXJlczogSW50KTogU2Vzc2lvblxuICAgIGFkZFVzZXIodXNlcjogVXNlcklucHV0ISk6IFVzZXJcbiAgICByZWZyZXNoU2Vzc2lvbih0b2tlbjogU3RyaW5nISwgZXhwaXJlczogSW50KTogU2Vzc2lvblxuICB9XG5cbiAgdHlwZSBTZXNzaW9uIHtcbiAgICB0b2tlbjogU3RyaW5nIVxuICAgIGV4cGlyZXM6IEludFxuICAgIGlzc3VlZDogSW50XG4gICAgdXNlcklkOiBTdHJpbmchXG4gICAgdXNlcm5hbWU6IFN0cmluZyFcbiAgfVxuXG4gIHR5cGUgVXNlciB7XG4gICAgdXNlcklkOiBTdHJpbmchXG4gICAgdXNlcm5hbWU6IFN0cmluZyFcbiAgICBlbWFpbDogU3RyaW5nXG4gIH1cblxuICBpbnB1dCBVc2VySW5wdXQge1xuICAgIHVzZXJuYW1lOiBTdHJpbmchXG4gICAgZW1haWw6IFN0cmluZ1xuICAgIHBhc3N3b3JkOiBTdHJpbmchXG4gIH1cbmA7XG5cbi8vIE1vY2sgZGF0YWJhc2VcbmV4cG9ydCBjb25zdCBNT0NLX1VTRVIgPSB7XG4gIHVzZXJJZDogJ3VzZXItMTIzJyxcbiAgdXNlcm5hbWU6ICd0ZXN0dXNlcicsXG4gIGVtYWlsOiAndGVzdEBleGFtcGxlLmNvbScsXG4gIHBhc3N3b3JkOiAncGFzc3dvcmQxMjMnXG59O1xuXG5leHBvcnQgY29uc3QgTU9DS19TRVNTSU9OID0ge1xuICB0b2tlbjogJ2F1dGgtdG9rZW4teHl6LTEyMycsXG4gIGV4cGlyZXM6IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApICsgODY0MDAsXG4gIGlzc3VlZDogTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCksXG4gIHVzZXJJZDogTU9DS19VU0VSLnVzZXJJZCxcbiAgdXNlcm5hbWU6IE1PQ0tfVVNFUi51c2VybmFtZVxufTtcblxuLyoqXG4gKiBTdGFydCB0ZXN0IEdyYXBoUUwgc2VydmVyXG4gKi9cbmV4cG9ydCBjb25zdCBzdGFydFRlc3RTZXJ2ZXIgPSBhc3luYyAocG9ydCA9IDMwMDEpID0+IHtcbiAgY29uc3Qgc2NoZW1hID0gYnVpbGRTY2hlbWEodHlwZURlZnMpO1xuXG4gIGNvbnN0IHNlcnZlciA9IGh0dHAuY3JlYXRlU2VydmVyKGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgIHJlcy5zZXRIZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicsICcqJyk7XG4gICAgcmVzLnNldEhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kcycsICdQT1NULCBPUFRJT05TJyk7XG4gICAgcmVzLnNldEhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycycsICdDb250ZW50LVR5cGUsIEF1dGhvcml6YXRpb24nKTtcbiAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuXG4gICAgaWYgKHJlcS5tZXRob2QgPT09ICdPUFRJT05TJykge1xuICAgICAgcmVzLndyaXRlSGVhZCgyMDApO1xuICAgICAgcmVzLmVuZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChyZXEubWV0aG9kID09PSAnT1BUSU9OUycpIHtcbiAgICAgIHJlcy53cml0ZUhlYWQoMjAwKTtcbiAgICAgIHJlcy5lbmQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocmVxLnVybCA9PT0gJy9ncmFwaHFsJyAmJiByZXEubWV0aG9kID09PSAnUE9TVCcpIHtcbiAgICAgIC8vIEhhbmRsZSBHcmFwaFFMIHJlcXVlc3RzXG4gICAgICBsZXQgYm9keSA9ICcnO1xuICAgICAgcmVxLm9uKCdkYXRhJywgY2h1bmsgPT4ge1xuICAgICAgICBib2R5ICs9IGNodW5rLnRvU3RyaW5nKCk7XG4gICAgICB9KTtcblxuICAgICAgcmVxLm9uKCdlbmQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qge3F1ZXJ5LCB2YXJpYWJsZXN9ID0gSlNPTi5wYXJzZShib2R5KTtcbiAgICAgICAgICBjb25zb2xlLmxvZygnR3JhcGhRTCByZXF1ZXN0IHJlY2VpdmVkJywge3F1ZXJ5LCB2YXJpYWJsZXN9KTtcblxuICAgICAgICAgIC8vIENyZWF0ZSByb290IHZhbHVlIHdpdGggcHJvcGVyIHJlc29sdmVyIHN0cnVjdHVyZVxuICAgICAgICAgIGNvbnN0IHJvb3RWYWx1ZSA9IHtcbiAgICAgICAgICAgIGhlYWx0aDogKCkgPT4gJ29rJyxcbiAgICAgICAgICAgIHVzZXJzOiAoX3BhcmVudCwgYXJncywgY29udGV4dCwgaW5mbykgPT4ge1xuICAgICAgICAgICAgICAvLyBSZXR1cm4gYW4gb2JqZWN0IHRoYXQgcmVzb2x2ZXMgdGhlIFVzZXJzTXV0YXRpb24gZmllbGRzXG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc2lnbkluOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3Qge2V4cGlyZXMsIHVzZXIgPSB7fX0gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgY29uc3Qge3Bhc3N3b3JkLCB1c2VybmFtZX0gPSB1c2VyO1xuXG4gICAgICAgICAgICAgICAgICBpZiAodXNlcm5hbWUgPT09IE1PQ0tfVVNFUi51c2VybmFtZSAmJiBwYXNzd29yZCA9PT0gTU9DS19VU0VSLnBhc3N3b3JkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgdG9rZW46IE1PQ0tfU0VTU0lPTi50b2tlbixcbiAgICAgICAgICAgICAgICAgICAgICBleHBpcmVzOiBleHBpcmVzIHx8IE1PQ0tfU0VTU0lPTi5leHBpcmVzLFxuICAgICAgICAgICAgICAgICAgICAgIGlzc3VlZDogTU9DS19TRVNTSU9OLmlzc3VlZCxcbiAgICAgICAgICAgICAgICAgICAgICB1c2VySWQ6IE1PQ0tfVVNFUi51c2VySWQsXG4gICAgICAgICAgICAgICAgICAgICAgdXNlcm5hbWU6IE1PQ0tfVVNFUi51c2VybmFtZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNyZWRlbnRpYWxzJyk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhZGRVc2VyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3Qge3VzZXJ9ID0gYXJncztcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdXNlcklkOiBgdXNlci0ke0RhdGUubm93KCl9YCxcbiAgICAgICAgICAgICAgICAgICAgdXNlcm5hbWU6IHVzZXIudXNlcm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGVtYWlsOiB1c2VyLmVtYWlsXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVmcmVzaFNlc3Npb246IChhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCB7dG9rZW4sIGV4cGlyZXN9ID0gYXJncztcblxuICAgICAgICAgICAgICAgICAgaWYgKHRva2VuID09PSBNT0NLX1NFU1NJT04udG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogTU9DS19TRVNTSU9OLnRva2VuLFxuICAgICAgICAgICAgICAgICAgICAgIGV4cGlyZXM6IGV4cGlyZXMgfHwgTU9DS19TRVNTSU9OLmV4cGlyZXMsXG4gICAgICAgICAgICAgICAgICAgICAgaXNzdWVkOiBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKSxcbiAgICAgICAgICAgICAgICAgICAgICB1c2VySWQ6IE1PQ0tfVVNFUi51c2VySWQsXG4gICAgICAgICAgICAgICAgICAgICAgdXNlcm5hbWU6IE1PQ0tfVVNFUi51c2VybmFtZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHRva2VuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBncmFwaHFsKHtcbiAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgIHNvdXJjZTogcXVlcnksXG4gICAgICAgICAgICByb290VmFsdWUsXG4gICAgICAgICAgICB2YXJpYWJsZVZhbHVlczogdmFyaWFibGVzIHx8IHt9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zb2xlLmxvZygnR3JhcGhRTCByZXN1bHQnLCBKU09OLnN0cmluZ2lmeShyZXN1bHQsIG51bGwsIDIpKTtcblxuICAgICAgICAgIHJlcy53cml0ZUhlYWQoMjAwKTtcbiAgICAgICAgICByZXMuZW5kKEpTT04uc3RyaW5naWZ5KHJlc3VsdCkpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0dyYXBoUUwgc2VydmVyIGVycm9yJywgZXJyb3IpO1xuICAgICAgICAgIHJlcy53cml0ZUhlYWQoNTAwKTtcbiAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICAgICAgcmVzLmVuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBlcnJvcnM6IFt7bWVzc2FnZTogZXJyb3JNZXNzYWdlfV1cbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAocmVxLnVybCA9PT0gJy91cGxvYWQnICYmIHJlcS5tZXRob2QgPT09ICdQT1NUJykge1xuICAgICAgLy8gSGFuZGxlIGZpbGUgdXBsb2FkIHJlcXVlc3RzXG4gICAgICBjb25zb2xlLmxvZygnVXBsb2FkIHJlcXVlc3QgcmVjZWl2ZWQnKTtcblxuICAgICAgLy8gTW9jayBzdWNjZXNzZnVsIHVwbG9hZCByZXNwb25zZVxuICAgICAgcmVzLndyaXRlSGVhZCgyMDApO1xuICAgICAgcmVzLmVuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgIHVybDogJ2h0dHBzOi8vZXhhbXBsZS5jb20vdXBsb2FkZWQtaW1hZ2UuanBnJ1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcy53cml0ZUhlYWQoNDA0KTtcbiAgICAgIHJlcy5lbmQoSlNPTi5zdHJpbmdpZnkoe2Vycm9yOiAnTm90IGZvdW5kJ30pKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHNlcnZlci5saXN0ZW4ocG9ydCwgKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coYFRlc3QgR3JhcGhRTCBzZXJ2ZXIgcnVubmluZyBvbiBodHRwOi8vbG9jYWxob3N0OiR7cG9ydH0vZ3JhcGhxbGApO1xuICAgICAgcmVzb2x2ZSh7c2VydmVyLCBwb3J0fSk7XG4gICAgfSk7XG4gIH0pO1xufTtcblxuLy8gU2FuaXR5IGNoZWNrIHNvIHRoaXMgaGVscGVyIGZpbGUgaXMgdHJlYXRlZCBhcyBhIHRlc3QgbW9kdWxlIHdpdGhvdXQgZmFpbGluZ1xuZGVzY3JpYmUoJ3Rlc3RHcmFwaFFMU2VydmVyIGhlbHBlcicsICgpID0+IHtcbiAgaXQoJ2V4cG9ydHMgc3RhcnRUZXN0U2VydmVyIGFuZCBzdG9wVGVzdFNlcnZlcicsICgpID0+IHtcbiAgICBleHBlY3QodHlwZW9mIHN0YXJ0VGVzdFNlcnZlcikudG9CZSgnZnVuY3Rpb24nKTtcbiAgICBleHBlY3QodHlwZW9mIHN0b3BUZXN0U2VydmVyKS50b0JlKCdmdW5jdGlvbicpO1xuICB9KTtcbn0pO1xuXG4vKipcbiAqIFN0b3AgdGVzdCBzZXJ2ZXJcbiAqL1xuZXhwb3J0IGNvbnN0IHN0b3BUZXN0U2VydmVyID0gKHNlcnZlcikgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBzZXJ2ZXIuY2xvc2UocmVzb2x2ZSk7XG4gIH0pO1xufTtcbiJdLCJuYW1lcyI6WyJidWlsZFNjaGVtYSIsImdyYXBocWwiLCJodHRwIiwidHlwZURlZnMiLCJNT0NLX1VTRVIiLCJ1c2VySWQiLCJ1c2VybmFtZSIsImVtYWlsIiwicGFzc3dvcmQiLCJNT0NLX1NFU1NJT04iLCJ0b2tlbiIsImV4cGlyZXMiLCJNYXRoIiwiZmxvb3IiLCJEYXRlIiwibm93IiwiaXNzdWVkIiwic3RhcnRUZXN0U2VydmVyIiwicG9ydCIsInNjaGVtYSIsInNlcnZlciIsImNyZWF0ZVNlcnZlciIsInJlcSIsInJlcyIsInNldEhlYWRlciIsIm1ldGhvZCIsIndyaXRlSGVhZCIsImVuZCIsInVybCIsImJvZHkiLCJvbiIsImNodW5rIiwidG9TdHJpbmciLCJxdWVyeSIsInZhcmlhYmxlcyIsIkpTT04iLCJwYXJzZSIsImNvbnNvbGUiLCJsb2ciLCJyb290VmFsdWUiLCJoZWFsdGgiLCJ1c2VycyIsIl9wYXJlbnQiLCJhcmdzIiwiY29udGV4dCIsImluZm8iLCJzaWduSW4iLCJ1c2VyIiwiRXJyb3IiLCJhZGRVc2VyIiwicmVmcmVzaFNlc3Npb24iLCJyZXN1bHQiLCJzb3VyY2UiLCJ2YXJpYWJsZVZhbHVlcyIsInN0cmluZ2lmeSIsImVycm9yIiwiZXJyb3JNZXNzYWdlIiwibWVzc2FnZSIsIlN0cmluZyIsImVycm9ycyIsImRhdGEiLCJzdWNjZXNzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJsaXN0ZW4iLCJkZXNjcmliZSIsIml0IiwiZXhwZWN0IiwidG9CZSIsInN0b3BUZXN0U2VydmVyIiwiY2xvc2UiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFdBQVcsRUFBRUMsT0FBTyxRQUFRLFVBQVU7QUFDL0MsT0FBT0MsVUFBVSxPQUFPO0FBRXhCOzs7O0NBSUMsR0FFRCxNQUFNQyxXQUFXLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQ2xCLENBQUM7QUFFRCxnQkFBZ0I7QUFDaEIsT0FBTyxNQUFNQyxZQUFZO0lBQ3ZCQyxRQUFRO0lBQ1JDLFVBQVU7SUFDVkMsT0FBTztJQUNQQyxVQUFVO0FBQ1osRUFBRTtBQUVGLE9BQU8sTUFBTUMsZUFBZTtJQUMxQkMsT0FBTztJQUNQQyxTQUFTQyxLQUFLQyxLQUFLLENBQUNDLEtBQUtDLEdBQUcsS0FBSyxRQUFRO0lBQ3pDQyxRQUFRSixLQUFLQyxLQUFLLENBQUNDLEtBQUtDLEdBQUcsS0FBSztJQUNoQ1YsUUFBUUQsVUFBVUMsTUFBTTtJQUN4QkMsVUFBVUYsVUFBVUUsUUFBUTtBQUM5QixFQUFFO0FBRUY7O0NBRUMsR0FDRCxPQUFPLE1BQU1XLGtCQUFrQixPQUFPQyxPQUFPLElBQUk7SUFDL0MsTUFBTUMsU0FBU25CLFlBQVlHO0lBRTNCLE1BQU1pQixTQUFTbEIsS0FBS21CLFlBQVksQ0FBQyxPQUFPQyxLQUFLQztRQUMzQ0EsSUFBSUMsU0FBUyxDQUFDLCtCQUErQjtRQUM3Q0QsSUFBSUMsU0FBUyxDQUFDLGdDQUFnQztRQUM5Q0QsSUFBSUMsU0FBUyxDQUFDLGdDQUFnQztRQUM5Q0QsSUFBSUMsU0FBUyxDQUFDLGdCQUFnQjtRQUU5QixJQUFJRixJQUFJRyxNQUFNLEtBQUssV0FBVztZQUM1QkYsSUFBSUcsU0FBUyxDQUFDO1lBQ2RILElBQUlJLEdBQUc7WUFDUDtRQUNGO1FBRUEsSUFBSUwsSUFBSUcsTUFBTSxLQUFLLFdBQVc7WUFDNUJGLElBQUlHLFNBQVMsQ0FBQztZQUNkSCxJQUFJSSxHQUFHO1lBQ1A7UUFDRjtRQUVBLElBQUlMLElBQUlNLEdBQUcsS0FBSyxjQUFjTixJQUFJRyxNQUFNLEtBQUssUUFBUTtZQUNuRCwwQkFBMEI7WUFDMUIsSUFBSUksT0FBTztZQUNYUCxJQUFJUSxFQUFFLENBQUMsUUFBUUMsQ0FBQUE7Z0JBQ2JGLFFBQVFFLE1BQU1DLFFBQVE7WUFDeEI7WUFFQVYsSUFBSVEsRUFBRSxDQUFDLE9BQU87Z0JBQ1osSUFBSTtvQkFDRixNQUFNLEVBQUNHLEtBQUssRUFBRUMsU0FBUyxFQUFDLEdBQUdDLEtBQUtDLEtBQUssQ0FBQ1A7b0JBQ3RDUSxRQUFRQyxHQUFHLENBQUMsNEJBQTRCO3dCQUFDTDt3QkFBT0M7b0JBQVM7b0JBRXpELG1EQUFtRDtvQkFDbkQsTUFBTUssWUFBWTt3QkFDaEJDLFFBQVEsSUFBTTt3QkFDZEMsT0FBTyxDQUFDQyxTQUFTQyxNQUFNQyxTQUFTQzs0QkFDOUIsMERBQTBEOzRCQUMxRCxPQUFPO2dDQUNMQyxRQUFRLENBQUNIO29DQUNQLE1BQU0sRUFBQ2hDLE9BQU8sRUFBRW9DLE9BQU8sQ0FBQyxDQUFDLEVBQUMsR0FBR0o7b0NBQzdCLE1BQU0sRUFBQ25DLFFBQVEsRUFBRUYsUUFBUSxFQUFDLEdBQUd5QztvQ0FFN0IsSUFBSXpDLGFBQWFGLFVBQVVFLFFBQVEsSUFBSUUsYUFBYUosVUFBVUksUUFBUSxFQUFFO3dDQUN0RSxPQUFPOzRDQUNMRSxPQUFPRCxhQUFhQyxLQUFLOzRDQUN6QkMsU0FBU0EsV0FBV0YsYUFBYUUsT0FBTzs0Q0FDeENLLFFBQVFQLGFBQWFPLE1BQU07NENBQzNCWCxRQUFRRCxVQUFVQyxNQUFNOzRDQUN4QkMsVUFBVUYsVUFBVUUsUUFBUTt3Q0FDOUI7b0NBQ0Y7b0NBQ0EsTUFBTSxJQUFJMEMsTUFBTTtnQ0FDbEI7Z0NBQ0FDLFNBQVMsQ0FBQ047b0NBQ1IsTUFBTSxFQUFDSSxJQUFJLEVBQUMsR0FBR0o7b0NBRWYsT0FBTzt3Q0FDTHRDLFFBQVEsQ0FBQyxLQUFLLEVBQUVTLEtBQUtDLEdBQUcsSUFBSTt3Q0FDNUJULFVBQVV5QyxLQUFLekMsUUFBUTt3Q0FDdkJDLE9BQU93QyxLQUFLeEMsS0FBSztvQ0FDbkI7Z0NBQ0Y7Z0NBQ0EyQyxnQkFBZ0IsQ0FBQ1A7b0NBQ2YsTUFBTSxFQUFDakMsS0FBSyxFQUFFQyxPQUFPLEVBQUMsR0FBR2dDO29DQUV6QixJQUFJakMsVUFBVUQsYUFBYUMsS0FBSyxFQUFFO3dDQUNoQyxPQUFPOzRDQUNMQSxPQUFPRCxhQUFhQyxLQUFLOzRDQUN6QkMsU0FBU0EsV0FBV0YsYUFBYUUsT0FBTzs0Q0FDeENLLFFBQVFKLEtBQUtDLEtBQUssQ0FBQ0MsS0FBS0MsR0FBRyxLQUFLOzRDQUNoQ1YsUUFBUUQsVUFBVUMsTUFBTTs0Q0FDeEJDLFVBQVVGLFVBQVVFLFFBQVE7d0NBQzlCO29DQUNGO29DQUNBLE1BQU0sSUFBSTBDLE1BQU07Z0NBQ2xCOzRCQUNGO3dCQUNGO29CQUNGO29CQUVBLE1BQU1HLFNBQVMsTUFBTWxELFFBQVE7d0JBQzNCa0I7d0JBQ0FpQyxRQUFRbkI7d0JBQ1JNO3dCQUNBYyxnQkFBZ0JuQixhQUFhLENBQUM7b0JBQ2hDO29CQUVBRyxRQUFRQyxHQUFHLENBQUMsa0JBQWtCSCxLQUFLbUIsU0FBUyxDQUFDSCxRQUFRLE1BQU07b0JBRTNENUIsSUFBSUcsU0FBUyxDQUFDO29CQUNkSCxJQUFJSSxHQUFHLENBQUNRLEtBQUttQixTQUFTLENBQUNIO2dCQUN6QixFQUFFLE9BQU9JLE9BQU87b0JBQ2RsQixRQUFRa0IsS0FBSyxDQUFDLHdCQUF3QkE7b0JBQ3RDaEMsSUFBSUcsU0FBUyxDQUFDO29CQUNkLE1BQU04QixlQUFlRCxpQkFBaUJQLFFBQVFPLE1BQU1FLE9BQU8sR0FBR0MsT0FBT0g7b0JBQ3JFaEMsSUFBSUksR0FBRyxDQUFDUSxLQUFLbUIsU0FBUyxDQUFDO3dCQUNyQkssUUFBUTs0QkFBQztnQ0FBQ0YsU0FBU0Q7NEJBQVk7eUJBQUU7b0JBQ25DO2dCQUNGO1lBQ0Y7UUFDRixPQUFPLElBQUlsQyxJQUFJTSxHQUFHLEtBQUssYUFBYU4sSUFBSUcsTUFBTSxLQUFLLFFBQVE7WUFDekQsOEJBQThCO1lBQzlCWSxRQUFRQyxHQUFHLENBQUM7WUFFWixrQ0FBa0M7WUFDbENmLElBQUlHLFNBQVMsQ0FBQztZQUNkSCxJQUFJSSxHQUFHLENBQUNRLEtBQUttQixTQUFTLENBQUM7Z0JBQ3JCTSxNQUFNO29CQUNKQyxTQUFTO29CQUNUakMsS0FBSztnQkFDUDtZQUNGO1FBQ0YsT0FBTztZQUNMTCxJQUFJRyxTQUFTLENBQUM7WUFDZEgsSUFBSUksR0FBRyxDQUFDUSxLQUFLbUIsU0FBUyxDQUFDO2dCQUFDQyxPQUFPO1lBQVc7UUFDNUM7SUFDRjtJQUVBLE9BQU8sSUFBSU8sUUFBUSxDQUFDQztRQUNsQjNDLE9BQU80QyxNQUFNLENBQUM5QyxNQUFNO1lBQ2xCbUIsUUFBUUMsR0FBRyxDQUFDLENBQUMsZ0RBQWdELEVBQUVwQixLQUFLLFFBQVEsQ0FBQztZQUM3RTZDLFFBQVE7Z0JBQUMzQztnQkFBUUY7WUFBSTtRQUN2QjtJQUNGO0FBQ0YsRUFBRTtBQUVGLCtFQUErRTtBQUMvRStDLFNBQVMsNEJBQTRCO0lBQ25DQyxHQUFHLDhDQUE4QztRQUMvQ0MsT0FBTyxPQUFPbEQsaUJBQWlCbUQsSUFBSSxDQUFDO1FBQ3BDRCxPQUFPLE9BQU9FLGdCQUFnQkQsSUFBSSxDQUFDO0lBQ3JDO0FBQ0Y7QUFFQTs7Q0FFQyxHQUNELE9BQU8sTUFBTUMsaUJBQWlCLENBQUNqRDtJQUM3QixPQUFPLElBQUkwQyxRQUFRLENBQUNDO1FBQ2xCM0MsT0FBT2tELEtBQUssQ0FBQ1A7SUFDZjtBQUNGLEVBQUUifQ==
@@ -0,0 +1,3 @@
1
+ export declare const startSimpleServer: (port?: number) => Promise<unknown>;
2
+ export declare const stopServer: (server: any) => Promise<unknown>;
3
+ //# sourceMappingURL=testGraphQLServerSimple.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testGraphQLServerSimple.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/e2e/helpers/testGraphQLServerSimple.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,GAAU,aAAW,qBAkClD,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,WAAM,qBAIhC,CAAC"}
@@ -0,0 +1,52 @@
1
+ import http from 'http';
2
+ export const startSimpleServer = async (port = 3002)=>{
3
+ const server = http.createServer((req, res)=>{
4
+ res.setHeader('Content-Type', 'application/json');
5
+ if (req.method === 'POST' && req.url === '/graphql') {
6
+ let body = '';
7
+ req.on('data', (chunk)=>{
8
+ body += chunk.toString();
9
+ });
10
+ req.on('end', ()=>{
11
+ res.writeHead(200);
12
+ res.end(JSON.stringify({
13
+ request: {
14
+ method: req.method,
15
+ url: req.url,
16
+ body: body
17
+ },
18
+ response: {
19
+ message: 'OK'
20
+ }
21
+ }));
22
+ });
23
+ } else {
24
+ res.writeHead(404);
25
+ res.end(JSON.stringify({
26
+ error: 'not found'
27
+ }));
28
+ }
29
+ });
30
+ return new Promise((resolve)=>{
31
+ server.listen(port, ()=>{
32
+ resolve({
33
+ server,
34
+ port
35
+ });
36
+ });
37
+ });
38
+ };
39
+ export const stopServer = (server)=>{
40
+ return new Promise((resolve)=>{
41
+ server.close(resolve);
42
+ });
43
+ };
44
+ // Sanity check for Jest so this helper file has at least one test
45
+ describe('testGraphQLServerSimple helper', ()=>{
46
+ it('exports startSimpleServer and stopServer', ()=>{
47
+ expect(typeof startSimpleServer).toBe('function');
48
+ expect(typeof stopServer).toBe('function');
49
+ });
50
+ });
51
+
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvX190ZXN0c19fL2UyZS9oZWxwZXJzL3Rlc3RHcmFwaFFMU2VydmVyU2ltcGxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBodHRwIGZyb20gJ2h0dHAnO1xuXG5leHBvcnQgY29uc3Qgc3RhcnRTaW1wbGVTZXJ2ZXIgPSBhc3luYyAocG9ydCA9IDMwMDIpID0+IHtcbiAgY29uc3Qgc2VydmVyID0gaHR0cC5jcmVhdGVTZXJ2ZXIoKHJlcSwgcmVzKSA9PiB7XG4gICAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcblxuICAgIGlmIChyZXEubWV0aG9kID09PSAnUE9TVCcgJiYgcmVxLnVybCA9PT0gJy9ncmFwaHFsJykge1xuICAgICAgbGV0IGJvZHkgPSAnJztcbiAgICAgIHJlcS5vbignZGF0YScsIGNodW5rID0+IHtcbiAgICAgICAgYm9keSArPSBjaHVuay50b1N0cmluZygpO1xuICAgICAgfSk7XG5cbiAgICAgIHJlcS5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICByZXMud3JpdGVIZWFkKDIwMCk7XG4gICAgICAgIHJlcy5lbmQoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICAgIG1ldGhvZDogcmVxLm1ldGhvZCxcbiAgICAgICAgICAgIHVybDogcmVxLnVybCxcbiAgICAgICAgICAgIGJvZHk6IGJvZHlcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgICBtZXNzYWdlOiAnT0snXG4gICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzLndyaXRlSGVhZCg0MDQpO1xuICAgICAgcmVzLmVuZChKU09OLnN0cmluZ2lmeSh7ZXJyb3I6ICdub3QgZm91bmQnfSkpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2VydmVyLmxpc3Rlbihwb3J0LCAoKSA9PiB7XG4gICAgICByZXNvbHZlKHtzZXJ2ZXIsIHBvcnR9KTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc3RvcFNlcnZlciA9IChzZXJ2ZXIpID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2VydmVyLmNsb3NlKHJlc29sdmUpO1xuICB9KTtcbn07XG5cbi8vIFNhbml0eSBjaGVjayBmb3IgSmVzdCBzbyB0aGlzIGhlbHBlciBmaWxlIGhhcyBhdCBsZWFzdCBvbmUgdGVzdFxuZGVzY3JpYmUoJ3Rlc3RHcmFwaFFMU2VydmVyU2ltcGxlIGhlbHBlcicsICgpID0+IHtcbiAgaXQoJ2V4cG9ydHMgc3RhcnRTaW1wbGVTZXJ2ZXIgYW5kIHN0b3BTZXJ2ZXInLCAoKSA9PiB7XG4gICAgZXhwZWN0KHR5cGVvZiBzdGFydFNpbXBsZVNlcnZlcikudG9CZSgnZnVuY3Rpb24nKTtcbiAgICBleHBlY3QodHlwZW9mIHN0b3BTZXJ2ZXIpLnRvQmUoJ2Z1bmN0aW9uJyk7XG4gIH0pO1xufSk7XG4iXSwibmFtZXMiOlsiaHR0cCIsInN0YXJ0U2ltcGxlU2VydmVyIiwicG9ydCIsInNlcnZlciIsImNyZWF0ZVNlcnZlciIsInJlcSIsInJlcyIsInNldEhlYWRlciIsIm1ldGhvZCIsInVybCIsImJvZHkiLCJvbiIsImNodW5rIiwidG9TdHJpbmciLCJ3cml0ZUhlYWQiLCJlbmQiLCJKU09OIiwic3RyaW5naWZ5IiwicmVxdWVzdCIsInJlc3BvbnNlIiwibWVzc2FnZSIsImVycm9yIiwiUHJvbWlzZSIsInJlc29sdmUiLCJsaXN0ZW4iLCJzdG9wU2VydmVyIiwiY2xvc2UiLCJkZXNjcmliZSIsIml0IiwiZXhwZWN0IiwidG9CZSJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsVUFBVSxPQUFPO0FBRXhCLE9BQU8sTUFBTUMsb0JBQW9CLE9BQU9DLE9BQU8sSUFBSTtJQUNqRCxNQUFNQyxTQUFTSCxLQUFLSSxZQUFZLENBQUMsQ0FBQ0MsS0FBS0M7UUFDckNBLElBQUlDLFNBQVMsQ0FBQyxnQkFBZ0I7UUFFOUIsSUFBSUYsSUFBSUcsTUFBTSxLQUFLLFVBQVVILElBQUlJLEdBQUcsS0FBSyxZQUFZO1lBQ25ELElBQUlDLE9BQU87WUFDWEwsSUFBSU0sRUFBRSxDQUFDLFFBQVFDLENBQUFBO2dCQUNiRixRQUFRRSxNQUFNQyxRQUFRO1lBQ3hCO1lBRUFSLElBQUlNLEVBQUUsQ0FBQyxPQUFPO2dCQUNaTCxJQUFJUSxTQUFTLENBQUM7Z0JBQ2RSLElBQUlTLEdBQUcsQ0FBQ0MsS0FBS0MsU0FBUyxDQUFDO29CQUNyQkMsU0FBUzt3QkFDUFYsUUFBUUgsSUFBSUcsTUFBTTt3QkFDbEJDLEtBQUtKLElBQUlJLEdBQUc7d0JBQ1pDLE1BQU1BO29CQUNSO29CQUNBUyxVQUFVO3dCQUNSQyxTQUFTO29CQUNYO2dCQUNGO1lBQ0Y7UUFDRixPQUFPO1lBQ0xkLElBQUlRLFNBQVMsQ0FBQztZQUNkUixJQUFJUyxHQUFHLENBQUNDLEtBQUtDLFNBQVMsQ0FBQztnQkFBQ0ksT0FBTztZQUFXO1FBQzVDO0lBQ0Y7SUFFQSxPQUFPLElBQUlDLFFBQVEsQ0FBQ0M7UUFDbEJwQixPQUFPcUIsTUFBTSxDQUFDdEIsTUFBTTtZQUNsQnFCLFFBQVE7Z0JBQUNwQjtnQkFBUUQ7WUFBSTtRQUN2QjtJQUNGO0FBQ0YsRUFBRTtBQUVGLE9BQU8sTUFBTXVCLGFBQWEsQ0FBQ3RCO0lBQ3pCLE9BQU8sSUFBSW1CLFFBQVEsQ0FBQ0M7UUFDbEJwQixPQUFPdUIsS0FBSyxDQUFDSDtJQUNmO0FBQ0YsRUFBRTtBQUVGLGtFQUFrRTtBQUNsRUksU0FBUyxrQ0FBa0M7SUFDekNDLEdBQUcsNENBQTRDO1FBQzdDQyxPQUFPLE9BQU81QixtQkFBbUI2QixJQUFJLENBQUM7UUFDdENELE9BQU8sT0FBT0osWUFBWUssSUFBSSxDQUFDO0lBQ2pDO0FBQ0YifQ==
@@ -0,0 +1,29 @@
1
+ import type { FluxFramework } from '@nlabs/arkhamjs';
2
+ import type { AppType } from '../../types/apps.types.js';
3
+ import type { BaseAdapterOptions } from '../../utils/validatorFactory.js';
4
+ import type { ActionRequestOptions } from '../../utils/requestCache.js';
5
+ export type AppAdapterOptions = BaseAdapterOptions;
6
+ export interface AppActionsOptions {
7
+ appAdapter?: (input: unknown, options?: AppAdapterOptions) => any;
8
+ appAdapterOptions?: AppAdapterOptions;
9
+ }
10
+ export type AppApiResultsType = {
11
+ apps: {
12
+ add?: AppType;
13
+ itemById?: AppType;
14
+ list?: AppType[];
15
+ remove?: AppType;
16
+ update?: AppType;
17
+ };
18
+ };
19
+ export interface AppActions {
20
+ add: (appData: Partial<AppType>, appProps?: string[], requestOptions?: ActionRequestOptions) => Promise<AppType>;
21
+ delete: (appId: string, appProps?: string[], requestOptions?: ActionRequestOptions) => Promise<AppType>;
22
+ itemById: (appId: string, appProps?: string[], requestOptions?: ActionRequestOptions) => Promise<AppType>;
23
+ list: (from?: number, to?: number, appProps?: string[], requestOptions?: ActionRequestOptions) => Promise<AppType[]>;
24
+ update: (app: Partial<AppType>, appProps?: string[], requestOptions?: ActionRequestOptions) => Promise<AppType>;
25
+ updateAppAdapter: (adapter: (input: unknown, options?: AppAdapterOptions) => any) => void;
26
+ updateAppAdapterOptions: (options: AppAdapterOptions) => void;
27
+ }
28
+ export declare const createAppActions: (flux: FluxFramework, options?: AppActionsOptions) => AppActions;
29
+ //# sourceMappingURL=appActions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appActions.d.ts","sourceRoot":"","sources":["../../../src/actions/appActions/appActions.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,2BAA2B,CAAC;AACvD,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,6BAA6B,CAAC;AAItE,MAAM,MAAM,iBAAiB,GAAG,kBAAkB,CAAC;AAEnD,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,iBAAiB,KAAK,GAAG,CAAC;IAClE,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE;QACJ,GAAG,CAAC,EAAE,OAAO,CAAC;QACd,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;QACjB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,CAAC;CACH,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,cAAc,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACjH,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,cAAc,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACxG,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,cAAc,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1G,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,cAAc,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACrH,MAAM,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,cAAc,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAChH,gBAAgB,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,iBAAiB,KAAK,GAAG,KAAK,IAAI,CAAC;IAC1F,uBAAuB,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;CAC/D;AAKD,eAAO,MAAM,gBAAgB,GAC3B,MAAM,aAAa,EACnB,UAAU,iBAAiB,KAC1B,UAyLF,CAAC"}
@@ -0,0 +1,159 @@
1
+ /**
2
+ * Copyright (c) 2026-Present, Nitrogen Labs, Inc.
3
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
+ */ import { parseId, parseNum } from '@nlabs/utils';
5
+ import { validateAppInput } from '../../adapters/appAdapter/appAdapter.js';
6
+ import { appMutation, appQuery } from '../../utils/api.js';
7
+ import { createBaseActions } from '../../utils/baseActionFactory.js';
8
+ import { clearCachedRequest, getCachedRequest, setCachedRequest } from '../../utils/requestCache.js';
9
+ const DATA_TYPE = 'apps';
10
+ const defaultAppValidator = (input, options)=>validateAppInput(input);
11
+ export const createAppActions = (flux, options)=>{
12
+ const appBase = createBaseActions(flux, defaultAppValidator, {
13
+ adapter: options?.appAdapter,
14
+ adapterOptions: options?.appAdapterOptions
15
+ });
16
+ const add = async (appData, appProps = [], requestOptions = {})=>{
17
+ try {
18
+ const queryVariables = {
19
+ app: {
20
+ type: 'AppInput!',
21
+ value: appBase.validator(appData)
22
+ }
23
+ };
24
+ return await appMutation(flux, 'add', DATA_TYPE, queryVariables, [
25
+ 'appId',
26
+ ...appProps
27
+ ]);
28
+ } catch (error) {
29
+ throw error;
30
+ } finally{
31
+ await clearCachedRequest(flux, 'app.list');
32
+ }
33
+ };
34
+ const itemById = async (appId, appProps = [], requestOptions = {})=>{
35
+ try {
36
+ const cachedResult = getCachedRequest(flux, `app.itemById:${appId}`, {
37
+ appId,
38
+ appProps
39
+ }, requestOptions);
40
+ if (cachedResult !== undefined) {
41
+ return cachedResult;
42
+ }
43
+ const queryVariables = {
44
+ appId: {
45
+ type: 'ID!',
46
+ value: parseId(appId)
47
+ }
48
+ };
49
+ const result = await appQuery(flux, 'itemById', DATA_TYPE, queryVariables, [
50
+ 'apiKey',
51
+ 'appId',
52
+ 'description',
53
+ 'imageUrl',
54
+ 'isActive',
55
+ 'name',
56
+ 'settings',
57
+ 'url',
58
+ 'userId',
59
+ ...appProps
60
+ ]);
61
+ return await setCachedRequest(flux, `app.itemById:${appId}`, {
62
+ appId,
63
+ appProps
64
+ }, result, requestOptions);
65
+ } catch (error) {
66
+ throw error;
67
+ }
68
+ };
69
+ const list = async (from = 0, to = 10, appProps = [], requestOptions = {})=>{
70
+ try {
71
+ const cachedResult = getCachedRequest(flux, 'app.list', {
72
+ from,
73
+ to,
74
+ appProps
75
+ }, requestOptions);
76
+ if (cachedResult !== undefined) {
77
+ return cachedResult;
78
+ }
79
+ const queryVariables = {
80
+ from: {
81
+ type: 'Int',
82
+ value: parseNum(from)
83
+ },
84
+ to: {
85
+ type: 'Int',
86
+ value: parseNum(to)
87
+ }
88
+ };
89
+ const result = await appQuery(flux, 'list', DATA_TYPE, queryVariables, [
90
+ 'apiKey',
91
+ 'appId',
92
+ 'description',
93
+ 'imageUrl',
94
+ 'isActive',
95
+ 'name',
96
+ 'settings',
97
+ 'url',
98
+ 'userId',
99
+ ...appProps
100
+ ]);
101
+ return await setCachedRequest(flux, 'app.list', {
102
+ from,
103
+ to,
104
+ appProps
105
+ }, result, requestOptions);
106
+ } catch (error) {
107
+ throw error;
108
+ }
109
+ };
110
+ const deleteApp = async (appId, appProps = [], requestOptions = {})=>{
111
+ try {
112
+ const queryVariables = {
113
+ appId: {
114
+ type: 'ID!',
115
+ value: parseId(appId)
116
+ }
117
+ };
118
+ return await appMutation(flux, 'remove', DATA_TYPE, queryVariables, [
119
+ 'appId',
120
+ ...appProps
121
+ ]);
122
+ } catch (error) {
123
+ throw error;
124
+ } finally{
125
+ await clearCachedRequest(flux, `app.itemById:${appId}`);
126
+ await clearCachedRequest(flux, 'app.list');
127
+ }
128
+ };
129
+ const update = async (app, appProps = [], requestOptions = {})=>{
130
+ try {
131
+ const queryVariables = {
132
+ app: {
133
+ type: 'AppUpdateInput!',
134
+ value: appBase.validator(app)
135
+ }
136
+ };
137
+ return await appMutation(flux, 'update', DATA_TYPE, queryVariables, [
138
+ 'appId',
139
+ ...appProps
140
+ ]);
141
+ } catch (error) {
142
+ throw error;
143
+ } finally{
144
+ await clearCachedRequest(flux, `app.itemById:${String(app?.appId || '')}`);
145
+ await clearCachedRequest(flux, 'app.list');
146
+ }
147
+ };
148
+ return {
149
+ add,
150
+ delete: deleteApp,
151
+ itemById,
152
+ list,
153
+ update,
154
+ updateAppAdapter: appBase.updateAdapter,
155
+ updateAppAdapterOptions: appBase.updateOptions
156
+ };
157
+ };
158
+
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvYWN0aW9ucy9hcHBBY3Rpb25zL2FwcEFjdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjYtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7cGFyc2VJZCwgcGFyc2VOdW19IGZyb20gJ0BubGFicy91dGlscyc7XG5cbmltcG9ydCB7dmFsaWRhdGVBcHBJbnB1dH0gZnJvbSAnLi4vLi4vYWRhcHRlcnMvYXBwQWRhcHRlci9hcHBBZGFwdGVyLmpzJztcbmltcG9ydCB7YXBwTXV0YXRpb24sIGFwcFF1ZXJ5fSBmcm9tICcuLi8uLi91dGlscy9hcGkuanMnO1xuaW1wb3J0IHtjcmVhdGVCYXNlQWN0aW9uc30gZnJvbSAnLi4vLi4vdXRpbHMvYmFzZUFjdGlvbkZhY3RvcnkuanMnO1xuaW1wb3J0IHtjbGVhckNhY2hlZFJlcXVlc3QsIGdldENhY2hlZFJlcXVlc3QsIHNldENhY2hlZFJlcXVlc3R9IGZyb20gJy4uLy4uL3V0aWxzL3JlcXVlc3RDYWNoZS5qcyc7XG5cbmltcG9ydCB0eXBlIHtGbHV4RnJhbWV3b3JrfSBmcm9tICdAbmxhYnMvYXJraGFtanMnO1xuaW1wb3J0IHR5cGUge0FwcFR5cGV9IGZyb20gJy4uLy4uL3R5cGVzL2FwcHMudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0Jhc2VBZGFwdGVyT3B0aW9uc30gZnJvbSAnLi4vLi4vdXRpbHMvdmFsaWRhdG9yRmFjdG9yeS5qcyc7XG5pbXBvcnQgdHlwZSB7QWN0aW9uUmVxdWVzdE9wdGlvbnN9IGZyb20gJy4uLy4uL3V0aWxzL3JlcXVlc3RDYWNoZS5qcyc7XG5cbmNvbnN0IERBVEFfVFlQRSA9ICdhcHBzJztcblxuZXhwb3J0IHR5cGUgQXBwQWRhcHRlck9wdGlvbnMgPSBCYXNlQWRhcHRlck9wdGlvbnM7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwQWN0aW9uc09wdGlvbnMge1xuICBhcHBBZGFwdGVyPzogKGlucHV0OiB1bmtub3duLCBvcHRpb25zPzogQXBwQWRhcHRlck9wdGlvbnMpID0+IGFueTtcbiAgYXBwQWRhcHRlck9wdGlvbnM/OiBBcHBBZGFwdGVyT3B0aW9ucztcbn1cblxuZXhwb3J0IHR5cGUgQXBwQXBpUmVzdWx0c1R5cGUgPSB7XG4gIGFwcHM6IHtcbiAgICBhZGQ/OiBBcHBUeXBlO1xuICAgIGl0ZW1CeUlkPzogQXBwVHlwZTtcbiAgICBsaXN0PzogQXBwVHlwZVtdO1xuICAgIHJlbW92ZT86IEFwcFR5cGU7XG4gICAgdXBkYXRlPzogQXBwVHlwZTtcbiAgfTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwQWN0aW9ucyB7XG4gIGFkZDogKGFwcERhdGE6IFBhcnRpYWw8QXBwVHlwZT4sIGFwcFByb3BzPzogc3RyaW5nW10sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8QXBwVHlwZT47XG4gIGRlbGV0ZTogKGFwcElkOiBzdHJpbmcsIGFwcFByb3BzPzogc3RyaW5nW10sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8QXBwVHlwZT47XG4gIGl0ZW1CeUlkOiAoYXBwSWQ6IHN0cmluZywgYXBwUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxBcHBUeXBlPjtcbiAgbGlzdDogKGZyb20/OiBudW1iZXIsIHRvPzogbnVtYmVyLCBhcHBQcm9wcz86IHN0cmluZ1tdLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPEFwcFR5cGVbXT47XG4gIHVwZGF0ZTogKGFwcDogUGFydGlhbDxBcHBUeXBlPiwgYXBwUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxBcHBUeXBlPjtcbiAgdXBkYXRlQXBwQWRhcHRlcjogKGFkYXB0ZXI6IChpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IEFwcEFkYXB0ZXJPcHRpb25zKSA9PiBhbnkpID0+IHZvaWQ7XG4gIHVwZGF0ZUFwcEFkYXB0ZXJPcHRpb25zOiAob3B0aW9uczogQXBwQWRhcHRlck9wdGlvbnMpID0+IHZvaWQ7XG59XG5cbmNvbnN0IGRlZmF1bHRBcHBWYWxpZGF0b3IgPSAoaW5wdXQ6IHVua25vd24sIG9wdGlvbnM/OiBBcHBBZGFwdGVyT3B0aW9ucykgPT5cbiAgdmFsaWRhdGVBcHBJbnB1dChpbnB1dCk7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVBcHBBY3Rpb25zID0gKFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICBvcHRpb25zPzogQXBwQWN0aW9uc09wdGlvbnNcbik6IEFwcEFjdGlvbnMgPT4ge1xuICBjb25zdCBhcHBCYXNlID0gY3JlYXRlQmFzZUFjdGlvbnMoZmx1eCwgZGVmYXVsdEFwcFZhbGlkYXRvciwge1xuICAgIGFkYXB0ZXI6IG9wdGlvbnM/LmFwcEFkYXB0ZXIsXG4gICAgYWRhcHRlck9wdGlvbnM6IG9wdGlvbnM/LmFwcEFkYXB0ZXJPcHRpb25zXG4gIH0pO1xuXG4gIGNvbnN0IGFkZCA9IGFzeW5jIChcbiAgICBhcHBEYXRhOiBQYXJ0aWFsPEFwcFR5cGU+LFxuICAgIGFwcFByb3BzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8QXBwVHlwZT4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgICAgYXBwOiB7XG4gICAgICAgICAgdHlwZTogJ0FwcElucHV0IScsXG4gICAgICAgICAgdmFsdWU6IGFwcEJhc2UudmFsaWRhdG9yKGFwcERhdGEpXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBhd2FpdCBhcHBNdXRhdGlvbjxBcHBUeXBlPihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ2FkZCcsXG4gICAgICAgIERBVEFfVFlQRSxcbiAgICAgICAgcXVlcnlWYXJpYWJsZXMsXG4gICAgICAgIFsnYXBwSWQnLCAuLi5hcHBQcm9wc11cbiAgICAgICk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGNsZWFyQ2FjaGVkUmVxdWVzdChmbHV4LCAnYXBwLmxpc3QnKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaXRlbUJ5SWQgPSBhc3luYyAoYXBwSWQ6IHN0cmluZywgYXBwUHJvcHM6IHN0cmluZ1tdID0gW10sIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxBcHBUeXBlPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNhY2hlZFJlc3VsdCA9IGdldENhY2hlZFJlcXVlc3Q8QXBwVHlwZT4oZmx1eCwgYGFwcC5pdGVtQnlJZDoke2FwcElkfWAsIHthcHBJZCwgYXBwUHJvcHN9LCByZXF1ZXN0T3B0aW9ucyk7XG5cbiAgICAgIGlmKGNhY2hlZFJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgICBhcHBJZDoge1xuICAgICAgICAgIHR5cGU6ICdJRCEnLFxuICAgICAgICAgIHZhbHVlOiBwYXJzZUlkKGFwcElkKVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhcHBRdWVyeTxBcHBUeXBlPihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ2l0ZW1CeUlkJyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICBxdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgW1xuICAgICAgICAgICdhcGlLZXknLFxuICAgICAgICAgICdhcHBJZCcsXG4gICAgICAgICAgJ2Rlc2NyaXB0aW9uJyxcbiAgICAgICAgICAnaW1hZ2VVcmwnLFxuICAgICAgICAgICdpc0FjdGl2ZScsXG4gICAgICAgICAgJ25hbWUnLFxuICAgICAgICAgICdzZXR0aW5ncycsXG4gICAgICAgICAgJ3VybCcsXG4gICAgICAgICAgJ3VzZXJJZCcsXG4gICAgICAgICAgLi4uYXBwUHJvcHNcbiAgICAgICAgXVxuICAgICAgKTtcbiAgICAgIHJldHVybiBhd2FpdCBzZXRDYWNoZWRSZXF1ZXN0KGZsdXgsIGBhcHAuaXRlbUJ5SWQ6JHthcHBJZH1gLCB7YXBwSWQsIGFwcFByb3BzfSwgcmVzdWx0LCByZXF1ZXN0T3B0aW9ucyk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGxpc3QgPSBhc3luYyAoXG4gICAgZnJvbTogbnVtYmVyID0gMCxcbiAgICB0bzogbnVtYmVyID0gMTAsXG4gICAgYXBwUHJvcHM6IHN0cmluZ1tdID0gW10sXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxBcHBUeXBlW10+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY2FjaGVkUmVzdWx0ID0gZ2V0Q2FjaGVkUmVxdWVzdDxBcHBUeXBlW10+KGZsdXgsICdhcHAubGlzdCcsIHtmcm9tLCB0bywgYXBwUHJvcHN9LCByZXF1ZXN0T3B0aW9ucyk7XG5cbiAgICAgIGlmKGNhY2hlZFJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgICBmcm9tOiB7XG4gICAgICAgICAgdHlwZTogJ0ludCcsXG4gICAgICAgICAgdmFsdWU6IHBhcnNlTnVtKGZyb20pXG4gICAgICAgIH0sXG4gICAgICAgIHRvOiB7XG4gICAgICAgICAgdHlwZTogJ0ludCcsXG4gICAgICAgICAgdmFsdWU6IHBhcnNlTnVtKHRvKVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhcHBRdWVyeTxBcHBUeXBlW10+KFxuICAgICAgICBmbHV4LFxuICAgICAgICAnbGlzdCcsXG4gICAgICAgIERBVEFfVFlQRSxcbiAgICAgICAgcXVlcnlWYXJpYWJsZXMsXG4gICAgICAgIFtcbiAgICAgICAgICAnYXBpS2V5JyxcbiAgICAgICAgICAnYXBwSWQnLFxuICAgICAgICAgICdkZXNjcmlwdGlvbicsXG4gICAgICAgICAgJ2ltYWdlVXJsJyxcbiAgICAgICAgICAnaXNBY3RpdmUnLFxuICAgICAgICAgICduYW1lJyxcbiAgICAgICAgICAnc2V0dGluZ3MnLFxuICAgICAgICAgICd1cmwnLFxuICAgICAgICAgICd1c2VySWQnLFxuICAgICAgICAgIC4uLmFwcFByb3BzXG4gICAgICAgIF1cbiAgICAgICk7XG4gICAgICByZXR1cm4gYXdhaXQgc2V0Q2FjaGVkUmVxdWVzdChmbHV4LCAnYXBwLmxpc3QnLCB7ZnJvbSwgdG8sIGFwcFByb3BzfSwgcmVzdWx0LCByZXF1ZXN0T3B0aW9ucyk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGRlbGV0ZUFwcCA9IGFzeW5jIChcbiAgICBhcHBJZDogc3RyaW5nLFxuICAgIGFwcFByb3BzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8QXBwVHlwZT4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgICAgYXBwSWQ6IHtcbiAgICAgICAgICB0eXBlOiAnSUQhJyxcbiAgICAgICAgICB2YWx1ZTogcGFyc2VJZChhcHBJZClcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGF3YWl0IGFwcE11dGF0aW9uPEFwcFR5cGU+KFxuICAgICAgICBmbHV4LFxuICAgICAgICAncmVtb3ZlJyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICBxdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgWydhcHBJZCcsIC4uLmFwcFByb3BzXVxuICAgICAgKTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgY2xlYXJDYWNoZWRSZXF1ZXN0KGZsdXgsIGBhcHAuaXRlbUJ5SWQ6JHthcHBJZH1gKTtcbiAgICAgIGF3YWl0IGNsZWFyQ2FjaGVkUmVxdWVzdChmbHV4LCAnYXBwLmxpc3QnKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgdXBkYXRlID0gYXN5bmMgKFxuICAgIGFwcDogUGFydGlhbDxBcHBUeXBlPixcbiAgICBhcHBQcm9wczogc3RyaW5nW10gPSBbXSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPEFwcFR5cGU+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICAgIGFwcDoge1xuICAgICAgICAgIHR5cGU6ICdBcHBVcGRhdGVJbnB1dCEnLFxuICAgICAgICAgIHZhbHVlOiBhcHBCYXNlLnZhbGlkYXRvcihhcHApXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBhd2FpdCBhcHBNdXRhdGlvbjxBcHBUeXBlPihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ3VwZGF0ZScsXG4gICAgICAgIERBVEFfVFlQRSxcbiAgICAgICAgcXVlcnlWYXJpYWJsZXMsXG4gICAgICAgIFsnYXBwSWQnLCAuLi5hcHBQcm9wc11cbiAgICAgICk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGNsZWFyQ2FjaGVkUmVxdWVzdChmbHV4LCBgYXBwLml0ZW1CeUlkOiR7U3RyaW5nKGFwcD8uYXBwSWQgfHwgJycpfWApO1xuICAgICAgYXdhaXQgY2xlYXJDYWNoZWRSZXF1ZXN0KGZsdXgsICdhcHAubGlzdCcpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGFkZCxcbiAgICBkZWxldGU6IGRlbGV0ZUFwcCxcbiAgICBpdGVtQnlJZCxcbiAgICBsaXN0LFxuICAgIHVwZGF0ZSxcbiAgICB1cGRhdGVBcHBBZGFwdGVyOiBhcHBCYXNlLnVwZGF0ZUFkYXB0ZXIsXG4gICAgdXBkYXRlQXBwQWRhcHRlck9wdGlvbnM6IGFwcEJhc2UudXBkYXRlT3B0aW9uc1xuICB9O1xufTtcbiJdLCJuYW1lcyI6WyJwYXJzZUlkIiwicGFyc2VOdW0iLCJ2YWxpZGF0ZUFwcElucHV0IiwiYXBwTXV0YXRpb24iLCJhcHBRdWVyeSIsImNyZWF0ZUJhc2VBY3Rpb25zIiwiY2xlYXJDYWNoZWRSZXF1ZXN0IiwiZ2V0Q2FjaGVkUmVxdWVzdCIsInNldENhY2hlZFJlcXVlc3QiLCJEQVRBX1RZUEUiLCJkZWZhdWx0QXBwVmFsaWRhdG9yIiwiaW5wdXQiLCJvcHRpb25zIiwiY3JlYXRlQXBwQWN0aW9ucyIsImZsdXgiLCJhcHBCYXNlIiwiYWRhcHRlciIsImFwcEFkYXB0ZXIiLCJhZGFwdGVyT3B0aW9ucyIsImFwcEFkYXB0ZXJPcHRpb25zIiwiYWRkIiwiYXBwRGF0YSIsImFwcFByb3BzIiwicmVxdWVzdE9wdGlvbnMiLCJxdWVyeVZhcmlhYmxlcyIsImFwcCIsInR5cGUiLCJ2YWx1ZSIsInZhbGlkYXRvciIsImVycm9yIiwiaXRlbUJ5SWQiLCJhcHBJZCIsImNhY2hlZFJlc3VsdCIsInVuZGVmaW5lZCIsInJlc3VsdCIsImxpc3QiLCJmcm9tIiwidG8iLCJkZWxldGVBcHAiLCJ1cGRhdGUiLCJTdHJpbmciLCJkZWxldGUiLCJ1cGRhdGVBcHBBZGFwdGVyIiwidXBkYXRlQWRhcHRlciIsInVwZGF0ZUFwcEFkYXB0ZXJPcHRpb25zIiwidXBkYXRlT3B0aW9ucyJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsT0FBTyxFQUFFQyxRQUFRLFFBQU8sZUFBZTtBQUUvQyxTQUFRQyxnQkFBZ0IsUUFBTywwQ0FBMEM7QUFDekUsU0FBUUMsV0FBVyxFQUFFQyxRQUFRLFFBQU8scUJBQXFCO0FBQ3pELFNBQVFDLGlCQUFpQixRQUFPLG1DQUFtQztBQUNuRSxTQUFRQyxrQkFBa0IsRUFBRUMsZ0JBQWdCLEVBQUVDLGdCQUFnQixRQUFPLDhCQUE4QjtBQU9uRyxNQUFNQyxZQUFZO0FBNkJsQixNQUFNQyxzQkFBc0IsQ0FBQ0MsT0FBZ0JDLFVBQzNDVixpQkFBaUJTO0FBRW5CLE9BQU8sTUFBTUUsbUJBQW1CLENBQzlCQyxNQUNBRjtJQUVBLE1BQU1HLFVBQVVWLGtCQUFrQlMsTUFBTUoscUJBQXFCO1FBQzNETSxTQUFTSixTQUFTSztRQUNsQkMsZ0JBQWdCTixTQUFTTztJQUMzQjtJQUVBLE1BQU1DLE1BQU0sT0FDVkMsU0FDQUMsV0FBcUIsRUFBRSxFQUN2QkMsaUJBQXVDLENBQUMsQ0FBQztRQUV6QyxJQUFJO1lBQ0YsTUFBTUMsaUJBQWlCO2dCQUNyQkMsS0FBSztvQkFDSEMsTUFBTTtvQkFDTkMsT0FBT1osUUFBUWEsU0FBUyxDQUFDUDtnQkFDM0I7WUFDRjtZQUVBLE9BQU8sTUFBTWxCLFlBQ1hXLE1BQ0EsT0FDQUwsV0FDQWUsZ0JBQ0E7Z0JBQUM7bUJBQVlGO2FBQVM7UUFFMUIsRUFBRSxPQUFNTyxPQUFPO1lBQ2IsTUFBTUE7UUFDUixTQUFVO1lBQ1IsTUFBTXZCLG1CQUFtQlEsTUFBTTtRQUNqQztJQUNGO0lBRUEsTUFBTWdCLFdBQVcsT0FBT0MsT0FBZVQsV0FBcUIsRUFBRSxFQUFFQyxpQkFBdUMsQ0FBQyxDQUFDO1FB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
@@ -0,0 +1,19 @@
1
+ import type { FluxFramework } from '@nlabs/arkhamjs';
2
+ import type { CollectionType, ConnectionType } from '../../constants/Collections.js';
3
+ import type { ApiResultsType } from '../../utils/api.js';
4
+ import type { ConnectionEdge } from '../../types/edges.types.js';
5
+ import type { ActionRequestOptions } from '../../utils/requestCache.js';
6
+ export interface ConnectionActions {
7
+ addConnection: (fromType: CollectionType, fromId: string, toType: CollectionType, toId: string, connectionType?: ConnectionType, metadata?: Record<string, any>, requestOptions?: ActionRequestOptions) => Promise<ConnectionEdge>;
8
+ getConnections: (fromType: CollectionType, fromId: string, toType?: CollectionType, filters?: Record<string, any>, requestOptions?: ActionRequestOptions) => Promise<ConnectionEdge[]>;
9
+ removeConnection: (fromType: CollectionType, fromId: string, toType: CollectionType, toId: string, requestOptions?: ActionRequestOptions) => Promise<boolean>;
10
+ }
11
+ export interface ConnectionApiResultsType extends ApiResultsType {
12
+ connections?: {
13
+ add?: ConnectionEdge;
14
+ list?: ConnectionEdge[];
15
+ remove?: boolean;
16
+ };
17
+ }
18
+ export declare const createConnectionActions: (flux: FluxFramework) => ConnectionActions;
19
+ //# sourceMappingURL=connectionActions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionActions.d.ts","sourceRoot":"","sources":["../../../src/actions/connectionActions/connectionActions.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAC,cAAc,EAAE,cAAc,EAAC,MAAM,gCAAgC,CAAC;AACnF,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,6BAA6B,CAAC;AAEtE,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,CACb,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,MAAM,EACZ,cAAc,CAAC,EAAE,cAAc,EAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC9B,cAAc,CAAC,EAAE,oBAAoB,KAClC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7B,cAAc,EAAE,CACd,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7B,cAAc,CAAC,EAAE,oBAAoB,KAClC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC/B,gBAAgB,EAAE,CAChB,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,MAAM,EACZ,cAAc,CAAC,EAAE,oBAAoB,KAClC,OAAO,CAAC,OAAO,CAAC,CAAC;CACvB;AAED,MAAM,WAAW,wBAAyB,SAAQ,cAAc;IAC9D,WAAW,CAAC,EAAE;QACZ,GAAG,CAAC,EAAE,cAAc,CAAC;QACrB,IAAI,CAAC,EAAE,cAAc,EAAE,CAAC;QACxB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,CAAC;CACH;AAED,eAAO,MAAM,uBAAuB,GAAI,MAAM,aAAa,KAAG,iBA+K7D,CAAC"}