nitrogen 0.2.24 → 0.29.5
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/README.md +18 -108
- package/lib/Logger.js +56 -0
- package/lib/autolinking/Autolinking.js +1 -0
- package/lib/autolinking/android/createCMakeExtension.js +109 -0
- package/lib/autolinking/android/createGradleExtension.js +36 -0
- package/lib/autolinking/android/createHybridObjectInitializer.js +159 -0
- package/lib/autolinking/createAndroidAutolinking.js +13 -0
- package/lib/autolinking/createIOSAutolinking.js +19 -0
- package/lib/autolinking/ios/createHybridObjectInitializer.js +97 -0
- package/lib/autolinking/ios/createPodspecRubyExtension.js +69 -0
- package/lib/autolinking/ios/createSwiftCxxBridge.js +117 -0
- package/lib/autolinking/ios/createSwiftUmbrellaHeader.js +74 -0
- package/lib/config/NitroConfig.js +112 -0
- package/lib/config/NitroUserConfig.js +88 -0
- package/lib/config/getConfig.js +84 -0
- package/lib/createGitAttributes.js +11 -0
- package/lib/createPlatformSpec.js +127 -0
- package/lib/getFiles.js +28 -0
- package/lib/getPlatformSpecs.js +153 -0
- package/lib/index.js +113 -10
- package/lib/init.js +123 -0
- package/lib/nitrogen.js +165 -0
- package/lib/prettifyDirectory.js +27 -0
- package/lib/syntax/BridgedType.js +1 -0
- package/lib/syntax/CodeNode.js +1 -0
- package/lib/syntax/HybridObjectSpec.js +1 -0
- package/lib/syntax/Method.js +108 -0
- package/lib/syntax/Parameter.js +65 -0
- package/lib/syntax/Property.js +147 -0
- package/lib/syntax/SourceFile.js +7 -0
- package/lib/syntax/c++/CppEnum.js +110 -0
- package/lib/syntax/c++/CppHybridObject.js +146 -0
- package/lib/syntax/c++/CppHybridObjectRegistration.js +18 -0
- package/lib/syntax/c++/CppStruct.js +108 -0
- package/lib/syntax/c++/CppUnion.js +88 -0
- package/lib/syntax/c++/getForwardDeclaration.js +14 -0
- package/lib/syntax/c++/includeNitroHeader.js +34 -0
- package/lib/syntax/createType.js +303 -0
- package/lib/syntax/getAllTypes.js +11 -0
- package/lib/syntax/getCustomTypeConfig.js +53 -0
- package/lib/syntax/getHybridObjectName.d.ts +36 -0
- package/lib/syntax/getHybridObjectName.js +10 -0
- package/lib/syntax/getInterfaceProperties.js +9 -0
- package/lib/syntax/getReferencedTypes.js +47 -0
- package/lib/syntax/helpers.js +53 -0
- package/lib/syntax/isCoreType.js +47 -0
- package/lib/syntax/kotlin/FbjniHybridObject.js +261 -0
- package/lib/syntax/kotlin/JNINativeRegistrations.js +7 -0
- package/lib/syntax/kotlin/KotlinBoxedPrimitive.js +17 -0
- package/lib/syntax/kotlin/KotlinCxxBridgedType.js +893 -0
- package/lib/syntax/kotlin/KotlinEnum.js +113 -0
- package/lib/syntax/kotlin/KotlinFunction.js +256 -0
- package/lib/syntax/kotlin/KotlinHybridObject.js +177 -0
- package/lib/syntax/kotlin/KotlinHybridObjectRegistration.js +26 -0
- package/lib/syntax/kotlin/KotlinStruct.js +172 -0
- package/lib/syntax/kotlin/KotlinVariant.js +191 -0
- package/lib/syntax/swift/SwiftCxxBridgedType.js +819 -0
- package/lib/syntax/swift/SwiftCxxTypeHelper.js +613 -0
- package/lib/syntax/swift/SwiftEnum.js +52 -0
- package/lib/syntax/swift/SwiftFunction.js +83 -0
- package/lib/syntax/swift/SwiftHybridObject.js +103 -0
- package/lib/syntax/swift/SwiftHybridObjectBridge.js +451 -0
- package/lib/syntax/swift/SwiftHybridObjectRegistration.js +42 -0
- package/lib/syntax/swift/SwiftStruct.js +75 -0
- package/lib/syntax/swift/SwiftVariant.js +58 -0
- package/lib/syntax/types/ArrayBufferType.js +37 -0
- package/lib/syntax/types/ArrayType.d.ts +12 -0
- package/lib/syntax/types/ArrayType.js +52 -0
- package/lib/syntax/types/BigIntType.js +27 -0
- package/lib/syntax/types/BooleanType.js +27 -0
- package/lib/syntax/types/CustomType.d.ts +14 -0
- package/lib/syntax/types/CustomType.js +36 -0
- package/lib/syntax/types/DateType.js +35 -0
- package/lib/syntax/types/EnumType.js +101 -0
- package/lib/syntax/types/ErrorType.js +37 -0
- package/lib/syntax/types/FunctionType.js +147 -0
- package/lib/syntax/types/HybridObjectBaseType.js +38 -0
- package/lib/syntax/types/HybridObjectType.js +131 -0
- package/lib/syntax/types/MapType.js +37 -0
- package/lib/syntax/types/NamedWrappingType.js +27 -0
- package/lib/syntax/types/NullType.js +23 -0
- package/lib/syntax/types/NumberType.js +27 -0
- package/lib/syntax/types/OptionalType.js +59 -0
- package/lib/syntax/types/PromiseType.js +62 -0
- package/lib/syntax/types/RecordType.js +47 -0
- package/lib/syntax/types/ResultWrappingType.js +44 -0
- package/lib/syntax/types/StringType.js +35 -0
- package/lib/syntax/types/StructType.js +61 -0
- package/lib/syntax/types/TupleType.js +39 -0
- package/lib/syntax/types/Type.js +1 -0
- package/lib/syntax/types/VariantType.js +75 -0
- package/lib/syntax/types/VoidType.js +27 -0
- package/lib/syntax/types/getTypeAs.js +12 -0
- package/lib/utils.js +126 -0
- package/lib/views/CppHybridViewComponent.js +256 -0
- package/lib/views/createHostComponentJs.js +27 -0
- package/lib/views/kotlin/KotlinHybridViewManager.js +229 -0
- package/lib/views/swift/SwiftHybridViewManager.js +131 -0
- package/lib/writeFile.js +19 -0
- package/package.json +58 -29
- package/src/Logger.ts +63 -0
- package/src/autolinking/Autolinking.ts +9 -0
- package/src/autolinking/android/createCMakeExtension.ts +126 -0
- package/src/autolinking/android/createGradleExtension.ts +43 -0
- package/src/autolinking/android/createHybridObjectInitializer.ts +174 -0
- package/src/autolinking/createAndroidAutolinking.ts +28 -0
- package/src/autolinking/createIOSAutolinking.ts +24 -0
- package/src/autolinking/ios/createHybridObjectInitializer.ts +112 -0
- package/src/autolinking/ios/createPodspecRubyExtension.ts +76 -0
- package/src/autolinking/ios/createSwiftCxxBridge.ts +137 -0
- package/src/autolinking/ios/createSwiftUmbrellaHeader.ts +90 -0
- package/src/config/NitroConfig.ts +139 -0
- package/src/config/NitroUserConfig.ts +105 -0
- package/src/config/getConfig.ts +91 -0
- package/src/createGitAttributes.ts +15 -0
- package/src/createPlatformSpec.ts +176 -0
- package/src/getFiles.ts +31 -0
- package/src/getPlatformSpecs.ts +202 -0
- package/src/index.ts +146 -0
- package/src/init.ts +186 -0
- package/src/nitrogen.ts +246 -0
- package/src/prettifyDirectory.ts +32 -0
- package/src/syntax/BridgedType.ts +59 -0
- package/src/syntax/CodeNode.ts +24 -0
- package/src/syntax/HybridObjectSpec.ts +14 -0
- package/src/syntax/Method.ts +154 -0
- package/src/syntax/Parameter.ts +81 -0
- package/src/syntax/Property.ts +203 -0
- package/src/syntax/SourceFile.ts +80 -0
- package/src/syntax/c++/CppEnum.ts +128 -0
- package/src/syntax/c++/CppHybridObject.ts +165 -0
- package/src/syntax/c++/CppHybridObjectRegistration.ts +39 -0
- package/src/syntax/c++/CppStruct.ts +129 -0
- package/src/syntax/c++/CppUnion.ts +105 -0
- package/src/syntax/c++/getForwardDeclaration.ts +19 -0
- package/src/syntax/c++/includeNitroHeader.ts +40 -0
- package/src/syntax/createType.ts +365 -0
- package/src/syntax/getAllTypes.ts +18 -0
- package/src/syntax/getCustomTypeConfig.ts +71 -0
- package/src/syntax/getHybridObjectName.ts +48 -0
- package/src/syntax/getInterfaceProperties.ts +21 -0
- package/src/syntax/getReferencedTypes.ts +57 -0
- package/src/syntax/helpers.ts +79 -0
- package/src/syntax/isCoreType.ts +60 -0
- package/src/syntax/kotlin/FbjniHybridObject.ts +313 -0
- package/src/syntax/kotlin/JNINativeRegistrations.ts +19 -0
- package/src/syntax/kotlin/KotlinBoxedPrimitive.ts +19 -0
- package/src/syntax/kotlin/KotlinCxxBridgedType.ts +942 -0
- package/src/syntax/kotlin/KotlinEnum.ts +130 -0
- package/src/syntax/kotlin/KotlinFunction.ts +277 -0
- package/src/syntax/kotlin/KotlinHybridObject.ts +205 -0
- package/src/syntax/kotlin/KotlinHybridObjectRegistration.ts +51 -0
- package/src/syntax/kotlin/KotlinStruct.ts +198 -0
- package/src/syntax/kotlin/KotlinVariant.ts +212 -0
- package/src/syntax/swift/SwiftCxxBridgedType.ts +874 -0
- package/src/syntax/swift/SwiftCxxTypeHelper.ts +674 -0
- package/src/syntax/swift/SwiftEnum.ts +65 -0
- package/src/syntax/swift/SwiftFunction.ts +91 -0
- package/src/syntax/swift/SwiftHybridObject.ts +121 -0
- package/src/syntax/swift/SwiftHybridObjectBridge.ts +522 -0
- package/src/syntax/swift/SwiftHybridObjectRegistration.ts +75 -0
- package/src/syntax/swift/SwiftStruct.ts +85 -0
- package/src/syntax/swift/SwiftVariant.ts +67 -0
- package/src/syntax/types/ArrayBufferType.ts +49 -0
- package/src/syntax/types/ArrayType.ts +62 -0
- package/src/syntax/types/BigIntType.ts +35 -0
- package/src/syntax/types/BooleanType.ts +35 -0
- package/src/syntax/types/CustomType.ts +47 -0
- package/src/syntax/types/DateType.ts +43 -0
- package/src/syntax/types/EnumType.ts +130 -0
- package/src/syntax/types/ErrorType.ts +44 -0
- package/src/syntax/types/FunctionType.ts +167 -0
- package/src/syntax/types/HybridObjectBaseType.ts +54 -0
- package/src/syntax/types/HybridObjectType.ts +198 -0
- package/src/syntax/types/MapType.ts +49 -0
- package/src/syntax/types/NamedWrappingType.ts +33 -0
- package/src/syntax/types/NullType.ts +30 -0
- package/src/syntax/types/NumberType.ts +34 -0
- package/src/syntax/types/OptionalType.ts +66 -0
- package/src/syntax/types/PromiseType.ts +72 -0
- package/src/syntax/types/RecordType.ts +56 -0
- package/src/syntax/types/ResultWrappingType.ts +53 -0
- package/src/syntax/types/StringType.ts +44 -0
- package/src/syntax/types/StructType.ts +83 -0
- package/src/syntax/types/TupleType.ts +53 -0
- package/src/syntax/types/Type.ts +82 -0
- package/src/syntax/types/VariantType.ts +92 -0
- package/src/syntax/types/VoidType.ts +34 -0
- package/src/syntax/types/getTypeAs.ts +15 -0
- package/src/utils.ts +162 -0
- package/src/views/CppHybridViewComponent.ts +304 -0
- package/src/views/createHostComponentJs.ts +34 -0
- package/src/views/kotlin/KotlinHybridViewManager.ts +258 -0
- package/src/views/swift/SwiftHybridViewManager.ts +153 -0
- package/src/writeFile.ts +27 -0
- package/.jshintignore +0 -6
- package/.jshintrc +0 -3
- package/.npmignore +0 -3
- package/.travis.yml +0 -13
- package/LICENSE +0 -13
- package/browser/nitrogen-min.js +0 -3
- package/browser/nitrogen.js +0 -6369
- package/lib/apiKey.js +0 -67
- package/lib/blob.js +0 -57
- package/lib/commandManager.js +0 -350
- package/lib/device.js +0 -19
- package/lib/memoryStore.js +0 -24
- package/lib/message.js +0 -298
- package/lib/permission.js +0 -121
- package/lib/principal.js +0 -330
- package/lib/service.js +0 -347
- package/lib/session.js +0 -494
- package/lib/user.js +0 -20
- package/publish +0 -2
- package/scripts/build-documentation +0 -4
- package/scripts/build-module +0 -27
- package/scripts/module.js +0 -12
- package/scripts/postamble.js +0 -1
- package/scripts/preamble.js +0 -2
- package/scripts/run-test-server +0 -9
- package/test/config.js +0 -12
- package/test/fixtures/images/image.jpg +0 -0
- package/test/fixtures/images/motion0.jpg +0 -0
- package/test/fixtures/images/motion1.jpg +0 -0
- package/test/fixtures/images/motion2.jpg +0 -0
- package/test/fixtures/index.js +0 -76
- package/test/main.js +0 -5
- package/test/memoryStore.js +0 -22
- package/test/mocha.opts +0 -3
- package/test/units/apiKey.js +0 -46
- package/test/units/blob.js +0 -35
- package/test/units/commandManager.js +0 -67
- package/test/units/device.js +0 -26
- package/test/units/heartbeat.js +0 -28
- package/test/units/message.js +0 -79
- package/test/units/permissions.js +0 -43
- package/test/units/principal.js +0 -116
- package/test/units/service.js +0 -92
- package/test/units/session.js +0 -97
- package/test/units/user.js +0 -48
- package/yuidoc.json +0 -8
package/test/memoryStore.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
function MemoryStore() {
|
|
2
|
-
this.clear();
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
MemoryStore.prototype.clear = function(callback) {
|
|
6
|
-
this.store = {};
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
MemoryStore.prototype.get = function(key, callback) {
|
|
10
|
-
return callback(null, this.store[key]);
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
MemoryStore.prototype.set = function(key, value, callback) {
|
|
14
|
-
this.store[key] = value;
|
|
15
|
-
if (callback) callback();
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
MemoryStore.prototype.delete = function(key, callback) {
|
|
19
|
-
delete this.store[key];
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
module.exports = MemoryStore;
|
package/test/mocha.opts
DELETED
package/test/units/apiKey.js
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
var assert = require('assert')
|
|
2
|
-
, config = require('../config')
|
|
3
|
-
, fixtures = require('../fixtures')
|
|
4
|
-
, nitrogen = require('../../lib');
|
|
5
|
-
|
|
6
|
-
describe('apiKey object', function() {
|
|
7
|
-
var service = new nitrogen.Service(config);
|
|
8
|
-
|
|
9
|
-
it('should be able to find all api keys for user', function(done) {
|
|
10
|
-
service.authenticate(fixtures.models.user, function(err, session, user) {
|
|
11
|
-
assert(!err);
|
|
12
|
-
assert.notEqual(!session, true);
|
|
13
|
-
assert.notEqual(!user, true);
|
|
14
|
-
|
|
15
|
-
nitrogen.ApiKey.find(session, {}, {}, function(err, apiKeys) {
|
|
16
|
-
assert(!err);
|
|
17
|
-
|
|
18
|
-
assert(apiKeys.length === 1);
|
|
19
|
-
assert(apiKeys[0].owner === fixtures.models.user.id);
|
|
20
|
-
|
|
21
|
-
done();
|
|
22
|
-
});
|
|
23
|
-
});
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
it('should be able to create an api key', function(done) {
|
|
27
|
-
service.authenticate(fixtures.models.user, function(err, session, user) {
|
|
28
|
-
assert(!err);
|
|
29
|
-
assert.notEqual(!session, true);
|
|
30
|
-
assert.notEqual(!user, true);
|
|
31
|
-
|
|
32
|
-
var apiKey = new nitrogen.ApiKey({
|
|
33
|
-
type: 'app',
|
|
34
|
-
name: 'My App',
|
|
35
|
-
redirect_uri: 'http://myserver'
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
apiKey.create(session, function(err, apiKey) {
|
|
39
|
-
assert(!err);
|
|
40
|
-
assert(apiKey.id);
|
|
41
|
-
|
|
42
|
-
done();
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
});
|
|
46
|
-
});
|
package/test/units/blob.js
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
var assert = require('assert')
|
|
2
|
-
, config = require('../config')
|
|
3
|
-
, fixtures = require('../fixtures')
|
|
4
|
-
, fs = require('fs')
|
|
5
|
-
, nitrogen = require('../../lib');
|
|
6
|
-
|
|
7
|
-
describe('blob object', function() {
|
|
8
|
-
|
|
9
|
-
it('should be able to save and get a blob', function(done) {
|
|
10
|
-
var service = new nitrogen.Service(config);
|
|
11
|
-
|
|
12
|
-
service.connect(fixtures.models.camera, function(err, session) {
|
|
13
|
-
assert(!err);
|
|
14
|
-
|
|
15
|
-
var blob = new nitrogen.Blob({
|
|
16
|
-
content_type: 'image/jpeg'
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
blob.save(session, fs.createReadStream('test/fixtures/images/image.jpg'), function(err, blob) {
|
|
20
|
-
assert(!err);
|
|
21
|
-
|
|
22
|
-
assert(blob.url);
|
|
23
|
-
assert(blob.link);
|
|
24
|
-
assert.equal(blob.url.slice(-(blob.id.length+1)), "/" + blob.id);
|
|
25
|
-
|
|
26
|
-
session.get({ url: blob.url }, function(err, resp, blobData) {
|
|
27
|
-
assert(!err);
|
|
28
|
-
assert.equal(resp.statusCode, 200);
|
|
29
|
-
assert.equal(blobData.length, 28014);
|
|
30
|
-
done();
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
});
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
var assert = require('assert')
|
|
2
|
-
, nitrogen = require('../../lib');
|
|
3
|
-
|
|
4
|
-
function MockManager() {
|
|
5
|
-
nitrogen.CommandManager.apply(this, arguments);
|
|
6
|
-
|
|
7
|
-
this.executedCount = 0;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
MockManager.prototype = Object.create(nitrogen.CommandManager.prototype);
|
|
11
|
-
MockManager.prototype.constructor = nitrogen.CameraManager;
|
|
12
|
-
|
|
13
|
-
MockManager.prototype.executeCommand = function() {
|
|
14
|
-
this.executedCount += 1;
|
|
15
|
-
this.executing = false;
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
MockManager.prototype.isCommand = function(message) {
|
|
19
|
-
return (message.is('cameraCommand'));
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
MockManager.prototype.isRelevant = function(message) {
|
|
23
|
-
return message.is('cameraCommand') || message.is('image');
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
MockManager.prototype.obsoletes = function(downstreamMsg, upstreamMsg) {
|
|
27
|
-
if (nitrogen.CommandManager.obsoletes(downstreamMsg, upstreamMsg)) return true;
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
describe('commandManager', function() {
|
|
31
|
-
it('should collapse obsolete messages', function(done) {
|
|
32
|
-
var commandManager = new MockManager();
|
|
33
|
-
|
|
34
|
-
var messages = [
|
|
35
|
-
new nitrogen.Message({
|
|
36
|
-
id: '1',
|
|
37
|
-
type: 'cameraCommand',
|
|
38
|
-
expires: new Date(2012,6,09,0,0,0),
|
|
39
|
-
body: {
|
|
40
|
-
command: 'snapshot'
|
|
41
|
-
}
|
|
42
|
-
}),
|
|
43
|
-
|
|
44
|
-
new nitrogen.Message({
|
|
45
|
-
id: '2',
|
|
46
|
-
type: 'cameraCommand',
|
|
47
|
-
expires: new Date(new Date().getTime() + 2 * 3600 * 1000),
|
|
48
|
-
body: {
|
|
49
|
-
command: 'snapshot',
|
|
50
|
-
message: {
|
|
51
|
-
tags: ['timeElapsed'],
|
|
52
|
-
expires: 'never'
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
})
|
|
56
|
-
];
|
|
57
|
-
|
|
58
|
-
messages.forEach(function(message) { commandManager.process(message); });
|
|
59
|
-
|
|
60
|
-
commandManager.collapse();
|
|
61
|
-
|
|
62
|
-
assert.equal(commandManager.messageQueue.length, 1);
|
|
63
|
-
assert.equal(commandManager.messageQueue[0].id, '2');
|
|
64
|
-
|
|
65
|
-
done();
|
|
66
|
-
});
|
|
67
|
-
});
|
package/test/units/device.js
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
var assert = require('assert')
|
|
2
|
-
, config = require('../config')
|
|
3
|
-
, fixtures = require('../fixtures')
|
|
4
|
-
, nitrogen = require('../../lib');
|
|
5
|
-
|
|
6
|
-
describe('device', function() {
|
|
7
|
-
|
|
8
|
-
it('should be able to create a device', function(done) {
|
|
9
|
-
var service = new nitrogen.Service(config);
|
|
10
|
-
|
|
11
|
-
var device = new nitrogen.Device({
|
|
12
|
-
nickname: "camera",
|
|
13
|
-
api_key: fixtures.models.userApiKey.key
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
service.connect(device, function(err, session, principal) {
|
|
17
|
-
assert(!err);
|
|
18
|
-
|
|
19
|
-
assert(principal.id);
|
|
20
|
-
assert(principal.nickname);
|
|
21
|
-
|
|
22
|
-
done();
|
|
23
|
-
});
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
});
|
package/test/units/heartbeat.js
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
var assert = require('assert')
|
|
2
|
-
, config = require('../config')
|
|
3
|
-
, fixtures = require('../fixtures')
|
|
4
|
-
, nitrogen = require('../../lib');
|
|
5
|
-
|
|
6
|
-
describe('heartbeat', function() {
|
|
7
|
-
|
|
8
|
-
it('should be able to send a heartbeat', function(done) {
|
|
9
|
-
var service = new nitrogen.Service(config);
|
|
10
|
-
|
|
11
|
-
service.connect(fixtures.models.camera, function(err, session, principal) {
|
|
12
|
-
assert(!err);
|
|
13
|
-
|
|
14
|
-
session.onMessage({ type: 'heartbeat' }, function(message) {
|
|
15
|
-
if (message.from === session.principal.id) {
|
|
16
|
-
done();
|
|
17
|
-
}
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
setTimeout(function() {
|
|
21
|
-
session.sendHeartbeat(function(err) {
|
|
22
|
-
assert(!err);
|
|
23
|
-
});
|
|
24
|
-
}, 200);
|
|
25
|
-
});
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
});
|
package/test/units/message.js
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
var assert = require('assert')
|
|
2
|
-
, config = require('../config')
|
|
3
|
-
, fixtures = require('../fixtures')
|
|
4
|
-
, nitrogen = require('../../lib');
|
|
5
|
-
|
|
6
|
-
describe('message', function() {
|
|
7
|
-
|
|
8
|
-
it('should send a message and receive it over a subscription', function(done) {
|
|
9
|
-
var service = new nitrogen.Service(config);
|
|
10
|
-
var subscriptionPassed = false;
|
|
11
|
-
var restPassed = false;
|
|
12
|
-
|
|
13
|
-
service.connect(fixtures.models.camera, function(err, session) {
|
|
14
|
-
assert.equal(err, null);
|
|
15
|
-
|
|
16
|
-
var message = new nitrogen.Message({
|
|
17
|
-
type: 'image',
|
|
18
|
-
body: {
|
|
19
|
-
url: 'http://localhost:3030/blobs/237849732497982'
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
var subId = session.onMessage(function(message) {
|
|
24
|
-
if (message.body.url !== 'http://localhost:3030/blobs/237849732497982') return;
|
|
25
|
-
|
|
26
|
-
subscriptionPassed = true;
|
|
27
|
-
session.disconnectSubscription(subId);
|
|
28
|
-
|
|
29
|
-
if (subscriptionPassed && restPassed) done();
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
setTimeout(function() {
|
|
33
|
-
message.send(session, function(err, messages) {
|
|
34
|
-
assert.equal(err, null);
|
|
35
|
-
|
|
36
|
-
messages.forEach(function(message) {
|
|
37
|
-
assert.equal(message.body.url, 'http://localhost:3030/blobs/237849732497982');
|
|
38
|
-
assert.notEqual(message.id, undefined);
|
|
39
|
-
assert.equal(message.type, 'image');
|
|
40
|
-
assert.notEqual(message.ts, undefined);
|
|
41
|
-
assert.equal(typeof message.ts, 'object');
|
|
42
|
-
|
|
43
|
-
// this should fail since session is not admin. just test making the request successfully
|
|
44
|
-
// since service itself has tests to cover functionality.
|
|
45
|
-
message.remove(session, function(err) {
|
|
46
|
-
assert.equal(!err, false);
|
|
47
|
-
|
|
48
|
-
restPassed = true;
|
|
49
|
-
if (subscriptionPassed && restPassed) done();
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
});
|
|
54
|
-
}, 200);
|
|
55
|
-
});
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
it('has a default constructor', function(done) {
|
|
59
|
-
var service = new nitrogen.Service(config);
|
|
60
|
-
service.connect(fixtures.models.camera, function(err, session) {
|
|
61
|
-
var message = new nitrogen.Message();
|
|
62
|
-
assert.notEqual(message.ts, null);
|
|
63
|
-
|
|
64
|
-
done();
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
it('find with no query returns all messages', function(done) {
|
|
69
|
-
var service = new nitrogen.Service(config);
|
|
70
|
-
service.connect(fixtures.models.camera, function(err, session) {
|
|
71
|
-
nitrogen.Message.find(session, {}, { skip: 0, sort: { ts: 1 } }, function(err, messages) {
|
|
72
|
-
assert(!err);
|
|
73
|
-
assert.equal(messages.length > 0, true);
|
|
74
|
-
done();
|
|
75
|
-
});
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
});
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
var assert = require('assert')
|
|
2
|
-
, config = require('../config')
|
|
3
|
-
, fixtures = require('../fixtures')
|
|
4
|
-
, nitrogen = require('../../lib');
|
|
5
|
-
|
|
6
|
-
describe('permission', function() {
|
|
7
|
-
|
|
8
|
-
it('should be able to create, find, and remove permissions', function(done) {
|
|
9
|
-
var service = new nitrogen.Service(config);
|
|
10
|
-
service.connect(fixtures.models.camera, function(err, session) {
|
|
11
|
-
var permission = new nitrogen.Permission({
|
|
12
|
-
issued_to: fixtures.models.camera.id,
|
|
13
|
-
principal_for: fixtures.models.camera.id,
|
|
14
|
-
priority: 100000000,
|
|
15
|
-
authorized: true
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
permission.create(session, function(err, permission) {
|
|
19
|
-
assert(!err);
|
|
20
|
-
assert.notEqual(permission.id, undefined);
|
|
21
|
-
|
|
22
|
-
nitrogen.Permission.find(session, { issued_to: fixtures.models.camera.id }, {}, function(err, permissions) {
|
|
23
|
-
assert(!err);
|
|
24
|
-
var startingLength = permissions.length;
|
|
25
|
-
|
|
26
|
-
assert.equal(startingLength, 2);
|
|
27
|
-
|
|
28
|
-
permission.remove(session, function(err) {
|
|
29
|
-
assert(!err);
|
|
30
|
-
|
|
31
|
-
nitrogen.Permission.find(session, { issued_to: fixtures.models.camera.id }, {}, function(err, newPermissions) {
|
|
32
|
-
assert(!err);
|
|
33
|
-
var endingLength = newPermissions.length;
|
|
34
|
-
|
|
35
|
-
assert.equal(endingLength, startingLength - 1);
|
|
36
|
-
done();
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
|
-
});
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
});
|
package/test/units/principal.js
DELETED
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
var assert = require('assert')
|
|
2
|
-
, config = require('../config')
|
|
3
|
-
, fixtures = require('../fixtures')
|
|
4
|
-
, nitrogen = require('../../lib');
|
|
5
|
-
|
|
6
|
-
describe('principal', function() {
|
|
7
|
-
var service = new nitrogen.Service(config);
|
|
8
|
-
|
|
9
|
-
it('find with no query returns all principals', function(done) {
|
|
10
|
-
service.connect(fixtures.models.camera, function(err, session) {
|
|
11
|
-
nitrogen.Principal.find(session, {}, {}, function(err, principals) {
|
|
12
|
-
assert(!err);
|
|
13
|
-
assert.equal(principals.length > 0, true);
|
|
14
|
-
done();
|
|
15
|
-
});
|
|
16
|
-
});
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
it('find with device query returns device principals', function(done) {
|
|
20
|
-
service.connect(fixtures.models.camera, function(err, session) {
|
|
21
|
-
nitrogen.Principal.find(session, {
|
|
22
|
-
type: "device"
|
|
23
|
-
}, {
|
|
24
|
-
skip: 0,
|
|
25
|
-
sort: { last_connection: 1 }
|
|
26
|
-
}, function(err, principals) {
|
|
27
|
-
assert(!err);
|
|
28
|
-
assert.equal(principals.length > 0, true);
|
|
29
|
-
assert.equal(principals[0].type, "device");
|
|
30
|
-
assert.notEqual(principals[0].toStoreId, undefined);
|
|
31
|
-
done();
|
|
32
|
-
});
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
it('should be able to save principals', function(done) {
|
|
37
|
-
service.connect(fixtures.models.camera, function(err, session, camera) {
|
|
38
|
-
assert(!err);
|
|
39
|
-
|
|
40
|
-
assert(camera.api_key);
|
|
41
|
-
|
|
42
|
-
camera.name = "camera";
|
|
43
|
-
|
|
44
|
-
var restFinished = false;
|
|
45
|
-
var subscribeFinished = false;
|
|
46
|
-
|
|
47
|
-
session.onPrincipal(function(principal) {
|
|
48
|
-
assert.equal(principal.name, 'camera');
|
|
49
|
-
assert.notEqual(principal.created_at, principal.updated_at);
|
|
50
|
-
|
|
51
|
-
subscribeFinished = true;
|
|
52
|
-
if (restFinished && subscribeFinished)
|
|
53
|
-
done();
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
setTimeout(function() {
|
|
57
|
-
camera.save(session, function(err, camera) {
|
|
58
|
-
assert(!err);
|
|
59
|
-
assert.equal(camera.name, "camera");
|
|
60
|
-
|
|
61
|
-
restFinished = true;
|
|
62
|
-
if (restFinished && subscribeFinished)
|
|
63
|
-
done();
|
|
64
|
-
});
|
|
65
|
-
}, 100);
|
|
66
|
-
});
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
it('should be able to remove a principal', function(done) {
|
|
70
|
-
var cameraForDelete = new nitrogen.Device({
|
|
71
|
-
nickname: "deleteCamera",
|
|
72
|
-
api_key: fixtures.models.userApiKey.key
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
service.connect(cameraForDelete, function(err, session, cameraForDelete) {
|
|
76
|
-
cameraForDelete.remove(session, function(err) {
|
|
77
|
-
assert(!err);
|
|
78
|
-
|
|
79
|
-
done();
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
it('should be able to fetch a single principal', function(done) {
|
|
85
|
-
service.connect(fixtures.models.camera, function(err, session, camera) {
|
|
86
|
-
assert(!err);
|
|
87
|
-
|
|
88
|
-
nitrogen.Principal.findById(session, camera.id, function(err, principal) {
|
|
89
|
-
assert(!err);
|
|
90
|
-
assert.equal(principal.id, camera.id);
|
|
91
|
-
|
|
92
|
-
done();
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
it('should be able to fetch an access token', function(done) {
|
|
98
|
-
service.connect(fixtures.models.camera, function(err, session, camera) {
|
|
99
|
-
assert(!err);
|
|
100
|
-
|
|
101
|
-
nitrogen.Principal.accessTokenFor(session, camera.id, {
|
|
102
|
-
expires: new Date(2019,1,1)
|
|
103
|
-
}, function(err, accessToken) {
|
|
104
|
-
assert(!err);
|
|
105
|
-
|
|
106
|
-
assert.notEqual(accessToken, undefined);
|
|
107
|
-
|
|
108
|
-
console.dir(accessToken);
|
|
109
|
-
|
|
110
|
-
assert.equal(accessToken.expires_at, new Date(2019,1,1).toISOString());
|
|
111
|
-
|
|
112
|
-
done();
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
});
|
|
116
|
-
});
|
package/test/units/service.js
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
var assert = require('assert')
|
|
2
|
-
, config = require('../config')
|
|
3
|
-
, fixtures = require('../fixtures')
|
|
4
|
-
, nitrogen = require('../../lib');
|
|
5
|
-
|
|
6
|
-
describe('service object', function() {
|
|
7
|
-
|
|
8
|
-
var service = new nitrogen.Service(config);
|
|
9
|
-
|
|
10
|
-
it('should be able to connect device', function(done) {
|
|
11
|
-
service.connect(fixtures.models.camera, function(err, session, camera) {
|
|
12
|
-
assert(!err);
|
|
13
|
-
assert(session);
|
|
14
|
-
|
|
15
|
-
session.log.info("i can successfully log too");
|
|
16
|
-
|
|
17
|
-
done();
|
|
18
|
-
});
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
it('should be able to authenticate user', function(done) {
|
|
22
|
-
service.authenticate(fixtures.models.user, function(err, session, user) {
|
|
23
|
-
assert(!err);
|
|
24
|
-
assert(session);
|
|
25
|
-
assert(user);
|
|
26
|
-
|
|
27
|
-
done();
|
|
28
|
-
});
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
it('camera should be able to impersonate itself', function(done) {
|
|
32
|
-
service.connect(fixtures.models.camera, function(err, session, camera) {
|
|
33
|
-
assert(!err);
|
|
34
|
-
assert(session);
|
|
35
|
-
|
|
36
|
-
session.impersonate(camera.id, function(err, impersonationSession) {
|
|
37
|
-
assert(!err);
|
|
38
|
-
assert(impersonationSession);
|
|
39
|
-
|
|
40
|
-
done();
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
it('thermometer should be not be able to impersonate the camera', function(done) {
|
|
46
|
-
var thermometer = new nitrogen.Device({
|
|
47
|
-
nickname: "thermometer",
|
|
48
|
-
api_key: fixtures.models.userApiKey.key
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
service.connect(thermometer, function(err, session, thermometer) {
|
|
52
|
-
assert(!err);
|
|
53
|
-
assert(session);
|
|
54
|
-
|
|
55
|
-
session.impersonate(fixtures.models.camera.id, function(err, impersonationSession) {
|
|
56
|
-
assert.equal(err.statusCode, 403);
|
|
57
|
-
assert(err.message);
|
|
58
|
-
|
|
59
|
-
done();
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
it('should be able to resume device session with valid accessToken', function(done) {
|
|
65
|
-
var thermometer = new nitrogen.Device({
|
|
66
|
-
nickname: "thermometer2",
|
|
67
|
-
api_key: fixtures.models.userApiKey.key
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
service.connect(thermometer, function(err, session, thermometer) {
|
|
71
|
-
assert(!err);
|
|
72
|
-
assert(session);
|
|
73
|
-
|
|
74
|
-
var resumedThermometer = new nitrogen.Principal({
|
|
75
|
-
accessToken: {
|
|
76
|
-
token: session.accessToken.token
|
|
77
|
-
},
|
|
78
|
-
id: thermometer.id,
|
|
79
|
-
nickname: thermometer.nickname
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
service.resume(resumedThermometer, function(err, resumedSession) {
|
|
83
|
-
assert(!err);
|
|
84
|
-
assert(resumedSession);
|
|
85
|
-
|
|
86
|
-
assert.equal(resumedSession.principal.id, thermometer.id);
|
|
87
|
-
|
|
88
|
-
done();
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
});
|
|
92
|
-
});
|
package/test/units/session.js
DELETED
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
var assert = require('assert')
|
|
2
|
-
, config = require('../config')
|
|
3
|
-
, fixtures = require('../fixtures')
|
|
4
|
-
, nitrogen = require('../../lib');
|
|
5
|
-
|
|
6
|
-
describe('session', function() {
|
|
7
|
-
|
|
8
|
-
var service = new nitrogen.Service(config);
|
|
9
|
-
|
|
10
|
-
it('session should be JSON serializable', function(done) {
|
|
11
|
-
service.connect(fixtures.models.camera, function(err, session) {
|
|
12
|
-
assert(!err);
|
|
13
|
-
|
|
14
|
-
// serializing a session with open subscriptions or heartbeats is not supported.
|
|
15
|
-
session.socket = null;
|
|
16
|
-
session.heartbeatTimeout = null;
|
|
17
|
-
|
|
18
|
-
var sessionJSON = JSON.stringify(session);
|
|
19
|
-
assert(sessionJSON);
|
|
20
|
-
|
|
21
|
-
done();
|
|
22
|
-
});
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
it('receiving a set-access-token header should update principal and session access token', function(done) {
|
|
26
|
-
|
|
27
|
-
service.connect(fixtures.models.camera, function(err, session) {
|
|
28
|
-
var resp = {
|
|
29
|
-
headers: {
|
|
30
|
-
"x-n2-set-access-token": JSON.stringify({
|
|
31
|
-
token: session.accessToken.token,
|
|
32
|
-
expires_at: new Date(2050, 1, 1),
|
|
33
|
-
created_at: new Date(),
|
|
34
|
-
id: '5250453b83dce2433d000008'
|
|
35
|
-
})
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
session.accessToken.token = 'notupdated';
|
|
40
|
-
|
|
41
|
-
session.afterRequest(null, resp, null, function(err, resp, body) {
|
|
42
|
-
assert.notEqual(session.accessToken.token, 'notupdated');
|
|
43
|
-
|
|
44
|
-
done();
|
|
45
|
-
});
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
it('can establish permanent subscription and receive deferred messages', function(done) {
|
|
50
|
-
|
|
51
|
-
service.connect(fixtures.models.camera, function(err, session) {
|
|
52
|
-
assert(!err);
|
|
53
|
-
|
|
54
|
-
// establish named subscription
|
|
55
|
-
session.on({
|
|
56
|
-
type: 'message',
|
|
57
|
-
filter: { type: '_permSubTest' },
|
|
58
|
-
name: 'permTest'
|
|
59
|
-
}, function(message) {
|
|
60
|
-
// session should be stopped and message should not be received here.
|
|
61
|
-
assert(false);
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
setTimeout(function() {
|
|
65
|
-
|
|
66
|
-
for (var id in session.subscriptions)
|
|
67
|
-
session.disconnectSubscription(id);
|
|
68
|
-
|
|
69
|
-
setTimeout(function() {
|
|
70
|
-
service.connect(fixtures.models.camera, function(err, newSession) {
|
|
71
|
-
assert(!err);
|
|
72
|
-
|
|
73
|
-
// send message while we are disconnected.
|
|
74
|
-
new nitrogen.Message({
|
|
75
|
-
type: '_permSubTest'
|
|
76
|
-
}).send(newSession);
|
|
77
|
-
|
|
78
|
-
setTimeout(function() {
|
|
79
|
-
// re-establish permanent subscription
|
|
80
|
-
newSession.on({
|
|
81
|
-
type: 'message',
|
|
82
|
-
filter: { type: '_permSubTest' },
|
|
83
|
-
name: 'permTest'
|
|
84
|
-
}, function(message) {
|
|
85
|
-
console.log("got message: " + JSON.stringify(message));
|
|
86
|
-
// we should receive queued messages from when we were disconnected.
|
|
87
|
-
if (message.type === '_permSubTest') {
|
|
88
|
-
done();
|
|
89
|
-
}
|
|
90
|
-
});
|
|
91
|
-
}, 200);
|
|
92
|
-
});
|
|
93
|
-
}, 200);
|
|
94
|
-
}, 200);
|
|
95
|
-
});
|
|
96
|
-
});
|
|
97
|
-
});
|