@nlabs/metropolisjs 0.1.2 → 0.2.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.
- package/.github/copilot-instructions.md +167 -0
- package/AGENTS.md +13 -0
- package/CHANGELOG.md +112 -0
- package/GRAPHQL_VALIDATION_RESULTS.md +158 -0
- package/PERMISSION_GRAPHQL_INTEGRATION.md +293 -0
- package/PERMISSION_IMPLEMENTATION_SUMMARY.md +243 -0
- package/README.md +1123 -112
- package/SIGNIN_GRAPHQL_VALIDATION.md +125 -0
- package/VAULT_GRAPHQL_API_FINDINGS.md +312 -0
- package/docs/ACTIONS.md +63 -0
- package/docs/COLLECTIONS.md +1038 -0
- package/docs/CONNECTIONS.md +1367 -0
- package/docs/CRUD_INTEGRATION.md +702 -0
- package/examples/connections-usage.tsx +909 -0
- package/examples/content-actions-usage.ts +144 -0
- package/examples/crud-usage.tsx +847 -0
- package/examples/extensibility-usage.tsx +889 -0
- package/examples/i18n-import-examples.ts +86 -0
- package/examples/i18n-namespace-usage.ts +118 -0
- package/examples/i18next-singleton-demo.ts +187 -0
- package/examples/permission-system-usage.tsx +415 -0
- package/examples/project-details.tsx +397 -0
- package/examples/shared-i18n-usage.tsx +203 -0
- package/examples/signup-error-handling.ts +100 -0
- package/examples/translation-types.ts +86 -0
- package/examples/translation-usage.tsx +336 -0
- package/index.js +1 -0
- package/jest.config.mjs +28 -0
- package/lex.config.mjs +11 -2
- package/lib/__tests__/e2e/helpers/testGraphQLServer.d.ts +22 -0
- package/lib/__tests__/e2e/helpers/testGraphQLServer.d.ts.map +1 -0
- package/lib/__tests__/e2e/helpers/testGraphQLServer.js +197 -0
- package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.d.ts +3 -0
- package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.d.ts.map +1 -0
- package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.js +52 -0
- package/lib/actions/appActions/appActions.d.ts +29 -0
- package/lib/actions/appActions/appActions.d.ts.map +1 -0
- package/lib/actions/appActions/appActions.js +159 -0
- package/lib/actions/connectionActions/connectionActions.d.ts +19 -0
- package/lib/actions/connectionActions/connectionActions.d.ts.map +1 -0
- package/lib/actions/connectionActions/connectionActions.js +131 -0
- package/lib/actions/contentActions/contentActions.d.ts +34 -0
- package/lib/actions/contentActions/contentActions.d.ts.map +1 -0
- package/lib/actions/contentActions/contentActions.js +314 -0
- package/lib/actions/conversationActions/conversationActions.d.ts +30 -0
- package/lib/actions/conversationActions/conversationActions.d.ts.map +1 -0
- package/lib/actions/conversationActions/conversationActions.js +225 -0
- package/lib/actions/eventActions/eventActions.d.ts +27 -7
- package/lib/actions/eventActions/eventActions.d.ts.map +1 -0
- package/lib/actions/eventActions/eventActions.js +436 -2
- package/lib/actions/groupActions/groupActions.d.ts +30 -0
- package/lib/actions/groupActions/groupActions.d.ts.map +1 -0
- package/lib/actions/groupActions/groupActions.js +229 -0
- package/lib/actions/imageActions/imageActions.d.ts +16 -10
- package/lib/actions/imageActions/imageActions.d.ts.map +1 -0
- package/lib/actions/imageActions/imageActions.js +593 -2
- package/lib/actions/index.d.ts +21 -9
- package/lib/actions/index.d.ts.map +1 -0
- package/lib/actions/index.js +22 -2
- package/lib/actions/locationActions/locationActions.d.ts +11 -9
- package/lib/actions/locationActions/locationActions.d.ts.map +1 -0
- package/lib/actions/locationActions/locationActions.js +388 -2
- package/lib/actions/messageActions/messageActions.d.ts +16 -32
- package/lib/actions/messageActions/messageActions.d.ts.map +1 -0
- package/lib/actions/messageActions/messageActions.js +235 -2
- package/lib/actions/permissionActions/permissionActions.d.ts +34 -0
- package/lib/actions/permissionActions/permissionActions.d.ts.map +1 -0
- package/lib/actions/permissionActions/permissionActions.js +330 -0
- package/lib/actions/personaActions/personaActions.d.ts +65 -0
- package/lib/actions/personaActions/personaActions.d.ts.map +1 -0
- package/lib/actions/personaActions/personaActions.js +572 -0
- package/lib/actions/postActions/postActions.d.ts +12 -32
- package/lib/actions/postActions/postActions.d.ts.map +1 -0
- package/lib/actions/postActions/postActions.js +447 -2
- package/lib/actions/reactionActions/reactionActions.d.ts +13 -27
- package/lib/actions/reactionActions/reactionActions.d.ts.map +1 -0
- package/lib/actions/reactionActions/reactionActions.js +413 -2
- package/lib/actions/sseActions/sseActions.d.ts +1 -0
- package/lib/actions/sseActions/sseActions.d.ts.map +1 -0
- package/lib/actions/sseActions/sseActions.js +148 -2
- package/lib/actions/subscriptionActions/subscriptionActions.d.ts +24 -0
- package/lib/actions/subscriptionActions/subscriptionActions.d.ts.map +1 -0
- package/lib/actions/subscriptionActions/subscriptionActions.js +329 -0
- package/lib/actions/tagActions/tagActions.d.ts +13 -31
- package/lib/actions/tagActions/tagActions.d.ts.map +1 -0
- package/lib/actions/tagActions/tagActions.js +347 -2
- package/lib/actions/translationActions/translationActions.d.ts +38 -0
- package/lib/actions/translationActions/translationActions.d.ts.map +1 -0
- package/lib/actions/translationActions/translationActions.js +189 -0
- package/lib/actions/userActions/userActions.d.ts +42 -95
- package/lib/actions/userActions/userActions.d.ts.map +1 -0
- package/lib/actions/userActions/userActions.js +844 -2
- package/lib/actions/videoActions/videoActions.d.ts +41 -0
- package/lib/actions/videoActions/videoActions.d.ts.map +1 -0
- package/lib/actions/videoActions/videoActions.js +532 -0
- package/lib/actions/websocketActions/websocketActions.d.ts +20 -21
- package/lib/actions/websocketActions/websocketActions.d.ts.map +1 -0
- package/lib/actions/websocketActions/websocketActions.js +377 -2
- package/lib/adapters/appAdapter/appAdapter.d.ts +8 -0
- package/lib/adapters/appAdapter/appAdapter.d.ts.map +1 -0
- package/lib/adapters/appAdapter/appAdapter.js +90 -0
- package/lib/adapters/arangoAdapter/arangoAdapter.d.ts +3 -2
- package/lib/adapters/arangoAdapter/arangoAdapter.d.ts.map +1 -0
- package/lib/adapters/arangoAdapter/arangoAdapter.js +75 -2
- package/lib/adapters/contentAdapter/contentAdapter.d.ts +3 -2
- package/lib/adapters/contentAdapter/contentAdapter.d.ts.map +1 -0
- package/lib/adapters/contentAdapter/contentAdapter.js +107 -2
- package/lib/adapters/conversationAdapter/conversationAdapter.d.ts +3 -2
- package/lib/adapters/conversationAdapter/conversationAdapter.d.ts.map +1 -0
- package/lib/adapters/conversationAdapter/conversationAdapter.js +75 -2
- package/lib/adapters/eventAdapter/eventAdapter.d.ts +5 -2
- package/lib/adapters/eventAdapter/eventAdapter.d.ts.map +1 -0
- package/lib/adapters/eventAdapter/eventAdapter.js +162 -2
- package/lib/adapters/fileAdapter/fileAdapter.d.ts +3 -2
- package/lib/adapters/fileAdapter/fileAdapter.d.ts.map +1 -0
- package/lib/adapters/fileAdapter/fileAdapter.js +118 -2
- package/lib/adapters/groupAdapter/groupAdapter.d.ts +28 -0
- package/lib/adapters/groupAdapter/groupAdapter.d.ts.map +1 -0
- package/lib/adapters/groupAdapter/groupAdapter.js +66 -0
- package/lib/adapters/imageAdapter/imageAdapter.d.ts +9 -2
- package/lib/adapters/imageAdapter/imageAdapter.d.ts.map +1 -0
- package/lib/adapters/imageAdapter/imageAdapter.js +134 -2
- package/lib/adapters/index.d.ts +34 -16
- package/lib/adapters/index.d.ts.map +1 -0
- package/lib/adapters/index.js +19 -2
- package/lib/adapters/locationAdapter/locationAdapter.d.ts +3 -2
- package/lib/adapters/locationAdapter/locationAdapter.d.ts.map +1 -0
- package/lib/adapters/locationAdapter/locationAdapter.js +95 -2
- package/lib/adapters/messageAdapter/messageAdapter.d.ts +23 -19
- package/lib/adapters/messageAdapter/messageAdapter.d.ts.map +1 -0
- package/lib/adapters/messageAdapter/messageAdapter.js +82 -2
- package/lib/adapters/permissionAdapter/permissionAdapter.d.ts +41 -0
- package/lib/adapters/permissionAdapter/permissionAdapter.d.ts.map +1 -0
- package/lib/adapters/permissionAdapter/permissionAdapter.js +120 -0
- package/lib/adapters/personaAdapter/personaAdapter.d.ts +28 -2
- package/lib/adapters/personaAdapter/personaAdapter.d.ts.map +1 -0
- package/lib/adapters/personaAdapter/personaAdapter.js +161 -2
- package/lib/adapters/postAdapter/postAdapter.d.ts +3 -2
- package/lib/adapters/postAdapter/postAdapter.d.ts.map +1 -0
- package/lib/adapters/postAdapter/postAdapter.js +115 -2
- package/lib/adapters/reactionAdapter/reactionAdapter.d.ts +5 -2
- package/lib/adapters/reactionAdapter/reactionAdapter.d.ts.map +1 -0
- package/lib/adapters/reactionAdapter/reactionAdapter.js +81 -2
- package/lib/adapters/reaktorAdapter/reaktorAdapter.d.ts +3 -2
- package/lib/adapters/reaktorAdapter/reaktorAdapter.d.ts.map +1 -0
- package/lib/adapters/reaktorAdapter/reaktorAdapter.js +58 -2
- package/lib/adapters/sessionAdapter/sessionAdapter.d.ts +3 -2
- package/lib/adapters/sessionAdapter/sessionAdapter.d.ts.map +1 -0
- package/lib/adapters/sessionAdapter/sessionAdapter.js +80 -2
- package/lib/adapters/tagAdapter/tagAdapter.d.ts +3 -2
- package/lib/adapters/tagAdapter/tagAdapter.d.ts.map +1 -0
- package/lib/adapters/tagAdapter/tagAdapter.js +98 -2
- package/lib/adapters/translationAdapter/translationAdapter.d.ts +21 -0
- package/lib/adapters/translationAdapter/translationAdapter.d.ts.map +1 -0
- package/lib/adapters/translationAdapter/translationAdapter.js +55 -0
- package/lib/adapters/userAdapter/userAdapter.d.ts +18 -6
- package/lib/adapters/userAdapter/userAdapter.d.ts.map +1 -0
- package/lib/adapters/userAdapter/userAdapter.js +302 -2
- package/lib/adapters/videoAdapter/videoAdapter.d.ts +8 -0
- package/lib/adapters/videoAdapter/videoAdapter.d.ts.map +1 -0
- package/lib/adapters/videoAdapter/videoAdapter.js +194 -0
- package/lib/config/index.d.ts +19 -6
- package/lib/config/index.d.ts.map +1 -0
- package/lib/config/index.js +97 -2
- package/lib/constants/Collections.d.ts +44 -0
- package/lib/constants/Collections.d.ts.map +1 -0
- package/lib/constants/Collections.js +40 -0
- package/lib/constants/MetropolisConstants.d.ts +1 -0
- package/lib/constants/MetropolisConstants.d.ts.map +1 -0
- package/lib/constants/MetropolisConstants.js +15 -2
- package/lib/graphql/message.d.ts +1 -0
- package/lib/graphql/message.d.ts.map +1 -0
- package/lib/graphql/message.js +6 -4
- package/lib/graphql/notification.d.ts +1 -0
- package/lib/graphql/notification.d.ts.map +1 -0
- package/lib/graphql/notification.js +6 -4
- package/lib/graphql/session.d.ts +1 -0
- package/lib/graphql/session.d.ts.map +1 -0
- package/lib/graphql/session.js +4 -3
- package/lib/index.d.ts +45 -22
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +248 -2
- package/lib/stores/appStore.d.ts +1 -0
- package/lib/stores/appStore.d.ts.map +1 -0
- package/lib/stores/appStore.js +23 -2
- package/lib/stores/contentStore.d.ts +36 -0
- package/lib/stores/contentStore.d.ts.map +1 -0
- package/lib/stores/contentStore.js +139 -0
- package/lib/stores/conversationStore.d.ts +38 -0
- package/lib/stores/conversationStore.d.ts.map +1 -0
- package/lib/stores/conversationStore.js +117 -0
- package/lib/stores/eventStore.d.ts +4 -1
- package/lib/stores/eventStore.d.ts.map +1 -0
- package/lib/stores/eventStore.js +47 -2
- package/lib/stores/groupStore.d.ts +37 -0
- package/lib/stores/groupStore.d.ts.map +1 -0
- package/lib/stores/groupStore.js +68 -0
- package/lib/stores/imageStore.d.ts +6 -1
- package/lib/stores/imageStore.d.ts.map +1 -0
- package/lib/stores/imageStore.js +53 -2
- package/lib/stores/index.d.ts +20 -11
- package/lib/stores/index.d.ts.map +1 -0
- package/lib/stores/index.js +24 -2
- package/lib/stores/locationStore.d.ts +2 -1
- package/lib/stores/locationStore.d.ts.map +1 -0
- package/lib/stores/locationStore.js +42 -2
- package/lib/stores/messageStore.d.ts +19 -4
- package/lib/stores/messageStore.d.ts.map +1 -0
- package/lib/stores/messageStore.js +137 -2
- package/lib/stores/notificationStore.d.ts +33 -0
- package/lib/stores/notificationStore.d.ts.map +1 -0
- package/lib/stores/notificationStore.js +55 -0
- package/lib/stores/permissionStore.d.ts +37 -0
- package/lib/stores/permissionStore.d.ts.map +1 -0
- package/lib/stores/permissionStore.js +117 -0
- package/lib/stores/personaStore.d.ts +26 -0
- package/lib/stores/personaStore.d.ts.map +1 -0
- package/lib/stores/personaStore.js +118 -0
- package/lib/stores/postStore.d.ts +2 -1
- package/lib/stores/postStore.d.ts.map +1 -0
- package/lib/stores/postStore.js +53 -2
- package/lib/stores/reactionStore.d.ts +1 -0
- package/lib/stores/reactionStore.d.ts.map +1 -0
- package/lib/stores/reactionStore.js +28 -2
- package/lib/stores/subscriptionStore.d.ts +41 -0
- package/lib/stores/subscriptionStore.d.ts.map +1 -0
- package/lib/stores/subscriptionStore.js +85 -0
- package/lib/stores/tagStore.d.ts +8 -5
- package/lib/stores/tagStore.d.ts.map +1 -0
- package/lib/stores/tagStore.js +87 -2
- package/lib/stores/translationStore.d.ts +42 -0
- package/lib/stores/translationStore.d.ts.map +1 -0
- package/lib/stores/translationStore.js +122 -0
- package/lib/stores/userStore.d.ts +5 -4
- package/lib/stores/userStore.d.ts.map +1 -0
- package/lib/stores/userStore.js +319 -2
- package/lib/stores/videoStore.d.ts +39 -0
- package/lib/stores/videoStore.d.ts.map +1 -0
- package/lib/stores/videoStore.js +132 -0
- package/lib/stores/websocketStore.d.ts +1 -0
- package/lib/stores/websocketStore.d.ts.map +1 -0
- package/lib/stores/websocketStore.js +51 -2
- package/lib/types/apps.types.d.ts +17 -0
- package/lib/types/apps.types.d.ts.map +1 -0
- package/lib/types/apps.types.js +6 -0
- package/lib/types/common.types.d.ts +31 -0
- package/lib/types/common.types.d.ts.map +1 -0
- package/lib/types/common.types.js +6 -0
- package/lib/types/conversations.types.d.ts +17 -0
- package/lib/types/conversations.types.d.ts.map +1 -0
- package/lib/types/conversations.types.js +6 -0
- package/lib/types/edges.types.d.ts +38 -0
- package/lib/types/edges.types.d.ts.map +1 -0
- package/lib/types/edges.types.js +6 -0
- package/lib/types/groups.types.d.ts +19 -0
- package/lib/types/groups.types.d.ts.map +1 -0
- package/lib/types/groups.types.js +6 -0
- package/lib/types/index.d.ts +12 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/index.js +12 -0
- package/lib/types/subscriptions.types.d.ts +32 -0
- package/lib/types/subscriptions.types.d.ts.map +1 -0
- package/lib/types/subscriptions.types.js +6 -0
- package/lib/types/videos.types.d.ts +61 -0
- package/lib/types/videos.types.d.ts.map +1 -0
- package/lib/types/videos.types.js +6 -0
- package/lib/utils/MetropolisProvider.d.ts +39 -15
- package/lib/utils/MetropolisProvider.d.ts.map +1 -0
- package/lib/utils/MetropolisProvider.js +31 -2
- package/lib/utils/actionFactory.d.ts +21 -19
- package/lib/utils/actionFactory.d.ts.map +1 -0
- package/lib/utils/actionFactory.js +95 -2
- package/lib/utils/api.d.ts +5 -4
- package/lib/utils/api.d.ts.map +1 -0
- package/lib/utils/api.js +252 -6
- package/lib/utils/app.d.ts +1 -0
- package/lib/utils/app.d.ts.map +1 -0
- package/lib/utils/app.js +15 -2
- package/lib/utils/baseActionFactory.d.ts +5 -23
- package/lib/utils/baseActionFactory.d.ts.map +1 -0
- package/lib/utils/baseActionFactory.js +72 -2
- package/lib/utils/configUtils.d.ts +11 -0
- package/lib/utils/configUtils.d.ts.map +1 -0
- package/lib/utils/configUtils.js +20 -0
- package/lib/utils/dateUtils.d.ts +1 -0
- package/lib/utils/dateUtils.d.ts.map +1 -0
- package/lib/utils/dateUtils.js +11 -2
- package/lib/utils/file.d.ts +3 -1
- package/lib/utils/file.d.ts.map +1 -0
- package/lib/utils/file.js +156 -2
- package/lib/utils/i18n.d.ts +7 -0
- package/lib/utils/i18n.d.ts.map +1 -0
- package/lib/utils/i18n.js +96 -0
- package/lib/utils/index.d.ts +20 -0
- package/lib/utils/index.d.ts.map +1 -0
- package/lib/utils/index.js +26 -0
- package/lib/utils/location.d.ts +4 -3
- package/lib/utils/location.d.ts.map +1 -0
- package/lib/utils/location.js +82 -2
- package/lib/utils/permissionUtils.d.ts +22 -0
- package/lib/utils/permissionUtils.d.ts.map +1 -0
- package/lib/utils/permissionUtils.js +72 -0
- package/lib/utils/requestCache.d.ts +8 -0
- package/lib/utils/requestCache.d.ts.map +1 -0
- package/lib/utils/requestCache.js +53 -0
- package/lib/utils/session.d.ts +14 -0
- package/lib/utils/session.d.ts.map +1 -0
- package/lib/utils/session.js +107 -0
- package/lib/utils/useConversationTyping.d.ts +26 -0
- package/lib/utils/useConversationTyping.d.ts.map +1 -0
- package/lib/utils/useConversationTyping.js +117 -0
- package/lib/utils/useMetropolis.d.ts +67 -12
- package/lib/utils/useMetropolis.d.ts.map +1 -0
- package/lib/utils/useMetropolis.js +311 -2
- package/lib/utils/useTranslations.d.ts +16 -0
- package/lib/utils/useTranslations.d.ts.map +1 -0
- package/lib/utils/useTranslations.js +105 -0
- package/lib/utils/validatorFactory.d.ts +3 -2
- package/lib/utils/validatorFactory.d.ts.map +1 -0
- package/lib/utils/validatorFactory.js +95 -2
- package/package.json +58 -17
- package/temp_signin.ts +73 -0
- package/lib/actions/profileActions/profileActions.d.ts +0 -50
- package/lib/actions/profileActions/profileActions.js +0 -2
- package/lib/adapters/profileAdapter/profileAdapter.d.ts +0 -32
- package/lib/adapters/profileAdapter/profileAdapter.js +0 -2
- package/lib/stores/profileStore.d.ts +0 -24
- package/lib/stores/profileStore.js +0 -2
- /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+IHtcbiAgICBzZXJ2ZXIuY2xvc2UocmVzb2x2ZSk7XG4gIH0pO1xufTtcbiJdLCJuYW1lcyI6WyJidWlsZFNjaGVtYSIsImdyYXBocWwiLCJodHRwIiwidHlwZURlZnMiLCJNT0NLX1VTRVIiLCJ1c2VySWQiLCJ1c2VybmFtZSIsImVtYWlsIiwicGFzc3dvcmQiLCJNT0NLX1NFU1NJT04iLCJ0b2tlbiIsImV4cGlyZXMiLCJNYXRoIiwiZmxvb3IiLCJEYXRlIiwibm93IiwiaXNzdWVkIiwic3RhcnRUZXN0U2VydmVyIiwicG9ydCIsInNjaGVtYSIsInNlcnZlciIsImNyZWF0ZVNlcnZlciIsInJlcSIsInJlcyIsInNldEhlYWRlciIsIm1ldGhvZCIsIndyaXRlSGVhZCIsImVuZCIsInVybCIsImJvZHkiLCJvbiIsImNodW5rIiwidG9TdHJpbmciLCJxdWVyeSIsInZhcmlhYmxlcyIsIkpTT04iLCJwYXJzZSIsImNvbnNvbGUiLCJsb2ciLCJyb290VmFsdWUiLCJoZWFsdGgiLCJ1c2VycyIsIl9wYXJlbnQiLCJhcmdzIiwiY29udGV4dCIsImluZm8iLCJzaWduSW4iLCJ1c2VyIiwiRXJyb3IiLCJhZGRVc2VyIiwicmVmcmVzaFNlc3Npb24iLCJyZXN1bHQiLCJzb3VyY2UiLCJ2YXJpYWJsZVZhbHVlcyIsInN0cmluZ2lmeSIsImVycm9yIiwiZXJyb3JNZXNzYWdlIiwibWVzc2FnZSIsIlN0cmluZyIsImVycm9ycyIsImRhdGEiLCJzdWNjZXNzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJsaXN0ZW4iLCJkZXNjcmliZSIsIml0IiwiZXhwZWN0IiwidG9CZSIsInN0b3BUZXN0U2VydmVyIiwiY2xvc2UiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFdBQVcsRUFBRUMsT0FBTyxRQUFRLFVBQVU7QUFDL0MsT0FBT0MsVUFBVSxPQUFPO0FBRXhCOzs7O0NBSUMsR0FFRCxNQUFNQyxXQUFXLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQ2xCLENBQUM7QUFFRCxnQkFBZ0I7QUFDaEIsT0FBTyxNQUFNQyxZQUFZO0lBQ3ZCQyxRQUFRO0lBQ1JDLFVBQVU7SUFDVkMsT0FBTztJQUNQQyxVQUFVO0FBQ1osRUFBRTtBQUVGLE9BQU8sTUFBTUMsZUFBZTtJQUMxQkMsT0FBTztJQUNQQyxTQUFTQyxLQUFLQyxLQUFLLENBQUNDLEtBQUtDLEdBQUcsS0FBSyxRQUFRO0lBQ3pDQyxRQUFRSixLQUFLQyxLQUFLLENBQUNDLEtBQUtDLEdBQUcsS0FBSztJQUNoQ1YsUUFBUUQsVUFBVUMsTUFBTTtJQUN4QkMsVUFBVUYsVUFBVUUsUUFBUTtBQUM5QixFQUFFO0FBRUY7O0NBRUMsR0FD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
|
|
@@ -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+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICAgIGFwcDoge1xuICAgICAgICAgIHR5cGU6ICdBcHBVcGRhdGVJbnB1dCEnLFxuICAgICAgICAgIHZhbHVlOiBhcHBCYXNlLnZhbGlkYXRvcihhcHApXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBhd2FpdCBhcHBNdXRhdGlvbjxBcHBUeXBlPihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ3VwZGF0ZScsXG4gICAgICAgIERBVEFfVFlQRSxcbiAgICAgICAgcXVlcnlWYXJpYWJsZXMsXG4gICAgICAgIFsnYXBwSWQnLCAuLi5hcHBQcm9wc11cbiAgICAgICk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGNsZWFyQ2FjaGVkUmVxdWVzdChmbHV4LCBgYXBwLml0ZW1CeUlkOiR7U3RyaW5nKGFwcD8uYXBwSWQgfHwgJycpfWApO1xuICAgICAgYXdhaXQgY2xlYXJDYWNoZWRSZXF1ZXN0KGZsdXgsICdhcHAubGlzdCcpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGFkZCxcbiAgICBkZWxldGU6IGRlbGV0ZUFwcCxcbiAgICBpdGVtQnlJZCxcbiAgICBsaXN0LFxuICAgIHVwZGF0ZSxcbiAgICB1cGRhdGVBcHBBZGFwdGVyOiBhcHBCYXNlLnVwZGF0ZUFkYXB0ZXIsXG4gICAgdXBkYXRlQXBwQWRhcHRlck9wdGlvbnM6IGFwcEJhc2UudXBkYXRlT3B0aW9uc1xuICB9O1xufTtcbiJdLCJuYW1lcyI6WyJwYXJzZUlkIiwicGFyc2VOdW0iLCJ2YWxpZGF0ZUFwcElucHV0IiwiYXBwTXV0YXRpb24iLCJhcHBRdWVyeSIsImNyZWF0ZUJhc2VBY3Rpb25zIiwiY2xlYXJDYWNoZWRSZXF1ZXN0IiwiZ2V0Q2FjaGVkUmVxdWVzdCIsInNldENhY2hlZFJlcXVlc3QiLCJEQVRBX1RZUEUiLCJkZWZhdWx0QXBwVmFsaWRhdG9yIiwiaW5wdXQiLCJvcHRpb25zIiwiY3JlYXRlQXBwQWN0aW9ucyIsImZsdXgiLCJhcHBCYXNlIiwiYWRhcHRlciIsImFwcEFkYXB0ZXIiLCJhZGFwdGVyT3B0aW9ucyIsImFwcEFkYXB0ZXJPcHRpb25zIiwiYWRkIiwiYXBwRGF0YSIsImFwcFByb3BzIiwicmVxdWVzdE9wdGlvbnMiLCJxdWVyeVZhcmlhYmxlcyIsImFwcCIsInR5cGUiLCJ2YWx1ZSIsInZhbGlkYXRvciIsImVycm9yIiwiaXRlbUJ5SWQiLCJhcHBJZCIsImNhY2hlZFJlc3VsdCIsInVuZGVmaW5lZCIsInJlc3VsdCIsImxpc3QiLCJmcm9tIiwidG8iLCJkZWxldGVBcHAiLCJ1cGRhdGUiLCJTdHJpbmciLCJkZWxldGUiLCJ1cGRhdGVBcHBBZGFwdGVyIiwidXBkYXRlQWRhcHRlciIsInVwZGF0ZUFwcEFkYXB0ZXJPcHRpb25zIiwidXBkYXRlT3B0aW9ucyJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsT0FBTyxFQUFFQyxRQUFRLFFBQU8sZUFBZTtBQUUvQyxTQUFRQyxnQkFBZ0IsUUFBTywwQ0FBMEM7QUFDekUsU0FBUUMsV0FBVyxFQUFFQyxRQUFRLFFBQU8scUJBQXFCO0FBQ3pELFNBQVFDLGlCQUFpQixRQUFPLG1DQUFtQztBQUNuRSxTQUFRQyxrQkFBa0IsRUFBRUMsZ0JBQWdCLEVBQUVDLGdCQUFnQixRQUFPLDhCQUE4QjtBQU9uRyxNQUFNQyxZQUFZO0FBNkJsQixNQUFNQyxzQkFBc0IsQ0FBQ0MsT0FBZ0JDLFVBQzNDVixpQkFBaUJTO0FBRW5CLE9BQU8sTUFBTUUsbUJBQW1CLENBQzlCQyxNQUNBRjtJQUVBLE1BQU1HLFVBQVVWLGtCQUFrQlMsTUFBTUoscUJBQXFCO1FBQzNETSxTQUFTSixTQUFTSztRQUNsQkMsZ0JBQWdCTixTQUFTTztJQUMzQjtJQUVBLE1BQU1DLE1BQU0sT0FDVkMsU0FDQUMsV0FBcUIsRUFBRSxFQUN2QkMsaUJBQXVDLENBQUMsQ0FBQztRQUV6QyxJQUFJO1lBQ0YsTUFBTUMsaUJBQWlCO2dCQUNyQkMsS0FBSztvQkFDSEMsTUFBTTtvQkFDTkMsT0FBT1osUUFBUWEsU0FBUyxDQUFDUDtnQkFDM0I7WUFDRjtZQUVBLE9BQU8sTUFBTWxCLFlBQ1hXLE1BQ0EsT0FDQUwsV0FDQWUsZ0JBQ0E7Z0JBQUM7bUJBQVlGO2FBQVM7UUFFMUIsRUFBRSxPQUFNTyxPQUFPO1lBQ2IsTUFBTUE7UUFDUixTQUFVO1lBQ1IsTUFBTXZCLG1CQUFtQlEsTUFBTTtRQUNqQztJQUNGO0lBRUEsTUFBTWdCLFdBQVcsT0FBT0MsT0FBZVQsV0FBcUIsRUFBRSxFQUFFQyxpQkFBdUMsQ0FBQyxDQUFDO1FBQ3ZHLElBQUk7WUFDRixNQUFNUyxlQUFlekIsaUJBQTBCTyxNQUFNLENBQUMsYUFBYSxFQUFFaUIsT0FBTyxFQUFFO2dCQUFDQTtnQkFBT1Q7WUFBUSxHQUFHQztZQUVqRyxJQUFHUyxpQkFBaUJDLFdBQVc7Z0JBQzdCLE9BQU9EO1lBQ1Q7WUFFQSxNQUFNUixpQkFBaUI7Z0JBQ3JCTyxPQUFPO29CQUNMTCxNQUFNO29CQUNOQyxPQUFPM0IsUUFBUStCO2dCQUNqQjtZQUNGO1lBRUEsTUFBTUcsU0FBUyxNQUFNOUIsU0FDbkJVLE1BQ0EsWUFDQUwsV0FDQWUsZ0JBQ0E7Z0JBQ0U7Z0JBQ0E7Z0JBQ0E7Z0JBQ0E7Z0JBQ0E7Z0JBQ0E7Z0JBQ0E7Z0JBQ0E7Z0JBQ0E7bUJBQ0dGO2FBQ0o7WUFFSCxPQUFPLE1BQU1kLGlCQUFpQk0sTUFBTSxDQUFDLGFBQWEsRUFBRWlCLE9BQU8sRUFBRTtnQkFBQ0E7Z0JBQU9UO1lBQVEsR0FBR1ksUUFBUVg7UUFDMUYsRUFBRSxPQUFNTSxPQUFPO1lBQ2IsTUFBTUE7UUFDUjtJQUNGO0lBRUEsTUFBTU0sT0FBTyxPQUNYQyxPQUFlLENBQUMsRUFDaEJDLEtBQWEsRUFBRSxFQUNmZixXQUFxQixFQUFFLEVBQ3ZCQyxpQkFBdUMsQ0FBQyxDQUFDO1FBRXpDLElBQUk7WUFDRixNQUFNUyxlQUFlekIsaUJBQTRCTyxNQUFNLFlBQVk7Z0JBQUNzQjtnQkFBTUM7Z0JBQUlmO1lBQVEsR0FBR0M7WUFFekYsSUFBR1MsaUJBQWlCQyxXQUFXO2dCQUM3QixPQUFPRDtZQUNUO1lBRUEsTUFBTVIsaUJBQWlCO2dCQUNyQlksTUFBTTtvQkFDSlYsTUFBTTtvQkFDTkMsT0FBTzFCLFNBQVNtQztnQkFDbEI7Z0JBQ0FDLElBQUk7b0JBQ0ZYLE1BQU07b0JBQ05DLE9BQU8xQixTQUFTb0M7Z0JBQ2xCO1lBQ0Y7WUFFQSxNQUFNSCxTQUFTLE1BQU05QixTQUNuQlUsTUFDQSxRQUNBTCxXQUNBZSxnQkFDQTtnQkFDRTtnQkFDQTtnQkFDQTtnQkFDQTtnQkFDQTtnQkFDQTtnQkFDQTtnQkFDQTtnQkFDQTttQkFDR0Y7YUFDSjtZQUVILE9BQU8sTUFBTWQsaUJBQWlCTSxNQUFNLFlBQVk7Z0JBQUNzQjtnQkFBTUM7Z0JBQUlmO1lBQVEsR0FBR1ksUUFBUVg7UUFDaEYsRUFBRSxPQUFNTSxPQUFPO1lBQ2IsTUFBTUE7UUFDUjtJQUNGO0lBRUEsTUFBTVMsWUFBWSxPQUNoQlAsT0FDQVQsV0FBcUIsRUFBRSxFQUN2QkMsaUJBQXVDLENBQUMsQ0FBQztRQUV6QyxJQUFJO1lBQ0YsTUFBTUMsaUJBQWlCO2dCQUNyQk8sT0FBTztvQkFDTEwsTUFBTTtvQkFDTkMsT0FBTzNCLFFBQVErQjtnQkFDakI7WUFDRjtZQUVBLE9BQU8sTUFBTTVCLFlBQ1hXLE1BQ0EsVUFDQUwsV0FDQWUsZ0JBQ0E7Z0JBQUM7bUJBQVlGO2FBQVM7UUFFMUIsRUFBRSxPQUFNTyxPQUFPO1lBQ2IsTUFBTUE7UUFDUixTQUFVO1lBQ1IsTUFBTXZCLG1CQUFtQlEsTUFBTSxDQUFDLGFBQWEsRUFBRWlCLE9BQU87WUFDdEQsTUFBTXpCLG1CQUFtQlEsTUFBTTtRQUNqQztJQUNGO0lBRUEsTUFBTXlCLFNBQVMsT0FDYmQsS0FDQUgsV0FBcUIsRUFBRSxFQUN2QkMsaUJBQXVDLENBQUMsQ0FBQztRQUV6QyxJQUFJO1lBQ0YsTUFBTUMsaUJBQWlCO2dCQUNyQkMsS0FBSztvQkFDSEMsTUFBTTtvQkFDTkMsT0FBT1osUUFBUWEsU0FBUyxDQUFDSDtnQkFDM0I7WUFDRjtZQUVBLE9BQU8sTUFBTXRCLFlBQ1hXLE1BQ0EsVUFDQUwsV0FDQWUsZ0JBQ0E7Z0JBQUM7bUJBQVlGO2FBQVM7UUFFMUIsRUFBRSxPQUFNTyxPQUFPO1lBQ2IsTUFBTUE7UUFDUixTQUFVO1lBQ1IsTUFBTXZCLG1CQUFtQlEsTUFBTSxDQUFDLGFBQWEsRUFBRTBCLE9BQU9mLEtBQUtNLFNBQVMsS0FBSztZQUN6RSxNQUFNekIsbUJBQW1CUSxNQUFNO1FBQ2pDO0lBQ0Y7SUFFQSxPQUFPO1FBQ0xNO1FBQ0FxQixRQUFRSDtRQUNSUjtRQUNBSztRQUNBSTtRQUNBRyxrQkFBa0IzQixRQUFRNEIsYUFBYTtRQUN2Q0MseUJBQXlCN0IsUUFBUThCLGFBQWE7SUFDaEQ7QUFDRixFQUFFIn0=
|
|
@@ -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"}
|