@nlabs/reaktor 0.9.0 → 0.10.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/README.md +9 -0
- package/coverage/index.html +92 -47
- package/dist/actions/apps.js +242 -0
- package/dist/actions/connections.js +90 -0
- package/dist/actions/conversations.js +350 -0
- package/dist/actions/dynamodb.js +150 -0
- package/dist/actions/email.js +152 -0
- package/dist/actions/files.js +283 -0
- package/dist/actions/groups.js +292 -0
- package/dist/actions/images.js +735 -0
- package/dist/actions/index.js +66 -0
- package/dist/actions/ios.js +164 -0
- package/dist/actions/locations.js +122 -0
- package/dist/actions/messages.js +208 -0
- package/dist/actions/notifications.js +59 -0
- package/dist/actions/payments.js +497 -0
- package/dist/actions/personas.js +110 -0
- package/dist/actions/posts.js +595 -0
- package/dist/actions/reactions.js +322 -0
- package/dist/actions/s3.js +133 -0
- package/dist/actions/search.js +90 -0
- package/dist/actions/sms.js +108 -0
- package/dist/actions/statistics.js +62 -0
- package/dist/actions/subscription.js +220 -0
- package/dist/actions/tags.js +292 -0
- package/dist/actions/users.js +784 -0
- package/dist/actions/websockets.js +174 -0
- package/dist/adapters/arangoAdapter.js +46 -0
- package/dist/adapters/fileAdapter.js +76 -0
- package/dist/adapters/imageAdapter.js +40 -0
- package/dist/adapters/messageAdapter.js +49 -0
- package/dist/adapters/postAdapter.js +70 -0
- package/dist/adapters/reaktorAdapter.js +44 -0
- package/dist/adapters/tagAdapter.js +50 -0
- package/dist/adapters/userAdapter.js +115 -0
- package/dist/config.js +125 -0
- package/dist/index.js +66 -0
- package/dist/lambdas/actions/websockets.js +132 -0
- package/dist/lambdas/authorizer.js +67 -0
- package/dist/lambdas/connection.js +91 -0
- package/dist/lambdas/utils/message.js +42 -0
- package/dist/lambdas/utils/websocket.js +105 -0
- package/dist/mocks/conversation.js +35 -0
- package/dist/mocks/file.js +38 -0
- package/dist/mocks/group.js +47 -0
- package/dist/mocks/image.js +44 -0
- package/dist/mocks/nlabs.png +0 -0
- package/dist/mocks/post.js +55 -0
- package/dist/mocks/tag.js +37 -0
- package/dist/mocks/user.js +88 -0
- package/dist/mutations/index.js +26 -0
- package/dist/mutations/locations.js +44 -0
- package/dist/mutations/messages.js +86 -0
- package/dist/mutations/personas.js +100 -0
- package/dist/mutations/posts.js +53 -0
- package/dist/mutations/reactions.js +51 -0
- package/dist/mutations/statistics.js +39 -0
- package/dist/mutations/subscriptions.js +56 -0
- package/dist/mutations/tags.js +120 -0
- package/dist/mutations/users.js +116 -0
- package/dist/objectTypes/app.js +173 -0
- package/dist/objectTypes/bankAccount.js +76 -0
- package/dist/objectTypes/connection.js +48 -0
- package/dist/objectTypes/conversation.js +77 -0
- package/dist/objectTypes/creditCard.js +86 -0
- package/dist/objectTypes/document.js +46 -0
- package/dist/objectTypes/error.js +46 -0
- package/dist/objectTypes/external.js +74 -0
- package/dist/objectTypes/file.js +100 -0
- package/dist/objectTypes/filter.js +43 -0
- package/dist/objectTypes/group.js +123 -0
- package/dist/objectTypes/iapSubscription.js +40 -0
- package/dist/objectTypes/image.js +129 -0
- package/dist/objectTypes/index.js +68 -0
- package/dist/objectTypes/location.js +109 -0
- package/dist/objectTypes/message.js +96 -0
- package/dist/objectTypes/passcode.js +42 -0
- package/dist/objectTypes/persona.js +87 -0
- package/dist/objectTypes/plan.js +95 -0
- package/dist/objectTypes/post.js +125 -0
- package/dist/objectTypes/reaction.js +61 -0
- package/dist/objectTypes/relation.js +49 -0
- package/dist/objectTypes/search.js +72 -0
- package/dist/objectTypes/statistics.js +39 -0
- package/dist/objectTypes/subscription.js +117 -0
- package/dist/objectTypes/tag.js +65 -0
- package/dist/objectTypes/user.js +144 -0
- package/dist/queries/index.js +33 -0
- package/dist/queries/locations.js +45 -0
- package/dist/queries/messages.js +52 -0
- package/dist/queries/posts.js +154 -0
- package/dist/queries/reactions.js +56 -0
- package/dist/queries/statistics.js +39 -0
- package/dist/queries/subscriptions.js +44 -0
- package/dist/queries/tags.js +75 -0
- package/dist/queries/users.js +64 -0
- package/dist/templates/email/layout.js +302 -0
- package/dist/templates/email/passwordForgot.js +38 -0
- package/dist/templates/email/passwordRecovery.js +35 -0
- package/dist/templates/email/verifyEmail.js +38 -0
- package/dist/templates/email/welcome.js +38 -0
- package/dist/templates/sms/passwordForgot.js +24 -0
- package/dist/templates/sms/passwordRecovery.js +24 -0
- package/dist/templates/sms/verifyEmail.js +24 -0
- package/dist/templates/sms/verifyPhone.js +24 -0
- package/dist/templates/sms/welcome.js +24 -0
- package/dist/types/apps.js +32 -0
- package/{lib → dist}/types/arangodb.js +1 -1
- package/{lib → dist}/types/auth.js +1 -1
- package/{lib → dist}/types/connections.js +1 -1
- package/dist/types/conversations.js +16 -0
- package/{lib → dist}/types/email.js +1 -1
- package/dist/types/files.js +16 -0
- package/dist/types/google.js +16 -0
- package/{lib → dist}/types/groups.js +1 -1
- package/dist/types/images.js +16 -0
- package/dist/types/index.js +60 -0
- package/{lib → dist}/types/locations.js +1 -1
- package/{lib → dist}/types/messages.js +1 -1
- package/{lib → dist}/types/notifications.js +1 -1
- package/dist/types/payments.js +16 -0
- package/dist/types/personas.js +16 -0
- package/dist/types/posts.js +16 -0
- package/{lib → dist}/types/tags.js +1 -1
- package/dist/types/users.js +16 -0
- package/dist/types/websockets.js +16 -0
- package/dist/utils/adapterUtils.js +45 -0
- package/dist/utils/analyticsUtils.js +72 -0
- package/dist/utils/arangodbUtils.js +165 -0
- package/dist/utils/auth.js +57 -0
- package/dist/utils/index.js +30 -0
- package/dist/utils/session.js +60 -0
- package/lex.config.cjs +13 -0
- package/lib/actions/apps.d.ts +3 -3
- package/lib/actions/apps.js +38 -48
- package/lib/actions/connections.d.ts +4 -0
- package/lib/actions/connections.js +90 -0
- package/lib/actions/conversations.d.ts +1 -1
- package/lib/actions/conversations.js +32 -21
- package/lib/actions/email.d.ts +1 -1
- package/lib/actions/email.js +11 -11
- package/lib/actions/files.d.ts +2 -2
- package/lib/actions/files.js +4 -8
- package/lib/actions/groups.d.ts +2 -2
- package/lib/actions/groups.js +12 -12
- package/lib/actions/images.d.ts +5 -5
- package/lib/actions/images.js +120 -66
- package/lib/actions/index.d.ts +2 -0
- package/lib/actions/index.js +5 -1
- package/lib/actions/ios.js +2 -2
- package/lib/actions/locations.d.ts +4 -3
- package/lib/actions/locations.js +16 -4
- package/lib/actions/messages.d.ts +4 -3
- package/lib/actions/messages.js +26 -23
- package/lib/actions/notifications.d.ts +1 -1
- package/lib/actions/notifications.js +1 -1
- package/lib/actions/payments.js +63 -60
- package/lib/actions/personas.d.ts +3 -0
- package/lib/actions/personas.js +110 -0
- package/lib/actions/posts.d.ts +5 -2
- package/lib/actions/posts.js +55 -41
- package/lib/actions/reactions.js +2 -2
- package/lib/actions/search.d.ts +2 -2
- package/lib/actions/search.js +5 -5
- package/lib/actions/sms.d.ts +9 -3
- package/lib/actions/sms.js +9 -7
- package/lib/actions/statistics.d.ts +1 -1
- package/lib/actions/statistics.js +2 -2
- package/lib/actions/subscription.d.ts +2 -2
- package/lib/actions/subscription.js +12 -22
- package/lib/actions/tags.d.ts +8 -3
- package/lib/actions/tags.js +46 -21
- package/lib/actions/users.d.ts +38 -13
- package/lib/actions/users.js +291 -61
- package/lib/actions/websockets.d.ts +6 -5
- package/lib/actions/websockets.js +37 -35
- package/lib/adapters/arangoAdapter.d.ts +1 -1
- package/lib/adapters/arangoAdapter.js +1 -1
- package/lib/adapters/imageAdapter.d.ts +2 -0
- package/lib/adapters/imageAdapter.js +40 -0
- package/lib/adapters/messageAdapter.d.ts +2 -0
- package/lib/adapters/messageAdapter.js +49 -0
- package/lib/adapters/postAdapter.js +4 -4
- package/lib/adapters/tagAdapter.js +2 -2
- package/lib/adapters/userAdapter.js +10 -5
- package/lib/config.js +2 -2
- package/lib/index.d.ts +7 -0
- package/lib/index.js +44 -8
- package/lib/lambdas/actions/websockets.d.ts +7 -6
- package/lib/lambdas/actions/websockets.js +9 -5
- package/lib/lambdas/authorizer.js +4 -4
- package/lib/lambdas/connection.js +16 -17
- package/lib/lambdas/utils/message.js +1 -1
- package/lib/lambdas/utils/websocket.js +1 -1
- package/lib/mocks/image.js +3 -2
- package/lib/mocks/user.js +3 -3
- package/lib/mutations/index.d.ts +3 -0
- package/lib/mutations/index.js +26 -0
- package/lib/mutations/locations.d.ts +2 -0
- package/lib/mutations/locations.js +44 -0
- package/lib/mutations/messages.d.ts +2 -0
- package/lib/mutations/messages.js +86 -0
- package/lib/mutations/personas.d.ts +2 -0
- package/lib/mutations/personas.js +100 -0
- package/lib/mutations/posts.d.ts +2 -0
- package/lib/mutations/posts.js +53 -0
- package/lib/mutations/reactions.d.ts +2 -0
- package/lib/mutations/reactions.js +51 -0
- package/lib/mutations/statistics.d.ts +2 -0
- package/lib/mutations/statistics.js +39 -0
- package/lib/mutations/subscriptions.d.ts +2 -0
- package/lib/mutations/subscriptions.js +56 -0
- package/lib/mutations/tags.d.ts +2 -0
- package/lib/mutations/tags.js +120 -0
- package/lib/mutations/users.d.ts +1 -0
- package/lib/mutations/users.js +116 -0
- package/lib/objectTypes/app.d.ts +3 -0
- package/lib/objectTypes/app.js +173 -0
- package/lib/objectTypes/bankAccount.d.ts +1 -0
- package/lib/objectTypes/bankAccount.js +76 -0
- package/lib/objectTypes/connection.d.ts +1 -0
- package/lib/objectTypes/connection.js +48 -0
- package/lib/objectTypes/conversation.d.ts +2 -0
- package/lib/objectTypes/conversation.js +77 -0
- package/lib/objectTypes/creditCard.d.ts +1 -0
- package/lib/objectTypes/creditCard.js +86 -0
- package/lib/objectTypes/document.d.ts +1 -0
- package/lib/objectTypes/document.js +46 -0
- package/lib/objectTypes/error.d.ts +1 -0
- package/lib/objectTypes/error.js +46 -0
- package/lib/objectTypes/external.d.ts +1 -0
- package/lib/objectTypes/external.js +74 -0
- package/lib/objectTypes/file.d.ts +2 -0
- package/lib/objectTypes/file.js +100 -0
- package/lib/objectTypes/filter.d.ts +1 -0
- package/lib/objectTypes/filter.js +43 -0
- package/lib/objectTypes/group.d.ts +3 -0
- package/lib/objectTypes/group.js +123 -0
- package/lib/objectTypes/iapSubscription.d.ts +1 -0
- package/lib/objectTypes/iapSubscription.js +40 -0
- package/lib/objectTypes/image.d.ts +2 -0
- package/lib/objectTypes/image.js +129 -0
- package/lib/objectTypes/index.d.ts +24 -0
- package/lib/objectTypes/index.js +68 -0
- package/lib/objectTypes/location.d.ts +2 -0
- package/lib/objectTypes/location.js +109 -0
- package/lib/objectTypes/message.d.ts +2 -0
- package/lib/objectTypes/message.js +96 -0
- package/lib/objectTypes/passcode.d.ts +1 -0
- package/lib/objectTypes/passcode.js +42 -0
- package/lib/objectTypes/persona.d.ts +3 -0
- package/lib/objectTypes/persona.js +87 -0
- package/lib/objectTypes/plan.d.ts +2 -0
- package/lib/objectTypes/plan.js +95 -0
- package/lib/objectTypes/post.d.ts +2 -0
- package/lib/objectTypes/post.js +125 -0
- package/lib/objectTypes/reaction.d.ts +2 -0
- package/lib/objectTypes/reaction.js +61 -0
- package/lib/objectTypes/relation.d.ts +1 -0
- package/lib/objectTypes/relation.js +49 -0
- package/lib/objectTypes/search.d.ts +1 -0
- package/lib/objectTypes/search.js +72 -0
- package/lib/objectTypes/statistics.d.ts +1 -0
- package/lib/objectTypes/statistics.js +39 -0
- package/lib/objectTypes/subscription.d.ts +2 -0
- package/lib/objectTypes/subscription.js +117 -0
- package/lib/objectTypes/tag.d.ts +2 -0
- package/lib/objectTypes/tag.js +65 -0
- package/lib/objectTypes/user.d.ts +4 -0
- package/lib/objectTypes/user.js +144 -0
- package/lib/queries/index.d.ts +3 -0
- package/lib/queries/index.js +33 -0
- package/lib/queries/locations.d.ts +2 -0
- package/lib/queries/locations.js +45 -0
- package/lib/queries/messages.d.ts +2 -0
- package/lib/queries/messages.js +52 -0
- package/lib/queries/posts.d.ts +2 -0
- package/lib/queries/posts.js +154 -0
- package/lib/queries/reactions.d.ts +2 -0
- package/lib/queries/reactions.js +56 -0
- package/lib/queries/statistics.d.ts +2 -0
- package/lib/queries/statistics.js +39 -0
- package/lib/queries/subscriptions.d.ts +2 -0
- package/lib/queries/subscriptions.js +44 -0
- package/lib/queries/tags.d.ts +2 -0
- package/lib/queries/tags.js +75 -0
- package/lib/queries/users.d.ts +1 -0
- package/lib/queries/users.js +64 -0
- package/lib/types/{apps.d.ts → apps.types.d.ts} +2 -2
- package/lib/types/apps.types.js +32 -0
- package/lib/types/{arangodb.d.ts → arangodb.types.d.ts} +4 -0
- package/lib/types/arangodb.types.js +16 -0
- package/lib/types/auth.types.d.ts +9 -0
- package/lib/types/auth.types.js +16 -0
- package/lib/types/{connections.d.ts → connections.types.d.ts} +1 -3
- package/lib/types/connections.types.js +16 -0
- package/lib/types/{conversations.d.ts → conversations.types.d.ts} +2 -4
- package/lib/types/conversations.types.js +16 -0
- package/lib/types/{email.d.ts → email.types.d.ts} +3 -3
- package/lib/types/email.types.js +16 -0
- package/lib/types/error.types.js +44 -0
- package/lib/types/{files.d.ts → files.types.d.ts} +1 -4
- package/lib/types/files.types.js +16 -0
- package/lib/types/google.types.js +16 -0
- package/lib/types/{groups.d.ts → groups.types.d.ts} +1 -4
- package/lib/types/groups.types.js +16 -0
- package/lib/types/{images.d.ts → images.types.d.ts} +9 -8
- package/lib/types/images.types.js +16 -0
- package/lib/types/index.d.ts +20 -18
- package/lib/types/index.js +41 -37
- package/lib/types/{locations.d.ts → locations.types.d.ts} +1 -3
- package/lib/types/locations.types.js +16 -0
- package/lib/types/{messages.d.ts → messages.types.d.ts} +5 -5
- package/lib/types/messages.types.js +16 -0
- package/lib/types/{notifications.d.ts → notifications.types.d.ts} +4 -2
- package/lib/types/notifications.types.js +16 -0
- package/lib/types/{payments.d.ts → payments.types.d.ts} +1 -4
- package/lib/types/payments.types.js +16 -0
- package/lib/types/personas.types.d.ts +32 -0
- package/lib/types/personas.types.js +16 -0
- package/lib/types/{posts.d.ts → posts.types.d.ts} +4 -7
- package/lib/types/posts.types.js +16 -0
- package/lib/types/statistics.types.js +16 -0
- package/lib/types/{tags.d.ts → tags.types.d.ts} +6 -1
- package/lib/types/tags.types.js +16 -0
- package/lib/types/{users.d.ts → users.types.d.ts} +12 -9
- package/lib/types/users.types.js +16 -0
- package/lib/types/{websocket.d.ts → websockets.types.d.ts} +6 -1
- package/lib/types/websockets.types.js +16 -0
- package/lib/utils/analyticsUtils.d.ts +3 -3
- package/lib/utils/analyticsUtils.js +3 -3
- package/lib/utils/arangodbUtils.d.ts +2 -1
- package/lib/utils/arangodbUtils.js +22 -1
- package/lib/utils/auth.d.ts +2 -1
- package/lib/utils/auth.js +8 -1
- package/lib/utils/index.js +1 -1
- package/lib/utils/session.d.ts +3 -1
- package/lib/utils/session.js +10 -7
- package/lib/utils/stripeUtils.d.ts +3 -0
- package/lib/utils/stripeUtils.js +43 -0
- package/package.json +35 -34
- package/.eslintrc +0 -10
- package/lib/types/apps.js +0 -32
- package/lib/types/auth.d.ts +0 -7
- package/lib/types/conversations.js +0 -16
- package/lib/types/files.js +0 -16
- package/lib/types/google.js +0 -16
- package/lib/types/images.js +0 -16
- package/lib/types/payments.js +0 -16
- package/lib/types/posts.js +0 -16
- package/lib/types/users.js +0 -16
- package/lib/types/websocket.js +0 -16
- /package/{lib → dist}/types/error.js +0 -0
- /package/{lib → dist}/types/statistics.js +0 -0
- /package/lib/types/{error.d.ts → error.types.d.ts} +0 -0
- /package/lib/types/{google.d.ts → google.types.d.ts} +0 -0
- /package/lib/types/{statistics.d.ts → statistics.types.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -3,6 +3,15 @@ Reaktor
|
|
|
3
3
|
|
|
4
4
|
A simple skeleton to start you off on your ReactJS project. Uses a Flux framework and Falcor for data.
|
|
5
5
|
|
|
6
|
+
Peer Dependencies
|
|
7
|
+
----------------
|
|
8
|
+
|
|
9
|
+
This package requires the following peer dependencies to be installed in your project:
|
|
10
|
+
|
|
11
|
+
```shell
|
|
12
|
+
npm install graphql@^16.10.0 graphql-compose@^9.1.0
|
|
13
|
+
```
|
|
14
|
+
|
|
6
15
|
Getting Started
|
|
7
16
|
---------------
|
|
8
17
|
|
package/coverage/index.html
CHANGED
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">89.23% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>1981/2220</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">80.16% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>570/711</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">89.48% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>434/485</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">88.18% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>1776/2014</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
</div>
|
|
62
62
|
</template>
|
|
63
63
|
</div>
|
|
64
|
-
<div class='status-line
|
|
64
|
+
<div class='status-line high'></div>
|
|
65
65
|
<div class="pad1">
|
|
66
66
|
<table class="coverage-summary">
|
|
67
67
|
<thead>
|
|
@@ -79,52 +79,97 @@
|
|
|
79
79
|
</tr>
|
|
80
80
|
</thead>
|
|
81
81
|
<tbody><tr>
|
|
82
|
-
<td class="file
|
|
83
|
-
<td data-value="
|
|
84
|
-
<div class="chart"><div class="cover-fill" style="width:
|
|
82
|
+
<td class="file high" data-value="src"><a href="src/index.html">src</a></td>
|
|
83
|
+
<td data-value="100" class="pic high">
|
|
84
|
+
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
|
|
85
85
|
</td>
|
|
86
|
-
<td data-value="
|
|
87
|
-
<td data-value="
|
|
88
|
-
<td data-value="
|
|
89
|
-
<td data-value="
|
|
90
|
-
<td data-value="
|
|
91
|
-
<td data-value="
|
|
92
|
-
<td data-value="
|
|
93
|
-
<td data-value="
|
|
86
|
+
<td data-value="100" class="pct high">100%</td>
|
|
87
|
+
<td data-value="8" class="abs high">8/8</td>
|
|
88
|
+
<td data-value="100" class="pct high">100%</td>
|
|
89
|
+
<td data-value="2" class="abs high">2/2</td>
|
|
90
|
+
<td data-value="100" class="pct high">100%</td>
|
|
91
|
+
<td data-value="2" class="abs high">2/2</td>
|
|
92
|
+
<td data-value="100" class="pct high">100%</td>
|
|
93
|
+
<td data-value="8" class="abs high">8/8</td>
|
|
94
94
|
</tr>
|
|
95
95
|
|
|
96
96
|
<tr>
|
|
97
|
-
<td class="file high" data-value="
|
|
98
|
-
<td data-value="
|
|
99
|
-
<div class="chart"><div class="cover-fill" style="width:
|
|
97
|
+
<td class="file high" data-value="src/actions"><a href="src/actions/index.html">src/actions</a></td>
|
|
98
|
+
<td data-value="88.4" class="pic high">
|
|
99
|
+
<div class="chart"><div class="cover-fill" style="width: 88%"></div><div class="cover-empty" style="width: 12%"></div></div>
|
|
100
100
|
</td>
|
|
101
|
-
<td data-value="
|
|
102
|
-
<td data-value="
|
|
103
|
-
<td data-value="
|
|
104
|
-
<td data-value="
|
|
105
|
-
<td data-value="
|
|
106
|
-
<td data-value="
|
|
107
|
-
<td data-value="
|
|
108
|
-
<td data-value="
|
|
101
|
+
<td data-value="88.4" class="pct high">88.4%</td>
|
|
102
|
+
<td data-value="1992" class="abs high">1761/1992</td>
|
|
103
|
+
<td data-value="75.91" class="pct medium">75.91%</td>
|
|
104
|
+
<td data-value="548" class="abs medium">416/548</td>
|
|
105
|
+
<td data-value="88.98" class="pct high">88.98%</td>
|
|
106
|
+
<td data-value="445" class="abs high">396/445</td>
|
|
107
|
+
<td data-value="87.39" class="pct high">87.39%</td>
|
|
108
|
+
<td data-value="1825" class="abs high">1595/1825</td>
|
|
109
109
|
</tr>
|
|
110
110
|
|
|
111
111
|
<tr>
|
|
112
|
-
<td class="file high" data-value="
|
|
112
|
+
<td class="file high" data-value="src/adapters"><a href="src/adapters/index.html">src/adapters</a></td>
|
|
113
113
|
<td data-value="100" class="pic high">
|
|
114
114
|
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
|
|
115
115
|
</td>
|
|
116
116
|
<td data-value="100" class="pct high">100%</td>
|
|
117
|
-
<td data-value="
|
|
117
|
+
<td data-value="75" class="abs high">75/75</td>
|
|
118
|
+
<td data-value="98.21" class="pct high">98.21%</td>
|
|
119
|
+
<td data-value="112" class="abs high">110/112</td>
|
|
120
|
+
<td data-value="100" class="pct high">100%</td>
|
|
121
|
+
<td data-value="16" class="abs high">16/16</td>
|
|
122
|
+
<td data-value="100" class="pct high">100%</td>
|
|
123
|
+
<td data-value="57" class="abs high">57/57</td>
|
|
124
|
+
</tr>
|
|
125
|
+
|
|
126
|
+
<tr>
|
|
127
|
+
<td class="file high" data-value="src/mocks"><a href="src/mocks/index.html">src/mocks</a></td>
|
|
128
|
+
<td data-value="100" class="pic high">
|
|
129
|
+
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
|
|
130
|
+
</td>
|
|
131
|
+
<td data-value="100" class="pct high">100%</td>
|
|
132
|
+
<td data-value="20" class="abs high">20/20</td>
|
|
118
133
|
<td data-value="100" class="pct high">100%</td>
|
|
119
134
|
<td data-value="0" class="abs high">0/0</td>
|
|
120
135
|
<td data-value="100" class="pct high">100%</td>
|
|
121
136
|
<td data-value="0" class="abs high">0/0</td>
|
|
122
137
|
<td data-value="100" class="pct high">100%</td>
|
|
123
|
-
<td data-value="
|
|
138
|
+
<td data-value="20" class="abs high">20/20</td>
|
|
124
139
|
</tr>
|
|
125
140
|
|
|
126
141
|
<tr>
|
|
127
|
-
<td class="file high" data-value="
|
|
142
|
+
<td class="file high" data-value="src/templates/email"><a href="src/templates/email/index.html">src/templates/email</a></td>
|
|
143
|
+
<td data-value="100" class="pic high">
|
|
144
|
+
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
|
|
145
|
+
</td>
|
|
146
|
+
<td data-value="100" class="pct high">100%</td>
|
|
147
|
+
<td data-value="5" class="abs high">5/5</td>
|
|
148
|
+
<td data-value="100" class="pct high">100%</td>
|
|
149
|
+
<td data-value="0" class="abs high">0/0</td>
|
|
150
|
+
<td data-value="100" class="pct high">100%</td>
|
|
151
|
+
<td data-value="0" class="abs high">0/0</td>
|
|
152
|
+
<td data-value="100" class="pct high">100%</td>
|
|
153
|
+
<td data-value="5" class="abs high">5/5</td>
|
|
154
|
+
</tr>
|
|
155
|
+
|
|
156
|
+
<tr>
|
|
157
|
+
<td class="file high" data-value="src/templates/sms"><a href="src/templates/sms/index.html">src/templates/sms</a></td>
|
|
158
|
+
<td data-value="100" class="pic high">
|
|
159
|
+
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
|
|
160
|
+
</td>
|
|
161
|
+
<td data-value="100" class="pct high">100%</td>
|
|
162
|
+
<td data-value="4" class="abs high">4/4</td>
|
|
163
|
+
<td data-value="100" class="pct high">100%</td>
|
|
164
|
+
<td data-value="0" class="abs high">0/0</td>
|
|
165
|
+
<td data-value="100" class="pct high">100%</td>
|
|
166
|
+
<td data-value="0" class="abs high">0/0</td>
|
|
167
|
+
<td data-value="100" class="pct high">100%</td>
|
|
168
|
+
<td data-value="4" class="abs high">4/4</td>
|
|
169
|
+
</tr>
|
|
170
|
+
|
|
171
|
+
<tr>
|
|
172
|
+
<td class="file high" data-value="src/types"><a href="src/types/index.html">src/types</a></td>
|
|
128
173
|
<td data-value="100" class="pic high">
|
|
129
174
|
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
|
|
130
175
|
</td>
|
|
@@ -139,18 +184,18 @@
|
|
|
139
184
|
</tr>
|
|
140
185
|
|
|
141
186
|
<tr>
|
|
142
|
-
<td class="file
|
|
143
|
-
<td data-value="
|
|
144
|
-
<div class="chart"><div class="cover-fill" style="width:
|
|
187
|
+
<td class="file high" data-value="src/utils"><a href="src/utils/index.html">src/utils</a></td>
|
|
188
|
+
<td data-value="93.04" class="pic high">
|
|
189
|
+
<div class="chart"><div class="cover-fill" style="width: 93%"></div><div class="cover-empty" style="width: 7%"></div></div>
|
|
145
190
|
</td>
|
|
146
|
-
<td data-value="
|
|
147
|
-
<td data-value="
|
|
148
|
-
<td data-value="
|
|
149
|
-
<td data-value="
|
|
150
|
-
<td data-value="
|
|
151
|
-
<td data-value="
|
|
152
|
-
<td data-value="48
|
|
153
|
-
<td data-value="
|
|
191
|
+
<td data-value="93.04" class="pct high">93.04%</td>
|
|
192
|
+
<td data-value="115" class="abs high">107/115</td>
|
|
193
|
+
<td data-value="85.71" class="pct high">85.71%</td>
|
|
194
|
+
<td data-value="49" class="abs high">42/49</td>
|
|
195
|
+
<td data-value="90.9" class="pct high">90.9%</td>
|
|
196
|
+
<td data-value="22" class="abs high">20/22</td>
|
|
197
|
+
<td data-value="91.48" class="pct high">91.48%</td>
|
|
198
|
+
<td data-value="94" class="abs high">86/94</td>
|
|
154
199
|
</tr>
|
|
155
200
|
|
|
156
201
|
</tbody>
|
|
@@ -161,7 +206,7 @@
|
|
|
161
206
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
162
207
|
Code coverage generated by
|
|
163
208
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
164
|
-
at 2025-
|
|
209
|
+
at 2025-06-17T18:38:18.536Z
|
|
165
210
|
</div>
|
|
166
211
|
<script src="prettify.js"></script>
|
|
167
212
|
<script>
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var apps_exports = {};
|
|
19
|
+
__export(apps_exports, {
|
|
20
|
+
addApp: () => addApp,
|
|
21
|
+
deactivateApp: () => deactivateApp,
|
|
22
|
+
deleteApp: () => deleteApp,
|
|
23
|
+
getApp: () => getApp,
|
|
24
|
+
getAppOptional: () => getAppOptional,
|
|
25
|
+
getApps: () => getApps,
|
|
26
|
+
parseAppOptions: () => parseAppOptions,
|
|
27
|
+
updateApp: () => updateApp
|
|
28
|
+
});
|
|
29
|
+
module.exports = __toCommonJS(apps_exports);
|
|
30
|
+
var import_utils = require("@nlabs/utils");
|
|
31
|
+
var import_arangojs = require("arangojs");
|
|
32
|
+
var import_error = require("../types/error");
|
|
33
|
+
var import_analyticsUtils = require("../utils/analyticsUtils");
|
|
34
|
+
var import_arangodbUtils = require("../utils/arangodbUtils");
|
|
35
|
+
var import_session = require("../utils/session");
|
|
36
|
+
const eventCategory = "apps";
|
|
37
|
+
const getAppOptional = (fields = []) => fields.reduce((selects, field) => {
|
|
38
|
+
if (field.includes("Count")) {
|
|
39
|
+
return (0, import_arangodbUtils.selectReactionCountByType)("apps", "a", field, selects);
|
|
40
|
+
}
|
|
41
|
+
return selects;
|
|
42
|
+
}, { objects: [], queries: [] });
|
|
43
|
+
const parseAppOptions = (options = {}) => {
|
|
44
|
+
const {
|
|
45
|
+
from = 0,
|
|
46
|
+
to = 30
|
|
47
|
+
} = options;
|
|
48
|
+
const limit = (0, import_arangodbUtils.getLimit)(from, to);
|
|
49
|
+
return {
|
|
50
|
+
...options,
|
|
51
|
+
limit
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
const addApp = async (context, app) => {
|
|
55
|
+
const action = "addUser";
|
|
56
|
+
const { database } = context;
|
|
57
|
+
const { email, name, phone } = app;
|
|
58
|
+
const formatName = (0, import_utils.parseString)(name);
|
|
59
|
+
const formatEmail = (0, import_utils.parseEmail)(email);
|
|
60
|
+
const formatPhone = (0, import_utils.parsePhone)(phone);
|
|
61
|
+
if (!formatName) {
|
|
62
|
+
return (0, import_analyticsUtils.logException)({
|
|
63
|
+
action,
|
|
64
|
+
category: eventCategory,
|
|
65
|
+
params: { name },
|
|
66
|
+
value: import_error.ErrorTypes.INVALID_ARGUMENTS
|
|
67
|
+
}, context);
|
|
68
|
+
}
|
|
69
|
+
const filters = [`a.name == "${formatName}"`];
|
|
70
|
+
if (formatEmail) {
|
|
71
|
+
filters.push(`a.email == "${formatEmail}"`);
|
|
72
|
+
}
|
|
73
|
+
const checkQuery = `FOR u IN users
|
|
74
|
+
FILTER ${filters.join(" || ")}
|
|
75
|
+
RETURN u`;
|
|
76
|
+
try {
|
|
77
|
+
const existingApps = await database.query(checkQuery).then((cursor) => cursor.all());
|
|
78
|
+
if (existingApps.length) {
|
|
79
|
+
return (0, import_analyticsUtils.logException)({
|
|
80
|
+
action,
|
|
81
|
+
category: eventCategory,
|
|
82
|
+
params: { name },
|
|
83
|
+
value: import_error.ErrorTypes.EXISTING_ITEM
|
|
84
|
+
}, context);
|
|
85
|
+
}
|
|
86
|
+
} catch (error) {
|
|
87
|
+
return (0, import_analyticsUtils.logError)({
|
|
88
|
+
action,
|
|
89
|
+
category: eventCategory,
|
|
90
|
+
label: import_error.ErrorTypes.DATABASE_ERROR,
|
|
91
|
+
params: { name }
|
|
92
|
+
}, error, context);
|
|
93
|
+
}
|
|
94
|
+
const insert = {
|
|
95
|
+
_key: (0, import_utils.createHash)(name, null),
|
|
96
|
+
active: true,
|
|
97
|
+
added: Date.now(),
|
|
98
|
+
email: formatEmail,
|
|
99
|
+
modified: Date.now(),
|
|
100
|
+
name: formatName,
|
|
101
|
+
phone: formatPhone
|
|
102
|
+
};
|
|
103
|
+
const insertQuery = import_arangojs.aql`INSERT ${insert} IN apps RETURN NEW`;
|
|
104
|
+
return await database.query(insertQuery).then((cursor) => cursor.next() || {}).catch((error) => (0, import_analyticsUtils.logError)({
|
|
105
|
+
action,
|
|
106
|
+
category: eventCategory,
|
|
107
|
+
label: import_error.ErrorTypes.DATABASE_ERROR,
|
|
108
|
+
params: { name }
|
|
109
|
+
}, error, context));
|
|
110
|
+
};
|
|
111
|
+
const updateApp = async (context, app) => {
|
|
112
|
+
const action = "updateApp";
|
|
113
|
+
const { database } = context;
|
|
114
|
+
const { _key, _id, id, appId, ...updated } = app;
|
|
115
|
+
const appDocId = (0, import_arangodbUtils.getDocId)("apps", app);
|
|
116
|
+
const appQuery = import_arangojs.aql`LET a = DOCUMENT(${appDocId})
|
|
117
|
+
UPDATE a WITH ${updated} IN apps
|
|
118
|
+
RETURN NEW`;
|
|
119
|
+
return await database.query(appQuery).then((cursor) => cursor.next()).catch(
|
|
120
|
+
(error) => (0, import_analyticsUtils.logError)({
|
|
121
|
+
action,
|
|
122
|
+
category: eventCategory,
|
|
123
|
+
label: import_error.ErrorTypes.DATABASE_ERROR,
|
|
124
|
+
params: { app }
|
|
125
|
+
}, error, context)
|
|
126
|
+
);
|
|
127
|
+
};
|
|
128
|
+
const deleteApp = async (context, app) => {
|
|
129
|
+
const action = "deleteApp";
|
|
130
|
+
const { database, session } = context;
|
|
131
|
+
const isAdmin = (0, import_session.isAdminUser)(session);
|
|
132
|
+
const appDocId = (0, import_arangodbUtils.getDocId)("apps", app);
|
|
133
|
+
if (!isAdmin) {
|
|
134
|
+
return Promise.reject(new import_analyticsUtils.UserError(import_error.ErrorTypes.INVALID_SESSION));
|
|
135
|
+
}
|
|
136
|
+
const aqlQuery = import_arangojs.aql`FOR a IN apps
|
|
137
|
+
FILTER a._id == \"${appDocId}\"
|
|
138
|
+
LIMIT 1
|
|
139
|
+
REMOVE a IN apps
|
|
140
|
+
RETURN OLD`;
|
|
141
|
+
return database.query(aqlQuery).then((cursor) => cursor.next()).catch((error) => (0, import_analyticsUtils.logError)({
|
|
142
|
+
action,
|
|
143
|
+
category: eventCategory,
|
|
144
|
+
label: import_error.ErrorTypes.DATABASE_ERROR,
|
|
145
|
+
params: app
|
|
146
|
+
}, error, context));
|
|
147
|
+
};
|
|
148
|
+
const deactivateApp = (context, app) => {
|
|
149
|
+
const action = "deactivateApp";
|
|
150
|
+
const { database, session } = context;
|
|
151
|
+
const isAdmin = (0, import_session.isAdminUser)(session);
|
|
152
|
+
const appDocId = (0, import_arangodbUtils.getDocId)("apps", app);
|
|
153
|
+
if (!isAdmin) {
|
|
154
|
+
return Promise.reject(new import_analyticsUtils.UserError(import_error.ErrorTypes.INVALID_SESSION));
|
|
155
|
+
}
|
|
156
|
+
const updated = {
|
|
157
|
+
active: false
|
|
158
|
+
};
|
|
159
|
+
const aqlQuery = import_arangojs.aql`UPDATE ${appDocId} WITH ${updated} IN apps LIMIT 1 RETURN NEW`;
|
|
160
|
+
return database.query(aqlQuery).then((cursor) => cursor.next()).catch(
|
|
161
|
+
(error) => (0, import_analyticsUtils.logError)({
|
|
162
|
+
action,
|
|
163
|
+
category: eventCategory,
|
|
164
|
+
label: import_error.ErrorTypes.DATABASE_ERROR,
|
|
165
|
+
params: app
|
|
166
|
+
}, error, context)
|
|
167
|
+
);
|
|
168
|
+
};
|
|
169
|
+
const getApp = (context, options) => {
|
|
170
|
+
const action = "getApp";
|
|
171
|
+
const { database, fields, session } = context;
|
|
172
|
+
const { id, key, name } = parseAppOptions(options);
|
|
173
|
+
const { objects: selectObjects, queries: selectQueries } = getAppOptional(fields);
|
|
174
|
+
const filterBy = ["a.active == true"];
|
|
175
|
+
const isAdmin = (0, import_session.isAdminUser)(session);
|
|
176
|
+
if (!isAdmin) {
|
|
177
|
+
return Promise.reject(new import_analyticsUtils.UserError(import_error.ErrorTypes.INVALID_SESSION));
|
|
178
|
+
}
|
|
179
|
+
if (id) {
|
|
180
|
+
filterBy.push(`a._id == "${(0, import_utils.parseArangoId)(id)}"`);
|
|
181
|
+
}
|
|
182
|
+
if (key) {
|
|
183
|
+
filterBy.push(`a._key == "apps/${(0, import_utils.parseId)(key)}"`);
|
|
184
|
+
}
|
|
185
|
+
if (name) {
|
|
186
|
+
filterBy.push(`CONTAINS(a.name, "${(0, import_utils.parseString)(name)}")`);
|
|
187
|
+
}
|
|
188
|
+
const aqlQuery = `FOR a IN apps
|
|
189
|
+
FILTER ${filterBy.join(" && ")}
|
|
190
|
+
${selectQueries.join("\n")}
|
|
191
|
+
RETURN MERGE(a, {${selectObjects.join(", ")}})`;
|
|
192
|
+
return database.query(aqlQuery).then((cursor) => cursor.next()).catch((error) => {
|
|
193
|
+
(0, import_analyticsUtils.logError)({
|
|
194
|
+
action,
|
|
195
|
+
category: eventCategory,
|
|
196
|
+
label: import_error.ErrorTypes.DATABASE_ERROR,
|
|
197
|
+
params: options
|
|
198
|
+
}, error, context);
|
|
199
|
+
return null;
|
|
200
|
+
});
|
|
201
|
+
};
|
|
202
|
+
const getApps = async (context, options) => {
|
|
203
|
+
const action = "getApps";
|
|
204
|
+
const { database, fields, session } = context;
|
|
205
|
+
const { limit, name } = parseAppOptions(options);
|
|
206
|
+
const { objects: selectObjects, queries: selectQueries } = getAppOptional(fields);
|
|
207
|
+
const filterBy = ["a.active == true"];
|
|
208
|
+
const isAdmin = (0, import_session.isAdminUser)(session);
|
|
209
|
+
if (!isAdmin) {
|
|
210
|
+
return Promise.reject(new import_analyticsUtils.UserError(import_error.ErrorTypes.INVALID_SESSION));
|
|
211
|
+
}
|
|
212
|
+
if (name) {
|
|
213
|
+
filterBy.push(`CONTAINS(a.name, "${(0, import_utils.parseString)(name)}")`);
|
|
214
|
+
}
|
|
215
|
+
const aqlQuery = `FOR a IN apps
|
|
216
|
+
FILTER ${filterBy.join(" && ")}
|
|
217
|
+
${selectQueries.join("\n")}
|
|
218
|
+
${limit.aql}
|
|
219
|
+
SORT a.name
|
|
220
|
+
RETURN MERGE(a, {${selectObjects.join(", ")}})`;
|
|
221
|
+
return database.query(aqlQuery).then((cursor) => cursor.all()).catch((error) => {
|
|
222
|
+
(0, import_analyticsUtils.logError)({
|
|
223
|
+
action,
|
|
224
|
+
category: eventCategory,
|
|
225
|
+
label: import_error.ErrorTypes.DATABASE_ERROR,
|
|
226
|
+
params: options
|
|
227
|
+
}, error, context);
|
|
228
|
+
return [];
|
|
229
|
+
});
|
|
230
|
+
};
|
|
231
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
232
|
+
0 && (module.exports = {
|
|
233
|
+
addApp,
|
|
234
|
+
deactivateApp,
|
|
235
|
+
deleteApp,
|
|
236
|
+
getApp,
|
|
237
|
+
getAppOptional,
|
|
238
|
+
getApps,
|
|
239
|
+
parseAppOptions,
|
|
240
|
+
updateApp
|
|
241
|
+
});
|
|
242
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvYXBwcy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VBcmFuZ29JZCwgcGFyc2VFbWFpbCwgcGFyc2VJZCwgcGFyc2VQaG9uZSwgcGFyc2VTdHJpbmd9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcblxuaW1wb3J0IHtBcHBUeXBlfSBmcm9tICcuLi90eXBlcy9hcHBzJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3InO1xuaW1wb3J0IHtsb2dFcnJvciwgbG9nRXhjZXB0aW9uLCBVc2VyRXJyb3J9IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzJztcbmltcG9ydCB7Z2V0RG9jSWQsIGdldExpbWl0LCBzZWxlY3RSZWFjdGlvbkNvdW50QnlUeXBlfSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzJztcbmltcG9ydCB7aXNBZG1pblVzZXJ9IGZyb20gJy4uL3V0aWxzL3Nlc3Npb24nO1xuXG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aCc7XG5pbXBvcnQgdHlwZSB7VXNlclR5cGV9IGZyb20gJy4uL3R5cGVzL3VzZXJzJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeTogc3RyaW5nID0gJ2FwcHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwcE9wdGlvbnMge1xuICByZWFkb25seSBpZD86IHN0cmluZztcbiAgcmVhZG9ubHkga2V5Pzogc3RyaW5nO1xuICByZWFkb25seSBmcm9tPzogbnVtYmVyO1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICByZWFkb25seSB0bz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IGdldEFwcE9wdGlvbmFsID0gKGZpZWxkczogc3RyaW5nW10gPSBbXSkgPT5cbiAgZmllbGRzLnJlZHVjZSgoc2VsZWN0cywgZmllbGQ6IHN0cmluZykgPT4ge1xuICAgIGlmKGZpZWxkLmluY2x1ZGVzKCdDb3VudCcpKSB7XG4gICAgICByZXR1cm4gc2VsZWN0UmVhY3Rpb25Db3VudEJ5VHlwZSgnYXBwcycsICdhJywgZmllbGQsIHNlbGVjdHMpO1xuICAgIH1cblxuICAgIHJldHVybiBzZWxlY3RzO1xuICB9LCB7b2JqZWN0czogW10sIHF1ZXJpZXM6IFtdfSk7XG5cbmV4cG9ydCBjb25zdCBwYXJzZUFwcE9wdGlvbnMgPSAob3B0aW9uczogQXBwT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmcm9tID0gMCxcbiAgICB0byA9IDMwXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBsaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcblxuICByZXR1cm4ge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgbGltaXRcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRBcHAgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgYXBwOiBBcHBUeXBlKTogUHJvbWlzZTxVc2VyVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkVXNlcic7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuICBjb25zdCB7ZW1haWwsIG5hbWUsIHBob25lfSA9IGFwcDtcbiAgY29uc3QgZm9ybWF0TmFtZSA9IHBhcnNlU3RyaW5nKG5hbWUpO1xuICBjb25zdCBmb3JtYXRFbWFpbCA9IHBhcnNlRW1haWwoZW1haWwpO1xuICBjb25zdCBmb3JtYXRQaG9uZSA9IHBhcnNlUGhvbmUocGhvbmUpO1xuXG4gIGlmKCFmb3JtYXROYW1lKSB7XG4gICAgcmV0dXJuIGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge25hbWV9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9BUkdVTUVOVFNcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IGZpbHRlcnM6IHN0cmluZ1tdID0gW2BhLm5hbWUgPT0gXCIke2Zvcm1hdE5hbWV9XCJgXTtcblxuICBpZihmb3JtYXRFbWFpbCkge1xuICAgIGZpbHRlcnMucHVzaChgYS5lbWFpbCA9PSBcIiR7Zm9ybWF0RW1haWx9XCJgKTtcbiAgfVxuXG4gIGNvbnN0IGNoZWNrUXVlcnk6IHN0cmluZyA9IGBGT1IgdSBJTiB1c2Vyc1xuICAgIEZJTFRFUiAke2ZpbHRlcnMuam9pbignIHx8ICcpfVxuICAgIFJFVFVSTiB1YDtcblxuICB0cnkge1xuICAgIGNvbnN0IGV4aXN0aW5nQXBwcyA9IGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGNoZWNrUXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcblxuICAgIGlmKGV4aXN0aW5nQXBwcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBsb2dFeGNlcHRpb24oe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBwYXJhbXM6IHtuYW1lfSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuRVhJU1RJTkdfSVRFTVxuICAgICAgfSwgY29udGV4dCk7XG4gICAgfVxuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1IsXG4gICAgICBwYXJhbXM6IHtuYW1lfVxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IGluc2VydDogQXBwVHlwZSA9IHtcbiAgICBfa2V5OiBjcmVhdGVIYXNoKG5hbWUsIG51bGwpLFxuICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICBhZGRlZDogRGF0ZS5ub3coKSxcbiAgICBlbWFpbDogZm9ybWF0RW1haWwsXG4gICAgbW9kaWZpZWQ6IERhdGUubm93KCksXG4gICAgbmFtZTogZm9ybWF0TmFtZSxcbiAgICBwaG9uZTogZm9ybWF0UGhvbmVcbiAgfTtcblxuICBjb25zdCBpbnNlcnRRdWVyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiBhcHBzIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiBhd2FpdCBkYXRhYmFzZS5xdWVyeShpbnNlcnRRdWVyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpIHx8IHt9KVxuICAgIC5jYXRjaCgoZXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1IsXG4gICAgICBwYXJhbXM6IHtuYW1lfVxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlQXBwID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIGFwcDogQXBwVHlwZSk6IFByb21pc2U8QXBwVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICd1cGRhdGVBcHAnO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcbiAgY29uc3Qge19rZXksIF9pZCwgaWQsIGFwcElkLCAuLi51cGRhdGVkfSA9IGFwcDtcbiAgY29uc3QgYXBwRG9jSWQgPSBnZXREb2NJZCgnYXBwcycsIGFwcCk7XG4gIGNvbnN0IGFwcFF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBMRVQgYSA9IERPQ1VNRU5UKCR7YXBwRG9jSWR9KVxuICAgIFVQREFURSBhIFdJVEggJHt1cGRhdGVkfSBJTiBhcHBzXG4gICAgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGFwcFF1ZXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLmNhdGNoKChlcnJvcikgPT5cbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1IsXG4gICAgICAgIHBhcmFtczoge2FwcH1cbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KVxuICAgICk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlQXBwID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIGFwcDogQXBwVHlwZSk6IFByb21pc2U8QXBwVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdkZWxldGVBcHAnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb259ID0gY29udGV4dDtcbiAgY29uc3QgaXNBZG1pbiA9IGlzQWRtaW5Vc2VyKHNlc3Npb24pO1xuICBjb25zdCBhcHBEb2NJZCA9IGdldERvY0lkKCdhcHBzJywgYXBwKTtcblxuICBpZighaXNBZG1pbikge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVXNlckVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9TRVNTSU9OKSk7XG4gIH1cblxuICBjb25zdCBhcWxRdWVyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGEgSU4gYXBwc1xuICAgIEZJTFRFUiBhLl9pZCA9PSBcXFwiJHthcHBEb2NJZH1cXFwiXG4gICAgTElNSVQgMVxuICAgIFJFTU9WRSBhIElOIGFwcHNcbiAgICBSRVRVUk4gT0xEYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXVlcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yKSA9PlxuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUixcbiAgICAgICAgcGFyYW1zOiBhcHAgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVhY3RpdmF0ZUFwcCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBhcHA6IEFwcFR5cGUpOiBQcm9taXNlPFVzZXJUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2RlYWN0aXZhdGVBcHAnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb259ID0gY29udGV4dDtcbiAgY29uc3QgaXNBZG1pbiA9IGlzQWRtaW5Vc2VyKHNlc3Npb24pO1xuICBjb25zdCBhcHBEb2NJZCA9IGdldERvY0lkKCdhcHBzJywgYXBwKTtcblxuICBpZighaXNBZG1pbikge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVXNlckVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9TRVNTSU9OKSk7XG4gIH1cblxuICBjb25zdCB1cGRhdGVkOiBBcHBUeXBlID0ge1xuICAgIGFjdGl2ZTogZmFsc2VcbiAgfTtcbiAgY29uc3QgYXFsUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQREFURSAke2FwcERvY0lkfSBXSVRIICR7dXBkYXRlZH0gSU4gYXBwcyBMSU1JVCAxIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRdWVyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PlxuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUixcbiAgICAgICAgcGFyYW1zOiBhcHAgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KVxuICAgICk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXBwID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIG9wdGlvbnM/OiBBcHBPcHRpb25zKTogUHJvbWlzZTxBcHBUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldEFwcCc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgZmllbGRzLCBzZXNzaW9ufSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtpZCwga2V5LCBuYW1lfSA9IHBhcnNlQXBwT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0QXBwT3B0aW9uYWwoZmllbGRzKTtcbiAgY29uc3QgZmlsdGVyQnk6IHN0cmluZ1tdID0gWydhLmFjdGl2ZSA9PSB0cnVlJ107XG4gIGNvbnN0IGlzQWRtaW4gPSBpc0FkbWluVXNlcihzZXNzaW9uKTtcblxuICBpZighaXNBZG1pbikge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVXNlckVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9TRVNTSU9OKSk7XG4gIH1cblxuICBpZihpZCkge1xuICAgIGZpbHRlckJ5LnB1c2goYGEuX2lkID09IFwiJHtwYXJzZUFyYW5nb0lkKGlkKX1cImApO1xuICB9XG5cbiAgaWYoa2V5KSB7XG4gICAgZmlsdGVyQnkucHVzaChgYS5fa2V5ID09IFwiYXBwcy8ke3BhcnNlSWQoa2V5KX1cImApO1xuICB9XG5cbiAgaWYobmFtZSkge1xuICAgIGZpbHRlckJ5LnB1c2goYENPTlRBSU5TKGEubmFtZSwgXCIke3BhcnNlU3RyaW5nKG5hbWUpfVwiKWApO1xuICB9XG5cbiAgLy8gR2V0IGRhdGEgZnJvbSBkYXRhYmFzZVxuICBjb25zdCBhcWxRdWVyeTogc3RyaW5nID0gYEZPUiBhIElOIGFwcHNcbiAgICBGSUxURVIgJHtmaWx0ZXJCeS5qb2luKCcgJiYgJyl9XG4gICAgJHtzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpfVxuICAgIFJFVFVSTiBNRVJHRShhLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRdWVyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpIGFzIHVua25vd24gYXMgQXBwVHlwZSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUixcbiAgICAgICAgcGFyYW1zOiBvcHRpb25zIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBcHBzID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIG9wdGlvbnM/OiBBcHBPcHRpb25zKTogUHJvbWlzZTxBcHBUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0QXBwcyc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgZmllbGRzLCBzZXNzaW9ufSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdCwgbmFtZX0gPSBwYXJzZUFwcE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldEFwcE9wdGlvbmFsKGZpZWxkcyk7XG4gIGNvbnN0IGZpbHRlckJ5OiBzdHJpbmdbXSA9IFsnYS5hY3RpdmUgPT0gdHJ1ZSddO1xuICBjb25zdCBpc0FkbWluID0gaXNBZG1pblVzZXIoc2Vzc2lvbik7XG5cbiAgaWYoIWlzQWRtaW4pIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFVzZXJFcnJvcihFcnJvclR5cGVzLklOVkFMSURfU0VTU0lPTikpO1xuICB9XG5cbiAgaWYobmFtZSkge1xuICAgIGZpbHRlckJ5LnB1c2goYENPTlRBSU5TKGEubmFtZSwgXCIke3BhcnNlU3RyaW5nKG5hbWUpfVwiKWApO1xuICB9XG5cbiAgLy8gR2V0IGRhdGEgZnJvbSBkYXRhYmFzZVxuICBjb25zdCBhcWxRdWVyeTogc3RyaW5nID0gYEZPUiBhIElOIGFwcHNcbiAgICBGSUxURVIgJHtmaWx0ZXJCeS5qb2luKCcgJiYgJyl9XG4gICAgJHtzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpfVxuICAgICR7bGltaXQuYXFsfVxuICAgIFNPUlQgYS5uYW1lXG4gICAgUkVUVVJOIE1FUkdFKGEsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFF1ZXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIEFwcFR5cGVbXSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUixcbiAgICAgICAgcGFyYW1zOiBvcHRpb25zIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7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QUFLLHlCQUFxQiwwQkFBWSxJQUFJLENBQUMsSUFBSTtBQUFBLEVBQzFEO0FBR0EsUUFBTSxXQUFtQjtBQUFBLGFBQ2QsU0FBUyxLQUFLLE1BQU0sQ0FBQztBQUFBLE1BQzVCLGNBQWMsS0FBSyxJQUFJLENBQUM7QUFBQSx1QkFDUCxjQUFjLEtBQUssSUFBSSxDQUFDO0FBRTdDLFNBQU8sU0FBUyxNQUFNLFFBQVEsRUFDM0IsS0FBSyxDQUFDLFdBQVcsT0FBTyxLQUFLLENBQXVCLEVBQ3BELE1BQU0sQ0FBQyxVQUFpQjtBQUN2Qix3Q0FBUztBQUFBLE1BQ1A7QUFBQSxNQUNBLFVBQVU7QUFBQSxNQUNWLE9BQU8sd0JBQVc7QUFBQSxNQUNsQixRQUFRO0FBQUEsSUFDVixHQUFHLE9BQU8sT0FBTztBQUNqQixXQUFPO0FBQUEsRUFDVCxDQUFDO0FBQ0w7QUFFTyxNQUFNLFVBQVUsT0FBTyxTQUFxQixZQUE2QztBQUM5RixRQUFNLFNBQWlCO0FBQ3ZCLFFBQU0sRUFBQyxVQUFVLFFBQVEsUUFBTyxJQUFJO0FBQ3BDLFFBQU0sRUFBQyxPQUFPLEtBQUksSUFBSSxnQkFBZ0IsT0FBTztBQUM3QyxRQUFNLEVBQUMsU0FBUyxlQUFlLFNBQVMsY0FBYSxJQUFJLGVBQWUsTUFBTTtBQUM5RSxRQUFNLFdBQXFCLENBQUMsa0JBQWtCO0FBQzlDLFFBQU0sY0FBVSw0QkFBWSxPQUFPO0FBRW5DLE1BQUcsQ0FBQyxTQUFTO0FBQ1gsV0FBTyxRQUFRLE9BQU8sSUFBSSxnQ0FBVSx3QkFBVyxlQUFlLENBQUM7QUFBQSxFQUNqRTtBQUVBLE1BQUcsTUFBTTtBQUNQLGFBQVMsS0FBSyx5QkFBcUIsMEJBQVksSUFBSSxDQUFDLElBQUk7QUFBQSxFQUMxRDtBQUdBLFFBQU0sV0FBbUI7QUFBQSxhQUNkLFNBQVMsS0FBSyxNQUFNLENBQUM7QUFBQSxNQUM1QixjQUFjLEtBQUssSUFBSSxDQUFDO0FBQUEsTUFDeEIsTUFBTSxHQUFHO0FBQUE7QUFBQSx1QkFFUSxjQUFjLEtBQUssSUFBSSxDQUFDO0FBRTdDLFNBQU8sU0FBUyxNQUFNLFFBQVEsRUFDM0IsS0FBSyxDQUFDLFdBQVcsT0FBTyxJQUFJLENBQXlCLEVBQ3JELE1BQU0sQ0FBQyxVQUFpQjtBQUN2Qix3Q0FBUztBQUFBLE1BQ1A7QUFBQSxNQUNBLFVBQVU7QUFBQSxNQUNWLE9BQU8sd0JBQVc7QUFBQSxNQUNsQixRQUFRO0FBQUEsSUFDVixHQUFHLE9BQU8sT0FBTztBQUNqQixXQUFPLENBQUM7QUFBQSxFQUNWLENBQUM7QUFDTDsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var connections_exports = {};
|
|
19
|
+
__export(connections_exports, {
|
|
20
|
+
addConnection: () => addConnection,
|
|
21
|
+
deleteConnection: () => deleteConnection,
|
|
22
|
+
getConnection: () => getConnection
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(connections_exports);
|
|
25
|
+
var import_utils = require("@nlabs/utils");
|
|
26
|
+
var import_aql = require("arangojs/aql");
|
|
27
|
+
var import_error = require("../types/error");
|
|
28
|
+
var import_utils2 = require("../utils");
|
|
29
|
+
const eventCategory = "connections";
|
|
30
|
+
const addConnection = (context, fromType, fromId, toType, toId, value) => {
|
|
31
|
+
const action = "addConnection";
|
|
32
|
+
const { database } = context;
|
|
33
|
+
const formatFromDocId = (0, import_utils.parseArangoId)(`${fromType}/${fromId}`);
|
|
34
|
+
const formatToDocId = (0, import_utils.parseArangoId)(`${toType}/${toId}`);
|
|
35
|
+
const insert = {
|
|
36
|
+
_from: formatFromDocId,
|
|
37
|
+
_to: formatToDocId,
|
|
38
|
+
isDirect: true,
|
|
39
|
+
type: toType,
|
|
40
|
+
value: !!value ? (0, import_utils.parseString)(value, 32) : void 0
|
|
41
|
+
};
|
|
42
|
+
const aqlQry = import_aql.aql`INSERT ${insert} IN hasConnection`;
|
|
43
|
+
return database.query(aqlQry).then(() => true).catch((error) => {
|
|
44
|
+
(0, import_utils2.logError)({
|
|
45
|
+
action,
|
|
46
|
+
category: eventCategory,
|
|
47
|
+
label: import_error.ErrorTypes.DATABASE_ERROR
|
|
48
|
+
}, error, context);
|
|
49
|
+
return false;
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
const getConnection = (context, fromType, fromId, toType, toId) => {
|
|
53
|
+
const action = "getConnection";
|
|
54
|
+
const { database } = context;
|
|
55
|
+
const formatFromDocId = (0, import_utils.parseArangoId)(`${fromType}/${fromId}`);
|
|
56
|
+
const formatToDocId = (0, import_utils.parseArangoId)(`${toType}/${toId}`);
|
|
57
|
+
const aqlQry = import_aql.aql`FOR hc in hasConnection
|
|
58
|
+
FILTER hc._from == ${formatFromDocId} && hc._to == ${formatToDocId}
|
|
59
|
+
LIMIT 1`;
|
|
60
|
+
return database.query(aqlQry).then((cursor) => cursor.next()).catch((error) => (0, import_utils2.logError)({
|
|
61
|
+
action,
|
|
62
|
+
category: eventCategory,
|
|
63
|
+
label: import_error.ErrorTypes.DATABASE_ERROR
|
|
64
|
+
}, error, context));
|
|
65
|
+
};
|
|
66
|
+
const deleteConnection = (context, fromType, fromId, toType, toId) => {
|
|
67
|
+
const action = "deleteReactionByItem";
|
|
68
|
+
const { database } = context;
|
|
69
|
+
const formatFromDocId = (0, import_utils.parseArangoId)(`${fromType}/${fromId}`);
|
|
70
|
+
const formatToDocId = (0, import_utils.parseArangoId)(`${toType}/${toId}`);
|
|
71
|
+
const aqlQry = import_aql.aql`FOR hc in hasConnection
|
|
72
|
+
FILTER hc._from == ${formatFromDocId} && hc._to == ${formatToDocId}
|
|
73
|
+
LIMIT 1
|
|
74
|
+
REMOVE hc IN hasConnection`;
|
|
75
|
+
return database.query(aqlQry).then(() => true).catch((error) => {
|
|
76
|
+
(0, import_utils2.logError)({
|
|
77
|
+
action,
|
|
78
|
+
category: eventCategory,
|
|
79
|
+
label: import_error.ErrorTypes.DATABASE_ERROR
|
|
80
|
+
}, error, context);
|
|
81
|
+
return false;
|
|
82
|
+
});
|
|
83
|
+
};
|
|
84
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
85
|
+
0 && (module.exports = {
|
|
86
|
+
addConnection,
|
|
87
|
+
deleteConnection,
|
|
88
|
+
getConnection
|
|
89
|
+
});
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvY29ubmVjdGlvbnMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7cGFyc2VBcmFuZ29JZCwgcGFyc2VTdHJpbmd9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbCwgdHlwZSBBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcblxuaW1wb3J0IHtFcnJvclR5cGVzfSBmcm9tICcuLi90eXBlcy9lcnJvcic7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscyc7XG5cbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0LCBDb25uZWN0aW9uVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5OiBzdHJpbmcgPSAnY29ubmVjdGlvbnMnO1xuXG5leHBvcnQgY29uc3QgYWRkQ29ubmVjdGlvbiA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgZnJvbVR5cGU6IHN0cmluZyxcbiAgZnJvbUlkOiBzdHJpbmcsXG4gIHRvVHlwZTogc3RyaW5nLFxuICB0b0lkOiBzdHJpbmcsXG4gIHZhbHVlPzogc3RyaW5nXG4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnYWRkQ29ubmVjdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuXG4gIGNvbnN0IGZvcm1hdEZyb21Eb2NJZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZChgJHtmcm9tVHlwZX0vJHtmcm9tSWR9YCk7XG4gIGNvbnN0IGZvcm1hdFRvRG9jSWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQoYCR7dG9UeXBlfS8ke3RvSWR9YCk7XG4gIGNvbnN0IGluc2VydCA9IHtcbiAgICBfZnJvbTogZm9ybWF0RnJvbURvY0lkLFxuICAgIF90bzogZm9ybWF0VG9Eb2NJZCxcbiAgICBpc0RpcmVjdDogdHJ1ZSxcbiAgICB0eXBlOiB0b1R5cGUsXG4gICAgdmFsdWU6ICEhdmFsdWUgPyBwYXJzZVN0cmluZyh2YWx1ZSwgMzIpIDogdW5kZWZpbmVkXG4gIH07XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiBoYXNDb25uZWN0aW9uYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKCgpID0+IHRydWUpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb25uZWN0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBmcm9tVHlwZTogc3RyaW5nLFxuICBmcm9tSWQ6IHN0cmluZyxcbiAgdG9UeXBlOiBzdHJpbmcsXG4gIHRvSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxDb25uZWN0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRDb25uZWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG5cbiAgY29uc3QgZm9ybWF0RnJvbURvY0lkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKGAke2Zyb21UeXBlfS8ke2Zyb21JZH1gKTtcbiAgY29uc3QgZm9ybWF0VG9Eb2NJZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZChgJHt0b1R5cGV9LyR7dG9JZH1gKTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBoYyBpbiBoYXNDb25uZWN0aW9uXG4gICAgRklMVEVSIGhjLl9mcm9tID09ICR7Zm9ybWF0RnJvbURvY0lkfSAmJiBoYy5fdG8gPT0gJHtmb3JtYXRUb0RvY0lkfVxuICAgIExJTUlUIDFgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlQ29ubmVjdGlvbiA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgZnJvbVR5cGU6IHN0cmluZyxcbiAgZnJvbUlkOiBzdHJpbmcsXG4gIHRvVHlwZTogc3RyaW5nLFxuICB0b0lkOiBzdHJpbmdcbik6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdkZWxldGVSZWFjdGlvbkJ5SXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuXG4gIGNvbnN0IGZvcm1hdEZyb21Eb2NJZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZChgJHtmcm9tVHlwZX0vJHtmcm9tSWR9YCk7XG4gIGNvbnN0IGZvcm1hdFRvRG9jSWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQoYCR7dG9UeXBlfS8ke3RvSWR9YCk7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgaGMgaW4gaGFzQ29ubmVjdGlvblxuICAgIEZJTFRFUiBoYy5fZnJvbSA9PSAke2Zvcm1hdEZyb21Eb2NJZH0gJiYgaGMuX3RvID09ICR7Zm9ybWF0VG9Eb2NJZH1cbiAgICBMSU1JVCAxXG4gICAgUkVNT1ZFIGhjIElOIGhhc0Nvbm5lY3Rpb25gO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKCkgPT4gdHJ1ZSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFBeUM7QUFDekMsaUJBQWlDO0FBRWpDLG1CQUF5QjtBQUN6QixJQUFBQSxnQkFBdUI7QUFJdkIsTUFBTSxnQkFBd0I7QUFFdkIsTUFBTSxnQkFBZ0IsQ0FDM0IsU0FDQSxVQUNBLFFBQ0EsUUFDQSxNQUNBLFVBQ3FCO0FBQ3JCLFFBQU0sU0FBaUI7QUFDdkIsUUFBTSxFQUFDLFNBQVEsSUFBSTtBQUVuQixRQUFNLHNCQUEwQiw0QkFBYyxHQUFHLFFBQVEsSUFBSSxNQUFNLEVBQUU7QUFDckUsUUFBTSxvQkFBd0IsNEJBQWMsR0FBRyxNQUFNLElBQUksSUFBSSxFQUFFO0FBQy9ELFFBQU0sU0FBUztBQUFBLElBQ2IsT0FBTztBQUFBLElBQ1AsS0FBSztBQUFBLElBQ0wsVUFBVTtBQUFBLElBQ1YsTUFBTTtBQUFBLElBQ04sT0FBTyxDQUFDLENBQUMsWUFBUSwwQkFBWSxPQUFPLEVBQUUsSUFBSTtBQUFBLEVBQzVDO0FBQ0EsUUFBTSxTQUFtQix3QkFBYSxNQUFNO0FBRTVDLFNBQU8sU0FBUyxNQUFNLE1BQU0sRUFDekIsS0FBSyxNQUFNLElBQUksRUFDZixNQUFNLENBQUMsVUFBaUI7QUFDdkIsZ0NBQVM7QUFBQSxNQUNQO0FBQUEsTUFDQSxVQUFVO0FBQUEsTUFDVixPQUFPLHdCQUFXO0FBQUEsSUFDcEIsR0FBRyxPQUFPLE9BQU87QUFDakIsV0FBTztBQUFBLEVBQ1QsQ0FBQztBQUNMO0FBRU8sTUFBTSxnQkFBZ0IsQ0FDM0IsU0FDQSxVQUNBLFFBQ0EsUUFDQSxTQUM0QjtBQUM1QixRQUFNLFNBQWlCO0FBQ3ZCLFFBQU0sRUFBQyxTQUFRLElBQUk7QUFFbkIsUUFBTSxzQkFBMEIsNEJBQWMsR0FBRyxRQUFRLElBQUksTUFBTSxFQUFFO0FBQ3JFLFFBQU0sb0JBQXdCLDRCQUFjLEdBQUcsTUFBTSxJQUFJLElBQUksRUFBRTtBQUUvRCxRQUFNLFNBQW1CO0FBQUEseUJBQ0YsZUFBZSxpQkFBaUIsYUFBYTtBQUFBO0FBR3BFLFNBQU8sU0FBUyxNQUFNLE1BQU0sRUFDekIsS0FBSyxDQUFDLFdBQVcsT0FBTyxLQUFLLENBQUMsRUFDOUIsTUFBTSxDQUFDLGNBQWlCLHdCQUFTO0FBQUEsSUFDaEM7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLE9BQU8sd0JBQVc7QUFBQSxFQUNwQixHQUFHLE9BQU8sT0FBTyxDQUFDO0FBQ3RCO0FBRU8sTUFBTSxtQkFBbUIsQ0FDOUIsU0FDQSxVQUNBLFFBQ0EsUUFDQSxTQUNxQjtBQUNyQixRQUFNLFNBQWlCO0FBQ3ZCLFFBQU0sRUFBQyxTQUFRLElBQUk7QUFFbkIsUUFBTSxzQkFBMEIsNEJBQWMsR0FBRyxRQUFRLElBQUksTUFBTSxFQUFFO0FBQ3JFLFFBQU0sb0JBQXdCLDRCQUFjLEdBQUcsTUFBTSxJQUFJLElBQUksRUFBRTtBQUUvRCxRQUFNLFNBQW1CO0FBQUEseUJBQ0YsZUFBZSxpQkFBaUIsYUFBYTtBQUFBO0FBQUE7QUFJcEUsU0FBTyxTQUFTLE1BQU0sTUFBTSxFQUN6QixLQUFLLE1BQU0sSUFBSSxFQUNmLE1BQU0sQ0FBQyxVQUFpQjtBQUN2QixnQ0FBUztBQUFBLE1BQ1A7QUFBQSxNQUNBLFVBQVU7QUFBQSxNQUNWLE9BQU8sd0JBQVc7QUFBQSxJQUNwQixHQUFHLE9BQU8sT0FBTztBQUNqQixXQUFPO0FBQUEsRUFDVCxDQUFDO0FBQ0w7IiwKICAibmFtZXMiOiBbImltcG9ydF91dGlscyJdCn0K
|