impossiblefxv1 1.13.2
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/HOWTO-PUBLISH.txt +15 -0
- package/README.md +21 -0
- package/apis/edit-2016-06-02.json +15 -0
- package/apis/metadata.json +31 -0
- package/apis/project-2016-06-01.json +56 -0
- package/apis/project-2016-06-02.json +767 -0
- package/apis/project-2023-03-07.json +767 -0
- package/apis/project-2023-12-11.json +767 -0
- package/apis/render-2016-06-02.json +764 -0
- package/apis/render-2023-12-11.json +764 -0
- package/dist/fx-sdk-latest.js +22494 -0
- package/dist-tools/build-browser.js +109 -0
- package/dist-tools/build-sdk.sh +6 -0
- package/dist-tools/es6-promise.js +957 -0
- package/dist-tools/foo.sh +4 -0
- package/dist-tools/publish.sh +6 -0
- package/lib/browser.js +58 -0
- package/lib/config.js +125 -0
- package/lib/core.js +15 -0
- package/lib/credentials/chain.js +54 -0
- package/lib/credentials/environment.js +69 -0
- package/lib/credentials/inifile.js +57 -0
- package/lib/credentials/token.js +38 -0
- package/lib/credentials.js +53 -0
- package/lib/encoding.js +36 -0
- package/lib/endpoint.js +18 -0
- package/lib/fx.js +50 -0
- package/lib/http/node.js +69 -0
- package/lib/http/xhr.js +12 -0
- package/lib/http.js +57 -0
- package/lib/proto.js +38 -0
- package/lib/protocol.js +56 -0
- package/lib/request.js +252 -0
- package/lib/response.js +24 -0
- package/lib/service.js +182 -0
- package/lib/services/batch.js +5 -0
- package/lib/services/edit.js +9 -0
- package/lib/services/project.js +102 -0
- package/lib/services/render.js +63 -0
- package/lib/services/story.js +5 -0
- package/lib/services.js +30 -0
- package/lib/util.js +126 -0
- package/package.json +37 -0
- package/package.json.save +36 -0
- package/proto/Movie.proto +4081 -0
- package/proto/fx.proto +43 -0
- package/templates/config.html +91 -0
- package/templates/examples.html +69 -0
- package/templates/getstarted.html +30 -0
- package/templates/index.html +6 -0
- package/templates/makeexample.py +57 -0
- package/templates/makerequests.html +210 -0
- package/templates/operation.html +36 -0
- package/templates/service.html +9 -0
- package/templates/services.html +19 -0
- package/templates/version.html +12 -0
- package/templates/versions.html +10 -0
- package/templates/workservice.html +68 -0
- package/test/circles.mp4 +0 -0
- package/test/config.js +131 -0
- package/test/index.html +35 -0
- package/test/mocha.opts +4 -0
- package/test/project.js +148 -0
- package/test/render.js +136 -0
- package/test/retry.js +53 -0
- package/test/sdktests.js +62 -0
- package/test/sdl.js +125 -0
- package/test/servertest/simple.js +20 -0
package/lib/browser.js
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
var FX = require('./core')
|
|
2
|
+
var path = require('path')
|
|
3
|
+
|
|
4
|
+
// Load browser API loader
|
|
5
|
+
FX.apiLoader = function(svc, version) {
|
|
6
|
+
return FX.apiLoader.services[svc][version];
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
require('./credentials/token');
|
|
10
|
+
require('protobufjs');
|
|
11
|
+
require('bytebuffer');
|
|
12
|
+
|
|
13
|
+
FX.CredentialProviderChain.defaultProviders = [
|
|
14
|
+
function () { return new FX.TokenCredentials(); },
|
|
15
|
+
];
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
FX.util.update(FX.Config.prototype.keys, {
|
|
19
|
+
credentials: function () {
|
|
20
|
+
var credentials = null;
|
|
21
|
+
new FX.CredentialProviderChain([
|
|
22
|
+
function () { return new FX.TokenCredentials(); },
|
|
23
|
+
]).resolve(function(err, creds) {
|
|
24
|
+
if(!err)
|
|
25
|
+
credentials = creds;
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
return credentials;
|
|
29
|
+
},
|
|
30
|
+
|
|
31
|
+
credentialProvider: function() {
|
|
32
|
+
return FX.CredentialProviderChain();
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
// Reset configuration
|
|
40
|
+
FX.config = new FX.Config();
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* @api private
|
|
45
|
+
*/
|
|
46
|
+
FX.apiLoader.services = {};
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
// Marker for browser-builder
|
|
50
|
+
// DO NOT DELETE
|
|
51
|
+
// $$$ IFX $$$
|
|
52
|
+
|
|
53
|
+
// Load the XHR HttpClient
|
|
54
|
+
require('./http/xhr');
|
|
55
|
+
|
|
56
|
+
if(typeof window !== 'undefined') window.FX = FX;
|
|
57
|
+
if(typeof module !== 'undefined') module.exports = FX;
|
|
58
|
+
if(typeof self !== 'undefined') self.FX = FX;
|
package/lib/config.js
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
var FX = require('./core');
|
|
2
|
+
require('./credentials');
|
|
3
|
+
require('./credentials/chain');
|
|
4
|
+
|
|
5
|
+
FX.Config = FX.util.inherit({
|
|
6
|
+
|
|
7
|
+
// @option options apikey [String]
|
|
8
|
+
// @option options apisecret [String]
|
|
9
|
+
// @option options region [String] the region to send service requests to.
|
|
10
|
+
|
|
11
|
+
constructor: function Config(options) {
|
|
12
|
+
if (options === undefined) {
|
|
13
|
+
options = {};
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
FX.util.each.call(this, this.keys, function (key, value) {
|
|
17
|
+
this.set(key, options[key], value);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
},
|
|
21
|
+
|
|
22
|
+
update: function update(options, allowUnknownKeys) {
|
|
23
|
+
allowUnknownKeys = allowUnknownKeys || false;
|
|
24
|
+
options = this.extractCredentials(options);
|
|
25
|
+
FX.util.each.call(this, options, function (key, value) {
|
|
26
|
+
if (allowUnknownKeys || Object.prototype.hasOwnProperty.call(this.keys, key) ) {
|
|
27
|
+
this.set(key, value);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
},
|
|
31
|
+
|
|
32
|
+
set: function set(property, value, defaultValue) {
|
|
33
|
+
if (value === undefined) {
|
|
34
|
+
if (defaultValue === undefined) {
|
|
35
|
+
defaultValue = this.keys[property];
|
|
36
|
+
}
|
|
37
|
+
if (
|
|
38
|
+
typeof defaultValue === 'function') {
|
|
39
|
+
this[property] = defaultValue.call(this);
|
|
40
|
+
} else {
|
|
41
|
+
this[property] = defaultValue;
|
|
42
|
+
}
|
|
43
|
+
} else {
|
|
44
|
+
this[property] = value;
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
|
|
48
|
+
//callback is a function(err, credentials)
|
|
49
|
+
getCredentials: function getCredentials(callback) {
|
|
50
|
+
var self = this;
|
|
51
|
+
|
|
52
|
+
function finish(err) {
|
|
53
|
+
callback(err, err ? null : self.credentials);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function getAsyncCredentials() {
|
|
57
|
+
self.credentials.get(function(err) {
|
|
58
|
+
finish(err);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function getStaticCredentials() {
|
|
63
|
+
var err = null;
|
|
64
|
+
if (!self.credentials.apikey || !self.credentials.apisecret) {
|
|
65
|
+
err = new Error('Missing credentials');
|
|
66
|
+
}
|
|
67
|
+
finish(err);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if(self.apikey && self.apisecret && !self.credentials) {
|
|
71
|
+
self.credentials = new FX.Credentials(self)
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (self.credentials) {
|
|
75
|
+
if (typeof self.credentials.get === 'function') {
|
|
76
|
+
getAsyncCredentials();
|
|
77
|
+
} else {
|
|
78
|
+
getStaticCredentials();
|
|
79
|
+
}
|
|
80
|
+
} else if (self.credentialProvider) {
|
|
81
|
+
self.credentialProvider.resolve(function(err, creds) {
|
|
82
|
+
self.credentials = creds;
|
|
83
|
+
finish(err);
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
} else {
|
|
87
|
+
finish(new Error('No credentials to load'));
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
extractCredentials: function(options) {
|
|
93
|
+
if(options.apikey && options.apisecret) {
|
|
94
|
+
options = FX.util.copy(options)
|
|
95
|
+
options.credentials = new FX.Credentials(options)
|
|
96
|
+
}
|
|
97
|
+
return options;
|
|
98
|
+
},
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
keys: {
|
|
102
|
+
apikey: null,
|
|
103
|
+
apisecret: null,
|
|
104
|
+
credentials: null,
|
|
105
|
+
credentialProvider: null,
|
|
106
|
+
region: null,
|
|
107
|
+
domainSuffix: ".impossible.io",
|
|
108
|
+
apiVersion: 'latest',
|
|
109
|
+
apiVersions: {},
|
|
110
|
+
protocol: 'https',
|
|
111
|
+
responseTimeout: 600000,
|
|
112
|
+
promiseDependency: null,
|
|
113
|
+
logger: null,
|
|
114
|
+
retryDelayBase: 100,
|
|
115
|
+
maxRetries: 10,
|
|
116
|
+
requiresAuth: true,
|
|
117
|
+
SDL: {
|
|
118
|
+
populateDefaults: false,
|
|
119
|
+
url: null,
|
|
120
|
+
domain: "JetSDL.Proto"
|
|
121
|
+
},
|
|
122
|
+
}
|
|
123
|
+
})
|
|
124
|
+
|
|
125
|
+
FX.config = new FX.Config();
|
package/lib/core.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
var path = require('path');
|
|
2
|
+
|
|
3
|
+
var FX = { util: require('./util') }
|
|
4
|
+
|
|
5
|
+
module.exports = FX;
|
|
6
|
+
|
|
7
|
+
require('./config')
|
|
8
|
+
|
|
9
|
+
require('./http');
|
|
10
|
+
require('./service');
|
|
11
|
+
require('./proto');
|
|
12
|
+
require('./encoding');
|
|
13
|
+
require('./protocol');
|
|
14
|
+
require('./request');
|
|
15
|
+
require('./response');
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
var FX = require('../core');
|
|
2
|
+
|
|
3
|
+
FX.CredentialProviderChain = FX.util.inherit(FX.Credentials, {
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Creates a new CredentialProviderChain with a default set of providers
|
|
7
|
+
* specified by {defaultProviders}.
|
|
8
|
+
*/
|
|
9
|
+
constructor: function CredentialProviderChain(providers) {
|
|
10
|
+
if (providers) {
|
|
11
|
+
this.providers = providers;
|
|
12
|
+
} else {
|
|
13
|
+
this.providers = FX.CredentialProviderChain.defaultProviders.slice(0);
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
|
|
17
|
+
resolve: function resolve(callback) {
|
|
18
|
+
if (this.providers.length === 0) {
|
|
19
|
+
callback(new Error('No providers'));
|
|
20
|
+
return this;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
var index = 0;
|
|
24
|
+
var providers = this.providers.slice(0);
|
|
25
|
+
|
|
26
|
+
function resolveNext(err, creds) {
|
|
27
|
+
if ((!err && creds) || index === providers.length) {
|
|
28
|
+
callback(err, creds);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
var provider = providers[index++];
|
|
33
|
+
if (typeof provider === 'function') {
|
|
34
|
+
creds = provider.call();
|
|
35
|
+
} else {
|
|
36
|
+
creds = provider;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
if (creds.get) {
|
|
40
|
+
creds.get(function(getErr) {
|
|
41
|
+
resolveNext(getErr, getErr ? null : creds);
|
|
42
|
+
});
|
|
43
|
+
} else {
|
|
44
|
+
resolveNext(null, creds);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
resolveNext();
|
|
49
|
+
return this;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
FX.CredentialProviderChain.defaultProviders = [];
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
var FX = require('../core');
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Represents credentials from the environment.
|
|
5
|
+
*
|
|
6
|
+
*/
|
|
7
|
+
FX.EnvironmentCredentials = FX.util.inherit(FX.Credentials, {
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Creates a new EnvironmentCredentials class with a given variable
|
|
11
|
+
* prefix {envPrefix}. For example, to load credentials using the 'FX'
|
|
12
|
+
* prefix:
|
|
13
|
+
*
|
|
14
|
+
* ```javascript
|
|
15
|
+
* var creds = new FX.EnvironmentCredentials('FX');
|
|
16
|
+
* creds.accessKeyId == 'AKID' // from FX_ACCESS_KEY_ID env var
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* @param envPrefix [String] the prefix to use (e.g., 'FX') for environment
|
|
20
|
+
* variables. Do not include the separating underscore.
|
|
21
|
+
*/
|
|
22
|
+
constructor: function EnvironmentCredentials(envPrefix) {
|
|
23
|
+
FX.Credentials.call(this);
|
|
24
|
+
this.get(function() {});
|
|
25
|
+
},
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Loads credentials from the environment using the prefixed
|
|
29
|
+
* environment variables.
|
|
30
|
+
*
|
|
31
|
+
* @callback callback function(err)
|
|
32
|
+
* Called after the (prefixed) APIKEY, APISECRET environment variables are read. When this callback is
|
|
33
|
+
* called with no error, it means that the credentials information has
|
|
34
|
+
* been loaded into the object (as the `accessKeyId`, `secretAccessKey`,
|
|
35
|
+
* and `sessionToken` properties).
|
|
36
|
+
* @param err [Error] if an error occurred, this value will be filled
|
|
37
|
+
* @see get
|
|
38
|
+
*/
|
|
39
|
+
refresh: function refresh(callback) {
|
|
40
|
+
if (!callback) callback = function(err) { if (err) throw err; };
|
|
41
|
+
|
|
42
|
+
if (!process || !process.env) {
|
|
43
|
+
callback(
|
|
44
|
+
new Error('No process info or environment variables available')
|
|
45
|
+
);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
var keys = ['APIKEY', 'APISECRET'];
|
|
50
|
+
var values = [];
|
|
51
|
+
|
|
52
|
+
for (var i = 0; i < keys.length; i++) {
|
|
53
|
+
var prefix = '';
|
|
54
|
+
if (this.envPrefix) prefix = this.envPrefix + '_';
|
|
55
|
+
values[i] = process.env[prefix + keys[i]];
|
|
56
|
+
if (!values[i]) {
|
|
57
|
+
callback(
|
|
58
|
+
new Error('Variable ' + prefix + keys[i] + ' not set.')
|
|
59
|
+
);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
this.expired = false;
|
|
65
|
+
FX.Credentials.apply(this, values);
|
|
66
|
+
callback();
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
});
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
var FX = require('../core');
|
|
2
|
+
var path = require('path');
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
FX.IniFileCredentials = FX.util.inherit(FX.Credentials, {
|
|
6
|
+
constructor: function IniFileCredentials(options) {
|
|
7
|
+
FX.Credentials.call(this);
|
|
8
|
+
|
|
9
|
+
options = options || {};
|
|
10
|
+
|
|
11
|
+
this.filename = options.filename;
|
|
12
|
+
this.profile = options.profile || process.env.FX_PROFILE || 'default';
|
|
13
|
+
this.get(function() {});
|
|
14
|
+
},
|
|
15
|
+
|
|
16
|
+
refresh: function refresh(callback) {
|
|
17
|
+
if (!callback) callback = function(err) { if (err) throw err; };
|
|
18
|
+
try {
|
|
19
|
+
if (!this.filename)
|
|
20
|
+
this.loadDefaultFilename();
|
|
21
|
+
var creds = FX.util.ini.parse(FX.util.readFileSync(this.filename));
|
|
22
|
+
var profile = creds[this.profile];
|
|
23
|
+
|
|
24
|
+
if (typeof profile !== 'object') {
|
|
25
|
+
throw new Error('Profile ' + this.profile + ' not found in ' + this.filename)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
this.apikey = profile['apikey'];
|
|
30
|
+
this.apisecret = profile['apisecret'];
|
|
31
|
+
|
|
32
|
+
if (!this.apikey || !this.apisecret) {
|
|
33
|
+
throw new Error('Credentials not set in ' + this.filename +
|
|
34
|
+
' using profile ' + this.profile)
|
|
35
|
+
}
|
|
36
|
+
this.expired = false;
|
|
37
|
+
callback();
|
|
38
|
+
} catch (err) {
|
|
39
|
+
callback(err);
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* @api private
|
|
45
|
+
*/
|
|
46
|
+
loadDefaultFilename: function loadDefaultFilename() {
|
|
47
|
+
var env = process.env;
|
|
48
|
+
var home = env.HOME ||
|
|
49
|
+
env.USERPROFILE ||
|
|
50
|
+
(env.HOMEPATH ? ((env.HOMEDRIVE || 'C:/') + env.HOMEPATH) : null);
|
|
51
|
+
if (!home) {
|
|
52
|
+
throw new Error('Cannot load credentials, HOME path not set')
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
this.filename = path.join(home, '.fx', 'credentials');
|
|
56
|
+
}
|
|
57
|
+
});
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
var FX = require('../core');
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Represents credentials from the browser session.
|
|
5
|
+
* Reads the OAuth2 access token from sessionStorage (set by the web console auth service).
|
|
6
|
+
*/
|
|
7
|
+
FX.TokenCredentials = FX.util.inherit(FX.Credentials, {
|
|
8
|
+
constructor: function TokenCredentials(options) {
|
|
9
|
+
|
|
10
|
+
FX.Credentials.call(this);
|
|
11
|
+
|
|
12
|
+
options = options || {};
|
|
13
|
+
|
|
14
|
+
this.get(function() {});
|
|
15
|
+
},
|
|
16
|
+
|
|
17
|
+
refresh: function refresh(callback) {
|
|
18
|
+
if (!callback)
|
|
19
|
+
callback = function(err) { if (err) throw err; };
|
|
20
|
+
|
|
21
|
+
try {
|
|
22
|
+
var token = sessionStorage.getItem('access_token');
|
|
23
|
+
if(!token)
|
|
24
|
+
throw new Error("No access token available in sessionStorage")
|
|
25
|
+
|
|
26
|
+
this.apitoken = token;
|
|
27
|
+
this.expired = false;
|
|
28
|
+
callback();
|
|
29
|
+
|
|
30
|
+
} catch (err) {
|
|
31
|
+
|
|
32
|
+
callback(err);
|
|
33
|
+
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
}
|
|
37
|
+
})
|
|
38
|
+
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
var FX = require('./core')
|
|
2
|
+
var inherit = FX.util.inherit
|
|
3
|
+
|
|
4
|
+
FX.Credentials = inherit({
|
|
5
|
+
constructor: function Credentials() {
|
|
6
|
+
this.expired = false;
|
|
7
|
+
this.expireTime = null;
|
|
8
|
+
|
|
9
|
+
if(arguments.length === 1 && typeof arguments[0] === 'object') {
|
|
10
|
+
var creds = arguments[0].credentials || arguments[0];
|
|
11
|
+
this.apikey = creds.apikey;
|
|
12
|
+
this.apisecret = creds.apisecret;
|
|
13
|
+
} else {
|
|
14
|
+
this.apikey = arguments[0];
|
|
15
|
+
this.apisecret = arguments[1];
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
|
|
19
|
+
expiryWindow: 60,
|
|
20
|
+
|
|
21
|
+
needsRefresh: function needsRefresh() {
|
|
22
|
+
var currentTime = new Date().getTime();
|
|
23
|
+
var adjustedTime = new Date(currentTime + this.expiryWindow * 1000);
|
|
24
|
+
|
|
25
|
+
if(this.expireTime && adjustedTime > this.expireTime) {
|
|
26
|
+
return true;
|
|
27
|
+
} else {
|
|
28
|
+
return this.expired || !this.apikey || !this.apisecret;
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
|
|
32
|
+
get: function get(callback) {
|
|
33
|
+
var self = this;
|
|
34
|
+
if(this.needsRefresh()) {
|
|
35
|
+
this.refresh(function(err) {
|
|
36
|
+
if(!err)
|
|
37
|
+
self.expired = false; // reset expired flag
|
|
38
|
+
if(callback)
|
|
39
|
+
callback(err);
|
|
40
|
+
});
|
|
41
|
+
} else if(callback) {
|
|
42
|
+
callback();
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
|
|
46
|
+
refresh: function refresh(callback) {
|
|
47
|
+
this.expired = false;
|
|
48
|
+
callback();
|
|
49
|
+
}
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
package/lib/encoding.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
var FX = require('./core')
|
|
2
|
+
var inherit = FX.util.inherit
|
|
3
|
+
|
|
4
|
+
FX.Encoding = {
|
|
5
|
+
|
|
6
|
+
json: {
|
|
7
|
+
encode: function(obj) {
|
|
8
|
+
return JSON.stringify(obj)
|
|
9
|
+
},
|
|
10
|
+
|
|
11
|
+
decode: function(data) {
|
|
12
|
+
return JSON.parse(data)
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
|
|
16
|
+
binary: {
|
|
17
|
+
decode: function(data) {
|
|
18
|
+
return data
|
|
19
|
+
},
|
|
20
|
+
|
|
21
|
+
encode: function(obj) {
|
|
22
|
+
return obj
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
|
|
26
|
+
protobuf: {
|
|
27
|
+
decode: function(messagetype, data) {
|
|
28
|
+
return messagetype.decode(data)
|
|
29
|
+
},
|
|
30
|
+
|
|
31
|
+
encode: function(obj) {
|
|
32
|
+
return obj.toArrayBuffer()
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
}
|
package/lib/endpoint.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
|
|
2
|
+
function configureEndpoint(svc){
|
|
3
|
+
var endpoint = null;
|
|
4
|
+
|
|
5
|
+
if(svc.api.endpoint && svc.config.region){
|
|
6
|
+
endpoint = svc.api.endpoint.replace(/\{region\}/g, svc.config.region);
|
|
7
|
+
} else if(svc.api.globalEndpoint){
|
|
8
|
+
endpoint = svc.api.globalEndpoint;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
if(endpoint){
|
|
12
|
+
endpoint = endpoint.replace(/\{domainSuffix\}/g, svc.config.domainSuffix);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
svc.config.endpoint = endpoint
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
module.exports = configureEndpoint
|
package/lib/fx.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
var FX = require('./core')
|
|
2
|
+
module.exports = FX;
|
|
3
|
+
|
|
4
|
+
// Load Node HTTP client
|
|
5
|
+
require('./http/node');
|
|
6
|
+
|
|
7
|
+
// Load all service classes
|
|
8
|
+
require('./services');
|
|
9
|
+
|
|
10
|
+
require('./credentials/inifile');
|
|
11
|
+
require('./credentials/environment');
|
|
12
|
+
require('./credentials/token');
|
|
13
|
+
|
|
14
|
+
FX.CredentialProviderChain.defaultProviders = [
|
|
15
|
+
function () { return new FX.EnvironmentCredentials('FX'); },
|
|
16
|
+
function () { return new FX.IniFileCredentials({filename: 'fx.credentials'}); },
|
|
17
|
+
function () { return new FX.IniFileCredentials(); },
|
|
18
|
+
];
|
|
19
|
+
|
|
20
|
+
// Update configuration keys
|
|
21
|
+
FX.util.update(FX.Config.prototype.keys, {
|
|
22
|
+
credentials: function () {
|
|
23
|
+
var credentials = null;
|
|
24
|
+
new FX.CredentialProviderChain([
|
|
25
|
+
function () { return new FX.EnvironmentCredentials('FX'); },
|
|
26
|
+
function () { return new FX.IniFileCredentials({filename: 'fx.credentials'}); },
|
|
27
|
+
function () { return new FX.IniFileCredentials(); },
|
|
28
|
+
]).resolve(function(err, creds) {
|
|
29
|
+
if(!err)
|
|
30
|
+
credentials = creds;
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
return credentials;
|
|
34
|
+
},
|
|
35
|
+
|
|
36
|
+
credentialProvider: function() {
|
|
37
|
+
return FX.CredentialProviderChain();
|
|
38
|
+
},
|
|
39
|
+
|
|
40
|
+
region: function() {
|
|
41
|
+
return process.env.FX_REGION;
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
// Reset configuration
|
|
49
|
+
FX.config = new FX.Config();
|
|
50
|
+
|
package/lib/http/node.js
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
var FX = require('../core');
|
|
2
|
+
|
|
3
|
+
var Stream = require('stream').Stream;
|
|
4
|
+
|
|
5
|
+
require('../http');
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
FX.NodeHttpClient = FX.util.inherit({
|
|
9
|
+
exec: function(request, callback) {
|
|
10
|
+
request.authenticate(function(err) {
|
|
11
|
+
|
|
12
|
+
if(err) {
|
|
13
|
+
|
|
14
|
+
callback(err, null)
|
|
15
|
+
|
|
16
|
+
} else {
|
|
17
|
+
var fr = require("follow-redirects")
|
|
18
|
+
var http = request.protocol == "https" ? fr.https : fr.http
|
|
19
|
+
|
|
20
|
+
if(request.hostname.startsWith("render")){
|
|
21
|
+
http = request.protocol == "https" ? require("https") : require(http);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
var options = {
|
|
25
|
+
hostname: request.hostname,
|
|
26
|
+
path: request.path,
|
|
27
|
+
method: request.method,
|
|
28
|
+
port: request.port,
|
|
29
|
+
auth: request.auth,
|
|
30
|
+
headers: request.headers,
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
var stream = http.request(options)
|
|
34
|
+
var body = request.data;
|
|
35
|
+
|
|
36
|
+
if(request.timeout) {
|
|
37
|
+
stream.setTimeout(request.timeout, function() {
|
|
38
|
+
stream.abort();
|
|
39
|
+
})
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if(body) {
|
|
43
|
+
if(body instanceof Stream) {
|
|
44
|
+
request.data.pipe(stream)
|
|
45
|
+
} else if(body instanceof Uint8Array) {
|
|
46
|
+
var buffer = new Buffer(body.buffer)
|
|
47
|
+
stream.end(buffer)
|
|
48
|
+
} else if(body instanceof ArrayBuffer) {
|
|
49
|
+
var buffer = new Buffer(body)
|
|
50
|
+
stream.end(buffer)
|
|
51
|
+
|
|
52
|
+
} else {
|
|
53
|
+
stream.end(body)
|
|
54
|
+
}
|
|
55
|
+
} else {
|
|
56
|
+
stream.end();
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/* stream.on("response", function(response){
|
|
60
|
+
console.log("response", response);
|
|
61
|
+
})*/
|
|
62
|
+
|
|
63
|
+
callback(null, stream)
|
|
64
|
+
}
|
|
65
|
+
})
|
|
66
|
+
}
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
FX.HttpClient.prototype = FX.NodeHttpClient.prototype;
|
package/lib/http/xhr.js
ADDED