envoy-cli 1.0.0rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +3 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +95 -0
  5. data/.ruby-version +1 -0
  6. data/Gemfile +4 -0
  7. data/bin/envoy +12 -0
  8. data/bin/envoy.bak +485 -0
  9. data/bootstrap/base/.envoyrc +1 -0
  10. data/bootstrap/base/.jshintrc +91 -0
  11. data/bootstrap/base/.nvmrc +1 -0
  12. data/bootstrap/base/config/.gitkeep +0 -0
  13. data/bootstrap/base/docs/.gitkeep +0 -0
  14. data/bootstrap/base/gulpfile.js +0 -0
  15. data/bootstrap/base/i18n/.gitkeep +0 -0
  16. data/bootstrap/base/index.js +5 -0
  17. data/bootstrap/base/lib/.gitkeep +0 -0
  18. data/bootstrap/base/routes/.gitkeep +0 -0
  19. data/bootstrap/base/views/.gitkeep +0 -0
  20. data/bootstrap/base/workers/.gitkeep +0 -0
  21. data/bootstrap/events/generic.json +6 -0
  22. data/bootstrap/events/host_notification.json +27 -0
  23. data/bootstrap/events/route.json +6 -0
  24. data/bootstrap/events/sms_host_notification.json +158 -0
  25. data/bootstrap/templates/docs/about.md.erb +3 -0
  26. data/bootstrap/templates/gitignore.erb +8 -0
  27. data/bootstrap/templates/index.js.erb +5 -0
  28. data/bootstrap/templates/license.md.erb +1 -0
  29. data/bootstrap/templates/npmignore.erb +0 -0
  30. data/bootstrap/templates/package.json +24 -0
  31. data/bootstrap/templates/readme.md.erb +9 -0
  32. data/bootstrap/templates/routes/callback.js.erb +10 -0
  33. data/bootstrap/templates/routes/html.js.erb +9 -0
  34. data/bootstrap/templates/routes/json.js.erb +9 -0
  35. data/bootstrap/templates/routes/other.js.erb +9 -0
  36. data/bootstrap/templates/views/hello.html.erb +91 -0
  37. data/bootstrap/templates/views/starter.html.erb +10 -0
  38. data/bootstrap/templates/worker.js.erb +10 -0
  39. data/envoy-cli.gemspec +29 -0
  40. data/lib/envoy.rb +70 -0
  41. data/lib/envoy/version.rb +3 -0
  42. data/lib/inc/commands.rb +74 -0
  43. data/lib/inc/generator.rb +159 -0
  44. data/lib/inc/mixins.rb +347 -0
  45. data/lib/inc/runner.rb +21 -0
  46. data/lib/tasks/plugin.rb +181 -0
  47. data/lib/tasks/routes.rb +39 -0
  48. data/lib/tasks/test.rb +68 -0
  49. data/lib/tasks/workers.rb +39 -0
  50. data/readme.md +0 -0
  51. metadata +276 -0
@@ -0,0 +1 @@
1
+ {}
@@ -0,0 +1,91 @@
1
+ {
2
+ // JSHint Default Configuration File (as on JSHint website)
3
+ // See http://jshint.com/docs/ for more details
4
+
5
+ "maxerr" : 50, // {int} Maximum error before stopping
6
+
7
+ // Enforcing
8
+ "bitwise" : true, // true: Prohibit bitwise operators (&, |, ^, etc.)
9
+ "camelcase" : false, // true: Identifiers must be in camelCase
10
+ "curly" : true, // true: Require {} for every new block or scope
11
+ "eqeqeq" : true, // true: Require triple equals (===) for comparison
12
+ "forin" : false, // true: Require filtering for..in loops with obj.hasOwnProperty()
13
+ "freeze" : true, // true: prohibits overwriting prototypes of native objects such as Array, Date etc.
14
+ "immed" : false, // true: Require immediate invocations to be wrapped in parens e.g. `(function () { } ());`
15
+ "latedef" : true, // true: Require variables/functions to be defined before being used
16
+ "newcap" : true, // true: Require capitalization of all constructor functions e.g. `new F()`
17
+ "noarg" : true, // true: Prohibit use of `arguments.caller` and `arguments.callee`
18
+ "noempty" : true, // true: Prohibit use of empty blocks
19
+ "nonbsp" : true, // true: Prohibit "non-breaking whitespace" characters.
20
+ "nonew" : false, // true: Prohibit use of constructors for side-effects (without assignment)
21
+ "plusplus" : false, // true: Prohibit use of `++` and `--`
22
+ "quotmark" : true, // Quotation mark consistency:
23
+ // false : do nothing (default)
24
+ // true : ensure whatever is used is consistent
25
+ // "single" : require single quotes
26
+ // "double" : require double quotes
27
+ "undef" : true, // true: Require all non-global variables to be declared (prevents global leaks)
28
+ "unused" : "vars", // Unused variables:
29
+ // true : all variables, last function parameter
30
+ // "vars" : all variables only
31
+ // "strict" : all variables, all function parameters
32
+ "strict" : false, // true: Requires all functions run in ES5 Strict Mode
33
+ "maxparams" : false, // {int} Max number of formal params allowed per function
34
+ "maxdepth" : false, // {int} Max depth of nested blocks (within functions)
35
+ "maxstatements" : false, // {int} Max number statements per function
36
+ "maxcomplexity" : false, // {int} Max cyclomatic complexity per function
37
+ "maxlen" : false, // {int} Max number of characters per line
38
+ "varstmt" : false, // true: Disallow any var statements. Only `let` and `const` are allowed.
39
+
40
+ // Relaxing
41
+ "asi" : false, // true: Tolerate Automatic Semicolon Insertion (no semicolons)
42
+ "boss" : false, // true: Tolerate assignments where comparisons would be expected
43
+ "debug" : false, // true: Allow debugger statements e.g. browser breakpoints.
44
+ "eqnull" : false, // true: Tolerate use of `== null`
45
+ "esversion" : 5, // {int} Specify the ECMAScript version to which the code must adhere.
46
+ "moz" : false, // true: Allow Mozilla specific syntax (extends and overrides esnext features)
47
+ // (ex: `for each`, multiple try/catch, function expression…)
48
+ "evil" : false, // true: Tolerate use of `eval` and `new Function()`
49
+ "expr" : false, // true: Tolerate `ExpressionStatement` as Programs
50
+ "funcscope" : false, // true: Tolerate defining variables inside control statements
51
+ "globalstrict" : false, // true: Allow global "use strict" (also enables 'strict')
52
+ "iterator" : false, // true: Tolerate using the `__iterator__` property
53
+ "lastsemic" : false, // true: Tolerate omitting a semicolon for the last statement of a 1-line block
54
+ "laxbreak" : false, // true: Tolerate possibly unsafe line breakings
55
+ "laxcomma" : false, // true: Tolerate comma-first style coding
56
+ "loopfunc" : false, // true: Tolerate functions being defined in loops
57
+ "multistr" : false, // true: Tolerate multi-line strings
58
+ "noyield" : false, // true: Tolerate generator functions with no yield statement in them.
59
+ "notypeof" : false, // true: Tolerate invalid typeof operator values
60
+ "proto" : false, // true: Tolerate using the `__proto__` property
61
+ "scripturl" : false, // true: Tolerate script-targeted URLs
62
+ "shadow" : false, // true: Allows re-define variables later in code e.g. `var x=1; x=2;`
63
+ "sub" : false, // true: Tolerate using `[]` notation when it can still be expressed in dot notation
64
+ "supernew" : false, // true: Tolerate `new function () { ... };` and `new Object;`
65
+ "validthis" : false, // true: Tolerate using this in a non-constructor function
66
+
67
+ // Environments
68
+ "browser" : true, // Web Browser (window, document, etc)
69
+ "browserify" : false, // Browserify (node.js code in the browser)
70
+ "couch" : false, // CouchDB
71
+ "devel" : true, // Development/debugging (alert, confirm, etc)
72
+ "dojo" : false, // Dojo Toolkit
73
+ "jasmine" : false, // Jasmine
74
+ "jquery" : false, // jQuery
75
+ "mocha" : true, // Mocha
76
+ "mootools" : false, // MooTools
77
+ "node" : true, // Node.js
78
+ "nonstandard" : false, // Widely adopted globals (escape, unescape, etc)
79
+ "phantom" : false, // PhantomJS
80
+ "prototypejs" : false, // Prototype and Scriptaculous
81
+ "qunit" : false, // QUnit
82
+ "rhino" : false, // Rhino
83
+ "shelljs" : false, // ShellJS
84
+ "typed" : false, // Globals for typed array constructions
85
+ "worker" : false, // Web Workers
86
+ "wsh" : false, // Windows Scripting Host
87
+ "yui" : false, // Yahoo User Interface
88
+
89
+ // Custom Globals
90
+ "globals" : {} // additional predefined global variables
91
+ }
@@ -0,0 +1 @@
1
+ 4.3.2
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,5 @@
1
+ var EnvoyPlatform = require('envoy-platform-sdk');
2
+ var PlatformInstance = new EnvoyPlatform({
3
+ baseDir: __dirname
4
+ });
5
+ exports.handler = PlatformInstance.getHandler();
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "route",
3
+ "request_meta": {
4
+ "route":"welcome"
5
+ }
6
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "type": "event",
3
+ "event_name": "host_notification",
4
+ "payload": {
5
+ "message": "Hey Jeramie! David B is here for you at the Cool Chip front desk.",
6
+ "guest": {
7
+ "id":1,
8
+ "name": "John Doe",
9
+ "email": "johndoe@example.com",
10
+ "sms_number": "+17194289439"
11
+ }
12
+ },
13
+ "user": {
14
+ "id":99,
15
+ "name": "Manager Doe",
16
+ "email": "managerdoe@example.com",
17
+ "sms_number": "+17194289439"
18
+ },
19
+ "location": {
20
+ "id":1,
21
+ "name": "Blue Lake"
22
+ },
23
+ "company": {
24
+ "id":1,
25
+ "name": "Acme Corp."
26
+ }
27
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "route",
3
+ "request_meta": {
4
+ "route":""
5
+ }
6
+ }
@@ -0,0 +1,158 @@
1
+ {
2
+ "type": "event",
3
+ "event_name": "sms_host_notification",
4
+ "payload": {
5
+ "hipchat_account": null,
6
+ "entry": {
7
+ "id": 39,
8
+ "signed_in_time_utc": "2016-04-14 20:12:32",
9
+ "signed_in_time_local": "2016-04-14 14:12:32",
10
+ "signed_out_time_utc": "",
11
+ "signed_out_time_local": "",
12
+ "your_full_name": "David B",
13
+ "your_email_address": "",
14
+ "your_company": "",
15
+ "host": "Jeramie Davis",
16
+ "nda_pdf_url": "",
17
+ "photo_url": "",
18
+ "private_notes": "",
19
+ "Custom Fields": [
20
+ {
21
+ "Your Full Name": "David B"
22
+ },
23
+ {
24
+ "Your Email Address": ""
25
+ },
26
+ {
27
+ "Your Company": ""
28
+ },
29
+ {
30
+ "Host": "Jeramie Davis"
31
+ }
32
+ ],
33
+ "full_name": "David B",
34
+ "is_delivery": false
35
+ },
36
+ "host_name": "Jeramie Davis",
37
+ "host_email": "mike@bechtelar.net",
38
+ "host_phone_number": "+17194289439",
39
+ "visitor_name": "David B",
40
+ "checkin_time": "2016-04-14T14:12:32.000-06:00",
41
+ "location_name": "Cool Chip",
42
+ "delegated": false,
43
+ "assistant_name": null,
44
+ "ratelimited": false,
45
+ "numbers": [
46
+ "+17194289439"
47
+ ],
48
+ "message": "Hey Jeramie! David B is here for you at the Cool Chip front desk."
49
+ },
50
+ "location": {
51
+ "id": 1,
52
+ "company_id": 1,
53
+ "master_location_id": null,
54
+ "saml_location_id": "8281d29f7160cee7e578",
55
+ "legacy_email": null,
56
+ "company_name": "Cool Chip",
57
+ "company_name_override": null,
58
+ "authentication_token": "46f2d232bfea2cf398e4ece8e8f44e26",
59
+ "eventbrite_access_token": null,
60
+ "time_zone": "America/Denver",
61
+ "invites_secret_link": "8fe4d5811441894e1321",
62
+ "security_desk_link": "15fb59b319c4486b5495",
63
+ "address": "12109 N 5th St, Parker, CO, United States",
64
+ "notes": "**This is an example pre-registration invite you can send visitors**\n\n# Getting here\n\n## Public transportation\nWe recommend taking BART to the Montgomery Station or Muni 10-Townsend to 3rd & Bryant.\n\n## Biking\n\nWe offer on-site bike parking for visitors. Bring you bike on up to the 2nd floor.\n\n## Driving\n\nWe recommend parking in the XYZ parking lot. Daily parking is available at very reasonable rates. If you are visiting as an interview candidate, please contact your recruiter to coordinate parking.\n\n# Arriving at Envoy\n\nWe are located on the second floor. Please take the elevators and check in using the iPad in our lobby. Your host will be notified that you have arrived.\n\n## Wi-Fi\n\nNetwork: Envoy Guest\n\nPassword: #2p1Gi^&zB3m\n\n# Important Notes\n\nWhen you arrive at our building, we'll buzz you in. Take the elevator to the third floor and walk on in! Just make sure you \"sign with Envoy\" when you get here :)\n\n# Additional questions?\n\nPlease email reception@envoy.com\n",
65
+ "send_invite_to_visitor": true,
66
+ "webhook_url": "",
67
+ "api_key": "f920768e2bed71544d560ccf8a6a6042",
68
+ "note": null,
69
+ "latitude": 39.538022,
70
+ "longitude": -104.817747,
71
+ "app_version": {
72
+ "spec": "1.8.0",
73
+ "match": {}
74
+ },
75
+ "contact_full_name": null,
76
+ "contact_email": null,
77
+ "has_webhook": false,
78
+ "cc_receptionist_enabled": false,
79
+ "name": "HQ",
80
+ "active": true,
81
+ "employees_csv_file_name": null,
82
+ "employees_csv_content_type": null,
83
+ "employees_csv_file_size": null,
84
+ "employees_csv_updated_at": null,
85
+ "referring_url": null,
86
+ "landing_url": null,
87
+ "locale": "en",
88
+ "address_line_1": "12109 North 5th Street",
89
+ "address_line_2": "",
90
+ "city": "Parker",
91
+ "zip": "80134",
92
+ "country": "US",
93
+ "state": "CO",
94
+ "bcc_email": null,
95
+ "employees_last_sync_at": null,
96
+ "employees_sync_message": null,
97
+ "legacy_user_id": null,
98
+ "created_at": "2016-03-24T01:21:40.994Z",
99
+ "updated_at": "2016-03-24T01:29:31.018Z",
100
+ "legacy_master_location_id": null,
101
+ "send_nda_invite": false,
102
+ "dashboard_fields": [
103
+ {
104
+ "name": "Document",
105
+ "component_name": "document-column"
106
+ },
107
+ {
108
+ "name": "Host Notification",
109
+ "component_name": "host-notification-column"
110
+ },
111
+ {
112
+ "name": "Signed In",
113
+ "component_name": "signed-in-column"
114
+ },
115
+ {
116
+ "name": "Signed Out",
117
+ "component_name": "signed-out-column"
118
+ }
119
+ ],
120
+ "meeting_place_name": null,
121
+ "office365_webhook_url": null
122
+ },
123
+ "company": {
124
+ "id": 1,
125
+ "name": "Cool Chip",
126
+ "created_at": "2016-03-24T01:21:40.693Z",
127
+ "updated_at": "2016-04-14T18:07:08.896Z",
128
+ "saml_fingerprint": null,
129
+ "saml_http_url": null,
130
+ "stripe_customer_id": "cus_88eTvtOE1b3A8G",
131
+ "stripe_plan_id": "premium-monthly",
132
+ "stripe_total_revenue": null,
133
+ "stripe_canceled": false,
134
+ "trial_end_date": "2016-03-24T01:28:31.725Z",
135
+ "cached_quantity": 1,
136
+ "slack_access_token": null,
137
+ "slack_team": null,
138
+ "host_notification_rate": 0,
139
+ "receipt_email_opted_in": false,
140
+ "pre_registration_host_confirmation": false,
141
+ "invite_email_to_visitor": true,
142
+ "active": true,
143
+ "procurement_source": "Envoy in a Box",
144
+ "referral": null,
145
+ "employees_last_sync_at": null,
146
+ "employees_sync_provider": null,
147
+ "employees_sync_state": "never",
148
+ "employees_sync_mode": "off",
149
+ "onboarding_status": "complete",
150
+ "onboarding_locations_count": "2-5",
151
+ "gtalk_enabled": false,
152
+ "plan_intent": "basic",
153
+ "employees_sync_started_at": null,
154
+ "is_beta": false,
155
+ "slack_bot_user_id": null,
156
+ "slack_bot_access_token": null
157
+ }
158
+ }
@@ -0,0 +1,3 @@
1
+ # <%= @name %>
2
+
3
+ User facing description here
@@ -0,0 +1,8 @@
1
+ node_modules
2
+ envoy-creds.json
3
+ npm-debug.log
4
+ credentials.json
5
+ .DS_Store
6
+ dist
7
+ .envoy
8
+ .env
@@ -0,0 +1,5 @@
1
+ var Platform = require('envoy-platform-sdk');
2
+ var platform = new Platform(require('./envoy-manifest.json'));
3
+
4
+ require('dotenv').config();
5
+ exports.handler = platform.handler();
@@ -0,0 +1 @@
1
+ TEXT OF LICENSE HERE
File without changes
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "",
3
+ "version": "",
4
+ "description": "",
5
+ "main": "index.js",
6
+ "repository": "",
7
+ "private": true,
8
+ "scripts": {
9
+ "setup": "./bin/setup",
10
+ "invoke": "./bin/invoke"
11
+ },
12
+ "author": "",
13
+ "license": "SEE LICENSE IN license.md",
14
+ "devDependencies": {
15
+ },
16
+ "dependencies": {
17
+ "dotenv": "^2.0.0",
18
+ "envoy-platform-sdk": "git+ssh://git@github.com/envoy/envoy-platform-sdk-nodejs.git"
19
+ },
20
+ "bundledDependencies": [
21
+ "dotenv",
22
+ "envoy-platform-sdk"
23
+ ]
24
+ }
@@ -0,0 +1,9 @@
1
+ # <%= @name %>
2
+
3
+ @todo Describe what your plugin does.
4
+
5
+ ## Setup
6
+ Install and setup instructions
7
+
8
+ ## Deployment
9
+ Deployment instructions
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Handle the <%=@route_name%> route
3
+ *
4
+ * @param EnvoyRequest req
5
+ * @param EnvoyResponse res
6
+ */
7
+ module.exports = function(req, res) {
8
+ var data = {};
9
+ res.job_complete('status message', data);
10
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Handle the <%=@route_name%> route
3
+ *
4
+ * @param EnvoyRequest req
5
+ * @param EnvoyResponse res
6
+ */
7
+ module.exports = function(req, res) {
8
+ res.view('<%=@route_name%>.html');
9
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Handle the <%=@route_name%> route
3
+ *
4
+ * @param EnvoyRequest req
5
+ * @param EnvoyResponse res
6
+ */
7
+ module.exports = function(req, res) {
8
+ res.json({});
9
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Handle the <%=@route_name%> route
3
+ *
4
+ * @param EnvoyRequest req
5
+ * @param EnvoyResponse res
6
+ */
7
+ module.exports = function(req, res) {
8
+ res.succeed();
9
+ }
@@ -0,0 +1,91 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+
4
+ <head>
5
+ <title>Success! - Envoy Platform</title>
6
+ <style type="text/css">
7
+ body {
8
+ padding: 100px;
9
+ font-family: Avenir, Helvetica, sans-serif;
10
+ max-width: 700px;
11
+ margin: 0 auto;
12
+ }
13
+
14
+ .logo-svg {
15
+ height: 38px;
16
+ margin-right: 10px;
17
+ position: relative;
18
+ bottom: -7px;
19
+ }
20
+
21
+ h1 {
22
+ font-weight: 200;
23
+ color: #B8BFD3;
24
+ font-size: 30px;
25
+ text-align: center;
26
+ padding-bottom: 40px;
27
+ margin-bottom: 40px;
28
+ border-bottom: 1px solid #E1E1E1;
29
+ }
30
+
31
+ h2 {
32
+ font-size: 20px;
33
+ color: #45474D;
34
+ font-weight: 500;
35
+ text-align: center;
36
+ margin-bottom: 40px;
37
+ }
38
+
39
+ h2 svg {
40
+ vertical-align: middle;
41
+ margin-right: 10px;
42
+ }
43
+
44
+ p {
45
+ font-size: 18px;
46
+ color: #45474D;
47
+ text-align: center;
48
+ margin-bottom: 40px;
49
+ }
50
+ a {
51
+ color: #4A90E2;
52
+ }
53
+ </style>
54
+ </head>
55
+
56
+ <body>
57
+ <h1>
58
+ <svg class="logo-svg" viewBox="0 0 247 78" xmlns="http://www.w3.org/2000/svg" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
59
+ <g sketch:type="MSLayerGroup" fill="none">
60
+ <g fill="#C50000" sketch:type="MSShapeGroup">
61
+ <path d="M6.72 4.274c-1.35 0-2.448 1.104-2.448 2.461v64.529c0 1.358 1.097 2.461 2.448 2.461h53.85c1.35 0 2.448-1.104 2.448-2.461v-64.529c0-1.358-1.097-2.461-2.448-2.461h-53.85zm53.881-4.274c3.697 0 6.689 3.009 6.689 6.708v64.584c0 3.7-2.993 6.708-6.689 6.708h-53.912c-3.697 0-6.689-3.009-6.689-6.708v-64.584c0-3.7 2.993-6.708 6.689-6.708h53.912z" />
62
+ <g transform="translate(21.722 16.196)">
63
+ <rect x=".175" y=".099" width="23.498" height="4.274" rx="2.137" />
64
+ <rect x=".175" y="13.455" width="23.498" height="4.274" rx="2.137" />
65
+ <rect x=".442" y="27.345" width="17.09" height="4.274" rx="2.137" />
66
+ <rect x=".175" y="41.236" width="23.498" height="4.274" rx="2.137" />
67
+ <rect x=".175" y="13.455" width="4.272" height="32.055" rx="2.137" />
68
+ </g>
69
+ </g>
70
+ <path d="M117.148 16.295c.613 0 1.058.027 1.333.08.275.053.529.154.762.303.613.404.92.999.92 1.786s-.307 1.382-.92 1.786c-.233.149-.487.25-.762.303-.275.053-.719.08-1.333.08h-20.404v16.009h12.427c.613 0 1.058.027 1.333.08.275.053.529.154.762.303.613.404.92.999.92 1.786s-.307 1.382-.92 1.786c-.233.149-.487.25-.762.303-.275.053-.719.08-1.333.08h-12.427v16.391h20.404c.613 0 1.058.027 1.333.08.275.053.529.154.762.303.613.404.92.999.92 1.786s-.307 1.382-.92 1.786c-.233.149-.487.25-.762.303-.275.053-.719.08-1.333.08h-22.339c-.381 0-.772-.027-1.174-.08-.402-.053-.772-.25-1.111-.59-.338-.34-.534-.712-.587-1.116-.053-.404-.079-.797-.079-1.18v-39.479c0-.383.026-.776.079-1.18.053-.404.249-.776.587-1.116.338-.34.709-.537 1.111-.59.402-.053.793-.08 1.174-.08h22.339zm35.058 42.282c0 .575-.027 1.006-.081 1.293-.054.287-.166.569-.338.846-.172.298-.43.537-.773.718-.344.181-.73.271-1.16.271-.43 0-.816-.09-1.16-.271-.344-.181-.601-.42-.773-.718-.172-.277-.285-.559-.338-.846-.054-.287-.081-.718-.081-1.293v-16.411c0-2.81-.687-4.906-2.062-6.29-1.375-1.384-3.276-2.075-5.703-2.075-1.203 0-2.293.176-3.27.527-.977.351-1.81.878-2.497 1.58-.687.702-1.219 1.575-1.595 2.618-.376 1.043-.564 2.256-.564 3.64v16.411c0 .575-.027 1.006-.081 1.293-.054.287-.166.569-.338.846-.172.298-.43.537-.773.718-.344.181-.73.271-1.16.271-.43 0-.816-.09-1.16-.271-.344-.181-.601-.42-.773-.718-.172-.277-.285-.559-.338-.846-.054-.287-.081-.718-.081-1.293v-25.669c0-.553.027-.974.081-1.261.054-.287.166-.58.338-.878.172-.298.43-.537.773-.718.344-.181.73-.271 1.16-.271.43 0 .816.09 1.16.271.344.181.601.42.773.718.172.298.285.591.338.878.054.287.081.708.081 1.261v.575c1.16-1.277 2.492-2.235 3.995-2.873 1.504-.639 3.136-.958 4.898-.958 1.74 0 3.297.25 4.672.75 1.375.5 2.556 1.229 3.544 2.187 1.138 1.086 1.971 2.363 2.497 3.831.526 1.469.789 3.118.789 4.949v17.209zm22.29.308c-.194.556-.387 1.01-.581 1.362-.194.353-.441.646-.742.882-.495.385-1.075.577-1.742.577-.688 0-1.269-.192-1.742-.577-.301-.235-.548-.529-.742-.882-.194-.353-.387-.807-.581-1.362l-8.902-25.58c-.172-.492-.274-.914-.306-1.266-.032-.353.005-.689.113-1.01.151-.406.43-.737.839-.994.409-.256.839-.385 1.29-.385.688 0 1.193.219 1.516.657.323.438.591.967.806 1.587l7.708 22.951 7.708-22.951c.215-.62.484-1.149.806-1.587.323-.438.828-.657 1.516-.657.452 0 .882.128 1.29.385.409.256.688.588.839.994.108.321.145.657.113 1.01-.032.353-.134.775-.306 1.266l-8.902 25.58zm28.445-1.186c2.289 0 4.192-.761 5.711-2.282.556-.557 1-1.205 1.332-1.945.332-.739.588-1.532.77-2.378.182-.846.305-1.73.369-2.652.064-.921.096-1.843.096-2.764 0-.921-.032-1.837-.096-2.748-.064-.911-.187-1.789-.369-2.636-.182-.846-.438-1.639-.77-2.378-.332-.739-.775-1.387-1.332-1.945-.77-.771-1.62-1.35-2.551-1.736-.93-.386-1.984-.579-3.16-.579-1.176 0-2.23.193-3.16.579-.93.386-1.781.964-2.551 1.736-.556.557-1 1.205-1.332 1.945-.332.739-.588 1.532-.77 2.378-.182.846-.305 1.725-.369 2.636s-.096 1.827-.096 2.748c0 .921.032 1.843.096 2.764.064.921.187 1.805.369 2.652.182.846.438 1.639.77 2.378.332.739.775 1.387 1.332 1.945 1.519 1.521 3.422 2.282 5.711 2.282zm5.124-27.078c1.491.647 2.776 1.511 3.855 2.592.804.827 1.459 1.717 1.967 2.671.508.954.899 1.956 1.174 3.005.275 1.049.46 2.141.555 3.275.095 1.134.143 2.306.143 3.514 0 1.208-.048 2.38-.143 3.514-.095 1.134-.28 2.226-.555 3.275s-.666 2.051-1.174 3.005c-.508.954-1.163 1.844-1.967 2.671-1.079 1.081-2.364 1.945-3.855 2.592s-3.199.97-5.124.97c-1.925 0-3.633-.323-5.124-.97-1.491-.647-2.776-1.511-3.855-2.592-.804-.827-1.459-1.717-1.967-2.671-.508-.954-.899-1.956-1.174-3.005-.275-1.049-.46-2.141-.555-3.275-.095-1.134-.143-2.306-.143-3.514 0-1.208.048-2.38.143-3.514.095-1.134.28-2.226.555-3.275s.666-2.051 1.174-3.005c.508-.954 1.163-1.844 1.967-2.671 1.079-1.081 2.364-1.945 3.855-2.592s3.199-.97 5.124-.97c1.925 0 3.633.323 5.124.97zm34.088 1.278c.215-.621.484-1.151.807-1.59.323-.439.829-.658 1.518-.658.452 0 .883.128 1.292.385.409.257.689.589.84.996.108.321.145.658.113 1.012-.032.353-.135.776-.307 1.269l-12.466 35.809c-.258.749-.576 1.451-.953 2.104s-.813 1.215-1.308 1.686c-.818.792-1.722 1.349-2.713 1.67-.99.321-2.035.482-3.133.482-1.055 0-1.787-.161-2.196-.482-.237-.193-.414-.412-.533-.658-.118-.246-.178-.562-.178-.947 0-.728.248-1.274.743-1.638.194-.15.42-.262.678-.337.258-.075.603-.112 1.033-.112 1.163 0 2.131-.273 2.907-.819.775-.546 1.41-1.568 1.905-3.067l2.002-5.973-9.721-27.715c-.172-.492-.275-.915-.307-1.269-.032-.353.005-.69.113-1.012.151-.407.431-.739.84-.996s.84-.385 1.292-.385c.689 0 1.195.219 1.518.658.323.439.592.969.807 1.59l7.686 23.348 7.718-23.348z" fill="#45474D" sketch:type="MSShapeGroup" />
71
+ </g>
72
+ </svg>// platform</h1>
73
+ <h2>
74
+ <svg width="48px" height="48px" viewBox="330 271 48 48" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
75
+ <!-- Generator: Sketch 3.7.1 (28215) - http://www.bohemiancoding.com/sketch -->
76
+ <desc>Created with Sketch.</desc>
77
+ <defs></defs>
78
+ <g id="noun_70958" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(330.000000, 271.000000)">
79
+ <g id="Group" fill="#7ED321">
80
+ <path d="M33.909381,15.7220595 L19.870369,29.7610714 L13.6501429,23.5408452 C13.2131548,23.1038571 12.5042381,23.1038571 12.0678095,23.5408452 C11.6308214,23.9778333 11.6308214,24.6861905 12.0678095,25.1231786 L19.0792024,32.135131 C19.2890238,32.3449524 19.5738214,32.4624524 19.870369,32.4624524 C20.1669167,32.4624524 20.4517143,32.3449524 20.6615357,32.135131 L35.4922738,17.3043929 C35.9292619,16.8674048 35.9292619,16.1590476 35.4922738,15.7220595 C35.0552857,15.2850714 34.346369,15.2845119 33.909381,15.7220595 L33.909381,15.7220595 Z" id="Shape"></path>
81
+ <path d="M23.5,0 C10.761881,0 0,10.7613214 0,23.5 C0,36.2386786 10.761881,47 23.5,47 C36.238119,47 47,36.2386786 47,23.5 C47,10.7613214 36.238119,0 23.5,0 L23.5,0 Z M23.5,44.7619048 C11.9749286,44.7619048 2.23809524,35.0250714 2.23809524,23.5 C2.23809524,11.9749286 11.9749286,2.23809524 23.5,2.23809524 C35.0250714,2.23809524 44.7619048,11.9749286 44.7619048,23.5 C44.7619048,35.0250714 35.0250714,44.7619048 23.5,44.7619048 L23.5,44.7619048 Z" id="Shape"></path>
82
+ </g>
83
+ </g>
84
+ </svg>
85
+ Your plugin is working correctly!
86
+ </h2>
87
+ <p>You can find the handler for this page in index.js. <a href="https://github.com/envoy/envoy-lambda-sandbox">Click here to learn more</a> about the functionality you can build into your plugins.</p>
88
+ <script src="https://gist.github.com/dboskovic/1f9bd572af22e3bbe9135b2a38c0bfb7.js"></script>
89
+ </body>
90
+
91
+ </html>