From 30da779c679ab0a5dfa85e97f896075c9b0ffcf9 Mon Sep 17 00:00:00 2001 From: Sergey Nikitin Date: Sat, 14 Jan 2023 17:41:49 +0000 Subject: [PATCH 1/2] restructure all StorageApi methods to have 1 arg --- archaeologist/src/background.ts | 28 ++-- archaeologist/src/storage_api_browser_ext.ts | 125 ++++++++---------- .../src/web-navigation/webNavigation.ts | 20 +-- elementary/src/NodeCard.tsx | 10 +- elementary/src/NodeCardReadOnly.tsx | 10 +- smuggler-api/src/api_datacenter.ts | 118 +++++++---------- smuggler-api/src/steroid/node.ts | 12 +- smuggler-api/src/steroid/steroid.ts | 4 +- smuggler-api/src/storage_api.ts | 118 ++++++++--------- truthsayer/src/card/ChainActionBar.tsx | 10 +- truthsayer/src/card/FullCardFootbar.tsx | 10 +- truthsayer/src/card/SmallCardFootbar.tsx | 10 +- truthsayer/src/card/Triptych.tsx | 24 ++-- .../MicrosoftOfficeOneDriveImporter.tsx | 13 +- 14 files changed, 247 insertions(+), 265 deletions(-) diff --git a/archaeologist/src/background.ts b/archaeologist/src/background.ts index 341f2df3..d3cb4f33 100644 --- a/archaeologist/src/background.ts +++ b/archaeologist/src/background.ts @@ -70,7 +70,7 @@ async function requestPageConnections(bookmark?: TNode) { try { // Fetch all edges for a given node const { from_edges: fromEdges, to_edges: toEdges } = await storage.edge.get( - bookmark.nid + { nid: bookmark.nid } ) // Gather node IDs of neighbour nodes to reqeust them const nids = fromEdges @@ -157,15 +157,15 @@ async function registerAttentionTime( log.debug('Register Attention Time', tab, totalSecondsEstimation) let total: TotalUserActivity try { - total = await storage.activity.external.add( - { id: origin.id }, - { + total = await storage.activity.external.add({ + origin: { id: origin.id }, + activity: { attention: { seconds: deltaSeconds, timestamp: unixtime.now(), }, - } - ) + }, + }) } catch (err) { if (!isAbortError(err)) { log.exception(err, 'Could not register external activity') @@ -497,15 +497,18 @@ async function uploadBrowserHistory(mode: BrowserHistoryUploadMode) { ) const epid = idOfBrowserHistoryOnThisDeviceAsExternalPipeline() - const currentProgress = await storage.external.ingestion.get(epid) + const currentProgress = await storage.external.ingestion.get({ epid }) log.debug('Progress until now:', currentProgress) const advanceIngestionProgress = lodash.throttle( mode.mode !== 'untracked' ? async (date: Date) => { - return storage.external.ingestion.advance(epid, { - ingested_until: unixtime.from(date), + return storage.external.ingestion.advance({ + epid, + new_progress: { + ingested_until: unixtime.from(date), + }, }) } : async (_: Date) => {}, @@ -676,8 +679,11 @@ async function uploadSingleHistoryItem( const resourceVisits: ResourceVisit[] = visits.map((visit) => { return { timestamp: unixtime.from(new Date(visit.visitTime ?? 0)) } }) - const total = await storage.activity.external.add(origin, { - visit: { visits: resourceVisits, reported_by: epid }, + const total = await storage.activity.external.add({ + origin, + activity: { + visit: { visits: resourceVisits, reported_by: epid }, + }, }) if (!isReadyToBeAutoSaved(total, 0)) { return diff --git a/archaeologist/src/storage_api_browser_ext.ts b/archaeologist/src/storage_api_browser_ext.ts index ec2a9c49..101d9998 100644 --- a/archaeologist/src/storage_api_browser_ext.ts +++ b/archaeologist/src/storage_api_browser_ext.ts @@ -18,8 +18,8 @@ import type { AddUserActivityRequest, AddUserExternalAssociationRequest, AdvanceExternalPipelineIngestionProgress, - CreateEdgeArgs, - CreateNodeArgs, + EdgeCreateArgs, + NodeCreateArgs, Eid, NewNodeResponse, Nid, @@ -36,6 +36,16 @@ import type { TotalUserActivity, UserExternalPipelineId, UserExternalPipelineIngestionProgress, + NodeGetArgs, + NodeGetByOriginArgs, + NodeUpdateArgs, + EdgeGetArgs, + ActivityExternalAddArgs, + ActivityExternalGetArgs, + ActivityAssociationRecordArgs, + ActivityAssociationGetArgs, + ExternalIngestionAdvanceArgs, + ExternalIngestionGetArgs, } from 'smuggler-api' import { INodeIterator, NodeUtil, EdgeUtil, NodeType } from 'smuggler-api' import { v4 as uuidv4 } from 'uuid' @@ -265,7 +275,7 @@ function generateEid(): Eid { async function createNode( store: YekLavStore, - args: CreateNodeArgs + args: NodeCreateArgs ): Promise { // TODO[snikitin@outlook.com] Below keys must become functional somehow. // const _created_via: NodeCreatedVia | undefined = args.created_via @@ -349,13 +359,10 @@ async function createNode( return { nid: node.nid } } -async function getNode({ - store, - nid, -}: { - store: YekLavStore - nid: Nid -}): Promise { +async function getNode( + store: YekLavStore, + { nid }: NodeGetArgs +): Promise { const yek: NidToNodeYek = { yek: { kind: 'nid->node', key: nid } } const lav: NidToNodeLav | undefined = await store.get(yek) if (lav == null) { @@ -365,13 +372,10 @@ async function getNode({ return NodeUtil.fromJson(value) } -async function getNodesByOrigin({ - store, - origin, -}: { - store: YekLavStore - origin: OriginId -}): Promise { +async function getNodesByOrigin( + store: YekLavStore, + { origin }: NodeGetByOriginArgs +): Promise { const yek: OriginToNidYek = { yek: { kind: 'origin->nid', key: origin } } const lav: OriginToNidLav | undefined = await store.get(yek) if (lav == null) { @@ -387,9 +391,9 @@ async function getNodesByOrigin({ async function getNodeBatch( store: YekLavStore, - req: NodeBatchRequestBody + args: NodeBatchRequestBody ): Promise { - const yeks: NidToNodeYek[] = req.nids.map((nid: Nid): NidToNodeYek => { + const yeks: NidToNodeYek[] = args.nids.map((nid: Nid): NidToNodeYek => { return { yek: { kind: 'nid->node', key: nid } } }) const lavs: NidToNodeLav[] = await store.get(yeks) @@ -400,7 +404,7 @@ async function getNodeBatch( async function updateNode( store: YekLavStore, - args: { nid: Nid } & NodePatchRequest + args: NodeUpdateArgs ): Promise { const yek: NidToNodeYek = { yek: { kind: 'nid->node', key: args.nid } } const lav: NidToNodeLav | undefined = await store.get(yek) @@ -460,7 +464,7 @@ class Iterator implements INodeIterator { async function createEdge( store: YekLavStore, - args: CreateEdgeArgs + args: EdgeCreateArgs ): Promise { // TODO[snikitin@outlook.com] Evaluate if ownership support is needed // and implement if yes @@ -501,7 +505,7 @@ async function createEdge( async function getNodeAllEdges( store: YekLavStore, - nid: string + { nid }: EdgeGetArgs ): Promise { const yek: NidToEdgeYek = { yek: { kind: 'nid->edge', key: nid } } const lav: NidToEdgeLav | undefined = await store.get(yek) @@ -521,10 +525,11 @@ async function getNodeAllEdges( async function addExternalUserActivity( store: YekLavStore, - origin: OriginId, - activity: AddUserActivityRequest + { origin, activity }: ActivityExternalAddArgs ): Promise { - const total: TotalUserActivity = await getExternalUserActivity(store, origin) + const total: TotalUserActivity = await getExternalUserActivity(store, { + origin, + }) if ('visit' in activity) { if (activity.visit == null) { return total @@ -555,7 +560,7 @@ async function addExternalUserActivity( async function getExternalUserActivity( store: YekLavStore, - origin: OriginId + { origin }: ActivityExternalGetArgs ): Promise { const yek: OriginToActivityYek = { yek: { kind: 'origin->activity', key: origin }, @@ -573,7 +578,7 @@ async function getExternalUserActivity( async function getUserIngestionProgress( store: YekLavStore, - epid: UserExternalPipelineId + { epid }: ExternalIngestionGetArgs ): Promise { const yek: ExtPipelineYek = { yek: { kind: 'ext-pipe->progress', key: epid }, @@ -594,11 +599,10 @@ async function getUserIngestionProgress( async function advanceUserIngestionProgress( store: YekLavStore, - epid: UserExternalPipelineId, - new_progress: AdvanceExternalPipelineIngestionProgress + { epid, new_progress }: ExternalIngestionAdvanceArgs ): Promise { const progress: UserExternalPipelineIngestionProgress = - await getUserIngestionProgress(store, epid) + await getUserIngestionProgress(store, { epid }) progress.ingested_until = new_progress.ingested_until const yek: ExtPipelineYek = { @@ -627,22 +631,15 @@ export function makeBrowserExtStorageApi( return { node: { - get: ({ nid }: { nid: string; signal?: AbortSignal }) => - getNode({ store, nid }), - getByOrigin: ({ origin }: { origin: OriginId; signal?: AbortSignal }) => - getNodesByOrigin({ store, origin }), - update: ( - args: { nid: string } & NodePatchRequest, - _signal?: AbortSignal - ) => updateNode(store, args), - create: (args: CreateNodeArgs, _signal?: AbortSignal) => - createNode(store, args), + get: (args: NodeGetArgs) => getNode(store, args), + getByOrigin: (args: NodeGetByOriginArgs) => getNodesByOrigin(store, args), + update: (args: NodeUpdateArgs) => updateNode(store, args), + create: (args: NodeCreateArgs) => createNode(store, args), iterate: () => new Iterator(store), delete: throwUnimplementedError('node.delete'), bulkDelete: throwUnimplementedError('node.bulkdDelete'), batch: { - get: (req: NodeBatchRequestBody, _signal?: AbortSignal) => - getNodeBatch(store, req), + get: (args: NodeBatchRequestBody) => getNodeBatch(store, args), }, url: throwUnimplementedError('node.url'), }, @@ -663,48 +660,32 @@ export function makeBrowserExtStorageApi( }, }, edge: { - create: (args: CreateEdgeArgs) => createEdge(store, args), - get: (nid: string, _signal?: AbortSignal) => getNodeAllEdges(store, nid), + create: (args: EdgeCreateArgs) => createEdge(store, args), + get: (args: EdgeGetArgs) => getNodeAllEdges(store, args), sticky: throwUnimplementedError('edge.sticky'), delete: throwUnimplementedError('edge.delete'), }, activity: { external: { - add: ( - origin: OriginId, - activity: AddUserActivityRequest, - _signal?: AbortSignal - ) => addExternalUserActivity(store, origin, activity), - get: (origin: OriginId, _signal?: AbortSignal) => - getExternalUserActivity(store, origin), + add: (args: ActivityExternalAddArgs) => + addExternalUserActivity(store, args), + get: (args: ActivityExternalGetArgs) => + getExternalUserActivity(store, args), }, association: { // TODO[snikitin@outlook.com] Replace stubs with real implementation - record: ( - _origin: { - from: OriginId - to: OriginId - }, - _body: AddUserExternalAssociationRequest, - _signal?: AbortSignal - ) => Promise.resolve({ ack: true }), - get: ( - _args: { - origin: OriginId - }, - _signal?: AbortSignal - ) => Promise.resolve({ from: [], to: [] }), + record: (_args: ActivityAssociationRecordArgs) => + Promise.resolve({ ack: true }), + get: (_args: ActivityAssociationGetArgs) => + Promise.resolve({ from: [], to: [] }), }, }, external: { ingestion: { - get: (epid: UserExternalPipelineId, _signal?: AbortSignal) => - getUserIngestionProgress(store, epid), - advance: ( - epid: UserExternalPipelineId, - new_progress: AdvanceExternalPipelineIngestionProgress, - _signal?: AbortSignal - ) => advanceUserIngestionProgress(store, epid, new_progress), + get: (args: ExternalIngestionGetArgs) => + getUserIngestionProgress(store, args), + advance: (args: ExternalIngestionAdvanceArgs) => + advanceUserIngestionProgress(store, args), }, }, } diff --git a/archaeologist/src/web-navigation/webNavigation.ts b/archaeologist/src/web-navigation/webNavigation.ts index 1b51f64c..88f5648a 100644 --- a/archaeologist/src/web-navigation/webNavigation.ts +++ b/archaeologist/src/web-navigation/webNavigation.ts @@ -60,34 +60,34 @@ async function reportAssociation( ): Promise { const { id: fromId, stableUrl: fromUrl } = genOriginId(fromUrlUnstable) const { id: toId, stableUrl: toUrl } = genOriginId(toUrlUnstable) - await storage.activity.association.record( - { + await storage.activity.association.record({ + origin: { from: { id: fromId }, to: { id: toId }, }, - { + body: { association: { web_transition: { from_url: fromUrl, to_url: toUrl, }, }, - } - ) + }, + }) } async function reportVisit( storage: StorageApi, origin: OriginIdentity ): Promise { - await storage.activity.external.add( - { id: origin.id }, - { + await storage.activity.external.add({ + origin: { id: origin.id }, + activity: { visit: { visits: [{ timestamp: unixtime.now() }], }, - } - ) + }, + }) } const onCompletedListener = async ( diff --git a/elementary/src/NodeCard.tsx b/elementary/src/NodeCard.tsx index 39df21bb..6223c520 100644 --- a/elementary/src/NodeCard.tsx +++ b/elementary/src/NodeCard.tsx @@ -52,10 +52,12 @@ export function NodeCardFetching({ const fetchNodeAbortController = new AbortController() useAsyncEffect( async (isMounted) => { - const n = await storage.node.get({ - nid, - signal: fetchNodeAbortController.signal, - }) + const n = await storage.node.get( + { + nid, + }, + fetchNodeAbortController.signal + ) if (isMounted()) { setNode(n) } diff --git a/elementary/src/NodeCardReadOnly.tsx b/elementary/src/NodeCardReadOnly.tsx index e3ab10f8..5b5988aa 100644 --- a/elementary/src/NodeCardReadOnly.tsx +++ b/elementary/src/NodeCardReadOnly.tsx @@ -56,10 +56,12 @@ export function NodeCardReadOnlyFetching({ const fetchNodeAbortController = new AbortController() useAsyncEffect( async (isMounted) => { - const n = await storage.node.get({ - nid, - signal: fetchNodeAbortController.signal, - }) + const n = await storage.node.get( + { + nid, + }, + fetchNodeAbortController.signal + ) if (isMounted()) { setNode(n) } diff --git a/smuggler-api/src/api_datacenter.ts b/smuggler-api/src/api_datacenter.ts index e03ff504..f8d9b4b1 100644 --- a/smuggler-api/src/api_datacenter.ts +++ b/smuggler-api/src/api_datacenter.ts @@ -32,11 +32,25 @@ import { Nid, } from './types' import type { - CreateNodeArgs, + NodeCreateArgs, NodeBatchRequestBody, - CreateEdgeArgs, + EdgeCreateArgs, StorageApi, BlobUploadRequestArgs, + NodeDeleteArgs, + NodeBulkDeleteArgs, + NodeGetArgs, + NodeGetByOriginArgs, + NodeUpdateArgs, + EdgeGetArgs, + EdgeStickyArgs, + EdgeDeleteArgs, + ActivityExternalAddArgs, + ActivityExternalGetArgs, + ActivityAssociationRecordArgs, + ActivityAssociationGetArgs, + ExternalIngestionGetArgs, + ExternalIngestionAdvanceArgs, } from './storage_api' import { makeUrl } from './api_url' @@ -66,7 +80,7 @@ async function createNode( origin, created_via, created_at, - }: CreateNodeArgs, + }: NodeCreateArgs, signal?: AbortSignal ): Promise { signal = signal || undefined @@ -152,13 +166,10 @@ function makeDirectUrl(nid: string): string { return makeUrl(`/n/${nid}`) } -async function deleteNode({ - nid, - signal, -}: { - nid: string +async function deleteNode( + { nid }: NodeDeleteArgs, signal?: AbortSignal -}): Promise { +): Promise { verifyIsNotNull(nid) const resp = await fetch(makeUrl(`/node/${nid}`), { method: 'DELETE', @@ -170,13 +181,10 @@ async function deleteNode({ throw _makeResponseError(resp) } -async function bulkDeleteNodes({ - createdVia, - signal, -}: { - createdVia: NodeCreatedVia +async function bulkDeleteNodes( + { createdVia }: NodeBulkDeleteArgs, signal?: AbortSignal -}): Promise { +): Promise { const headers = { 'Content-type': MimeType.JSON, } @@ -193,13 +201,10 @@ async function bulkDeleteNodes({ throw _makeResponseError(resp) } -async function getNode({ - nid, - signal, -}: { - nid: string +async function getNode( + { nid }: NodeGetArgs, signal?: AbortSignal -}): Promise { +): Promise { const res = await fetch(makeUrl(`/node/${nid}`), { method: 'GET', signal }) if (!res.ok) { throw _makeResponseError(res) @@ -227,12 +232,10 @@ async function getNode({ return node } -async function getNodesByOrigin({ - origin, -}: { - origin: OriginId - signal?: AbortSignal -}): Promise { +async function getNodesByOrigin( + { origin }: NodeGetByOriginArgs, + _signal?: AbortSignal +): Promise { const sliceAll: GetNodeSliceArgs = { start_time: 0, // since the beginning of time bucket_time_size: 366 * 24 * 60 * 60, @@ -266,7 +269,7 @@ async function getNodeBatch( } async function updateNode( - args: { nid: Nid } & NodePatchRequest, + args: NodeUpdateArgs, signal?: AbortSignal ): Promise { const { nid, text, index_text, preserve_update_time } = args @@ -387,11 +390,10 @@ function _getNodesSliceIter({ ) } -async function createEdge({ - from, - to, - signal, -}: CreateEdgeArgs): Promise { +async function createEdge( + { from, to }: EdgeCreateArgs, + signal?: AbortSignal +): Promise { verifyIsNotNull(from) verifyIsNotNull(to) const req = { @@ -419,7 +421,7 @@ async function createEdge({ } async function getNodeAllEdges( - nid: string, + { nid }: EdgeGetArgs, signal?: AbortSignal ): Promise { const resp = await fetch(makeUrl(`/node/${nid}/edge`), { @@ -433,17 +435,10 @@ async function getNodeAllEdges( return edges as NodeEdges } -async function switchEdgeStickiness({ - eid, - on, - off, - signal, -}: { - eid: string - on: Optional - off: Optional - signal: AbortSignal -}): Promise { +async function switchEdgeStickiness( + { eid, on, off }: EdgeStickyArgs, + signal?: AbortSignal +): Promise { verifyIsNotNull(eid) const req = { is_sticky: on != null ? on : !off, @@ -463,13 +458,10 @@ async function switchEdgeStickiness({ return await resp.json() } -async function deleteEdge({ - eid, - signal, -}: { - eid: string - signal: AbortSignal -}): Promise { +async function deleteEdge( + { eid }: EdgeDeleteArgs, + signal?: AbortSignal +): Promise { verifyIsNotNull(eid) const req = { eid } const resp = await fetch(makeUrl(`/node/x/edge`), { @@ -549,8 +541,7 @@ function _makeExternalUserActivityUrl(origin: OriginId): string { } async function addExternalUserActivity( - origin: OriginId, - activity: AddUserActivityRequest, + { origin, activity }: ActivityExternalAddArgs, signal?: AbortSignal ): Promise { const resp = await fetch(_makeExternalUserActivityUrl(origin), { @@ -569,7 +560,7 @@ async function addExternalUserActivity( } async function getExternalUserActivity( - origin: OriginId, + { origin }: ActivityExternalGetArgs, signal?: AbortSignal ): Promise { const resp = await fetch(_makeExternalUserActivityUrl(origin), { @@ -586,11 +577,7 @@ async function getExternalUserActivity( } async function recordExternalAssociation( - origin: { - from: OriginId - to: OriginId - }, - body: AddUserExternalAssociationRequest, + { origin, body }: ActivityAssociationRecordArgs, signal?: AbortSignal ): Promise { const resp = await fetch( @@ -612,11 +599,7 @@ async function recordExternalAssociation( } async function getExternalAssociation( - { - origin, - }: { - origin: OriginId - }, + { origin }: ActivityAssociationGetArgs, signal?: AbortSignal ): Promise { const resp = await fetch(makeUrl(`/external/association/${origin.id}`), { @@ -715,7 +698,7 @@ async function passwordChange( } async function getUserIngestionProgress( - epid: UserExternalPipelineId, + { epid }: ExternalIngestionGetArgs, signal?: AbortSignal ): Promise { const resp = await fetch( @@ -734,8 +717,7 @@ async function getUserIngestionProgress( ) } async function advanceUserIngestionProgress( - epid: UserExternalPipelineId, - new_progress: AdvanceExternalPipelineIngestionProgress, + { epid, new_progress }: ExternalIngestionAdvanceArgs, signal?: AbortSignal ): Promise { const resp = await fetch( diff --git a/smuggler-api/src/steroid/node.ts b/smuggler-api/src/steroid/node.ts index 1a74a42c..252e74e3 100644 --- a/smuggler-api/src/steroid/node.ts +++ b/smuggler-api/src/steroid/node.ts @@ -21,7 +21,7 @@ import { genOriginId, } from 'armoury' import type { Optional } from 'armoury' -import { CreateNodeArgs, StorageApi } from '../storage_api' +import { NodeCreateArgs, StorageApi } from '../storage_api' import { NodeUtil } from '../typesutil' import lodash from 'lodash' @@ -155,7 +155,7 @@ export function isUniqueLookupKey( return false } -function lookupKeyOf(args: CreateNodeArgs): NodeLookupKey | undefined { +function lookupKeyOf(args: NodeCreateArgs): NodeLookupKey | undefined { // TODO[snikitin@outlook.com]: This ideally should match with NodeUtil.isWebBookmark(), // NodeUtil.isWebQuote() etc but unclear how to reliably do so. if (args.extattrs?.web?.url) { @@ -168,7 +168,7 @@ function lookupKeyOf(args: CreateNodeArgs): NodeLookupKey | undefined { export async function createOrUpdateNode( storage: StorageApi, - args: CreateNodeArgs, + args: NodeCreateArgs, signal?: AbortSignal ): Promise { const lookupKey = lookupKeyOf(args) @@ -205,7 +205,7 @@ export async function createOrUpdateNode( /** * At the time of this writing some datapoints that can be specified at * node creation can't be modified at node update due to API differences - * (@see CreateNodeArgs and @see UpdateNodeArgs). + * (@see NodeCreateArgs and @see UpdateNodeArgs). * This presents a problem for @see createOrUpdate because some of the datapoints * caller passed in will be ignored in 'update' case, which is not obvious * and would be unexpected by the caller. @@ -213,7 +213,7 @@ export async function createOrUpdateNode( * different from node's current state. If they are the same then update will * not result in anything unexpected. */ -function describeWhatWouldPreventNodeUpdate(args: CreateNodeArgs, node: TNode) { +function describeWhatWouldPreventNodeUpdate(args: NodeCreateArgs, node: TNode) { let diff = '' const extattrsFieldsOfLittleConsequence = ['description'] const updatableExtattrsFields = ['text', 'index_text'] @@ -311,7 +311,7 @@ export async function lookupNodes( bucket_time_size: 366 * 24 * 60 * 60, } if ('nid' in key) { - return storage.node.get({ nid: key.nid, signal }) + return storage.node.get({ nid: key.nid }, signal) } else if ('webBookmark' in key) { const { id, stableUrl } = genOriginId(key.webBookmark.url) const nodes: TNode[] = await storage.node.getByOrigin({ origin: { id } }) diff --git a/smuggler-api/src/steroid/steroid.ts b/smuggler-api/src/steroid/steroid.ts index 2459be13..59a65436 100644 --- a/smuggler-api/src/steroid/steroid.ts +++ b/smuggler-api/src/steroid/steroid.ts @@ -12,7 +12,7 @@ * wrapper around individual smuggler's REST API) */ -import { CreateNodeArgs, StorageApi } from '../storage_api' +import { NodeCreateArgs, StorageApi } from '../storage_api' import { TNode } from '../types' import { nodeIndexFromFile, @@ -51,7 +51,7 @@ export const steroid = (storage: StorageApi) => { }, }, node: { - createOrUpdate: (args: CreateNodeArgs, signal?: AbortSignal) => + createOrUpdate: (args: NodeCreateArgs, signal?: AbortSignal) => createOrUpdateNode(storage, args, signal), /** * Lookup all the nodes that match a given key. For unique lookup keys either diff --git a/smuggler-api/src/storage_api.ts b/smuggler-api/src/storage_api.ts index 9bbfdc0b..65da0055 100644 --- a/smuggler-api/src/storage_api.ts +++ b/smuggler-api/src/storage_api.ts @@ -25,9 +25,15 @@ import { UserExternalPipelineId, UserExternalPipelineIngestionProgress, AdvanceExternalPipelineIngestionProgress, + Eid, } from './types' -export type CreateNodeArgs = { +export type NodeGetArgs = { nid: Nid } +export type NodeGetByOriginArgs = { origin: OriginId } +export type NodeUpdateArgs = { nid: Nid } & NodePatchRequest +export type NodeDeleteArgs = { nid: Nid } +export type NodeBulkDeleteArgs = { createdVia: NodeCreatedVia } +export type NodeCreateArgs = { text: NodeTextData from_nid?: Nid[] to_nid?: Nid[] @@ -50,57 +56,63 @@ export type BlobUploadRequestArgs = { createdVia: NodeCreatedVia } -export type CreateEdgeArgs = { - from: Nid - to: Nid - signal: AbortSignal -} - -export type SwitchEdgeStickinessArgs = { +export type EdgeGetArgs = { nid: Nid } +export type EdgeCreateArgs = { from: Nid; to: Nid } +export type EdgeStickyArgs = { eid: string on: Optional off: Optional - signal: AbortSignal +} +export type EdgeDeleteArgs = { eid: Eid } + +export type ActivityExternalAddArgs = { + origin: OriginId + activity: AddUserActivityRequest +} +export type ActivityExternalGetArgs = { origin: OriginId } + +export type ActivityAssociationRecordArgs = { + origin: { + from: OriginId + to: OriginId + } + body: AddUserExternalAssociationRequest +} +export type ActivityAssociationGetArgs = { + origin: OriginId +} + +export type ExternalIngestionGetArgs = { + epid: UserExternalPipelineId +} +export type ExternalIngestionAdvanceArgs = { + epid: UserExternalPipelineId + new_progress: AdvanceExternalPipelineIngestionProgress } export type StorageApi = { node: { - get: ({ nid, signal }: { nid: Nid; signal?: AbortSignal }) => Promise - getByOrigin: ({ - origin, - signal, - }: { - origin: OriginId - signal?: AbortSignal - }) => Promise - update: ( - args: { nid: Nid } & NodePatchRequest, + get: (args: NodeGetArgs, signal?: AbortSignal) => Promise + getByOrigin: ( + args: NodeGetByOriginArgs, signal?: AbortSignal - ) => Promise + ) => Promise + update: (args: NodeUpdateArgs, signal?: AbortSignal) => Promise create: ( - args: CreateNodeArgs, + args: NodeCreateArgs, signal?: AbortSignal ) => Promise iterate: () => INodeIterator - delete: ({ - nid, - signal, - }: { - nid: Nid - signal?: AbortSignal - }) => Promise - bulkDelete: ({ - createdVia, - signal, - }: { - createdVia: NodeCreatedVia + delete: (args: NodeDeleteArgs, signal?: AbortSignal) => Promise + bulkDelete: ( + args: NodeBulkDeleteArgs, signal?: AbortSignal - }) => Promise + ) => Promise batch: { // TODO[snikitin@outlook.com] consider merging this into lookup() as another // @see NodeLookupKey option get: ( - req: NodeBatchRequestBody, + args: NodeBatchRequestBody, signal?: AbortSignal ) => Promise } @@ -133,44 +145,29 @@ export type StorageApi = { } } edge: { - create: (args: CreateEdgeArgs) => Promise - get: (nid: Nid, signal?: AbortSignal) => Promise - sticky: (args: SwitchEdgeStickinessArgs) => Promise - delete: ({ - eid, - signal, - }: { - eid: string - signal: AbortSignal - }) => Promise + create: (args: EdgeCreateArgs, signal?: AbortSignal) => Promise + get: (args: EdgeGetArgs, signal?: AbortSignal) => Promise + sticky: (args: EdgeStickyArgs, signal?: AbortSignal) => Promise + delete: (args: EdgeDeleteArgs, signal?: AbortSignal) => Promise } activity: { external: { add: ( - origin: OriginId, - activity: AddUserActivityRequest, + args: ActivityExternalAddArgs, signal?: AbortSignal ) => Promise get: ( - origin: OriginId, + args: ActivityExternalGetArgs, signal?: AbortSignal ) => Promise } association: { record: ( - origin: { - from: OriginId - to: OriginId - }, - body: AddUserExternalAssociationRequest, + args: ActivityAssociationRecordArgs, signal?: AbortSignal ) => Promise get: ( - { - origin, - }: { - origin: OriginId - }, + args: ActivityAssociationGetArgs, signal?: AbortSignal ) => Promise } @@ -178,12 +175,11 @@ export type StorageApi = { external: { ingestion: { get: ( - epid: UserExternalPipelineId, + args: ExternalIngestionGetArgs, signal?: AbortSignal ) => Promise advance: ( - epid: UserExternalPipelineId, - new_progress: AdvanceExternalPipelineIngestionProgress, + args: ExternalIngestionAdvanceArgs, signal?: AbortSignal ) => Promise } diff --git a/truthsayer/src/card/ChainActionBar.tsx b/truthsayer/src/card/ChainActionBar.tsx index 65493728..9040a1a6 100644 --- a/truthsayer/src/card/ChainActionBar.tsx +++ b/truthsayer/src/card/ChainActionBar.tsx @@ -48,10 +48,12 @@ async function cloneNode({ return null } const node: Optional = await storage.node - .get({ - nid, - signal: abortSignal, - }) + .get( + { + nid, + }, + abortSignal + ) .catch((err) => { if (isAbortError(err)) { return null diff --git a/truthsayer/src/card/FullCardFootbar.tsx b/truthsayer/src/card/FullCardFootbar.tsx index b175a8bd..a650cd11 100644 --- a/truthsayer/src/card/FullCardFootbar.tsx +++ b/truthsayer/src/card/FullCardFootbar.tsx @@ -111,10 +111,12 @@ class PrivateFullCardFootbarImpl extends React.Component< handleDeleteNote = () => { const toaster = this.props.context.toaster this.props.context.storage.node - .delete({ - nid: this.props.nid, - signal: this.deleteAbortController.signal, - }) + .delete( + { + nid: this.props.nid, + }, + this.deleteAbortController.signal + ) .then(() => { toaster.push( { const eid = this.props.edge.eid this.context.storage.edge - .delete({ - eid, - signal: this.deleteEdgeAbortController.signal, - }) + .delete( + { + eid, + }, + this.deleteEdgeAbortController.signal + ) .then((res) => { if (res) { this.props.cutOffRef(eid) diff --git a/truthsayer/src/card/Triptych.tsx b/truthsayer/src/card/Triptych.tsx index 43ca76f8..95b09426 100644 --- a/truthsayer/src/card/Triptych.tsx +++ b/truthsayer/src/card/Triptych.tsx @@ -196,7 +196,7 @@ export class Triptych extends React.Component { }) try { const { from_edges, to_edges } = await this.context.storage.edge.get( - this.props.nid, + { nid: this.props.nid }, this.fetchToEdgesAbortController.signal ) this.setState({ @@ -217,10 +217,12 @@ export class Triptych extends React.Component { this.setState({ node: null }) const nid = this.props.nid try { - const node = await this.context.storage.node.get({ - nid, - signal: this.fetchNodeAbortController.signal, - }) + const node = await this.context.storage.node.get( + { + nid, + }, + this.fetchNodeAbortController.signal + ) this.setState({ node }) } catch (err) { if (!isAbortError(err)) { @@ -264,11 +266,13 @@ export class Triptych extends React.Component { addRef = async ({ from, to }: { from: string; to: string }) => { const { edges_right, edges_left } = this.state const { nid } = this.props - const edge = await this.context.storage.edge.create({ - from, - to, - signal: this.createEdgeAbortController.signal, - }) + const edge = await this.context.storage.edge.create( + { + from, + to, + }, + this.createEdgeAbortController.signal + ) if (to === nid) { this.setState({ edges_left: edges_left.concat([edge]), diff --git a/truthsayer/src/external-import/third-party-filesystem/MicrosoftOfficeOneDriveImporter.tsx b/truthsayer/src/external-import/third-party-filesystem/MicrosoftOfficeOneDriveImporter.tsx index 63e09fcb..4c866d32 100644 --- a/truthsayer/src/external-import/third-party-filesystem/MicrosoftOfficeOneDriveImporter.tsx +++ b/truthsayer/src/external-import/third-party-filesystem/MicrosoftOfficeOneDriveImporter.tsx @@ -14,7 +14,7 @@ import { MdiInsertLink, MdiLinkOff, MdiSync, MdiCloudSync } from 'elementary' import { errorise, genOriginId, log } from 'armoury' import { AccountInterface, - CreateNodeArgs, + NodeCreateArgs, steroid, UserExternalPipelineId, NodeType, @@ -58,7 +58,7 @@ async function uploadFilesFromFolder( storage: StorageApi, progressUpdateCallback: (filesToUploadLeft: number) => void ) { - const current_progress = await storage.external.ingestion.get(epid) + const current_progress = await storage.external.ingestion.get({ epid }) const files = await FsModificationQueue.make( fs, current_progress.ingested_until, @@ -82,7 +82,7 @@ async function uploadFilesFromFolder( ...(await extattrsFromFile(file, contents)), } const origin = genOriginId(file.webUrl) - const node: CreateNodeArgs = { + const node: NodeCreateArgs = { text: makeEmptyNodeTextData(), index_text, extattrs, @@ -96,8 +96,11 @@ async function uploadFilesFromFolder( const response = await steroid(storage).node.createOrUpdate(node) log.debug(`Response to node creation/update: ${JSON.stringify(response)}`) } - await storage.external.ingestion.advance(epid, { - ingested_until: batch[0].lastModTimestamp, + await storage.external.ingestion.advance({ + epid, + new_progress: { + ingested_until: batch[0].lastModTimestamp, + }, }) filesLeft -= batch.length progressUpdateCallback(filesLeft) From 5126435376e94206429272392f88298e2dfa77d8 Mon Sep 17 00:00:00 2001 From: Sergey Nikitin Date: Sun, 15 Jan 2023 10:08:34 +0000 Subject: [PATCH 2/2] lint --- archaeologist/src/storage_api_browser_ext.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/archaeologist/src/storage_api_browser_ext.ts b/archaeologist/src/storage_api_browser_ext.ts index 101d9998..847fbf48 100644 --- a/archaeologist/src/storage_api_browser_ext.ts +++ b/archaeologist/src/storage_api_browser_ext.ts @@ -15,9 +15,6 @@ import type { Ack, - AddUserActivityRequest, - AddUserExternalAssociationRequest, - AdvanceExternalPipelineIngestionProgress, EdgeCreateArgs, NodeCreateArgs, Eid, @@ -26,7 +23,6 @@ import type { NodeBatch, NodeBatchRequestBody, NodeEdges, - NodePatchRequest, OriginId, StorageApi, TEdge,