@reventlessdev/reventless-aws 3.0.0-alpha.198 → 3.0.0-alpha.199

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/CHANGELOG.md CHANGED
@@ -3,6 +3,13 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # 3.0.0-alpha.199 (2026-07-12)
7
+
8
+ ### Bug Fixes
9
+
10
+ * **deploy:** gate admin status-query resolvers on the schema push ([2634694](https://github.com/ReventlessDev/reventless-core/commit/2634694b3a122bc1db44d129769f5442e124d9b7))
11
+
12
+
6
13
  # 3.0.0-alpha.198 (2026-07-12)
7
14
 
8
15
  ### Features
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reventlessdev/reventless-aws",
3
- "version": "3.0.0-alpha.198",
3
+ "version": "3.0.0-alpha.199",
4
4
  "description": "AWS adapters for Reventless",
5
5
  "license": "Apache-2.0",
6
6
  "dependencies": {
@@ -8,17 +8,17 @@
8
8
  "@aws-sdk/client-cloudfront": "3.970.0",
9
9
  "sury": "11.0.0-alpha.4",
10
10
  "uuid": "^13.0.0",
11
+ "@reventlessdev/rescript-jest": "1.0.0-alpha.7",
12
+ "@reventlessdev/rescript-effect": "0.1.0-alpha.27",
11
13
  "@reventlessdev/rescript-aws-sdk": "2.2.0-alpha.21",
12
14
  "@reventlessdev/rescript-pulumi-aws": "2.4.0-alpha.50",
13
- "@reventlessdev/rescript-jest": "1.0.0-alpha.7",
14
15
  "@reventlessdev/rescript-pulumi-pulumi": "2.3.0-alpha.15",
15
- "@reventlessdev/rescript-effect": "0.1.0-alpha.27",
16
- "@reventlessdev/reventless-core": "3.0.0-alpha.157",
16
+ "@reventlessdev/reventless-core": "3.0.0-alpha.158",
17
17
  "@reventlessdev/rescript-uuid": "1.1.0-alpha.15",
18
18
  "@reventlessdev/reventless-infra": "3.0.0-alpha.98",
19
- "@reventlessdev/reventless-postgres": "3.0.0-alpha.21",
20
19
  "@reventlessdev/reventless-interop": "3.0.0-alpha.26",
21
- "@reventlessdev/reventless-spec": "3.0.0-alpha.76"
20
+ "@reventlessdev/reventless-spec": "3.0.0-alpha.76",
21
+ "@reventlessdev/reventless-postgres": "3.0.0-alpha.22"
22
22
  },
23
23
  "devDependencies": {
24
24
  "rescript": "^12.3.0",
package/src/Platform.res CHANGED
@@ -1691,6 +1691,7 @@ module MakeWithConfig = (
1691
1691
  Platform_UIFragments_Lambda.make(
1692
1692
  ~api=platformApi,
1693
1693
  ~uiFragmentRegistryTableName=r.name,
1694
+ ~schemaReady=admin.adminSchemaPushed,
1694
1695
  ~opts={},
1695
1696
  )
1696
1697
  | None => ()
@@ -1709,6 +1710,7 @@ module MakeWithConfig = (
1709
1710
  Platform_ApiFragments_Lambda.make(
1710
1711
  ~api=platformApi,
1711
1712
  ~apiFragmentRegistryTableName=r.name,
1713
+ ~schemaReady=admin.adminSchemaPushed,
1712
1714
  ~opts={},
1713
1715
  )
1714
1716
  | None => ()
@@ -2014,6 +2016,7 @@ module MakeWithConfig = (
2014
2016
  Platform_UIFragments_Lambda.make(
2015
2017
  ~api=platformApi,
2016
2018
  ~uiFragmentRegistryTableName=r.name,
2019
+ ~schemaReady=admin.adminSchemaPushed,
2017
2020
  ~opts={},
2018
2021
  )
2019
2022
  | None => ()
@@ -2032,6 +2035,7 @@ module MakeWithConfig = (
2032
2035
  Platform_ApiFragments_Lambda.make(
2033
2036
  ~api=platformApi,
2034
2037
  ~apiFragmentRegistryTableName=r.name,
2038
+ ~schemaReady=admin.adminSchemaPushed,
2035
2039
  ~opts={},
2036
2040
  )
2037
2041
  | None => ()
@@ -1134,14 +1134,14 @@ function MakeWithConfig(Config) {
1134
1134
  if (rm !== undefined) {
1135
1135
  let r$1 = rm.queryDb.resources[0];
1136
1136
  if (r$1 !== undefined) {
1137
- Platform_UIFragments_Lambda$ReventlessAws.make(platformApi, r$1.name, {});
1137
+ Platform_UIFragments_Lambda$ReventlessAws.make(platformApi, r$1.name, admin.adminSchemaPushed, {});
1138
1138
  }
1139
1139
  }
1140
1140
  let rm$1 = admin.stateViewSlicesOutputs["ApiFragments"];
1141
1141
  if (rm$1 !== undefined) {
1142
1142
  let r$2 = rm$1.queryDb.resources[0];
1143
1143
  if (r$2 !== undefined) {
1144
- Platform_ApiFragments_Lambda$ReventlessAws.make(platformApi, r$2.name, {});
1144
+ Platform_ApiFragments_Lambda$ReventlessAws.make(platformApi, r$2.name, admin.adminSchemaPushed, {});
1145
1145
  }
1146
1146
  }
1147
1147
  let pluginComponents = plugins.map(plugin => plugin.make());
@@ -1274,14 +1274,14 @@ function MakeWithConfig(Config) {
1274
1274
  if (rm !== undefined) {
1275
1275
  let r$1 = rm.queryDb.resources[0];
1276
1276
  if (r$1 !== undefined) {
1277
- Platform_UIFragments_Lambda$ReventlessAws.make(platformApi, r$1.name, {});
1277
+ Platform_UIFragments_Lambda$ReventlessAws.make(platformApi, r$1.name, admin.adminSchemaPushed, {});
1278
1278
  }
1279
1279
  }
1280
1280
  let rm$1 = admin.stateViewSlicesOutputs["ApiFragments"];
1281
1281
  if (rm$1 !== undefined) {
1282
1282
  let r$2 = rm$1.queryDb.resources[0];
1283
1283
  if (r$2 !== undefined) {
1284
- Platform_ApiFragments_Lambda$ReventlessAws.make(platformApi, r$2.name, {});
1284
+ Platform_ApiFragments_Lambda$ReventlessAws.make(platformApi, r$2.name, admin.adminSchemaPushed, {});
1285
1285
  }
1286
1286
  }
1287
1287
  if (Config.splitApi) {
@@ -2510,14 +2510,14 @@ function Make($star) {
2510
2510
  if (rm !== undefined) {
2511
2511
  let r$1 = rm.queryDb.resources[0];
2512
2512
  if (r$1 !== undefined) {
2513
- Platform_UIFragments_Lambda$ReventlessAws.make(platformApi, r$1.name, {});
2513
+ Platform_UIFragments_Lambda$ReventlessAws.make(platformApi, r$1.name, admin.adminSchemaPushed, {});
2514
2514
  }
2515
2515
  }
2516
2516
  let rm$1 = admin.stateViewSlicesOutputs["ApiFragments"];
2517
2517
  if (rm$1 !== undefined) {
2518
2518
  let r$2 = rm$1.queryDb.resources[0];
2519
2519
  if (r$2 !== undefined) {
2520
- Platform_ApiFragments_Lambda$ReventlessAws.make(platformApi, r$2.name, {});
2520
+ Platform_ApiFragments_Lambda$ReventlessAws.make(platformApi, r$2.name, admin.adminSchemaPushed, {});
2521
2521
  }
2522
2522
  }
2523
2523
  let pluginComponents = plugins.map(plugin => plugin.make());
@@ -2638,14 +2638,14 @@ function Make($star) {
2638
2638
  if (rm !== undefined) {
2639
2639
  let r$1 = rm.queryDb.resources[0];
2640
2640
  if (r$1 !== undefined) {
2641
- Platform_UIFragments_Lambda$ReventlessAws.make(platformApi, r$1.name, {});
2641
+ Platform_UIFragments_Lambda$ReventlessAws.make(platformApi, r$1.name, admin.adminSchemaPushed, {});
2642
2642
  }
2643
2643
  }
2644
2644
  let rm$1 = admin.stateViewSlicesOutputs["ApiFragments"];
2645
2645
  if (rm$1 !== undefined) {
2646
2646
  let r$2 = rm$1.queryDb.resources[0];
2647
2647
  if (r$2 !== undefined) {
2648
- Platform_ApiFragments_Lambda$ReventlessAws.make(platformApi, r$2.name, {});
2648
+ Platform_ApiFragments_Lambda$ReventlessAws.make(platformApi, r$2.name, admin.adminSchemaPushed, {});
2649
2649
  }
2650
2650
  }
2651
2651
  Pulumi$Pulumi.$$export("platformApiId", Output$Pulumi.flatMap(platformApi, api => api.id));
@@ -67,6 +67,10 @@ export function response(ctx) {
67
67
  let make = (
68
68
  ~api: Pulumi.Output.t<AppSync.GraphQLApi.t>,
69
69
  ~apiFragmentRegistryTableName: Pulumi.Output.t<string>,
70
+ // Resolves when the admin-base schema push has completed and the API is ACTIVE
71
+ // (Platform_Admin.adminSchemaPushed). CreateResolver is gated on it so it never
72
+ // races StartSchemaCreation on this first-ever-deployed field.
73
+ ~schemaReady: Pulumi.Output.t<unit>,
70
74
  ~opts: Pulumi.ComponentResource.options,
71
75
  ) => {
72
76
  let opts = opts->ReventlessCore.Util.Pulumi.ComponentResourceOptions.toCustomResourceOptions
@@ -200,13 +204,19 @@ let make = (
200
204
  ~opts=Some(opts),
201
205
  )
202
206
 
203
- let _resolver = AppSync_Resolver_Native.makeUnitJsResolver(
204
- ~name=name ++ "Resolver",
205
- ~api,
206
- ~dataSourceName=dataSource.name->Pulumi.Output.asInput,
207
- ~type_="Query"->Pulumi.Input.make,
208
- ~field="Platform_ApiFragments"->Pulumi.Input.make,
209
- ~code=resolverCode,
210
- ~opts,
211
- )
207
+ // Create the resolver only after the admin schema push is ACTIVE — otherwise
208
+ // CreateResolver races StartSchemaCreation and fails with "No field named
209
+ // Platform_ApiFragments found on type Query" the first time this field ships.
210
+ let _resolver =
211
+ schemaReady->Pulumi.Output.apply(() =>
212
+ AppSync_Resolver_Native.makeUnitJsResolver(
213
+ ~name=name ++ "Resolver",
214
+ ~api,
215
+ ~dataSourceName=dataSource.name->Pulumi.Output.asInput,
216
+ ~type_="Query"->Pulumi.Input.make,
217
+ ~field="Platform_ApiFragments"->Pulumi.Input.make,
218
+ ~code=resolverCode,
219
+ ~opts,
220
+ )
221
+ )
212
222
  }
@@ -68,7 +68,7 @@ export function response(ctx) {
68
68
  }
69
69
  `;
70
70
 
71
- function make(api, apiFragmentRegistryTableName, opts) {
71
+ function make(api, apiFragmentRegistryTableName, schemaReady, opts) {
72
72
  let opts$1 = Util_Pulumi$ReventlessCore.ComponentResourceOptions.toCustomResourceOptions(opts);
73
73
  let name = "PlatformApiFragments";
74
74
  let lambdaRole = IAM$PulumiAws.Role.makeWithDefaultPolicy(name + "Lambda", Pulumi.output(AWS$ReventlessAws.Lambda.principal), opts$1);
@@ -191,7 +191,7 @@ export async function handler() {
191
191
  },
192
192
  serviceRoleArn: dataSourceRole.arn
193
193
  }, opts$1);
194
- AppSync_Resolver_Native$ReventlessAws.makeUnitJsResolver(name + "Resolver", api, dataSource.name, "Query", "Platform_ApiFragments", resolverCode, opts$1);
194
+ schemaReady.apply(() => AppSync_Resolver_Native$ReventlessAws.makeUnitJsResolver(name + "Resolver", api, dataSource.name, "Query", "Platform_ApiFragments", resolverCode, opts$1));
195
195
  }
196
196
 
197
197
  export {
@@ -90,6 +90,11 @@ export function response(ctx) {
90
90
  let make = (
91
91
  ~api: Pulumi.Output.t<AppSync.GraphQLApi.t>,
92
92
  ~uiFragmentRegistryTableName: Pulumi.Output.t<string>,
93
+ // Resolves when the admin-base schema push has completed and the API is ACTIVE
94
+ // (Platform_Admin.adminSchemaPushed). CreateResolver is gated on it so it never
95
+ // races StartSchemaCreation — the same first-deploy race that clobbered
96
+ // Platform_ApiFragments; harmless here today only because the field predates it.
97
+ ~schemaReady: Pulumi.Output.t<unit>,
93
98
  ~opts: Pulumi.ComponentResource.options,
94
99
  ) => {
95
100
  let opts = opts->ReventlessCore.Util.Pulumi.ComponentResourceOptions.toCustomResourceOptions
@@ -223,13 +228,18 @@ let make = (
223
228
  ~opts=Some(opts),
224
229
  )
225
230
 
226
- let _resolver = AppSync_Resolver_Native.makeUnitJsResolver(
227
- ~name=name ++ "Resolver",
228
- ~api,
229
- ~dataSourceName=dataSource.name->Pulumi.Output.asInput,
230
- ~type_="Query"->Pulumi.Input.make,
231
- ~field="Platform_UIFragments"->Pulumi.Input.make,
232
- ~code=resolverCode,
233
- ~opts,
234
- )
231
+ // Create the resolver only after the admin schema push is ACTIVE — otherwise
232
+ // CreateResolver races StartSchemaCreation the first time this field ships.
233
+ let _resolver =
234
+ schemaReady->Pulumi.Output.apply(() =>
235
+ AppSync_Resolver_Native.makeUnitJsResolver(
236
+ ~name=name ++ "Resolver",
237
+ ~api,
238
+ ~dataSourceName=dataSource.name->Pulumi.Output.asInput,
239
+ ~type_="Query"->Pulumi.Input.make,
240
+ ~field="Platform_UIFragments"->Pulumi.Input.make,
241
+ ~code=resolverCode,
242
+ ~opts,
243
+ )
244
+ )
235
245
  }
@@ -94,7 +94,7 @@ export function response(ctx) {
94
94
  }
95
95
  `;
96
96
 
97
- function make(api, uiFragmentRegistryTableName, opts) {
97
+ function make(api, uiFragmentRegistryTableName, schemaReady, opts) {
98
98
  let opts$1 = Util_Pulumi$ReventlessCore.ComponentResourceOptions.toCustomResourceOptions(opts);
99
99
  let name = "PlatformUIFragments";
100
100
  let lambdaRole = IAM$PulumiAws.Role.makeWithDefaultPolicy(name + "Lambda", Pulumi.output(AWS$ReventlessAws.Lambda.principal), opts$1);
@@ -243,7 +243,7 @@ export async function handler() {
243
243
  },
244
244
  serviceRoleArn: dataSourceRole.arn
245
245
  }, opts$1);
246
- AppSync_Resolver_Native$ReventlessAws.makeUnitJsResolver(name + "Resolver", api, dataSource.name, "Query", "Platform_UIFragments", resolverCode, opts$1);
246
+ schemaReady.apply(() => AppSync_Resolver_Native$ReventlessAws.makeUnitJsResolver(name + "Resolver", api, dataSource.name, "Query", "Platform_UIFragments", resolverCode, opts$1));
247
247
  }
248
248
 
249
249
  export {