@crossmint/cli 1.1.4 → 1.1.6

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.
Files changed (100) hide show
  1. package/dist/bin/crossmint.js +13 -13
  2. package/package.json +1 -1
  3. package/package.json.backup +1 -1
  4. package/tsup.config.ts +18 -5
  5. package/dist/bin/crossmint.d.ts +0 -3
  6. package/dist/bin/crossmint.d.ts.map +0 -1
  7. package/dist/commands/keys/create.d.ts +0 -2
  8. package/dist/commands/keys/create.d.ts.map +0 -1
  9. package/dist/commands/keys/create.js +0 -2
  10. package/dist/commands/keys/create.test.d.ts +0 -2
  11. package/dist/commands/keys/create.test.d.ts.map +0 -1
  12. package/dist/commands/keys/delete.d.ts +0 -2
  13. package/dist/commands/keys/delete.d.ts.map +0 -1
  14. package/dist/commands/keys/delete.js +0 -1
  15. package/dist/commands/keys/delete.test.d.ts +0 -2
  16. package/dist/commands/keys/delete.test.d.ts.map +0 -1
  17. package/dist/commands/keys/edit.d.ts +0 -2
  18. package/dist/commands/keys/edit.d.ts.map +0 -1
  19. package/dist/commands/keys/edit.js +0 -2
  20. package/dist/commands/keys/edit.test.d.ts +0 -2
  21. package/dist/commands/keys/edit.test.d.ts.map +0 -1
  22. package/dist/commands/keys/index.d.ts +0 -5
  23. package/dist/commands/keys/index.d.ts.map +0 -1
  24. package/dist/commands/keys/index.js +0 -11
  25. package/dist/commands/keys/list.d.ts +0 -3
  26. package/dist/commands/keys/list.d.ts.map +0 -1
  27. package/dist/commands/keys/list.js +0 -10
  28. package/dist/commands/keys/list.test.d.ts +0 -2
  29. package/dist/commands/keys/list.test.d.ts.map +0 -1
  30. package/dist/commands/login.d.ts +0 -2
  31. package/dist/commands/login.d.ts.map +0 -1
  32. package/dist/commands/login.js +0 -1
  33. package/dist/commands/login.test.d.ts +0 -2
  34. package/dist/commands/login.test.d.ts.map +0 -1
  35. package/dist/commands/logout.d.ts +0 -2
  36. package/dist/commands/logout.d.ts.map +0 -1
  37. package/dist/commands/logout.js +0 -1
  38. package/dist/commands/projects/create.d.ts +0 -6
  39. package/dist/commands/projects/create.d.ts.map +0 -1
  40. package/dist/commands/projects/create.js +0 -6
  41. package/dist/commands/projects/create.test.d.ts +0 -2
  42. package/dist/commands/projects/create.test.d.ts.map +0 -1
  43. package/dist/commands/projects/details.d.ts +0 -2
  44. package/dist/commands/projects/details.d.ts.map +0 -1
  45. package/dist/commands/projects/details.js +0 -2
  46. package/dist/commands/projects/details.test.d.ts +0 -2
  47. package/dist/commands/projects/details.test.d.ts.map +0 -1
  48. package/dist/commands/projects/index.d.ts +0 -4
  49. package/dist/commands/projects/index.d.ts.map +0 -1
  50. package/dist/commands/projects/index.js +0 -7
  51. package/dist/commands/projects/select.d.ts +0 -2
  52. package/dist/commands/projects/select.d.ts.map +0 -1
  53. package/dist/commands/projects/select.js +0 -1
  54. package/dist/commands/projects/select.test.d.ts +0 -2
  55. package/dist/commands/projects/select.test.d.ts.map +0 -1
  56. package/dist/commands/whoami.d.ts +0 -2
  57. package/dist/commands/whoami.d.ts.map +0 -1
  58. package/dist/commands/whoami.js +0 -1
  59. package/dist/types/keys.d.ts +0 -11
  60. package/dist/types/keys.d.ts.map +0 -1
  61. package/dist/types/keys.js +0 -0
  62. package/dist/utils/Pager.d.ts +0 -9
  63. package/dist/utils/Pager.d.ts.map +0 -1
  64. package/dist/utils/Pager.js +0 -2
  65. package/dist/utils/Pager.test.d.ts +0 -2
  66. package/dist/utils/Pager.test.d.ts.map +0 -1
  67. package/dist/utils/fetch.d.ts +0 -5
  68. package/dist/utils/fetch.d.ts.map +0 -1
  69. package/dist/utils/fetch.js +0 -1
  70. package/dist/utils/getProject.d.ts +0 -4
  71. package/dist/utils/getProject.d.ts.map +0 -1
  72. package/dist/utils/getProject.js +0 -1
  73. package/dist/utils/getWhitelistedOriginsAndAppIdentifiersPrompt.d.ts +0 -6
  74. package/dist/utils/getWhitelistedOriginsAndAppIdentifiersPrompt.d.ts.map +0 -1
  75. package/dist/utils/getWhitelistedOriginsAndAppIdentifiersPrompt.js +0 -2
  76. package/dist/utils/keytar.d.ts +0 -4
  77. package/dist/utils/keytar.d.ts.map +0 -1
  78. package/dist/utils/keytar.js +0 -1
  79. package/dist/utils/oauth/codeChallenge.d.ts +0 -3
  80. package/dist/utils/oauth/codeChallenge.d.ts.map +0 -1
  81. package/dist/utils/oauth/codeChallenge.js +0 -1
  82. package/dist/utils/oauth/getStytchConfig.d.ts +0 -6
  83. package/dist/utils/oauth/getStytchConfig.d.ts.map +0 -1
  84. package/dist/utils/oauth/getStytchConfig.js +0 -1
  85. package/dist/utils/oauth/server.d.ts +0 -3
  86. package/dist/utils/oauth/server.d.ts.map +0 -1
  87. package/dist/utils/oauth/server.js +0 -1
  88. package/dist/utils/scopes.d.ts +0 -14
  89. package/dist/utils/scopes.d.ts.map +0 -1
  90. package/dist/utils/scopes.js +0 -1
  91. package/dist/utils/spinner.d.ts +0 -6
  92. package/dist/utils/spinner.d.ts.map +0 -1
  93. package/dist/utils/spinner.js +0 -1
  94. package/dist/utils/store.d.ts +0 -11
  95. package/dist/utils/store.d.ts.map +0 -1
  96. package/dist/utils/store.js +0 -1
  97. package/dist/utils/urls.d.ts +0 -9
  98. package/dist/utils/urls.d.ts.map +0 -1
  99. package/dist/utils/urls.js +0 -1
  100. package/tsconfig.tsbuildinfo +0 -1
@@ -1,18 +1,18 @@
1
1
  #!/usr/bin/env node
2
- var ue=Object.defineProperty;var n=(t,e)=>ue(t,"name",{value:e,configurable:!0});var ge=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var fe=ge((nn,et)=>{et.exports={name:"@crossmint/cli",version:"1.1.4",description:"",keywords:[],license:"ISC",author:"",type:"module",main:"dist/bin/crossmint.js",bin:{crossmint:"dist/bin/crossmint.js"},scripts:{build:"tsup --env.NODE_ENV production","build:pkg":"node ./build-pkg.js",bump:"node ./scripts/bump.mjs",dev:"tsup --watch --env.NODE_ENV development",start:"pnpm build && node dist/bin/crossmint.js","test:vitest":"vitest run","test:vitest:watch":"vitest"},dependencies:{"@crossmint/common-consts":"workspace:*","@crossmint/common-string-utils":"workspace:*","@crossmint/common-types":"workspace:*","@crossmint/data-dbs-types":"workspace:*","@crossmint/products-console-types":"workspace:*","@inquirer/prompts":"7.4.0",chalk:"4.1.2",commander:"12.0.0",keytar:"7.9.0",nanospinner:"1.2.2",open:"9.1.0"},devDependencies:{"@crossmint/tsconfig":"workspace:*","@crossmint/tsupconfig":"workspace:*","@crossmint/vitestconfig":"workspace:*","@types/node":"20.14.8","@yao-pkg/pkg":"6.3.2",esbuild:"0.25.2",vitest:"2.1.9"},pkg:{scripts:"dist/bin/crossmint.js",assets:[],targets:["node20-macos-arm64","node20-linux-x64","node20-macos-x64"],outputPath:"build"}}});import{program as I}from"commander";var he={production:"https://www.crossmint.com",staging:"https://staging.crossmint.com",local:"http://localhost:3000"};function v(t){return he[t]}n(v,"getCrossmintUrl");import R from"keytar";var V="crossmint-cli";async function S(t,e){return R.setPassword(V,t,e)}n(S,"set");async function C(t){return R.getPassword(V,t)}n(C,"get");async function b(t){return R.deletePassword(V,t)}n(b,"del");function X(t){return S("environment",t)}n(X,"setEnvironment");async function y(){return C("environment")}n(y,"getEnvironment");async function Z(){return b("environment")}n(Z,"deleteEnvironment");function ee(t){return S("sessionToken",t)}n(ee,"setSessionToken");async function te(){return C("sessionToken")}n(te,"getSessionToken");async function oe(){return b("sessionToken")}n(oe,"deleteSessionToken");function E(t){return S("projectId",t)}n(E,"setProjectId");async function w(){return C("projectId")}n(w,"getProjectId");async function re(){return b("projectId")}n(re,"deleteProjectId");import{select as ve}from"@inquirer/prompts";import{HttpMethods as W}from"@crossmint/common-consts";async function d(t,e=W.GET,o){let r=await te(),a=await y();r||(console.error("\u274C Session not found, please run crossmint login"),process.exit(1)),a||(console.error("\u274C Environment not found, please run crossmint login"),process.exit(1));let s=`${v(a)}${t}`;return k(s,e,o,{Cookie:`sessionToken=${r}`})}n(d,"fetchAuthenticated");async function ne(t,e=W.GET,o){let r=await y();r||(console.error("\u274C Environment not found"),process.exit(1));let a=`${v(r)}${t}`;return k(a,e,o)}n(ne,"fetchUnauthenticated");async function k(t,e=W.GET,o,r){let a={method:e,headers:{"Content-Type":"application/json",...r}};o&&(a.body=JSON.stringify(o));let s=await fetch(t,a);if(s.status>=400){let i=await s.json();throw new Error(`${i.message}`)}return await s.json()}n(k,"fetchJSON");import{routes as we}from"@crossmint/common-consts";import{select as Pe}from"@inquirer/prompts";import{createSpinner as ye}from"nanospinner";function g(t){let e=ye(t),o={start:n(r=>(e.start({text:r}),o),"start"),succeed:n(r=>(e.success({text:r}),o),"succeed"),fail:n(r=>(e.error({text:r}),o),"fail")};return o}n(g,"createSpinner");async function A(){let t=g("Fetching projects...").start();try{let e=await d(we.api.projects);if(!e||e.length===0)return t.fail("No projects found. Create a new project using `crossmint project create`"),process.exit(0);if(t.succeed("Fetched projects"),e.length===1){let r=e[0];return console.log(`You only have one project: ${r.name}`),console.log("To create another project, run `crossmint project create`"),await E(r.id),console.log(`\u2705 Project ${r.name} selected`),process.exit(0)}let o=await Pe({message:"Select a project:",choices:e.map(r=>({name:r.name,value:r,description:r.description}))});await E(o.id),console.log(`\u2705 Project ${o.name} selected`),process.exit(0)}catch{t.fail("Failed to fetch projects"),process.exit(1)}}n(A,"selectProject");import Ie from"open";import ie from"crypto";async function se(){let e=ie.randomBytes(32).toString("base64url"),r=ie.createHash("sha256").update(e).digest().toString("base64url");return await S("pkceCodeVerifier",e),r}n(se,"generateCodeChallenge");async function ce(){return await C("pkceCodeVerifier")}n(ce,"getCodeVerifier");import je from"http";import{HttpMethods as ae}from"@crossmint/common-consts";import{routes as pe}from"@crossmint/common-consts";async function K(){let t=await y();return t||(console.error("\u274C Environment not found"),process.exit(1)),t==="local"?{uri:"test.stytch.com",projectId:"project-test-8eb55d3d-949f-4e0f-aea6-c9ba740f7813",clientId:"connected-app-test-4d27d6d8-3491-45c8-9bb0-b05f89cb7a1a"}:t==="staging"?{uri:"api.stytch.com",projectId:"project-live-b7c564af-0c0d-4662-bfc0-72bed1049cfe",clientId:"connected-app-live-47cd5bf1-c155-42c1-9f36-5d35853b34a7"}:{uri:"api.stytch.com",projectId:"project-live-7a1cb98d-b8b7-4471-aaf6-f8af67a0df94",clientId:"connected-app-live-a72edd7e-6ff3-4002-a13a-e7ca66354bd1"}}n(K,"getStytchConfig");async function B(t){return new Promise((e,o)=>{let r=je.createServer(async(s,i)=>{try{let c=new URL(s.url||"",`http://${s.headers.host}`).searchParams.get("code");if(!c){i.writeHead(400,{"Content-Type":"text/plain"}),i.end("No code provided");return}let h=await K(),f=await k(`https://${h.uri}/v1/public/${h.projectId}/oauth2/token`,ae.POST,{grant_type:"authorization_code",code:c,client_id:h.clientId,redirect_uri:"http://127.0.0.1:3456/callback",code_verifier:await ce()}),u=await ne(pe.authentication.exchangeAccessToken,ae.POST,{accessToken:f.access_token});await ee(u.sessionToken),i.writeHead(302,{Location:`${v(t)}${pe.console.authorizeDevice.success}`}),i.end(),r.close(),e(f)}catch(p){i.writeHead(500,{"Content-Type":"text/plain"}),i.end("Error during authentication"),r.close(),o(p)}});r.listen(3456)})}n(B,"server");import{routes as xe}from"@crossmint/common-consts";var Se=!1;async function z(){try{console.log("\u{1F510} Crossmint CLI - Login");let t=await ve({message:"Select environment:",choices:[{name:"Production",value:"production"},{name:"Staging",value:"staging"},...Se?[{name:"Local",value:"local"}]:[]]}),e=v(t);e||(console.error(`Error: No URL found for ${t} environment`),process.exit(1)),await X(t);let o=B(t),{clientId:r}=await K(),s={code_challenge:await se(),code_challenge_method:"S256",scope:"full_access",response_type:"code",grant_type:"authorization_code",redirect_uri:"http://127.0.0.1:3456/callback",client_id:r},i=`${e}${xe.console.authorizeDevice.index(s)}`;console.log("Opening browser for authentication..."),Ie(i),await o,console.log(`\u2705 Login successful! You are now authenticated in the ${t} environment.`),await A()}catch{console.error("\u274C Login failed, please try again."),process.exit(1)}}n(z,"login");import{routes as Ae}from"@crossmint/common-consts";import{routes as Ce}from"@crossmint/common-consts";async function j(t){return(await d(Ce.api.projects)).find(r=>r.id===t)}n(j,"getProject");import{capitalizeFirstLetter as Ee}from"@crossmint/common-string-utils";async function Y(){let t=await y(),e=await w(),o=await j(e||""),r=await d(Ae.authentication.getSession);console.log(`You are logged in to \u{1F340}Crossmint as: ${r.user.email} - Environment: ${Ee(t)} - ${o?`Project: ${o.name}`:"No project selected"}`),process.exit(0)}n(Y,"whoami");async function J(){await oe(),await Z(),await re(),console.log("Logged out"),process.exit(0)}n(J,"logout");import{confirm as be,input as ke}from"@inquirer/prompts";import{HttpMethods as Ke}from"@crossmint/common-consts";import{routes as $e}from"@crossmint/common-consts";async function $(t={}){let e=g();try{let o=t.name;o||(o=await ke({message:"Enter project name:",validate:n(i=>i.length>0||"Project name is required","validate")})),e.start(`\u{1F680} Creating project "${o}" with Smart Wallets...`);let r=await d($e.api.console.projects.index,Ke.POST,{name:o,walletType:"smart_wallet",storageProvider:"ipfs",projectThumbnail:""}),a=JSON.parse(r);e.succeed(`\u2705 Project created successfully!
2
+ var de=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var le=de((Tr,Qe)=>{Qe.exports={name:"@crossmint/cli",version:"1.1.6",description:"",keywords:[],license:"ISC",author:"",type:"module",main:"dist/bin/crossmint.js",bin:{crossmint:"dist/bin/crossmint.js"},scripts:{build:"tsup --env.NODE_ENV production","build:pkg":"node ./build-pkg.js",bump:"node ./scripts/bump.mjs",dev:"tsup --watch --env.NODE_ENV development",start:"pnpm build && node dist/bin/crossmint.js","test:vitest":"vitest run","test:vitest:watch":"vitest"},dependencies:{"@crossmint/common-consts":"workspace:*","@crossmint/common-string-utils":"workspace:*","@crossmint/common-types":"workspace:*","@crossmint/data-dbs-types":"workspace:*","@crossmint/products-console-types":"workspace:*","@inquirer/prompts":"7.4.0",chalk:"4.1.2",commander:"12.0.0",keytar:"7.9.0",nanospinner:"1.2.2",open:"9.1.0"},devDependencies:{"@crossmint/tsconfig":"workspace:*","@crossmint/tsupconfig":"workspace:*","@crossmint/vitestconfig":"workspace:*","@types/node":"20.14.8","@yao-pkg/pkg":"6.3.2",esbuild:"0.25.2",vitest:"2.1.9"},pkg:{scripts:"dist/bin/crossmint.js",assets:[],targets:["node20-macos-arm64","node20-linux-x64","node20-macos-x64"],outputPath:"build"}}});import{program as j}from"commander";var fe={production:"https://www.crossmint.com",staging:"https://staging.crossmint.com",local:"http://localhost:3000"};function w(e){return fe[e]}import H from"keytar";var M="crossmint-cli";async function v(e,t){return H.setPassword(M,e,t)}async function I(e){return H.getPassword(M,e)}async function S(e){return H.deletePassword(M,e)}function G(e){return v("environment",e)}async function g(){return I("environment")}async function Q(){return S("environment")}function X(e){return v("sessionToken",e)}async function Z(){return I("sessionToken")}async function ee(){return S("sessionToken")}function A(e){return v("projectId",e)}async function h(){return I("projectId")}async function te(){return S("projectId")}import{select as Pe}from"@inquirer/prompts";import{HttpMethods as R}from"@crossmint/common-consts";async function d(e,t=R.GET,r){let o=await Z(),c=await g();o||(console.error("\u274C Session not found, please run crossmint login"),process.exit(1)),c||(console.error("\u274C Environment not found, please run crossmint login"),process.exit(1));let s=`${w(c)}${e}`;return C(s,t,r,{Cookie:`sessionToken=${o}`})}async function oe(e,t=R.GET,r){let o=await g();o||(console.error("\u274C Environment not found"),process.exit(1));let c=`${w(o)}${e}`;return C(c,t,r)}async function C(e,t=R.GET,r,o){let c={method:t,headers:{"Content-Type":"application/json",...o}};r&&(c.body=JSON.stringify(r));let s=await fetch(e,c);if(s.status>=400){let n=await s.json();throw new Error(`${n.message}`)}return await s.json()}import{routes as ge}from"@crossmint/common-consts";import{select as he}from"@inquirer/prompts";import{createSpinner as ue}from"nanospinner";function u(e){let t=ue(e),r={start:o=>(t.start({text:o}),r),succeed:o=>(t.success({text:o}),r),fail:o=>(t.error({text:o}),r)};return r}async function x(){let e=u("Fetching projects...").start();try{let t=await d(ge.api.projects);if(!t||t.length===0)return e.fail("No projects found. Create a new project using `crossmint project create`"),process.exit(0);if(e.succeed("Fetched projects"),t.length===1){let o=t[0];return console.log(`You only have one project: ${o.name}`),console.log("To create another project, run `crossmint project create`"),await A(o.id),console.log(`\u2705 Project ${o.name} selected`),process.exit(0)}let r=await he({message:"Select a project:",choices:t.map(o=>({name:o.name,value:o,description:o.description}))});await A(r.id),console.log(`\u2705 Project ${r.name} selected`),process.exit(0)}catch{e.fail("Failed to fetch projects"),process.exit(1)}}import we from"open";import re from"crypto";async function ne(){let t=re.randomBytes(32).toString("base64url"),o=re.createHash("sha256").update(t).digest().toString("base64url");return await v("pkceCodeVerifier",t),o}async function se(){return await I("pkceCodeVerifier")}import ye from"http";import{HttpMethods as ie}from"@crossmint/common-consts";import{routes as ce}from"@crossmint/common-consts";async function E(){let e=await g();return e||(console.error("\u274C Environment not found"),process.exit(1)),e==="local"?{uri:"test.stytch.com",projectId:"project-test-8eb55d3d-949f-4e0f-aea6-c9ba740f7813",clientId:"connected-app-test-4d27d6d8-3491-45c8-9bb0-b05f89cb7a1a"}:e==="staging"?{uri:"api.stytch.com",projectId:"project-live-b7c564af-0c0d-4662-bfc0-72bed1049cfe",clientId:"connected-app-live-47cd5bf1-c155-42c1-9f36-5d35853b34a7"}:{uri:"api.stytch.com",projectId:"project-live-7a1cb98d-b8b7-4471-aaf6-f8af67a0df94",clientId:"connected-app-live-a72edd7e-6ff3-4002-a13a-e7ca66354bd1"}}async function V(e){return new Promise((t,r)=>{let o=ye.createServer(async(s,n)=>{try{let i=new URL(s.url||"",`http://${s.headers.host}`).searchParams.get("code");if(!i){n.writeHead(400,{"Content-Type":"text/plain"}),n.end("No code provided");return}let y=await E(),f=await C(`https://${y.uri}/v1/public/${y.projectId}/oauth2/token`,ie.POST,{grant_type:"authorization_code",code:i,client_id:y.clientId,redirect_uri:"http://127.0.0.1:3456/callback",code_verifier:await se()}),l=await oe(ce.authentication.exchangeAccessToken,ie.POST,{accessToken:f.access_token});await X(l.sessionToken),n.writeHead(302,{Location:`${w(e)}${ce.console.authorizeDevice.success}`}),n.end(),o.close(),t(f)}catch(m){n.writeHead(500,{"Content-Type":"text/plain"}),n.end("Error during authentication"),o.close(),r(m)}});o.listen(3456)})}import{routes as je}from"@crossmint/common-consts";var ve=!1;async function W(){try{console.log("\u{1F510} Crossmint CLI - Login");let e=await Pe({message:"Select environment:",choices:[{name:"Production",value:"production"},{name:"Staging",value:"staging"},...ve?[{name:"Local",value:"local"}]:[]]}),t=w(e);t||(console.error(`Error: No URL found for ${e} environment`),process.exit(1)),await G(e);let r=V(e),{clientId:o}=await E(),s={code_challenge:await ne(),code_challenge_method:"S256",scope:"full_access",response_type:"code",grant_type:"authorization_code",redirect_uri:"http://127.0.0.1:3456/callback",client_id:o},n=`${t}${je.console.authorizeDevice.index(s)}`;console.log("Opening browser for authentication..."),we(n),await r,console.log(`\u2705 Login successful! You are now authenticated in the ${e} environment.`),await x()}catch{console.error("\u274C Login failed, please try again."),process.exit(1)}}import{routes as xe}from"@crossmint/common-consts";import{routes as Ie}from"@crossmint/common-consts";async function P(e){return(await d(Ie.api.projects)).find(o=>o.id===e)}import{capitalizeFirstLetter as Ae}from"@crossmint/common-string-utils";async function B(){let e=await g(),t=await h(),r=await P(t||""),o=await d(xe.authentication.getSession);console.log(`You are logged in to \u{1F340}Crossmint as: ${o.user.email} - Environment: ${Ae(e)} - ${r?`Project: ${r.name}`:"No project selected"}`),process.exit(0)}async function z(){await ee(),await Q(),await te(),console.log("Logged out"),process.exit(0)}import{confirm as Se,input as Ce}from"@inquirer/prompts";import{HttpMethods as Ee}from"@crossmint/common-consts";import{routes as be}from"@crossmint/common-consts";async function b(e={}){let t=u();try{let r=e.name;r||(r=await Ce({message:"Enter project name:",validate:n=>n.length>0||"Project name is required"})),t.start(`\u{1F680} Creating project "${r}" with Smart Wallets...`);let o=await d(be.api.console.projects.index,Ee.POST,{name:r,walletType:"smart_wallet",storageProvider:"ipfs",projectThumbnail:""}),c=JSON.parse(o);t.succeed(`\u2705 Project created successfully!
3
3
 
4
4
  `),console.log(`\u{1F4CC} Project Details:
5
- Name: ${o}
6
- ID: ${a.kableClientId}
7
- `),await be({message:"Do you want to select this project?"})&&(await E(a._id),console.log(`\u2705Project '${o}' selected`)),process.exit(0)}catch(o){e.fail(`\u274C Failed to create project: ${o instanceof Error?o.message:"Unknown error"}`),process.exit(1)}}n($,"createProject");async function O(){let t=await w();t||(console.error("No project selected. Please select a project first using `crossmint project select`"),process.exit(1));let e=g("Fetching project details...").start();try{let o=await j(t);o||(e.fail("Project not found"),process.exit(1)),e.succeed("Fetched project details"),console.log(`
8
- \u{1F4CC} Project Details:`),console.log(`Name: ${o.name}`),console.log(`ID: ${o.kableClientId}`),console.log(`Wallet Type: ${o.addons.nonCustodialWallets?"Smart":"Custodial"}`),process.exit(0)}catch(o){e.fail("Failed to fetch project details"),console.error("Error:",o instanceof Error?o.message:"Unknown error"),process.exit(1)}}n(O,"showProjectDetails");import{select as le,checkbox as Fe}from"@inquirer/prompts";import{routes as He,HttpMethods as Me}from"@crossmint/common-consts";import{Separator as Te}from"@inquirer/prompts";import{CLIENT_API_KEY_PUBLIC_SCOPES as De,SERVER_API_KEY_PUBLIC_SCOPES as Ue,APIKeyCategoryNames as _e}from"@crossmint/products-console-types";function T(t,e,o,r=[]){let s=(t==="server"?Ue:De).reduce((i,p)=>{let{title:c,description:h,value:f,category:u}=p;return i[u]||(i[u]=[]),Le(p,e,o)||i[u].push({name:`${c} (${f})`,value:f,description:h,checked:r.includes(f)}),i},{});return Object.entries(s).flatMap(([i,p])=>[new Te(_e[i]),...p])}n(T,"getScopeChoices");function Le(t,e,o){return e==="production"&&t.projectPermission!=null&&(o==null?void 0:o.addons)!=null&&!o.addons[t.projectPermission]}n(Le,"isScopeDisabled");import{input as me}from"@inquirer/prompts";function Ne(t){try{return new URL(t),!0}catch{return!1}}n(Ne,"isValidUrl");async function D(t,e){let o=[],r=[],a=e?`
9
- Press [tab] to edit or [enter] to confirm current value`:"";if(t==="web"){let s=await me({default:e==null?void 0:e.join(","),message:`Enter whitelisted domain or localhost (e.g., https://www.yourdomain.com) (separate multiple domains with a comma):${a}`,validate:n(i=>{let p=i.split(",");for(let c of p)if(!Ne(c))return`Invalid domain: ${c}. Please enter a valid URL (e.g., https://www.yourdomain.com)`;return!0},"validate")});o.push(...s.split(",").map(i=>i.trim()))}else if(t==="mobile"){let s=await me({default:e==null?void 0:e.join(","),message:`Enter iOS bundle ID or Android package name (e.g., com.company.appname) (separate multiple domains with a comma):${a}`,validate:n(i=>{let p=i.split(",");for(let c of p)if(c.trim().length===0)return"App identifier cannot be empty";return!0},"validate")});r.push(...s.split(",").map(i=>i.trim()))}return{whitelistedOrigins:o,whitelistedAppIdentifiers:r}}n(D,"getWhitelistedOriginsAndAppIdentifiersPrompt");async function U(){let t=await y(),e=await w();t||(console.error("There is no environment selected, please first run `crossmint login`"),process.exit(1)),e||(console.error("There is no project selected, please first run `crossmint project select`"),process.exit(1));let o=g("Creating key...");try{let r=await le({message:"Select Key Usage:",choices:[{name:"Server side",value:"server"},{name:"Client side",value:"client"}]}),a,s,i;r==="client"&&(a=await le({message:"Select client platform:",choices:[{name:"Web",value:"web"},{name:"Mobile",value:"mobile"}]}),{whitelistedOrigins:s,whitelistedAppIdentifiers:i}=await D(a));let p=await j(e);p||(console.error("\u274C Project not found, please run `crossmint project select`"),process.exit(1));let c=T(r,t,p),h=await Fe({message:`Select scopes for ${r} key:`,choices:c,validate:n(x=>x.length===0?"At least one scope must be selected":!0,"validate")}),f={usageOrigin:r,scopes:h};r==="client"&&(f.whitelistedOrigins=s,f.whitelistedAppIdentifiers=i),o.start();let u=await d(He.api.console.projects.apiKeys(e),Me.POST,f);o.succeed("\u2705 API Key created successfully!"),console.log("Key ID:",u.apiKey._id),console.log("\u{1F512} Key Secret:",u.apiKey.clientSecret),r==="server"&&t==="production"&&console.log("Please save these credentials securely. The key secret will not be shown again."),process.exit(0)}catch(r){o.fail(`\u274C Failed to create key: ${r instanceof Error?r.message:"Unknown error"}`),process.exit(1)}}n(U,"createKey");import{routes as Ve}from"@crossmint/common-consts";import{APIKeyUsageOriginArray as We}from"@crossmint/products-console-types";import{capitalizeFirstLetter as Be}from"@crossmint/common-string-utils";import{spawn as Re}from"child_process";var q=class q{output="";pager;constructor(){this.pager=Re("less",["-R"],{stdio:["pipe","inherit","inherit"]}),this.pager.on("exit",e=>{console.log(this.output),process.exit(e??0)})}add(e){this.output+=e}shouldUsePager(){let e=process.stdout.rows;return this.output.split(`
10
- `).length>e}write(){var e,o;this.shouldUsePager()?((e=this.pager.stdin)==null||e.write(this.output),(o=this.pager.stdin)==null||o.end()):this.pager.kill()}};n(q,"Pager");var _=q;import L from"chalk";async function N(t){let e=await y(),o=await w();o||(console.error("There is no project selected, please first run `crossmint project select`"),process.exit(1)),t&&!We.includes(t)&&(console.error("Invalid key type. Please use 'server' or 'client'."),process.exit(1));let r=g("Fetching API keys...");try{r.start();let a=await d(Ve.api.console.projects.apiKeys(o)),s=t?a.filter(c=>c.usageOrigin===t):a;if(s.length===0)return r.succeed("\u{1F50D} No API keys found for this project. To create a new API key, run `crossmint keys create`"),process.exit(0);r.succeed("\u{1F4CC} List of API Keys:");let i=new _,p=L.bold.magenta("=========");s.forEach((c,h)=>{i.add(`
11
- ${p}
5
+ Name: ${r}
6
+ ID: ${c.kableClientId}
7
+ `),await Se({message:"Do you want to select this project?"})&&(await A(c._id),console.log(`\u2705Project '${r}' selected`)),process.exit(0)}catch(r){t.fail(`\u274C Failed to create project: ${r instanceof Error?r.message:"Unknown error"}`),process.exit(1)}}async function k(){let e=await h();e||(console.error("No project selected. Please select a project first using `crossmint project select`"),process.exit(1));let t=u("Fetching project details...").start();try{let r=await P(e);r||(t.fail("Project not found"),process.exit(1)),t.succeed("Fetched project details"),console.log(`
8
+ \u{1F4CC} Project Details:`),console.log(`Name: ${r.name}`),console.log(`ID: ${r.kableClientId}`),console.log(`Wallet Type: ${r.addons.nonCustodialWallets?"Smart":"Custodial"}`),process.exit(0)}catch(r){t.fail("Failed to fetch project details"),console.error("Error:",r instanceof Error?r.message:"Unknown error"),process.exit(1)}}import{select as pe,checkbox as _e}from"@inquirer/prompts";import{routes as Le,HttpMethods as Ne}from"@crossmint/common-consts";import{Separator as Ke}from"@inquirer/prompts";import{CLIENT_API_KEY_PUBLIC_SCOPES as Oe,SERVER_API_KEY_PUBLIC_SCOPES as $e,APIKeyCategoryNames as Te}from"@crossmint/products-console-types";function K(e,t,r,o=[]){let s=(e==="server"?$e:Oe).reduce((n,m)=>{let{title:i,description:y,value:f,category:l}=m;return n[l]||(n[l]=[]),De(m,t,r)||n[l].push({name:`${i} (${f})`,value:f,description:y,checked:o.includes(f)}),n},{});return Object.entries(s).flatMap(([n,m])=>[new Ke(Te[n]),...m])}function De(e,t,r){return t==="production"&&e.projectPermission!=null&&r?.addons!=null&&!r.addons[e.projectPermission]}import{input as ae}from"@inquirer/prompts";function Ue(e){try{return new URL(e),!0}catch{return!1}}async function O(e,t){let r=[],o=[],c=t?`
9
+ Press [tab] to edit or [enter] to confirm current value`:"";if(e==="web"){let s=await ae({default:t?.join(","),message:`Enter whitelisted domain or localhost (e.g., https://www.yourdomain.com) (separate multiple domains with a comma):${c}`,validate:n=>{let m=n.split(",");for(let i of m)if(!Ue(i))return`Invalid domain: ${i}. Please enter a valid URL (e.g., https://www.yourdomain.com)`;return!0}});r.push(...s.split(",").map(n=>n.trim()))}else if(e==="mobile"){let s=await ae({default:t?.join(","),message:`Enter iOS bundle ID or Android package name (e.g., com.company.appname) (separate multiple domains with a comma):${c}`,validate:n=>{let m=n.split(",");for(let i of m)if(i.trim().length===0)return"App identifier cannot be empty";return!0}});o.push(...s.split(",").map(n=>n.trim()))}return{whitelistedOrigins:r,whitelistedAppIdentifiers:o}}async function $(){let e=await g(),t=await h();e||(console.error("There is no environment selected, please first run `crossmint login`"),process.exit(1)),t||(console.error("There is no project selected, please first run `crossmint project select`"),process.exit(1));let r=u("Creating key...");try{let o=await pe({message:"Select Key Usage:",choices:[{name:"Server side",value:"server"},{name:"Client side",value:"client"}]}),c,s,n;o==="client"&&(c=await pe({message:"Select client platform:",choices:[{name:"Web",value:"web"},{name:"Mobile",value:"mobile"}]}),{whitelistedOrigins:s,whitelistedAppIdentifiers:n}=await O(c));let m=await P(t);m||(console.error("\u274C Project not found, please run `crossmint project select`"),process.exit(1));let i=K(o,e,m),y=await _e({message:`Select scopes for ${o} key:`,choices:i,validate:F=>F.length===0?"At least one scope must be selected":!0}),f={usageOrigin:o,scopes:y};o==="client"&&(f.whitelistedOrigins=s,f.whitelistedAppIdentifiers=n),r.start();let l=await d(Le.api.console.projects.apiKeys(t),Ne.POST,f);r.succeed("\u2705 API Key created successfully!"),console.log("Key ID:",l.apiKey._id),console.log("\u{1F512} Key Secret:",l.apiKey.clientSecret),o==="server"&&e==="production"&&console.log("Please save these credentials securely. The key secret will not be shown again."),process.exit(0)}catch(o){r.fail(`\u274C Failed to create key: ${o instanceof Error?o.message:"Unknown error"}`),process.exit(1)}}import{routes as He}from"@crossmint/common-consts";import{APIKeyUsageOriginArray as Me}from"@crossmint/products-console-types";import{capitalizeFirstLetter as Re}from"@crossmint/common-string-utils";import{spawn as Fe}from"child_process";var T=class{output="";pager;constructor(){this.pager=Fe("less",["-R"],{stdio:["pipe","inherit","inherit"]}),this.pager.on("exit",t=>{console.log(this.output),process.exit(t??0)})}add(t){this.output+=t}shouldUsePager(){let t=process.stdout.rows;return this.output.split(`
10
+ `).length>t}write(){this.shouldUsePager()?(this.pager.stdin?.write(this.output),this.pager.stdin?.end()):this.pager.kill()}};import D from"chalk";async function U(e){let t=await g(),r=await h();r||(console.error("There is no project selected, please first run `crossmint project select`"),process.exit(1)),e&&!Me.includes(e)&&(console.error("Invalid key type. Please use 'server' or 'client'."),process.exit(1));let o=u("Fetching API keys...");try{o.start();let c=await d(He.api.console.projects.apiKeys(r)),s=e?c.filter(i=>i.usageOrigin===e):c;if(s.length===0)return o.succeed("\u{1F50D} No API keys found for this project. To create a new API key, run `crossmint keys create`"),process.exit(0);o.succeed("\u{1F4CC} List of API Keys:");let n=new T,m=D.bold.magenta("=========");s.forEach((i,y)=>{n.add(`
11
+ ${m}
12
12
 
13
- `),i.add(`${L.bold(`${h+1}. Key ID:`)} ${c._id}
14
- `);let f=c.usageOrigin==="server"&&e==="production"?`******************${c.clientSecret.slice(-4)}`:c.clientSecret;i.add(` ${L.bold("Key Secret:")} ${f}
13
+ `),n.add(`${D.bold(`${y+1}. Key ID:`)} ${i._id}
14
+ `);let f=i.usageOrigin==="server"&&t==="production"?`******************${i.clientSecret.slice(-4)}`:i.clientSecret;n.add(` ${D.bold("Key Secret:")} ${f}
15
15
 
16
- `);let u=[["Type",Be(c.usageOrigin)],["Created By",c.createdBy],["Created",c.createdAt?new Date(c.createdAt).toLocaleString():void 0],["Scopes",c.scopes.join(", ")]];c.usageOrigin==="client"&&(c.whitelistedOrigins.length>0&&u.push(["Whitelisted Origins",c.whitelistedOrigins.join(", ")]),c.whitelistedAppIdentifiers&&c.whitelistedAppIdentifiers.length>0&&u.push(["Whitelisted App IDs",c.whitelistedAppIdentifiers.join(", ")])),u.forEach(([x,P])=>{P!==void 0&&i.add(`${L.cyan(x.padEnd(20))} ${P}
17
- `)})}),i.add(`
18
- ${p}`),i.write()}catch(a){r.fail(`\u274C Failed to fetch keys: ${a instanceof Error?a.message:"Unknown error"}`),process.exit(1)}}n(N,"listKeys");import{HttpMethods as ze}from"@crossmint/common-consts";import{routes as Ye}from"@crossmint/common-consts";import{confirm as Je}from"@inquirer/prompts";async function F(t){let e=await w();e||(console.error("There is no project selected, please first run `crossmint project select`"),process.exit(1));let o=g("Deleting API key...");try{await Je({message:"Are you sure you want to delete this API key? This action cannot be undone.",default:!1})||(o.fail("Operation cancelled"),process.exit(0)),o.start(),await d(Ye.api.console.projects.apiKeys(e,t),ze.DELETE),o.succeed("\u2705 API key deleted successfully!")}catch(r){o.fail(`\u274C Failed to delete API key: ${r instanceof Error?r.message:"Unknown error"}`),process.exit(1)}}n(F,"deleteKey");import{HttpMethods as qe,routes as de}from"@crossmint/common-consts";import{checkbox as Ge}from"@inquirer/prompts";async function H(t){var a,s;let e=await y();e||(console.error("There is no environment selected, please first run `crossmint login`"),process.exit(1));let o=await w();o||(console.error("There is no project selected, please first run `crossmint project select`"),process.exit(1));let r=g("Fetching API key...");try{r.start();let p=(await d(de.api.console.projects.apiKeys(o))).find(P=>P._id.toString()===t);p||(r.fail("API key not found"),process.exit(1));let c,h;p.usageOrigin==="client"&&(r.succeed("\u{1F4CC} Current API Key Whitelisted Origins:"),{whitelistedOrigins:c,whitelistedAppIdentifiers:h}=await D(((a=p.whitelistedOrigins)==null?void 0:a.length)>0?"web":"mobile",((s=p.whitelistedOrigins)==null?void 0:s.length)>0?p.whitelistedOrigins:p.whitelistedAppIdentifiers)),r.succeed("\u{1F4CC} Current API Key Scopes:");let f=await j(o);f||(console.error("\u274C Project not found, please run `crossmint project select`"),process.exit(1));let u=T(p.usageOrigin,e,f,p.scopes),x=await Ge({message:`Select scopes for ${p.usageOrigin} key:`,choices:u,validate:n(P=>P.length===0?"At least one scope must be selected":!0,"validate")});if(Qe(p,x)||Xe(p,c,h)){r.start("Updating API key scopes...");let P={apiKeyId:t,...p,scopes:x};p.usageOrigin==="client"&&(P.whitelistedOrigins=c,P.whitelistedAppIdentifiers=h),await d(de.api.console.projects.apiKeys(o),qe.PUT,P)}r.succeed("\u2705 API key scopes updated successfully!")}catch(i){r.fail(`\u274C Failed to update API key: ${i instanceof Error?i.message:"Unknown error"}`),process.exit(1)}}n(H,"editKey");function Qe(t,e){return t.scopes.some(o=>!e.includes(o))||e.some(o=>!t.scopes.includes(o))}n(Qe,"scopesChanged");function Xe(t,e,o){var r,a;return t.usageOrigin==="client"&&(((r=t.whitelistedOrigins)==null?void 0:r.some(s=>!(e!=null&&e.includes(s))))||(e==null?void 0:e.some(s=>{var i;return!((i=t.whitelistedOrigins)!=null&&i.includes(s))}))||((a=t.whitelistedAppIdentifiers)==null?void 0:a.some(s=>!(o!=null&&o.includes(s))))||(o==null?void 0:o.some(s=>{var i;return!((i=t.whitelistedAppIdentifiers)!=null&&i.includes(s))})))}n(Xe,"originsChanged");I.name("crossmint").description("Crossmint CLI Tool").version(fe().version);var M=I.command("keys").description("API Keys management commands");M.command("create").description("Create a new API Key").action(U);M.command("delete <key-id>").description("Delete an API Key").action(F);M.command("edit <key-id>").description("Edit the scopes of an API Key").action(H);M.command("list [type]").description("List all API Keys (optionally filter by type: server|client)").action(N);I.command("login").description("Login to Crossmint").action(z);I.command("logout").description("Logout from Crossmint").action(J);var G=I.command("projects").description("Project management commands");G.command("create").description("Create a new project").action($).option("-n, --name <name>","Project name");G.command("details").description("Show project details").action(O);G.command("select").description("Select a project").action(A);I.command("whoami").description("Show current user and environment").action(Y);I.parse(process.argv);
16
+ `);let l=[["Type",Re(i.usageOrigin)],["Created By",i.createdBy],["Created",i.createdAt?new Date(i.createdAt).toLocaleString():void 0],["Scopes",i.scopes.join(", ")]];i.usageOrigin==="client"&&(i.whitelistedOrigins.length>0&&l.push(["Whitelisted Origins",i.whitelistedOrigins.join(", ")]),i.whitelistedAppIdentifiers&&i.whitelistedAppIdentifiers.length>0&&l.push(["Whitelisted App IDs",i.whitelistedAppIdentifiers.join(", ")])),l.forEach(([F,J])=>{J!==void 0&&n.add(`${D.cyan(F.padEnd(20))} ${J}
17
+ `)})}),n.add(`
18
+ ${m}`),n.write()}catch(c){o.fail(`\u274C Failed to fetch keys: ${c instanceof Error?c.message:"Unknown error"}`),process.exit(1)}}import{HttpMethods as Ve}from"@crossmint/common-consts";import{routes as We}from"@crossmint/common-consts";import{confirm as Be}from"@inquirer/prompts";async function _(e){let t=await h();t||(console.error("There is no project selected, please first run `crossmint project select`"),process.exit(1));let r=u("Deleting API key...");try{await Be({message:"Are you sure you want to delete this API key? This action cannot be undone.",default:!1})||(r.fail("Operation cancelled"),process.exit(0)),r.start(),await d(We.api.console.projects.apiKeys(t,e),Ve.DELETE),r.succeed("\u2705 API key deleted successfully!")}catch(o){r.fail(`\u274C Failed to delete API key: ${o instanceof Error?o.message:"Unknown error"}`),process.exit(1)}}import{HttpMethods as ze,routes as me}from"@crossmint/common-consts";import{checkbox as Ye}from"@inquirer/prompts";async function L(e){let t=await g();t||(console.error("There is no environment selected, please first run `crossmint login`"),process.exit(1));let r=await h();r||(console.error("There is no project selected, please first run `crossmint project select`"),process.exit(1));let o=u("Fetching API key...");try{o.start();let s=(await d(me.api.console.projects.apiKeys(r))).find(l=>l._id.toString()===e);s||(o.fail("API key not found"),process.exit(1));let n,m;s.usageOrigin==="client"&&(o.succeed("\u{1F4CC} Current API Key Whitelisted Origins:"),{whitelistedOrigins:n,whitelistedAppIdentifiers:m}=await O(s.whitelistedOrigins?.length>0?"web":"mobile",s.whitelistedOrigins?.length>0?s.whitelistedOrigins:s.whitelistedAppIdentifiers)),o.succeed("\u{1F4CC} Current API Key Scopes:");let i=await P(r);i||(console.error("\u274C Project not found, please run `crossmint project select`"),process.exit(1));let y=K(s.usageOrigin,t,i,s.scopes),f=await Ye({message:`Select scopes for ${s.usageOrigin} key:`,choices:y,validate:l=>l.length===0?"At least one scope must be selected":!0});if(Je(s,f)||qe(s,n,m)){o.start("Updating API key scopes...");let l={apiKeyId:e,...s,scopes:f};s.usageOrigin==="client"&&(l.whitelistedOrigins=n,l.whitelistedAppIdentifiers=m),await d(me.api.console.projects.apiKeys(r),ze.PUT,l)}o.succeed("\u2705 API key scopes updated successfully!")}catch(c){o.fail(`\u274C Failed to update API key: ${c instanceof Error?c.message:"Unknown error"}`),process.exit(1)}}function Je(e,t){return e.scopes.some(r=>!t.includes(r))||t.some(r=>!e.scopes.includes(r))}function qe(e,t,r){return e.usageOrigin==="client"&&(e.whitelistedOrigins?.some(o=>!t?.includes(o))||t?.some(o=>!e.whitelistedOrigins?.includes(o))||e.whitelistedAppIdentifiers?.some(o=>!r?.includes(o))||r?.some(o=>!e.whitelistedAppIdentifiers?.includes(o)))}j.name("crossmint").description("Crossmint CLI Tool").version(le().version);var N=j.command("keys").description("API Keys management commands");N.command("create").description("Create a new API Key").action($);N.command("delete <key-id>").description("Delete an API Key").action(_);N.command("edit <key-id>").description("Edit the scopes of an API Key").action(L);N.command("list [type]").description("List all API Keys (optionally filter by type: server|client)").action(U);j.command("login").description("Login to Crossmint").action(W);j.command("logout").description("Logout from Crossmint").action(z);var Y=j.command("projects").description("Project management commands");Y.command("create").description("Create a new project").action(b).option("-n, --name <name>","Project name");Y.command("details").description("Show project details").action(k);Y.command("select").description("Select a project").action(x);j.command("whoami").description("Show current user and environment").action(B);j.parse(process.argv);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crossmint/cli",
3
- "version": "1.1.4",
3
+ "version": "1.1.6",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "license": "ISC",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crossmint/cli",
3
- "version": "1.1.4",
3
+ "version": "1.1.6",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "license": "ISC",
package/tsup.config.ts CHANGED
@@ -1,11 +1,24 @@
1
- import { treeShakableConfig } from "@crossmint/tsupconfig";
1
+ import type { Options } from "tsup";
2
2
 
3
3
  export default {
4
- ...treeShakableConfig,
4
+ entry: ["src/bin/crossmint.ts"],
5
+ format: ["esm"],
6
+ target: "node18",
7
+ platform: "node",
8
+ bundle: true,
9
+ minify: true,
10
+ clean: true,
11
+ splitting: false,
5
12
  skipNodeModulesBundle: false,
13
+ external: [
14
+ "keytar", // Native modules
15
+ ],
16
+ esbuild: {
17
+ packages: "bundle", // Bundle all packages except those in external
18
+ },
6
19
  define: {
7
20
  "process.env.NODE_ENV": JSON.stringify(process.env.NODE_ENV),
8
21
  },
9
- external: ["keytar"],
10
- splitting: false,
11
- };
22
+ outDir: "dist/bin",
23
+ shims: true,
24
+ } satisfies Options;
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=crossmint.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"crossmint.d.ts","sourceRoot":"","sources":["../../src/bin/crossmint.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export default function createKey(): Promise<void>;
2
- //# sourceMappingURL=create.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/keys/create.ts"],"names":[],"mappings":"AAYA,wBAA8B,SAAS,kBAmFtC"}
@@ -1,2 +0,0 @@
1
- var k=Object.defineProperty;var e=(t,r)=>k(t,"name",{value:r,configurable:!0});import{select as C,checkbox as V}from"@inquirer/prompts";import{routes as G,HttpMethods as W}from"@crossmint/common-consts";import{Separator as T}from"@inquirer/prompts";import{CLIENT_API_KEY_PUBLIC_SCOPES as O,SERVER_API_KEY_PUBLIC_SCOPES as U,APIKeyCategoryNames as b}from"@crossmint/products-console-types";function h(t,r,n,o=[]){let s=(t==="server"?U:O).reduce((i,a)=>{let{title:p,description:P,value:f,category:d}=a;return i[d]||(i[d]=[]),$(a,r,n)||i[d].push({name:`${p} (${f})`,value:f,description:P,checked:o.includes(f)}),i},{});return Object.entries(s).flatMap(([i,a])=>[new T(b[i]),...a])}e(h,"getScopeChoices");function $(t,r,n){return r==="production"&&t.projectPermission!=null&&(n==null?void 0:n.addons)!=null&&!n.addons[t.projectPermission]}e($,"isScopeDisabled");import{HttpMethods as v}from"@crossmint/common-consts";import D from"keytar";var _="crossmint-cli";async function u(t){return D.getPassword(_,t)}e(u,"get");async function g(){return u("environment")}e(g,"getEnvironment");async function w(){return u("sessionToken")}e(w,"getSessionToken");async function I(){return u("projectId")}e(I,"getProjectId");var N={production:"https://www.crossmint.com",staging:"https://staging.crossmint.com",local:"http://localhost:3000"};function S(t){return N[t]}e(S,"getCrossmintUrl");async function y(t,r=v.GET,n){let o=await w(),c=await g();o||(console.error("\u274C Session not found, please run crossmint login"),process.exit(1)),c||(console.error("\u274C Environment not found, please run crossmint login"),process.exit(1));let s=`${S(c)}${t}`;return R(s,r,n,{Cookie:`sessionToken=${o}`})}e(y,"fetchAuthenticated");async function R(t,r=v.GET,n,o){let c={method:r,headers:{"Content-Type":"application/json",...o}};n&&(c.body=JSON.stringify(n));let s=await fetch(t,c);if(s.status>=400){let i=await s.json();throw new Error(`${i.message}`)}return await s.json()}e(R,"fetchJSON");import{createSpinner as B}from"nanospinner";function A(t){let r=B(t),n={start:e(o=>(r.start({text:o}),n),"start"),succeed:e(o=>(r.success({text:o}),n),"succeed"),fail:e(o=>(r.error({text:o}),n),"fail")};return n}e(A,"createSpinner");import{routes as H}from"@crossmint/common-consts";async function x(t){return(await y(H.api.projects)).find(o=>o.id===t)}e(x,"getProject");import{input as E}from"@inquirer/prompts";function L(t){try{return new URL(t),!0}catch{return!1}}e(L,"isValidUrl");async function j(t,r){let n=[],o=[],c=r?`
2
- Press [tab] to edit or [enter] to confirm current value`:"";if(t==="web"){let s=await E({default:r==null?void 0:r.join(","),message:`Enter whitelisted domain or localhost (e.g., https://www.yourdomain.com) (separate multiple domains with a comma):${c}`,validate:e(i=>{let a=i.split(",");for(let p of a)if(!L(p))return`Invalid domain: ${p}. Please enter a valid URL (e.g., https://www.yourdomain.com)`;return!0},"validate")});n.push(...s.split(",").map(i=>i.trim()))}else if(t==="mobile"){let s=await E({default:r==null?void 0:r.join(","),message:`Enter iOS bundle ID or Android package name (e.g., com.company.appname) (separate multiple domains with a comma):${c}`,validate:e(i=>{let a=i.split(",");for(let p of a)if(p.trim().length===0)return"App identifier cannot be empty";return!0},"validate")});o.push(...s.split(",").map(i=>i.trim()))}return{whitelistedOrigins:n,whitelistedAppIdentifiers:o}}e(j,"getWhitelistedOriginsAndAppIdentifiersPrompt");async function J(){let t=await g(),r=await I();t||(console.error("There is no environment selected, please first run `crossmint login`"),process.exit(1)),r||(console.error("There is no project selected, please first run `crossmint project select`"),process.exit(1));let n=A("Creating key...");try{let o=await C({message:"Select Key Usage:",choices:[{name:"Server side",value:"server"},{name:"Client side",value:"client"}]}),c,s,i;o==="client"&&(c=await C({message:"Select client platform:",choices:[{name:"Web",value:"web"},{name:"Mobile",value:"mobile"}]}),{whitelistedOrigins:s,whitelistedAppIdentifiers:i}=await j(c));let a=await x(r);a||(console.error("\u274C Project not found, please run `crossmint project select`"),process.exit(1));let p=h(o,t,a),P=await V({message:`Select scopes for ${o} key:`,choices:p,validate:e(K=>K.length===0?"At least one scope must be selected":!0,"validate")}),f={usageOrigin:o,scopes:P};o==="client"&&(f.whitelistedOrigins=s,f.whitelistedAppIdentifiers=i),n.start();let d=await y(G.api.console.projects.apiKeys(r),W.POST,f);n.succeed("\u2705 API Key created successfully!"),console.log("Key ID:",d.apiKey._id),console.log("\u{1F512} Key Secret:",d.apiKey.clientSecret),o==="server"&&t==="production"&&console.log("Please save these credentials securely. The key secret will not be shown again."),process.exit(0)}catch(o){n.fail(`\u274C Failed to create key: ${o instanceof Error?o.message:"Unknown error"}`),process.exit(1)}}e(J,"createKey");export{J as default};
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=create.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create.test.d.ts","sourceRoot":"","sources":["../../../src/commands/keys/create.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export default function deleteKey(keyId: string): Promise<void>;
2
- //# sourceMappingURL=delete.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/keys/delete.ts"],"names":[],"mappings":"AAOA,wBAA8B,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BpE"}
@@ -1 +0,0 @@
1
- var E=Object.defineProperty;var t=(r,o)=>E(r,"name",{value:o,configurable:!0});import{HttpMethods as j}from"@crossmint/common-consts";import{routes as I}from"@crossmint/common-consts";import{HttpMethods as g}from"@crossmint/common-consts";import h from"keytar";var v="crossmint-cli";async function p(r){return h.getPassword(v,r)}t(p,"get");async function u(){return p("environment")}t(u,"getEnvironment");async function m(){return p("sessionToken")}t(m,"getSessionToken");async function f(){return p("projectId")}t(f,"getProjectId");var k={production:"https://www.crossmint.com",staging:"https://staging.crossmint.com",local:"http://localhost:3000"};function l(r){return k[r]}t(l,"getCrossmintUrl");async function d(r,o=g.GET,e){let n=await m(),s=await u();n||(console.error("\u274C Session not found, please run crossmint login"),process.exit(1)),s||(console.error("\u274C Environment not found, please run crossmint login"),process.exit(1));let i=`${l(s)}${r}`;return T(i,o,e,{Cookie:`sessionToken=${n}`})}t(d,"fetchAuthenticated");async function T(r,o=g.GET,e,n){let s={method:o,headers:{"Content-Type":"application/json",...n}};e&&(s.body=JSON.stringify(e));let i=await fetch(r,s);if(i.status>=400){let x=await i.json();throw new Error(`${x.message}`)}return await i.json()}t(T,"fetchJSON");import{confirm as S}from"@inquirer/prompts";import{createSpinner as P}from"nanospinner";function y(r){let o=P(r),e={start:t(n=>(o.start({text:n}),e),"start"),succeed:t(n=>(o.success({text:n}),e),"succeed"),fail:t(n=>(o.error({text:n}),e),"fail")};return e}t(y,"createSpinner");async function A(r){let o=await f();o||(console.error("There is no project selected, please first run `crossmint project select`"),process.exit(1));let e=y("Deleting API key...");try{await S({message:"Are you sure you want to delete this API key? This action cannot be undone.",default:!1})||(e.fail("Operation cancelled"),process.exit(0)),e.start(),await d(I.api.console.projects.apiKeys(o,r),j.DELETE),e.succeed("\u2705 API key deleted successfully!")}catch(n){e.fail(`\u274C Failed to delete API key: ${n instanceof Error?n.message:"Unknown error"}`),process.exit(1)}}t(A,"deleteKey");export{A as default};
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=delete.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"delete.test.d.ts","sourceRoot":"","sources":["../../../src/commands/keys/delete.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export default function editKey(keyId: string): Promise<void>;
2
- //# sourceMappingURL=edit.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../../src/commands/keys/edit.ts"],"names":[],"mappings":"AAWA,wBAA8B,OAAO,CAAC,KAAK,EAAE,MAAM,iBAqElD"}
@@ -1,2 +0,0 @@
1
- var T=Object.defineProperty;var n=(o,e)=>T(o,"name",{value:e,configurable:!0});import{HttpMethods as G,routes as k}from"@crossmint/common-consts";import{HttpMethods as x}from"@crossmint/common-consts";import O from"keytar";var D="crossmint-cli";async function P(o){return O.getPassword(D,o)}n(P,"get");async function h(){return P("environment")}n(h,"getEnvironment");async function I(){return P("sessionToken")}n(I,"getSessionToken");async function S(){return P("projectId")}n(S,"getProjectId");var $={production:"https://www.crossmint.com",staging:"https://staging.crossmint.com",local:"http://localhost:3000"};function A(o){return $[o]}n(A,"getCrossmintUrl");async function y(o,e=x.GET,t){let r=await I(),a=await h();r||(console.error("\u274C Session not found, please run crossmint login"),process.exit(1)),a||(console.error("\u274C Environment not found, please run crossmint login"),process.exit(1));let s=`${A(a)}${o}`;return b(s,e,t,{Cookie:`sessionToken=${r}`})}n(y,"fetchAuthenticated");async function b(o,e=x.GET,t,r){let a={method:e,headers:{"Content-Type":"application/json",...r}};t&&(a.body=JSON.stringify(t));let s=await fetch(o,a);if(s.status>=400){let i=await s.json();throw new Error(`${i.message}`)}return await s.json()}n(b,"fetchJSON");import{Separator as _}from"@inquirer/prompts";import{CLIENT_API_KEY_PUBLIC_SCOPES as M,SERVER_API_KEY_PUBLIC_SCOPES as N,APIKeyCategoryNames as R}from"@crossmint/products-console-types";function E(o,e,t,r=[]){let s=(o==="server"?N:M).reduce((i,c)=>{let{title:p,description:g,value:f,category:d}=c;return i[d]||(i[d]=[]),B(c,e,t)||i[d].push({name:`${p} (${f})`,value:f,description:g,checked:r.includes(f)}),i},{});return Object.entries(s).flatMap(([i,c])=>[new _(R[i]),...c])}n(E,"getScopeChoices");function B(o,e,t){return e==="production"&&o.projectPermission!=null&&(t==null?void 0:t.addons)!=null&&!t.addons[o.projectPermission]}n(B,"isScopeDisabled");import{checkbox as W}from"@inquirer/prompts";import{createSpinner as H}from"nanospinner";function j(o){let e=H(o),t={start:n(r=>(e.start({text:r}),t),"start"),succeed:n(r=>(e.success({text:r}),t),"succeed"),fail:n(r=>(e.error({text:r}),t),"fail")};return t}n(j,"createSpinner");import{routes as L}from"@crossmint/common-consts";async function v(o){return(await y(L.api.projects)).find(r=>r.id===o)}n(v,"getProject");import{input as K}from"@inquirer/prompts";function V(o){try{return new URL(o),!0}catch{return!1}}n(V,"isValidUrl");async function C(o,e){let t=[],r=[],a=e?`
2
- Press [tab] to edit or [enter] to confirm current value`:"";if(o==="web"){let s=await K({default:e==null?void 0:e.join(","),message:`Enter whitelisted domain or localhost (e.g., https://www.yourdomain.com) (separate multiple domains with a comma):${a}`,validate:n(i=>{let c=i.split(",");for(let p of c)if(!V(p))return`Invalid domain: ${p}. Please enter a valid URL (e.g., https://www.yourdomain.com)`;return!0},"validate")});t.push(...s.split(",").map(i=>i.trim()))}else if(o==="mobile"){let s=await K({default:e==null?void 0:e.join(","),message:`Enter iOS bundle ID or Android package name (e.g., com.company.appname) (separate multiple domains with a comma):${a}`,validate:n(i=>{let c=i.split(",");for(let p of c)if(p.trim().length===0)return"App identifier cannot be empty";return!0},"validate")});r.push(...s.split(",").map(i=>i.trim()))}return{whitelistedOrigins:t,whitelistedAppIdentifiers:r}}n(C,"getWhitelistedOriginsAndAppIdentifiersPrompt");async function F(o){var a,s;let e=await h();e||(console.error("There is no environment selected, please first run `crossmint login`"),process.exit(1));let t=await S();t||(console.error("There is no project selected, please first run `crossmint project select`"),process.exit(1));let r=j("Fetching API key...");try{r.start();let c=(await y(k.api.console.projects.apiKeys(t))).find(l=>l._id.toString()===o);c||(r.fail("API key not found"),process.exit(1));let p,g;c.usageOrigin==="client"&&(r.succeed("\u{1F4CC} Current API Key Whitelisted Origins:"),{whitelistedOrigins:p,whitelistedAppIdentifiers:g}=await C(((a=c.whitelistedOrigins)==null?void 0:a.length)>0?"web":"mobile",((s=c.whitelistedOrigins)==null?void 0:s.length)>0?c.whitelistedOrigins:c.whitelistedAppIdentifiers)),r.succeed("\u{1F4CC} Current API Key Scopes:");let f=await v(t);f||(console.error("\u274C Project not found, please run `crossmint project select`"),process.exit(1));let d=E(c.usageOrigin,e,f,c.scopes),w=await W({message:`Select scopes for ${c.usageOrigin} key:`,choices:d,validate:n(l=>l.length===0?"At least one scope must be selected":!0,"validate")});if(J(c,w)||Y(c,p,g)){r.start("Updating API key scopes...");let l={apiKeyId:o,...c,scopes:w};c.usageOrigin==="client"&&(l.whitelistedOrigins=p,l.whitelistedAppIdentifiers=g),await y(k.api.console.projects.apiKeys(t),G.PUT,l)}r.succeed("\u2705 API key scopes updated successfully!")}catch(i){r.fail(`\u274C Failed to update API key: ${i instanceof Error?i.message:"Unknown error"}`),process.exit(1)}}n(F,"editKey");function J(o,e){return o.scopes.some(t=>!e.includes(t))||e.some(t=>!o.scopes.includes(t))}n(J,"scopesChanged");function Y(o,e,t){var r,a;return o.usageOrigin==="client"&&(((r=o.whitelistedOrigins)==null?void 0:r.some(s=>!(e!=null&&e.includes(s))))||(e==null?void 0:e.some(s=>{var i;return!((i=o.whitelistedOrigins)!=null&&i.includes(s))}))||((a=o.whitelistedAppIdentifiers)==null?void 0:a.some(s=>!(t!=null&&t.includes(s))))||(t==null?void 0:t.some(s=>{var i;return!((i=o.whitelistedAppIdentifiers)!=null&&i.includes(s))})))}n(Y,"originsChanged");export{F as default};
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=edit.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"edit.test.d.ts","sourceRoot":"","sources":["../../../src/commands/keys/edit.test.ts"],"names":[],"mappings":""}
@@ -1,5 +0,0 @@
1
- export { default as create } from "./create";
2
- export { default as list } from "./list";
3
- export { default as delete } from "./delete";
4
- export { default as edit } from "./edit";
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/keys/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC"}
@@ -1,11 +0,0 @@
1
- var L=Object.defineProperty;var n=(o,e)=>L(o,"name",{value:e,configurable:!0});import{select as T,checkbox as X}from"@inquirer/prompts";import{routes as Z,HttpMethods as ee}from"@crossmint/common-consts";import{Separator as R}from"@inquirer/prompts";import{CLIENT_API_KEY_PUBLIC_SCOPES as N,SERVER_API_KEY_PUBLIC_SCOPES as B,APIKeyCategoryNames as H}from"@crossmint/products-console-types";function A(o,e,t,r=[]){let c=(o==="server"?B:N).reduce((i,a)=>{let{title:s,description:h,value:d,category:f}=a;return i[f]||(i[f]=[]),F(a,e,t)||i[f].push({name:`${s} (${d})`,value:d,description:h,checked:r.includes(d)}),i},{});return Object.entries(c).flatMap(([i,a])=>[new R(H[i]),...a])}n(A,"getScopeChoices");function F(o,e,t){return e==="production"&&o.projectPermission!=null&&(t==null?void 0:t.addons)!=null&&!t.addons[o.projectPermission]}n(F,"isScopeDisabled");import{HttpMethods as $}from"@crossmint/common-consts";import W from"keytar";var V="crossmint-cli";async function S(o){return W.getPassword(V,o)}n(S,"get");async function y(){return S("environment")}n(y,"getEnvironment");async function C(){return S("sessionToken")}n(C,"getSessionToken");async function P(){return S("projectId")}n(P,"getProjectId");var J={production:"https://www.crossmint.com",staging:"https://staging.crossmint.com",local:"http://localhost:3000"};function O(o){return J[o]}n(O,"getCrossmintUrl");async function u(o,e=$.GET,t){let r=await C(),p=await y();r||(console.error("\u274C Session not found, please run crossmint login"),process.exit(1)),p||(console.error("\u274C Environment not found, please run crossmint login"),process.exit(1));let c=`${O(p)}${o}`;return Y(c,e,t,{Cookie:`sessionToken=${r}`})}n(u,"fetchAuthenticated");async function Y(o,e=$.GET,t,r){let p={method:e,headers:{"Content-Type":"application/json",...r}};t&&(p.body=JSON.stringify(t));let c=await fetch(o,p);if(c.status>=400){let i=await c.json();throw new Error(`${i.message}`)}return await c.json()}n(Y,"fetchJSON");import{createSpinner as q}from"nanospinner";function w(o){let e=q(o),t={start:n(r=>(e.start({text:r}),t),"start"),succeed:n(r=>(e.success({text:r}),t),"succeed"),fail:n(r=>(e.error({text:r}),t),"fail")};return t}n(w,"createSpinner");import{routes as z}from"@crossmint/common-consts";async function x(o){return(await u(z.api.projects)).find(r=>r.id===o)}n(x,"getProject");import{input as k}from"@inquirer/prompts";function Q(o){try{return new URL(o),!0}catch{return!1}}n(Q,"isValidUrl");async function K(o,e){let t=[],r=[],p=e?`
2
- Press [tab] to edit or [enter] to confirm current value`:"";if(o==="web"){let c=await k({default:e==null?void 0:e.join(","),message:`Enter whitelisted domain or localhost (e.g., https://www.yourdomain.com) (separate multiple domains with a comma):${p}`,validate:n(i=>{let a=i.split(",");for(let s of a)if(!Q(s))return`Invalid domain: ${s}. Please enter a valid URL (e.g., https://www.yourdomain.com)`;return!0},"validate")});t.push(...c.split(",").map(i=>i.trim()))}else if(o==="mobile"){let c=await k({default:e==null?void 0:e.join(","),message:`Enter iOS bundle ID or Android package name (e.g., com.company.appname) (separate multiple domains with a comma):${p}`,validate:n(i=>{let a=i.split(",");for(let s of a)if(s.trim().length===0)return"App identifier cannot be empty";return!0},"validate")});r.push(...c.split(",").map(i=>i.trim()))}return{whitelistedOrigins:t,whitelistedAppIdentifiers:r}}n(K,"getWhitelistedOriginsAndAppIdentifiersPrompt");async function U(){let o=await y(),e=await P();o||(console.error("There is no environment selected, please first run `crossmint login`"),process.exit(1)),e||(console.error("There is no project selected, please first run `crossmint project select`"),process.exit(1));let t=w("Creating key...");try{let r=await T({message:"Select Key Usage:",choices:[{name:"Server side",value:"server"},{name:"Client side",value:"client"}]}),p,c,i;r==="client"&&(p=await T({message:"Select client platform:",choices:[{name:"Web",value:"web"},{name:"Mobile",value:"mobile"}]}),{whitelistedOrigins:c,whitelistedAppIdentifiers:i}=await K(p));let a=await x(e);a||(console.error("\u274C Project not found, please run `crossmint project select`"),process.exit(1));let s=A(r,o,a),h=await X({message:`Select scopes for ${r} key:`,choices:s,validate:n(I=>I.length===0?"At least one scope must be selected":!0,"validate")}),d={usageOrigin:r,scopes:h};r==="client"&&(d.whitelistedOrigins=c,d.whitelistedAppIdentifiers=i),t.start();let f=await u(Z.api.console.projects.apiKeys(e),ee.POST,d);t.succeed("\u2705 API Key created successfully!"),console.log("Key ID:",f.apiKey._id),console.log("\u{1F512} Key Secret:",f.apiKey.clientSecret),r==="server"&&o==="production"&&console.log("Please save these credentials securely. The key secret will not be shown again."),process.exit(0)}catch(r){t.fail(`\u274C Failed to create key: ${r instanceof Error?r.message:"Unknown error"}`),process.exit(1)}}n(U,"createKey");import{routes as re}from"@crossmint/common-consts";import{APIKeyUsageOriginArray as oe}from"@crossmint/products-console-types";import{capitalizeFirstLetter as ne}from"@crossmint/common-string-utils";import{spawn as te}from"child_process";var E=class E{output="";pager;constructor(){this.pager=te("less",["-R"],{stdio:["pipe","inherit","inherit"]}),this.pager.on("exit",e=>{console.log(this.output),process.exit(e??0)})}add(e){this.output+=e}shouldUsePager(){let e=process.stdout.rows;return this.output.split(`
3
- `).length>e}write(){var e,t;this.shouldUsePager()?((e=this.pager.stdin)==null||e.write(this.output),(t=this.pager.stdin)==null||t.end()):this.pager.kill()}};n(E,"Pager");var j=E;import v from"chalk";async function b(o){let e=await y(),t=await P();t||(console.error("There is no project selected, please first run `crossmint project select`"),process.exit(1)),o&&!oe.includes(o)&&(console.error("Invalid key type. Please use 'server' or 'client'."),process.exit(1));let r=w("Fetching API keys...");try{r.start();let p=await u(re.api.console.projects.apiKeys(t)),c=o?p.filter(s=>s.usageOrigin===o):p;if(c.length===0)return r.succeed("\u{1F50D} No API keys found for this project. To create a new API key, run `crossmint keys create`"),process.exit(0);r.succeed("\u{1F4CC} List of API Keys:");let i=new j,a=v.bold.magenta("=========");c.forEach((s,h)=>{i.add(`
4
- ${a}
5
-
6
- `),i.add(`${v.bold(`${h+1}. Key ID:`)} ${s._id}
7
- `);let d=s.usageOrigin==="server"&&e==="production"?`******************${s.clientSecret.slice(-4)}`:s.clientSecret;i.add(` ${v.bold("Key Secret:")} ${d}
8
-
9
- `);let f=[["Type",ne(s.usageOrigin)],["Created By",s.createdBy],["Created",s.createdAt?new Date(s.createdAt).toLocaleString():void 0],["Scopes",s.scopes.join(", ")]];s.usageOrigin==="client"&&(s.whitelistedOrigins.length>0&&f.push(["Whitelisted Origins",s.whitelistedOrigins.join(", ")]),s.whitelistedAppIdentifiers&&s.whitelistedAppIdentifiers.length>0&&f.push(["Whitelisted App IDs",s.whitelistedAppIdentifiers.join(", ")])),f.forEach(([I,g])=>{g!==void 0&&i.add(`${v.cyan(I.padEnd(20))} ${g}
10
- `)})}),i.add(`
11
- ${a}`),i.write()}catch(p){r.fail(`\u274C Failed to fetch keys: ${p instanceof Error?p.message:"Unknown error"}`),process.exit(1)}}n(b,"listKeys");import{HttpMethods as ie}from"@crossmint/common-consts";import{routes as se}from"@crossmint/common-consts";import{confirm as ce}from"@inquirer/prompts";async function D(o){let e=await P();e||(console.error("There is no project selected, please first run `crossmint project select`"),process.exit(1));let t=w("Deleting API key...");try{await ce({message:"Are you sure you want to delete this API key? This action cannot be undone.",default:!1})||(t.fail("Operation cancelled"),process.exit(0)),t.start(),await u(se.api.console.projects.apiKeys(e,o),ie.DELETE),t.succeed("\u2705 API key deleted successfully!")}catch(r){t.fail(`\u274C Failed to delete API key: ${r instanceof Error?r.message:"Unknown error"}`),process.exit(1)}}n(D,"deleteKey");import{HttpMethods as ae,routes as M}from"@crossmint/common-consts";import{checkbox as pe}from"@inquirer/prompts";async function _(o){var p,c;let e=await y();e||(console.error("There is no environment selected, please first run `crossmint login`"),process.exit(1));let t=await P();t||(console.error("There is no project selected, please first run `crossmint project select`"),process.exit(1));let r=w("Fetching API key...");try{r.start();let a=(await u(M.api.console.projects.apiKeys(t))).find(g=>g._id.toString()===o);a||(r.fail("API key not found"),process.exit(1));let s,h;a.usageOrigin==="client"&&(r.succeed("\u{1F4CC} Current API Key Whitelisted Origins:"),{whitelistedOrigins:s,whitelistedAppIdentifiers:h}=await K(((p=a.whitelistedOrigins)==null?void 0:p.length)>0?"web":"mobile",((c=a.whitelistedOrigins)==null?void 0:c.length)>0?a.whitelistedOrigins:a.whitelistedAppIdentifiers)),r.succeed("\u{1F4CC} Current API Key Scopes:");let d=await x(t);d||(console.error("\u274C Project not found, please run `crossmint project select`"),process.exit(1));let f=A(a.usageOrigin,e,d,a.scopes),I=await pe({message:`Select scopes for ${a.usageOrigin} key:`,choices:f,validate:n(g=>g.length===0?"At least one scope must be selected":!0,"validate")});if(le(a,I)||me(a,s,h)){r.start("Updating API key scopes...");let g={apiKeyId:o,...a,scopes:I};a.usageOrigin==="client"&&(g.whitelistedOrigins=s,g.whitelistedAppIdentifiers=h),await u(M.api.console.projects.apiKeys(t),ae.PUT,g)}r.succeed("\u2705 API key scopes updated successfully!")}catch(i){r.fail(`\u274C Failed to update API key: ${i instanceof Error?i.message:"Unknown error"}`),process.exit(1)}}n(_,"editKey");function le(o,e){return o.scopes.some(t=>!e.includes(t))||e.some(t=>!o.scopes.includes(t))}n(le,"scopesChanged");function me(o,e,t){var r,p;return o.usageOrigin==="client"&&(((r=o.whitelistedOrigins)==null?void 0:r.some(c=>!(e!=null&&e.includes(c))))||(e==null?void 0:e.some(c=>{var i;return!((i=o.whitelistedOrigins)!=null&&i.includes(c))}))||((p=o.whitelistedAppIdentifiers)==null?void 0:p.some(c=>!(t!=null&&t.includes(c))))||(t==null?void 0:t.some(c=>{var i;return!((i=o.whitelistedAppIdentifiers)!=null&&i.includes(c))})))}n(me,"originsChanged");export{U as create,D as delete,_ as edit,b as list};
@@ -1,3 +0,0 @@
1
- import { APIKeyUsageOrigin } from "@crossmint/products-console-types";
2
- export default function listKeys(keyType?: APIKeyUsageOrigin): Promise<undefined>;
3
- //# sourceMappingURL=list.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/keys/list.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAA0C,MAAM,mCAAmC,CAAC;AAM9G,wBAA8B,QAAQ,CAAC,OAAO,CAAC,EAAE,iBAAiB,sBAyEjE"}
@@ -1,10 +0,0 @@
1
- var T=Object.defineProperty;var e=(r,t)=>T(r,"name",{value:t,configurable:!0});import{routes as H}from"@crossmint/common-consts";import{HttpMethods as I}from"@crossmint/common-consts";import O from"keytar";var K="crossmint-cli";async function d(r){return O.getPassword(K,r)}e(d,"get");async function g(){return d("environment")}e(g,"getEnvironment");async function y(){return d("sessionToken")}e(y,"getSessionToken");async function v(){return d("projectId")}e(v,"getProjectId");var C={production:"https://www.crossmint.com",staging:"https://staging.crossmint.com",local:"http://localhost:3000"};function E(r){return C[r]}e(E,"getCrossmintUrl");async function P(r,t=I.GET,o){let s=await y(),i=await g();s||(console.error("\u274C Session not found, please run crossmint login"),process.exit(1)),i||(console.error("\u274C Environment not found, please run crossmint login"),process.exit(1));let c=`${E(i)}${r}`;return N(c,t,o,{Cookie:`sessionToken=${s}`})}e(P,"fetchAuthenticated");async function N(r,t=I.GET,o,s){let i={method:t,headers:{"Content-Type":"application/json",...s}};o&&(i.body=JSON.stringify(o));let c=await fetch(r,i);if(c.status>=400){let a=await c.json();throw new Error(`${a.message}`)}return await c.json()}e(N,"fetchJSON");import{APIKeyUsageOriginArray as L}from"@crossmint/products-console-types";import{capitalizeFirstLetter as M}from"@crossmint/common-string-utils";import{spawn as k}from"child_process";var h=class h{output="";pager;constructor(){this.pager=k("less",["-R"],{stdio:["pipe","inherit","inherit"]}),this.pager.on("exit",t=>{console.log(this.output),process.exit(t??0)})}add(t){this.output+=t}shouldUsePager(){let t=process.stdout.rows;return this.output.split(`
2
- `).length>t}write(){var t,o;this.shouldUsePager()?((t=this.pager.stdin)==null||t.write(this.output),(o=this.pager.stdin)==null||o.end()):this.pager.kill()}};e(h,"Pager");var l=h;import f from"chalk";import{createSpinner as D}from"nanospinner";function A(r){let t=D(r),o={start:e(s=>(t.start({text:s}),o),"start"),succeed:e(s=>(t.success({text:s}),o),"succeed"),fail:e(s=>(t.error({text:s}),o),"fail")};return o}e(A,"createSpinner");async function R(r){let t=await g(),o=await v();o||(console.error("There is no project selected, please first run `crossmint project select`"),process.exit(1)),r&&!L.includes(r)&&(console.error("Invalid key type. Please use 'server' or 'client'."),process.exit(1));let s=A("Fetching API keys...");try{s.start();let i=await P(H.api.console.projects.apiKeys(o)),c=r?i.filter(n=>n.usageOrigin===r):i;if(c.length===0)return s.succeed("\u{1F50D} No API keys found for this project. To create a new API key, run `crossmint keys create`"),process.exit(0);s.succeed("\u{1F4CC} List of API Keys:");let a=new l,w=f.bold.magenta("=========");c.forEach((n,S)=>{a.add(`
3
- ${w}
4
-
5
- `),a.add(`${f.bold(`${S+1}. Key ID:`)} ${n._id}
6
- `);let j=n.usageOrigin==="server"&&t==="production"?`******************${n.clientSecret.slice(-4)}`:n.clientSecret;a.add(` ${f.bold("Key Secret:")} ${j}
7
-
8
- `);let m=[["Type",M(n.usageOrigin)],["Created By",n.createdBy],["Created",n.createdAt?new Date(n.createdAt).toLocaleString():void 0],["Scopes",n.scopes.join(", ")]];n.usageOrigin==="client"&&(n.whitelistedOrigins.length>0&&m.push(["Whitelisted Origins",n.whitelistedOrigins.join(", ")]),n.whitelistedAppIdentifiers&&n.whitelistedAppIdentifiers.length>0&&m.push(["Whitelisted App IDs",n.whitelistedAppIdentifiers.join(", ")])),m.forEach(([$,x])=>{x!==void 0&&a.add(`${f.cyan($.padEnd(20))} ${x}
9
- `)})}),a.add(`
10
- ${w}`),a.write()}catch(i){s.fail(`\u274C Failed to fetch keys: ${i instanceof Error?i.message:"Unknown error"}`),process.exit(1)}}e(R,"listKeys");export{R as default};
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=list.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list.test.d.ts","sourceRoot":"","sources":["../../../src/commands/keys/list.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export default function login(): Promise<void>;
2
- //# sourceMappingURL=login.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAYA,wBAA8B,KAAK,kBA8ClC"}
@@ -1 +0,0 @@
1
- var M=Object.defineProperty;var t=(e,n)=>M(e,"name",{value:n,configurable:!0});var z={production:"https://www.crossmint.com",staging:"https://staging.crossmint.com",local:"http://localhost:3000"};function m(e){return z[e]}t(m,"getCrossmintUrl");import S from"keytar";var P="crossmint-cli";async function l(e,n){return S.setPassword(P,e,n)}t(l,"set");async function f(e){return S.getPassword(P,e)}t(f,"get");function k(e){return l("environment",e)}t(k,"setEnvironment");async function d(){return f("environment")}t(d,"getEnvironment");function T(e){return l("sessionToken",e)}t(T,"setSessionToken");async function I(){return f("sessionToken")}t(I,"getSessionToken");function v(e){return l("projectId",e)}t(v,"setProjectId");import{select as J}from"@inquirer/prompts";import{HttpMethods as y}from"@crossmint/common-consts";async function _(e,n=y.GET,r){let o=await I(),c=await d();o||(console.error("\u274C Session not found, please run crossmint login"),process.exit(1)),c||(console.error("\u274C Environment not found, please run crossmint login"),process.exit(1));let s=`${m(c)}${e}`;return u(s,n,r,{Cookie:`sessionToken=${o}`})}t(_,"fetchAuthenticated");async function $(e,n=y.GET,r){let o=await d();o||(console.error("\u274C Environment not found"),process.exit(1));let c=`${m(o)}${e}`;return u(c,n,r)}t($,"fetchUnauthenticated");async function u(e,n=y.GET,r,o){let c={method:n,headers:{"Content-Type":"application/json",...o}};r&&(c.body=JSON.stringify(r));let s=await fetch(e,c);if(s.status>=400){let i=await s.json();throw new Error(`${i.message}`)}return await s.json()}t(u,"fetchJSON");import{routes as D}from"@crossmint/common-consts";import{select as F}from"@inquirer/prompts";import{createSpinner as A}from"nanospinner";function N(e){let n=A(e),r={start:t(o=>(n.start({text:o}),r),"start"),succeed:t(o=>(n.success({text:o}),r),"succeed"),fail:t(o=>(n.error({text:o}),r),"fail")};return r}t(N,"createSpinner");async function x(){let e=N("Fetching projects...").start();try{let n=await _(D.api.projects);if(!n||n.length===0)return e.fail("No projects found. Create a new project using `crossmint project create`"),process.exit(0);if(e.succeed("Fetched projects"),n.length===1){let o=n[0];return console.log(`You only have one project: ${o.name}`),console.log("To create another project, run `crossmint project create`"),await v(o.id),console.log(`\u2705 Project ${o.name} selected`),process.exit(0)}let r=await F({message:"Select a project:",choices:n.map(o=>({name:o.name,value:o,description:o.description}))});await v(r.id),console.log(`\u2705 Project ${r.name} selected`),process.exit(0)}catch{e.fail("Failed to fetch projects"),process.exit(1)}}t(x,"selectProject");import Y from"open";import U from"crypto";async function H(){let n=U.randomBytes(32).toString("base64url"),o=U.createHash("sha256").update(n).digest().toString("base64url");return await l("pkceCodeVerifier",n),o}t(H,"generateCodeChallenge");async function L(){return await f("pkceCodeVerifier")}t(L,"getCodeVerifier");import G from"http";import{HttpMethods as O}from"@crossmint/common-consts";import{routes as V}from"@crossmint/common-consts";async function g(){let e=await d();return e||(console.error("\u274C Environment not found"),process.exit(1)),e==="local"?{uri:"test.stytch.com",projectId:"project-test-8eb55d3d-949f-4e0f-aea6-c9ba740f7813",clientId:"connected-app-test-4d27d6d8-3491-45c8-9bb0-b05f89cb7a1a"}:e==="staging"?{uri:"api.stytch.com",projectId:"project-live-b7c564af-0c0d-4662-bfc0-72bed1049cfe",clientId:"connected-app-live-47cd5bf1-c155-42c1-9f36-5d35853b34a7"}:{uri:"api.stytch.com",projectId:"project-live-7a1cb98d-b8b7-4471-aaf6-f8af67a0df94",clientId:"connected-app-live-a72edd7e-6ff3-4002-a13a-e7ca66354bd1"}}t(g,"getStytchConfig");async function w(e){return new Promise((n,r)=>{let o=G.createServer(async(s,i)=>{try{let E=new URL(s.url||"",`http://${s.headers.host}`).searchParams.get("code");if(!E){i.writeHead(400,{"Content-Type":"text/plain"}),i.end("No code provided");return}let h=await g(),C=await u(`https://${h.uri}/v1/public/${h.projectId}/oauth2/token`,O.POST,{grant_type:"authorization_code",code:E,client_id:h.clientId,redirect_uri:"http://127.0.0.1:3456/callback",code_verifier:await L()}),R=await $(V.authentication.exchangeAccessToken,O.POST,{accessToken:C.access_token});await T(R.sessionToken),i.writeHead(302,{Location:`${m(e)}${V.console.authorizeDevice.success}`}),i.end(),o.close(),n(C)}catch(j){i.writeHead(500,{"Content-Type":"text/plain"}),i.end("Error during authentication"),o.close(),r(j)}});o.listen(3456)})}t(w,"server");import{routes as B}from"@crossmint/common-consts";var q=!1;async function K(){try{console.log("\u{1F510} Crossmint CLI - Login");let e=await J({message:"Select environment:",choices:[{name:"Production",value:"production"},{name:"Staging",value:"staging"},...q?[{name:"Local",value:"local"}]:[]]}),n=m(e);n||(console.error(`Error: No URL found for ${e} environment`),process.exit(1)),await k(e);let r=w(e),{clientId:o}=await g(),s={code_challenge:await H(),code_challenge_method:"S256",scope:"full_access",response_type:"code",grant_type:"authorization_code",redirect_uri:"http://127.0.0.1:3456/callback",client_id:o},i=`${n}${B.console.authorizeDevice.index(s)}`;console.log("Opening browser for authentication..."),Y(i),await r,console.log(`\u2705 Login successful! You are now authenticated in the ${e} environment.`),await x()}catch{console.error("\u274C Login failed, please try again."),process.exit(1)}}t(K,"login");export{K as default};
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=login.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"login.test.d.ts","sourceRoot":"","sources":["../../src/commands/login.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export default function logout(): Promise<void>;
2
- //# sourceMappingURL=logout.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAEA,wBAA8B,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAMpD"}
@@ -1 +0,0 @@
1
- var u=Object.defineProperty;var e=(n,a)=>u(n,"name",{value:a,configurable:!0});import g from"keytar";var d="crossmint-cli";async function t(n){return g.deletePassword(d,n)}e(t,"del");async function s(){return t("environment")}e(s,"deleteEnvironment");async function i(){return t("sessionToken")}e(i,"deleteSessionToken");async function c(){return t("projectId")}e(c,"deleteProjectId");async function l(){await i(),await s(),await c(),console.log("Logged out"),process.exit(0)}e(l,"logout");export{l as default};
@@ -1,6 +0,0 @@
1
- interface CreateProjectOptions {
2
- name?: string;
3
- }
4
- export default function createProject(options?: CreateProjectOptions): Promise<void>;
5
- export {};
6
- //# sourceMappingURL=create.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/projects/create.ts"],"names":[],"mappings":"AAMA,UAAU,oBAAoB;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAA8B,aAAa,CAAC,OAAO,GAAE,oBAAyB,iBAkC7E"}
@@ -1,6 +0,0 @@
1
- var E=Object.defineProperty;var t=(n,r)=>E(n,"name",{value:r,configurable:!0});import{confirm as k,input as I}from"@inquirer/prompts";import{HttpMethods as y}from"@crossmint/common-consts";import u from"keytar";var l="crossmint-cli";async function f(n,r){return u.setPassword(l,n,r)}t(f,"set");async function m(n){return u.getPassword(l,n)}t(m,"get");async function g(){return m("environment")}t(g,"getEnvironment");async function d(){return m("sessionToken")}t(d,"getSessionToken");function x(n){return f("projectId",n)}t(x,"setProjectId");var P={production:"https://www.crossmint.com",staging:"https://staging.crossmint.com",local:"http://localhost:3000"};function j(n){return P[n]}t(j,"getCrossmintUrl");async function h(n,r=y.GET,e){let o=await d(),s=await g();o||(console.error("\u274C Session not found, please run crossmint login"),process.exit(1)),s||(console.error("\u274C Environment not found, please run crossmint login"),process.exit(1));let i=`${j(s)}${n}`;return S(i,r,e,{Cookie:`sessionToken=${o}`})}t(h,"fetchAuthenticated");async function S(n,r=y.GET,e,o){let s={method:r,headers:{"Content-Type":"application/json",...o}};e&&(s.body=JSON.stringify(e));let i=await fetch(n,s);if(i.status>=400){let p=await i.json();throw new Error(`${p.message}`)}return await i.json()}t(S,"fetchJSON");import{HttpMethods as $}from"@crossmint/common-consts";import{routes as C}from"@crossmint/common-consts";import{createSpinner as T}from"nanospinner";function w(n){let r=T(n),e={start:t(o=>(r.start({text:o}),e),"start"),succeed:t(o=>(r.success({text:o}),e),"succeed"),fail:t(o=>(r.error({text:o}),e),"fail")};return e}t(w,"createSpinner");async function N(n={}){let r=w();try{let e=n.name;e||(e=await I({message:"Enter project name:",validate:t(p=>p.length>0||"Project name is required","validate")})),r.start(`\u{1F680} Creating project "${e}" with Smart Wallets...`);let o=await h(C.api.console.projects.index,$.POST,{name:e,walletType:"smart_wallet",storageProvider:"ipfs",projectThumbnail:""}),s=JSON.parse(o);r.succeed(`\u2705 Project created successfully!
2
-
3
- `),console.log(`\u{1F4CC} Project Details:
4
- Name: ${e}
5
- ID: ${s.kableClientId}
6
- `),await k({message:"Do you want to select this project?"})&&(await x(s._id),console.log(`\u2705Project '${e}' selected`)),process.exit(0)}catch(e){r.fail(`\u274C Failed to create project: ${e instanceof Error?e.message:"Unknown error"}`),process.exit(1)}}t(N,"createProject");export{N as default};
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=create.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create.test.d.ts","sourceRoot":"","sources":["../../../src/commands/projects/create.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export default function showProjectDetails(): Promise<void>;
2
- //# sourceMappingURL=details.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"details.d.ts","sourceRoot":"","sources":["../../../src/commands/projects/details.ts"],"names":[],"mappings":"AAIA,wBAA8B,kBAAkB,kBA+B/C"}
@@ -1,2 +0,0 @@
1
- var h=Object.defineProperty;var t=(o,n)=>h(o,"name",{value:n,configurable:!0});import v from"keytar";var E="crossmint-cli";async function p(o){return v.getPassword(E,o)}t(p,"get");async function l(){return p("environment")}t(l,"getEnvironment");async function m(){return p("sessionToken")}t(m,"getSessionToken");async function u(){return p("projectId")}t(u,"getProjectId");import{createSpinner as w}from"nanospinner";function f(o){let n=w(o),e={start:t(r=>(n.start({text:r}),e),"start"),succeed:t(r=>(n.success({text:r}),e),"succeed"),fail:t(r=>(n.error({text:r}),e),"fail")};return e}t(f,"createSpinner");import{HttpMethods as d}from"@crossmint/common-consts";var k={production:"https://www.crossmint.com",staging:"https://staging.crossmint.com",local:"http://localhost:3000"};function g(o){return k[o]}t(g,"getCrossmintUrl");async function j(o,n=d.GET,e){let r=await m(),c=await l();r||(console.error("\u274C Session not found, please run crossmint login"),process.exit(1)),c||(console.error("\u274C Environment not found, please run crossmint login"),process.exit(1));let a=`${g(c)}${o}`;return S(a,n,e,{Cookie:`sessionToken=${r}`})}t(j,"fetchAuthenticated");async function S(o,n=d.GET,e,r){let c={method:n,headers:{"Content-Type":"application/json",...r}};e&&(c.body=JSON.stringify(e));let a=await fetch(o,c);if(a.status>=400){let y=await a.json();throw new Error(`${y.message}`)}return await a.json()}t(S,"fetchJSON");import{routes as T}from"@crossmint/common-consts";async function x(o){return(await j(T.api.projects)).find(r=>r.id===o)}t(x,"getProject");async function I(){let o=await u();o||(console.error("No project selected. Please select a project first using `crossmint project select`"),process.exit(1));let n=f("Fetching project details...").start();try{let e=await x(o);e||(n.fail("Project not found"),process.exit(1)),n.succeed("Fetched project details"),console.log(`
2
- \u{1F4CC} Project Details:`),console.log(`Name: ${e.name}`),console.log(`ID: ${e.kableClientId}`),console.log(`Wallet Type: ${e.addons.nonCustodialWallets?"Smart":"Custodial"}`),process.exit(0)}catch(e){n.fail("Failed to fetch project details"),console.error("Error:",e instanceof Error?e.message:"Unknown error"),process.exit(1)}}t(I,"showProjectDetails");export{I as default};
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=details.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"details.test.d.ts","sourceRoot":"","sources":["../../../src/commands/projects/details.test.ts"],"names":[],"mappings":""}
@@ -1,4 +0,0 @@
1
- export { default as select } from "./select";
2
- export { default as create } from "./create";
3
- export { default as details } from "./details";
4
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/projects/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC"}
@@ -1,7 +0,0 @@
1
- var $=Object.defineProperty;var o=(r,t)=>$(r,"name",{value:t,configurable:!0});import{HttpMethods as y}from"@crossmint/common-consts";import d from"keytar";var g="crossmint-cli";async function j(r,t){return d.setPassword(g,r,t)}o(j,"set");async function f(r){return d.getPassword(g,r)}o(f,"get");async function h(){return f("environment")}o(h,"getEnvironment");async function x(){return f("sessionToken")}o(x,"getSessionToken");function m(r){return j("projectId",r)}o(m,"setProjectId");async function P(){return f("projectId")}o(P,"getProjectId");var I={production:"https://www.crossmint.com",staging:"https://staging.crossmint.com",local:"http://localhost:3000"};function w(r){return I[r]}o(w,"getCrossmintUrl");async function p(r,t=y.GET,e){let n=await x(),i=await h();n||(console.error("\u274C Session not found, please run crossmint login"),process.exit(1)),i||(console.error("\u274C Environment not found, please run crossmint login"),process.exit(1));let a=`${w(i)}${r}`;return C(a,t,e,{Cookie:`sessionToken=${n}`})}o(p,"fetchAuthenticated");async function C(r,t=y.GET,e,n){let i={method:t,headers:{"Content-Type":"application/json",...n}};e&&(i.body=JSON.stringify(e));let a=await fetch(r,i);if(a.status>=400){let u=await a.json();throw new Error(`${u.message}`)}return await a.json()}o(C,"fetchJSON");import{routes as D}from"@crossmint/common-consts";import{select as F}from"@inquirer/prompts";import{createSpinner as N}from"nanospinner";function l(r){let t=N(r),e={start:o(n=>(t.start({text:n}),e),"start"),succeed:o(n=>(t.success({text:n}),e),"succeed"),fail:o(n=>(t.error({text:n}),e),"fail")};return e}o(l,"createSpinner");async function v(){let r=l("Fetching projects...").start();try{let t=await p(D.api.projects);if(!t||t.length===0)return r.fail("No projects found. Create a new project using `crossmint project create`"),process.exit(0);if(r.succeed("Fetched projects"),t.length===1){let n=t[0];return console.log(`You only have one project: ${n.name}`),console.log("To create another project, run `crossmint project create`"),await m(n.id),console.log(`\u2705 Project ${n.name} selected`),process.exit(0)}let e=await F({message:"Select a project:",choices:t.map(n=>({name:n.name,value:n,description:n.description}))});await m(e.id),console.log(`\u2705 Project ${e.name} selected`),process.exit(0)}catch{r.fail("Failed to fetch projects"),process.exit(1)}}o(v,"selectProject");import{confirm as O,input as U}from"@inquirer/prompts";import{HttpMethods as M}from"@crossmint/common-consts";import{routes as A}from"@crossmint/common-consts";async function E(r={}){let t=l();try{let e=r.name;e||(e=await U({message:"Enter project name:",validate:o(u=>u.length>0||"Project name is required","validate")})),t.start(`\u{1F680} Creating project "${e}" with Smart Wallets...`);let n=await p(A.api.console.projects.index,M.POST,{name:e,walletType:"smart_wallet",storageProvider:"ipfs",projectThumbnail:""}),i=JSON.parse(n);t.succeed(`\u2705 Project created successfully!
2
-
3
- `),console.log(`\u{1F4CC} Project Details:
4
- Name: ${e}
5
- ID: ${i.kableClientId}
6
- `),await O({message:"Do you want to select this project?"})&&(await m(i._id),console.log(`\u2705Project '${e}' selected`)),process.exit(0)}catch(e){t.fail(`\u274C Failed to create project: ${e instanceof Error?e.message:"Unknown error"}`),process.exit(1)}}o(E,"createProject");import{routes as H}from"@crossmint/common-consts";async function S(r){return(await p(H.api.projects)).find(n=>n.id===r)}o(S,"getProject");async function T(){let r=await P();r||(console.error("No project selected. Please select a project first using `crossmint project select`"),process.exit(1));let t=l("Fetching project details...").start();try{let e=await S(r);e||(t.fail("Project not found"),process.exit(1)),t.succeed("Fetched project details"),console.log(`
7
- \u{1F4CC} Project Details:`),console.log(`Name: ${e.name}`),console.log(`ID: ${e.kableClientId}`),console.log(`Wallet Type: ${e.addons.nonCustodialWallets?"Smart":"Custodial"}`),process.exit(0)}catch(e){t.fail("Failed to fetch project details"),console.error("Error:",e instanceof Error?e.message:"Unknown error"),process.exit(1)}}o(T,"showProjectDetails");export{E as create,T as details,v as select};
@@ -1,2 +0,0 @@
1
- export default function selectProject(): Promise<never>;
2
- //# sourceMappingURL=select.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../src/commands/projects/select.ts"],"names":[],"mappings":"AAYA,wBAA8B,aAAa,mBAqC1C"}
@@ -1 +0,0 @@
1
- var E=Object.defineProperty;var e=(t,n)=>E(t,"name",{value:n,configurable:!0});import{HttpMethods as j}from"@crossmint/common-consts";import u from"keytar";var g="crossmint-cli";async function l(t,n){return u.setPassword(g,t,n)}e(l,"set");async function p(t){return u.getPassword(g,t)}e(p,"get");async function f(){return p("environment")}e(f,"getEnvironment");async function d(){return p("sessionToken")}e(d,"getSessionToken");function m(t){return l("projectId",t)}e(m,"setProjectId");var P={production:"https://www.crossmint.com",staging:"https://staging.crossmint.com",local:"http://localhost:3000"};function x(t){return P[t]}e(x,"getCrossmintUrl");async function h(t,n=j.GET,r){let o=await d(),s=await f();o||(console.error("\u274C Session not found, please run crossmint login"),process.exit(1)),s||(console.error("\u274C Environment not found, please run crossmint login"),process.exit(1));let i=`${x(s)}${t}`;return S(i,n,r,{Cookie:`sessionToken=${o}`})}e(h,"fetchAuthenticated");async function S(t,n=j.GET,r,o){let s={method:n,headers:{"Content-Type":"application/json",...o}};r&&(s.body=JSON.stringify(r));let i=await fetch(t,s);if(i.status>=400){let v=await i.json();throw new Error(`${v.message}`)}return await i.json()}e(S,"fetchJSON");import{routes as k}from"@crossmint/common-consts";import{select as I}from"@inquirer/prompts";import{createSpinner as T}from"nanospinner";function y(t){let n=T(t),r={start:e(o=>(n.start({text:o}),r),"start"),succeed:e(o=>(n.success({text:o}),r),"succeed"),fail:e(o=>(n.error({text:o}),r),"fail")};return r}e(y,"createSpinner");async function $(){let t=y("Fetching projects...").start();try{let n=await h(k.api.projects);if(!n||n.length===0)return t.fail("No projects found. Create a new project using `crossmint project create`"),process.exit(0);if(t.succeed("Fetched projects"),n.length===1){let o=n[0];return console.log(`You only have one project: ${o.name}`),console.log("To create another project, run `crossmint project create`"),await m(o.id),console.log(`\u2705 Project ${o.name} selected`),process.exit(0)}let r=await I({message:"Select a project:",choices:n.map(o=>({name:o.name,value:o,description:o.description}))});await m(r.id),console.log(`\u2705 Project ${r.name} selected`),process.exit(0)}catch{t.fail("Failed to fetch projects"),process.exit(1)}}e($,"selectProject");export{$ as default};
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=select.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"select.test.d.ts","sourceRoot":"","sources":["../../../src/commands/projects/select.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export default function whoami(): Promise<void>;
2
- //# sourceMappingURL=whoami.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAOA,wBAA8B,MAAM,kBAWnC"}
@@ -1 +0,0 @@
1
- var x=Object.defineProperty;var t=(e,o)=>x(e,"name",{value:o,configurable:!0});import{HttpMethods as d}from"@crossmint/common-consts";import y from"keytar";var h="crossmint-cli";async function p(e){return y.getPassword(h,e)}t(p,"get");async function m(){return p("environment")}t(m,"getEnvironment");async function f(){return p("sessionToken")}t(f,"getSessionToken");async function g(){return p("projectId")}t(g,"getProjectId");var w={production:"https://www.crossmint.com",staging:"https://staging.crossmint.com",local:"http://localhost:3000"};function l(e){return w[e]}t(l,"getCrossmintUrl");async function u(e,o=d.GET,n){let r=await f(),s=await m();r||(console.error("\u274C Session not found, please run crossmint login"),process.exit(1)),s||(console.error("\u274C Environment not found, please run crossmint login"),process.exit(1));let i=`${l(s)}${e}`;return P(i,o,n,{Cookie:`sessionToken=${r}`})}t(u,"fetchAuthenticated");async function P(e,o=d.GET,n,r){let s={method:o,headers:{"Content-Type":"application/json",...r}};n&&(s.body=JSON.stringify(n));let i=await fetch(e,s);if(i.status>=400){let j=await i.json();throw new Error(`${j.message}`)}return await i.json()}t(P,"fetchJSON");import{routes as k}from"@crossmint/common-consts";import{routes as T}from"@crossmint/common-consts";async function v(e){return(await u(T.api.projects)).find(r=>r.id===e)}t(v,"getProject");import{capitalizeFirstLetter as I}from"@crossmint/common-string-utils";async function $(){let e=await m(),o=await g(),n=await v(o||""),r=await u(k.authentication.getSession);console.log(`You are logged in to \u{1F340}Crossmint as: ${r.user.email} - Environment: ${I(e)} - ${n?`Project: ${n.name}`:"No project selected"}`),process.exit(0)}t($,"whoami");export{$ as default};
@@ -1,11 +0,0 @@
1
- import { APIKeyScopes } from "@crossmint/products-console-types";
2
- import { APIKeyUsageOrigin } from "@crossmint/products-console-types";
3
- export type ClientPlatform = "web" | "mobile";
4
- export type APIKeyPayload = {
5
- apiKeyId?: string;
6
- usageOrigin: APIKeyUsageOrigin;
7
- scopes: APIKeyScopes[];
8
- whitelistedOrigins?: string[];
9
- whitelistedAppIdentifiers?: string[];
10
- };
11
- //# sourceMappingURL=keys.d.ts.map