relmio 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -7,7 +7,47 @@ checks the registry separately after publication.
7
7
 
8
8
  ## Unreleased
9
9
 
10
- No unreleased changes.
10
+ ## [0.2.2] - 2026-07-30
11
+
12
+ ### Added
13
+
14
+ - Add aligned npm keywords and GitHub repository topics for Relmio, GPT model
15
+ variants, n8n, AI agents, and API-key discovery.
16
+
17
+ ## [0.2.1] - 2026-07-30
18
+
19
+ ### Added
20
+
21
+ - Add the hosted ChatGPT site link to the package metadata and public guides.
22
+ - Document the upstream Codex relay model, known limitations, and legal
23
+ responsibilities in both the GitHub and npm README variants.
24
+ - Add a command-first install page for the current n8n and Hostinger VPS
25
+ wizard, plus a GitHub control with live package and repository metadata.
26
+ - Credit Evan Zhou Dev's `openai-oauth` method on the hosted Relmio page.
27
+
28
+ ### Changed
29
+
30
+ - Refresh the local setup wizard and hosted chat presentation with the Relmio
31
+ redesign, including clearer progress, copy feedback, responsive layouts, and
32
+ request-state affordances.
33
+ - Move the hosted chat and package homepage to
34
+ [relmio.vercel.app](https://relmio.vercel.app/) with Node.js 22 and
35
+ repository-driven preview and production deployments.
36
+ - Return ChatGPT OAuth callbacks to the deployment that started sign-in so
37
+ Vercel preview URLs and the production domain both work.
38
+ - Run hosted web linting, type checks, builds, tests, and dependency auditing
39
+ in GitHub Actions alongside repository-driven deployments.
40
+ - Point package and documentation metadata at the canonical `relmio`
41
+ repository.
42
+ - License Relmio under Apache 2.0 and preserve the upstream `openai-oauth`
43
+ attribution in the distributed notice.
44
+
45
+ ### Fixed
46
+
47
+ - Stream hosted chat responses incrementally through deployment proxies and
48
+ surface safe request errors instead of leaving an empty assistant message.
49
+ - Distinguish a ChatGPT hosting-network challenge from an expired OAuth
50
+ session without exposing upstream response bodies or credentials.
11
51
 
12
52
  ## [0.2.0] - 2026-07-29
13
53
 
@@ -180,11 +220,11 @@ No unreleased changes.
180
220
  - The sidecar uses an internal-only Docker network endpoint and no published
181
221
  VPS port.
182
222
 
183
- [0.1.7]: https://github.com/Demonbane18/n8n-openai-oauth-setup/compare/v0.1.6...v0.1.7
184
- [0.1.6]: https://github.com/Demonbane18/n8n-openai-oauth-setup/compare/v0.1.5...v0.1.6
185
- [0.1.5]: https://github.com/Demonbane18/n8n-openai-oauth-setup/compare/v0.1.4...v0.1.5
186
- [0.1.4]: https://github.com/Demonbane18/n8n-openai-oauth-setup/compare/v0.1.3...v0.1.4
187
- [0.1.3]: https://github.com/Demonbane18/n8n-openai-oauth-setup/compare/v0.1.2...v0.1.3
188
- [0.1.2]: https://github.com/Demonbane18/n8n-openai-oauth-setup/compare/v0.1.1...v0.1.2
189
- [0.1.1]: https://github.com/Demonbane18/n8n-openai-oauth-setup/compare/v0.1.0...v0.1.1
190
- [0.1.0]: https://github.com/Demonbane18/n8n-openai-oauth-setup/releases/tag/v0.1.0
223
+ [0.1.7]: https://github.com/Demonbane18/relmio/compare/v0.1.6...v0.1.7
224
+ [0.1.6]: https://github.com/Demonbane18/relmio/compare/v0.1.5...v0.1.6
225
+ [0.1.5]: https://github.com/Demonbane18/relmio/compare/v0.1.4...v0.1.5
226
+ [0.1.4]: https://github.com/Demonbane18/relmio/compare/v0.1.3...v0.1.4
227
+ [0.1.3]: https://github.com/Demonbane18/relmio/compare/v0.1.2...v0.1.3
228
+ [0.1.2]: https://github.com/Demonbane18/relmio/compare/v0.1.1...v0.1.2
229
+ [0.1.1]: https://github.com/Demonbane18/relmio/compare/v0.1.0...v0.1.1
230
+ [0.1.0]: https://github.com/Demonbane18/relmio/releases/tag/v0.1.0
package/LICENSE CHANGED
@@ -1,21 +1,201 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Demonbane18
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "[]"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright 2026 Relmio contributors
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
package/NOTICE ADDED
@@ -0,0 +1,11 @@
1
+ Relmio
2
+ Copyright 2026 Relmio contributors
3
+
4
+ Relmio uses software and methods developed by Evan Zhou and the OpenAI OAuth
5
+ contributors:
6
+
7
+ OpenAI OAuth
8
+ Copyright 2026 Evan Zhou and OpenAI OAuth contributors
9
+ https://github.com/EvanZhouDev/openai-oauth
10
+
11
+ OpenAI OAuth is licensed under the Apache License, Version 2.0.
package/README.md CHANGED
@@ -1,13 +1,15 @@
1
1
  <div align="center">
2
- <img src="https://raw.githubusercontent.com/Demonbane18/n8n-openai-oauth-setup/main/docs/images/brand/relmio-mark.svg" alt="Relmio logo" width="88">
2
+ <img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/brand/relmio-mark.svg" alt="Relmio logo" width="88">
3
3
  <h1>Relmio</h1>
4
4
  <p>Relay a supported ChatGPT/Codex sign-in to OpenAI-compatible clients, starting with self-hosted n8n.</p>
5
5
  <p>
6
- <a href="https://github.com/Demonbane18/n8n-openai-oauth-setup">Full guide</a>
6
+ <a href="https://github.com/Demonbane18/relmio">Full guide</a>
7
7
  &nbsp;·&nbsp;
8
- <a href="https://github.com/Demonbane18/n8n-openai-oauth-setup/issues/new">Report an issue</a>
8
+ <a href="https://relmio.vercel.app/">Hosted ChatGPT site</a>
9
9
  &nbsp;·&nbsp;
10
- <a href="https://github.com/Demonbane18/n8n-openai-oauth-setup/blob/main/docs/roadmap.md">Roadmap</a>
10
+ <a href="https://github.com/Demonbane18/relmio/issues/new">Report an issue</a>
11
+ &nbsp;·&nbsp;
12
+ <a href="https://github.com/Demonbane18/relmio/blob/main/docs/roadmap.md">Roadmap</a>
11
13
  </p>
12
14
  </div>
13
15
 
@@ -19,6 +21,24 @@ exact change plan, and the final n8n credential settings.
19
21
 
20
22
  The existing n8n image, Compose file, container, and workflows stay untouched.
21
23
 
24
+ A sidecar is a small helper program that runs beside a larger program. Relmio's
25
+ private sidecar adds ChatGPT/Codex sign-in and request translation while your
26
+ existing n8n stays unchanged. This follows the sidecar pattern described in
27
+ [Justin Rice's beginner-friendly overview](https://medium.com/@justinricedev/what-is-a-software-sidecar-8f89feff09f9).
28
+
29
+ Think of it like a motorcycle gaining a sidecar: together they become a
30
+ tricycle with extra seats. n8n is the motorcycle; Relmio is the sidecar that
31
+ adds the missing capability without changing n8n.
32
+
33
+ Try the hosted browser demo at
34
+ [relmio.vercel.app](https://relmio.vercel.app/). It is a separate
35
+ request-bound ChatGPT experience; the npm package remains the local wizard for
36
+ installing the private n8n sidecar.
37
+
38
+ Use the site's [Install wizard](https://relmio.vercel.app/install) page for a
39
+ copyable command tailored to the current self-hosted n8n and Hostinger VPS
40
+ setup path.
41
+
22
42
  ## Quick start
23
43
 
24
44
  Run this on your own macOS, Windows, or Linux computer—not on the VPS:
@@ -55,7 +75,7 @@ Relmio currently provides tested setup instructions for:
55
75
  The broader direction is to support local chatbots, custom applications,
56
76
  OpenAI-compatible clients, and provider adapters without tying the public
57
77
  product name to n8n. SuperGrok/xAI OAuth is a gated feasibility item on the
58
- [provider roadmap](https://github.com/Demonbane18/n8n-openai-oauth-setup/blob/main/docs/roadmap.md);
78
+ [provider roadmap](https://github.com/Demonbane18/relmio/blob/main/docs/roadmap.md);
59
79
  it is not currently advertised as supported.
60
80
 
61
81
  ## Visual walkthrough
@@ -65,23 +85,23 @@ data, and no real credential or session information.
65
85
 
66
86
  ### 1. Confirm the local ChatGPT/Codex sign-in
67
87
 
68
- <img src="https://raw.githubusercontent.com/Demonbane18/n8n-openai-oauth-setup/main/docs/images/setup/01-local-sign-in-ready.png" alt="Sanitized local sign-in ready screen" width="720">
88
+ <img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/01-local-sign-in-ready.png" alt="Sanitized local sign-in ready screen" width="720">
69
89
 
70
90
  ### 2. Verify the VPS identity
71
91
 
72
- <img src="https://raw.githubusercontent.com/Demonbane18/n8n-openai-oauth-setup/main/docs/images/setup/02-vps-identity-confirmed.png" alt="Sanitized VPS fingerprint confirmation screen" width="720">
92
+ <img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/02-vps-identity-confirmed.png" alt="Sanitized VPS fingerprint confirmation screen" width="720">
73
93
 
74
94
  ### 3. Choose the detected n8n container and network
75
95
 
76
- <img src="https://raw.githubusercontent.com/Demonbane18/n8n-openai-oauth-setup/main/docs/images/setup/03-n8n-detected.png" alt="Sanitized n8n discovery screen" width="720">
96
+ <img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/03-n8n-detected.png" alt="Sanitized n8n discovery screen" width="720">
77
97
 
78
98
  ### 4. Review the exact sidecar-only plan
79
99
 
80
- <img src="https://raw.githubusercontent.com/Demonbane18/n8n-openai-oauth-setup/main/docs/images/setup/04-install-plan.png" alt="Sanitized installation plan screen" width="720">
100
+ <img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/04-install-plan.png" alt="Sanitized installation plan screen" width="720">
81
101
 
82
102
  ### 5. Copy the verified n8n settings
83
103
 
84
- <img src="https://raw.githubusercontent.com/Demonbane18/n8n-openai-oauth-setup/main/docs/images/setup/05-bridge-ready.png" alt="Sanitized verified bridge screen" width="720">
104
+ <img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/05-bridge-ready.png" alt="Sanitized verified bridge screen" width="720">
85
105
 
86
106
  Use these values in an n8n OpenAI credential:
87
107
 
@@ -108,15 +128,52 @@ Platform API key.
108
128
  - Use it only where your account, subscription, provider terms, and applicable
109
129
  policies allow.
110
130
 
131
+ ## How it works
132
+
133
+ OpenAI's Codex CLI uses authenticated endpoints at
134
+ `chatgpt.com/backend-api/codex` to run models with a ChatGPT account. Relmio
135
+ uses the same OAuth credential shape through the upstream
136
+ [`openai-oauth`](https://github.com/EvanZhouDev/openai-oauth) helper to expose
137
+ an OpenAI-compatible path without creating an OpenAI Platform API key or
138
+ requiring separate API credits. The upstream service and its access rules may
139
+ change.
140
+
141
+ ## Known limitations
142
+
143
+ - Only models supported by Codex are available. The list changes over time and
144
+ depends on your ChatGPT plan.
145
+ - The CLI `/v1/responses` endpoint is stateless. Callers must send the full
146
+ conversation history; stateful replay is not provided.
147
+ - Hosted browser sign-in currently supports Chrome and Firefox. Safari is not
148
+ yet supported by the upstream Sign in with ChatGPT flow.
149
+
150
+ ## Legal
151
+
152
+ Relmio and `openai-oauth` are unofficial, community-maintained projects and
153
+ are not affiliated with, endorsed by, or sponsored by OpenAI.
154
+
155
+ ChatGPT OAuth credentials should be treated like passwords. Use your own
156
+ account, keep credentials private, and never pool, share, or redistribute
157
+ access tokens. Do not bypass rate limits, restrictions, or safeguards.
158
+
159
+ You are responsible for complying with OpenAI's [Terms of
160
+ Use](https://openai.com/policies/terms-of-use/), [Usage
161
+ Policies](https://openai.com/policies/usage-policies/), and any agreement that
162
+ applies to your account. This project is provided as-is without warranties;
163
+ OpenAI may change or disable the underlying services at any time.
164
+
111
165
  ## Documentation
112
166
 
113
- - [Complete GitHub README and manual fallback](https://github.com/Demonbane18/n8n-openai-oauth-setup#readme)
114
- - [Configure n8n AI and HTTP nodes](https://github.com/Demonbane18/n8n-openai-oauth-setup/blob/main/docs/n8n-configuration.md)
115
- - [Troubleshooting](https://github.com/Demonbane18/n8n-openai-oauth-setup/blob/main/docs/troubleshooting.md)
116
- - [Security and limitations](https://github.com/Demonbane18/n8n-openai-oauth-setup/blob/main/docs/security.md)
117
- - [Refresh, upgrade, rollback, and uninstall](https://github.com/Demonbane18/n8n-openai-oauth-setup/blob/main/docs/maintenance.md)
118
- - [Changelog](https://github.com/Demonbane18/n8n-openai-oauth-setup/blob/main/CHANGELOG.md)
167
+ - [Complete GitHub README and manual fallback](https://github.com/Demonbane18/relmio#readme)
168
+ - [Configure n8n AI and HTTP nodes](https://github.com/Demonbane18/relmio/blob/main/docs/n8n-configuration.md)
169
+ - [Troubleshooting](https://github.com/Demonbane18/relmio/blob/main/docs/troubleshooting.md)
170
+ - [Security and limitations](https://github.com/Demonbane18/relmio/blob/main/docs/security.md)
171
+ - [Refresh, upgrade, rollback, and uninstall](https://github.com/Demonbane18/relmio/blob/main/docs/maintenance.md)
172
+ - [Changelog](https://github.com/Demonbane18/relmio/blob/main/CHANGELOG.md)
119
173
 
120
174
  ## License
121
175
 
122
- [MIT](https://github.com/Demonbane18/n8n-openai-oauth-setup/blob/main/LICENSE)
176
+ [Apache License 2.0](https://github.com/Demonbane18/relmio/blob/main/LICENSE).
177
+ See the package
178
+ [NOTICE](https://github.com/Demonbane18/relmio/blob/main/NOTICE) for the
179
+ upstream `openai-oauth` attribution.
@@ -203,7 +203,7 @@ On the npm package's **Trusted Publisher** form, use:
203
203
  |---|---|
204
204
  | Publisher | GitHub Actions |
205
205
  | Organization or user | `Demonbane18` |
206
- | Repository | `n8n-openai-oauth-setup` |
206
+ | Repository | `relmio` |
207
207
  | Workflow filename | `publish.yml` |
208
208
  | Environment name | `npm` |
209
209
  | Allowed action | Allow npm publish |
package/package.json CHANGED
@@ -1,17 +1,31 @@
1
1
  {
2
2
  "name": "relmio",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "Turn a supported ChatGPT/Codex OAuth sign-in into a private OpenAI-compatible endpoint, starting with self-hosted n8n.",
5
+ "keywords": [
6
+ "relmio",
7
+ "gpt-5-6-sol",
8
+ "gpt-5-6-terra",
9
+ "gpt-5-6-luna",
10
+ "gpt-2-0-image",
11
+ "n8n",
12
+ "ai-agent",
13
+ "api-key",
14
+ "ai",
15
+ "chatgpt",
16
+ "codex",
17
+ "openai"
18
+ ],
5
19
  "type": "module",
6
- "license": "MIT",
20
+ "license": "Apache-2.0",
7
21
  "repository": {
8
22
  "type": "git",
9
- "url": "git+https://github.com/Demonbane18/n8n-openai-oauth-setup.git"
23
+ "url": "git+https://github.com/Demonbane18/relmio.git"
10
24
  },
11
25
  "bugs": {
12
- "url": "https://github.com/Demonbane18/n8n-openai-oauth-setup/issues"
26
+ "url": "https://github.com/Demonbane18/relmio/issues"
13
27
  },
14
- "homepage": "https://github.com/Demonbane18/n8n-openai-oauth-setup#readme",
28
+ "homepage": "https://relmio.vercel.app/",
15
29
  "engines": {
16
30
  "node": ">=22"
17
31
  },
@@ -28,13 +42,14 @@
28
42
  "README.md",
29
43
  "SPEC.md",
30
44
  "CHANGELOG.md",
31
- "LICENSE"
45
+ "LICENSE",
46
+ "NOTICE"
32
47
  ],
33
48
  "scripts": {
34
49
  "start": "node src/cli.js",
35
50
  "preview": "node scripts/preview.js",
36
51
  "package:build": "node scripts/build-npm-package.js",
37
- "test": "node --test",
52
+ "test": "node --test test/*.test.js",
38
53
  "lint": "node scripts/check-syntax.js",
39
54
  "release:check": "node scripts/check-release-metadata.js",
40
55
  "check": "npm run lint && npm run release:check && npm test"
package/src/ui/app.js CHANGED
@@ -48,6 +48,24 @@ function setBusy(button, busy, busyText) {
48
48
  button.textContent = busy ? busyText : button.dataset.label;
49
49
  }
50
50
 
51
+ const revertTimers = new WeakMap();
52
+
53
+ function flashCopied(button) {
54
+ if (!button.dataset.label) {
55
+ button.dataset.label = button.textContent;
56
+ }
57
+ button.textContent = "Copied";
58
+ button.classList.add("copied");
59
+ window.clearTimeout(revertTimers.get(button));
60
+ revertTimers.set(
61
+ button,
62
+ window.setTimeout(() => {
63
+ button.textContent = button.dataset.label;
64
+ button.classList.remove("copied");
65
+ }, 1800),
66
+ );
67
+ }
68
+
51
69
  async function copyText(value) {
52
70
  try {
53
71
  await navigator.clipboard.writeText(value);
@@ -405,7 +423,7 @@ element("container-select").addEventListener("change", async () => {
405
423
  await loadNetworks();
406
424
  } catch (error) {
407
425
  element("install-confirm").checked = false;
408
- button.disabled = true;
426
+ element("install-button").disabled = true;
409
427
  showStep(2);
410
428
  setMessage(
411
429
  "The install stopped and the VPS connection was closed. Reconnect to inspect the sidecar before retrying.",
@@ -488,7 +506,7 @@ element("copy-settings").addEventListener("click", async (event) => {
488
506
  clearError();
489
507
  try {
490
508
  await copyText(settings);
491
- event.currentTarget.textContent = "Copied";
509
+ flashCopied(event.currentTarget);
492
510
  setMessage("OpenAI credential settings copied.");
493
511
  } catch {
494
512
  showError(new Error("Copy failed. Select the values manually."));
@@ -503,7 +521,7 @@ for (const button of document.querySelectorAll("[data-copy-target]")) {
503
521
  clearError();
504
522
  try {
505
523
  await copyText(value);
506
- event.currentTarget.textContent = "Copied";
524
+ flashCopied(event.currentTarget);
507
525
  setMessage(`${label} copied.`);
508
526
  } catch {
509
527
  showError(new Error(`Copy failed. Select the ${label} manually.`));