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.
Files changed (68) hide show
  1. package/HOWTO-PUBLISH.txt +15 -0
  2. package/README.md +21 -0
  3. package/apis/edit-2016-06-02.json +15 -0
  4. package/apis/metadata.json +31 -0
  5. package/apis/project-2016-06-01.json +56 -0
  6. package/apis/project-2016-06-02.json +767 -0
  7. package/apis/project-2023-03-07.json +767 -0
  8. package/apis/project-2023-12-11.json +767 -0
  9. package/apis/render-2016-06-02.json +764 -0
  10. package/apis/render-2023-12-11.json +764 -0
  11. package/dist/fx-sdk-latest.js +22494 -0
  12. package/dist-tools/build-browser.js +109 -0
  13. package/dist-tools/build-sdk.sh +6 -0
  14. package/dist-tools/es6-promise.js +957 -0
  15. package/dist-tools/foo.sh +4 -0
  16. package/dist-tools/publish.sh +6 -0
  17. package/lib/browser.js +58 -0
  18. package/lib/config.js +125 -0
  19. package/lib/core.js +15 -0
  20. package/lib/credentials/chain.js +54 -0
  21. package/lib/credentials/environment.js +69 -0
  22. package/lib/credentials/inifile.js +57 -0
  23. package/lib/credentials/token.js +38 -0
  24. package/lib/credentials.js +53 -0
  25. package/lib/encoding.js +36 -0
  26. package/lib/endpoint.js +18 -0
  27. package/lib/fx.js +50 -0
  28. package/lib/http/node.js +69 -0
  29. package/lib/http/xhr.js +12 -0
  30. package/lib/http.js +57 -0
  31. package/lib/proto.js +38 -0
  32. package/lib/protocol.js +56 -0
  33. package/lib/request.js +252 -0
  34. package/lib/response.js +24 -0
  35. package/lib/service.js +182 -0
  36. package/lib/services/batch.js +5 -0
  37. package/lib/services/edit.js +9 -0
  38. package/lib/services/project.js +102 -0
  39. package/lib/services/render.js +63 -0
  40. package/lib/services/story.js +5 -0
  41. package/lib/services.js +30 -0
  42. package/lib/util.js +126 -0
  43. package/package.json +37 -0
  44. package/package.json.save +36 -0
  45. package/proto/Movie.proto +4081 -0
  46. package/proto/fx.proto +43 -0
  47. package/templates/config.html +91 -0
  48. package/templates/examples.html +69 -0
  49. package/templates/getstarted.html +30 -0
  50. package/templates/index.html +6 -0
  51. package/templates/makeexample.py +57 -0
  52. package/templates/makerequests.html +210 -0
  53. package/templates/operation.html +36 -0
  54. package/templates/service.html +9 -0
  55. package/templates/services.html +19 -0
  56. package/templates/version.html +12 -0
  57. package/templates/versions.html +10 -0
  58. package/templates/workservice.html +68 -0
  59. package/test/circles.mp4 +0 -0
  60. package/test/config.js +131 -0
  61. package/test/index.html +35 -0
  62. package/test/mocha.opts +4 -0
  63. package/test/project.js +148 -0
  64. package/test/render.js +136 -0
  65. package/test/retry.js +53 -0
  66. package/test/sdktests.js +62 -0
  67. package/test/sdl.js +125 -0
  68. package/test/servertest/simple.js +20 -0
@@ -0,0 +1,4 @@
1
+ #!/bin/bash
2
+
3
+ echo "S3: updating to version: ${npm_package_version}"
4
+
@@ -0,0 +1,6 @@
1
+ #!/bin/bash
2
+
3
+ echo "S3: updating to version: ${npm_package_version}"
4
+
5
+ aws s3 cp --acl public-read dist/fx-sdk-latest.js s3://is-exchange/sdk/fx-sdk-latest.js
6
+ aws s3 cp --acl public-read dist/fx-sdk-latest.js s3://is-exchange/sdk/fx-sdk-${npm_package_version}.js
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
+
@@ -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
+ }
@@ -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
+
@@ -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;
@@ -0,0 +1,12 @@
1
+ var FX = require('../core');
2
+
3
+ var Stream = require('stream').Stream;
4
+
5
+ require('../http');
6
+ require('./node');
7
+
8
+ FX.XhrHttpClient = FX.util.inherit({
9
+ // no implementation
10
+ })
11
+
12
+ FX.HttpClient.prototype = FX.NodeHttpClient.prototype;