@nlabs/reaktor 1.6.3 → 1.8.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/LICENSE +74 -201
- package/README.md +48 -16
- package/lib/actions/analytics.d.ts +10 -0
- package/lib/actions/analytics.js +539 -0
- package/lib/actions/apps.js +2 -2
- package/lib/actions/connections.js +1 -1
- package/lib/actions/content.js +2 -2
- package/lib/actions/conversations.js +2 -2
- package/lib/actions/crm.d.ts +11 -1
- package/lib/actions/crm.js +443 -13
- package/lib/actions/crud.js +2 -2
- package/lib/actions/dynamodb.d.ts +1 -1
- package/lib/actions/dynamodb.js +2 -2
- package/lib/actions/email.d.ts +1 -1
- package/lib/actions/email.js +2 -2
- package/lib/actions/files.js +2 -2
- package/lib/actions/flags.d.ts +6 -0
- package/lib/actions/flags.js +147 -0
- package/lib/actions/groups.js +2 -2
- package/lib/actions/images.d.ts +1 -1
- package/lib/actions/images.js +2 -2
- package/lib/actions/index.d.ts +3 -2
- package/lib/actions/index.js +4 -3
- package/lib/actions/ios.js +1 -1
- package/lib/actions/locations.js +2 -2
- package/lib/actions/messages.js +2 -2
- package/lib/actions/notifications.d.ts +1 -1
- package/lib/actions/notifications.js +2 -2
- package/lib/actions/payments.d.ts +3 -3
- package/lib/actions/payments.js +144 -189
- package/lib/actions/personas.js +1 -1
- package/lib/actions/posts.d.ts +0 -4
- package/lib/actions/posts.js +2 -4
- package/lib/actions/query.js +2 -2
- package/lib/actions/reactions.js +2 -2
- package/lib/actions/rum.js +148 -45
- package/lib/actions/s3.d.ts +1 -1
- package/lib/actions/s3.js +2 -2
- package/lib/actions/search.js +2 -2
- package/lib/actions/sms.js +2 -2
- package/lib/actions/statistics.js +2 -2
- package/lib/actions/subscriptions.js +2 -2
- package/lib/actions/tags.js +2 -2
- package/lib/actions/users.d.ts +4 -1
- package/lib/actions/users.js +85 -11
- package/lib/actions/videos.js +2 -2
- package/lib/adapters/arangoAdapter.js +1 -1
- package/lib/adapters/contentAdapter.js +2 -2
- package/lib/adapters/fileAdapter.js +1 -1
- package/lib/adapters/imageAdapter.js +1 -1
- package/lib/adapters/index.js +1 -1
- package/lib/adapters/messageAdapter.js +1 -1
- package/lib/adapters/postAdapter.js +1 -1
- package/lib/adapters/reaktorAdapter.js +1 -1
- package/lib/adapters/tagAdapter.d.ts +0 -1
- package/lib/adapters/tagAdapter.js +1 -2
- package/lib/adapters/userAdapter.d.ts +0 -1
- package/lib/adapters/userAdapter.js +1 -2
- package/lib/config.js +8 -2
- package/lib/constants/collections.d.ts +17 -1
- package/lib/constants/collections.js +18 -2
- package/lib/handlers/graphqlHandler.d.ts +2 -2
- package/lib/handlers/graphqlHandler.js +2 -19
- package/lib/index.d.ts +4 -2
- package/lib/index.js +4 -3
- package/lib/lambdas/actions/websockets.js +2 -2
- package/lib/lambdas/authorizer.js +2 -2
- package/lib/lambdas/connection.js +2 -2
- package/lib/lambdas/utils/message.js +2 -2
- package/lib/lambdas/utils/websocket.d.ts +1 -1
- package/lib/lambdas/utils/websocket.js +2 -2
- package/lib/mocks/conversation.js +1 -1
- package/lib/mocks/file.js +1 -1
- package/lib/mocks/group.js +1 -1
- package/lib/mocks/image.js +1 -1
- package/lib/mocks/post.js +1 -1
- package/lib/mocks/tag.js +1 -1
- package/lib/mocks/user.js +1 -1
- package/lib/mocks/video.js +1 -1
- package/lib/mutations/analytics/analytics.d.ts +1 -0
- package/lib/mutations/analytics/analytics.js +35 -0
- package/lib/mutations/content/content.js +2 -2
- package/lib/mutations/crm/crm.js +57 -11
- package/lib/mutations/events/events.js +2 -2
- package/lib/mutations/flags/flags.d.ts +1 -0
- package/lib/mutations/flags/flags.js +33 -0
- package/lib/mutations/groups/groups.js +2 -2
- package/lib/mutations/images/images.js +2 -2
- package/lib/mutations/index.d.ts +3 -1
- package/lib/mutations/index.js +13 -3
- package/lib/mutations/locations/locations.js +2 -2
- package/lib/mutations/messages/messages.js +2 -2
- package/lib/mutations/personas/personas.js +2 -2
- package/lib/mutations/posts/posts.js +2 -2
- package/lib/mutations/reactions/reactions.js +2 -2
- package/lib/mutations/rum/rum.js +2 -2
- package/lib/mutations/statistics/statistics.js +2 -2
- package/lib/mutations/subscriptions/subscriptions.js +2 -2
- package/lib/mutations/tags/tags.js +2 -2
- package/lib/mutations/users/users.js +30 -17
- package/lib/mutations/videos/videos.js +2 -2
- package/lib/objectTypes/analytics.d.ts +8 -0
- package/lib/objectTypes/analytics.js +147 -0
- package/lib/objectTypes/app.js +2 -2
- package/lib/objectTypes/bankAccount.js +2 -2
- package/lib/objectTypes/connection.js +2 -2
- package/lib/objectTypes/content.js +2 -2
- package/lib/objectTypes/conversation.js +2 -2
- package/lib/objectTypes/creditCard.js +2 -2
- package/lib/objectTypes/crm.d.ts +5 -0
- package/lib/objectTypes/crm.js +68 -2
- package/lib/objectTypes/document.js +1 -1
- package/lib/objectTypes/error.js +2 -2
- package/lib/objectTypes/event.js +2 -2
- package/lib/objectTypes/external.js +2 -2
- package/lib/objectTypes/file.js +2 -2
- package/lib/objectTypes/filter.js +2 -2
- package/lib/objectTypes/flag.d.ts +1 -0
- package/lib/objectTypes/flag.js +35 -0
- package/lib/objectTypes/group.js +2 -2
- package/lib/objectTypes/iapSubscription.js +2 -2
- package/lib/objectTypes/image.d.ts +1 -1
- package/lib/objectTypes/image.js +2 -2
- package/lib/objectTypes/index.d.ts +2 -0
- package/lib/objectTypes/index.js +3 -1
- package/lib/objectTypes/location.js +2 -2
- package/lib/objectTypes/message.js +2 -2
- package/lib/objectTypes/passcode.js +2 -2
- package/lib/objectTypes/persona.js +2 -2
- package/lib/objectTypes/plan.js +2 -2
- package/lib/objectTypes/post.js +2 -2
- package/lib/objectTypes/query.js +2 -2
- package/lib/objectTypes/reaction.js +2 -2
- package/lib/objectTypes/relation.js +2 -2
- package/lib/objectTypes/rum.js +4 -4
- package/lib/objectTypes/search.js +2 -2
- package/lib/objectTypes/statistics.js +2 -2
- package/lib/objectTypes/subscription.js +2 -2
- package/lib/objectTypes/tag.js +2 -2
- package/lib/objectTypes/user.js +10 -2
- package/lib/objectTypes/video.d.ts +1 -1
- package/lib/objectTypes/video.js +2 -2
- package/lib/queries/analytics/analytics.d.ts +1 -0
- package/lib/queries/analytics/analytics.js +41 -0
- package/lib/queries/content/content.js +2 -2
- package/lib/queries/crm/crm.js +52 -13
- package/lib/queries/events/events.js +2 -2
- package/lib/queries/flags/flags.d.ts +1 -0
- package/lib/queries/flags/flags.js +16 -0
- package/lib/queries/groups/groups.js +2 -2
- package/lib/queries/images/images.js +2 -2
- package/lib/queries/index.d.ts +3 -1
- package/lib/queries/index.js +13 -3
- package/lib/queries/locations/locations.js +2 -2
- package/lib/queries/messages/messages.js +1 -1
- package/lib/queries/personas/personas.js +2 -2
- package/lib/queries/posts/posts.js +2 -2
- package/lib/queries/query/query.js +2 -2
- package/lib/queries/reactions/reactions.js +2 -2
- package/lib/queries/statistics/statistics.js +2 -2
- package/lib/queries/subscriptions/subscriptions.js +1 -1
- package/lib/queries/tags/tags.js +2 -2
- package/lib/queries/users/users.js +2 -2
- package/lib/queries/videos/videos.js +2 -2
- package/lib/templates/email/layout.js +1 -1
- package/lib/templates/email/passwordForgot.js +1 -1
- package/lib/templates/email/passwordRecovery.js +1 -1
- package/lib/templates/email/verifyEmail.js +1 -1
- package/lib/templates/email/welcome.js +1 -1
- package/lib/templates/sms/passwordForgot.js +1 -1
- package/lib/templates/sms/passwordRecovery.js +1 -1
- package/lib/templates/sms/verifyEmail.js +1 -1
- package/lib/templates/sms/verifyPhone.js +1 -1
- package/lib/templates/sms/welcome.js +1 -1
- package/lib/types/analytics.types.d.ts +92 -0
- package/lib/types/analytics.types.js +6 -0
- package/lib/types/apps.types.d.ts +1 -1
- package/lib/types/apps.types.js +2 -2
- package/lib/types/arangodb.types.d.ts +2 -2
- package/lib/types/arangodb.types.js +2 -2
- package/lib/types/auth.types.d.ts +4 -1
- package/lib/types/auth.types.js +2 -2
- package/lib/types/connections.types.d.ts +1 -1
- package/lib/types/connections.types.js +2 -2
- package/lib/types/content.types.d.ts +1 -1
- package/lib/types/content.types.js +2 -2
- package/lib/types/conversations.types.d.ts +1 -1
- package/lib/types/conversations.types.js +2 -2
- package/lib/types/crm.types.d.ts +58 -2
- package/lib/types/crm.types.js +2 -2
- package/lib/types/email.types.d.ts +1 -1
- package/lib/types/email.types.js +2 -2
- package/lib/types/error.types.js +1 -1
- package/lib/types/files.types.d.ts +1 -1
- package/lib/types/files.types.js +2 -2
- package/lib/types/flags.types.d.ts +28 -0
- package/lib/types/flags.types.js +3 -0
- package/lib/types/google.types.d.ts +1 -1
- package/lib/types/google.types.js +2 -2
- package/lib/types/groups.types.d.ts +1 -1
- package/lib/types/groups.types.js +2 -2
- package/lib/types/images.types.d.ts +1 -1
- package/lib/types/images.types.js +2 -2
- package/lib/types/index.d.ts +3 -1
- package/lib/types/index.js +4 -2
- package/lib/types/locations.types.d.ts +1 -1
- package/lib/types/locations.types.js +2 -2
- package/lib/types/messages.types.d.ts +1 -1
- package/lib/types/messages.types.js +2 -2
- package/lib/types/notifications.types.d.ts +1 -1
- package/lib/types/notifications.types.js +2 -2
- package/lib/types/payments.types.d.ts +4 -1
- package/lib/types/payments.types.js +2 -2
- package/lib/types/personas.types.js +1 -1
- package/lib/types/posts.types.d.ts +1 -1
- package/lib/types/posts.types.js +2 -2
- package/lib/types/rum.types.d.ts +3 -3
- package/lib/types/rum.types.js +2 -2
- package/lib/types/statistics.types.js +1 -1
- package/lib/types/tags.types.d.ts +1 -1
- package/lib/types/tags.types.js +2 -2
- package/lib/types/users.types.d.ts +2 -1
- package/lib/types/users.types.js +2 -2
- package/lib/types/videos.types.d.ts +1 -1
- package/lib/types/videos.types.js +2 -2
- package/lib/types/websockets.types.d.ts +1 -1
- package/lib/types/websockets.types.js +2 -2
- package/lib/upload.js +4 -9
- package/lib/utils/adapterUtils.d.ts +1 -1
- package/lib/utils/adapterUtils.js +2 -2
- package/lib/utils/analyticsUtils.d.ts +1 -1
- package/lib/utils/analyticsUtils.js +2 -2
- package/lib/utils/appContext.d.ts +2 -0
- package/lib/utils/appContext.js +10 -0
- package/lib/utils/aqlHelpers.d.ts +1 -1
- package/lib/utils/aqlHelpers.js +2 -2
- package/lib/utils/arangodbUtils.d.ts +9 -1
- package/lib/utils/arangodbUtils.js +10 -2
- package/lib/utils/authUtils.js +2 -2
- package/lib/utils/awsUtils.js +2 -2
- package/lib/utils/collectionRegistry.d.ts +1 -1
- package/lib/utils/collectionRegistry.js +17 -2
- package/lib/utils/contextUtils.d.ts +2 -2
- package/lib/utils/contextUtils.js +2 -2
- package/lib/utils/dbI18n.example.d.ts +1 -1
- package/lib/utils/dbI18n.example.js +2 -2
- package/lib/utils/dbI18n.js +2 -2
- package/lib/utils/googleTranslate.d.ts +1 -1
- package/lib/utils/googleTranslate.js +2 -2
- package/lib/utils/graphqlUtils.d.ts +2 -0
- package/lib/utils/graphqlUtils.js +1 -1
- package/lib/utils/imageUtils.js +1 -1
- package/lib/utils/index.d.ts +1 -1
- package/lib/utils/index.js +2 -2
- package/lib/utils/languageDetection.js +1 -1
- package/lib/utils/localeUtils.d.ts +1 -1
- package/lib/utils/localeUtils.example.d.ts +1 -1
- package/lib/utils/localeUtils.example.js +2 -2
- package/lib/utils/localeUtils.js +2 -2
- package/lib/utils/middlewareUtils.js +1 -1
- package/lib/utils/queryBuilder.d.ts +1 -1
- package/lib/utils/queryBuilder.js +2 -2
- package/lib/utils/schemaUtils.js +1 -1
- package/lib/utils/sessionUtils.d.ts +4 -0
- package/lib/utils/sessionUtils.js +2 -2
- package/lib/utils/stripeUtils.d.ts +1 -1
- package/lib/utils/stripeUtils.js +2 -2
- package/lib/utils/templateUtils.js +1 -1
- package/lib/utils/testUtils.js +2 -2
- package/lib/utils/translationQueue.d.ts +1 -1
- package/lib/utils/translationQueue.example.d.ts +1 -1
- package/lib/utils/translationQueue.example.js +2 -2
- package/lib/utils/translationQueue.js +2 -2
- package/lib/videoProcessing.js +1 -1
- package/package.json +49 -86
- package/lib/actions/websockets.d.ts +0 -20
- package/lib/actions/websockets.js +0 -164
- package/lib/mocks/nlabs.png +0 -0
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nlabs/reaktor",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "
|
|
5
|
-
"license": "
|
|
3
|
+
"version": "1.8.0",
|
|
4
|
+
"description": "GraphQL and ArangoDB application platform for typed actions, authentication, billing, media, messaging, and realtime services.",
|
|
5
|
+
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./lib/index.js",
|
|
8
8
|
"module": "./lib/index.js",
|
|
@@ -27,11 +27,23 @@
|
|
|
27
27
|
}
|
|
28
28
|
},
|
|
29
29
|
"keywords": [
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"react",
|
|
30
|
+
"api",
|
|
31
|
+
"arangodb",
|
|
33
32
|
"arkhamjs",
|
|
34
|
-
"
|
|
33
|
+
"authentication",
|
|
34
|
+
"aws-lambda",
|
|
35
|
+
"backend",
|
|
36
|
+
"billing",
|
|
37
|
+
"database",
|
|
38
|
+
"graphql",
|
|
39
|
+
"messaging",
|
|
40
|
+
"nitrogenlabs",
|
|
41
|
+
"reaktor",
|
|
42
|
+
"realtime",
|
|
43
|
+
"serverless",
|
|
44
|
+
"stripe",
|
|
45
|
+
"typescript",
|
|
46
|
+
"websocket"
|
|
35
47
|
],
|
|
36
48
|
"author": {
|
|
37
49
|
"name": "Giraldo Rosales",
|
|
@@ -40,18 +52,22 @@
|
|
|
40
52
|
},
|
|
41
53
|
"repository": {
|
|
42
54
|
"type": "git",
|
|
43
|
-
"url": "git+https://github.com/nitrogenlabs/reaktor.git"
|
|
55
|
+
"url": "git+https://github.com/nitrogenlabs/reaktor.git",
|
|
56
|
+
"directory": "packages/reaktor"
|
|
44
57
|
},
|
|
45
|
-
"homepage": "https://
|
|
58
|
+
"homepage": "https://reaktor.nitrogenx.co",
|
|
46
59
|
"bugs": {
|
|
47
60
|
"url": "https://github.com/nitrogenlabs/reaktor/issues"
|
|
48
61
|
},
|
|
62
|
+
"publishConfig": {
|
|
63
|
+
"access": "public"
|
|
64
|
+
},
|
|
49
65
|
"scripts": {
|
|
50
66
|
"build": "lex compile --remove --config tsconfig.build.json",
|
|
51
67
|
"build:dev": "APP_ENV=dev NODE_ENV=development lex compile --remove --config tsconfig.build.json",
|
|
52
68
|
"build:prod": "APP_ENV=prod NODE_ENV=production lex compile --remove --config tsconfig.build.json",
|
|
53
69
|
"clean": "lex clean",
|
|
54
|
-
"lint": "lex lint --fix",
|
|
70
|
+
"lint": "lex lint --fix --config ../../eslint.config.mjs --maxWarnings 0",
|
|
55
71
|
"prepack": "npm run build && npm run verify:package",
|
|
56
72
|
"preversion": "npm run build && npm run verify:package",
|
|
57
73
|
"publish:major": "npm version major && npm run publish:tags && npm publish",
|
|
@@ -65,19 +81,19 @@
|
|
|
65
81
|
"watch": "lex compile --remove --watch"
|
|
66
82
|
},
|
|
67
83
|
"dependencies": {
|
|
68
|
-
"@aws-sdk/client-apigatewaymanagementapi": "^3.
|
|
69
|
-
"@aws-sdk/client-dynamodb": "^3.
|
|
70
|
-
"@aws-sdk/client-mediaconvert": "^3.
|
|
71
|
-
"@aws-sdk/client-rum": "^3.
|
|
72
|
-
"@aws-sdk/client-s3": "^3.
|
|
73
|
-
"@aws-sdk/client-ses": "^3.
|
|
74
|
-
"@aws-sdk/client-sns": "^3.
|
|
75
|
-
"@aws-sdk/s3-request-presigner": "^3.
|
|
76
|
-
"@nlabs/arkhamjs": "
|
|
77
|
-
"@nlabs/rip-hunter": "^3.1.
|
|
78
|
-
"@nlabs/utils": "^2.10.
|
|
84
|
+
"@aws-sdk/client-apigatewaymanagementapi": "^3.1125.0",
|
|
85
|
+
"@aws-sdk/client-dynamodb": "^3.1125.0",
|
|
86
|
+
"@aws-sdk/client-mediaconvert": "^3.1125.0",
|
|
87
|
+
"@aws-sdk/client-rum": "^3.1125.0",
|
|
88
|
+
"@aws-sdk/client-s3": "^3.1125.0",
|
|
89
|
+
"@aws-sdk/client-ses": "^3.1125.0",
|
|
90
|
+
"@aws-sdk/client-sns": "^3.1125.0",
|
|
91
|
+
"@aws-sdk/s3-request-presigner": "^3.1125.0",
|
|
92
|
+
"@nlabs/arkhamjs": "3.31.15",
|
|
93
|
+
"@nlabs/rip-hunter": "^3.1.2",
|
|
94
|
+
"@nlabs/utils": "^2.10.7",
|
|
79
95
|
"apn": "npm:@parse/node-apn@^8.1.0",
|
|
80
|
-
"arangojs": "^10.
|
|
96
|
+
"arangojs": "^10.4.0",
|
|
81
97
|
"busboy": "^1.6.0",
|
|
82
98
|
"child_process": "^1.0.2",
|
|
83
99
|
"core-js": "^3.50.0",
|
|
@@ -85,9 +101,9 @@
|
|
|
85
101
|
"file-type": "^22.0.2",
|
|
86
102
|
"google-libphonenumber": "^3.2.46",
|
|
87
103
|
"graphql": "^16.14.2",
|
|
88
|
-
"graphql-compose": "^9.1
|
|
104
|
+
"graphql-compose": "^9.2.1",
|
|
89
105
|
"graphql-fields": "^2.0.3",
|
|
90
|
-
"i18next": "^26.
|
|
106
|
+
"i18next": "^26.4.1",
|
|
91
107
|
"jsonwebtoken": "^9.0.3",
|
|
92
108
|
"luxon": "^3.7.2",
|
|
93
109
|
"mime-types": "^3.0.2",
|
|
@@ -96,74 +112,21 @@
|
|
|
96
112
|
"sanitize-html": "^2.17.7",
|
|
97
113
|
"sharp": "0.35.3",
|
|
98
114
|
"spawn-sync": "^2.0.0",
|
|
99
|
-
"stripe": "^22.
|
|
115
|
+
"stripe": "^22.6.1",
|
|
100
116
|
"tls": "0.0.1",
|
|
101
117
|
"typed-promisify": "^0.4.0",
|
|
102
|
-
"zod": "^4.4
|
|
118
|
+
"zod": "^4.5.4"
|
|
103
119
|
},
|
|
104
120
|
"devDependencies": {
|
|
105
|
-
"@nlabs/lex": "^
|
|
106
|
-
"@types/aws-lambda": "^8.10.
|
|
121
|
+
"@nlabs/lex": "^2.0.6",
|
|
122
|
+
"@types/aws-lambda": "^8.10.163",
|
|
107
123
|
"@types/busboy": "^1.5.4",
|
|
108
|
-
"@types/
|
|
109
|
-
"@types/
|
|
110
|
-
"@
|
|
111
|
-
"@types/stripe": "^8.0.417",
|
|
112
|
-
"@types/twilio": "^3.19.3",
|
|
124
|
+
"@types/luxon": "^3.7.5",
|
|
125
|
+
"@types/node": "^26.4.1",
|
|
126
|
+
"@vitest/coverage-v8": "^4.1.11",
|
|
113
127
|
"chokidar": "^5.0.0",
|
|
114
128
|
"graphql-tools": "^9.0.34",
|
|
115
|
-
"typescript": "^
|
|
116
|
-
"vitest": "^4.1.
|
|
117
|
-
},
|
|
118
|
-
"overrides": {
|
|
119
|
-
"@swc/cli": "0.8.1",
|
|
120
|
-
"@swc/core": "1.15.47",
|
|
121
|
-
"@xhmikosr/decompress": "11.1.4",
|
|
122
|
-
"@xmldom/xmldom": "0.9.10",
|
|
123
|
-
"axios": "1.19.0",
|
|
124
|
-
"body-parser": "2.3.0",
|
|
125
|
-
"brace-expansion": "2.1.4",
|
|
126
|
-
"css-loader": "7.1.4",
|
|
127
|
-
"cross-spawn": "7.0.6",
|
|
128
|
-
"fast-uri": "3.1.5",
|
|
129
|
-
"fast-xml-parser": "5.7.3",
|
|
130
|
-
"file-type": "$file-type",
|
|
131
|
-
"follow-redirects": "1.16.0",
|
|
132
|
-
"form-data": "4.0.6",
|
|
133
|
-
"got": "11.8.6",
|
|
134
|
-
"http-cache-semantics": "4.2.0",
|
|
135
|
-
"http-proxy-middleware": "2.0.10",
|
|
136
|
-
"icss-utils": "5.1.0",
|
|
137
|
-
"is-svg": "6.1.0",
|
|
138
|
-
"js-yaml": "4.3.1",
|
|
139
|
-
"jsonwebtoken": "$jsonwebtoken",
|
|
140
|
-
"lodash": "4.18.1",
|
|
141
|
-
"lodash-es": "4.18.1",
|
|
142
|
-
"minimist": "1.2.8",
|
|
143
|
-
"nanoid": "3.3.18",
|
|
144
|
-
"node-forge": "1.4.0",
|
|
145
|
-
"path-to-regexp": "8.4.2",
|
|
146
|
-
"picomatch": "4.0.4",
|
|
147
|
-
"piscina": "4.9.3",
|
|
148
|
-
"postcss": "8.5.26",
|
|
149
|
-
"postcss-modules-extract-imports": "3.1.0",
|
|
150
|
-
"postcss-modules-local-by-default": "4.2.0",
|
|
151
|
-
"postcss-modules-scope": "3.2.1",
|
|
152
|
-
"postcss-modules-values": "4.0.0",
|
|
153
|
-
"postcss-simple-vars": "7.0.1",
|
|
154
|
-
"postcss-url": {
|
|
155
|
-
".": "10.1.3",
|
|
156
|
-
"minimatch": "3.1.4"
|
|
157
|
-
},
|
|
158
|
-
"semver-regex": "4.0.5",
|
|
159
|
-
"serialize-javascript": "7.0.5",
|
|
160
|
-
"sharp": "0.35.3",
|
|
161
|
-
"tmp": "0.2.7",
|
|
162
|
-
"typescript-eslint": "8.65.0",
|
|
163
|
-
"vite": "8.2.1",
|
|
164
|
-
"webpack-plugin-serve": {
|
|
165
|
-
"ws": "7.5.13"
|
|
166
|
-
},
|
|
167
|
-
"yaml": "2.9.0"
|
|
129
|
+
"typescript": "^7.0.2",
|
|
130
|
+
"vitest": "^4.1.11"
|
|
168
131
|
}
|
|
169
132
|
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { ApiContext } from '../types/auth.types.js';
|
|
2
|
-
import type { WebsocketConnection } from '../types/websockets.types.js';
|
|
3
|
-
export declare const addSocket: (socketId: string, token: string) => Promise<WebsocketConnection>;
|
|
4
|
-
export declare const getSocketByUser: (userId: string) => Promise<WebsocketConnection>;
|
|
5
|
-
export declare const getSocketById: (socketId: string) => Promise<any>;
|
|
6
|
-
export declare const getConnectionByConversation: (context: ApiContext, conversationId: string) => Promise<any>;
|
|
7
|
-
export declare const removeSocket: (socketId: string) => Promise<WebsocketConnection>;
|
|
8
|
-
export interface WebSocketClientContext {
|
|
9
|
-
readonly requestContext?: {
|
|
10
|
-
readonly apiId: string;
|
|
11
|
-
readonly domainName: string;
|
|
12
|
-
readonly stage: string;
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
export declare class WebsocketClient {
|
|
16
|
-
client: any;
|
|
17
|
-
constructor(config?: any);
|
|
18
|
-
setupClient({ requestContext }: WebSocketClientContext): Promise<void>;
|
|
19
|
-
send(connection: any, payload: any): Promise<boolean>;
|
|
20
|
-
}
|
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) 2019-Present, Nitrogen Labs, Inc.
|
|
3
|
-
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
4
|
-
*/ import { ApiGatewayManagementApi } from '@aws-sdk/client-apigatewaymanagementapi';
|
|
5
|
-
import { createHash, parseId, parseString } from '@nlabs/utils/parsers/strings';
|
|
6
|
-
import { aql } from 'arangojs';
|
|
7
|
-
import { Config } from '../config.js';
|
|
8
|
-
import { useDb } from '../utils/arangodbUtils.js';
|
|
9
|
-
import { getUserByToken } from './users.js';
|
|
10
|
-
import { ErrorTypes } from '../types/error.types.js';
|
|
11
|
-
import { logError } from '../utils/analyticsUtils.js';
|
|
12
|
-
export const addSocket = async (socketId, token)=>{
|
|
13
|
-
const action = 'addSocket';
|
|
14
|
-
const formatSocketId = parseString(socketId, 32);
|
|
15
|
-
const formatToken = parseString(token);
|
|
16
|
-
try {
|
|
17
|
-
const databaseName = process.env.ARANGODB_DATABASE || '';
|
|
18
|
-
const database = useDb(databaseName);
|
|
19
|
-
const user = await getUserByToken({
|
|
20
|
-
config: Config.get(),
|
|
21
|
-
databaseName
|
|
22
|
-
}, formatToken);
|
|
23
|
-
if (!user) {
|
|
24
|
-
throw new Error('Unauthorized');
|
|
25
|
-
}
|
|
26
|
-
const update = {
|
|
27
|
-
socketId: formatSocketId,
|
|
28
|
-
modified: Date.now()
|
|
29
|
-
};
|
|
30
|
-
const insert = {
|
|
31
|
-
...update,
|
|
32
|
-
_key: createHash(`socket-${formatSocketId}`),
|
|
33
|
-
userId: user.userId
|
|
34
|
-
};
|
|
35
|
-
const aqlQry = aql`UPSERT {userId: ${user.userId}}
|
|
36
|
-
INSERT ${insert}
|
|
37
|
-
UPDATE ${update}
|
|
38
|
-
IN sockets RETURN NEW`;
|
|
39
|
-
return database.query(aqlQry).then((cursor)=>cursor.next()).catch((error)=>{
|
|
40
|
-
throw logError({
|
|
41
|
-
action,
|
|
42
|
-
category: 'websockets',
|
|
43
|
-
value: ErrorTypes.DATABASE_ERROR
|
|
44
|
-
}, error, {});
|
|
45
|
-
});
|
|
46
|
-
} catch (error) {
|
|
47
|
-
throw new Error('Unauthorized');
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
export const getSocketByUser = (userId)=>{
|
|
51
|
-
const formatUserId = parseId(userId);
|
|
52
|
-
const databaseName = process.env.ARANGODB_DATABASE || '';
|
|
53
|
-
const database = useDb(databaseName);
|
|
54
|
-
const aqlQry = aql`FOR s IN sockets
|
|
55
|
-
FILTER s.userId == ${formatUserId}
|
|
56
|
-
LIMIT 1
|
|
57
|
-
RETURN s`;
|
|
58
|
-
return database.query(aqlQry).then((cursor)=>cursor.next()).catch((error)=>{
|
|
59
|
-
throw error;
|
|
60
|
-
});
|
|
61
|
-
};
|
|
62
|
-
export const getSocketById = (socketId)=>{
|
|
63
|
-
const formatSocketId = parseId(socketId);
|
|
64
|
-
const databaseName = process.env.ARANGODB_DATABASE || '';
|
|
65
|
-
const database = useDb(databaseName);
|
|
66
|
-
const aqlQry = aql`FOR s IN sockets
|
|
67
|
-
FILTER s.socketId == ${formatSocketId}
|
|
68
|
-
LET user = FIRST(
|
|
69
|
-
FOR u IN users
|
|
70
|
-
FILTER u.sub == s.sub
|
|
71
|
-
LIMIT 1
|
|
72
|
-
RETURN u;
|
|
73
|
-
)
|
|
74
|
-
LIMIT 1
|
|
75
|
-
RETURN MERGE(s, {user})`;
|
|
76
|
-
return database.query(aqlQry).then((cursor)=>cursor.next()).catch((error)=>{
|
|
77
|
-
throw error;
|
|
78
|
-
});
|
|
79
|
-
};
|
|
80
|
-
export const getConnectionByConversation = (context, conversationId)=>{
|
|
81
|
-
const { databaseName, session: { userId: sessionId } = {} } = context;
|
|
82
|
-
const sessionDocId = `users/${parseId(sessionId)}`;
|
|
83
|
-
const conversationDocId = `conversations/${parseId(conversationId)}`;
|
|
84
|
-
const database = useDb(databaseName);
|
|
85
|
-
const aqlQry = aql`FOR c, e IN 1..1 OUTBOUND ${sessionDocId} hasConversation
|
|
86
|
-
FILTER c._id == ${conversationDocId}
|
|
87
|
-
LIMIT 1
|
|
88
|
-
LET u = (
|
|
89
|
-
FOR inUser, inEdge IN 1..1 INBOUND ${conversationDocId} hasConversation
|
|
90
|
-
FOR n IN connections
|
|
91
|
-
FILTER inUser.sub == n.sub
|
|
92
|
-
RETURN n.connectionId
|
|
93
|
-
)
|
|
94
|
-
RETURN u`;
|
|
95
|
-
return database.query(aqlQry).then((cursor)=>cursor.all()).catch((error)=>{
|
|
96
|
-
throw error;
|
|
97
|
-
});
|
|
98
|
-
};
|
|
99
|
-
export const removeSocket = (socketId)=>{
|
|
100
|
-
const action = 'removeSocket';
|
|
101
|
-
const formatSocketId = parseString(socketId, 32);
|
|
102
|
-
const databaseName = process.env.ARANGODB_DATABASE || '';
|
|
103
|
-
const database = useDb(databaseName);
|
|
104
|
-
const aqlQry = aql`FOR s IN sockets
|
|
105
|
-
FILTER s.socketId == ${formatSocketId}
|
|
106
|
-
LIMIT 1
|
|
107
|
-
REMOVE s IN sockets
|
|
108
|
-
RETURN OLD`;
|
|
109
|
-
return database.query(aqlQry).then((cursor)=>cursor.next()).catch((error)=>{
|
|
110
|
-
throw logError({
|
|
111
|
-
action,
|
|
112
|
-
category: 'websockets',
|
|
113
|
-
value: ErrorTypes.DATABASE_ERROR
|
|
114
|
-
}, error, {});
|
|
115
|
-
});
|
|
116
|
-
};
|
|
117
|
-
export class WebsocketClient {
|
|
118
|
-
client;
|
|
119
|
-
constructor(config){
|
|
120
|
-
if (config) {
|
|
121
|
-
this.setupClient(config || {});
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
// Allow just passing a single event to setup the client for ease of use
|
|
125
|
-
async setupClient({ requestContext }) {
|
|
126
|
-
if (!this.client && requestContext) {
|
|
127
|
-
const { apiId, domainName, stage } = requestContext;
|
|
128
|
-
let updatedDomainName = domainName;
|
|
129
|
-
if (apiId) {
|
|
130
|
-
updatedDomainName = `${apiId}.execute-api.${process.env.API_REGION}.amazonaws.com`;
|
|
131
|
-
}
|
|
132
|
-
this.client = new ApiGatewayManagementApi({
|
|
133
|
-
credentials: Config.get('aws.credentials'),
|
|
134
|
-
endpoint: `https://${updatedDomainName}/${stage}`,
|
|
135
|
-
region: Config.get('aws.region')
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
async send(connection, payload) {
|
|
140
|
-
console.log(connection, payload);
|
|
141
|
-
// Cheat and allow event to be passed in this also lets us default to setupClient too
|
|
142
|
-
let socketId;
|
|
143
|
-
if (connection?.requestContext) {
|
|
144
|
-
await this.setupClient(connection);
|
|
145
|
-
const { socketId: updatedSocketId } = connection.requestContext;
|
|
146
|
-
socketId = updatedSocketId;
|
|
147
|
-
} else {
|
|
148
|
-
socketId = connection;
|
|
149
|
-
}
|
|
150
|
-
await this.client.postToConnection({
|
|
151
|
-
ConnectionId: socketId,
|
|
152
|
-
Data: JSON.stringify(payload)
|
|
153
|
-
}).promise().catch(async (postError)=>{
|
|
154
|
-
console.log(JSON.stringify(postError));
|
|
155
|
-
if (postError.statusCode === 410) {
|
|
156
|
-
// Disconnect client
|
|
157
|
-
await removeSocket(socketId);
|
|
158
|
-
}
|
|
159
|
-
});
|
|
160
|
-
return true;
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvd2Vic29ja2V0cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtBcGlHYXRld2F5TWFuYWdlbWVudEFwaX0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWFwaWdhdGV3YXltYW5hZ2VtZW50YXBpJztcbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VJZCwgcGFyc2VTdHJpbmd9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHthcWwsIERhdGFiYXNlfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuXG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnLmpzJztcbmltcG9ydCB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQge3VzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcbmltcG9ydCB7Z2V0VXNlckJ5VG9rZW59IGZyb20gJy4vdXNlcnMuanMnO1xuXG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtXZWJzb2NrZXRDb25uZWN0aW9ufSBmcm9tICcuLi90eXBlcy93ZWJzb2NrZXRzLnR5cGVzLmpzJztcbmltcG9ydCB7bG9nRXJyb3J9IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzLmpzJztcblxuZXhwb3J0IGNvbnN0IGFkZFNvY2tldCA9IGFzeW5jIChzb2NrZXRJZDogc3RyaW5nLCB0b2tlbjogc3RyaW5nKTogUHJvbWlzZTxXZWJzb2NrZXRDb25uZWN0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRTb2NrZXQnO1xuICBjb25zdCBmb3JtYXRTb2NrZXRJZCA9IHBhcnNlU3RyaW5nKHNvY2tldElkLCAzMik7XG4gIGNvbnN0IGZvcm1hdFRva2VuID0gcGFyc2VTdHJpbmcodG9rZW4pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZGF0YWJhc2VOYW1lID0gcHJvY2Vzcy5lbnYuQVJBTkdPREJfREFUQUJBU0UgfHwgJyc7XG4gICAgY29uc3QgZGF0YWJhc2U6IERhdGFiYXNlID0gdXNlRGIoZGF0YWJhc2VOYW1lKTtcbiAgICBjb25zdCB1c2VyID0gYXdhaXQgZ2V0VXNlckJ5VG9rZW4oe2NvbmZpZzogQ29uZmlnLmdldCgpLCBkYXRhYmFzZU5hbWV9LCBmb3JtYXRUb2tlbik7XG5cbiAgICBpZighdXNlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmF1dGhvcml6ZWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cGRhdGUgPSB7XG4gICAgICBzb2NrZXRJZDogZm9ybWF0U29ja2V0SWQsXG4gICAgICBtb2RpZmllZDogRGF0ZS5ub3coKVxuICAgIH07XG4gICAgY29uc3QgaW5zZXJ0ID0ge1xuICAgICAgLi4udXBkYXRlLFxuICAgICAgX2tleTogY3JlYXRlSGFzaChgc29ja2V0LSR7Zm9ybWF0U29ja2V0SWR9YCksXG4gICAgICB1c2VySWQ6IHVzZXIudXNlcklkXG4gICAgfTtcbiAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQU0VSVCB7dXNlcklkOiAke3VzZXIudXNlcklkfX1cbiAgICAgIElOU0VSVCAke2luc2VydH1cbiAgICAgIFVQREFURSAke3VwZGF0ZX1cbiAgICAgIElOIHNvY2tldHMgUkVUVVJOIE5FV2A7XG5cbiAgICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgY2F0ZWdvcnk6ICd3ZWJzb2NrZXRzJyxcbiAgICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICB9LCBlcnJvciwge30pO1xuICAgICAgfSk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYXV0aG9yaXplZCcpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U29ja2V0QnlVc2VyID0gKHVzZXJJZDogc3RyaW5nKTogUHJvbWlzZTxXZWJzb2NrZXRDb25uZWN0aW9uPiA9PiB7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZCA9IHBhcnNlSWQodXNlcklkKTtcbiAgY29uc3QgZGF0YWJhc2VOYW1lID0gcHJvY2Vzcy5lbnYuQVJBTkdPREJfREFUQUJBU0UgfHwgJyc7XG4gIGNvbnN0IGRhdGFiYXNlOiBEYXRhYmFzZSA9IHVzZURiKGRhdGFiYXNlTmFtZSk7XG4gIGNvbnN0IGFxbFFyeSA9IGFxbGBGT1IgcyBJTiBzb2NrZXRzXG4gICAgRklMVEVSIHMudXNlcklkID09ICR7Zm9ybWF0VXNlcklkfVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gc2A7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTb2NrZXRCeUlkID0gKHNvY2tldElkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4gPT4ge1xuICBjb25zdCBmb3JtYXRTb2NrZXRJZCA9IHBhcnNlSWQoc29ja2V0SWQpO1xuICBjb25zdCBkYXRhYmFzZU5hbWUgPSBwcm9jZXNzLmVudi5BUkFOR09EQl9EQVRBQkFTRSB8fCAnJztcbiAgY29uc3QgZGF0YWJhc2U6IERhdGFiYXNlID0gdXNlRGIoZGF0YWJhc2VOYW1lKTtcbiAgY29uc3QgYXFsUXJ5ID0gYXFsYEZPUiBzIElOIHNvY2tldHNcbiAgICBGSUxURVIgcy5zb2NrZXRJZCA9PSAke2Zvcm1hdFNvY2tldElkfVxuICAgIExFVCB1c2VyID0gRklSU1QoXG4gICAgICBGT1IgdSBJTiB1c2Vyc1xuICAgICAgRklMVEVSIHUuc3ViID09IHMuc3ViXG4gICAgICBMSU1JVCAxXG4gICAgICBSRVRVUk4gdTtcbiAgICApXG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBNRVJHRShzLCB7dXNlcn0pYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbm5lY3Rpb25CeUNvbnZlcnNhdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBjb252ZXJzYXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHNlc3Npb25Eb2NJZCA9IGB1c2Vycy8ke3BhcnNlSWQoc2Vzc2lvbklkKX1gO1xuICBjb25zdCBjb252ZXJzYXRpb25Eb2NJZCA9IGBjb252ZXJzYXRpb25zLyR7cGFyc2VJZChjb252ZXJzYXRpb25JZCl9YDtcbiAgY29uc3QgZGF0YWJhc2U6IERhdGFiYXNlID0gdXNlRGIoZGF0YWJhc2VOYW1lKTtcbiAgY29uc3QgYXFsUXJ5ID0gYXFsYEZPUiBjLCBlIElOIDEuLjEgT1VUQk9VTkQgJHtzZXNzaW9uRG9jSWR9IGhhc0NvbnZlcnNhdGlvblxuICBGSUxURVIgYy5faWQgPT0gJHtjb252ZXJzYXRpb25Eb2NJZH1cbiAgTElNSVQgMVxuICBMRVQgdSA9IChcbiAgICBGT1IgaW5Vc2VyLCBpbkVkZ2UgSU4gMS4uMSBJTkJPVU5EICR7Y29udmVyc2F0aW9uRG9jSWR9IGhhc0NvbnZlcnNhdGlvblxuICAgIEZPUiBuIElOIGNvbm5lY3Rpb25zXG4gICAgRklMVEVSIGluVXNlci5zdWIgPT0gbi5zdWJcbiAgICBSRVRVUk4gbi5jb25uZWN0aW9uSWRcbiAgKVxuICBSRVRVUk4gdWA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZVNvY2tldCA9IChzb2NrZXRJZDogc3RyaW5nKTogUHJvbWlzZTxXZWJzb2NrZXRDb25uZWN0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdyZW1vdmVTb2NrZXQnO1xuICBjb25zdCBmb3JtYXRTb2NrZXRJZCA9IHBhcnNlU3RyaW5nKHNvY2tldElkLCAzMik7XG4gIGNvbnN0IGRhdGFiYXNlTmFtZSA9IHByb2Nlc3MuZW52LkFSQU5HT0RCX0RBVEFCQVNFIHx8ICcnO1xuICBjb25zdCBkYXRhYmFzZTogRGF0YWJhc2UgPSB1c2VEYihkYXRhYmFzZU5hbWUpO1xuICBjb25zdCBhcWxRcnkgPSBhcWxgRk9SIHMgSU4gc29ja2V0c1xuICAgICAgRklMVEVSIHMuc29ja2V0SWQgPT0gJHtmb3JtYXRTb2NrZXRJZH1cbiAgICAgIExJTUlUIDFcbiAgICAgIFJFTU9WRSBzIElOIHNvY2tldHNcbiAgICAgIFJFVFVSTiBPTERgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiAnd2Vic29ja2V0cycsXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwge30pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBXZWJTb2NrZXRDbGllbnRDb250ZXh0IHtcbiAgcmVhZG9ubHkgcmVxdWVzdENvbnRleHQ/OiB7XG4gICAgcmVhZG9ubHkgYXBpSWQ6IHN0cmluZztcbiAgICByZWFkb25seSBkb21haW5OYW1lOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgc3RhZ2U6IHN0cmluZztcbiAgfTtcbn1cbmV4cG9ydCBjbGFzcyBXZWJzb2NrZXRDbGllbnQge1xuICBjbGllbnQ7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnPykge1xuICAgIGlmKGNvbmZpZykge1xuICAgICAgdGhpcy5zZXR1cENsaWVudChjb25maWcgfHwge30pO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFsbG93IGp1c3QgcGFzc2luZyBhIHNpbmdsZSBldmVudCB0byBzZXR1cCB0aGUgY2xpZW50IGZvciBlYXNlIG9mIHVzZVxuICBhc3luYyBzZXR1cENsaWVudCh7cmVxdWVzdENvbnRleHR9OiBXZWJTb2NrZXRDbGllbnRDb250ZXh0KSB7XG4gICAgaWYoIXRoaXMuY2xpZW50ICYmIHJlcXVlc3RDb250ZXh0KSB7XG4gICAgICBjb25zdCB7YXBpSWQsIGRvbWFpbk5hbWUsIHN0YWdlfSA9IHJlcXVlc3RDb250ZXh0O1xuICAgICAgbGV0IHVwZGF0ZWREb21haW5OYW1lID0gZG9tYWluTmFtZTtcblxuICAgICAgaWYoYXBpSWQpIHtcbiAgICAgICAgdXBkYXRlZERvbWFpbk5hbWUgPSBgJHthcGlJZH0uZXhlY3V0ZS1hcGkuJHtwcm9jZXNzLmVudi5BUElfUkVHSU9OfS5hbWF6b25hd3MuY29tYDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jbGllbnQgPSBuZXcgQXBpR2F0ZXdheU1hbmFnZW1lbnRBcGkoe1xuICAgICAgICBjcmVkZW50aWFsczogQ29uZmlnLmdldCgnYXdzLmNyZWRlbnRpYWxzJyksXG4gICAgICAgIGVuZHBvaW50OiBgaHR0cHM6Ly8ke3VwZGF0ZWREb21haW5OYW1lfS8ke3N0YWdlfWAsXG4gICAgICAgIHJlZ2lvbjogQ29uZmlnLmdldCgnYXdzLnJlZ2lvbicpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzZW5kKGNvbm5lY3Rpb24sIHBheWxvYWQpIHtcbiAgICBjb25zb2xlLmxvZyhjb25uZWN0aW9uLCBwYXlsb2FkKTtcblxuICAgIC8vIENoZWF0IGFuZCBhbGxvdyBldmVudCB0byBiZSBwYXNzZWQgaW4gdGhpcyBhbHNvIGxldHMgdXMgZGVmYXVsdCB0byBzZXR1cENsaWVudCB0b29cbiAgICBsZXQgc29ja2V0SWQ7XG5cbiAgICBpZihjb25uZWN0aW9uPy5yZXF1ZXN0Q29udGV4dCkge1xuICAgICAgYXdhaXQgdGhpcy5zZXR1cENsaWVudChjb25uZWN0aW9uKTtcbiAgICAgIGNvbnN0IHtzb2NrZXRJZDogdXBkYXRlZFNvY2tldElkfSA9IGNvbm5lY3Rpb24ucmVxdWVzdENvbnRleHQ7XG4gICAgICBzb2NrZXRJZCA9IHVwZGF0ZWRTb2NrZXRJZDtcbiAgICB9IGVsc2Uge1xuICAgICAgc29ja2V0SWQgPSBjb25uZWN0aW9uO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuY2xpZW50LnBvc3RUb0Nvbm5lY3Rpb24oe0Nvbm5lY3Rpb25JZDogc29ja2V0SWQsIERhdGE6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpfSlcbiAgICAgIC5wcm9taXNlKClcbiAgICAgIC5jYXRjaChhc3luYyAocG9zdEVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHBvc3RFcnJvcikpO1xuXG4gICAgICAgIGlmKHBvc3RFcnJvci5zdGF0dXNDb2RlID09PSA0MTApIHtcbiAgICAgICAgICAvLyBEaXNjb25uZWN0IGNsaWVudFxuICAgICAgICAgIGF3YWl0IHJlbW92ZVNvY2tldChzb2NrZXRJZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJBcGlHYXRld2F5TWFuYWdlbWVudEFwaSIsImNyZWF0ZUhhc2giLCJwYXJzZUlkIiwicGFyc2VTdHJpbmciLCJhcWwiLCJDb25maWciLCJ1c2VEYiIsImdldFVzZXJCeVRva2VuIiwiRXJyb3JUeXBlcyIsImxvZ0Vycm9yIiwiYWRkU29ja2V0Iiwic29ja2V0SWQiLCJ0b2tlbiIsImFjdGlvbiIsImZvcm1hdFNvY2tldElkIiwiZm9ybWF0VG9rZW4iLCJkYXRhYmFzZU5hbWUiLCJwcm9jZXNzIiwiZW52IiwiQVJBTkdPREJfREFUQUJBU0UiLCJkYXRhYmFzZSIsInVzZXIiLCJjb25maWciLCJnZXQiLCJFcnJvciIsInVwZGF0ZSIsIm1vZGlmaWVkIiwiRGF0ZSIsIm5vdyIsImluc2VydCIsIl9rZXkiLCJ1c2VySWQiLCJhcWxRcnkiLCJxdWVyeSIsInRoZW4iLCJjdXJzb3IiLCJuZXh0IiwiY2F0Y2giLCJlcnJvciIsImNhdGVnb3J5IiwidmFsdWUiLCJEQVRBQkFTRV9FUlJPUiIsImdldFNvY2tldEJ5VXNlciIsImZvcm1hdFVzZXJJZCIsImdldFNvY2tldEJ5SWQiLCJnZXRDb25uZWN0aW9uQnlDb252ZXJzYXRpb24iLCJjb250ZXh0IiwiY29udmVyc2F0aW9uSWQiLCJzZXNzaW9uIiwic2Vzc2lvbklkIiwic2Vzc2lvbkRvY0lkIiwiY29udmVyc2F0aW9uRG9jSWQiLCJhbGwiLCJyZW1vdmVTb2NrZXQiLCJXZWJzb2NrZXRDbGllbnQiLCJjbGllbnQiLCJzZXR1cENsaWVudCIsInJlcXVlc3RDb250ZXh0IiwiYXBpSWQiLCJkb21haW5OYW1lIiwic3RhZ2UiLCJ1cGRhdGVkRG9tYWluTmFtZSIsIkFQSV9SRUdJT04iLCJjcmVkZW50aWFscyIsImVuZHBvaW50IiwicmVnaW9uIiwic2VuZCIsImNvbm5lY3Rpb24iLCJwYXlsb2FkIiwiY29uc29sZSIsImxvZyIsInVwZGF0ZWRTb2NrZXRJZCIsInBvc3RUb0Nvbm5lY3Rpb24iLCJDb25uZWN0aW9uSWQiLCJEYXRhIiwiSlNPTiIsInN0cmluZ2lmeSIsInByb21pc2UiLCJwb3N0RXJyb3IiLCJzdGF0dXNDb2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSx1QkFBdUIsUUFBTywwQ0FBMEM7QUFDaEYsU0FBUUMsVUFBVSxFQUFFQyxPQUFPLEVBQUVDLFdBQVcsUUFBTywrQkFBK0I7QUFDOUUsU0FBUUMsR0FBRyxRQUFpQixXQUFXO0FBR3ZDLFNBQVFDLE1BQU0sUUFBTyxlQUFlO0FBRXBDLFNBQVFDLEtBQUssUUFBTyw0QkFBNEI7QUFDaEQsU0FBUUMsY0FBYyxRQUFPLGFBQWE7QUFFMUMsU0FBUUMsVUFBVSxRQUFPLDBCQUEwQjtBQUVuRCxTQUFRQyxRQUFRLFFBQU8sNkJBQTZCO0FBRXBELE9BQU8sTUFBTUMsWUFBWSxPQUFPQyxVQUFrQkM7SUFDaEQsTUFBTUMsU0FBUztJQUNmLE1BQU1DLGlCQUFpQlgsWUFBWVEsVUFBVTtJQUM3QyxNQUFNSSxjQUFjWixZQUFZUztJQUVoQyxJQUFJO1FBQ0YsTUFBTUksZUFBZUMsUUFBUUMsR0FBRyxDQUFDQyxpQkFBaUIsSUFBSTtRQUN0RCxNQUFNQyxXQUFxQmQsTUFBTVU7UUFDakMsTUFBTUssT0FBTyxNQUFNZCxlQUFlO1lBQUNlLFFBQVFqQixPQUFPa0IsR0FBRztZQUFJUDtRQUFZLEdBQUdEO1FBRXhFLElBQUcsQ0FBQ00sTUFBTTtZQUNSLE1BQU0sSUFBSUcsTUFBTTtRQUNsQjtRQUVBLE1BQU1DLFNBQVM7WUFDYmQsVUFBVUc7WUFDVlksVUFBVUMsS0FBS0MsR0FBRztRQUNwQjtRQUNBLE1BQU1DLFNBQVM7WUFDYixHQUFHSixNQUFNO1lBQ1RLLE1BQU03QixXQUFXLENBQUMsT0FBTyxFQUFFYSxn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
|
package/lib/mocks/nlabs.png
DELETED
|
Binary file
|