@suss/contract-appsync 0.33.0 → 0.34.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 +18 -18
- package/dist/index.cjs +9 -18
- package/dist/index.d.cts +25 -11
- package/dist/index.d.ts +25 -11
- package/dist/index.js +9 -18
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
# @suss/contract-appsync
|
|
2
2
|
|
|
3
|
-
Part of [suss](https://github.com/nimbuscloud-ai/suss), which reads both sides of every call in a repository and
|
|
3
|
+
Part of [suss](https://github.com/nimbuscloud-ai/suss), which reads both sides of every call in a repository and reports where the two disagree.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
This package builds suss `BehavioralSummary[]` from an [AWS AppSync](https://docs.aws.amazon.com/appsync/) API declared in a CloudFormation or [SAM](https://aws.amazon.com/serverless/sam/) template. AppSync is schema-first: you write the SDL by hand, and the template binds each `(TypeName, FieldName)` pair to a data source. This reader turns that wiring into resolver summaries you can check consumers against, without deploying the stack or exporting anything from AWS.
|
|
6
6
|
|
|
7
7
|
## What this package reads
|
|
8
8
|
|
|
9
|
-
`@suss/contract-appsync` walks the template's `Resources` map and covers both ways an AppSync API
|
|
9
|
+
`@suss/contract-appsync` walks the template's `Resources` map, and covers both ways of writing an AppSync API:
|
|
10
10
|
|
|
11
|
-
- **Raw resources**: `AWS::AppSync::GraphQLApi`, `AWS::AppSync::GraphQLSchema`, `AWS::AppSync::Resolver`, `AWS::AppSync::FunctionConfiguration
|
|
12
|
-
- **The SAM shorthand** `AWS::Serverless::GraphQLApi
|
|
11
|
+
- **Raw resources**: `AWS::AppSync::GraphQLApi`, `AWS::AppSync::GraphQLSchema`, `AWS::AppSync::Resolver`, `AWS::AppSync::FunctionConfiguration` and `AWS::AppSync::DataSource`.
|
|
12
|
+
- **The SAM shorthand** `AWS::Serverless::GraphQLApi`. Its inline `SchemaInline` / `SchemaUri`, `DataSources`, `Functions` and `Resolvers` blocks are converted into the same model before any summary is built. Generated logical ids are prefixed with the API's logical id, so two GraphQL APIs in one template stay apart.
|
|
13
13
|
|
|
14
|
-
The SDL comes from the inline `Definition` / `SchemaInline` property, or from a local file when `DefinitionS3Location` / `SchemaUri` is a path
|
|
14
|
+
The SDL comes from the inline `Definition` / `SchemaInline` property, or from a local file when `DefinitionS3Location` / `SchemaUri` is a path, resolved against the template's directory. A static reader cannot fetch an `s3://` or `http(s)://` URI, or a location the template computes with an intrinsic. Both cases are recorded under `metadata.appsync.schemaSource` with a `status` of `"unresolved"` and a reason, so a schema the reader could not open is always reported.
|
|
15
15
|
|
|
16
16
|
## What it produces
|
|
17
17
|
|
|
@@ -19,23 +19,23 @@ One `resolver`-kind summary per resolver, plus one `library`-kind summary per AP
|
|
|
19
19
|
|
|
20
20
|
Each resolver summary has:
|
|
21
21
|
|
|
22
|
-
- `identity.name`: `Type.field`, and a `graphql-resolver` boundary binding with `transport: "aws-https"`, `recognition: "appsync"`,
|
|
22
|
+
- `identity.name`: `Type.field`, and a `graphql-resolver` boundary binding with `transport: "aws-https"`, `recognition: "appsync"`, and the type and field names. It pairs with resolvers that the Apollo and NestJS packs extract from code, and with clients that use the same field.
|
|
23
23
|
- Inputs from the SDL field's arguments, each with `role: "args"` and the argument's type converted to a suss `TypeShape`.
|
|
24
|
-
- Two transitions: a default success
|
|
25
|
-
- `metadata.appsync`: the API's logical id and name, the data source's logical id, the Lambda function behind that data source, the resolver kind (`UNIT` or `PIPELINE`), the authentication type
|
|
24
|
+
- Two transitions: a default success that returns the field's declared shape, and a generic throw for the GraphQL `errors[]` path.
|
|
25
|
+
- `metadata.appsync`: the API's logical id and name, the data source's logical id, the Lambda function behind that data source, the resolver kind (`UNIT` or `PIPELINE`), and the authentication type. For SAM resolvers written as JS or VTL it also has the `CodeUri` and runtime. It records whether the schema declared the field (`schemaMatched`), and for pipeline resolvers, the ordered chain of functions, with each step's own data source and Lambda.
|
|
26
26
|
|
|
27
|
-
A resolver whose field the SDL never declares still gets a summary. AppSync rejects that stack at deploy time,
|
|
27
|
+
A resolver whose field the SDL never declares still gets a summary. AppSync rejects that stack at deploy time, so reporting the boundary helps more than dropping it. Its success transition returns `unknown`, and `schemaMatched` is `false`.
|
|
28
28
|
|
|
29
|
-
The `library` summary
|
|
29
|
+
The `library` summary contains the SDL itself. Type definitions belong to the schema as a whole, so each resolver points at that document through a source-document label. The checker follows the label to resolve a consumer's nested selections against the resolver's return type. The `library` summary does not bind to a boundary, so pairing records it as taking no part.
|
|
30
30
|
|
|
31
|
-
Data source types are normalized from `AWS_LAMBDA`, `AMAZON_DYNAMODB`, `AMAZON_ELASTICSEARCH`, `AMAZON_OPENSEARCH_SERVICE`, `HTTP`, `RELATIONAL_DATABASE`, `AMAZON_EVENTBRIDGE
|
|
31
|
+
Data source types are normalized from `AWS_LAMBDA`, `AMAZON_DYNAMODB`, `AMAZON_ELASTICSEARCH`, `AMAZON_OPENSEARCH_SERVICE`, `HTTP`, `RELATIONAL_DATABASE`, `AMAZON_EVENTBRIDGE` and `NONE`. Anything else comes back as `"unknown"`.
|
|
32
32
|
|
|
33
33
|
## What it does not read
|
|
34
34
|
|
|
35
|
-
- **Resolver code.** A SAM resolver's `CodeUri` and runtime are recorded,
|
|
36
|
-
- **Dynamic intrinsics.** A resolver whose `TypeName` or `FieldName` comes from a `!Ref` or an `Fn::Join` is skipped
|
|
35
|
+
- **Resolver code.** A SAM resolver's `CodeUri` and runtime are recorded, but the file behind them is never opened. VTL request and response mapping templates on raw `AWS::AppSync::Resolver` resources are ignored.
|
|
36
|
+
- **Dynamic intrinsics.** A resolver whose `TypeName` or `FieldName` comes from a `!Ref` or an `Fn::Join` is skipped, so the reader never guesses. A pipeline whose `Functions` array cannot be resolved statically still reports `kind: "PIPELINE"`, with an empty chain.
|
|
37
37
|
- **Remote schemas.** Nothing is fetched over the network.
|
|
38
|
-
- **Authorization.** The API's `AuthenticationType` is recorded on each resolver and does not
|
|
38
|
+
- **Authorization.** The API's `AuthenticationType` is recorded on each resolver, and does not add transitions.
|
|
39
39
|
- **Nested stacks.** Only the template you point at is walked.
|
|
40
40
|
|
|
41
41
|
## Worked example
|
|
@@ -67,9 +67,9 @@ Resources:
|
|
|
67
67
|
suss contract --from appsync template.yaml -o summaries/appsync.json
|
|
68
68
|
```
|
|
69
69
|
|
|
70
|
-
That
|
|
70
|
+
That produces a `Query.order` resolver summary with one `id` input of type `ID` and a success transition that returns a `ref` to `Order`. The SDL goes in the API's schema document summary.
|
|
71
71
|
|
|
72
|
-
|
|
72
|
+
If you already have the template in memory, such as a CDK `Template.fromStack` or JSON from a build tool, call it from code:
|
|
73
73
|
|
|
74
74
|
```ts
|
|
75
75
|
import { appsyncToSummaries } from "@suss/contract-appsync";
|
|
@@ -79,7 +79,7 @@ const summaries = appsyncToSummaries(template, { baseDir: "infra" });
|
|
|
79
79
|
|
|
80
80
|
## Where it fits in suss
|
|
81
81
|
|
|
82
|
-
|
|
82
|
+
The package depends on `@suss/behavioral-ir` for the IR types it produces, `@suss/contract-graphql` for SDL parsing, type conversion and loading an external schema file, `@suss/manifest-aws` for loading templates (including CloudFormation's YAML shorthand for intrinsics), and `graphql`. It does not extract from source code and does not use the language adapters.
|
|
83
83
|
|
|
84
84
|
## More
|
|
85
85
|
|
package/dist/index.cjs
CHANGED
|
@@ -393,8 +393,8 @@ function parseSchema(sdl) {
|
|
|
393
393
|
return index;
|
|
394
394
|
}
|
|
395
395
|
for (const def of doc.definitions) {
|
|
396
|
-
if (def.kind !== import_graphql.Kind.OBJECT_TYPE_DEFINITION && def.kind !== import_graphql.Kind.OBJECT_TYPE_EXTENSION && def.kind !== import_graphql.Kind.INTERFACE_TYPE_DEFINITION && //
|
|
397
|
-
//
|
|
396
|
+
if (def.kind !== import_graphql.Kind.OBJECT_TYPE_DEFINITION && def.kind !== import_graphql.Kind.OBJECT_TYPE_EXTENSION && def.kind !== import_graphql.Kind.INTERFACE_TYPE_DEFINITION && // `extend interface` splits an interface the same way `extend type`
|
|
397
|
+
// splits a type.
|
|
398
398
|
def.kind !== import_graphql.Kind.INTERFACE_TYPE_EXTENSION) {
|
|
399
399
|
continue;
|
|
400
400
|
}
|
|
@@ -570,10 +570,7 @@ function buildOne(resolver, indexes, resolvedByApi, schemasByApi, sourceFile) {
|
|
|
570
570
|
name: ownerKey,
|
|
571
571
|
exportPath: null,
|
|
572
572
|
boundaryBinding: (0, import_behavioral_ir.graphqlResolverBinding)({
|
|
573
|
-
//
|
|
574
|
-
// explicit here matches the aws-apigateway reader's posture
|
|
575
|
-
// and leaves room for a future AWS-SDK-direct transport
|
|
576
|
-
// ("aws-sdk") once Lambda-invoke semantics land.
|
|
573
|
+
// Clients reach AppSync over HTTPS to an AWS endpoint.
|
|
577
574
|
transport: "aws-https",
|
|
578
575
|
recognition: "appsync",
|
|
579
576
|
typeName: resolver.typeName,
|
|
@@ -611,28 +608,22 @@ function buildAppsyncMetadata(resolver, api, resolved, field, indexes) {
|
|
|
611
608
|
apiLogicalId: resolver.apiLogicalId,
|
|
612
609
|
apiName: api?.name ?? null,
|
|
613
610
|
dataSourceLogicalId: resolver.dataSourceLogicalId,
|
|
614
|
-
//
|
|
615
|
-
//
|
|
616
|
-
// data source is null, so this is null too.
|
|
611
|
+
// Only a UNIT resolver has its own data source. A pipeline records
|
|
612
|
+
// the Lambda behind each of its functions instead.
|
|
617
613
|
lambdaFunctionLogicalId: lambdaBehind(
|
|
618
614
|
resolver.dataSourceLogicalId,
|
|
619
615
|
indexes
|
|
620
616
|
),
|
|
621
617
|
kind: resolver.kind,
|
|
622
618
|
authenticationType: api?.authenticationType ?? null,
|
|
623
|
-
// SAM JS/VTL resolver code location + runtime (null for raw
|
|
624
|
-
// AWS::AppSync::Resolver resources).
|
|
625
619
|
codeUri: resolver.codeUri,
|
|
626
620
|
runtime: resolver.runtime,
|
|
627
|
-
//
|
|
628
|
-
//
|
|
629
|
-
// (source-level) so a genuinely-remote schema is never silent.
|
|
621
|
+
// Keeps a field the SDL does not declare apart from a schema that was
|
|
622
|
+
// never read, such as a remote one.
|
|
630
623
|
schemaMatched: field !== null,
|
|
631
624
|
schemaSource: schemaSourceMetadata(resolved),
|
|
632
|
-
//
|
|
633
|
-
//
|
|
634
|
-
// resolvers; empty with `kind: "PIPELINE"` means the Functions
|
|
635
|
-
// array was dynamically-referenced and we couldn't resolve it.
|
|
625
|
+
// Left out for a UNIT resolver, and for a pipeline whose Functions
|
|
626
|
+
// list cannot be read statically.
|
|
636
627
|
...pipelineFunctions.length > 0 ? { pipelineFunctions } : {}
|
|
637
628
|
};
|
|
638
629
|
}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import { BehavioralSummary } from '@suss/behavioral-ir';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Reads the raw AWS::AppSync resources in a template and adds what the
|
|
5
|
+
* SAM AWS::Serverless::GraphQLApi reader finds, so both ways of writing
|
|
6
|
+
* an API reach the summary builder as one model.
|
|
7
|
+
*
|
|
8
|
+
* A value written with a dynamic intrinsic, such as `!Ref` to a
|
|
9
|
+
* parameter, is left unresolved and reported. The reader never guesses it.
|
|
10
|
+
*/
|
|
3
11
|
interface CfnTemplate {
|
|
4
12
|
Resources?: Record<string, CfnResource | undefined>;
|
|
5
13
|
}
|
|
@@ -8,27 +16,33 @@ interface CfnResource {
|
|
|
8
16
|
Properties?: Record<string, unknown>;
|
|
9
17
|
}
|
|
10
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Reads an AWS AppSync API from a CloudFormation or SAM template and
|
|
21
|
+
* writes one resolver summary per resolver. Each is keyed by type and
|
|
22
|
+
* field name, the same way as a resolver found in code, so the two pair
|
|
23
|
+
* directly. The Lambda behind each data source is recorded so the
|
|
24
|
+
* summary can later be matched to handler code.
|
|
25
|
+
*
|
|
26
|
+
* The README lists the resources and schema sources this reads.
|
|
27
|
+
*/
|
|
28
|
+
|
|
11
29
|
interface AppsyncToSummariesOptions {
|
|
12
|
-
/**
|
|
30
|
+
/** Path recorded on each summary's `location.file`. */
|
|
13
31
|
source?: string;
|
|
14
32
|
/**
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* sets this to the template's directory; in-memory callers pass it
|
|
18
|
-
* when their schema references are relative.
|
|
33
|
+
* The directory a relative `DefinitionS3Location` or `SchemaUri`
|
|
34
|
+
* resolves against. `appsyncFileToSummaries` sets it to the template's.
|
|
19
35
|
*/
|
|
20
36
|
baseDir?: string;
|
|
21
37
|
}
|
|
22
38
|
/**
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
* memory (CDK `Template.fromStack`, JSON from a build tool, etc.).
|
|
39
|
+
* Converts a template already in memory, such as a CDK
|
|
40
|
+
* `Template.fromStack` result, to AppSync resolver summaries.
|
|
26
41
|
*/
|
|
27
42
|
declare function appsyncToSummaries(template: CfnTemplate, options?: AppsyncToSummariesOptions): BehavioralSummary[];
|
|
28
43
|
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* external schema paths resolve against the template's directory.
|
|
44
|
+
* Reads a CloudFormation or SAM template, in JSON or YAML, and converts
|
|
45
|
+
* it. A relative schema path resolves against the template's directory.
|
|
32
46
|
*/
|
|
33
47
|
declare function appsyncFileToSummaries(filePath: string, options?: AppsyncToSummariesOptions): BehavioralSummary[];
|
|
34
48
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import { BehavioralSummary } from '@suss/behavioral-ir';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Reads the raw AWS::AppSync resources in a template and adds what the
|
|
5
|
+
* SAM AWS::Serverless::GraphQLApi reader finds, so both ways of writing
|
|
6
|
+
* an API reach the summary builder as one model.
|
|
7
|
+
*
|
|
8
|
+
* A value written with a dynamic intrinsic, such as `!Ref` to a
|
|
9
|
+
* parameter, is left unresolved and reported. The reader never guesses it.
|
|
10
|
+
*/
|
|
3
11
|
interface CfnTemplate {
|
|
4
12
|
Resources?: Record<string, CfnResource | undefined>;
|
|
5
13
|
}
|
|
@@ -8,27 +16,33 @@ interface CfnResource {
|
|
|
8
16
|
Properties?: Record<string, unknown>;
|
|
9
17
|
}
|
|
10
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Reads an AWS AppSync API from a CloudFormation or SAM template and
|
|
21
|
+
* writes one resolver summary per resolver. Each is keyed by type and
|
|
22
|
+
* field name, the same way as a resolver found in code, so the two pair
|
|
23
|
+
* directly. The Lambda behind each data source is recorded so the
|
|
24
|
+
* summary can later be matched to handler code.
|
|
25
|
+
*
|
|
26
|
+
* The README lists the resources and schema sources this reads.
|
|
27
|
+
*/
|
|
28
|
+
|
|
11
29
|
interface AppsyncToSummariesOptions {
|
|
12
|
-
/**
|
|
30
|
+
/** Path recorded on each summary's `location.file`. */
|
|
13
31
|
source?: string;
|
|
14
32
|
/**
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* sets this to the template's directory; in-memory callers pass it
|
|
18
|
-
* when their schema references are relative.
|
|
33
|
+
* The directory a relative `DefinitionS3Location` or `SchemaUri`
|
|
34
|
+
* resolves against. `appsyncFileToSummaries` sets it to the template's.
|
|
19
35
|
*/
|
|
20
36
|
baseDir?: string;
|
|
21
37
|
}
|
|
22
38
|
/**
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
* memory (CDK `Template.fromStack`, JSON from a build tool, etc.).
|
|
39
|
+
* Converts a template already in memory, such as a CDK
|
|
40
|
+
* `Template.fromStack` result, to AppSync resolver summaries.
|
|
26
41
|
*/
|
|
27
42
|
declare function appsyncToSummaries(template: CfnTemplate, options?: AppsyncToSummariesOptions): BehavioralSummary[];
|
|
28
43
|
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* external schema paths resolve against the template's directory.
|
|
44
|
+
* Reads a CloudFormation or SAM template, in JSON or YAML, and converts
|
|
45
|
+
* it. A relative schema path resolves against the template's directory.
|
|
32
46
|
*/
|
|
33
47
|
declare function appsyncFileToSummaries(filePath: string, options?: AppsyncToSummariesOptions): BehavioralSummary[];
|
|
34
48
|
|
package/dist/index.js
CHANGED
|
@@ -361,8 +361,8 @@ function parseSchema(sdl) {
|
|
|
361
361
|
return index;
|
|
362
362
|
}
|
|
363
363
|
for (const def of doc.definitions) {
|
|
364
|
-
if (def.kind !== Kind.OBJECT_TYPE_DEFINITION && def.kind !== Kind.OBJECT_TYPE_EXTENSION && def.kind !== Kind.INTERFACE_TYPE_DEFINITION && //
|
|
365
|
-
//
|
|
364
|
+
if (def.kind !== Kind.OBJECT_TYPE_DEFINITION && def.kind !== Kind.OBJECT_TYPE_EXTENSION && def.kind !== Kind.INTERFACE_TYPE_DEFINITION && // `extend interface` splits an interface the same way `extend type`
|
|
365
|
+
// splits a type.
|
|
366
366
|
def.kind !== Kind.INTERFACE_TYPE_EXTENSION) {
|
|
367
367
|
continue;
|
|
368
368
|
}
|
|
@@ -543,10 +543,7 @@ function buildOne(resolver, indexes, resolvedByApi, schemasByApi, sourceFile) {
|
|
|
543
543
|
name: ownerKey,
|
|
544
544
|
exportPath: null,
|
|
545
545
|
boundaryBinding: graphqlResolverBinding({
|
|
546
|
-
//
|
|
547
|
-
// explicit here matches the aws-apigateway reader's posture
|
|
548
|
-
// and leaves room for a future AWS-SDK-direct transport
|
|
549
|
-
// ("aws-sdk") once Lambda-invoke semantics land.
|
|
546
|
+
// Clients reach AppSync over HTTPS to an AWS endpoint.
|
|
550
547
|
transport: "aws-https",
|
|
551
548
|
recognition: "appsync",
|
|
552
549
|
typeName: resolver.typeName,
|
|
@@ -584,28 +581,22 @@ function buildAppsyncMetadata(resolver, api, resolved, field, indexes) {
|
|
|
584
581
|
apiLogicalId: resolver.apiLogicalId,
|
|
585
582
|
apiName: api?.name ?? null,
|
|
586
583
|
dataSourceLogicalId: resolver.dataSourceLogicalId,
|
|
587
|
-
//
|
|
588
|
-
//
|
|
589
|
-
// data source is null, so this is null too.
|
|
584
|
+
// Only a UNIT resolver has its own data source. A pipeline records
|
|
585
|
+
// the Lambda behind each of its functions instead.
|
|
590
586
|
lambdaFunctionLogicalId: lambdaBehind(
|
|
591
587
|
resolver.dataSourceLogicalId,
|
|
592
588
|
indexes
|
|
593
589
|
),
|
|
594
590
|
kind: resolver.kind,
|
|
595
591
|
authenticationType: api?.authenticationType ?? null,
|
|
596
|
-
// SAM JS/VTL resolver code location + runtime (null for raw
|
|
597
|
-
// AWS::AppSync::Resolver resources).
|
|
598
592
|
codeUri: resolver.codeUri,
|
|
599
593
|
runtime: resolver.runtime,
|
|
600
|
-
//
|
|
601
|
-
//
|
|
602
|
-
// (source-level) so a genuinely-remote schema is never silent.
|
|
594
|
+
// Keeps a field the SDL does not declare apart from a schema that was
|
|
595
|
+
// never read, such as a remote one.
|
|
603
596
|
schemaMatched: field !== null,
|
|
604
597
|
schemaSource: schemaSourceMetadata(resolved),
|
|
605
|
-
//
|
|
606
|
-
//
|
|
607
|
-
// resolvers; empty with `kind: "PIPELINE"` means the Functions
|
|
608
|
-
// array was dynamically-referenced and we couldn't resolve it.
|
|
598
|
+
// Left out for a UNIT resolver, and for a pipeline whose Functions
|
|
599
|
+
// list cannot be read statically.
|
|
609
600
|
...pipelineFunctions.length > 0 ? { pipelineFunctions } : {}
|
|
610
601
|
};
|
|
611
602
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@suss/contract-appsync",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.34.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Turn the AppSync API in a CloudFormation or SAM template into a suss contract and check it against the resolvers and clients on either side of it.",
|
|
6
6
|
"keywords": [
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
],
|
|
16
16
|
"license": "Apache-2.0",
|
|
17
17
|
"author": "Nimbus Cloud AI LLC",
|
|
18
|
-
"homepage": "https://
|
|
18
|
+
"homepage": "https://suss.sh",
|
|
19
19
|
"repository": {
|
|
20
20
|
"type": "git",
|
|
21
21
|
"url": "git+https://github.com/nimbuscloud-ai/suss.git",
|
|
@@ -48,9 +48,9 @@
|
|
|
48
48
|
"typecheck": "tsc --noEmit"
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@suss/behavioral-ir": "0.
|
|
52
|
-
"@suss/contract-graphql": "0.
|
|
53
|
-
"@suss/manifest-aws": "0.
|
|
51
|
+
"@suss/behavioral-ir": "0.34.0",
|
|
52
|
+
"@suss/contract-graphql": "0.34.0",
|
|
53
|
+
"@suss/manifest-aws": "0.34.0",
|
|
54
54
|
"graphql": "^16.8.0"
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|