@kubun/client 0.5.0 → 0.6.1
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/lib/client.d.ts +14 -2
- package/lib/client.js +1 -1
- package/lib/graphql.d.ts +4 -1
- package/lib/graphql.js +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/mutations.d.ts +9 -3
- package/lib/mutations.js +1 -1
- package/package.json +8 -8
package/lib/client.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { Client, type RequestCall, type StreamCall } from '@enkaku/client';
|
|
2
2
|
import type { Identity, SigningIdentity } from '@enkaku/token';
|
|
3
3
|
import { type Logger } from '@kubun/logger';
|
|
4
|
-
import type { ClientTransport, DeployGraphParams, DeployGraphResult, ExecuteGraphParams, ExecuteGraphResult, ListGraphResult, LoadGraphParams, LoadGraphResult, Protocol } from '@kubun/protocol';
|
|
4
|
+
import type { BeginTransactionParams, BeginTransactionResult, ClientTransport, DeployGraphParams, DeployGraphResult, ExecuteGraphParams, ExecuteGraphResult, ListGraphResult, LoadGraphParams, LoadGraphResult, Protocol, TransactionParams, TransactionResult } from '@kubun/protocol';
|
|
5
|
+
import { type GetRandomValues } from './graphql.js';
|
|
5
6
|
export type MutateGraphParams = ExecuteGraphParams & {
|
|
6
7
|
attachments?: Record<string, string>;
|
|
8
|
+
transactionID?: string;
|
|
7
9
|
};
|
|
8
10
|
export type KubunClientType = {
|
|
9
11
|
deployGraph: (params: DeployGraphParams) => RequestCall<DeployGraphResult>;
|
|
@@ -11,7 +13,10 @@ export type KubunClientType = {
|
|
|
11
13
|
loadGraph: (params: LoadGraphParams) => RequestCall<LoadGraphResult>;
|
|
12
14
|
queryGraph: <Data extends Record<string, unknown> = Record<string, unknown>>(params: ExecuteGraphParams, signal?: AbortSignal) => RequestCall<ExecuteGraphResult<Data>>;
|
|
13
15
|
subscribeToGraph<Data extends Record<string, unknown> = Record<string, unknown>>(params: ExecuteGraphParams, signal?: AbortSignal): StreamCall<ExecuteGraphResult<Data>, ExecuteGraphResult<Data>>;
|
|
14
|
-
mutateGraph: (params: MutateGraphParams, signal?: AbortSignal) => RequestCall<ExecuteGraphResult
|
|
16
|
+
mutateGraph: <Data extends Record<string, unknown> = Record<string, unknown>>(params: MutateGraphParams, signal?: AbortSignal) => RequestCall<ExecuteGraphResult<Data>>;
|
|
17
|
+
beginTransaction: (params: BeginTransactionParams) => RequestCall<BeginTransactionResult>;
|
|
18
|
+
commitTransaction: (params: TransactionParams) => RequestCall<TransactionResult>;
|
|
19
|
+
rollbackTransaction: (params: TransactionParams) => RequestCall<TransactionResult>;
|
|
15
20
|
};
|
|
16
21
|
export type ReadClientParams = {
|
|
17
22
|
getRandomID?: () => string;
|
|
@@ -22,6 +27,7 @@ export type ReadClientParams = {
|
|
|
22
27
|
};
|
|
23
28
|
export type ClientParams = Omit<ReadClientParams, 'identity'> & {
|
|
24
29
|
identity: SigningIdentity | Promise<SigningIdentity>;
|
|
30
|
+
getRandomValues?: GetRandomValues;
|
|
25
31
|
};
|
|
26
32
|
export declare class KubunReadClient {
|
|
27
33
|
#private;
|
|
@@ -36,6 +42,9 @@ export declare class KubunReadClient {
|
|
|
36
42
|
export declare class KubunLightClient extends KubunReadClient implements KubunClientType {
|
|
37
43
|
deployGraph(param: DeployGraphParams, signal?: AbortSignal): RequestCall<DeployGraphResult>;
|
|
38
44
|
mutateGraph<Data extends Record<string, unknown> = Record<string, unknown>>(param: MutateGraphParams, signal?: AbortSignal): RequestCall<ExecuteGraphResult<Data>>;
|
|
45
|
+
beginTransaction(param: BeginTransactionParams): RequestCall<BeginTransactionResult>;
|
|
46
|
+
commitTransaction(param: TransactionParams): RequestCall<TransactionResult>;
|
|
47
|
+
rollbackTransaction(param: TransactionParams): RequestCall<TransactionResult>;
|
|
39
48
|
}
|
|
40
49
|
export declare class KubunClient extends KubunReadClient implements KubunClientType {
|
|
41
50
|
#private;
|
|
@@ -43,4 +52,7 @@ export declare class KubunClient extends KubunReadClient implements KubunClientT
|
|
|
43
52
|
deployGraph(param: DeployGraphParams, signal?: AbortSignal): RequestCall<DeployGraphResult>;
|
|
44
53
|
loadGraph(param: LoadGraphParams, signal?: AbortSignal): RequestCall<LoadGraphResult>;
|
|
45
54
|
mutateGraph<Data extends Record<string, unknown> = Record<string, unknown>>(param: MutateGraphParams, signal?: AbortSignal): RequestCall<ExecuteGraphResult<Data>>;
|
|
55
|
+
beginTransaction(param: BeginTransactionParams): RequestCall<BeginTransactionResult>;
|
|
56
|
+
commitTransaction(param: TransactionParams): RequestCall<TransactionResult>;
|
|
57
|
+
rollbackTransaction(param: TransactionParams): RequestCall<TransactionResult>;
|
|
46
58
|
}
|
package/lib/client.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Client as t}from"@enkaku/client";import{
|
|
1
|
+
import{Client as t}from"@enkaku/client";import{getKubunLogger as e}from"@kubun/logger";import{HLC as r}from"@kubun/mutation";import{GraphQLExecutionError as a,MutationsRunner as n}from"./graphql.js";export class KubunReadClient{#t;constructor(r){let a=r.getRandomID??(()=>globalThis.crypto.randomUUID()),n=r.logger??e("client",{clientID:a()});this.#t=new t({...r,logger:n})}get client(){return this.#t}listGraphs(t){return this.#t.request("graph/list",{signal:t})}loadGraph(t,e){return this.#t.request("graph/load",{param:t,signal:e})}queryGraph(t,e){return this.#t.request("graph/query",{param:t,signal:e})}subscribeToGraph(t,e){return this.#t.createStream("graph/subscribe",{param:t,signal:e})}}export class KubunLightClient extends KubunReadClient{deployGraph(t,e){return this.client.request("graph/deploy",{param:t,signal:e})}mutateGraph(t,e){return this.client.request("graph/mutate",{param:{...t,mutations:null},signal:e})}beginTransaction(t){return this.client.request("graph/beginTransaction",{param:t})}commitTransaction(t){return this.client.request("graph/commitTransaction",{param:t})}rollbackTransaction(t){return this.client.request("graph/rollbackTransaction",{param:t})}}export class KubunClient extends KubunReadClient{#e;#r;#a;#n;constructor(t){super(t),this.#e=t.getRandomID??(()=>globalThis.crypto.randomUUID()),this.#r=t.getRandomValues??(t=>globalThis.crypto.getRandomValues(t)),this.#a=Promise.resolve(t.identity),this.#n=new n}deployGraph(t,e){let r=this.client.request("graph/deploy",{param:t,signal:e});return Object.assign(r.then(t=>(this.#n.setSchema(t.id,t),t)),{abort:r.abort,id:r.id,procedure:r.procedure,type:r.type,signal:r.signal})}loadGraph(t,e){let r=super.loadGraph(t,e);return Object.assign(r.then(e=>(this.#n.setSchema(t.id,e),e)),{abort:r.abort,id:r.id,procedure:r.procedure,type:r.type,signal:r.signal})}async #i(t,e,n){let{id:i,...s}=e;if(this.#n.hasSchema(i)||await this.loadGraph({id:i},n),n.aborted)throw n.reason??new DOMException("The operation was aborted.","AbortError");let o=await this.#a,u={getRandomValues:this.#r,hlc:new r({nodeID:o.id}),identity:o,mutations:{}},{errors:l}=await this.#n.execute({context:u,schemaID:i,source:e.text,variables:e.variables});if(null!=l&&0!==l.length)throw new a(l);return await this.client.request("graph/mutate",{id:t,param:{id:i,mutations:u.mutations,...s},signal:n})}mutateGraph(t,e){let r=this.#e(),a=new AbortController,n=e?AbortSignal.any([a.signal,e]):a.signal;return Object.assign(this.#i(r,t,n),{id:r,abort:()=>a.abort(),signal:n})}beginTransaction(t){return this.client.request("graph/beginTransaction",{param:t})}commitTransaction(t){return this.client.request("graph/commitTransaction",{param:t})}rollbackTransaction(t){return this.client.request("graph/rollbackTransaction",{param:t})}}
|
package/lib/graphql.d.ts
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import { type SigningIdentity } from '@enkaku/token';
|
|
2
2
|
import type { Context } from '@kubun/graphql';
|
|
3
|
+
import { type HLC } from '@kubun/mutation';
|
|
3
4
|
import type { GraphModelJSON } from '@kubun/protocol';
|
|
4
5
|
import type { ExecutionResult, GraphQLError, GraphQLSchema } from 'graphql';
|
|
6
|
+
export type GetRandomValues = <T extends ArrayBufferView>(array: T) => T;
|
|
5
7
|
export declare class GraphQLExecutionError extends Error {
|
|
6
8
|
#private;
|
|
7
9
|
constructor(errors: ReadonlyArray<GraphQLError>, message?: string);
|
|
8
10
|
get errors(): ReadonlyArray<GraphQLError>;
|
|
9
11
|
}
|
|
10
12
|
export type ExecutionContext = {
|
|
13
|
+
getRandomValues: GetRandomValues;
|
|
14
|
+
hlc: HLC;
|
|
11
15
|
identity: SigningIdentity;
|
|
12
|
-
loadState: (id: string) => Promise<Uint8Array | null>;
|
|
13
16
|
mutations: Record<string, string>;
|
|
14
17
|
};
|
|
15
18
|
export declare function createContext(client: ExecutionContext): Context;
|
package/lib/graphql.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{stringifyToken as e}from"@enkaku/token";import{createSchema as t}from"@kubun/graphql";import{
|
|
1
|
+
import{stringifyToken as e}from"@enkaku/token";import{createSchema as t}from"@kubun/graphql";import{convertPatchInput as a,createMutationOperations as r}from"@kubun/mutation";import{graphql as n}from"graphql";import{signChangeMutation as o,signSetMutation as s}from"./mutations.js";export class GraphQLExecutionError extends Error{#e;constructor(e,t="GraphQL execution failed"){super(t),this.name=GraphQLExecutionError.name,this.#e=e}get errors(){return this.#e}}export function createContext(t){let n=r({issuer:t.identity.id,hlc:t.hlc,getRandomValues:t.getRandomValues,processSetMutation:async a=>e(await s({identity:t.identity,mutation:a})),processChangeMutation:async a=>e(await o({identity:t.identity,mutation:a}))});return{executeCreateMutation:async({modelID:e,data:a,info:r})=>(t.mutations[r.path.key]=await n.createDocument({modelID:e,data:a}),null),executeSetMutation:async({modelID:e,unique:a,data:r,info:o})=>(t.mutations[o.path.key]=await n.setDocument({modelID:e,unique:a,data:r}),null),executeUpdateMutation:async({input:e,info:r})=>(t.mutations[r.path.key]=await n.updateDocument({docID:e.id,patch:a(e.patch)}),null),async executeRemoveMutation({id:e,info:a}){t.mutations[a.path.key]=await n.removeDocument({docID:e})},executeSetModelAccessDefaults:async()=>null,async executeRemoveModelAccessDefaults(){},executeSetDocumentAccessOverride:async()=>null,async executeRemoveDocumentAccessOverride(){},beginTransaction(){throw Error("Transaction mutations are not supported in client mode")},async commitTransaction(){throw Error("Transaction mutations are not supported in client mode")},rollbackTransaction(){throw Error("Transaction mutations are not supported in client mode")}}}export class MutationsRunner{#t;constructor(e={}){this.#t=e.schemas??{}}hasSchema(e){return null!=this.#t[e]}setSchema(e,a){this.#t[e]=Promise.resolve(a).then(t)}async execute(e){let t=this.#t[e.schemaID];if(null==t)throw Error(`Schema ${e.schemaID} not found`);return await n({contextValue:createContext(e.context),schema:await t,source:e.source,variableValues:e.variables})}}
|
package/lib/index.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
export { type Attachment, createAttachment, toAttachmentsRecord } from './attachments.js';
|
|
2
2
|
export { type ClientParams, KubunClient, type KubunClientType, KubunLightClient, KubunReadClient, type MutateGraphParams, type ReadClientParams, } from './client.js';
|
|
3
|
+
export type { GetRandomValues } from './graphql.js';
|
package/lib/mutations.d.ts
CHANGED
|
@@ -5,8 +5,14 @@ export type IdentityParams = {
|
|
|
5
5
|
identity: SigningIdentity;
|
|
6
6
|
};
|
|
7
7
|
export type SetMutationParams<Data extends DocumentData = DocumentData> = Omit<CreateSetMutationParams<Data>, 'issuer'> & IdentityParams;
|
|
8
|
-
export declare function signSetMutation<Data extends DocumentData = DocumentData>(params: SetMutationParams<Data>
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
export declare function signSetMutation<Data extends DocumentData = DocumentData>(params: SetMutationParams<Data> | {
|
|
9
|
+
identity: SigningIdentity;
|
|
10
|
+
mutation: SetDocumentMutation;
|
|
11
|
+
}): Promise<SignedToken<SetDocumentMutation>>;
|
|
12
|
+
export type ChangeMutationParams = Omit<CreateChangeMutationParams, 'issuer'> & IdentityParams;
|
|
13
|
+
export declare function signChangeMutation(params: ChangeMutationParams | {
|
|
14
|
+
identity: SigningIdentity;
|
|
15
|
+
mutation: ChangeDocumentMutation;
|
|
16
|
+
}): Promise<SignedToken<ChangeDocumentMutation>>;
|
|
11
17
|
export type RemoveMutationParams = Omit<CreateRemoveMutationParams, 'issuer'> & IdentityParams;
|
|
12
18
|
export declare function signRemoveMutation(params: RemoveMutationParams): Promise<SignedToken<ChangeDocumentMutation>>;
|
package/lib/mutations.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createChangeMutation as n,createRemoveMutation as t,createSetMutation as i}from"@kubun/mutation";export async function signSetMutation(n){let{identity:t,...e}=n,
|
|
1
|
+
import{createChangeMutation as n,createRemoveMutation as t,createSetMutation as i}from"@kubun/mutation";export async function signSetMutation(n){if("mutation"in n)return await n.identity.signToken(n.mutation);let{identity:t,...e}=n,o=await i({...e,issuer:t.id});return await t.signToken(o)}export function signChangeMutation(t){if("mutation"in t)return t.identity.signToken(t.mutation);let{identity:i,...e}=t,o=n({...e,issuer:i.id});return i.signToken(o)}export function signRemoveMutation(n){let{identity:i,...e}=n,o=t({...e,issuer:i.id});return i.signToken(o)}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kubun/client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.1",
|
|
4
4
|
"license": "see LICENSE.md",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"type": "module",
|
|
@@ -15,18 +15,18 @@
|
|
|
15
15
|
],
|
|
16
16
|
"sideEffects": false,
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@enkaku/client": "^0.13.
|
|
18
|
+
"@enkaku/client": "^0.13.1",
|
|
19
19
|
"@enkaku/codec": "^0.13.0",
|
|
20
20
|
"@enkaku/token": "0.13.0",
|
|
21
|
-
"graphql": "^16.
|
|
21
|
+
"graphql": "^16.13.1",
|
|
22
22
|
"multiformats": "^13.4.2",
|
|
23
|
-
"@kubun/id": "^0.
|
|
24
|
-
"@kubun/logger": "^0.
|
|
25
|
-
"@kubun/mutation": "^0.
|
|
23
|
+
"@kubun/id": "^0.6.0",
|
|
24
|
+
"@kubun/logger": "^0.6.1",
|
|
25
|
+
"@kubun/mutation": "^0.6.0"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
|
-
"@kubun/
|
|
29
|
-
"@kubun/
|
|
28
|
+
"@kubun/protocol": "^0.6.0",
|
|
29
|
+
"@kubun/graphql": "^0.6.1"
|
|
30
30
|
},
|
|
31
31
|
"scripts": {
|
|
32
32
|
"build:clean": "del lib",
|