@gadgetinc/ggt 0.3.1 → 0.3.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/README.md CHANGED
@@ -56,7 +56,7 @@ $ ggt
56
56
  The command-line interface for Gadget
57
57
 
58
58
  VERSION
59
- ggt/0.3.1 linux-x64 node-v16.20.2
59
+ ggt/0.3.2 linux-x64 node-v16.20.2
60
60
 
61
61
  USAGE
62
62
  $ ggt [COMMAND]
@@ -66,12 +66,25 @@ export const run = async ()=>{
66
66
  // send the session to the server we just started.
67
67
  const url = new URL(`https://${config.domains.services}/auth/login`);
68
68
  url.searchParams.set("returnTo", `https://${config.domains.services}/auth/cli/callback?port=${port}`);
69
- await open(url.toString());
70
- println`
69
+ try {
70
+ await open(url.toString());
71
+ println`
71
72
  We've opened Gadget's login page using your default browser.
72
73
 
73
74
  Please log in and then return to this terminal.\n
74
75
  `;
76
+ } catch (error) {
77
+ log.error("failed to open browser", {
78
+ error
79
+ });
80
+ println`
81
+ Please open the following URL in your browser and log in:
82
+
83
+ {gray ${url.toString()}}
84
+
85
+ Once logged in, return to this terminal.\n
86
+ `;
87
+ }
75
88
  await receiveSession;
76
89
  } finally{
77
90
  server?.close();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/commands/login.ts"],"sourcesContent":["import getPort from \"get-port\";\nimport assert from \"node:assert\";\nimport http, { type Server } from \"node:http\";\nimport open from \"open\";\nimport { config } from \"../services/config.js\";\nimport { createLogger } from \"../services/log.js\";\nimport { println, sprint } from \"../services/output.js\";\nimport { writeSession } from \"../services/session.js\";\nimport { getUser } from \"../services/user.js\";\n\nexport const usage = sprint`\n Log in to your account.\n\n {bold USAGE}\n $ ggt login\n\n {bold EXAMPLES}\n {gray $ ggt login}\n We've opened Gadget's login page using your default browser.\n\n Please log in and then return to this terminal.\n\n Hello, Jane Doe (jane@example.com)\n`;\n\nconst log = createLogger(\"login\");\n\nexport const run = async () => {\n let server: Server | undefined;\n\n try {\n const port = await getPort();\n const receiveSession = new Promise<void>((resolve, reject) => {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n server = http.createServer(async (req, res) => {\n const landingPage = new URL(`https://${config.domains.services}/auth/cli`);\n\n try {\n assert(req.url, \"missing url\");\n const session = new URL(req.url, `http://localhost:${port}`).searchParams.get(\"session\");\n assert(session, \"missing session\");\n\n writeSession(session);\n\n const user = await getUser();\n assert(user, \"missing user after successful login\");\n\n if (user.name) {\n println`Hello, ${user.name} {gray (${user.email})}`;\n } else {\n println`Hello, ${user.email}`;\n }\n println();\n\n landingPage.searchParams.set(\"success\", \"true\");\n resolve();\n } catch (error) {\n writeSession(undefined);\n landingPage.searchParams.set(\"success\", \"false\");\n reject(error);\n } finally {\n res.writeHead(303, { Location: landingPage.toString() });\n res.end();\n }\n });\n\n log.info(\"starting login server\", { port });\n server.listen(port);\n });\n\n // open the login page in the user's default browser have it\n // redirect to the cli callback route. The cli callback route will\n // send the session to the server we just started.\n const url = new URL(`https://${config.domains.services}/auth/login`);\n url.searchParams.set(\"returnTo\", `https://${config.domains.services}/auth/cli/callback?port=${port}`);\n await open(url.toString());\n\n println`\n We've opened Gadget's login page using your default browser.\n\n Please log in and then return to this terminal.\\n\n `;\n\n await receiveSession;\n } finally {\n server?.close();\n }\n};\n"],"names":["getPort","assert","http","open","config","createLogger","println","sprint","writeSession","getUser","usage","log","run","server","port","receiveSession","Promise","resolve","reject","createServer","req","res","landingPage","URL","domains","services","url","session","searchParams","get","user","name","email","set","error","undefined","writeHead","Location","toString","end","info","listen","close"],"mappings":"AAAA,OAAOA,aAAa,WAAW;AAC/B,OAAOC,YAAY,cAAc;AACjC,OAAOC,UAA2B,YAAY;AAC9C,OAAOC,UAAU,OAAO;AACxB,SAASC,MAAM,QAAQ,wBAAwB;AAC/C,SAASC,YAAY,QAAQ,qBAAqB;AAClD,SAASC,OAAO,EAAEC,MAAM,QAAQ,wBAAwB;AACxD,SAASC,YAAY,QAAQ,yBAAyB;AACtD,SAASC,OAAO,QAAQ,sBAAsB;AAE9C,OAAO,MAAMC,QAAQH,MAAM,CAAC;;;;;;;;;;;;;AAa5B,CAAC,CAAC;AAEF,MAAMI,MAAMN,aAAa;AAEzB,OAAO,MAAMO,MAAM;IACjB,IAAIC;IAEJ,IAAI;QACF,MAAMC,OAAO,MAAMd;QACnB,MAAMe,iBAAiB,IAAIC,QAAc,CAACC,SAASC;YACjD,kEAAkE;YAClEL,SAASX,KAAKiB,YAAY,CAAC,OAAOC,KAAKC;gBACrC,MAAMC,cAAc,IAAIC,IAAI,CAAC,QAAQ,EAAEnB,OAAOoB,OAAO,CAACC,QAAQ,CAAC,SAAS,CAAC;gBAEzE,IAAI;oBACFxB,OAAOmB,IAAIM,GAAG,EAAE;oBAChB,MAAMC,UAAU,IAAIJ,IAAIH,IAAIM,GAAG,EAAE,CAAC,iBAAiB,EAAEZ,KAAK,CAAC,EAAEc,YAAY,CAACC,GAAG,CAAC;oBAC9E5B,OAAO0B,SAAS;oBAEhBnB,aAAamB;oBAEb,MAAMG,OAAO,MAAMrB;oBACnBR,OAAO6B,MAAM;oBAEb,IAAIA,KAAKC,IAAI,EAAE;wBACbzB,OAAO,CAAC,OAAO,EAAEwB,KAAKC,IAAI,CAAC,QAAQ,EAAED,KAAKE,KAAK,CAAC,EAAE,CAAC;oBACrD,OAAO;wBACL1B,OAAO,CAAC,OAAO,EAAEwB,KAAKE,KAAK,CAAC,CAAC;oBAC/B;oBACA1B;oBAEAgB,YAAYM,YAAY,CAACK,GAAG,CAAC,WAAW;oBACxChB;gBACF,EAAE,OAAOiB,OAAO;oBACd1B,aAAa2B;oBACbb,YAAYM,YAAY,CAACK,GAAG,CAAC,WAAW;oBACxCf,OAAOgB;gBACT,SAAU;oBACRb,IAAIe,SAAS,CAAC,KAAK;wBAAEC,UAAUf,YAAYgB,QAAQ;oBAAG;oBACtDjB,IAAIkB,GAAG;gBACT;YACF;YAEA5B,IAAI6B,IAAI,CAAC,yBAAyB;gBAAE1B;YAAK;YACzCD,OAAO4B,MAAM,CAAC3B;QAChB;QAEA,4DAA4D;QAC5D,kEAAkE;QAClE,kDAAkD;QAClD,MAAMY,MAAM,IAAIH,IAAI,CAAC,QAAQ,EAAEnB,OAAOoB,OAAO,CAACC,QAAQ,CAAC,WAAW,CAAC;QACnEC,IAAIE,YAAY,CAACK,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE7B,OAAOoB,OAAO,CAACC,QAAQ,CAAC,wBAAwB,EAAEX,KAAK,CAAC;QACpG,MAAMX,KAAKuB,IAAIY,QAAQ;QAEvBhC,OAAO,CAAC;;;;IAIR,CAAC;QAED,MAAMS;IACR,SAAU;QACRF,QAAQ6B;IACV;AACF,EAAE"}
1
+ {"version":3,"sources":["../../src/commands/login.ts"],"sourcesContent":["import getPort from \"get-port\";\nimport assert from \"node:assert\";\nimport http, { type Server } from \"node:http\";\nimport open from \"open\";\nimport { config } from \"../services/config.js\";\nimport { createLogger } from \"../services/log.js\";\nimport { println, sprint } from \"../services/output.js\";\nimport { writeSession } from \"../services/session.js\";\nimport { getUser } from \"../services/user.js\";\n\nexport const usage = sprint`\n Log in to your account.\n\n {bold USAGE}\n $ ggt login\n\n {bold EXAMPLES}\n {gray $ ggt login}\n We've opened Gadget's login page using your default browser.\n\n Please log in and then return to this terminal.\n\n Hello, Jane Doe (jane@example.com)\n`;\n\nconst log = createLogger(\"login\");\n\nexport const run = async () => {\n let server: Server | undefined;\n\n try {\n const port = await getPort();\n const receiveSession = new Promise<void>((resolve, reject) => {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n server = http.createServer(async (req, res) => {\n const landingPage = new URL(`https://${config.domains.services}/auth/cli`);\n\n try {\n assert(req.url, \"missing url\");\n const session = new URL(req.url, `http://localhost:${port}`).searchParams.get(\"session\");\n assert(session, \"missing session\");\n\n writeSession(session);\n\n const user = await getUser();\n assert(user, \"missing user after successful login\");\n\n if (user.name) {\n println`Hello, ${user.name} {gray (${user.email})}`;\n } else {\n println`Hello, ${user.email}`;\n }\n println();\n\n landingPage.searchParams.set(\"success\", \"true\");\n resolve();\n } catch (error) {\n writeSession(undefined);\n landingPage.searchParams.set(\"success\", \"false\");\n reject(error);\n } finally {\n res.writeHead(303, { Location: landingPage.toString() });\n res.end();\n }\n });\n\n log.info(\"starting login server\", { port });\n server.listen(port);\n });\n\n // open the login page in the user's default browser have it\n // redirect to the cli callback route. The cli callback route will\n // send the session to the server we just started.\n const url = new URL(`https://${config.domains.services}/auth/login`);\n url.searchParams.set(\"returnTo\", `https://${config.domains.services}/auth/cli/callback?port=${port}`);\n\n try {\n await open(url.toString());\n println`\n We've opened Gadget's login page using your default browser.\n\n Please log in and then return to this terminal.\\n\n `;\n } catch (error) {\n log.error(\"failed to open browser\", { error });\n println`\n Please open the following URL in your browser and log in:\n\n {gray ${url.toString()}}\n\n Once logged in, return to this terminal.\\n\n `;\n }\n\n await receiveSession;\n } finally {\n server?.close();\n }\n};\n"],"names":["getPort","assert","http","open","config","createLogger","println","sprint","writeSession","getUser","usage","log","run","server","port","receiveSession","Promise","resolve","reject","createServer","req","res","landingPage","URL","domains","services","url","session","searchParams","get","user","name","email","set","error","undefined","writeHead","Location","toString","end","info","listen","close"],"mappings":"AAAA,OAAOA,aAAa,WAAW;AAC/B,OAAOC,YAAY,cAAc;AACjC,OAAOC,UAA2B,YAAY;AAC9C,OAAOC,UAAU,OAAO;AACxB,SAASC,MAAM,QAAQ,wBAAwB;AAC/C,SAASC,YAAY,QAAQ,qBAAqB;AAClD,SAASC,OAAO,EAAEC,MAAM,QAAQ,wBAAwB;AACxD,SAASC,YAAY,QAAQ,yBAAyB;AACtD,SAASC,OAAO,QAAQ,sBAAsB;AAE9C,OAAO,MAAMC,QAAQH,MAAM,CAAC;;;;;;;;;;;;;AAa5B,CAAC,CAAC;AAEF,MAAMI,MAAMN,aAAa;AAEzB,OAAO,MAAMO,MAAM;IACjB,IAAIC;IAEJ,IAAI;QACF,MAAMC,OAAO,MAAMd;QACnB,MAAMe,iBAAiB,IAAIC,QAAc,CAACC,SAASC;YACjD,kEAAkE;YAClEL,SAASX,KAAKiB,YAAY,CAAC,OAAOC,KAAKC;gBACrC,MAAMC,cAAc,IAAIC,IAAI,CAAC,QAAQ,EAAEnB,OAAOoB,OAAO,CAACC,QAAQ,CAAC,SAAS,CAAC;gBAEzE,IAAI;oBACFxB,OAAOmB,IAAIM,GAAG,EAAE;oBAChB,MAAMC,UAAU,IAAIJ,IAAIH,IAAIM,GAAG,EAAE,CAAC,iBAAiB,EAAEZ,KAAK,CAAC,EAAEc,YAAY,CAACC,GAAG,CAAC;oBAC9E5B,OAAO0B,SAAS;oBAEhBnB,aAAamB;oBAEb,MAAMG,OAAO,MAAMrB;oBACnBR,OAAO6B,MAAM;oBAEb,IAAIA,KAAKC,IAAI,EAAE;wBACbzB,OAAO,CAAC,OAAO,EAAEwB,KAAKC,IAAI,CAAC,QAAQ,EAAED,KAAKE,KAAK,CAAC,EAAE,CAAC;oBACrD,OAAO;wBACL1B,OAAO,CAAC,OAAO,EAAEwB,KAAKE,KAAK,CAAC,CAAC;oBAC/B;oBACA1B;oBAEAgB,YAAYM,YAAY,CAACK,GAAG,CAAC,WAAW;oBACxChB;gBACF,EAAE,OAAOiB,OAAO;oBACd1B,aAAa2B;oBACbb,YAAYM,YAAY,CAACK,GAAG,CAAC,WAAW;oBACxCf,OAAOgB;gBACT,SAAU;oBACRb,IAAIe,SAAS,CAAC,KAAK;wBAAEC,UAAUf,YAAYgB,QAAQ;oBAAG;oBACtDjB,IAAIkB,GAAG;gBACT;YACF;YAEA5B,IAAI6B,IAAI,CAAC,yBAAyB;gBAAE1B;YAAK;YACzCD,OAAO4B,MAAM,CAAC3B;QAChB;QAEA,4DAA4D;QAC5D,kEAAkE;QAClE,kDAAkD;QAClD,MAAMY,MAAM,IAAIH,IAAI,CAAC,QAAQ,EAAEnB,OAAOoB,OAAO,CAACC,QAAQ,CAAC,WAAW,CAAC;QACnEC,IAAIE,YAAY,CAACK,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE7B,OAAOoB,OAAO,CAACC,QAAQ,CAAC,wBAAwB,EAAEX,KAAK,CAAC;QAEpG,IAAI;YACF,MAAMX,KAAKuB,IAAIY,QAAQ;YACvBhC,OAAO,CAAC;;;;IAIV,CAAC;QACD,EAAE,OAAO4B,OAAO;YACdvB,IAAIuB,KAAK,CAAC,0BAA0B;gBAAEA;YAAM;YAC5C5B,OAAO,CAAC;;;gBAGE,EAAEoB,IAAIY,QAAQ,GAAG;;;MAG3B,CAAC;QACH;QAEA,MAAMvB;IACR,SAAU;QACRF,QAAQ6B;IACV;AACF,EAAE"}
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@gadgetinc/ggt",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@gadgetinc/ggt",
9
- "version": "0.3.1",
9
+ "version": "0.3.2",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "@sentry/node": "^7.74.1",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gadgetinc/ggt",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "description": "The command-line interface for Gadget",
5
5
  "homepage": "https://github.com/gadget-inc/ggt",
6
6
  "bugs": "https://github.com/gadget-inc/ggt/issues",