@reventlessdev/reventless-local 3.0.0-alpha.298 → 3.0.0-alpha.299

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/package.json +10 -10
  3. package/src/EmitCapabilities.res +3 -3
  4. package/src/LocalPlatformRegistry.res +1 -1
  5. package/src/LocalSeedTarget.res +1 -1
  6. package/src/Platform.res +57 -3
  7. package/src/Platform.res.mjs +61 -6
  8. package/src/ShellConfig.res +11 -1
  9. package/src/ShellConfig.res.mjs +10 -4
  10. package/src/adapter/Auth/Auth_GraphqlContext.res +18 -2
  11. package/src/adapter/Auth/Auth_GraphqlContext.res.mjs +8 -1
  12. package/src/adapter/Auth/UserStore.res +102 -3
  13. package/src/adapter/Auth/UserStore.res.mjs +128 -2
  14. package/src/adapter/CommandGenerator/CommandGeneratorResolvers_GraphQL.res +33 -0
  15. package/src/adapter/CommandGenerator/CommandGeneratorResolvers_GraphQL.res.mjs +26 -0
  16. package/src/adapter/CommandGenerator/InboundTranslationResolvers_GraphQL.res +11 -3
  17. package/src/adapter/CommandGenerator/InboundTranslationResolvers_GraphQL.res.mjs +3 -0
  18. package/src/adapter/DomainGraphQL_Server.res +1 -1
  19. package/src/adapter/GraphQL_CallerError.res +4 -0
  20. package/src/adapter/GraphQL_CallerError.res.mjs +9 -0
  21. package/src/adapter/LocalAnonymousLimit.res +35 -0
  22. package/src/adapter/LocalAnonymousLimit.res.mjs +52 -0
  23. package/src/adapter/LocalCapabilities.res +14 -2
  24. package/src/adapter/LocalCapabilities.res.mjs +21 -5
  25. package/src/adapter/QueryDb/QueryDbResolvers_GraphQL.res +22 -0
  26. package/src/adapter/QueryDb/QueryDbResolvers_GraphQL.res.mjs +7 -0
  27. package/src/components/InboundTranslationSlice_Builder.res +1 -0
  28. package/src/components/InboundTranslationSlice_Builder.res.mjs +4 -1
  29. package/tests/EmitCapabilitiesTest.res +4 -6
  30. package/tests/EmitCapabilitiesTest.res.mjs +1 -2
  31. package/tests/HostShellDistTest.res.mjs +1 -1
  32. package/tests/LocalPlatformRegistryTest.res +3 -5
  33. package/tests/LocalPlatformRegistryTest.res.mjs +2 -4
  34. package/tests/LocalPlatformStartTest.res +2 -2
  35. package/tests/LocalPlatformStartTest.res.mjs +1 -2
  36. package/tests/ShellConfigTest.res.mjs +27 -27
  37. package/tests/adapter/InboundTranslationMutationTest.res +13 -2
  38. package/tests/adapter/InboundTranslationMutationTest.res.mjs +7 -4
  39. package/tests/adapter/LocalAnonymousLimitTest.res +70 -0
  40. package/tests/adapter/LocalAnonymousLimitTest.res.mjs +85 -0
  41. package/tests/adapter/LocalAuthLoginTest.res +2 -2
  42. package/tests/adapter/LocalAuthUserStoreTest.res +88 -0
  43. package/tests/adapter/LocalAuthUserStoreTest.res.mjs +83 -0
  44. package/tests/capability/LocalCapabilitiesTest.res +2 -1
  45. package/tests/capability/LocalCapabilitiesTest.res.mjs +3 -2
  46. package/tests/components/inboundtranslationslice/InboundTranslationCredentialTest.res +136 -0
  47. package/tests/components/inboundtranslationslice/InboundTranslationCredentialTest.res.mjs +183 -0
  48. package/tests/components/inboundtranslationslice/InboundTranslationSliceCallbackTest.res +143 -11
  49. package/tests/components/inboundtranslationslice/InboundTranslationSliceCallbackTest.res.mjs +129 -22
  50. package/tests/components/inboundtranslationslice/InboundTranslationSliceFixtures.res +18 -5
  51. package/tests/components/inboundtranslationslice/InboundTranslationSliceFixtures.res.mjs +12 -3
  52. package/tests/components/inboundtranslationslice/InboundTranslationWebhookTest.res +26 -6
  53. package/tests/components/inboundtranslationslice/InboundTranslationWebhookTest.res.mjs +48 -13
  54. package/tests/plugin/Plugin_Fixtures.res +0 -4
  55. package/tests/plugin/Plugin_Fixtures.res.mjs +13 -33
@@ -30,7 +30,9 @@ let commandSchema = Sury.$schema(s => ({
30
30
  paymentId: s.m(Sury.string)
31
31
  }));
32
32
 
33
- function translate(input) {
33
+ let capabilityNeeds = [];
34
+
35
+ async function translate(input, param, param$1) {
34
36
  let status = input.status;
35
37
  if (status === "completed") {
36
38
  return {
@@ -65,6 +67,7 @@ let PaymentWebhookSpec = {
65
67
  commandSchema: commandSchema,
66
68
  targetName: "ConfirmPayment",
67
69
  externalSystem: undefined,
70
+ capabilityNeeds: capabilityNeeds,
68
71
  endpoint: undefined,
69
72
  translate: translate,
70
73
  authorizationOf: authorizationOf,
@@ -89,6 +92,8 @@ let commandSchema$1 = Sury.union([
89
92
  }))
90
93
  ]);
91
94
 
95
+ let capabilityNeeds$1 = [];
96
+
92
97
  let merchandiser = "Merchandiser";
93
98
 
94
99
  let admin = "Admin";
@@ -110,7 +115,7 @@ function authorizationOf$1(name) {
110
115
  }
111
116
  }
112
117
 
113
- function translate$1(input) {
118
+ async function translate$1(input, param, param$1) {
114
119
  let kind = input.kind;
115
120
  switch (kind) {
116
121
  case "both" :
@@ -161,6 +166,7 @@ let CatalogFeedSpec = {
161
166
  commandSchema: commandSchema$1,
162
167
  targetName: "AddProduct",
163
168
  externalSystem: undefined,
169
+ capabilityNeeds: capabilityNeeds$1,
164
170
  endpoint: undefined,
165
171
  merchandiser: merchandiser,
166
172
  admin: admin,
@@ -181,7 +187,9 @@ let commandSchema$2 = Sury.$schema(s => ({
181
187
  note: s.m(Sury.$nullAsOption(Sury.string))
182
188
  }));
183
189
 
184
- function translate$2(input) {
190
+ let capabilityNeeds$2 = [];
191
+
192
+ async function translate$2(input, param, param$1) {
185
193
  return {
186
194
  TAG: "Ok",
187
195
  _0: [[
@@ -208,6 +216,7 @@ let NoteFeedSpec = {
208
216
  commandSchema: commandSchema$2,
209
217
  targetName: "Annotate",
210
218
  externalSystem: undefined,
219
+ capabilityNeeds: capabilityNeeds$2,
211
220
  endpoint: undefined,
212
221
  translate: translate$2,
213
222
  authorizationOf: authorizationOf$2,
@@ -29,6 +29,7 @@ module FeedSpec = {
29
29
  | "AddProduct" => AllowRoles([merchandiser])
30
30
  | _ => AllowRoles([Reventless.Role.admin])
31
31
  }
32
+ let capabilityNeeds: array<Reventless.CapabilityNeed.t> = []
32
33
  let endpoint = Some({
33
34
  Reventless.InboundTranslationSlice.path: "/feeds/signed/",
34
35
  auth: SignedBody({
@@ -41,7 +42,11 @@ module FeedSpec = {
41
42
  })
42
43
  }
43
44
 
44
- let translateFeed = (input: FeedSpec.externalInput) =>
45
+ let translateFeed = async (
46
+ input: FeedSpec.externalInput,
47
+ ~capabilities as _: Reventless.Capabilities.t,
48
+ ~caller as _: option<Reventless.Identity.t>,
49
+ ) =>
45
50
  switch input.kind {
46
51
  | "product" => Ok([(input.id, FeedSpec.AddProduct({productId: input.id}))])
47
52
  | "category" => Ok([(input.id, FeedSpec.AddCategory({categoryId: input.id}))])
@@ -65,15 +70,18 @@ module OpenSpec = {
65
70
  let externalSystem = None
66
71
  type role = Reventless.Role.name
67
72
  let authorizationOf = (_: string): Reventless.Authorization.rule<role> => AllowAuthenticated
73
+ let capabilityNeeds: array<Reventless.CapabilityNeed.t> = []
68
74
  let endpoint = Some({Reventless.InboundTranslationSlice.path: "open", auth: Open})
69
75
  }
70
76
 
71
77
  module OpenCallback = Callback.Make(
72
78
  OpenSpec,
73
79
  {
74
- let translate = (input: OpenSpec.externalInput) => Ok([
75
- (input.id, OpenSpec.AddProduct({productId: input.id})),
76
- ])
80
+ let translate = async (
81
+ input: OpenSpec.externalInput,
82
+ ~capabilities as _: Reventless.Capabilities.t,
83
+ ~caller as _: option<Reventless.Identity.t>,
84
+ ) => Ok([(input.id, OpenSpec.AddProduct({productId: input.id}))])
77
85
  let moduleUrl = OpenSpec.moduleUrl
78
86
  },
79
87
  )
@@ -86,12 +94,24 @@ let publishJsons: ReventlessInfra.CommandTopic.publishJsons = async cmds =>
86
94
 
87
95
  let feedOps: ReventlessInfra.InboundTranslationSlice.operations = {
88
96
  receive: (input, ~caller=?, ~door=?) =>
89
- FeedCallback.receive(publishJsons, input, ~caller?, ~door?),
97
+ FeedCallback.receive(
98
+ publishJsons,
99
+ input,
100
+ ~capabilities=Reventless.Capabilities.none,
101
+ ~caller?,
102
+ ~door?,
103
+ ),
90
104
  refuse: async (~body, ~errorCode, error) => FeedCallback.refuse(~body, ~errorCode, error),
91
105
  }
92
106
  let openOps: ReventlessInfra.InboundTranslationSlice.operations = {
93
107
  receive: (input, ~caller=?, ~door=?) =>
94
- OpenCallback.receive(publishJsons, input, ~caller?, ~door?),
108
+ OpenCallback.receive(
109
+ publishJsons,
110
+ input,
111
+ ~capabilities=Reventless.Capabilities.none,
112
+ ~caller?,
113
+ ~door?,
114
+ ),
95
115
  refuse: async (~body, ~errorCode, error) => OpenCallback.refuse(~body, ~errorCode, error),
96
116
  }
97
117
 
@@ -9,6 +9,7 @@ import * as Stdlib_JsError from "@rescript/runtime/lib/es6/Stdlib_JsError.js";
9
9
  import * as Role$Reventless from "@reventlessdev/reventless-spec/src/types/Role.res.mjs";
10
10
  import * as DcbTag$Reventless from "@reventlessdev/reventless-spec/src/components/DcbTag.res.mjs";
11
11
  import * as Api$ReventlessInfra from "@reventlessdev/reventless-infra/src/components/Api.res.mjs";
12
+ import * as Capabilities$Reventless from "@reventlessdev/reventless-spec/src/semantic/Capabilities.res.mjs";
12
13
  import * as TestRunner$ReventlessLocal from "../../../src/test/TestRunner.res.mjs";
13
14
  import * as LocalWebhookRegistry$ReventlessLocal from "../../../src/adapter/Webhook/LocalWebhookRegistry.res.mjs";
14
15
  import * as InboundTranslationSlice_Webhook$ReventlessCore from "@reventlessdev/reventless-core/src/components/InboundTranslationSlice/InboundTranslationSlice_Webhook.res.mjs";
@@ -18,6 +19,8 @@ TestRunner$ReventlessLocal.setup();
18
19
 
19
20
  let merchandiser = "Merchandiser";
20
21
 
22
+ let name = "SignedFeed";
23
+
21
24
  let moduleUrl = "signed-feed://spec";
22
25
 
23
26
  let externalInputSchema = Sury.$schema(s => ({
@@ -36,6 +39,8 @@ let commandSchema = Sury.union([
36
39
  }))
37
40
  ]);
38
41
 
42
+ let targetName = "AddProduct";
43
+
39
44
  function authorizationOf(name) {
40
45
  if (name === "AddProduct") {
41
46
  return {
@@ -50,6 +55,8 @@ function authorizationOf(name) {
50
55
  }
51
56
  }
52
57
 
58
+ let capabilityNeeds = [];
59
+
53
60
  let endpoint = {
54
61
  path: "/feeds/signed/",
55
62
  auth: {
@@ -67,18 +74,19 @@ let endpoint = {
67
74
  let traits = [];
68
75
 
69
76
  let FeedSpec = {
70
- name: "SignedFeed",
77
+ name: name,
71
78
  moduleUrl: moduleUrl,
72
79
  externalInputSchema: externalInputSchema,
73
80
  commandSchema: commandSchema,
74
- targetName: "AddProduct",
81
+ targetName: targetName,
75
82
  externalSystem: undefined,
76
83
  authorizationOf: authorizationOf,
84
+ capabilityNeeds: capabilityNeeds,
77
85
  endpoint: endpoint,
78
86
  traits: traits
79
87
  };
80
88
 
81
- function translateFeed(input) {
89
+ async function translateFeed(input, param, param$1) {
82
90
  let kind = input.kind;
83
91
  switch (kind) {
84
92
  case "category" :
@@ -111,11 +119,23 @@ function translateFeed(input) {
111
119
  }
112
120
  }
113
121
 
114
- let FeedCallback = InboundTranslationSlice_Callback$ReventlessCore.Make(FeedSpec)({
122
+ let FeedCallback = InboundTranslationSlice_Callback$ReventlessCore.Make({
123
+ name: name,
124
+ moduleUrl: moduleUrl,
125
+ externalInputSchema: externalInputSchema,
126
+ commandSchema: commandSchema,
127
+ targetName: targetName,
128
+ externalSystem: undefined,
129
+ authorizationOf: authorizationOf,
130
+ endpoint: endpoint,
131
+ capabilityNeeds: capabilityNeeds
132
+ })({
115
133
  translate: translateFeed,
116
134
  moduleUrl: moduleUrl
117
135
  });
118
136
 
137
+ let name$1 = "OpenFeed";
138
+
119
139
  let moduleUrl$1 = "open-feed://spec";
120
140
 
121
141
  let externalInputSchema$1 = Sury.$schema(s => ({
@@ -128,30 +148,35 @@ let commandSchema$1 = Sury.$schema(s => ({
128
148
  productId: s.m(DcbTag$Reventless.string)
129
149
  }));
130
150
 
151
+ let targetName$1 = "AddProduct";
152
+
131
153
  function authorizationOf$1(param) {
132
154
  return "AllowAuthenticated";
133
155
  }
134
156
 
135
- let traits$1 = [];
157
+ let capabilityNeeds$1 = [];
136
158
 
137
- let OpenSpec_endpoint = {
159
+ let endpoint$1 = {
138
160
  path: "open",
139
161
  auth: "Open"
140
162
  };
141
163
 
164
+ let traits$1 = [];
165
+
142
166
  let OpenSpec = {
143
- name: "OpenFeed",
167
+ name: name$1,
144
168
  moduleUrl: moduleUrl$1,
145
169
  externalInputSchema: externalInputSchema$1,
146
170
  commandSchema: commandSchema$1,
147
- targetName: "AddProduct",
171
+ targetName: targetName$1,
148
172
  externalSystem: undefined,
149
173
  authorizationOf: authorizationOf$1,
150
- endpoint: OpenSpec_endpoint,
174
+ capabilityNeeds: capabilityNeeds$1,
175
+ endpoint: endpoint$1,
151
176
  traits: traits$1
152
177
  };
153
178
 
154
- function translate(input) {
179
+ async function translate(input, param, param$1) {
155
180
  return {
156
181
  TAG: "Ok",
157
182
  _0: [[
@@ -164,7 +189,17 @@ function translate(input) {
164
189
  };
165
190
  }
166
191
 
167
- let OpenCallback = InboundTranslationSlice_Callback$ReventlessCore.Make(OpenSpec)({
192
+ let OpenCallback = InboundTranslationSlice_Callback$ReventlessCore.Make({
193
+ name: name$1,
194
+ moduleUrl: moduleUrl$1,
195
+ externalInputSchema: externalInputSchema$1,
196
+ commandSchema: commandSchema$1,
197
+ targetName: targetName$1,
198
+ externalSystem: undefined,
199
+ authorizationOf: authorizationOf$1,
200
+ endpoint: endpoint$1,
201
+ capabilityNeeds: capabilityNeeds$1
202
+ })({
168
203
  translate: translate,
169
204
  moduleUrl: moduleUrl$1
170
205
  });
@@ -182,7 +217,7 @@ async function publishJsons(cmds) {
182
217
  }
183
218
 
184
219
  function feedOps_receive(input, caller, door) {
185
- return FeedCallback.receive(publishJsons, input, caller, door);
220
+ return FeedCallback.receive(publishJsons, input, Capabilities$Reventless.none, caller, door);
186
221
  }
187
222
 
188
223
  async function feedOps_refuse(body, errorCode, error) {
@@ -195,7 +230,7 @@ let feedOps = {
195
230
  };
196
231
 
197
232
  function openOps_receive(input, caller, door) {
198
- return OpenCallback.receive(publishJsons, input, caller, door);
233
+ return OpenCallback.receive(publishJsons, input, Capabilities$Reventless.none, caller, door);
199
234
  }
200
235
 
201
236
  async function openOps_refuse(body, errorCode, error) {
@@ -13,9 +13,7 @@ let pluginDefinition: Reventless.Plugin.pluginDefinition = {
13
13
  eventCollector: "eventCollector",
14
14
  extensionProtocols: [],
15
15
  apiSchemaFragment: None,
16
- apiTarget: None,
17
16
  structure: None,
18
- dcbEventLog: None,
19
17
  kind: Domain,
20
18
  }
21
19
 
@@ -55,8 +53,6 @@ let pluginDefinition2 = {
55
53
  eventCollector: "eventCollector",
56
54
  extensionProtocols: [],
57
55
  apiSchemaFragment: None,
58
- apiTarget: None,
59
56
  structure: None,
60
- dcbEventLog: None,
61
57
  kind: Domain,
62
58
  }
@@ -16,41 +16,19 @@ let pluginDefinition = {
16
16
  eventCollector: "eventCollector",
17
17
  extensionProtocols: [],
18
18
  apiSchemaFragment: undefined,
19
- apiTarget: undefined,
20
19
  structure: undefined,
21
- dcbEventLog: undefined,
22
20
  kind: "Domain"
23
21
  };
24
22
 
25
- let pluginDefinitionV2 = {
26
- id: "name@2",
27
- name: pluginDefinition.name,
28
- version: "2",
29
- extensionPoints: pluginDefinition.extensionPoints,
30
- extensions: pluginDefinition.extensions,
31
- eventCollector: pluginDefinition.eventCollector,
32
- extensionProtocols: pluginDefinition.extensionProtocols,
33
- apiSchemaFragment: pluginDefinition.apiSchemaFragment,
34
- apiTarget: pluginDefinition.apiTarget,
35
- structure: pluginDefinition.structure,
36
- dcbEventLog: pluginDefinition.dcbEventLog,
37
- kind: pluginDefinition.kind
38
- };
23
+ let newrecord = {...pluginDefinition};
39
24
 
40
- let pluginDefinitionInfra = {
41
- id: pluginDefinition.id,
42
- name: pluginDefinition.name,
43
- version: pluginDefinition.version,
44
- extensionPoints: pluginDefinition.extensionPoints,
45
- extensions: pluginDefinition.extensions,
46
- eventCollector: pluginDefinition.eventCollector,
47
- extensionProtocols: pluginDefinition.extensionProtocols,
48
- apiSchemaFragment: pluginDefinition.apiSchemaFragment,
49
- apiTarget: pluginDefinition.apiTarget,
50
- structure: pluginDefinition.structure,
51
- dcbEventLog: pluginDefinition.dcbEventLog,
52
- kind: "PlatformInfrastructure"
53
- };
25
+ newrecord.version = "2";
26
+
27
+ newrecord.id = "name@2";
28
+
29
+ let newrecord$1 = {...pluginDefinition};
30
+
31
+ newrecord$1.kind = "PlatformInfrastructure";
54
32
 
55
33
  function display(def, status, otherConnectedVersions) {
56
34
  return PluginsProjection$ReventlessCore.displayState(def, status, TestFixtures$ReventlessGwt.statusChange, otherConnectedVersions);
@@ -83,14 +61,16 @@ let pluginDefinition2 = {
83
61
  eventCollector: "eventCollector",
84
62
  extensionProtocols: [],
85
63
  apiSchemaFragment: undefined,
86
- apiTarget: undefined,
87
64
  structure: undefined,
88
- dcbEventLog: undefined,
89
65
  kind: "Domain"
90
66
  };
91
67
 
92
68
  let sc = TestFixtures$ReventlessGwt.statusChange;
93
69
 
70
+ let pluginDefinitionV2 = newrecord;
71
+
72
+ let pluginDefinitionInfra = newrecord$1;
73
+
94
74
  export {
95
75
  sc,
96
76
  pluginDefinition,
@@ -102,4 +82,4 @@ export {
102
82
  extensionPointNames2,
103
83
  pluginDefinition2,
104
84
  }
105
- /* state Not a pure module */
85
+ /* Not a pure module */