interface contracts {
    use schema.{directive};
    use contracts-types.{contract, graphql-subgraph};

    construct: func(
        // contact key used for caching.
        key: string,
        // List of all directives, deduplicated, on the schema associated with this contracts extensions.
        directives: list<directive>,
        // List of all GraphQL subgraphs. You may change their URL.
        subgraphs: list<graphql-subgraph>
    ) -> result<contract, string>;
}
