瀏覽代碼

Merge branch 'master' of vcs.bsch.ca:blake/bank-client-js

user 6 年之前
父節點
當前提交
0fe8c9f89b

+ 6 - 2
lib/index.d.ts

@@ -6,6 +6,11 @@ export declare class BankClient {
     private ipfsUrlBase;
     private storage;
     private webClient;
+    static parseBankLink(bankLink: string): {
+        host: string | undefined;
+        address: string;
+        topic: string;
+    };
     private privateKey;
     private bootstrapPromise;
     private bootstrapResult;
@@ -17,7 +22,7 @@ export declare class BankClient {
     upload(params: UploadItemParameters): Promise<any>;
     uploadSlimJSON(item: any): Promise<any>;
     uploadSlimText(item: string): Promise<any>;
-    appendBank(bankLink: string, itemHash: string): Promise<void>;
+    appendBank(bankAddress: string, bankTopic: string, itemHash: string): Promise<void>;
     retrievePrivate(peerAddr: string, topic: string): Promise<string>;
     appendPrivate(peerAddr: string, topic: string, hash: string): Promise<void>;
     getOrCreateContact(peerAddr: string, contact: string, type: string): Promise<any>;
@@ -25,5 +30,4 @@ export declare class BankClient {
     private getItemsForCommaList;
     private getPriv;
     private makePlaintextPayload;
-    private parseBankLink;
 }

+ 24 - 13
lib/index.js

@@ -24,6 +24,25 @@ class BankClient {
         this.storage = storage;
         this.webClient = webClient;
     }
+    static parseBankLink(bankLink) {
+        if (!bankLink.startsWith('bank:')) {
+            throw new Error('address must start with bank:');
+        }
+        const deprefixed = bankLink.substring(5);
+        let host;
+        let address;
+        let topic;
+        if (deprefixed[0] === '/' && deprefixed[1] === '/') {
+            [host, address, topic] = deprefixed.substring(2).split('/');
+        }
+        else {
+            [address, topic] = deprefixed.split('/');
+        }
+        if (!address || !topic) {
+            throw new Error('cannot parse address and topic');
+        }
+        return { host, address, topic };
+    }
     getPub() {
         return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
             yield this.bootstrap();
@@ -122,6 +141,9 @@ class BankClient {
                     }
                 };
             }
+            if (params.links) {
+                formData.links = JSON.stringify(params.links);
+            }
             for (const attr of ['title', 'text', 'type']) {
                 if (params[attr] != null) {
                     formData[attr] = params[attr];
@@ -164,11 +186,10 @@ class BankClient {
             return uploadResponse.hash;
         });
     }
-    appendBank(bankLink, itemHash) {
+    appendBank(bankAddress, bankTopic, itemHash) {
         return __awaiter(this, void 0, void 0, function* () {
             const payload = yield this.makePlaintextPayload(itemHash);
-            const { address, topic } = this.parseBankLink(bankLink);
-            const topicURL = this.urlBase + '/bank/private/' + encodeURIComponent(address) + '/' + encodeURIComponent(topic);
+            const topicURL = this.urlBase + '/bank/private/' + encodeURIComponent(bankAddress) + '/' + encodeURIComponent(bankTopic);
             yield this.webClient.requestJSON({
                 body: payload,
                 method: 'PUT',
@@ -282,16 +303,6 @@ class BankClient {
             }));
         }));
     }
-    parseBankLink(bankLink) {
-        if (!bankLink.startsWith('bank:')) {
-            throw new Error('address must start with bank:');
-        }
-        const [address, topic] = bankLink.substring(5).split('/');
-        if (!address || !topic) {
-            throw new Error('cannot parse address and topic');
-        }
-        return { address, topic };
-    }
 }
 exports.BankClient = BankClient;
 //# sourceMappingURL=index.js.map

文件差異過大導致無法顯示
+ 1 - 1
lib/index.js.map


+ 5 - 0
lib/upload-item-link.d.ts

@@ -0,0 +1,5 @@
+export interface UploadItemLink {
+    rel: string;
+    target: string;
+    text?: string;
+}

+ 3 - 0
lib/upload-item-link.js

@@ -0,0 +1,3 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=upload-item-link.js.map

+ 1 - 0
lib/upload-item-link.js.map

@@ -0,0 +1 @@
+{"version":3,"file":"upload-item-link.js","sourceRoot":"","sources":["../src/upload-item-link.ts"],"names":[],"mappings":""}

+ 2 - 0
lib/upload-item-parameters.d.ts

@@ -1,3 +1,4 @@
+import { UploadItemLink } from "./upload-item-link";
 export interface UploadItemParameters {
     type?: string;
     title: string;
@@ -6,4 +7,5 @@ export interface UploadItemParameters {
     fileData?: File;
     thumbFileName?: string;
     thumbFileData?: string;
+    links?: UploadItemLink[];
 }

+ 26 - 16
src/index.ts

@@ -10,10 +10,29 @@ import WebClientNode from './webclient-node';
 
 export class BankClient {
 
+  public static parseBankLink(bankLink: string) {
+    if (!bankLink.startsWith('bank:')) {
+      throw new Error('address must start with bank:');
+    }
+    const deprefixed = bankLink.substring(5);
+    let host: string | undefined;
+    let address: string;
+    let topic: string;
+    if (deprefixed[0] === '/' && deprefixed[1] === '/') {
+      [ host, address, topic ] = deprefixed.substring(2).split('/');  
+    } else {
+      [ address, topic ] = deprefixed.split('/');
+    }
+    if (!address || !topic) {
+      throw new Error('cannot parse address and topic');
+    }
+    return { host, address, topic };
+  }
+
     private privateKey: RsaPrivateKey | undefined;
     private bootstrapPromise: any;
     private bootstrapResult: any;
-
+    
     constructor(private urlBase: string, private ipfsUrlBase: string, private storage: Storage = new Storage('bankClient'), private webClient: IWebClient = new WebClientNode()) {
 
     }
@@ -115,12 +134,16 @@ export class BankClient {
           }
         };
       }
+      if (params.links) {
+        formData.links = JSON.stringify(params.links);
+      }
       for (const attr of ['title', 'text', 'type']) {
         if (params[attr] != null) {
           formData[attr] = params[attr];
         }
       }
       // console.log('formData', formData);
+
       const uploadResponse: any = await this.webClient.requestJSON({
         formData,
         method: 'POST',
@@ -157,10 +180,9 @@ export class BankClient {
       return uploadResponse.hash;
     }
 
-    public async appendBank(bankLink: string, itemHash: string): Promise<void> {
+    public async appendBank(bankAddress: string, bankTopic: string, itemHash: string): Promise<void> {
       const payload = await this.makePlaintextPayload(itemHash);
-      const { address, topic } = this.parseBankLink(bankLink);
-      const topicURL = this.urlBase + '/bank/private/' + encodeURIComponent(address) + '/' + encodeURIComponent(topic);
+      const topicURL = this.urlBase + '/bank/private/' + encodeURIComponent(bankAddress) + '/' + encodeURIComponent(bankTopic);
       await this.webClient.requestJSON({
         body: payload,
         method: 'PUT',
@@ -272,16 +294,4 @@ export class BankClient {
         });
       });
     }
-
-    private parseBankLink(bankLink: string) {
-      if (!bankLink.startsWith('bank:')) {
-        throw new Error('address must start with bank:');
-      }
-      const [ address, topic ] = bankLink.substring(5).split('/');
-      if (!address || !topic) {
-        throw new Error('cannot parse address and topic');
-      }
-      return { address, topic };
-    }
-  
 }

+ 5 - 0
src/upload-item-link.ts

@@ -0,0 +1,5 @@
+export interface UploadItemLink {
+    rel: string;
+    target: string;
+    text?: string;
+}

+ 3 - 0
src/upload-item-parameters.ts

@@ -1,3 +1,5 @@
+import { UploadItemLink } from "./upload-item-link";
+
 export interface UploadItemParameters {
     type?: string;
     title: string;
@@ -6,4 +8,5 @@ export interface UploadItemParameters {
     fileData?: File;
     thumbFileName?: string;
     thumbFileData?: string;
+    links?: UploadItemLink[];
 }