diff --git a/packages/connected-nextgraph/src/NextGraphConnectedPlugin.ts b/packages/connected-nextgraph/src/NextGraphConnectedPlugin.ts index ae19e9c..339d54f 100644 --- a/packages/connected-nextgraph/src/NextGraphConnectedPlugin.ts +++ b/packages/connected-nextgraph/src/NextGraphConnectedPlugin.ts @@ -7,12 +7,19 @@ import { isNextGraphUri } from "./util/isNextGraphUri"; export interface NextGraphConnectedContext { sessionId?: string; } + +export interface NextGraphCreateResourceOptions { + storeType?: "public" | "protected" | "private"; + storeRepo?: string; +} + export interface NextGraphConnectedPlugin extends ConnectedPlugin< "nextgraph", NextGraphUri, NextGraphResource, - NextGraphConnectedContext + NextGraphConnectedContext, + NextGraphCreateResourceOptions > { name: "nextgraph"; getResource: ( @@ -35,18 +42,18 @@ export const nextgGraphConnectedPlugin: NextGraphConnectedPlugin = { createResource: async function ( context: ConnectedContext, + options?: NextGraphCreateResourceOptions, ): Promise { + const storeType = options?.storeType ?? "protected"; + // TODO: determine the name of the store repo from the session id. + const storeRepo = options?.storeRepo ?? ""; + const nuri: NextGraphUri = await ng.doc_create( context.nextgraph.sessionId, "Graph", - // NIKO: Can this always be "data:graph"? "data:graph", - // NIKO: What are the options here again? "private" "protected" "public" - "protected", - // NIKO: What is this? Should it be changed? lookup what the default store - // is - "B381BvfdAFYPBkdhDrsqnMMg5pnJMWJgJbZobZErXZMA", - // NIKO: Can this always be "store"? yes + storeType, + storeRepo, "store", ); return new NextGraphResource(nuri, context); diff --git a/packages/connected-solid/src/SolidConnectedPlugin.ts b/packages/connected-solid/src/SolidConnectedPlugin.ts index 9087beb..8d78375 100644 --- a/packages/connected-solid/src/SolidConnectedPlugin.ts +++ b/packages/connected-solid/src/SolidConnectedPlugin.ts @@ -12,7 +12,8 @@ export interface SolidConnectedPlugin "solid", SolidUri, SolidLeaf | SolidContainer, - SolidConnectedContext + SolidConnectedContext, + undefined > { name: "solid"; getResource: diff --git a/packages/connected/src/ConnectedLdoDataset.ts b/packages/connected/src/ConnectedLdoDataset.ts index 7efe4f3..44fab4e 100644 --- a/packages/connected/src/ConnectedLdoDataset.ts +++ b/packages/connected/src/ConnectedLdoDataset.ts @@ -146,11 +146,17 @@ export class ConnectedLdoDataset< async createResource< Name extends Plugins[number]["name"], Plugin extends Extract, - >(name: Name): Promise> { + >( + name: Name, + createResourceOptions?: Plugin["types"]["createResourceOptions"], + ): Promise> { const validPlugin = this.plugins.find((plugin) => name === plugin.name)!; - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore I have no idea why this doesn't work - const newResourceResult = await validPlugin.createResource(this.context); + const newResourceResult = await validPlugin.createResource( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore I have no idea why this doesn't work + this.context, + createResourceOptions, + ); // HACK: cast to any if (newResourceResult.isError) return newResourceResult as any; this.resourceMap.set(newResourceResult.uri, newResourceResult); diff --git a/packages/connected/src/ConnectedPlugin.ts b/packages/connected/src/ConnectedPlugin.ts index a75cc90..f5f6a19 100644 --- a/packages/connected/src/ConnectedPlugin.ts +++ b/packages/connected/src/ConnectedPlugin.ts @@ -8,11 +8,13 @@ export interface ConnectedPlugin< UriType extends string = any, ResourceType extends Resource = any, ContextType = any, + CreateResourceOptions = any, > { name: Name; getResource(uri: UriType, context: ConnectedContext): ResourceType; createResource( context: ConnectedContext, + createResourceOptions?: CreateResourceOptions, ): Promise; isUriValid(uri: string): uri is UriType; normalizeUri?: (uri: UriType) => UriType; @@ -23,5 +25,6 @@ export interface ConnectedPlugin< uri: UriType; context: ContextType; resource: ResourceType; + createResourceOptions: CreateResourceOptions; }; } diff --git a/packages/connected/src/IConnectedLdoDataset.ts b/packages/connected/src/IConnectedLdoDataset.ts index ba6d503..a683a41 100644 --- a/packages/connected/src/IConnectedLdoDataset.ts +++ b/packages/connected/src/IConnectedLdoDataset.ts @@ -50,6 +50,7 @@ export interface IConnectedLdoDataset Plugin extends Extract, >( name: Name, + createResourceOptions?: Plugin["types"]["createResourceOptions"], ): Promise>; forgetResource(uri: string): boolean;