Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
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
6 changes: 6 additions & 0 deletions core/src/expression/Expression.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ export class ExpressionProofInput {

@Field({nullable: true})
invalid?: boolean;

@Field({nullable: true})
socialOrganismCoherence?: number;
}

//Note having any as return type here fixes compilation errors but I think we loose the ExpressionClass type in resulting .d.ts gql files
Expand All @@ -44,6 +47,9 @@ export function ExpressionGeneric<DataType>(DataTypeClass: ClassType<DataType>):
abstract class ExpressionClass {
@Field()
author: string;

@Field({nullable: true})
socialOrganismSource?: string;

@Field()
timestamp: string;
Expand Down
20 changes: 19 additions & 1 deletion core/src/language/Language.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ export interface Language {
/** Interface for providing UI components for the settings of this Language */
readonly settingsUI?: SettingsUI;

readonly socialOrganismAdapter?: SocialOrganismAdapter;

/** Optional function to make any cleanup/teardown if your language gets deleting in the ad4m-executor */
readonly teardown?: () => void;

Expand Down Expand Up @@ -251,4 +253,20 @@ export interface TelepresenceAdapter {

rpcCall(remoteAgentDid: string, call: TelepresenceRpcCall): object;
registerRpcCallback(callback: TelepresenceRpcCall);
}
}

export interface SocialOrganismAdapter {
create(organismAddress: string, messageURI: string)
concur(organismAddress: string, messageURI: string)
reject(organismAddress: string, messageURI: string)

signatures(organismAddress: string, messageURI: string): Promise<string[]>
members(organismAddress: string): Promise<string[]>

vouchForNewMember(organismAddress: string, newMemberDid: string)
rejectNewMember(organismAddress: string, newMemberDid: string)

newExpressionCallback()
newMemberCallback()

}
50 changes: 50 additions & 0 deletions core/src/social-organism/SocialOrganism.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import { Field, InputType, ObjectType } from "type-graphql"
import { ExpressionGeneric } from "../expression/Expression"
import { Perspective } from "../perspectives/Perspective"

@ObjectType()
export class SocialOrganism {
@Field()
meta: Perspective

@Field()
members: string[]

@Field()
nucleusNeighbourhood: string

@Field()
outputsNeighbourhood: string

@Field()
inputsDMLanguage: string
}

@InputType()
export class SocialOrganismInput {
@Field(type => Perspective)
meta: Perspective

@Field()
members: string[]

@Field()
nucleusNeighbourhood: string

@Field()
outputsNeighbourhood: string

@Field()
inputsDMLanguage: string
}


export class SocialOrganismExpression extends ExpressionGeneric(SocialOrganism) {}


export class SocialOrganismProof {
expressionURL: string
did: string
signature: string
key: string
}
81 changes: 81 additions & 0 deletions core/src/social-organism/SocialOrganismsResolver.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
import { Arg, Mutation, Resolver } from "type-graphql";
import { LanguageRef } from "../language/LanguageRef";
import { NeighbourhoodExpression } from "../neighbourhood/Neighbourhood";
import { PerspectiveHandle } from "../perspectives/PerspectiveHandle";
import { PerspectiveInput } from "../perspectives/Perspective";
import { SocialOrganismInput, SocialOrganismProof } from "./SocialOrganism";

/**
*/
@Resolver()
export default class SocialOrganismsResolver {
@Mutation(returns => String)
socialorganismCreate(
@Arg('socialOrgansim') socialOrganism: SocialOrganismInput,
): string {
return "socialorganism://socialorganismAddress"
}

@Mutation(returns => String)
socialOrganismSpeak(
@Arg('organismURL') organismURL: string,
@Arg('content') content: string,
@Arg('languageAddress') languageAddress: string
): string {
return "HcX234"
}

@Mutation(returns => Boolean)
socialOrganismConcur(
@Arg('organismURL') organismURL: string,
@Arg('expressionURL') expressionURL: string,
): boolean {
return true
}

@Mutation(returns => Boolean)
socialOrganismRefute(
@Arg('organismURL') organismURL: string,
@Arg('expressionURL') expressionURL: string,
): boolean {
return true
}

@Mutation(returns => [String])
socialOrganismMembers(
@Arg('organismURL') organismURL: string,
): string[] {
return ["did:ad4m:test1", "did:ad4m:test2"]
}

@Mutation(returns => [SocialOrganismProof])
socialOrganismSignatures(
@Arg('organismURL') organismURL: string,
@Arg('expressionURL') expressionURL: string,
): SocialOrganismProof[] {
return [
{
expressionURL: "HcX234",
did: "did:ad4m:test1",
signature: "signature1",
key: "key1"
}
]
}

@Mutation(returns => Boolean)
socialOrganismVouchMember(
@Arg('organismURL') organismURL: string,
@Arg('memberDID') memberDID: string,
): boolean {
return true
}

@Mutation(returns => Boolean)
socialOrganismRefuteMember(
@Arg('organismURL') organismURL: string,
@Arg('memberDID') memberDID: string,
): boolean {
return true
}
}