1- const startDaemon = require ( 'hyperdrive-daemon' )
1+ const HyperdriveDaemon = require ( 'hyperdrive-daemon' )
22const { createMetadata } = require ( 'hyperdrive-daemon/lib/metadata' )
3- const { loadMetadata, HyperdriveClient } = require ( 'hyperdrive-daemon-client' )
3+ const constants = require ( 'hyperdrive-daemon-client/lib/constants' )
4+ const { HyperdriveClient } = require ( 'hyperdrive-daemon-client' )
45const datEncoding = require ( 'dat-encoding' )
56const pda = require ( 'pauls-dat-api' )
67
7- // constants
8- // =
9-
10- const DAEMON_STORAGE_PATH = require ( 'path' ) . join ( require ( 'os' ) . homedir ( ) , '.dat' )
11- const DAEMON_PORT = 3101
12-
138// typedefs
149// =
1510
@@ -18,6 +13,7 @@ const DAEMON_PORT = 3101
1813* @prop {number } sessionId
1914* @prop {Buffer } key
2015* @prop {string } url
16+ * @prop {string } domain
2117* @prop {boolean } writable
2218* @prop {Object } session
2319* @prop {function(): Promise<void> } session.close
@@ -57,36 +53,15 @@ var client // client object created by hyperdrive-daemon-client
5753// =
5854
5955exports . setup = async function ( ) {
60- // fetch daemon metadata from disk
61- var metadata
62- try {
63- metadata = await new Promise ( ( resolve , reject ) => {
64- loadMetadata ( ( err , metadata ) => {
65- if ( err ) reject ( err )
66- else resolve ( metadata )
67- } )
68- } )
69- } catch ( e ) {
70- await createMetadata ( `localhost:${ DAEMON_PORT } ` )
71- metadata = await new Promise ( ( resolve , reject ) => {
72- loadMetadata ( ( err , metadata ) => {
73- if ( err ) reject ( err )
74- else resolve ( metadata )
75- } )
76- } )
77- }
78-
7956 // instantiate the daemon
80- // TODO the daemon should be managed in an external promise
81- await startDaemon ( {
82- storage : DAEMON_STORAGE_PATH ,
83- port : DAEMON_PORT ,
84- bootstrap : [ ] ,
85- metadata
86- } )
57+ // TODO the daemon should be managed in an external process
58+ await createMetadata ( `localhost:${ constants . port } ` )
59+ var daemon = new HyperdriveDaemon ( )
60+ await daemon . start ( )
61+ process . on ( 'exit' , ( ) => daemon . stop ( ) )
8762
8863 // TODO
89- client = new HyperdriveClient ( metadata . endpoint , metadata . token )
64+ client = new HyperdriveClient ( )
9065 await client . ready ( )
9166}
9267
@@ -100,23 +75,23 @@ exports.setup = async function () {
10075 * @returns {Promise<DaemonDatArchive> }
10176 */
10277exports . createDatArchiveSession = async function ( opts ) {
103- const session = await client . drive . get ( opts )
104- const sessionId = session . id
105- const key = datEncoding . toStr ( session . opts . key )
78+ const drive = await client . drive . get ( opts )
79+ const key = datEncoding . toStr ( drive . key )
10680 var datArchive = {
10781 key : datEncoding . toBuf ( key ) ,
10882 url : `dat://${ key } ` ,
109- writable : true , // TODO
83+ writable : drive . writable ,
84+ domain : undefined ,
11085
11186 session : {
11287 async close ( ) {
113- return client . drive . close ( sessionId )
88+ return drive . close ( )
11489 } ,
11590 async publish ( ) {
116- return client . drive . publish ( sessionId )
91+ return drive . publish ( )
11792 } ,
11893 async unpublish ( ) {
119- return client . drive . unpublish ( sessionId )
94+ return drive . unpublish ( )
12095 }
12196 } ,
12297
@@ -136,27 +111,28 @@ exports.createDatArchiveSession = async function (opts) {
136111 if ( st ) fixStatObject ( st )
137112 cb ( err , st )
138113 } )
139- client . drive . stat ( sessionId , ...args )
114+ drive . stat ( ...args )
140115 } ,
141- // readFile: (...args) => client.drive.readFile(sessionId, ...args), TODO opts not accepted by daemon yet
142- readFile : ( path , opts , cb ) => {
143- client . drive . readFile ( sessionId , path , cb ? cb : opts )
116+ lstat ( path , opts = { } ) {
117+ opts . lstat = true
118+ return this . stat ( path , opts )
144119 } ,
120+ // readFile: (...args) => client.drive.readFile(sessionId, ...args), TODO opts not accepted by daemon yet
121+ readFile : ( path , opts , cb ) => drive . readFile ( path , cb ? cb : opts ) ,
145122 // writeFile: (...args) => client.drive.writeFile(sessionId, ...args), TODO encoding/opts not accepted by daemon yet
146- writeFile : ( path , content , encoding , cb ) => client . drive . writeFile ( sessionId , path , content , cb ) ,
147-
148- readdir : ( ...args ) => client . drive . readdir ( sessionId , ...args ) ,
149- // ready: makeArchiveProxyCbFn(key, version, 'ready'),
123+ writeFile : ( path , content , opts , cb ) => drive . writeFile ( path , content , cb ? cb : opts ) ,
150124 // download: makeArchiveProxyCbFn(key, version, 'download'),
151125 // history: makeArchiveProxyReadStreamFn(key, version, 'history'),
152- // createReadStream: makeArchiveProxyReadStreamFn(key, version, ' createReadStream' ),
126+ createReadStream : ( ... args ) => drive . createReadStream ( ... args ) ,
153127 // createDiffStream: makeArchiveProxyReadStreamFn(key, version, 'createDiffStream'),
154- // createWriteStream: makeArchiveProxyWriteStreamFn(key, version, 'createWriteStream'),
155- // unlink: makeArchiveProxyCbFn(key, version, 'unlink'),
156- // mkdir: makeArchiveProxyCbFn(key, version, 'mkdir'),
157- // rmdir: makeArchiveProxyCbFn(key, version, 'rmdir'),
158- // lstat: makeArchiveProxyCbFn(key, version, 'lstat'),
159- // access: makeArchiveProxyCbFn(key, version, 'access')
128+ createWriteStream : ( ...args ) => drive . createWriteStream ( ...args ) ,
129+ unlink : ( ...args ) => drive . unlink ( ...args ) ,
130+ readdir : ( ...args ) => drive . readdir ( ...args ) ,
131+ mkdir : ( ...args ) => drive . mkdir ( ...args ) ,
132+ rmdir : ( ...args ) => drive . rmdir ( ...args ) ,
133+ // access: makeArchiveProxyCbFn(key, version, 'access'),
134+ mount : ( ...args ) => drive . mount ( ...args ) ,
135+ unmount : ( ...args ) => drive . unmount ( ...args ) ,
160136 }
161137 datArchive . pda = createDatArchiveSessionPDA ( datArchive )
162138 return /** @type DaemonDatArchive */ ( datArchive )
0 commit comments