Jump to content

L2jRest - An L2j Rest API


Recommended Posts

So I was bored again...

 

L2jRest is a RESTful API for L2j

 

It is created for latest aCis but you should be able to adapt it is you wanna use it for other projects.

 

L2jRest is an open source project licensed under MIT. You can find the source here: https://github.com/Elfocrash/L2jRest

 

Why use it?

  • You can use the data of your server in your website
  • You can create an account control panel with it
  • You can expose data to your community to allow them to make third party apps

 

Technical stuff

  • It is written in Kotlin.
  • It is using the Ktor framework. Ktor is using coroutines to achieve asynchronous request handling. It is very efficient and very fast.
  • It is using Netty as the underlying server.
  • It is written in a CQRS manner with query handlers for get endpoints and command handlers for post, put, patch, delete etc.
  • It is using Koin as the IoC framework.

 

How to setup

  • Download and install Intellij IDEA
  • Git clone the project and open it with Intellij
  • Run the build Gradle task. It is configured to create a fat jar with all the dependencies included
  • Paste the jar in your project, add it in your classpath and add the following line at the bottom of your Gameserver.java: L2jRestApi.INSTANCE.start();
  • Running the gameserver will also run the api. It is running under port 6969

 

How to extend it

  • All you need to do if you wanna add more endpoints is to add a new handler and then add the Get, Post etc annotation depending on what endpoint you want this to be.

 

Current endpoints:

http://localhost:6969/api/players

http://localhost:6969/api/players/{id}

 

A couple of endpoint examples

 

Endpoints: http://localhost:6969/api/players

Response:

{
    players: [
		{
			"id": 268480927,
            "name": "Test",
            "level": 1,
            "isOnline": false,
            "pvpKills": 0,
            "pkKills": 0,
            "isNobless": false
		},
		{
			"id": 268480924,
            "name": "Test2",
            "level": 1,
            "isOnline": true,
            "pvpKills": 0,
            "pkKills": 0,
            "isNobless": false
		}
	]
}

 

Endpoint: http://localhost:6969/api/players/268480927

Response:

{
    "id": 268480927,
    "name": "Test",
    "level": 1,
    "isOnline": false,
    "pvpKills": 0,
    "pkKills": 0,
    "isNobless": false
}

 

Currently it just supports two endpoints and no authentication. I am planning to add more endpoints and ApiKey based auth tomorrow.

 

If you can't be arsed to build the project yourself but you wanna take a look anyway you can download the jar here

 

Edited by Elfocrash
  • Like 3
  • Upvote 2
Link to comment
Share on other sites

Thank you a lot for that. That's what I was searching. I have one question

 

L2DatabaseFactory.getInstance().connection.use { con ->
                val statement = con.prepareStatement(SqlQueries.GetAllPlayers)
                val resultSet = statement.executeQuery()

                var player: PlayerResponse? = null
                if (resultSet.next())
                {
                    val id = resultSet.getInt("obj_Id")
                    val name = resultSet.getString("char_name")
                    val level = resultSet.getInt("level")
                    val isOnline = resultSet.getInt("online") == 1
                    val pvpKills = resultSet.getInt("pvpkills")
                    val pkKills = resultSet.getInt("pkkills")
                    val isNobless = resultSet.getInt("nobless") == 1
                    player = PlayerResponse(id, name, level, isOnline, pvpKills, pkKills, isNobless)

 

 

Wouldn't be better to take these infos from the player object itself for example?(if player is online) So it would be real time , because database values are not always real time on L2J due to delay of updating. This specific feature may isn't the best example to what I mean actually but propably you got the point.

 

Also practically could we extend this to create token authentication and the ACP(or whatever) to just be  a cool SPA with front end framework(react,vue,etc)? 

Edited by Lioy
Link to comment
Share on other sites

52 minutes ago, Lioy said:

Thank you a lot for that. That's what I was searching. I have one question

 


L2DatabaseFactory.getInstance().connection.use { con ->
                val statement = con.prepareStatement(SqlQueries.GetAllPlayers)
                val resultSet = statement.executeQuery()

                var player: PlayerResponse? = null
                if (resultSet.next())
                {
                    val id = resultSet.getInt("obj_Id")
                    val name = resultSet.getString("char_name")
                    val level = resultSet.getInt("level")
                    val isOnline = resultSet.getInt("online") == 1
                    val pvpKills = resultSet.getInt("pvpkills")
                    val pkKills = resultSet.getInt("pkkills")
                    val isNobless = resultSet.getInt("nobless") == 1
                    player = PlayerResponse(id, name, level, isOnline, pvpKills, pkKills, isNobless)

 

 

Wouldn't be better to take these infos from the player object itself for example?(if player is online) So it would be real time , because database values are not always real time on L2J due to delay of updating. This specific feature may isn't the best example to what I mean actually but propably you got the point.

 

Also practically could we extend this to create token authentication and the ACP(or whatever) to be just a cool SPA with front end framework(react,vue,etc)? 

The problem is that the offline players are not loaded in memory so the dB call is inevitable. Everything that is loaded in the in memory cache will be served by the cache when possible. If the endpoint was get online players only then yeah it would be coming from the World class.

 

Auth is very simple to add. It’s basically a simple middleware.

 

originally when I started this it was to actually make a new ACP but it’s too much work and I don’t really wanna do front end anymore so I just created the api. If people wanna make their front end that’s fine by me. 

 

EDIT: Oh I now see what you mean, I read it wrong the first time. Yes it would make sense to get that info from the cache if the player is online. I will add that.

Edited by Elfocrash
Link to comment
Share on other sites

PlayerInfoTable retains some informations (cause player names are needed for stuff like friendlist), you probably can add missing ones, but it means you have to update it in same time otherwise you will refer to wrong values.

 

That whole class probably can be enhanced or used differently (PlayerInfo being maybe part of Player, once player is loaded ? Like loading an id card, which avoid duplicates variables or even caring about refreshing 2 places).

 

If such stuff is edited, that would simplify the developement of a lot of customs.

Edited by Tryskell
Link to comment
Share on other sites

1 minute ago, Tryskell said:

PlayerInfoTable retains some informations (cause player names are needed for stuff like friendlist), you probably can add missing ones, but it means you have to update it in same time otherwise you will refer to wrong values.

 

That whole class probably can be enhanced or used differently (maybe part of Player, once player is loaded ? Like loading an id card, which avoid duplicates variables).

The problem with having multiple points of truth is that you don't have a single one you can fully trust, that's why i trust nothing but the database and the World class. I also don't wanna touch the core at all so if I do any caching it will happen in the API level.

Link to comment
Share on other sites

3 minutes ago, Elfocrash said:

The problem with having multiple points of truth is that you don't have a single one you can fully trust, that's why i trust nothing but the database and the World class. I also don't wanna touch the core at all so if I do any caching it will happen in the API level.

 

I edited my answer :), and the idea is to only have one point of entry, which would be PlayerInfo linked to a Player, like they are actually linked to an AccessLevel, a Appearance, etc. SO drop inner variables of Player, and use only PlayerInfo to refresh those values.

 

Np.

Edited by Tryskell
Link to comment
Share on other sites

Changed the way handlers are registered. Now they will be scanned automatically during server startup and they will be registered based on their annotation. This means that all you have to do to add a new endpoint is to create a request handler and add the Get, Post etc annotation.

Link to comment
Share on other sites

Added api key based authentication as requested. Requests will only be served when the x-api-key header is set with the configured value.

Link to comment
Share on other sites

On 7/24/2019 at 1:25 AM, Elfocrash said:

Added api key based authentication as requested. Requests will only be served when the x-api-key header is set with the configured value.

 

Hey Elfo , what's the logic on this authentication? If credentials are correct then send the API key to the client? And all authorization is possible via this simple unique API key?

Just asking, because never worked with that kind of auth. (I know JWT for example , maybe I confused things somewhere)

Link to comment
Share on other sites

2 minutes ago, Lioy said:

 

Hey Elfo , what's the logic on this authentication? If credentials are correct then send the API key to the client? And all authorization is possible via this simple unique API key?

Just asking, because never worked with that kind of auth. (I know JWT for example , maybe I confused things somewhere)

It's using ApiKey auth. It's not client facing auth where you get credentials and return a key. You can do that with Basic auth but you have to enable it.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Posts

    • WTB Site Developer services.
    • @TZANEEN BUY UNIVERSAL SSD CHEMICAL SOLUTION  +27833928661 in South Africa, Gauteng, KwaZulu-Natal, Limpopo, Free State, Mpumalanga, North West, Western Cape, Eastern Cape, Northern Cape, Benoni, Boksburg, Brakpan, Carletonville, Germiston, Johannesburg, Krugersdorp, Mafikeng, Pretoria, Randburg, Randfontein, Roodepoort, Soweto, Springs, Vanderbijlpark, Vereeniging, Durban,  +27833928661Empangeni, Ladysmith, Newcastle, Pietermaritzburg, Pinetown, Ulundi, Umlazi, Bethlehem, Bloemfontein, Jagersfontein, Kroonstad, Odendaalsrus, Parys, Phuthaditjhaba, Sasolburg, Virginia, Welkom, Giyani, Lebowakgomo, Musina, Phalaborwa, Polokwane, Seshego, Sibasa, Emalahleni, Nelspruit, Secunda, Standerton, Klerksdorp, Mahikeng, Mmabatho, Potchefstroom, Rustenburg, Bellville, Cape Town, Constantia, George, Hopefield, Oudtshoorn, Paarl, Simon’s Town, Stellenbosch, Swellendam, Worcester, Alice, Butterworth, East London, Graaff-Reinet, Grahamstown, King William’s Town, Mthatha, Port Elizabeth, Queenstown, Uitenhage, Zwelitsha. +27833928661 Call For Ssd Chemical Solution for Cleaning All Notes +27833928661. Please inform us immediately on Email: Kennroger77@gmail.com Or Call: +27833928661. https://Kennroger7.Blogspot.com/website https://Kennroger7.Blogspot.com/techniciankenn https://Kennroger7.blogspot.com/   We Clean all types of Currencies call  +27833928661 Ssd Solution Chemical for Cleaning Black Money Notes Call +27833928661 Ssd Solution Used to Clean all type of Blackened +27833928661, Tainted and Defaced Bank Notes  +27833928661. We Sell Ssd Chemical Solution Used to Clean All type of Black Money and any Color Currency, Stain and Defaced Bank Notes with any others equipment being bad. Our technicians are highly qualified and are always ready to handle the cleaning perfectly. Our chemical is 100% Pure. Automatic Ssd Solution for Sale +27833928661 Rustenburg, Mafikeng, Polokwane Durban/east London, Pretoria, Johannesburg, Mpumalanga. Ssd chemical Solution for Sale in Johannesburg  +27833928661 in Zimbabwe, Mozambique, Angola, Namibia, Botswana, Lesotho and Swaziland Call and Buy Ssd Chemical Solution for Defaced Banknotes +27833928661 in Mozambique, South Africa, Lesotho, Swaziland, Namibia, Angola, Botswana, Mauritius, Zambia, Zimbabwe, Mauritania, Mauritius, Congo Call For 100% Pure Ssd Chemical Solution +27833928661 in Finland and USA.   Ssd Chemical Solution for all Defaced Bank Notes in Bloemfontein +27833928661 in Johannesburg, Cape town, Polokwane, Rustenburg, Kimberley, Durban, Pietermaritzburg, Klerksdorp, Mafikeng, Belgium, Honduras, Brazil, Argentina.  +27833928661 We are Specialized in Chemistry for anti-breeze Bank Notes. We also do Chemicals Melting and Recovering of all type of bad money from black to white Call +27833928661. We also sale chemicals like tourmaline,  +27833928661 Ssd Chemical solution and many other activation powder. About Ssd Solution for cleaning black money chemical and allied product incorporated is a major manufacturer of industrial and pharmaceutical products with key specialization in the production of ssd automatic solution used in the cleaning of black money and defaced money and stained bank notes with anti -breeze quality. The ssd solution in it's full range is the best chemical in the market for cleaning anti breeze bank notes, defaced currency and marked notes. Others for damaged notes. +27833928661 Please inform us immediately on Email: Kennroger77@gmail.com or Call: +27833928661. https://Kennroger7.Blogspot.com/website https://Kennroger7.Blogspot.com/techniciankenn https://Kennroger7.blogspot.com/
    • @ (3 IN 1, WORKING 100%) SSD CHEMICAL SOLUTIONS +27833928661 AND ACTIVATION POWDER FOR CLEANING OF BLACK NOTES @BUY SSD CHEMICAL SOLUTIONS ON GOOD PRICE +27833928661, +27833928661 @ CLEANING BLACK NOTES WITH SSD CHEMICALUTUTIONS @BEST SUPPLIERS OF SSD CHEMICAL SOLUTIONS +27833928661 IN Qatar, New York, Limpopo, London, Venezuela, Chile, Sweden, Denmark, Rwanda, Oman ,, Dubai, Poland New Castle, Namibia, Botswana, Mozambique, South Africa, Limpo¬po, JORDAN, Turkey, Belgium, Saudi Arabia, Australia, Malaysia, to Johannesbu Zambia, Swaziland, Madagascar, Zimbabwe, Lesotho, Uganda, rg, Lebanon, Berhrain USA, California, Dallas, England, German, Spain, Jamaica, Brazil, Germany, Austria, Vancouver, Denmark, Hong Kong, China ,, Pretoria, Durban, Australia, Wales, France, Cairo, Namibia, Botswana, China, Norway, Sweden, Capet own, Tanzania, Northern Cape, Canada ,, Soshanguve, Pietermaritzburg Pinetown, Vaal, Polokwane Pretoria Randburg Roodepoort Rustenburg Sebokeng Soweto Springbok Stellenbosch Thohoyandou Umlazi Upington Vanderbijlpark Vereeniging Welkom Tembisa Kempton Park Port Elizabeth Bellville Boksburg Benoni Bloemfontein Cape Town Centurion Durban East London George Empangeni Katlehong Germiston Johannesburg Port Elizabeth Khayelitsha Kimberley Klerksdorp Mamelodi Mitchells Plain Mthatha Nelspruit Newcastle Witbank Eastern cape, Free State Gauteng KwaZulu-Natal Limpopo Mpumalanga Do you have black currency in form of Dollars, Pounds or Euros or any other currency? I have the most powerful and Universal cleaning chemical you are looking for. I sell SSD automatic solution, Vetrol paste 0.2A and so many others. I also have a variety of Powders needed when doing the large cleanings such as Activation powder. We specialize in cleaning all types of defaced notes, black notes, anti-breeze bank notes, stamp coated and stained currency. We melt and re-activate frozen chemicals and offer 100% cleaning for bills like dollar, euro, pounds, RANDS and transferring of colors from used note to new white bills. We offer machines for large cleaning and also deliver products to any location desired by buyers. Laboratory staff are available to demonstrate to clients how the work is done. Are you looking for: — call+27833928661 SSD Chemical Solution Chemical Solution for Cleaning Black Money call+27833928661 SSD Chemical Company SSD Chemical Solution for Cleaning Black Money SSD Preserving Company SSD Chemical Solution for Cleaning Black Money Activation Powder SSD Chemical Solution for Cleaning Black notes Active Powder Activation Powder for Cleaning Black Notes Black Money Cleaning Clean Black Money Best SSD Solution Clean Black Notes Cleaning Black Notes Cleaning Black Money PLEASE NOTE: WE ONLY DEAL IN HIGH QUALITY SSD CHEMICALS SOLUTION FOR CLEANING BLACK MONEY We are manufacturers and sellers of all sort of chemicals like SUPER AUTOMATIC SSD SOLUTION ZWV8 MODEL ACTIVATION POWDER AND REACTIVATION POWDER, ANTI AIR POWDER, MERCURY POWDER, AUTOMATED MONEY DEVELOPER MACHINES CONGEAL CHEMICAL MELTING EQUIPMENT, TEMPERATURE CONTROLLERS AND AUTOMATIC CLEANING MACHINE. WE ARE SELLING SSD CHEMICAL SOLUTION FOR CLEANING BLACK MONEY AND POWDER CALL+27833928661 purchase Best SSD Solution Clean Black Notes Dollars WE ALSO SELL CHEMICALS LIKE SSD AUTOMATIC SOLUTION FORM CLEANING BLACK DOLLARS CURRENCIES We clean all black and green money and stamped money Infinity labs pty (since 2000) *: We can help you clean your money, (+27833928661) *, we supply a high quality of the ssd solution with machi * ne and it comes with a full package of instructions and accessories. It is the ultimate anti- * breeze solution used in cleaning defaced currency. It can be referred to as black dollar etc… *. or bank stained currency. PRODUCTS AVAILABLE: * SSD SOLUTION SSD Supreme Solution SSD universal solution SSD Tourmaline solution SSD SOLUTION PK 58 SSD Topix solution SSD Castro X Oxide solution D6 SSD universal Solution D7 SSD SOLUTION PK 58 SSD MECURY DIOSINE AUTOMATIC SOLUTION SSD NSERVATION, ACTIVATION AND RE-ACTIVATION, PARACIENT POWDER, VECTROL PASTE, ZUTA S4, CASTROX OXIDE AUTOMATED MONEY DEVELOPER MACHINES CONGEAL CHEMICAL MELTING EQUIPMENTS * TEMPERATURE CONTROLLERS Our agent will meet with you in any part of the world. CALL OR WATSUPP US @+27833928661 Email: Kennroger77@gmail.com
    • World’s Best Technician for Supplying Universal Ssd Chemical Solution in Limpopo,Sasolburg,Witbank,Standarton,Secunda,Middelburg,Vanderbijlpark,Johannesburg,Secunda,Cape Town,Burgersfort, Polokwane, Thohoyandou, phalaborwa, mokopane, bochum, +27833928661lebowakgomo, mankweng, Seshego, dendron, Giyani, Lephalale, musina,Alexandra +27833928661Johannesburg Lenasia Midrand Randburg+27833928661 Roodepoort Sandton Soweto Alberton Germiston Benoni Boksburg ,rakpan Daveyton,Duduza ,edenvale ,germiston Impumelelo Isando Katlehong Kempton Park KwaThema Nigel Reiger Park Springs Tembisa Thokoza Tsakane Vosloorus Wattville Atteridgaeville Centurion Hammanskraal Irene Mamelodi Pretoria Soshanguve Boipatong Bophelong Evaton Sebokeng Sharpeville, Vereeniging,Meyerton Heidelberg Ratanda Bronkhorstspruit Ekangala Kungwini Bronberg,Cullinan Refilwe,Zithobeni ,Carletonville,Khutsong Kagiso Kromdraai KrugersdorpMagaliesburg Muldersdrift Mohlaken,Randfontein Bekkersdal,testonaria Kimberley Upington Kuruman Sprinbok Kathu Ritchie Postmasburg,Bellville Bloemfontein.+27833928661 To purchase Best SSD Chemical Solution to Clean Black Notes Dollars.WE ALSO SALE +27833928661CHEMICALS LIKE SSD AUTOMATIC SOLUTION FORM CLEANING BLACK DOLLARS CURRENCIES. I hereby use this media to inform you, that our company can clean out black deface currency, (stained money) bank notes, We have all kinds of chemicals used for cleaning of black money or stained money in currencies such as U.S Dollars, Euro, Pound, and all local currencies, even if your defaced note is 25 years old. WE SALE CHEMICALS LIKE TOURMALINE, S.S.D. Chemical / Solution , CASTRO X OXIDE, A4 AND MANY Like ACTIVATION POWDER & SSD SOLUTION FOR CLEANING BLACK MONEY Chemical and Allied product incorporated is a major manufacturer of industrial and pharmaceutical products with key specialization in the production of S.S.D Automatic solution used in the cleaning of black money , defaced money and stained bank notes with anti-breeze quality. OTHERS FOR DAMAGED NOTES, BILLS LIKE USD,EURO, POUNDS, Contact Dr.Elvis+27833928661 OR Email Kennroger77@gmail.com for more Information…Chemical Solution in Limpopo,Sasolburg,Witbank,Standarton,Secunda,Middelburg,Vanderbijlpark,Johannesburg,Secunda,Cape Town,Burgersfort, Polokwane, Thohoyandou, phalaborwa, mokopane, bochum, lebowakgomo, mankweng, Seshego, dendron, Giyani, Lephalale, musina,Alexandra Johannesburg Lenasia Midrand Randburg Roodepoort Sandton Soweto Alberton Germiston Benoni Boksburg ,rakpan Daveyton,Duduza ,edenvale ,germiston Impumelelo Isando Katlehong Kempton Park KwaThema Nigel Reiger Park Springs Tembisa Thokoza Tsakane Vosloorus Wattville Atteridgaeville Centurion Hammanskraal Irene Mamelodi Pretoria Soshanguve Boipatong Bophelong Evaton Sebokeng Sharpeville, Vereeniging,Meyerton Heidelberg Ratanda Bronkhorstspruit Ekangala Kungwini Bronberg,Cullinan Refilwe,Zithobeni ,Carletonville,Khutsong Kagiso Kromdraai KrugersdorpMagaliesburg Muldersdrift Mohlaken,Randfontein Bekkersdal,testonaria Kimberley Upington Kuruman Sprinbok Kathu Ritchie Postmasburg,Bellville Bloemfontein. To purchase Best SSD Chemical Solution to Clean Black Notes Dollars.WE ALSO SALE CHEMICALS LIKE SSD AUTOMATIC SOLUTION FORM CLEANING BLACK DOLLARS CURRENCIES. I hereby use this media to inform you, that our company can clean out black deface currency, (stained money) bank notes, We have all kinds of chemicals used for cleaning of black money or stained money in currencies such as U.S Dollars, Euro, Pound, and all local currencies, even if your defaced note is 25 years old. WE SALE CHEMICALS LIKE TOURMALINE, S.S.D. Chemical / Solution , CASTRO X OXIDE, A4 AND MANY Like ACTIVATION POWDER & SSD SOLUTION FOR CLEANING BLACK MONEY Chemical and Allied product incorporated is a major manufacturer of industrial and pharmaceutical products with key specialization in the production of S.S.D Automatic solution used in the cleaning of black money , defaced money and stained bank notes with anti-breeze quality. OTHERS FOR DAMAGED NOTES, BILLS LIKE USD,EURO, POUNDS, Contact Dr.Elvis+27833928661 OR Email Kennroger77@gmail.com for more Information… in Limpopo,Sasolburg,Witbank,Standarton,Secunda,Middelburg,Vanderbijlpark,Johannesburg,Secunda,Cape Town,Burgersfort, Polokwane, Thohoyandou, phalaborwa, mokopane, bochum, lebowakgomo, mankweng, Seshego, dendron, Giyani, Lephalale, musina,Alexandra Johannesburg Lenasia Midrand Randburg Roodepoort Sandton Soweto Alberton Germiston Benoni Boksburg ,rakpan Daveyton,Duduza ,edenvale ,germiston Impumelelo Isando Katlehong Kempton Park KwaThema Nigel Reiger Park Springs Tembisa Thokoza Tsakane Vosloorus Wattville Atteridgaeville Centurion Hammanskraal Irene Mamelodi Pretoria Soshanguve Boipatong Bophelong Evaton Sebokeng Sharpeville, Vereeniging,Meyerton Heidelberg Ratanda Bronkhorstspruit Ekangala Kungwini Bronberg,Cullinan Refilwe,Zithobeni ,Carletonville,Khutsong Kagiso Kromdraai KrugersdorpMagaliesburg Muldersdrift Mohlaken,Randfontein +27833928661Bekkersdal,testonaria Kimberley Upington Kuruman Sprinbok Kathu Ritchie Postmasburg,Bellville Bloemfontein.+27833928661 To purchase Best SSD Chemical Solution to Clean Black Notes Dollars.WE ALSO SALE CHEMICALS LIKE SSD AUTOMATIC SOLUTION FORM CLEANING BLACK DOLLARS CURRENCIES. I hereby use this media to inform you, that our company can clean out black deface currency, +27833928661(stained money) bank notes, We have all kinds of chemicals used for cleaning of black money or stained money in currencies such as U.S Dollars, Euro, Pound, and all local currencies, even if your defaced note is 25 years old.+27833928661 WE SALE CHEMICALS LIKE TOURMALINE, S.S.D. Chemical / Solution , CASTRO X OXIDE, A4 AND MANY Like ACTIVATION POWDER & SSD SOLUTION FOR CLEANING BLACK MONEY Chemical and Allied product incorporated is a major manufacturer of industrial and pharmaceutical products with key specialization in the production of S.S.D Automatic solution used in the cleaning of black money , defaced money and stained bank notes with anti-breeze quality. OTHERS FOR DAMAGED NOTES, BILLS LIKE USD,EURO, POUNDS,+27833928661 Contact Dr.Elvis +27833928661 OR Email Kennroger77@gmail.com for more Information…
    • Cleaning black money +27833928661 with ssd chemical solution  +27 833928661  vanderbijlpark- nairobi, East London Tembisa ,Cape Town Durban Johannesburg Soweto Pretoria Port Elizabeth Pietermaritzburg Benoni Vereeniging Bloemfontein Boksburg Welkom Newcastle Krugersdorp Diepsloot Botshabelo Brakpan Witbank Richards Bay Vanderbijlpark Centurion Uitenhage Roodepoort Paarl Springs Carletonville Klerksdorp Midrand Westonaria Middelburg Vryheid Orkney Kimberley eMbalenhle Nigel Mpumalanga Bhisho Randfontein DR MBONYE has powerful lottery spells to help you win the lottery jackpot and make you rich beyond your wildest dreams I have used lottery spells and won in my personal capacity.Money Spells to eradicat Change your life For information CONTACTWhatsapp +27 833928661 EMAIL: kennrogger77@gmail.com cleaning black money with ssd chemical solution in Uganda,South sudan,Kemya,South Africa,Dubai,UAE,Kuwait,Tanzanai +27 833928661 Our vision to be the leading premier high-value and high security chemicals producer in the world and offering our services to everyone who knocks at our door step. SSD CHEMICAL SOLUTIONS LTD is uniquely positioned to consistently provide high-value solutions and world-changing chemicals and services to our clients. +27 833928661 WE ARE SPECIALIZED IN CHEMISTRY FOR ANTI-BREEZE BANK NOTES. WE ALSO DO CHEMICALS MELTING AND RECOVERING OF ALL TYPE OF BAD MONEY FROM BLACK TO WHITE AS YOU CAN SEE BELOW. Anti-freezing Preparations and Prepared De-icing Fluids, SSD Solution. Vectrol paste, Tebi-Manetic solution, Defaced currency, Cleaning chemical. Darkened currency, Black coated notes, Cleaning black money, super automatic SSD solution, anti-breeze bank notes. please contact Linda for more information on +27 833928661
  • Topics

×
×
  • Create New...

AdBlock Extension Detected!

Our website is made possible by displaying online advertisements to our members.

Please disable AdBlock browser extension first, to be able to use our community.

I've Disabled AdBlock