From 916e0d6093f5f60b4898f28aec3ddf8982572e54 Mon Sep 17 00:00:00 2001
From: edsilv <e.silverton@gmail.com>
Date: Fri, 31 Jul 2015 16:55:51 +0100
Subject: [PATCH] resource services as IService

---
 bower.json               |  2 +-
 dist/client/manifesto.js | 10 +++++-----
 dist/manifesto.d.ts      | 18 +++++++++---------
 dist/server/manifesto.js | 10 +++++-----
 package.json             |  2 +-
 src/IManifest.ts         |  8 ++++----
 src/IResource.ts         |  8 ++++----
 src/Manifest.ts          | 22 +++++++++++-----------
 8 files changed, 40 insertions(+), 40 deletions(-)

diff --git a/bower.json b/bower.json
index 29004e12..844f818d 100644
--- a/bower.json
+++ b/bower.json
@@ -1,6 +1,6 @@
 {
     "name": "manifesto",
-    "version": "0.1.6",
+    "version": "0.1.7",
     "homepage": "https://github.com/edsilv/manifesto",
     "authors": [
         "edsilv <e.silverton@gmail.com>"
diff --git a/dist/client/manifesto.js b/dist/client/manifesto.js
index 97ffa6cf..734e0768 100644
--- a/dist/client/manifesto.js
+++ b/dist/client/manifesto.js
@@ -572,8 +572,8 @@ var Manifesto;
                                 resolve(clickThrough(resource));
                             }
                             else {
-                                login(resource.loginService).then(function () {
-                                    getAccessToken(resource.tokenService).then(function (token) {
+                                login(resource.loginService.id).then(function () {
+                                    getAccessToken(resource.tokenService.id).then(function (token) {
                                         resource.getData(token).then(function () {
                                             resolve(handleResourceResponse(resource));
                                         });
@@ -629,7 +629,7 @@ var Manifesto;
             return new Promise(function (resolve, reject) {
                 resource.getData().then(function () {
                     if (resource.isAccessControlled) {
-                        getStoredAccessToken(resource.tokenService).then(function (storedAccessToken) {
+                        getStoredAccessToken(resource.tokenService.id).then(function (storedAccessToken) {
                             if (storedAccessToken) {
                                 // try using the stored access token
                                 resource.getData(storedAccessToken).then(function () {
@@ -643,8 +643,8 @@ var Manifesto;
                                 }
                                 else {
                                     // get an access token
-                                    login(resource.loginService).then(function () {
-                                        getAccessToken(resource.tokenService).then(function (accessToken) {
+                                    login(resource.loginService.id).then(function () {
+                                        getAccessToken(resource.tokenService.id).then(function (accessToken) {
                                             storeAccessToken(resource, accessToken).then(function () {
                                                 resource.getData(accessToken).then(function () {
                                                     resolve(resource);
diff --git a/dist/manifesto.d.ts b/dist/manifesto.d.ts
index fdac1f7b..221adef1 100644
--- a/dist/manifesto.d.ts
+++ b/dist/manifesto.d.ts
@@ -156,9 +156,9 @@ declare module Manifesto {
         getTree(): TreeNode;
         private _parseTreeNode(node, range);
         isMultiSequence(): boolean;
-        loadResource(resource: IResource, clickThrough: (resource: IResource) => void, login: (loginService: string) => Promise<void>, getAccessToken: (tokenServiceUrl: string) => Promise<IAccessToken>, storeAccessToken: (resource: IResource, token: IAccessToken) => Promise<void>, getStoredAccessToken: (tokenService: string) => Promise<IAccessToken>, handleResourceResponse: (resource: IResource) => Promise<any>): Promise<any>;
-        authorize(resource: IResource, clickThrough: (resource: IResource) => void, login: (loginService: string) => Promise<void>, getAccessToken: (tokenServiceUrl: string) => Promise<IAccessToken>, storeAccessToken: (resource: IResource, token: IAccessToken) => Promise<void>, getStoredAccessToken: (tokenService: string) => Promise<IAccessToken>): Promise<IResource>;
-        loadResources(resources: IResource[], clickThrough: (resource: IResource) => void, login: (loginService: string) => Promise<void>, getAccessToken: (tokenServiceUrl: string) => Promise<IAccessToken>, storeAccessToken: (resource: IResource, token: IAccessToken) => Promise<void>, getStoredAccessToken: (tokenService: string) => Promise<IAccessToken>, handleResourceResponse: (resource: IResource) => Promise<any>): Promise<IResource[]>;
+        loadResource(resource: IResource, clickThrough: (resource: IResource) => void, login: (loginServiceUrl: string) => Promise<void>, getAccessToken: (tokenServiceUrl: string) => Promise<IAccessToken>, storeAccessToken: (resource: IResource, token: IAccessToken) => Promise<void>, getStoredAccessToken: (tokenServiceUrl: string) => Promise<IAccessToken>, handleResourceResponse: (resource: IResource) => Promise<any>): Promise<any>;
+        authorize(resource: IResource, clickThrough: (resource: IResource) => void, login: (loginServiceUrl: string) => Promise<void>, getAccessToken: (tokenServiceUrl: string) => Promise<IAccessToken>, storeAccessToken: (resource: IResource, token: IAccessToken) => Promise<void>, getStoredAccessToken: (tokenServiceUrl: string) => Promise<IAccessToken>): Promise<IResource>;
+        loadResources(resources: IResource[], clickThrough: (resource: IResource) => void, login: (loginServiceUrl: string) => Promise<void>, getAccessToken: (tokenServiceUrl: string) => Promise<IAccessToken>, storeAccessToken: (resource: IResource, token: IAccessToken) => Promise<void>, getStoredAccessToken: (tokenServiceUrl: string) => Promise<IAccessToken>, handleResourceResponse: (resource: IResource) => Promise<any>): Promise<IResource[]>;
     }
 }
 declare module Manifesto {
@@ -300,8 +300,8 @@ declare module Manifesto {
         getTotalSequences(): number;
         getTree(): TreeNode;
         isMultiSequence(): boolean;
-        loadResource(resource: IResource, clickThrough: (resource: IResource) => void, login: (loginService: string) => Promise<void>, getAccessToken: (tokenServiceUrl: string) => Promise<IAccessToken>, storeAccessToken: (resource: IResource, token: IAccessToken) => Promise<void>, getStoredAccessToken: (tokenService: string) => Promise<IAccessToken>, handleResourceResponse: (resource: IResource) => Promise<any>): Promise<IResource>;
-        loadResources(resources: IResource[], clickThrough: (resource: IResource) => void, login: (loginService: string) => Promise<void>, getAccessToken: (tokenServiceUrl: string) => Promise<IAccessToken>, storeAccessToken: (resource: IResource, token: IAccessToken) => Promise<void>, getStoredAccessToken: (tokenService: string) => Promise<IAccessToken>, handleResourceResponse: (resource: IResource) => Promise<any>): Promise<IResource[]>;
+        loadResource(resource: IResource, clickThrough: (resource: IResource) => void, login: (loginServiceUrl: string) => Promise<void>, getAccessToken: (tokenServiceUrl: string) => Promise<IAccessToken>, storeAccessToken: (resource: IResource, token: IAccessToken) => Promise<void>, getStoredAccessToken: (tokenServiceUrl: string) => Promise<IAccessToken>, handleResourceResponse: (resource: IResource) => Promise<any>): Promise<IResource>;
+        loadResources(resources: IResource[], clickThrough: (resource: IResource) => void, login: (loginServiceUrl: string) => Promise<void>, getAccessToken: (tokenServiceUrl: string) => Promise<IAccessToken>, storeAccessToken: (resource: IResource, token: IAccessToken) => Promise<void>, getStoredAccessToken: (tokenServiceUrl: string) => Promise<IAccessToken>, handleResourceResponse: (resource: IResource) => Promise<any>): Promise<IResource[]>;
         options: IManifestoOptions;
         rootRange: IRange;
         sequences: ISequence[];
@@ -343,15 +343,15 @@ declare module Manifesto {
 }
 declare module Manifesto {
     interface IResource {
-        clickThroughService: string;
+        clickThroughService: IService;
         data: any;
         dataUri: string;
         error: any;
         isAccessControlled: boolean;
-        loginService: string;
-        logoutService: string;
+        loginService: IService;
+        logoutService: IService;
         status: number;
-        tokenService: string;
+        tokenService: IService;
         getData(accessToken?: IAccessToken): Promise<IResource>;
     }
 }
diff --git a/dist/server/manifesto.js b/dist/server/manifesto.js
index 4955875a..f1743e6d 100644
--- a/dist/server/manifesto.js
+++ b/dist/server/manifesto.js
@@ -571,8 +571,8 @@ var Manifesto;
                                 resolve(clickThrough(resource));
                             }
                             else {
-                                login(resource.loginService).then(function () {
-                                    getAccessToken(resource.tokenService).then(function (token) {
+                                login(resource.loginService.id).then(function () {
+                                    getAccessToken(resource.tokenService.id).then(function (token) {
                                         resource.getData(token).then(function () {
                                             resolve(handleResourceResponse(resource));
                                         });
@@ -628,7 +628,7 @@ var Manifesto;
             return new Promise(function (resolve, reject) {
                 resource.getData().then(function () {
                     if (resource.isAccessControlled) {
-                        getStoredAccessToken(resource.tokenService).then(function (storedAccessToken) {
+                        getStoredAccessToken(resource.tokenService.id).then(function (storedAccessToken) {
                             if (storedAccessToken) {
                                 // try using the stored access token
                                 resource.getData(storedAccessToken).then(function () {
@@ -642,8 +642,8 @@ var Manifesto;
                                 }
                                 else {
                                     // get an access token
-                                    login(resource.loginService).then(function () {
-                                        getAccessToken(resource.tokenService).then(function (accessToken) {
+                                    login(resource.loginService.id).then(function () {
+                                        getAccessToken(resource.tokenService.id).then(function (accessToken) {
                                             storeAccessToken(resource, accessToken).then(function () {
                                                 resource.getData(accessToken).then(function () {
                                                     resolve(resource);
diff --git a/package.json b/package.json
index 37c3306d..b899af98 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "manifesto",
-  "version": "0.1.6",
+  "version": "0.1.7",
   "description": "IIIF Presentation API utility library for client and server",
   "main": "dist/server/manifesto.js",
   "scripts": {
diff --git a/src/IManifest.ts b/src/IManifest.ts
index 1c636dd1..98412d1b 100644
--- a/src/IManifest.ts
+++ b/src/IManifest.ts
@@ -19,17 +19,17 @@ module Manifesto {
         isMultiSequence(): boolean;
         loadResource(resource: IResource,
                      clickThrough: (resource: IResource) => void,
-                     login: (loginService: string) => Promise<void>,
+                     login: (loginServiceUrl: string) => Promise<void>,
                      getAccessToken: (tokenServiceUrl: string) => Promise<IAccessToken>,
                      storeAccessToken: (resource: IResource, token: IAccessToken) => Promise<void>,
-                     getStoredAccessToken: (tokenService: string) => Promise<IAccessToken>,
+                     getStoredAccessToken: (tokenServiceUrl: string) => Promise<IAccessToken>,
                      handleResourceResponse: (resource: IResource) => Promise<any>): Promise<IResource>;
         loadResources(resources: IResource[],
                       clickThrough: (resource: IResource) => void,
-                      login: (loginService: string) => Promise<void>,
+                      login: (loginServiceUrl: string) => Promise<void>,
                       getAccessToken: (tokenServiceUrl: string) => Promise<IAccessToken>,
                       storeAccessToken: (resource: IResource, token: IAccessToken) => Promise<void>,
-                      getStoredAccessToken: (tokenService: string) => Promise<IAccessToken>,
+                      getStoredAccessToken: (tokenServiceUrl: string) => Promise<IAccessToken>,
                       handleResourceResponse: (resource: IResource) => Promise<any>): Promise<IResource[]>;
         options: IManifestoOptions;
         rootRange: IRange;
diff --git a/src/IResource.ts b/src/IResource.ts
index acd6c658..79fb33c0 100644
--- a/src/IResource.ts
+++ b/src/IResource.ts
@@ -1,14 +1,14 @@
 module Manifesto {
     export interface IResource {
-        clickThroughService: string;
+        clickThroughService: IService;
         data: any;
         dataUri: string;
         error: any;
         isAccessControlled: boolean;
-        loginService: string;
-        logoutService: string;
+        loginService: IService;
+        logoutService: IService;
         status: number;
-        tokenService: string;
+        tokenService: IService;
 
         getData(accessToken?: IAccessToken): Promise<IResource>;
     }
diff --git a/src/Manifest.ts b/src/Manifest.ts
index 563ebdd8..530277e0 100644
--- a/src/Manifest.ts
+++ b/src/Manifest.ts
@@ -319,10 +319,10 @@ module Manifesto {
 
         loadResource(resource: IResource,
                      clickThrough: (resource: IResource) => void,
-                     login: (loginService: string) => Promise<void>,
+                     login: (loginServiceUrl: string) => Promise<void>,
                      getAccessToken: (tokenServiceUrl: string) => Promise<IAccessToken>,
                      storeAccessToken: (resource: IResource, token: IAccessToken) => Promise<void>,
-                     getStoredAccessToken: (tokenService: string) => Promise<IAccessToken>,
+                     getStoredAccessToken: (tokenServiceUrl: string) => Promise<IAccessToken>,
                      handleResourceResponse: (resource: IResource) => Promise<any>): Promise<any> {
 
             var options: IManifestoOptions = this.options;
@@ -341,8 +341,8 @@ module Manifesto {
                             if (resource.clickThroughService){
                                 resolve(clickThrough(resource));
                             } else {
-                                login(resource.loginService).then(() => {
-                                    getAccessToken(resource.tokenService).then((token: IAccessToken) => {
+                                login(resource.loginService.id).then(() => {
+                                    getAccessToken(resource.tokenService.id).then((token: IAccessToken) => {
                                         resource.getData(token).then(() => {
                                             resolve(handleResourceResponse(resource));
                                         });
@@ -407,16 +407,16 @@ module Manifesto {
 
         authorize(resource: IResource,
                   clickThrough: (resource: IResource) => void,
-                  login: (loginService: string) => Promise<void>,
+                  login: (loginServiceUrl: string) => Promise<void>,
                   getAccessToken: (tokenServiceUrl: string) => Promise<IAccessToken>,
                   storeAccessToken: (resource: IResource, token: IAccessToken) => Promise<void>,
-                  getStoredAccessToken: (tokenService: string) => Promise<IAccessToken>): Promise<IResource> {
+                  getStoredAccessToken: (tokenServiceUrl: string) => Promise<IAccessToken>): Promise<IResource> {
 
             return new Promise<IResource>((resolve, reject) => {
 
                 resource.getData().then(() => {
                     if (resource.isAccessControlled) {
-                        getStoredAccessToken(resource.tokenService).then((storedAccessToken: IAccessToken) => {
+                        getStoredAccessToken(resource.tokenService.id).then((storedAccessToken: IAccessToken) => {
                             if (storedAccessToken) {
                                 // try using the stored access token
                                 resource.getData(storedAccessToken).then(() => {
@@ -428,8 +428,8 @@ module Manifesto {
                                     clickThrough(resource);
                                 } else {
                                     // get an access token
-                                    login(resource.loginService).then(() => {
-                                        getAccessToken(resource.tokenService).then((accessToken) => {
+                                    login(resource.loginService.id).then(() => {
+                                        getAccessToken(resource.tokenService.id).then((accessToken) => {
                                             storeAccessToken(resource, accessToken).then(() => {
                                                 resource.getData(accessToken).then(() => {
                                                     resolve(resource);
@@ -450,10 +450,10 @@ module Manifesto {
 
         loadResources(resources: IResource[],
                       clickThrough: (resource: IResource) => void,
-                      login: (loginService: string) => Promise<void>,
+                      login: (loginServiceUrl: string) => Promise<void>,
                       getAccessToken: (tokenServiceUrl: string) => Promise<IAccessToken>,
                       storeAccessToken: (resource: IResource, token: IAccessToken) => Promise<void>,
-                      getStoredAccessToken: (tokenService: string) => Promise<IAccessToken>,
+                      getStoredAccessToken: (tokenServiceUrl: string) => Promise<IAccessToken>,
                       handleResourceResponse: (resource: IResource) => Promise<any>): Promise<IResource[]> {
 
             var that = this;