diff --git a/package.json b/package.json
index 2b975b0..e33d3ea 100644
--- a/package.json
+++ b/package.json
@@ -67,6 +67,7 @@
"husky": "^8.0.3",
"nx": "21.5.2",
"oxlint": "^1.16.0",
- "prettier": "^3.4.2"
+ "prettier": "^3.4.2",
+ "typescript": "^5.3.3"
}
}
diff --git a/packages/nylas-connect/app.js b/packages/nylas-connect/app.js
new file mode 100644
index 0000000..78b2041
--- /dev/null
+++ b/packages/nylas-connect/app.js
@@ -0,0 +1,104 @@
+import { auth } from "./auth-instance.js";
+
+const connectButton = document.getElementById("connectButton");
+const resultContainer = document.getElementById("resultContainer");
+const resultContent = document.getElementById("resultContent");
+
+connectButton.addEventListener("click", async () => {
+ // Disable button and show loading state
+ connectButton.disabled = true;
+ connectButton.textContent = "Connecting...";
+ resultContainer.classList.remove("show");
+ resultContent.innerHTML =
+ '
Opening authentication window...
';
+
+ try {
+ const result = await auth.connect({ method: "popup" });
+
+ // Display the result
+ displayResult(result);
+ } catch (error) {
+ // Display error
+ displayError(error);
+ } finally {
+ // Re-enable button
+ connectButton.disabled = false;
+ connectButton.textContent = "Connect your inbox";
+ }
+});
+
+function displayResult(result) {
+ const expiresAt = new Date(result.expiresAt);
+ const expiresIn = Math.floor((result.expiresAt - Date.now()) / 1000 / 60);
+
+ let html = '✓ Authentication Successful';
+ html += "Connection Details
";
+
+ // Access Token
+ html += '';
+ html += '
Access Token
';
+ html += `
${escapeHtml(result.accessToken)}
`;
+ html += "
";
+
+ // Grant ID
+ html += '';
+ html += '
Grant ID
';
+ html += `
${escapeHtml(result.grantId)}
`;
+ html += "
";
+
+ // Grant Info (if available)
+ if (result.grantInfo) {
+ if (result.grantInfo.email) {
+ html += '';
+ html += '
Email
';
+ html += `
${escapeHtml(result.grantInfo.email)}
`;
+ html += "
";
+ }
+
+ if (result.grantInfo.provider) {
+ html += '';
+ html += '
Provider
';
+ html += `
${escapeHtml(result.grantInfo.provider)}
`;
+ html += "
";
+ }
+
+ if (result.grantInfo.name) {
+ html += '';
+ html += '
Name
';
+ html += `
${escapeHtml(result.grantInfo.name)}
`;
+ html += "
";
+ }
+ }
+
+ // Scopes
+ html += '';
+ html += '
Granted Scopes
';
+ html += `
${escapeHtml(result.scope)}
`;
+ html += "
";
+
+ // Expiration
+ html += '';
+ html += '
Expires
';
+ html += `
${expiresAt.toLocaleString()} (in ${expiresIn} minutes)
`;
+ html += "
";
+
+ resultContent.innerHTML = html;
+ resultContainer.classList.add("show");
+}
+
+function displayError(error) {
+ const errorMessage = error instanceof Error ? error.message : String(error);
+ resultContent.innerHTML = `
+
+ Authentication Error:
+ ${escapeHtml(errorMessage)}
+
+ `;
+ resultContainer.classList.add("show");
+}
+
+function escapeHtml(text) {
+ const div = document.createElement("div");
+ div.textContent = text;
+ return div.innerHTML;
+}
diff --git a/packages/nylas-connect/auth-instance.js b/packages/nylas-connect/auth-instance.js
index 7111985..eaf21f8 100644
--- a/packages/nylas-connect/auth-instance.js
+++ b/packages/nylas-connect/auth-instance.js
@@ -2,8 +2,8 @@ import { NylasConnect } from "./src/index.ts";
// Shared auth configuration
export const auth = new NylasConnect({
- clientId: "3531f8b3-3d7f-4412-a073-2d4aa397508f",
- apiUrl: "https://api-staging.us.nylas.com/v3",
+ clientId: "09e06084-b8a4-483c-92e2-07985e0d0489",
+ apiUrl: "https://api.us.nylas.com/v3",
redirectUri:
(globalThis.window?.location?.origin || "http://localhost:3000") +
"/callback.html",
diff --git a/packages/nylas-connect/index.html b/packages/nylas-connect/index.html
index c70b2f2..952f968 100644
--- a/packages/nylas-connect/index.html
+++ b/packages/nylas-connect/index.html
@@ -4,28 +4,21 @@
Nylas Auth - Development
-
+
- Open the console to see the output
-
+
+
Nylas Connect Demo
+
+ Click the button below to connect your inbox using Nylas Hosted Auth.
+
+
+
+
+