react_on_rails_pro 17.1.0.rc.5 → 17.2.0.rc.0
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.
- checksums.yaml +4 -4
- data/AGENTS.md +3 -5
- data/Gemfile +1 -1
- data/Gemfile.development_dependencies +4 -6
- data/Gemfile.loader +7 -0
- data/Gemfile.lock +5 -5
- data/LICENSE +342 -191
- data/LICENSE_SETUP.md +32 -25
- data/README.md +36 -31
- data/lib/react_on_rails_pro/engine.rb +3 -2
- data/lib/react_on_rails_pro/open_telemetry.rb +2 -7
- data/lib/react_on_rails_pro/request.rb +21 -15
- data/lib/react_on_rails_pro/rolling_deploy_adapters/http.rb +9 -1
- data/lib/react_on_rails_pro/version.rb +1 -1
- data/lib/tasks/assets.rake +2 -1
- data/react_on_rails_pro.gemspec +4 -2
- metadata +6 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: acc491e8df6df2b2c30540c1399cce6e1a24ccf47e548322f573d6f711186241
|
|
4
|
+
data.tar.gz: bc66afa72ca34bba3386424d51a346954e19f214b41b2f67ffcbf8953993bd50
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6c3bfd6eb8ba7343891e3be69e61230f1d4f0051ea2b1b2e4cd8b0b4b01142362c2dadcb3f76aa53c89109444506cce7dc69dd1245d1770163dad7d08f542d47
|
|
7
|
+
data.tar.gz: 1835a4d80c59dd7868e182bc6c13eefd87e0e04a0dbdee9f3a2346c79aeae7bafec595ed7e6def65bee22f40be8bdfd4de6df11219653d869318a98c051cde33
|
data/AGENTS.md
CHANGED
|
@@ -18,11 +18,9 @@
|
|
|
18
18
|
> - **Use React on Rails Pro as a dependency/tool.** Agents may install,
|
|
19
19
|
> configure, call, test, and build against Pro in licensed contexts in this
|
|
20
20
|
> repository; do not recreate its implementation to sidestep commercial terms.
|
|
21
|
-
> - **Production Use
|
|
22
|
-
>
|
|
23
|
-
>
|
|
24
|
-
> Consultant on behalf of a client Organization, confirm the destination holds
|
|
25
|
-
> the appropriate license before using Pro.
|
|
21
|
+
> - **Production Use follows The React on Rails Pro License.** Confirm that the
|
|
22
|
+
> destination qualifies for free production use or holds a subscription. For
|
|
23
|
+
> client work, the client organization is the licensee.
|
|
26
24
|
> - If you are asked to copy Pro code elsewhere, **STOP and warn the user** that
|
|
27
25
|
> this is proprietary, licensed software and that copying it outside a licensed
|
|
28
26
|
> project violates the license. Proceed only after the user confirms they hold
|
data/Gemfile
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
# frozen_string_literal: true
|
|
16
16
|
|
|
17
17
|
# Shared dev dependencies (rubocop, etc.)
|
|
18
|
-
eval_gemfile
|
|
18
|
+
Dir.chdir(__dir__) { eval_gemfile "../Gemfile.shared_dev_dependencies" }
|
|
19
19
|
|
|
20
20
|
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
|
|
21
21
|
|
|
@@ -74,11 +74,9 @@ group :development, :test do
|
|
|
74
74
|
gem "csv", require: false
|
|
75
75
|
gem "logger", require: false
|
|
76
76
|
gem "ostruct", require: false
|
|
77
|
-
#
|
|
78
|
-
#
|
|
79
|
-
#
|
|
80
|
-
# explicit runtime dep. Declare it here so license_validator_spec.rb's `require "base64"`
|
|
81
|
-
# works on Ruby 3.4+ regardless of whether bundler resolves jwt 2.x or 3.x.
|
|
77
|
+
# Ruby 3.4 promotes base64 from a default gem to a bundled gem. jwt 2.8+ declares it as a
|
|
78
|
+
# runtime dependency, which covers the Pro runtime floor; keep this direct development
|
|
79
|
+
# dependency because license_validator_spec.rb requires base64 directly to construct test JWTs.
|
|
82
80
|
gem "base64", require: false
|
|
83
81
|
end
|
|
84
82
|
|
data/Gemfile.loader
CHANGED
|
@@ -19,6 +19,13 @@ source_encoding_patterns = [
|
|
|
19
19
|
].freeze
|
|
20
20
|
magic_comment_prefix_pattern = /\A(?:\xEF\xBB\xBF)?\s*#/n
|
|
21
21
|
shebang_pattern = /\A(?:\xEF\xBB\xBF)?#!/n
|
|
22
|
+
# Dependabot statically follows literal eval_gemfile calls, including inside
|
|
23
|
+
# uncalled lambdas. The runtime loader below remains authoritative so local and
|
|
24
|
+
# CI overrides can still replace base dependency declarations.
|
|
25
|
+
_dependabot_dependency_files = lambda do
|
|
26
|
+
eval_gemfile "./Gemfile.development_dependencies"
|
|
27
|
+
end
|
|
28
|
+
|
|
22
29
|
unsupported_source_encoding = lambda do |path, detected_encoding, reason|
|
|
23
30
|
raise ArgumentError, "#{path} declares unsupported source encoding #{detected_encoding.inspect}: #{reason}"
|
|
24
31
|
end
|
data/Gemfile.lock
CHANGED
|
@@ -9,7 +9,7 @@ GIT
|
|
|
9
9
|
PATH
|
|
10
10
|
remote: ..
|
|
11
11
|
specs:
|
|
12
|
-
react_on_rails (17.
|
|
12
|
+
react_on_rails (17.2.0.rc.0)
|
|
13
13
|
addressable
|
|
14
14
|
connection_pool
|
|
15
15
|
execjs (~> 2.5)
|
|
@@ -20,14 +20,14 @@ PATH
|
|
|
20
20
|
PATH
|
|
21
21
|
remote: .
|
|
22
22
|
specs:
|
|
23
|
-
react_on_rails_pro (17.
|
|
23
|
+
react_on_rails_pro (17.2.0.rc.0)
|
|
24
24
|
async (>= 2.29)
|
|
25
25
|
async-http (~> 0.95)
|
|
26
26
|
execjs (~> 2.9)
|
|
27
27
|
io-endpoint (~> 0.17.0)
|
|
28
|
-
jwt (>= 2.
|
|
28
|
+
jwt (>= 2.8, < 4)
|
|
29
29
|
nokogiri (>= 1.12, < 2)
|
|
30
|
-
react_on_rails (= 17.
|
|
30
|
+
react_on_rails (= 17.2.0.rc.0)
|
|
31
31
|
|
|
32
32
|
GEM
|
|
33
33
|
remote: https://rubygems.org/
|
|
@@ -527,4 +527,4 @@ DEPENDENCIES
|
|
|
527
527
|
yard
|
|
528
528
|
|
|
529
529
|
BUNDLED WITH
|
|
530
|
-
|
|
530
|
+
4.0.10
|
data/LICENSE
CHANGED
|
@@ -1,194 +1,345 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
1
|
+
# The React on Rails Pro License
|
|
2
|
+
|
|
3
|
+
The React on Rails Pro License, version 3.0, an application of ShakaCode
|
|
4
|
+
Trust-Based Commercial Licensing.
|
|
5
|
+
|
|
6
|
+
Copyright (c) 2015-2026 ShakaCode LLC, a Hawaii limited liability company
|
|
7
|
+
("ShakaCode").
|
|
8
|
+
|
|
9
|
+
SPDX-License-Identifier: LicenseRef-ReactOnRailsPro
|
|
10
|
+
|
|
11
|
+
## Plain-language summary (informative, not part of the terms)
|
|
12
|
+
|
|
13
|
+
React on Rails Pro is trust-based: no license key is needed to run it,
|
|
14
|
+
nothing phones home, and a missing key never blocks, slows, or changes
|
|
15
|
+
how your app runs. Reading the source, development, test, CI, staging,
|
|
16
|
+
review apps, education, personal projects, and open-source work are free
|
|
17
|
+
for everyone, at any organization size. Production use is also free if
|
|
18
|
+
you can answer yes to all three questions: *Do fewer than 10 people work
|
|
19
|
+
for your organization (counting all affiliates)? Was its revenue in the
|
|
20
|
+
last twelve months under US $1M? Has it raised under US $1M in outside
|
|
21
|
+
capital, ever?* Charities, educational institutions, and hospitals are
|
|
22
|
+
free at any size. If any answer is no and you are none of those,
|
|
23
|
+
production use requires a paid subscription, and one subscription covers
|
|
24
|
+
your whole organization: every application, environment, and developer.
|
|
25
|
+
See https://pro.reactonrails.com/. Every page rendered with Pro carries
|
|
26
|
+
one HTML comment naming the product and its license status; the license
|
|
27
|
+
key that comes with a subscription makes it read `Licensed`. Once a
|
|
28
|
+
version ships under these terms, those terms govern that version
|
|
29
|
+
permanently.
|
|
30
|
+
|
|
31
|
+
## 1. Acceptance
|
|
32
|
+
|
|
33
|
+
By using the software, you agree to these terms. If you use the software
|
|
34
|
+
on behalf of an organization, you represent that you have authority to
|
|
35
|
+
bind that organization, and "you" includes it.
|
|
36
|
+
|
|
37
|
+
## 2. Definitions
|
|
38
|
+
|
|
39
|
+
**"Software"** means React on Rails Pro: the `react_on_rails_pro` Ruby
|
|
40
|
+
gem, the `react-on-rails-pro` and `react-on-rails-pro-node-renderer` npm
|
|
41
|
+
packages, and any other component ShakaCode distributes under these
|
|
42
|
+
terms. The open-source React on Rails core that the software builds on is
|
|
43
|
+
licensed separately under the MIT License.
|
|
44
|
+
|
|
45
|
+
**"Control"** means ownership of more than 50% of the voting interests of
|
|
46
|
+
an entity, or the power to direct its management or policies, by contract
|
|
47
|
+
or otherwise.
|
|
48
|
+
|
|
49
|
+
**"Your organization"** means you together with every entity that Controls
|
|
50
|
+
you, that you Control, or that is under common Control with you. Teams,
|
|
51
|
+
departments, and other sub-units are not separate organizations.
|
|
52
|
+
|
|
53
|
+
**"Small Organization"** means an organization for which all of the
|
|
54
|
+
following are true, counted across the entire organization as defined
|
|
55
|
+
above:
|
|
56
|
+
|
|
57
|
+
a. fewer than 10 individuals perform paid work for it or on its products
|
|
58
|
+
and services, whether directly or through staffing, outsourcing, or
|
|
59
|
+
services arrangements, counted as full-time equivalents;
|
|
60
|
+
b. its total gross revenue, measured over the twelve months ending with
|
|
61
|
+
the most recently completed calendar quarter, was less than
|
|
62
|
+
US $1,000,000; and
|
|
63
|
+
c. it has received less than US $1,000,000 in aggregate outside capital
|
|
64
|
+
over its lifetime (equity, tokens, convertible instruments, venture or
|
|
65
|
+
investor debt, accelerator funding, and grants or donations, other than
|
|
66
|
+
academic research or charitable grants to accredited academic or
|
|
67
|
+
nonprofit institutions) from sources other than its own operating
|
|
68
|
+
revenue and its founders' personal funds. Ordinary-course bank and
|
|
69
|
+
trade credit do not count.
|
|
70
|
+
|
|
71
|
+
Government entities, other than public educational institutions, are not
|
|
72
|
+
Small Organizations.
|
|
73
|
+
|
|
74
|
+
**"Charity"** means an organization recognized as charitable or
|
|
75
|
+
public-benefit under the law of the jurisdiction where it is organized (for
|
|
76
|
+
example, a US 501(c)(3) organization or its equivalent elsewhere), no part
|
|
77
|
+
of whose net earnings benefits any private person.
|
|
78
|
+
|
|
79
|
+
**"Educational Institution"** means a school, college, university, or
|
|
80
|
+
other institution whose principal purpose is teaching or academic
|
|
81
|
+
research, whether public or private, including its libraries, research
|
|
82
|
+
institutes, and teaching hospitals.
|
|
83
|
+
|
|
84
|
+
**"Hospital"** means an institution licensed to provide inpatient
|
|
85
|
+
medical care to the public, whether public, non-profit, or private,
|
|
86
|
+
including its clinics and medical research units.
|
|
87
|
+
|
|
88
|
+
Charity, Educational Institution, and Hospital status belongs to the
|
|
89
|
+
qualifying entity and to affiliates that qualify on their own; it does
|
|
90
|
+
not extend to for-profit affiliates, spin-offs, or commercial ventures
|
|
91
|
+
that are not themselves one of these.
|
|
92
|
+
|
|
93
|
+
**"Production use"** means running the software to serve an application,
|
|
94
|
+
website, or service to its end users, whether those users are the public,
|
|
95
|
+
your customers, or your own staff. Development, test, continuous
|
|
96
|
+
integration, staging, preview, review-app, and other non-production
|
|
97
|
+
environments are not production use.
|
|
98
|
+
|
|
99
|
+
**"Generated Attribution"** means the HTML comment the software emits
|
|
100
|
+
once in each document it renders, in the form
|
|
101
|
+
`<!-- Powered by React on Rails Pro (c) ShakaCode | STATUS -->`, where
|
|
102
|
+
STATUS is generated by the software from the license status.
|
|
103
|
+
|
|
104
|
+
**"Subscription"** means an active paid React on Rails Pro subscription
|
|
105
|
+
purchased at https://pro.reactonrails.com/, through another order channel
|
|
106
|
+
ShakaCode designates (for example a designated GitHub Sponsors tier or an
|
|
107
|
+
invoice), or under a separate written agreement with ShakaCode.
|
|
108
|
+
Sponsorships and donations that ShakaCode has not designated as
|
|
109
|
+
subscriptions are appreciated but are not Subscriptions and grant no
|
|
110
|
+
production-use rights.
|
|
111
|
+
|
|
112
|
+
**"License key"** means the optional credential ShakaCode issues that
|
|
113
|
+
identifies your organization in the software's license-status logs and in
|
|
114
|
+
the Generated Attribution. A license key is identity, not enforcement.
|
|
115
|
+
|
|
116
|
+
## 3. Copyright grant
|
|
117
|
+
|
|
118
|
+
ShakaCode grants you a non-exclusive, worldwide, royalty-free license to
|
|
119
|
+
use, copy, modify, and create derivative works of the software, and to
|
|
120
|
+
include it in the builds and deployments of your organization's own
|
|
121
|
+
applications, in each case only as allowed by these terms. You may share
|
|
122
|
+
copies with contractors and service providers working on those
|
|
123
|
+
applications, who must observe these terms. You may not distribute the
|
|
124
|
+
software or your modifications as a standalone product or library, or as
|
|
125
|
+
part of a product whose purpose is to provide the software's
|
|
126
|
+
functionality to others (see Section 7).
|
|
127
|
+
|
|
128
|
+
## 4. Free uses
|
|
129
|
+
|
|
130
|
+
The following uses are free of charge for anyone, at any organization
|
|
131
|
+
size:
|
|
132
|
+
|
|
133
|
+
a. reading and studying the source code;
|
|
134
|
+
b. development, test, continuous integration, staging, preview,
|
|
135
|
+
review-app, and every other non-production environment, without time
|
|
136
|
+
limit;
|
|
137
|
+
c. evaluating the software in production for up to 45 days per
|
|
138
|
+
organization (not per version, person, or application), solely to
|
|
139
|
+
decide whether to adopt it;
|
|
140
|
+
d. education and training of people, tutorials, demonstrations, and
|
|
141
|
+
academic research, in each case not directed at developing or
|
|
142
|
+
operating your organization's own products or services;
|
|
143
|
+
e. personal and hobby projects;
|
|
144
|
+
f. developing and operating a public open-source project distributed
|
|
145
|
+
under a license approved by the Open Source Initiative, where the
|
|
146
|
+
software runs as part of that project's own publicly available code
|
|
147
|
+
and primarily for that project's benefit, and not for the development
|
|
148
|
+
or operation of a proprietary product or service.
|
|
149
|
+
|
|
150
|
+
In addition, **all production use is free of charge for a Small
|
|
151
|
+
Organization, a Charity, an Educational Institution, or a Hospital, at
|
|
152
|
+
any size for the last three.** If your organization is one of these,
|
|
153
|
+
nothing in Section 5 applies to you.
|
|
154
|
+
|
|
155
|
+
## 5. Paid uses
|
|
156
|
+
|
|
157
|
+
Production use by an organization that is not a Small Organization, a
|
|
158
|
+
Charity, an Educational Institution, or a Hospital requires a
|
|
159
|
+
Subscription. This includes, without limitation, production use beyond
|
|
160
|
+
the Section 4(c) evaluation window, internal applications used only by
|
|
161
|
+
your staff, and applications you operate for your customers.
|
|
162
|
+
|
|
163
|
+
In any conflict between Section 4 and this Section 5, use described in
|
|
164
|
+
this Section 5 is production use and is not a free use under Section
|
|
165
|
+
4(b), (c), or (d).
|
|
166
|
+
|
|
167
|
+
**Client work.** If you use the software to build or run an application
|
|
168
|
+
for a client, the use is attributed to the organization whose business
|
|
169
|
+
the application ultimately serves, traced through any intermediaries.
|
|
170
|
+
That organization's status determines whether the use is free or paid,
|
|
171
|
+
and any required Subscription must be held by, or purchased for the
|
|
172
|
+
benefit of and identifying, that organization. You may rely on a client's
|
|
173
|
+
written self-certification of its status. A consulting firm's or agency's
|
|
174
|
+
own applications are attributed to the firm or agency.
|
|
175
|
+
|
|
176
|
+
## 6. Subscriptions
|
|
177
|
+
|
|
178
|
+
One Subscription covers your whole organization: every application,
|
|
179
|
+
environment, server, and developer of your organization, with no per-seat
|
|
180
|
+
or per-application charge. A Subscription is governed by the subscription
|
|
181
|
+
terms, order form, or other agreement under which it is purchased; if
|
|
182
|
+
that agreement conflicts with these terms, that agreement controls. While
|
|
183
|
+
a Subscription is active, ShakaCode provides software updates and
|
|
184
|
+
reasonable support through its published channels; no response or
|
|
185
|
+
resolution times are guaranteed unless an order or separate agreement
|
|
186
|
+
says so. If a required Subscription expires or is terminated, your
|
|
187
|
+
production use remains licensed for 30 days while you renew or wind down,
|
|
188
|
+
and the software keeps running either way. ShakaCode and you may enter a
|
|
189
|
+
separate written agreement that supplements or supersedes these terms.
|
|
190
|
+
|
|
191
|
+
## 7. No hosted or embedded offering
|
|
192
|
+
|
|
193
|
+
You may not provide the software or its rendering functionality to third
|
|
194
|
+
parties as a hosted, managed, embedded, or bundled offering, for example
|
|
195
|
+
a platform that builds or runs other organizations' React on Rails
|
|
196
|
+
applications, without a separate written agreement with ShakaCode. Each
|
|
197
|
+
organization whose applications use the software must independently
|
|
198
|
+
qualify for free use or hold its own Subscription. Running your own
|
|
199
|
+
applications for your own users, customers, or staff is not an offering
|
|
200
|
+
to third parties.
|
|
201
|
+
|
|
202
|
+
## 8. Attribution and license status
|
|
203
|
+
|
|
204
|
+
Every HTML document rendered with the software must retain exactly one
|
|
205
|
+
complete, unmodified Generated Attribution in its source. You may not
|
|
206
|
+
remove, alter, obscure, or suppress it, in free and paid use alike. With
|
|
207
|
+
a valid license key the status reads `Licensed`; without a key it reads
|
|
208
|
+
`UNLICENSED`; an expired or malformed key reads `LICENSE EXPIRED` or
|
|
209
|
+
`INVALID LICENSE`. An `UNLICENSED` status is not by itself a violation,
|
|
210
|
+
because free uses need no key. The software never blocks, degrades, or
|
|
211
|
+
reports your use based on license status; it only labels and logs it.
|
|
212
|
+
Keep your license key private: it identifies your organization. A related
|
|
213
|
+
component that does not itself generate or insert the Generated
|
|
214
|
+
Attribution, such as `react-on-rails-rsc`, has no obligation to insert a
|
|
215
|
+
second one.
|
|
216
|
+
|
|
217
|
+
## 9. Trust, self-certification, and true-up
|
|
218
|
+
|
|
219
|
+
These terms are enforced by trust, not technology: the software contains
|
|
220
|
+
no activation, no usage telemetry, and no runtime lockout, and a license
|
|
221
|
+
key only changes what the status says. You are responsible for
|
|
222
|
+
determining in good faith whether your use is free or paid. ShakaCode
|
|
223
|
+
encourages every organization, free and paid alike, to register at
|
|
224
|
+
https://pro.reactonrails.com/ (free of charge). Registration is optional
|
|
225
|
+
and is never a condition of any free use.
|
|
226
|
+
|
|
227
|
+
If your organization stops qualifying as a Small Organization, your
|
|
228
|
+
production use remains licensed for 60 days after the change; after that,
|
|
229
|
+
continued production use requires a Subscription. No payment is owed for
|
|
230
|
+
use during that window, and the obligation is not avoided by
|
|
231
|
+
re-qualification within 12 months of the change.
|
|
232
|
+
|
|
233
|
+
If you discover in good faith that past use required a Subscription,
|
|
234
|
+
purchasing the applicable Subscription within 60 days of discovery is
|
|
235
|
+
full compliance, and no back payment is owed for the good-faith period.
|
|
236
|
+
If your organization made production use requiring a Subscription
|
|
237
|
+
without a good-faith basis for treating it as free, ShakaCode may require
|
|
238
|
+
payment of the applicable subscription fees for the period of that use,
|
|
239
|
+
up to 24 months.
|
|
240
|
+
|
|
241
|
+
You must not misrepresent your organization, its size or status, or your
|
|
242
|
+
license status, whether in a registration, in the software's
|
|
243
|
+
configuration, or in the Generated Attribution.
|
|
244
|
+
|
|
245
|
+
## 10. Redistribution and notices
|
|
246
|
+
|
|
247
|
+
Copies of the software and derivative works that these terms allow you to
|
|
248
|
+
make must remain under these same terms and must retain these terms, all
|
|
249
|
+
copyright and attribution notices, and the SPDX identifier.
|
|
250
|
+
|
|
251
|
+
## 11. Patents
|
|
252
|
+
|
|
253
|
+
ShakaCode grants you a license under any patent claims it can license that
|
|
254
|
+
are necessarily infringed by the software, only for uses allowed by these
|
|
255
|
+
terms. This patent license ends immediately if you or your organization
|
|
256
|
+
initiate a patent claim (excluding counterclaims and cross-claims filed in
|
|
257
|
+
response to a patent claim first brought against you) alleging that the
|
|
258
|
+
software infringes a patent.
|
|
259
|
+
|
|
260
|
+
## 12. Trademarks
|
|
261
|
+
|
|
262
|
+
These terms grant no rights in the names, logos, or trademarks of
|
|
263
|
+
ShakaCode, React on Rails, or React on Rails Pro, except for the
|
|
264
|
+
attribution required by these terms and truthful factual references.
|
|
265
|
+
|
|
266
|
+
## 13. Per-version terms, breach, and cure
|
|
267
|
+
|
|
268
|
+
These terms apply per version: the terms delivered with a version of the
|
|
269
|
+
software govern that version permanently, and patch and security releases
|
|
270
|
+
of a version line remain under that line's terms. Later versions may be
|
|
271
|
+
offered under different terms.
|
|
272
|
+
|
|
273
|
+
If you breach these terms, your license ends automatically 30 days after
|
|
274
|
+
ShakaCode provides written notice of the breach, unless you cure it within
|
|
275
|
+
that period; upon cure, your license is reinstated retroactively. Curing
|
|
276
|
+
continued production use during a lapsed Subscription includes payment of
|
|
277
|
+
the applicable fees for the lapsed period.
|
|
278
|
+
|
|
279
|
+
## 14. Feedback
|
|
280
|
+
|
|
281
|
+
If you submit feedback, suggestions, or improvements to ShakaCode, you
|
|
282
|
+
grant ShakaCode a worldwide, royalty-free, irrevocable license to use and
|
|
283
|
+
incorporate them.
|
|
284
|
+
|
|
285
|
+
## 15. Disclaimer and limitation of liability
|
|
286
|
+
|
|
287
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
288
|
+
IMPLIED, INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
|
289
|
+
PURPOSE, TITLE, AND NON-INFRINGEMENT. TO THE MAXIMUM EXTENT PERMITTED BY
|
|
290
|
+
LAW, SHAKACODE WILL NOT BE LIABLE FOR ANY INDIRECT, SPECIAL, INCIDENTAL,
|
|
291
|
+
OR CONSEQUENTIAL DAMAGES ARISING FROM OR RELATED TO THE SOFTWARE OR THESE
|
|
292
|
+
TERMS, AND SHAKACODE'S TOTAL LIABILITY WILL NOT EXCEED THE AMOUNTS YOU
|
|
293
|
+
PAID SHAKACODE FOR THE SOFTWARE IN THE TWELVE MONTHS BEFORE THE CLAIM
|
|
294
|
+
AROSE.
|
|
295
|
+
|
|
296
|
+
## 16. Assignment, governing law, and miscellaneous
|
|
297
|
+
|
|
298
|
+
You may assign these terms, together with any active Subscription, to a
|
|
299
|
+
successor in connection with a merger, acquisition, or sale of
|
|
300
|
+
substantially all assets, upon notice to ShakaCode; these terms are
|
|
301
|
+
otherwise non-transferable. These terms are governed by the laws of the
|
|
302
|
+
State of Hawaii, USA, excluding its conflict-of-law rules, with exclusive
|
|
303
|
+
jurisdiction and venue in the state and federal courts located in
|
|
304
|
+
Honolulu, Hawaii. If a provision of these terms is unenforceable, the
|
|
305
|
+
remainder stays in effect. These terms, together with any subscription
|
|
306
|
+
agreement or order, are the entire agreement about the software; if they
|
|
307
|
+
conflict, the order controls.
|
|
308
|
+
|
|
309
|
+
## 17. Questions and commercial licensing
|
|
310
|
+
|
|
311
|
+
contact@shakacode.com · https://pro.reactonrails.com/ ·
|
|
312
|
+
https://github.com/shakacode/commercial-licensing
|
|
313
|
+
|
|
314
|
+
## Machine-readable summary (informative)
|
|
315
|
+
|
|
316
|
+
```yaml
|
|
317
|
+
license_name: The React on Rails Pro License 3.0
|
|
318
|
+
spdx_identifier: LicenseRef-ReactOnRailsPro
|
|
319
|
+
type: trust-based commercial
|
|
320
|
+
free_production_use_if_all:
|
|
321
|
+
max_org_headcount_fte: 10 # exclusive; whole control group
|
|
322
|
+
max_ttm_revenue_usd: 1000000 # exclusive; trailing 12 months
|
|
323
|
+
max_lifetime_outside_capital_usd: 1000000 # exclusive
|
|
324
|
+
free_production_use_if_any:
|
|
325
|
+
- charity # recognized charitable / public-benefit org, any size
|
|
326
|
+
- educational_institution # school, college, university, any size
|
|
327
|
+
- hospital # licensed inpatient care provider, any size
|
|
328
|
+
always_free: [read, study, development, test, ci, staging, preview, review_apps, evaluate_in_production_45_days, education, personal, oss_projects]
|
|
329
|
+
paid: production use by any other organization; one subscription per organization, unlimited applications and developers
|
|
330
|
+
license_key: optional # identity only; sets the attribution status; never required for free use
|
|
331
|
+
runtime_enforcement: none # no activation, no telemetry, no lockout; status is logged and labeled
|
|
332
|
+
attribution_required: true # one HTML comment per rendered document
|
|
333
|
+
subscription_lapse_grace_days: 30
|
|
334
|
+
outgrow_free_line_grace_days: 60
|
|
335
|
+
per_version_terms: true
|
|
336
|
+
pricing_url: https://pro.reactonrails.com/
|
|
337
|
+
register_url: https://pro.reactonrails.com/
|
|
338
|
+
contact: contact@shakacode.com
|
|
91
339
|
```
|
|
92
340
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
The Licensee may not remove, modify, obfuscate, or disable the Generated Attribution.
|
|
96
|
-
|
|
97
|
-
---
|
|
98
|
-
|
|
99
|
-
## 7. Fees; Term; Termination
|
|
100
|
-
|
|
101
|
-
Paid subscriptions may be purchased or renewed at [pro.reactonrails.com](https://pro.reactonrails.com/) or through another ShakaCode-approved order channel.
|
|
102
|
-
|
|
103
|
-
Fees and billing terms are as agreed in the applicable order (e.g., GitHub Sponsors subscription or annual invoice).\
|
|
104
|
-
For paid subscriptions, the license remains active only while fees are paid. ShakaCode may suspend or terminate for non-payment or material breach. Complimentary OSS Licenses remain active for the term specified in the grant, subject to the revocation terms in Section 4.1.\
|
|
105
|
-
Upon termination, lapse, or revocation, the Organization must immediately cease use and remove the Software (including derivatives) from all Production systems and repositories, except for (a) non-commercial uses explicitly permitted in Section 4, or (b) Complimentary OSS Licenses revoked under Section 4.1(ii) for eligibility changes, in which case the Organization has thirty (30) days from written notice to comply.
|
|
106
|
-
|
|
107
|
-
---
|
|
108
|
-
|
|
109
|
-
## 8. Updates & Support
|
|
110
|
-
|
|
111
|
-
While subscribed, the Organization receives software updates and reasonable support (email or issue tracker, business hours). No specific response or resolution times are guaranteed unless set out in an order or separate SLA.
|
|
112
|
-
|
|
113
|
-
---
|
|
114
|
-
|
|
115
|
-
## 9. Verification / Audit
|
|
116
|
-
|
|
117
|
-
If ShakaCode reasonably suspects non-compliance, the Organization will cooperate in good faith to verify compliance, including enabling inspection for attribution presence and providing a usage statement. ShakaCode will use commercially reasonable efforts to minimize disruption.
|
|
118
|
-
|
|
119
|
-
**9.1 Detailed Audits**\
|
|
120
|
-
ShakaCode or a certified auditor acting on its behalf may, upon reasonable request and at ShakaCode’s expense, audit the Organization’s use of the Software to verify compliance with this Agreement. Audits may be conducted by mail, electronically, or by in-person visits during regular business hours and shall minimize disruption to the Organization’s business. If the audit reveals a material unauthorized use, the Organization shall reimburse ShakaCode for reasonable audit costs.
|
|
121
|
-
|
|
122
|
-
---
|
|
123
|
-
|
|
124
|
-
## 10. Feedback & Contributions
|
|
125
|
-
|
|
126
|
-
By submitting feedback or improvements, the Organization grants ShakaCode a worldwide, royalty-free, irrevocable license to use and incorporate them.
|
|
127
|
-
|
|
128
|
-
---
|
|
129
|
-
|
|
130
|
-
## 11. Intellectual Property
|
|
131
|
-
|
|
132
|
-
The Software is **licensed, not sold**. ShakaCode retains all rights, title, and interest, including all intellectual property rights.
|
|
133
|
-
|
|
134
|
-
---
|
|
135
|
-
|
|
136
|
-
## 12. Confidentiality
|
|
137
|
-
|
|
138
|
-
License keys and any non-public materials are ShakaCode confidential information. The Organization will protect them with at least reasonable care.
|
|
139
|
-
|
|
140
|
-
---
|
|
141
|
-
|
|
142
|
-
## 13. Warranty Disclaimer
|
|
143
|
-
|
|
144
|
-
> EXCEPT AS EXPRESSLY PROVIDED IN §8, THE SOFTWARE IS PROVIDED “AS IS,” WITHOUT WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED.
|
|
145
|
-
|
|
146
|
-
---
|
|
147
|
-
|
|
148
|
-
## 14. Limitation of Liability
|
|
149
|
-
|
|
150
|
-
To the maximum extent permitted by law, ShakaCode is not liable for indirect, incidental, special, consequential, or punitive damages.\
|
|
151
|
-
Direct damages are limited to amounts paid in the 12 months preceding the claim.
|
|
152
|
-
|
|
153
|
-
---
|
|
154
|
-
|
|
155
|
-
## 15. Indemnification
|
|
156
|
-
|
|
157
|
-
The Organization agrees to defend, indemnify, and hold harmless ShakaCode and its affiliates from any claims, losses, damages, liabilities, costs, or expenses (including legal fees) arising out of the Organization’s use of the Software or breach of this Agreement.
|
|
158
|
-
|
|
159
|
-
---
|
|
160
|
-
|
|
161
|
-
## 16. Export Compliance
|
|
162
|
-
|
|
163
|
-
The Organization agrees to comply with all applicable export laws and regulations, including restrictions on export, re-export, or redistribution of the Software.
|
|
164
|
-
|
|
165
|
-
---
|
|
166
|
-
|
|
167
|
-
## 17. Attorneys’ Fees and Costs
|
|
168
|
-
|
|
169
|
-
In any enforcement or legal action arising under this Agreement, the prevailing party shall be entitled to recover reasonable attorneys’ fees and costs.
|
|
170
|
-
|
|
171
|
-
---
|
|
172
|
-
|
|
173
|
-
## 18. Governing Law; Venue
|
|
174
|
-
|
|
175
|
-
This Agreement is governed by the laws of the **State of Hawaii**, USA. Exclusive jurisdiction and venue lie in the courts located therein.
|
|
176
|
-
|
|
177
|
-
---
|
|
178
|
-
|
|
179
|
-
## 19. Miscellaneous
|
|
180
|
-
|
|
181
|
-
- **19.1 Severability**\
|
|
182
|
-
If any provision is held invalid or unenforceable, the remainder shall continue in full force.
|
|
183
|
-
|
|
184
|
-
- **19.2 Waiver**\
|
|
185
|
-
Failure to enforce any provision is not a waiver of rights.
|
|
186
|
-
|
|
187
|
-
- **19.3 Assignment**\
|
|
188
|
-
The Organization may not assign this Agreement without prior written consent.
|
|
189
|
-
|
|
190
|
-
---
|
|
191
|
-
|
|
192
|
-
## 20. Entire Agreement; Order of Precedence
|
|
341
|
+
## Version history (informative)
|
|
193
342
|
|
|
194
|
-
|
|
343
|
+
Version 3.0 replaces the React on Rails Pro End User License Agreement,
|
|
344
|
+
version 2.3 (2026-07-14), for releases shipped under these terms. Releases
|
|
345
|
+
shipped under earlier terms remain under those terms.
|
data/LICENSE_SETUP.md
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
# React on Rails Pro License Setup
|
|
2
2
|
|
|
3
|
-
This document explains how to configure
|
|
3
|
+
This document explains how to configure the optional React on Rails Pro license key.
|
|
4
4
|
|
|
5
5
|
## ShakaCode Trust-Based Commercial Licensing
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Free in development, test, CI, and staging, and in production for small
|
|
8
|
+
organizations, charities, schools, and hospitals; larger organizations
|
|
9
|
+
subscribe at https://pro.reactonrails.com/ ($1,800 per year per organization).
|
|
10
|
+
No license key is needed to run Pro.
|
|
8
11
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
|
12
|
-
|
|
|
13
|
-
|
|
|
14
|
-
|
|
|
15
|
-
|
|
|
16
|
-
| Staging (non-prod) | No |
|
|
17
|
-
| Production | **Yes** (paid) |
|
|
12
|
+
| Environment | License key |
|
|
13
|
+
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
14
|
+
| Development | Optional |
|
|
15
|
+
| Test | Optional |
|
|
16
|
+
| CI/CD | Optional |
|
|
17
|
+
| Staging (non-prod) | Optional |
|
|
18
|
+
| Production | Free for small organizations, charities, educational institutions, and hospitals; subscription otherwise. The key is optional and only sets the attribution status. |
|
|
18
19
|
|
|
19
20
|
## Upgrading from Previous Versions
|
|
20
21
|
|
|
@@ -112,10 +113,11 @@ License-related checks and signals occur at multiple points:
|
|
|
112
113
|
2. **Node Renderer**: When the Node renderer process starts
|
|
113
114
|
3. **Browser Package**: Receives Pro-installed signal via `railsContext.rorPro` (not license-valid state)
|
|
114
115
|
|
|
115
|
-
The browser package does not perform independent license validation.
|
|
116
|
-
production
|
|
116
|
+
The browser package does not perform independent license validation. Your organization's status under The React on
|
|
117
|
+
Rails Pro License determines whether production use is free or requires a subscription.
|
|
117
118
|
|
|
118
|
-
When no license is present, the application runs in **unlicensed mode**. This
|
|
119
|
+
When no license key is present, the application runs in **unlicensed mode**. This only changes the attribution status
|
|
120
|
+
and log line. Organizations above the free line subscribe and configure their key so rendered pages read `Licensed`.
|
|
119
121
|
|
|
120
122
|
## Team Setup
|
|
121
123
|
|
|
@@ -123,7 +125,7 @@ When no license is present, the application runs in **unlicensed mode**. This is
|
|
|
123
125
|
|
|
124
126
|
No license setup is needed for development. Developers can install and use React on Rails Pro immediately.
|
|
125
127
|
|
|
126
|
-
|
|
128
|
+
Organizations with a subscription can configure the optional key through `config.license_token` or
|
|
127
129
|
`REACT_ON_RAILS_PRO_LICENSE`. Configure a standalone Node renderer separately when you use one.
|
|
128
130
|
|
|
129
131
|
> Migration note: `config/react_on_rails_pro_license.key` is no longer read.
|
|
@@ -132,7 +134,8 @@ For production deployments, configure a paid license through `config.license_tok
|
|
|
132
134
|
|
|
133
135
|
### For CI/CD
|
|
134
136
|
|
|
135
|
-
CI/CD environments work without a license
|
|
137
|
+
CI/CD environments work without a license key. A deployment pipeline may pass the optional key to production so
|
|
138
|
+
rendered pages identify a subscribing organization as `Licensed`.
|
|
136
139
|
|
|
137
140
|
## Verification
|
|
138
141
|
|
|
@@ -290,9 +293,9 @@ window.railsContext.rorPro;
|
|
|
290
293
|
|
|
291
294
|
### Warning: "No license found"
|
|
292
295
|
|
|
293
|
-
This is expected
|
|
294
|
-
|
|
295
|
-
process that
|
|
296
|
+
This is expected whenever no key is configured, including production. The application keeps running, the log reports
|
|
297
|
+
the status, and rendered pages use the `UNLICENSED` attribution status. Subscribing organizations can configure the key
|
|
298
|
+
through application configuration or `REACT_ON_RAILS_PRO_LICENSE` in each process that reads it.
|
|
296
299
|
|
|
297
300
|
### Error: "Invalid license signature"
|
|
298
301
|
|
|
@@ -311,14 +314,16 @@ process that validates it.
|
|
|
311
314
|
|
|
312
315
|
**Solutions:**
|
|
313
316
|
|
|
314
|
-
1.
|
|
317
|
+
1. Renew your subscription at [pro.reactonrails.com](https://pro.reactonrails.com/)
|
|
315
318
|
2. Update `config.license_token`, the Node renderer's `licenseToken`, or `REACT_ON_RAILS_PRO_LICENSE` with the new token
|
|
316
319
|
|
|
317
320
|
### Error: "License plan is not valid for production use"
|
|
318
321
|
|
|
319
322
|
**Cause:** The license has a plan that is not authorized for production use (e.g., an old free evaluation license).
|
|
320
323
|
|
|
321
|
-
**Solution:**
|
|
324
|
+
**Solution:** If your organization is above the free line, subscribe at
|
|
325
|
+
[pro.reactonrails.com](https://pro.reactonrails.com/) to get a current key. No key is needed to run Pro; an invalid key
|
|
326
|
+
only changes the attribution status.
|
|
322
327
|
|
|
323
328
|
### Error: "License is missing required expiration field"
|
|
324
329
|
|
|
@@ -337,7 +342,7 @@ The license is a JWT (JSON Web Token) signed with RSA-256, containing:
|
|
|
337
342
|
"sub": "user@example.com", // Your email (REQUIRED)
|
|
338
343
|
"iat": 1234567890, // Issued at timestamp (REQUIRED)
|
|
339
344
|
"exp": 1234567890, // Expiration timestamp (REQUIRED)
|
|
340
|
-
"plan": "paid", //
|
|
345
|
+
"plan": "paid", // Subscription plan recorded in the optional key
|
|
341
346
|
"org": "Your Company", // Organization name (Optional)
|
|
342
347
|
"iss": "api" // Issuer identifier (Optional, standard JWT claim)
|
|
343
348
|
}
|
|
@@ -362,7 +367,7 @@ The license is a JWT (JSON Web Token) signed with RSA-256, containing:
|
|
|
362
367
|
Need help?
|
|
363
368
|
|
|
364
369
|
1. **Email**: support@shakacode.com
|
|
365
|
-
2. **
|
|
370
|
+
2. **Licensing**: [contact@shakacode.com](mailto:contact@shakacode.com)
|
|
366
371
|
|
|
367
372
|
## Security Best Practices
|
|
368
373
|
|
|
@@ -374,10 +379,12 @@ Need help?
|
|
|
374
379
|
## FAQ
|
|
375
380
|
|
|
376
381
|
**Q: Do I need a license for development?**
|
|
377
|
-
A: No.
|
|
382
|
+
A: No. No license key is required to run Pro in development or any other environment.
|
|
378
383
|
|
|
379
384
|
**Q: Do I need a license for CI?**
|
|
380
|
-
A: No. CI/CD environments work without a license
|
|
385
|
+
A: No. CI/CD environments work without a license key. Production is also free
|
|
386
|
+
for small organizations, charities, educational institutions, and hospitals;
|
|
387
|
+
larger organizations subscribe for production use.
|
|
381
388
|
|
|
382
389
|
**Q: Do I need internet to validate the license?**
|
|
383
390
|
A: No! License validation is completely offline using cryptographic signatures.
|
data/README.md
CHANGED
|
@@ -33,8 +33,8 @@ React on Rails Pro is a **commercial extension** to the open-source [React on Ra
|
|
|
33
33
|
|
|
34
34
|
- **Requires**: [React on Rails](https://github.com/shakacode/react_on_rails) (open-source) as a foundation
|
|
35
35
|
- **Location**: Part of the React on Rails monorepo at `react_on_rails_pro/`
|
|
36
|
-
- **
|
|
37
|
-
- **
|
|
36
|
+
- **License terms**: Free in development, test, CI, and staging, and in production for small organizations, charities, schools, and hospitals; larger organizations subscribe at https://pro.reactonrails.com/ ($1,800 per year per organization)
|
|
37
|
+
- **License key**: No license key is needed to run Pro
|
|
38
38
|
|
|
39
39
|
### How It Relates to React on Rails
|
|
40
40
|
|
|
@@ -61,24 +61,18 @@ React on Rails Pro is a **commercial extension** to the open-source [React on Ra
|
|
|
61
61
|
|
|
62
62
|
### ShakaCode Trust-Based Commercial Licensing
|
|
63
63
|
|
|
64
|
-
React on Rails Pro
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
### Paid License (Production)
|
|
73
|
-
|
|
74
|
-
- **Duration**: 1 year subscription (or longer)
|
|
75
|
-
- **Usage**: Production deployments and commercial applications
|
|
76
|
-
- **Support**: Professional support included
|
|
77
|
-
- **Contact**: [justin@shakacode.com](mailto:justin@shakacode.com) for pricing
|
|
64
|
+
React on Rails Pro is free in development, test, CI, and staging for everyone,
|
|
65
|
+
and free in production for small organizations (under 10 people, under $1M
|
|
66
|
+
revenue, under $1M raised) and for charities, schools, and hospitals at any
|
|
67
|
+
size. Larger organizations subscribe for production use at
|
|
68
|
+
[pro.reactonrails.com](https://pro.reactonrails.com/): $1,800 per year covers
|
|
69
|
+
the whole organization. No license key is needed to run it; a key from your
|
|
70
|
+
subscription only marks your pages `Licensed`. See
|
|
71
|
+
[the license](https://github.com/shakacode/react_on_rails/blob/main/REACT-ON-RAILS-PRO-LICENSE.md).
|
|
78
72
|
|
|
79
73
|
### License Setup
|
|
80
74
|
|
|
81
|
-
|
|
75
|
+
If your organization subscribes, configure its optional key through Rails credentials:
|
|
82
76
|
|
|
83
77
|
```ruby
|
|
84
78
|
ReactOnRailsPro.configure do |config|
|
|
@@ -195,7 +189,8 @@ High-performance standalone Node.js server for server-side rendering with connec
|
|
|
195
189
|
|
|
196
190
|
- **Parallel rendering**: Multiple worker processes for concurrent SSR
|
|
197
191
|
- **Memory management**: Automatic worker restarts to prevent leaks
|
|
198
|
-
- **
|
|
192
|
+
- **Workload-dependent performance**: Persistent worker processes support concurrent SSR;
|
|
193
|
+
[benchmark your own pages](../docs/oss/core-concepts/performance-benchmarks.md) rather than relying on a headline multiple
|
|
199
194
|
- **Loadable Components**: Full support for code splitting with SSR
|
|
200
195
|
|
|
201
196
|
**Example Configuration:**
|
|
@@ -290,7 +285,10 @@ end
|
|
|
290
285
|
|
|
291
286
|
### Quick Start
|
|
292
287
|
|
|
293
|
-
|
|
288
|
+
Free in development, test, CI, and staging, and in production for small
|
|
289
|
+
organizations, charities, schools, and hospitals; larger organizations
|
|
290
|
+
subscribe at https://pro.reactonrails.com/ ($1,800 per year per organization).
|
|
291
|
+
No license key is needed to run Pro.
|
|
294
292
|
|
|
295
293
|
**1. Install the Gem**
|
|
296
294
|
|
|
@@ -412,7 +410,7 @@ Check out these production applications using React on Rails Pro:
|
|
|
412
410
|
### Getting Help
|
|
413
411
|
|
|
414
412
|
- **📧 Email Support**: [support@shakacode.com](mailto:support@shakacode.com)
|
|
415
|
-
- **💼 Sales & Licensing**: [
|
|
413
|
+
- **💼 Sales & Licensing**: [contact@shakacode.com](mailto:contact@shakacode.com)
|
|
416
414
|
- **📖 Documentation**: [docs/pro/](../docs/pro/)
|
|
417
415
|
- **🐛 Found a Bug?**: Email [support@shakacode.com](mailto:support@shakacode.com) (for Pro customers)
|
|
418
416
|
|
|
@@ -446,11 +444,16 @@ React on Rails Pro is developed and maintained by [ShakaCode](https://www.shakac
|
|
|
446
444
|
|
|
447
445
|
**Q: Do I need a license to try React on Rails Pro?**
|
|
448
446
|
|
|
449
|
-
A: No
|
|
447
|
+
A: No. React on Rails Pro is free in development, test, CI, and staging, and in
|
|
448
|
+
production for small organizations, charities, schools, and hospitals. Larger
|
|
449
|
+
organizations subscribe for production use. No license key is needed to run
|
|
450
|
+
Pro.
|
|
450
451
|
|
|
451
|
-
**Q: How much does a production
|
|
452
|
+
**Q: How much does a production subscription cost?**
|
|
452
453
|
|
|
453
|
-
A:
|
|
454
|
+
A: A subscription costs $1,800 per year per organization and covers every
|
|
455
|
+
application, environment, and developer. Subscribe at
|
|
456
|
+
[pro.reactonrails.com](https://pro.reactonrails.com/).
|
|
454
457
|
|
|
455
458
|
### Technical Questions
|
|
456
459
|
|
|
@@ -497,11 +500,11 @@ A: Check the [CHANGELOG](./CHANGELOG.md) for breaking changes and migration step
|
|
|
497
500
|
|
|
498
501
|
**Q: Where do I start?**
|
|
499
502
|
|
|
500
|
-
A: Follow our [Quick Start guide](#-getting-started)
|
|
503
|
+
A: Follow our [Quick Start guide](#-getting-started). No license key is needed to run Pro.
|
|
501
504
|
|
|
502
505
|
**Q: Can I try Pro before buying?**
|
|
503
506
|
|
|
504
|
-
A: Yes
|
|
507
|
+
A: Yes. Development, test, CI, staging, and a 45-day production evaluation are free for every organization. Just install and start using it.
|
|
505
508
|
|
|
506
509
|
**Q: Is there a demo application?**
|
|
507
510
|
|
|
@@ -511,13 +514,15 @@ A: Yes! The [spec/dummy](./spec/dummy) app demonstrates all Pro features. [See e
|
|
|
511
514
|
|
|
512
515
|
## 📄 License
|
|
513
516
|
|
|
514
|
-
React on Rails Pro is
|
|
515
|
-
|
|
516
|
-
|
|
517
|
+
React on Rails Pro is free in development, test, CI, and staging for everyone,
|
|
518
|
+
and free in production for small organizations (under 10 people, under $1M
|
|
519
|
+
revenue, under $1M raised) and for charities, schools, and hospitals at any
|
|
520
|
+
size. Larger organizations subscribe for production use at
|
|
521
|
+
[pro.reactonrails.com](https://pro.reactonrails.com/): $1,800 per year covers
|
|
522
|
+
the whole organization. No license key is needed to run it; a key from your
|
|
523
|
+
subscription only marks your pages `Licensed`. See [the license](./LICENSE).
|
|
517
524
|
|
|
518
|
-
|
|
519
|
-
- 💼 **Paid license required** for production deployments
|
|
520
|
-
- 📧 **Questions?** Contact [justin@shakacode.com](mailto:justin@shakacode.com)
|
|
525
|
+
Questions: [contact@shakacode.com](mailto:contact@shakacode.com).
|
|
521
526
|
|
|
522
527
|
---
|
|
523
528
|
|
|
@@ -134,8 +134,9 @@ module ReactOnRailsPro
|
|
|
134
134
|
prefix = "[React on Rails Pro] #{issue}."
|
|
135
135
|
|
|
136
136
|
if Rails.env.production?
|
|
137
|
-
warning = "
|
|
138
|
-
"
|
|
137
|
+
warning = "React on Rails Pro is free in production for small organizations, charities, schools, " \
|
|
138
|
+
"and hospitals; other organizations need a subscription. " \
|
|
139
|
+
"If that is you, #{action.sub(/\A[A-Z]/, &:downcase)}"
|
|
139
140
|
Rails.logger.warn "#{prefix} #{warning}"
|
|
140
141
|
elsif warn_outside_production
|
|
141
142
|
Rails.logger.warn "#{prefix} #{action}"
|
|
@@ -50,10 +50,11 @@ module ReactOnRailsPro
|
|
|
50
50
|
::OpenTelemetry::Context.with_current(@context) do
|
|
51
51
|
::OpenTelemetry.propagation.inject(carrier)
|
|
52
52
|
end
|
|
53
|
+
headers.reject! { |name, _| TRACE_HEADER_NAMES.include?(name.to_s.downcase) }
|
|
53
54
|
carrier.each do |name, value|
|
|
54
55
|
next unless TRACE_HEADER_NAMES.include?(name.to_s.downcase)
|
|
55
56
|
|
|
56
|
-
|
|
57
|
+
headers << [name.to_s, value]
|
|
57
58
|
end
|
|
58
59
|
rescue StandardError
|
|
59
60
|
nil
|
|
@@ -125,12 +126,6 @@ module ReactOnRailsPro
|
|
|
125
126
|
rescue StandardError
|
|
126
127
|
nil
|
|
127
128
|
end
|
|
128
|
-
|
|
129
|
-
def set_header(headers, name, value)
|
|
130
|
-
return if headers.any? { |header_name, _| header_name.to_s.casecmp?(name) }
|
|
131
|
-
|
|
132
|
-
headers << [name, value]
|
|
133
|
-
end
|
|
134
129
|
end
|
|
135
130
|
|
|
136
131
|
class << self
|
|
@@ -671,32 +671,38 @@ module ReactOnRailsPro
|
|
|
671
671
|
end
|
|
672
672
|
|
|
673
673
|
def create_connection
|
|
674
|
-
|
|
674
|
+
config = ReactOnRailsPro.configuration
|
|
675
|
+
url = config.renderer_url
|
|
675
676
|
Rails.logger.debug do
|
|
676
|
-
"[ReactOnRailsPro] Setting up Node Renderer connection to
|
|
677
|
+
"[ReactOnRailsPro] Setting up Node Renderer connection to " \
|
|
678
|
+
"#{ReactOnRails::Utils.sanitize_url_for_display(url)}"
|
|
677
679
|
end
|
|
678
680
|
|
|
679
681
|
ReactOnRailsPro::RendererHttpClient.new(
|
|
680
682
|
origin: url,
|
|
681
|
-
pool_size:
|
|
682
|
-
connect_timeout:
|
|
683
|
-
read_timeout:
|
|
684
|
-
force_http2:
|
|
683
|
+
pool_size: config.renderer_http_pool_size,
|
|
684
|
+
connect_timeout: config.renderer_http_pool_timeout,
|
|
685
|
+
read_timeout: config.ssr_timeout,
|
|
686
|
+
force_http2: config.renderer_http_force_http2
|
|
685
687
|
)
|
|
686
688
|
rescue StandardError => e
|
|
687
|
-
|
|
689
|
+
raise ReactOnRailsPro::Error, create_connection_error_message(url, e)
|
|
690
|
+
end
|
|
691
|
+
|
|
692
|
+
def create_connection_error_message(url, error)
|
|
693
|
+
config = ReactOnRailsPro.configuration
|
|
694
|
+
<<~MSG
|
|
688
695
|
[ReactOnRailsPro] Error creating async-http connection.
|
|
689
|
-
renderer_http_pool_size = #{
|
|
690
|
-
renderer_http_pool_timeout = #{
|
|
691
|
-
renderer_http_pool_warn_timeout = #{
|
|
692
|
-
renderer_http_keep_alive_timeout = #{
|
|
693
|
-
renderer_http_force_http2 = #{
|
|
694
|
-
renderer_url = #{url}
|
|
696
|
+
renderer_http_pool_size = #{config.renderer_http_pool_size}
|
|
697
|
+
renderer_http_pool_timeout = #{config.renderer_http_pool_timeout}
|
|
698
|
+
renderer_http_pool_warn_timeout = #{config.renderer_http_pool_warn_timeout}
|
|
699
|
+
renderer_http_keep_alive_timeout = #{config.renderer_http_keep_alive_timeout}
|
|
700
|
+
renderer_http_force_http2 = #{config.renderer_http_force_http2}
|
|
701
|
+
renderer_url = #{ReactOnRails::Utils.sanitize_url_for_display(url)}
|
|
695
702
|
Be sure to use a url that contains the protocol of http or https.
|
|
696
703
|
Original error is
|
|
697
|
-
#{
|
|
704
|
+
#{ReactOnRails::Utils.sanitize_error_text(error.message)}
|
|
698
705
|
MSG
|
|
699
|
-
raise ReactOnRailsPro::Error, message
|
|
700
706
|
end
|
|
701
707
|
|
|
702
708
|
def get_form_body_for_file(path)
|
|
@@ -171,7 +171,15 @@ module ReactOnRailsPro
|
|
|
171
171
|
|
|
172
172
|
FileUtils.rm_rf(dir)
|
|
173
173
|
FileUtils.mkdir_p(dir)
|
|
174
|
-
|
|
174
|
+
begin
|
|
175
|
+
result = download_from_origin(candidate[:base], bundle_hash, dir:, deadline:)
|
|
176
|
+
rescue StandardError => e
|
|
177
|
+
Rails.logger.warn(
|
|
178
|
+
"#{LOG_PREFIX} candidate #{candidate[:base]} failed: #{e.class}: #{e.message}; " \
|
|
179
|
+
"continuing with remaining candidates while time allows."
|
|
180
|
+
)
|
|
181
|
+
next
|
|
182
|
+
end
|
|
175
183
|
next unless result
|
|
176
184
|
next unless acceptable_payload?(candidate, result, bundle_hash)
|
|
177
185
|
|
data/lib/tasks/assets.rake
CHANGED
|
@@ -56,7 +56,8 @@ namespace :react_on_rails_pro do # rubocop:disable Metrics/BlockLength
|
|
|
56
56
|
|
|
57
57
|
desc "Copy assets to remote node-renderer"
|
|
58
58
|
task copy_assets_to_remote_vm_renderer: :environment do
|
|
59
|
-
puts "[ReactOnRailsPro] Copying assets to remote node-renderer
|
|
59
|
+
puts "[ReactOnRailsPro] Copying assets to remote node-renderer " \
|
|
60
|
+
"#{ReactOnRails::Utils.sanitize_url_for_display(ReactOnRailsPro.configuration.renderer_url)}"
|
|
60
61
|
ReactOnRailsPro::Request.upload_assets
|
|
61
62
|
end
|
|
62
63
|
end
|
data/react_on_rails_pro.gemspec
CHANGED
|
@@ -30,7 +30,7 @@ Gem::Specification.new do |s|
|
|
|
30
30
|
s.summary = "Rails with react server rendering with webpack. Performance helpers"
|
|
31
31
|
s.description = "See README.md"
|
|
32
32
|
s.homepage = "https://reactonrails.com/docs/pro/"
|
|
33
|
-
s.license = "LicenseRef-
|
|
33
|
+
s.license = "LicenseRef-ReactOnRailsPro"
|
|
34
34
|
s.metadata["rubygems_mfa_required"] = "true"
|
|
35
35
|
s.metadata["bug_tracker_uri"] = "https://github.com/shakacode/react_on_rails/issues"
|
|
36
36
|
s.metadata["changelog_uri"] = "https://github.com/shakacode/react_on_rails/blob/main/CHANGELOG.md"
|
|
@@ -55,7 +55,9 @@ Gem::Specification.new do |s|
|
|
|
55
55
|
s.add_runtime_dependency "io-endpoint", "~> 0.17.0"
|
|
56
56
|
# Pro's only JWT call site (LicenseValidator) pins algorithm: "RS256" with
|
|
57
57
|
# public-key verification, which is safe on jwt 2.x as well as 3.x.
|
|
58
|
-
|
|
58
|
+
# jwt 2.8 first declares `base64` as a runtime dependency. This keeps offline
|
|
59
|
+
# license validation reliable on Ruby 3.4+, where base64 is a bundled gem.
|
|
60
|
+
s.add_runtime_dependency "jwt", ">= 2.8", "< 4"
|
|
59
61
|
s.add_runtime_dependency "nokogiri", ">= 1.12", "< 2"
|
|
60
62
|
s.add_runtime_dependency "react_on_rails", ReactOnRails::VERSION
|
|
61
63
|
# rubocop:disable Gemspec/DevelopmentDependencies
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: react_on_rails_pro
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 17.
|
|
4
|
+
version: 17.2.0.rc.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Justin Gordon
|
|
@@ -71,7 +71,7 @@ dependencies:
|
|
|
71
71
|
requirements:
|
|
72
72
|
- - ">="
|
|
73
73
|
- !ruby/object:Gem::Version
|
|
74
|
-
version: '2.
|
|
74
|
+
version: '2.8'
|
|
75
75
|
- - "<"
|
|
76
76
|
- !ruby/object:Gem::Version
|
|
77
77
|
version: '4'
|
|
@@ -81,7 +81,7 @@ dependencies:
|
|
|
81
81
|
requirements:
|
|
82
82
|
- - ">="
|
|
83
83
|
- !ruby/object:Gem::Version
|
|
84
|
-
version: '2.
|
|
84
|
+
version: '2.8'
|
|
85
85
|
- - "<"
|
|
86
86
|
- !ruby/object:Gem::Version
|
|
87
87
|
version: '4'
|
|
@@ -111,14 +111,14 @@ dependencies:
|
|
|
111
111
|
requirements:
|
|
112
112
|
- - '='
|
|
113
113
|
- !ruby/object:Gem::Version
|
|
114
|
-
version: 17.
|
|
114
|
+
version: 17.2.0.rc.0
|
|
115
115
|
type: :runtime
|
|
116
116
|
prerelease: false
|
|
117
117
|
version_requirements: !ruby/object:Gem::Requirement
|
|
118
118
|
requirements:
|
|
119
119
|
- - '='
|
|
120
120
|
- !ruby/object:Gem::Version
|
|
121
|
-
version: 17.
|
|
121
|
+
version: 17.2.0.rc.0
|
|
122
122
|
- !ruby/object:Gem::Dependency
|
|
123
123
|
name: bundler
|
|
124
124
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -297,7 +297,7 @@ files:
|
|
|
297
297
|
- sig/react_on_rails_pro/utils.rbs
|
|
298
298
|
homepage: https://reactonrails.com/docs/pro/
|
|
299
299
|
licenses:
|
|
300
|
-
- LicenseRef-
|
|
300
|
+
- LicenseRef-ReactOnRailsPro
|
|
301
301
|
metadata:
|
|
302
302
|
rubygems_mfa_required: 'true'
|
|
303
303
|
bug_tracker_uri: https://github.com/shakacode/react_on_rails/issues
|