{"id":15502033,"url":"https://github.com/prodis/tray-checkout","last_synced_at":"2025-07-26T07:38:19.824Z","repository":{"id":5768140,"uuid":"6981343","full_name":"prodis/tray-checkout","owner":"prodis","description":"Tray Checkout API","archived":false,"fork":false,"pushed_at":"2015-11-29T17:29:18.000Z","size":127,"stargazers_count":5,"open_issues_count":0,"forks_count":4,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-06-24T21:57:05.802Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/prodis.png","metadata":{"files":{"readme":"README.rdoc","changelog":"CHANGELOG.rdoc","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-12-03T11:43:29.000Z","updated_at":"2023-07-01T15:39:57.000Z","dependencies_parsed_at":"2022-08-31T03:30:41.340Z","dependency_job_id":null,"html_url":"https://github.com/prodis/tray-checkout","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/prodis/tray-checkout","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prodis%2Ftray-checkout","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prodis%2Ftray-checkout/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prodis%2Ftray-checkout/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prodis%2Ftray-checkout/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/prodis","download_url":"https://codeload.github.com/prodis/tray-checkout/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prodis%2Ftray-checkout/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267136889,"owners_count":24041276,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-26T02:00:08.937Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-02T09:07:17.015Z","updated_at":"2025-07-26T07:38:19.799Z","avatar_url":"https://github.com/prodis.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"= tray-checkout\n\nLibrary to provide access to TrayCheckout's API.\n\nNote: This version is not compatible with the 0.2.1, for the new API version (v2) is not compatible with the old (v1).\n\n== Installing\n\n=== Gemfile\n  gem 'tray-checkout'\n\n\n=== Direct installation\n  $ gem install tray-checkout\n\n\n== Using\n\n  require 'tray-checkout'\n\n  transaction = Tray::Checkout::Transaction.new\n\nGetting an existing transaction:\n  response = transaction.get(\"522045453u5uu32e0u8014f060uuu5uu\")\n  response.success? # =\u003e true\n\n  # Transaction\n  response.transaction[:token]         # =\u003e \"522045453u5uu32e0u8014f060uuu5uu\"\n  response.transaction[:id]            # =\u003e 501\n  response.transaction[:status]        # =\u003e :waiting_payment\n  response.transaction[:status_name]   # =\u003e \"Aguardando Pagamento\"\n  response.transaction[:price_payment] # =\u003e 213.21\n  response.transaction[:price_seller]  # =\u003e 199.19\n  response.transaction[:split]         # =\u003e 1\n  response.transaction[:date_transaction].strftime(\"%d/%m/%Y\") # =\u003e \"03/12/2012\"\n\n  # Payment\n  response.payment[:method]      # =\u003e :boleto\n  response.payment[:method_name] # =\u003e \"Boleto Bancario\"\n  response.payment[:price]       # =\u003e 213.21\n  response.payment[:split]       # =\u003e 1\n  response.payment[:url]         # =\u003e \"http://checkout.sandbox.tray.com.br/payment/billet/u9uuu8731319u59u3073u9011uu6u6uu\"\n\n  # Customer\n  response.customer[:name]  # =\u003e \"Pedro Bonamides\"\n  response.customer[:email] # =\u003e \"pedro@bo.com.br\"\n  response.customer[:cpf]   # =\u003e \"18565842673\"\n\nWhen the transaction is not found:\n  response = transaction.get(\"xxxxx00000yyyy\")\n  response.success?               # =\u003e false\n  response.transaction[:id]       # =\u003e nil\n  response.errors.first[:code]    # =\u003e \"003042\"\n  response.errors.first[:message] # =\u003e \"Transação não encontrada\"\n\nCreating a successful transaction:\n  response = transaction.create(\n    token_account: \"123u5uu9ef36f7u\",\n    customer: {\n      name: \"Pedro Bonamides\",\n      cpf: \"18565842673\",\n      email: \"pedro@bo.com.br\",\n      sex: :male,\n      marital_status: :single,\n      contacts: [\n        { type: :home,\n          number: \"1142360873\"\n        }\n      ],\n      addresses: [\n        { type: :billing,\n          street: \"Avenida Pedro Alvares Cabral\",\n          number: \"123\",\n          neighborhood: \"Parque Ibirapuera\",\n          postal_code: \"04094050\",\n          city: \"São Paulo\",\n          state: \"SP\"\n        }\n      ]\n    },\n    transaction: {\n      order_number: \"R1245\",\n      shipping_type: \"Sedex\",\n      shipping_price: 13.94,\n      url_notification: \"http://prodis.blog.br/tray_notification\"\n      products: [\n        { code: \"LOGO-8278\",\n          quantity: 2,\n          price_unit: 100.99,\n          description: \"Logo Prodis\"\n        },\n        { code: \"877\",\n          quantity: 1,\n          price_unit: 10.00,\n          description: \"Outro produto\"\n        }\n      ]\n    },\n    payment: {\n      method: :mastercard,\n      split: 3,\n      card: {\n        name: \"ZEFINHA NOCEGA\",\n        number: \"5105105105105100\",\n        expdate_month: \"09\",\n        expdate_year: \"2015\",\n        cvv: \"123\"\n      }\n    }\n  )\n  response.success? # =\u003e true\n\n  # Transaction\n  response.transaction[:token]         # =\u003e \"87654321u5uu92e4u09876543uuu5uu\"\n  response.transaction[:id]            # =\u003e 503\n  response.transaction[:status]        # =\u003e :approved\n  response.transaction[:status_name]   # =\u003e \"Aprovada\"\n  response.transaction[:price_payment] # =\u003e 213.21\n  response.transaction[:price_seller]  # =\u003e 199.19\n  response.transaction[:split]         # =\u003e 3\n  response.transaction[:date_transaction].strftime(\"%d/%m/%Y\") # =\u003e \"05/12/2012\"\n\n  # Payment\n  response.payment[:method]      # =\u003e :mastercard\n  response.payment[:method_name] # =\u003e \"Mastercard\"\n  response.payment[:price]       # =\u003e 213.21\n  response.payment[:split]       # =\u003e 3\n  response.payment[:url]         # =\u003e \"http://checkout.sandbox.tray.com.br/payment/billet/u9uuu8731319u59u3073u9011uu6u6uu\"\n\n  # Customer\n  response.customer[:name]  # =\u003e \"Pedro Bonamides\"\n  response.customer[:email] # =\u003e \"pedro@bo.com.br\"\n  response.customer[:cpf]   # =\u003e \"18565842673\"\n\n=== Temp Transactions (Carts)\n\nYou can create or update carts through the Tray::Checkout::TempTransaction class:\n\n  temp_transaction = Tray::Checkout::TempTransaction.new\n  temp_transaction.add_to_cart(\n    token_account: \"8bfe5ddcb77107b\",\n    postal_code_seller: \"18524698\",\n    transaction: {\n      order_number: \"1234567\",\n      free: \"Texto Interno\",\n      url_notification: \"http://prodis.blog.br/tray_notification\",\n      products: [\n        {\n          code: \"teste\",\n          description: \"Notebook Branco\",\n          quantity: \"1\",\n          price_unit: \"2199.99\",\n          weight: \"300\",\n          url_img: \"http://catnross.com/wp-content/uploads/2011/08/product1.jpg\"\n        }\n      ]\n    }\n  )\n  response.success? # =\u003e true\n\n  response[:token]   # =\u003e a906bf32cb59060dfc90769524f99d4a\n  response[:url_car] # =\u003e http://checkout.sandbox.tray.com.br/payment/car/v1/\n\n  # Products\n  response[:products].first[:code]         # =\u003e teste\n  response[:products].first[:img]          # =\u003e http://catnross.com/wp-content/uploads/2011/08/product1.jpg\n  response[:products].first[:sku_code]     # =\u003e nil\n  response[:products].first[:description]  # =\u003e Notebook Branco\n  response[:products].first[:extra]        # =\u003e nil\n  response[:products].first[:price_unit]   # =\u003e 2199.99\n  response[:products].first[:quantity]     # =\u003e 1.0\n  response[:products].first[:weight]       # =\u003e 300.0\n  response[:products].first[:id]           # =\u003e 4502\n  response[:products].first[:type_product] # =\u003e nil\n\nAfter creating a cart you can forward your client using the cart_url method:\n\n  temp_transaction = Tray::Checkout::TempTransaction.new\n  temp_transaction.cart_url # =\u003e http://checkout.sandbox.tray.com.br/payment/car/v1/a906bf32cb59060dfc90769524f99d4a\n\n\n=== Account\n\nYou can check the existence as well as the info of an account through its token using the Account class:\n\n  account = Tray::Checkout::Account.new\n  response = account.get_by_token(\"8bfe5ddcb77107b\")\n\nWhen account is found\n\n  response.success? # =\u003e true\n\n  response.people[:name]                  # test\n  response.people[:email]                 # test@test.com\n\n  response.service_contact[service_phone] # (55) 5555-5555\n  response.service_contact[email_service] # test@test.com\n\n  response.seconds_redirect               # seconds_redirect\n\nWhen account is not found\n\n  response.success?               # =\u003e false\n  response.people                 # =\u003e nil\n  response.errors.first[:code]    # =\u003e \"XXXXXX\"\n  response.errors.first[:message] # =\u003e \"\u003cError Message\u003e\"\n\n\n== Configurations\n\n=== Environment\nTray Checkout API works with two environments: \u003cb\u003eproduction\u003c/b\u003e and \u003cb\u003esandbox\u003c/b\u003e. To config the environment use \u003cb\u003eTray::Checkout\u003c/b\u003e module.\nDefault environment is \u003cb\u003e:production\u003c/b\u003e.\n\n  Tray::Checkout.configure do |config|\n    config.environment = :sandbox\n  end\n\n=== Token Account\nTo create transactions is necessary to provide a \u003cb\u003etoken account\u003c/b\u003e. You can supply it in Tray::Checkout::Transaction#create method params, for each method call, or to config token account once using \u003cb\u003eTray::Checkout\u003c/b\u003e module.\n\n  Tray::Checkout.configure do |config|\n    config.token_account = \"123u5uu9ef36f7u\"\n  end\n\n=== Timeout\n\nFor default, the timeout for a request to Tray Checkout API is \u003cb\u003e5 seconds\u003c/b\u003e. If Tray Checkout API does not respond, a \u003cb\u003eTimeout::Error\u003c/b\u003e exception will be raised.\nYou can configure this timeout using \u003cb\u003eTray::Checkout\u003c/b\u003e module.\n\n  Tray::Checkout.configure do |config|\n    config.request_timeout = 3  # It configures timeout to 3 seconds\n  end\n\n=== HTTP Proxy\nIf you need to use an HTTP proxy to make Tray Checkout API, configure the HTTP proxy URL on \u003cb\u003eTray::Checkout\u003c/b\u003e module.\n\n  Tray::Checkout.configure do |config|\n    config.proxy_url = \"http://10.20.30.40:8888\"\n  end\n\n=== Log\n\nFor default, each request to Tray Checkout API is logged to STDOUT, with \u003cb\u003e:info\u003c/b\u003e log level, using the gem {LogMe}[http://github.com/prodis/log-me].\n\nLog example:\n  I, [2013-01-11T00:55:10.531780 #22692]  INFO -- : Tray-Checkout Request:\n  POST http://api.sandbox.traycheckout.com.br//v2/transactions/get_by_token\n  token=522045453u5uu32e0u8014f060uuu5uu\n\n  I, [2013-01-11T00:55:10.750308 #22692]  INFO -- : Tray-Checkout Response:\n  HTTP/1.1 200 OK\n  \u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n  \u003cresponse\u003e\n    \u003cdata_response\u003e\n      \u003ctransaction\u003e\n        \u003corder_number\u003e1234567\u003c/order_number\u003e\n        \u003cfree\u003eTexto Interno\u003c/free\u003e\n        \u003ctransaction_id type=\"integer\"\u003e3856\u003c/transaction_id\u003e\n        \u003cstatus_name\u003eEm Recupera\\xC3\\xA7\\xC3\\xA3o\u003c/status_name\u003e\n        \u003cstatus_id type=\"integer\"\u003e88\u003c/status_id\u003e\n        \u003ctoken_transaction\u003e522045453u5uu32e0u8014f060uuu5uu\u003c/token_transaction\u003e\n        \u003cpayment\u003e\n          \u003cprice_original type=\"decimal\"\u003e2199.99\u003c/price_original\u003e\n          \u003cprice_payment type=\"decimal\"\u003e2199.99\u003c/price_payment\u003e\n          \u003cpayment_response\u003e\u003c/payment_response\u003e\n          \u003curl_payment\u003ehttp://gtw.sandbox.checkout.tray.com.br/api/print/0b525e9dbef558690477b815118aa033\u003c/url_payment\u003e\n          \u003ctid nil=\"true\"/\u003e\n          \u003csplit type=\"integer\"\u003e1\u003c/split\u003e\n          \u003cpayment_method_id type=\"integer\"\u003e6\u003c/payment_method_id\u003e\n          \u003cpayment_method_name\u003eBoleto Bancario\u003c/payment_method_name\u003e\n          \u003clinha_digitavel\u003e34191.76007 00536.260144 50565.600009 6 58630000219999\u003c/linha_digitavel\u003e\n        \u003c/payment\u003e\n        \u003ccustomer\u003e\n          \u003cname\u003eNome do Cliente\u003c/name\u003e\n          \u003ccpf\u003e98489882380\u003c/cpf\u003e\n          \u003cemail\u003eemaildo@cliente.com.br\u003c/email\u003e\n          \u003ccompany_name\u003e\u003c/company_name\u003e\n          \u003ctrade_name\u003e\u003c/trade_name\u003e\n          \u003ccnpj\u003e\u003c/cnpj\u003e\n          \u003caddresses type=\"array\"\u003e\n            \u003caddress\u003e\n              \u003cstreet\u003eAv Paulista\u003c/street\u003e\n              \u003cnumber\u003e1001\u003c/number\u003e\n              \u003cneighborhood\u003eCentro\u003c/neighborhood\u003e\n              \u003cpostal_code\u003e04001001\u003c/postal_code\u003e\n              \u003ccompletion\u003e\u003c/completion\u003e\n              \u003ccity\u003eS\\xC3\\xA3o Paulo\u003c/city\u003e\n              \u003cstate\u003eSP\u003c/state\u003e\n            \u003c/address\u003e\n            \u003caddress\u003e\n              \u003cstreet\u003eAv Paulista\u003c/street\u003e\n              \u003cnumber\u003e1001\u003c/number\u003e\n              \u003cneighborhood\u003eCentro\u003c/neighborhood\u003e\n              \u003cpostal_code\u003e04001001\u003c/postal_code\u003e\n              \u003ccompletion\u003e\u003c/completion\u003e\n              \u003ccity\u003eS\\xC3\\xA3o Paulo\u003c/city\u003e\n              \u003cstate\u003eSP\u003c/state\u003e\n            \u003c/address\u003e\n          \u003c/addresses\u003e\n          \u003ccontacts type=\"array\"\u003e\n            \u003ccontact\u003e\n              \u003cvalue\u003e11998761234\u003c/value\u003e\n              \u003ctype_contact\u003eM\u003c/type_contact\u003e\n            \u003c/contact\u003e\n          \u003c/contacts\u003e\n        \u003c/customer\u003e\n      \u003c/transaction\u003e\n    \u003c/data_response\u003e\n    \u003cmessage_response\u003e\n      \u003cmessage\u003esuccess\u003c/message\u003e\n    \u003c/message_response\u003e\n  \u003c/response\u003e\n\n\n\nIf you configure log level to \u003cb\u003e:debug\u003c/b\u003e, request and response HTTP headers will be logged too.\n  D, [2013-01-11T00:58:56.226742 #22692] DEBUG -- : Tray-Checkout Request:\n  POST http://api.sandbox.traycheckout.com.br//v2/transactions/get_by_token\n  accept: */*\n  user-agent: Ruby\n  token=522045453u5uu32e0u8014f060uuu5uu\n\n  D, [2013-01-11T00:58:56.495131 #22692] DEBUG -- : Tray-Checkout Response:\n  HTTP/1.1 200 OK\n  content-type: application/xml; charset=utf-8\n  transfer-encoding: chunked\n  connection: close\n  status: 200\n  x-powered-by: Phusion Passenger (mod_rails/mod_rack) 3.0.18\n  x-ua-compatible: IE=Edge,chrome=1\n  etag: \"f5466d3294e177f5bb5331d326283294\"\n  cache-control: max-age=0, private, must-revalidate\n  x-request-id: 9d8b635650e69237a6a875971ead3bbb\n  x-runtime: 0.238734\n  date: Fri, 11 Jan 2013 03:58:56 GMT\n  x-rack-cache: invalidate, pass\n  server: nginx/1.2.5 + Phusion Passenger 3.0.18 (mod_rails/mod_rack)\n  \u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n  \u003cresponse\u003e\n    \u003cdata_response\u003e\n      \u003ctransaction\u003e\n        \u003corder_number\u003e1234567\u003c/order_number\u003e\n        \u003cfree\u003eTexto Interno\u003c/free\u003e\n        \u003ctransaction_id type=\"integer\"\u003e3856\u003c/transaction_id\u003e\n        \u003cstatus_name\u003eEm Recupera\\xC3\\xA7\\xC3\\xA3o\u003c/status_name\u003e\n        \u003cstatus_id type=\"integer\"\u003e88\u003c/status_id\u003e\n        \u003ctoken_transaction\u003e522045453u5uu32e0u8014f060uuu5uu\u003c/token_transaction\u003e\n        \u003cpayment\u003e\n          \u003cprice_original type=\"decimal\"\u003e2199.99\u003c/price_original\u003e\n          \u003cprice_payment type=\"decimal\"\u003e2199.99\u003c/price_payment\u003e\n          \u003cpayment_response\u003e\u003c/payment_response\u003e\n          \u003curl_payment\u003ehttp://gtw.sandbox.checkout.tray.com.br/api/print/0b525e9dbef558690477b815118aa033\u003c/url_payment\u003e\n          \u003ctid nil=\"true\"/\u003e\n          \u003csplit type=\"integer\"\u003e1\u003c/split\u003e\n          \u003cpayment_method_id type=\"integer\"\u003e6\u003c/payment_method_id\u003e\n          \u003cpayment_method_name\u003eBoleto Bancario\u003c/payment_method_name\u003e\n          \u003clinha_digitavel\u003e34191.76007 00536.260144 50565.600009 6 58630000219999\u003c/linha_digitavel\u003e\n        \u003c/payment\u003e\n        \u003ccustomer\u003e\n          \u003cname\u003eNome do Cliente\u003c/name\u003e\n          \u003ccpf\u003e98489882380\u003c/cpf\u003e\n          \u003cemail\u003eemaildo@cliente.com.br\u003c/email\u003e\n          \u003ccompany_name\u003e\u003c/company_name\u003e\n          \u003ctrade_name\u003e\u003c/trade_name\u003e\n          \u003ccnpj\u003e\u003c/cnpj\u003e\n          \u003caddresses type=\"array\"\u003e\n            \u003caddress\u003e\n              \u003cstreet\u003eAv Paulista\u003c/street\u003e\n              \u003cnumber\u003e1001\u003c/number\u003e\n              \u003cneighborhood\u003eCentro\u003c/neighborhood\u003e\n              \u003cpostal_code\u003e04001001\u003c/postal_code\u003e\n              \u003ccompletion\u003e\u003c/completion\u003e\n              \u003ccity\u003eS\\xC3\\xA3o Paulo\u003c/city\u003e\n              \u003cstate\u003eSP\u003c/state\u003e\n            \u003c/address\u003e\n            \u003caddress\u003e\n              \u003cstreet\u003eAv Paulista\u003c/street\u003e\n              \u003cnumber\u003e1001\u003c/number\u003e\n              \u003cneighborhood\u003eCentro\u003c/neighborhood\u003e\n              \u003cpostal_code\u003e04001001\u003c/postal_code\u003e\n              \u003ccompletion\u003e\u003c/completion\u003e\n              \u003ccity\u003eS\\xC3\\xA3o Paulo\u003c/city\u003e\n              \u003cstate\u003eSP\u003c/state\u003e\n            \u003c/address\u003e\n          \u003c/addresses\u003e\n          \u003ccontacts type=\"array\"\u003e\n            \u003ccontact\u003e\n              \u003cvalue\u003e11998761234\u003c/value\u003e\n              \u003ctype_contact\u003eM\u003c/type_contact\u003e\n            \u003c/contact\u003e\n          \u003c/contacts\u003e\n        \u003c/customer\u003e\n      \u003c/transaction\u003e\n    \u003c/data_response\u003e\n    \u003cmessage_response\u003e\n      \u003cmessage\u003esuccess\u003c/message\u003e\n    \u003c/message_response\u003e\n  \u003c/response\u003e\n\n\nTo disable the log, change log level and configure other log output, use \u003cb\u003eTray::Checkout\u003c/b\u003e module:\n\n  Tray::Checkout.configure do |config|\n    config.log_enabled = false   # It disables the log\n    config.log_level = :debug    # It changes log level\n    config.logger = Rails.logger # It uses Rails logger\n  end\n\n=== A configuration example\n\n  Tray::Checkout.configure do |config|\n    config.environment = :sandbox\n    config.token_account = \"123u5uu9ef36f7u\"\n    config.request_timeout = 3\n    config.log_level = :debug\n    config.logger = Rails.logger\n  end\n\n\n== Author\n- {Fernando Hamasaki (prodis)}[http://prodis.blog.br]\n\n\n== Contributing to tray-checkout\n\n* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.\n* Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.\n* Fork the project.\n* Start a feature/bugfix branch.\n* Commit and push until you are happy with your contribution.\n* Don't forget to rebase with branch master in main project before submit the pull request.\n* Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.\n* Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.\n\n\n== Copyright\n\n(The MIT License)\n\n{Prodis a.k.a. Fernando Hamasaki}[http://prodis.blog.br]\n\nhttp://prodis.net.br/images/prodis_150.gif\n\nCopyright (c) 2012-2013 Prodis\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprodis%2Ftray-checkout","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprodis%2Ftray-checkout","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprodis%2Ftray-checkout/lists"}