Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
080efcd
Add contentLength to versioned file entries
sergiimk May 9, 2025
f9b82ab
Molecule API group and projects endpoints
sergiimk May 11, 2025
6b18b32
Molecule attachments creation API
sergiimk May 11, 2025
45cde04
Auto-create molecule/projects dataset
sergiimk May 11, 2025
85454ae
Fix visibility anon access tests
sergiimk May 11, 2025
475a02d
GQL: VersionedFileEntry::from_json(): set for default value for entri…
s373r May 12, 2025
6aa9b1f
Less sensitive reactions of dependency graph for requests that come e…
zaychenko-sergei May 12, 2025
00ad4a3
Merge branch 'master' into sku/molecule
sergiimk May 14, 2025
d9da406
Convert molecule API to use CreateAccountUseCase
sergiimk May 14, 2025
c91a77a
Tweak project columns
sergiimk May 14, 2025
6665f29
Extend create dataset GQL results with isSuccess
sergiimk May 14, 2025
0d6e847
Project creation will tolerate already existing accounts
sergiimk May 14, 2025
d529fa3
Merge branch 'master' into sku/molecule
zaychenko-sergei May 15, 2025
27154d9
Molecule: Add project activity API
sergiimk May 18, 2025
36c7623
Access error handling and improved pagination
sergiimk May 18, 2025
a0b5487
Molecule: Handle access errors on projects dataset
sergiimk May 18, 2025
6df8553
SKU/molecule webhooks0 (#1244)
zaychenko-sergei May 19, 2025
8b96f13
Comment updated
zaychenko-sergei May 19, 2025
7b85e96
Dev version of SQLX migrations image + workflow
zaychenko-sergei May 20, 2025
4473a59
Extend activity events
sergiimk May 21, 2025
1a2fcc4
`[2025-05-22]`: Merge `master` (`0.238.0`) into `sku/molecule` (#1247)
s373r May 22, 2025
88e7bd2
Merge branch 'master' into sku/molecule
zaychenko-sergei May 26, 2025
ff012e9
Schema re-generated
zaychenko-sergei May 26, 2025
327b5ff
Merge branch 'master' (v0.239.0) into sku/molecule
zaychenko-sergei May 26, 2025
8024492
GQL: `molecule` area: use `BigInt` for `ipnft_token_id` (#1252)
s373r May 27, 2025
c6dde01
`sku/molecule`: sync with `master` branch (#1258)
s373r Jun 4, 2025
786945e
Merge branch 'master' into sku/molecule
zaychenko-sergei Jun 6, 2025
a5b8da7
Allow "molecule" and "molecule.dev" accounts to be special.
zaychenko-sergei Jun 6, 2025
23eb9be
Resolving Molecule projects dataset alias via current subject
zaychenko-sergei Jun 6, 2025
41117c0
Merge branch 'master' into sku/molecule
zaychenko-sergei Jun 6, 2025
f20097c
Improve type safety and parsing of files and collection records
sergiimk Jul 13, 2025
03136b2
Merge branch 'master' into sku/molecule
rmn-boiko Jul 14, 2025
47a9736
Merge branch 'master' into sku/molecule
rmn-boiko Jul 16, 2025
e18a59f
Revert migration versions renaming (#1305)
rmn-boiko Jul 21, 2025
afafa10
`MoleculeMut::create_project()`: use `U256` type for `ipnft_token_id`…
s373r Aug 1, 2025
eee141e
Merge master branch (#1317)
rmn-boiko Aug 14, 2025
82473cf
Merge branch 'master' into sku/molecule
rmn-boiko Aug 14, 2025
4905c4f
Fix AuthPolicyLayer placement
rmn-boiko Aug 14, 2025
df81194
Merge branch 'master' into sku/molecule
rmn-boiko Aug 15, 2025
fb8e8f3
Collections API: Ignore noop changes in collection add/move (#1344)
sergiimk Aug 25, 2025
428efa3
`GQL: Search::query()`: case insensitive search (#1357)
s373r Sep 3, 2025
c53c061
Merge branch 'master' into sku/molecule
sergiimk Sep 10, 2025
f1bd653
Update to upstream changes
sergiimk Sep 11, 2025
726081c
Merge branch 'master' into sku/molecule
sergiimk Sep 11, 2025
c565919
Remove obsolete sqlx-cli-with-migrations-dev image (#1374)
s373r Sep 11, 2025
4703aa6
Merge branch 'master' into sku/molecule
s373r Sep 24, 2025
614816a
Merge branch 'master' into sku/molecule
sergiimk Sep 25, 2025
d04d9c5
Molecule: global announcements feed (#1393)
sergiimk Sep 26, 2025
626157e
Investigation: potential unstable ordering of dataset entry listings
zaychenko-sergei Sep 26, 2025
0e9acb4
More ordering fixed
zaychenko-sergei Sep 26, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,17 @@ Recommendation: for ease of reading, use the following order:
-->

## [Unreleased]
### Added
- GQL: `BigInt` scalar
### Changed
- GQL: `molecule` area: use `BigInt` for `ipnft_token_id`
- Allow `molecule` and `molecule.dev` accounts separation
- Collection datasets will ignore add and move operations that don't change the entry path, ref, or extra attributes and return `CollectionUpdateUpToDate`
- GQL: `Search::query()`: case insensitive search.
- GQL: `MoleculeMut::create_project()`: generate lowercase project account name.
- Discontinued binary releases for MacOS Intel architecture (see #1323) and Windows (as we only ever supported WSL2)
### Fixed
- Investigation: potential unstable ordering of dataset entry listings

## [0.249.1] - 2025-09-25
### Fixed
Expand Down
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

243 changes: 243 additions & 0 deletions resources/schema.gql
Original file line number Diff line number Diff line change
Expand Up @@ -474,6 +474,11 @@ Base64-encoded binary data (url-safe, no padding)
"""
scalar Base64Usnp

"""
A big integer scalar type.
"""
scalar BigInt

type BlockRef {
name: String!
blockHash: Multihash!
Expand Down Expand Up @@ -795,6 +800,25 @@ type CreateAccountSuccess implements CreateAccountResult {
message: String!
}

type CreateAnnouncementErrorInvalidAttachment implements CreateAnnouncementResult {
message: String!
isSuccess: Boolean!
}

interface CreateAnnouncementResult {
isSuccess: Boolean!
message: String!
}

type CreateAnnouncementSuccess implements CreateAnnouncementResult {
"""
ID of the newly-created announcement
"""
announcementId: String!
isSuccess: Boolean!
message: String!
}

interface CreateDatasetFromSnapshotResult {
isSuccess: Boolean!
message: String!
Expand Down Expand Up @@ -829,6 +853,23 @@ type CreateDatasetResultSuccess implements CreateDatasetResult & CreateDatasetFr
message: String!
}

type CreateProjectErrorConflict implements CreateProjectResult {
project: MoleculeProject!
isSuccess: Boolean!
message: String!
}

interface CreateProjectResult {
isSuccess: Boolean!
message: String!
}

type CreateProjectSuccess implements CreateProjectResult {
project: MoleculeProject!
isSuccess: Boolean!
message: String!
}

interface CreateTokenResult {
message: String!
}
Expand Down Expand Up @@ -2570,6 +2611,11 @@ input InitiatorFilterInput @oneOf {
accounts: [AccountID!]
}

"""
A scalar that can represent any JSON value.
"""
scalar JSON

type JdbcDesc {
url: String!
}
Expand Down Expand Up @@ -2820,6 +2866,190 @@ type ModifyPasswordWrongOldPassword implements ModifyPasswordResult {
message: String!
}

type Molecule {
"""
Looks up the project
"""
project(ipnftUid: String!): MoleculeProject
"""
List the registered projects
"""
projects(page: Int, perPage: Int): MoleculeProjectConnection!
"""
Latest activity events across all projects in reverse chronological
order
"""
activity(page: Int, perPage: Int): MoleculeProjectEventConnection!
}

type MoleculeMut {
createProject(ipnftSymbol: String!, ipnftUid: String!, ipnftAddress: String!, ipnftTokenId: U256!): CreateProjectResult!
"""
Looks up the project
"""
project(ipnftUid: String!): MoleculeProjectMut
}

type MoleculeProject {
"""
System time when this version was created/updated
"""
systemTime: DateTime!
"""
Event time when this version was created/updated
"""
eventTime: DateTime!
"""
Symbolic name of the project
"""
ipnftSymbol: String!
"""
Unique ID of the IPNFT as `{ipnftAddress}_{ipnftTokenId}`
"""
ipnftUid: String!
"""
Address of the IPNFT contract
"""
ipnftAddress: String!
"""
Token ID withing the IPNFT contract
"""
ipnftTokenId: BigInt!
"""
Project's organizational account
"""
account: Account!
"""
Project's data room dataset
"""
dataRoom: Dataset!
"""
Project's announcements dataset
"""
announcements: Dataset!
"""
Project's activity events in reverse chronological order
"""
activity(page: Int, perPage: Int): MoleculeProjectEventConnection!
}

type MoleculeProjectConnection {
"""
A shorthand for `edges { node { ... } }`
"""
nodes: [MoleculeProject!]!
"""
Approximate number of total nodes
"""
totalCount: Int!
"""
Page information
"""
pageInfo: PageBasedInfo!
edges: [MoleculeProjectEdge!]!
}

type MoleculeProjectEdge {
node: MoleculeProject!
}

interface MoleculeProjectEvent {
project: MoleculeProject!
systemTime: DateTime!
}

type MoleculeProjectEventAnnouncement implements MoleculeProjectEvent {
"""
Associated project
"""
project: MoleculeProject!
"""
Announcement record
"""
announcement: JSON!
systemTime: DateTime!
}

type MoleculeProjectEventConnection {
"""
A shorthand for `edges { node { ... } }`
"""
nodes: [MoleculeProjectEvent!]!
"""
Page information
"""
pageInfo: PageBasedInfo!
edges: [MoleculeProjectEventEdge!]!
}

type MoleculeProjectEventDataRoomEntryAdded implements MoleculeProjectEvent {
"""
Associated project
"""
project: MoleculeProject!
"""
Collection entry
"""
entry: CollectionEntry!
systemTime: DateTime!
}

type MoleculeProjectEventDataRoomEntryRemoved implements MoleculeProjectEvent {
"""
Associated project
"""
project: MoleculeProject!
"""
Collection entry
"""
entry: CollectionEntry!
systemTime: DateTime!
}

type MoleculeProjectEventDataRoomEntryUpdated implements MoleculeProjectEvent {
"""
Associated project
"""
project: MoleculeProject!
"""
Collection entry
"""
newEntry: CollectionEntry!
systemTime: DateTime!
}

type MoleculeProjectEventEdge {
node: MoleculeProjectEvent!
}

type MoleculeProjectEventFileUpdated implements MoleculeProjectEvent {
"""
Associated project
"""
project: MoleculeProject!
"""
Versioned file dataset
"""
dataset: Dataset!
"""
New file version entry
"""
newEntry: VersionedFileEntry!
systemTime: DateTime!
}

type MoleculeProjectMut {
"""
Creates an announcement record for the project
"""
createAnnouncement( headline: String!, body: String!,
"""
List of dataset DIDs to link
"""
attachments: [String!], moleculeAccessLevel: String!, moleculeChangeBy: String!
): CreateAnnouncementResult!
}

"""
MQTT quality of service class.

Expand Down Expand Up @@ -2871,6 +3101,10 @@ type Mutation {
"""
accounts: AccountsMut!
"""
Temporary: Molecule-specific functionality group
"""
molecule: MoleculeMut!
"""
Collaboration-related functionality group

Allows setting permissions for multiple datasets in batch mode
Expand Down Expand Up @@ -3062,6 +3296,10 @@ type Query {
Admin-related functionality group
"""
admin: Admin!
"""
Temporary: Molecule-specific functionality group
"""
molecule: Molecule!
}

enum QueryDialect {
Expand Down Expand Up @@ -3929,6 +4167,11 @@ type TriggerFlowSuccess implements TriggerFlowResult {
message: String!
}

"""
256-bit unsigned number. Can be constructed from string.
"""
scalar U256

scalar URL

interface UnsetRoleResult {
Expand Down
1 change: 1 addition & 0 deletions src/adapter/graphql/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ async-graphql = { version = "7", default-features = false, features = [
async-trait = { version = "0.1", default-features = false }
base64 = { version = "0.22", default-features = false }
bytes = { version = "1", default-features = false }
num-bigint = { version = "0.4", default-features = false }
chrono = "0.4"
# TODO: Currently needed for type conversions but ideally should be encapsulated by kamu-core
datafusion = { version = "50", default-features = false, features = ["serde"] }
Expand Down
4 changes: 4 additions & 0 deletions src/adapter/graphql/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,7 @@ pub(crate) mod utils;
pub use config::*;
pub use guards::*;
pub use root::*;

pub mod molecule {
pub use crate::queries::molecule::{Molecule, molecule_subject};
}
2 changes: 2 additions & 0 deletions src/adapter/graphql/src/mutations/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ mod dataset_mut;
mod datasets_mut;
mod flows_mut;
mod metadata_chain_mut;
mod molecule_mut;
mod webhooks_mut;

pub(crate) use account_access_token_mut::*;
Expand All @@ -32,4 +33,5 @@ pub(crate) use dataset_mut::*;
pub(crate) use datasets_mut::*;
pub(crate) use flows_mut::*;
pub(crate) use metadata_chain_mut::*;
pub(crate) use molecule_mut::*;
pub(crate) use webhooks_mut::*;
Loading
Loading