#tooldev-general
1 messages Β· Page 6 of 1
btw, on Discord you can format code snippets by enclosing them in lines of three backticks:
Oh thanks, I tried clicking the code one and it gave me single one and didn't work, will use that next time.
Yeah ok, client_credentials, already screwed there I see.. Starting from scratch, ty for all the help π
I am now doing the refresh token grant method. I understand everything except the last part of POST to /oauth/token
Where do I get the refresh_token for the first time so I can get a new refresh token?
If I understand correctly I must first do authorization code grant, this is where people authorize my app on pathofexile website.
Then on callback URI, I get their access_token and refresh_token
That refresh token can be now be used with refresh token grant right?
To explain what I want to do is to have a search of public stashes, is this the correct way to do it?
You go through the authorization flow for either an Authorization Code Grant or Client Credentials Grant based on whether you wish to act on behalf of an individual user's account or access generic services unrelated to an account.
The Refresh Token Grant is to re-acquire an access token previously obtained without having to involve the user.
(In the examples on the docs page, an user access token lasts for 30 days according to the response and the refresh token for 90 days)
Ok, thank you. Since I want service:psapi among other scopes, I need client credentials grant.
When user authenticates, I get access_token that doesn't expire. So now, I assume I need to save their access_token and use it when they do a query with their access_token
Since those tokens don't expire, I don't need to refresh their tokens right?
I somehow save the access_token and just use it in Authorization: Bearer access_token
I don't need to use refresh token and authorization code grants if I understand this correctly?
As I understand it, a CC grant is unrelated to any end user, it's your service authenticating itself (as the owner account of the application).
Those are indeed of unlimited duration.
Oh, so I overcomplicated things that I want to do. I make a post request to /oauth/token with my application id and secret and get an access_token. That token I can generate once and use forever and just use Authorization: Bearer ${accessToken} in header?
Seems right.
Thank you very much for your help! Really appreciate it.
Now, I got my access token and everything works fine, but this code gives me and error when I try to fetch stashes. MYACCESSTOKEN is actually my access token that I got from client credentials grant post. Am I missing something in this request?
app.get('/stashes', async (req, res) => {
const url = 'https://api.pathofexile.com/public-stash-tabs';
const headers = {
Authorization: 'Bearer MYACCESSTOKEN',
'User-Agent': 'poeapp',
};
try {
const response = await axios.get(url, { headers });
res.send(response.data);
} catch (error) {
console.error(error);
res.status(500).send('Error fetching stashes');
}
});
Note the expected format for User-Agent in the docs: https://www.pathofexile.com/developer/docs/index#guidelines
Otherwise, not sure. What error code do you get?
I changed my User-Agent now correctly to include my client_id, version and email
I get 500 Internal Server Error
Oh sorry, forgot to change MYACCESSTOKEN to my actual token, now with works with changed User-Agent. Thank you π
A question about public stashes API
I now successfully get stashes via API, I get stashes and next_change_id
It says that it's a stream containing all public stashes in all leagues and roviding the next_change_id as the id query parameter serves as a way to paginate through current and newly listed stashes
How does this exactly work? I have problems understanding this. For example, if I check one of the stashes, public is false. Is this since the beginning of API and I have to loop through next_change_id as id in url parameter until the end to get to the current new stashes?
Or maybe better question regarding this, the first stash when I call public stash IP is what, from when? When the API started working?
Yeah, you iterate through the sequence of stash state chronologically by using the next ID.
You can obtain a current change ID from either poe.ninja or the official website.
The ID is essentially an incrementing serial for each of the game shards, starting from like 0-0-0-0-0, but you should treat it as an opaque ID.
I don't know off-hand what ID you get if you request without an ID, but it's at some point in time and you can use the next ID it supplies to step forward.
So in theory if I want to get all public stashes, they best way would be to go from beginning and store/update database accordingly to the data I get from API.
Last change id only provides the things that change the last if I am correct and there is no way to get previous change ids only next ones if I'm correct.
Some people keep track of a change-ID just at the start of a league to be able to scan forward from that point.
Note that you're not going to get a complete history. Whenever the state for a particular stash tab is obsoleted by a newer change, the old change ID will omit that stash tab.
The further back you look in the river, the less information you're likely to encounter.
So what would be the best way in your opinion to process this so I get all the current public stashes? In the long run, I assume the best way to be to go through it all once and for all and store it somewhere until current change id.
I am planning to have search for standard as well so there is no other way I believe?
It kind of depends on what your purpose is for consuming the river.
If you care about the contents of old Standard stashes that don't get updated you're going to have to stretch far into the past.
For league you only need to scan from the start of the league or accept some loss and start from around current.
You probably want to be smart about what you store as well as it can be quite a bit of data over time, stripping out some of the chaff like item descriptions and other redundant data is worth doing.
Yes, I would refine it all, before I make it work I want to make it as optimized as possible, but yeah, since I want from standard as well with minimum losses, so I guess going from beginning is the way to go, wondering how long will this take :/
Also, does anyone know if there is a way to get first change id from current league and if not, does anyone have saved change id?
And also website get listed x time ago. Is there a way to get that or do I have to store datetime manually if I have a database and calculate based on that. When I check response, I can't see anything about datetime
Seems likely.
fyi some ballpark numbers. I started calling the public stash api 5 days ago at 1 request/second and I'm all caught up now. I am storing everything as is for now and have about 400GB stored
Back when things were really clogged up I got around 5 MiB/s.
That's way too many leagues ago tho.
damn 400GB. makes me wanna stop thinking about my project to make a search and make it go through the database
I am doing zero optimizations and just storing everything as is. I don't know how big it will be once I figure out a clear schema. Although that might be an issue if you don't have unlimited internet
wondering how much would be the size after clearup and how much would server for database cost to handle all this and make it query fast
The payload is designed to be self-describing and as such is quite verbose.
Some fields you can just outright drop, while others you can deduplicate.
Yeah a ton can be reduced
It totally depends on the requests and how fast you want to serve them π
Query fast that a user is okay with it? Or query fast like 10ms responses?
Maybe to give you some numbers, my indexer database needs around 16gb of combined indexes (some arenβt optimal but sadly needed for specific queries, thatβs why the number could be smaller). Have around 5gb in cache and the indexer itself also needs some resources. So around 24-30gb of ram should be enough but can be optimised quite a bit. Think you can get quite far with 16 or even less. And you donβt even need indexes or a cache if it doesnβt have to be that fast.
It also includes history data and more things so itβs not a perfect example, so you can be fine with less.
If you're concerned about whether you may need to reprocess things you could spool out data as-is or lightly filtered in a compressed representation to disk.
Figuring out a good database format for this that survives league changes always feels like a challenge.
realistic solution: cook something up with protobuf
silly solution: .itemblob π
PoeStack currently holds 4.5GB of data from the public stash stream
Wow, that is very little. What type of database do you use? Also are you saving everything from public stashes or skipping some things?
As in some things, not variables in db/json, but items, but I looked at your website and I think you have stats for all except for like weapons/gear if it's not unique
A question about stash id. Is this unique for each stash? So whenever I encounter the same one, it's the same stash and that stash will never have different stash id?
yes, this how you are supposed to delist stashes when player make it private
so how do you get the notification that a stash has been made private? do you get one with the same id but empty contents?
It's all in postgres and I assign an ID to each item group the site tracks and only store the item group id, stash id, quantity, listed value, profile for each relevant entry from the stream
{
"id": "b764d4a035693af24f131881fd7d23ad59ed8865501a3482bfd2c82e0337a354",
"public": false,
"accountName": null,
"stash": null,
"stashType": "",
"league": null,
"items": []
},
Hey guys, quick question. Could someone point me to some reading material on the character ladder API? Trying to figure out how to pull character data like Poe.ninja does for the builds section. Would like to set up some custom queries but can't find anything on how that data is served, only on the public stash.
should be under https://www.pathofexile.com/developer/docs/reference#leagues
16 votes and 9 comments so far on Reddit
Hi, how can I get a list of someone's challenges when I have their account name as a string? I'm going to be looking only for public profiles, so I don't think I need OAuth.
In the API Reference I see that the Account structure has challenges object that would contain what I'm looking for, but I don't know how to retrieve the data for a specific account
Thanks
Everything official is behind OAuth these days and as with all the other per-account stuff you'd have the user authenticate to your service after which you get delegated credentials with which to access their account endpoints.
At least that's my understanding, haven't bothered setting the flow up myself as I don't have any apps to build π
But with OAuth I would be able to retrieve only the logged in user's challenges? I would prefer to get anyone's challenges (if their profile is public)
With the proper API I believe that's all you have, as all the account endpoints are for the credentials you bear when requesting it.
Any other solutions would violate ToS.
The structure of the API is that you either act on behalf of an user for the account:* scopes or act as your service itself for the service:* scopes.
@cerulean flare are you confusing USER OAuth with APP OAuth?
I believe I am @clever thistle. I thought OAuth is the "log in with poe account" where the user needs to verify giving access to the tool
the idea is, as i understand it, to favor hypothetical user unwillingness to give just anyone access to their data over tool developer interest.
the inconsistency between manual/private api access and public api access (user already has the ability to toggle on/off public access to their profile on private site api, but not on the oauth endpoints where it's disabled by default without the ability to override) is probably just an inconsistency that may or may not be fixed eventually π
I consider it two different kinds of intent.
Public profiles are for human interaction on a one-by-one basis, you get to look at some specific individual's profile and see what they want to show you, a human.
API and script access that do things in bulk are different kinds of consumers. The human may not like automation and aggregation to look at their stuff in the same way.
Noting that interacting with the website through any API that happens to power it or some sort of screen scraping is not compliant with the ToS.
okay, thanks guys
0 votes and 2 comments so far on Reddit
Does anyone know why I can't find Seething Fury in Words.dat64 and therefor also not in UniqueStashLayout?
because it's in the second text column
oh I just found that too
how do I determine which column is the "correct" one?
WordslistId = 6
first one is id-like, idk why we didn't rename it yet)
if WordslistId = 6 then I should use column 2?
I see, but then I could always use Text2?
always use Text2
always use second, it's the only one that localized
thanks!
nice, finally fixed - was annoying me for a while now
ββ % find ./ -iname "*seethi*"
./Seething Fury.webp
Is there any way to get the actual explicit mods of an item via the account stash api? It seems like it only returns summed-up values which is not very useful if I want to know things like whether an item has open prefixes. Is that really all that is available?
Judging by the API reference, everything is cooked and only the psapi has the extended section.
(with the counts)
sadly no
Has anyone used the public OAuth client thing before? Any idea what this actually means?
Have shared rate-limits between all other public clients.
Do all applications sharerate-limits? Is the rate-limit per application but then every client for that application shares rate-limits? Or are the rate-limits per-account?
per account
Ah, okay, that clears up a lot for me. I was wondering how e.g. something like exilence would even function if it were to use public clients if it was shared between all instances of the application
it's kind of implied since public clients can only interact in an account context. We should clarify it anyway
Oh also, is account:league_accounts actually "for viewing the account's allocated atlas passives"?
Thanks for the clarification anyway!
yeah it doesn't have anything else IIRC
π
@compact isle sometimes on trade website "Resource not found. Offer no longer available pops up" even when item is available for sale. I have had this multiple times today but it was hard to capture it live to report it to you https://www.pathofexile.com/trade/exchange/Crucible/4rJ2VRgS9
The link above shows first few trades as "Resource not found" error but when i copied the msg and msged the person using that text, it was available. The same thing happens with first 3 results in that link, which may help you find the cause I hope.
I think this bug caused the player named "CrucSRSPoison" to sell his invitation for far less than its usual price because no one could msg him directly assuming the item is sold due to the error pop up. I am attaching few pics to show that trade was done afterwards at listed price and item was still up.
This happened with few items today, not all, In bulk item exchange.
Tried to clear cache etc as well but still happens.
Currently it is happening to me for all the listings available under https://www.pathofexile.com/trade/exchange/Crucible/4rJ2VRgS9 .
But it is not happening with https://www.pathofexile.com/trade/exchange/Crucible/OgMEkltE .
Earlier today while I was trying to buy shaper maps, it was happening for few listings and not for the other, in the same link.
I have a video of this interaction as well if you think that will help in any ways.
could be as simple as the person moving it in their stash, or putting it in their inventory and then back in the stash
I have video of happening it with all the item in that link, so i doubt it, in 2nd link it happened with top listing and worked fine for others.
there were some problems happening which have now been fixed
it'll be catching back up to date now
Thanks!
For public clients, does GGG permit redirect URIs to custom protocols, e.g. myapp://auth which are then caught by my desktop client? I've recently been working with both the EVE Online API and PoE's confidential client model and I am not sure which one required the usage of https for all redirects anymore
currently no custom protocols
what about regular http and localhost? Does it have to be https and/or a remote host that does the final auth?
because how else would I handle auth for a public client?
Must only use the Authorization Code (with PKCE) grant type and must use a local redirect URI.
Okay, but no custom protocols? So I just have to try and pick a port at random and hope no other app will choose it for anything else?
The only way I could imagine it working for "binding with port 0" would be if you provide a localhost URI and they're cool with any port being glued on. If that's not the case, then yeah, you'll have to fix your port.
Custom Protocols: #tooldev-general message
(Reposting from TFT Dev Chat) Does anyone have any resources or example code that uses the authentication scheme for "Public Clients" (e.g. desktop client)? Massive bonus points if there are any C#/.NET examples. https://www.pathofexile.com/developer/docs/authorization#clients
The Chaos Recipe Enhancer has been needing to get OAuth integration for the longest time and I finally have some time to work on it.
Exilence Next, maybe? that's JS though afaik
Oh dang, you're right! Didn't realize they were open source. And it actually is in C#/.NET! π€ https://github.com/viktorgullmark/exilence-next/blob/dev/ExilenceNextBackend/API/Helpers/AuthHelper.cs
ah the backend is
Yeah they have a server as a go-between afaik
Yup, Exilence Next does not use public clients yet
They've only been introduced this league
Considering that Exilence is shutting down, probably never.
that was super interesting
Thanks 
I'm not sure who gives out those roles, maybe someday I'll make it
I forget who to boop <_<
I just asked "DM for Discord Help" with proofs [like screen recording of me fiddling around with my own github repo to prove that it is me] to see if they can help with role and the mods were nice enough to grant me the role.
Don't know if the screen recording was necessary or not, but I assumed they have to check somehow that I am the same guy so I did it anyway. π
- reddit post, github page link etc was also given
I didn't even ask and I got it π€
Feel free to DM the modmail bot to request the role, just include some sort of proof that you are the maintainer π
Anyone can tell me mod sell price value is stored to where in the dat file?
Got a list of mods (or item such as Kingmaker do have a sell price override) that have sell price in ModSellPriceTypes.dat64 only
Is there a way to export the 3d character model somehow?
Yes, but effectively no.
I've got to make coffee for this π
/me googles how to unsee an image
It's "yes" in that the file formats for static meshes, animated meshes, terrain and animation are mostly figured out, we understand most of the core data.
While you can get at the raw model geometry fairly easily, it's not immediately useful as everything that is drawn by the game goes through the renderer's material system.
Materials don't just tune parameters for how the surface is shaded but instead generates complete vertex and pixel shaders for rendering the object.
The vertex shader takes the raw geometry, modifying any aspect of it like the texture coordinates procedurally based on any input data they have available, and also perform skinning and other transforms.
The pixel shader implements the whole object material, lighting and shading pipeline in parts. These include modifying material parameters arbitrarily per-pixel, eventually applying GI, shadows, direct point lights; the whole shebang.
While there's some similarities to the kind of blueprints and materials you may have in a modern engine like Unreal, Unity or Blender, it's also fairly different in some key aspects.
The material system is also rather poorly understood, I think I'm the only one in the community that have attempted a material compiler and actually rendered with it.
Without the material system you have very little indication of what texture goes where and what modifications are made to it when rendering the model.
A great example there is Jun's character model which has two textures per image file and the material samples from the left or right side depending on what data it needs. If you naively apply it as albedo and gloss it will be completely wrong.
There's not much in the way of tools written around this as the problem is much harder than the usual ones that game data exporters run into and the file formats evolve throughout the leagues, we're at like version 15 of animated models now I think.
But yeah, to answer the original question - you can kind of export geometry but depending on your intended use case it may be extremely unfit for purpose.
All my effort around this has apart from some in-house exporters for 3D printing experiments, it's all running inside my own custom renderer intended for my tool projects - reinterpreting it for some other environment is a huge effort which several people have tried; including Chuan's defunct model viewers for poedb and poeloremaster's viewer.
I'm personally not super keen on making and providing tools around this as it more often than not is going to be used for asset flips or other sketchy or unsavory content with no interest in preserving the artist intent.
just thought it would be cool to have my character in one of my videos
but sounds like too much work
thank you for explaining
I had some plans in the past to make a nice little asset viewer which content creators could use to render high-quality video snippets of characters and objects to include in their videos, but the technical problems are still too steep to do that well.
Equipment is fairly straightforward, hide the shapes of the model that equipment replaces and also render the equipment pieces attached to joints.
All the VFX I haven't even dared touch yet, it's a completely unknown system to me.
Also had some ideas about a dress-up tool where you could try out different MTX and armour pieces, but again same kind of technical barriers.
Does anyone here know if there is something similar to the skillTree.json for all the items in poe. Would need data of all uniques, div cards, currency, .. in form of json files if possible, didnt find anything yet, the only thing that came to mind was writting a crawler that reads through the data present in the wiki.
the wiki has an api if you really must, there is repoe (a bit outdated) https://github.com/brather1ng/RePoE/tree/master/RePoE/data or you can browse the game files directly https://snosme.github.io/poe-dat-viewer/ - others probably can help you more
Most of the data you're looking for should be in data/BasteItemTypes.dat64 and UniqueStashLayout.dat64
@formal kraken Aight thanks a lot, gonna check out the .dat64 files using the viewer, and figure out how to compile the data
hi @civic crane im trying to export the data using pathofexile-dat and im wondering if there is a built in way to dump an entire table or all the data without adding every table and column to the config?
no
also any way to dump the unknown columns?
yes in web ui
ah ok, was hoping i can dump themp from the cli
im trying a proof of concept new workflow for the wiki
i assume the column names need to match whats in the actual data, since it wont accept anything else
yep, don't want the data to become corrupted because someone renmaed column in schema π
Ah so it needs to match the schema, not the values in the game files?
Anyhow I wrote a parser to create the config from the exported data from dat viewer minus the unknowns and was able to get all the known data
What are current limits for api requests through oauth?
I'd like to use private stash tabs scope, and would like to know what I would be working with. Thanks in advance
hey @civic crane i have another question, i see the latest json schema has some tables that are not in the game data like ShrineBuffs
doesn't hurt anyone to keep it there
is there a way i can get a similar json with the core data?
without me interacting with the gql
no

my exporter is oriented for granular export, as fast as JS possibly allows it, therefore I don't care what in schema doesn't exist anymore π
for exporting everything based on schema and to use in wiki sql joins better to look at #680796887259021342 message
for context what im trying to do is to generate the config.json for the pathofexile-dat export
and i want pretty much all the known data
i guess ultimately i can throw gql on top of my db and call it a day
but id rather not do that
@compact isle The certf for web.poecdn.com seems to have expired, figured I'd give you a ping but I'm sure you're already on it.
yeap
A very big and exciting evening for me, finally released a big batch of fancy features for PoeFilterX!
This is a pretty huge one for me folks, after a few months of work I finally
managed to get PoeFilterX to the point of where I wanted it, enabling the
absolute most critical of features I have been hoping to get working since I
first started this project. # I am pleased to announce the release of V3.19 of
PoeFilterX! (Technically its 3.19.3, bec...
Hiya, was wondering if anyone else here has been using public clients. Specifically, is anyone else also not getting a refresh token during their auth flow? According to the docs we should be receiving one usable for 7 days
but in the end this is what I get (not json but the debug formatting from rust)
StandardTokenResponse { access_token: AccessToken([redacted]), token_type: Bearer, expires_in: Some(36000), refresh_token: None, scopes: Some([Scope("account:characters"), Scope("account:stashes"), Scope("account:league_accounts")]), extra_fields: EmptyExtraTokenFields }
Is this intended behaviour or am I doing something wrong?
This is on the initial OAuth step right? IIRC pretty much all OAuth systems should give the refresh token during the authorization process yeh
Yeah, this is what I get back after a user auth's and I trade in the code for a token
going by GGG's docs it should also just include a refresh token in that response and I don't think it would be a problem with the oauth2 lib I am using
given its usage I'd think more people would have noticed this if it was a problem with the crate
hmmm the library perhaps could be the issue but, IIRC GGG adhered to the standard for OAuth v2
do you have a way to inspect the "raw" response you got back with all the headers and whatnot, rather than the coerced type response that has been deserialized?
btw, if its handy for you, awhile back I started development on a basic Path of Exile API Emulator, for local development testing without needing to get rate limited by GGG's servers, it might be useful for you. It doesnt have all the API endpoints emulated unfortunately, eventually Id like to get stash tab stuff emulated and working, but it does have login and profile stuff working IIRC:
give me a moment, looks like I will have to supply the lib with a custom http client to intercept raw traffic
Alright, I did get the raw response body, and it is in fact missing a refresh token
{"access_token":"redacted","expires_in":36000,"token_type":"bearer","scope":"account:characters account:stashes account:league_accounts","sub":"not sure if I should redact this?","username":"MagnificentPako"}
is what I got
which would mean there is a mismatch between what you get and what the docs claim
kinda unfortunate
because tokens which only last 10 hours at a time are a bit... unwieldy for an application, or rather the user?
hm
the docs explicitly give an example with one included for the PKCE code grant
no thats definitely something wrong happening
do you have the refresh_token grant type enabled for your client? You can check on the applications page
it won't return one if you can't use it
flick an email to oauth@
will do 
Aight, if this happens to anyone else, it was a problem with the grant missing and an email saw the required grant added within a few days
not sure if I didn't have the grant because I didn't explicitly mention it initially or it was removed when I asked for an existing application to be transitioned into a public client. either way, sending them a mail is all y'all need
another silly question again. Where the monster mod text stored (the text that under the nameplate). I want to figure out the new "Hasted" mod 's actual affix name and id
ArchnemesisMods.dat64
then it does not make sense. "MonsterModSpeedAura" is displayed as "haste aura" but not found in bufftemplate .dat (so that does it really grant haste aura? edit: tested it does grant the aura), while the current of hasted (MonsterModAttackCastMovementSpeed) seems the same mod
or does the game code the aura in new way?
win11 is win vista reskin* everything will work on your ten π
does the lifetime of a refresh token change when you refresh an auth token?
public clients get 10h on the auth token and 7 days on the refresh token. If I refresh a token a day after the user logged in, do I get a new refresh token back that is valid for another 7 days (so I can indefinitely refresh tokens as long as the user keeps using my app), or do I get the old refresh token back/a new one with a 6d lifetime so that I am forced to fully re-auth the user once a week?
Yes, refresh token lifetime after use is 0 second
You make a new one
How do you get a refresh token
do the pkce setup then get a code from /oauth/authorize, then post the code to /oauth/token
should be some detailed setup steps somewhere in the poe oauth docs
Is the ID field in PublishStashChange unique per stash? Like if I move the stash to another position, will the stash hold the same id? Or is the id only the same per "request"?
Getting that from /public-stash-tabs which contains an array of PublicStashChange
https://www.pathofexile.com/developer/docs/reference#type-PublicStashChange
unique per stash, yes
though some actions can lead to stashes being recreated (map / unique stash subtabs / remove-only tab shenanigans)
But it won't change on name change or reposition for example?
correct
appreciate it
hey mates do u know is there an api with reset ladder / seasons ?
There is an endpoint for leagues but the end date on it is seldom accurate and only really updated as it's nearing the end, if ever.
thats ok I just want the start
meeeh but the api should be updated with the next one just before it comes
right ?
Two-year league, woo!
See also the docs at https://www.pathofexile.com/developer/docs/reference#leagues
I've got no idea about the timeline for how it's updated. Also not sure if it has private leagues if authed.
u can plan nothing with that π¦
In practice, the only actionable information you have is the human-readable that come out during the hype cycle.
For 3.22 in particular, they've given a timeline which I can't remember at the moment but something like "two weeks after Exilecon" as travel advice.
ty
@inner sundial https://www.pathofexile.com/forum/view-thread/3351803
Path of Exile's 3.22 Expansion
If you're coming to ExileCon and wanting to do some travel within New Zealand around that time, we are generally recommending that people travel before the convention rather than afterwards. The reason for this is that we are currently planning to reveal our 3.22 expansion at ExileCon and its launch will take place soon after, likely around two weeks afterwards.
China "rumors" put it at 3 weeks after, but GGG already denied much of those rumors, so no reason to think it's accurate
unless some major infrastructure changes are announced soon the specific release date shouldn't make a difference
generally u should be able to have ur tools consuming the api switch to the new league when it becomes the current one
hold up, is registerAt when the queue comes up?
crucible queue was pretty close to that
(17:30 utc would've been 18:30 uk i believe)
Does anyone know if the public stash API endpoint (GET /public-stash-tabs[/<realm>]) can accept filter parameters other than pagination? Specifically I'm interested in filtering on:
- specific league within a realm
- stash type (for example, just unique collection tabs)
The river/psapi? Nah, it's very plain.
So the only way to catch up with the current state of a given league is to process all historical data available through the psapi?
Thanks to both of you π @worthy cape @velvet fog
you can use trade api https://www.pathofexile.com/trade with json query, but not official support
If you only care about things happening since the start of the current temporary league, you can begin from a known ID near the league start rather than the beginning of time, but that's about it.
(1845206211-1842338811-1783252826-1974951538-1918151925)
Both helpful approaches, thanks! The application in question is a ladder for tracking the unique collection tabs of people in SSF leagues, which I'm not sure the trade API still works with (on the trade website you aren't able to select SSF leagues to search your tabs, though I haven't tried it in postman yet). So going through all the trade league data is really overkill for that kind of project. I'll look into whether the query API can still work with SSF leagues (I'm not the author of that website, btw - just asking here on their behalf)
e: As far as I can tell the query-based search is disabled for SSF leagues and results in 400 with {"error":{"code":2,"message":"Invalid query"}}
Can I use a "client_credentials" grant in tandem with the "account:stashes" scope to view users' account stashes other than my own? I want to avoid using the river/psapi if I can
The error messages suggests that I might be able to if I get the additional scopes for my app: 403{"error":"insufficient_scope","error_description":"The request requires higher privileges than provided"}
Can I use a "client_credentials" grant in tandem with the "account:stashes" scope to view users' account stashes other than my own?
No. The scope is for all stashes for an account. Accounts need to give your app permission for their stashes, so you'll need theauthorization_codegrant implemented, and the account to grant you the permission for that explicitly.
Patch 3.22 placeholder: August 19th (NZT)
source: https://api.pathofexile.com/leagues/Crucible
{
"id": "Crucible",
"realm": "pc",
"url": "https://www.pathofexile.com/ladders/league/Crucible",
"startAt": "2023-04-07T20:00:00Z",
"endAt": "2023-08-15T22:00:00Z",
"description": "Harness the power of the Crucible to forge weapons of great power.\n\nThis is the default Path of Exile league.",
"registerAt": "2023-04-07T17:30:00Z",
"delveEvent": true,
"rules": []
}
Could be placeholdery still.
well that's better than the 2 years it said previously
ya, another placeholder
Thank you for confirming this π
Hello, new to the world of swe dev. Was wondering if anyone can direct me towards how sites like vhpg or poedb obtain their gem weighting data. can't find anything related to it on RePoE and PyPoE. Thanks in advance
I canβt speak for either vhpg or poedb but the wiki uses pypoe (make sure youβre on the wiki fork) to extract that data from the game
You can use this to have a look around the files for more convenience
I cant set Item Filter Validation to false/disable. Set to true/enable works, but disable not . The way is set url with ?validate=true during API request, but with false not works. Omitting not works, adding as JSON request body parameters not works.
My site https://php10.5v.pl/simplefilter/
Wouldn't you just omit that parameter completely in order to not validate the filter?
omitting not reverts validated filter...
@rancid atlas I see you forked SimpleGraphic a few days ago. I should tell you that we have extensive work done on a portable version of it in development for a good while now built around GLFW3/ANGLE and recent 64-bit LuaJIT that builds on all three OSes.
I'm currently revamping the font rendering and investigating scalable UI, as well as fixing the layer violations in drawing.
I'd love to hear what your plans are here and what work you're doing, as SG is a huge project to take on and we've already done a lot of the heavy lifting.
I'm on vacation for another week or two but figured I'd reach out before you spend too much time diverging already.
A lot of the cross platform stuff works as PoC but kind of needs a champion and enough support crew too motivate packaging it up and shipping it, whether it's outsourcing it to packagers like the AUR peeps or doing a standalone deployment or recipes for particular distros.
If you're curious you could reach out to me or the other PoB people or the Discord to chat about it.
Hey @worthy cape , thanks for reaching out, that's very kind of you. π To be honest I've seen the merge request for angle/glfw, but I thought it was abandoned (probably because of github labeling the commits as "2 years ago", despite there being some recent commits too). I wanted to add much of the same (glfw in particular for Linux/Mac), but without touching any of the Windows stuff to avoid regressions for heavy users and to keep the changes as simple as possible. Knowing now that work is still being done on that branch, I'm happy to contribute there instead if we discuss how I can help. I'm also happy to package stuff for AUR, maybe even brew or an ubuntu PPA in the future.
The short story is that the branch started out as a revamp of context creation and windowing to get around the driver crashes that people had with the OpenGL stack.
GLFW's combined video/context/everything kind of cut straight across the previous separation of the runtime so rather than adding a separate one I broke the established interface and replaced and reorganized the "win" part, which ended up portable after seeing if I could.
The idea now is to try to bring it into a state where we can ship it as the beta channel to get it working for end users, but the polish needed is a lot thanks to the inherent complexity of the Lua side and I've been quite bogged down with life stuff.
Much like you, we aimed to do the renovations inside the actual codebase rather than adopt a remake like pobfrontend or something novel.
There's instructions on getting in touch in the CONTRIBUTING.md document in the repo, I believe.
I cant set Item Filter Validation to false/disable. Set to true/enable works, but disable not . The way is set url with ?validate=true during API request, but with false not works. Omitting not works, adding as JSON request body parameters not works.
My site https://php10.5v.pl/simplefilter/
what exactly are u trying to do
if u dont want to validate the filter just dont set the validate filter param
π hehe but if I want invalidate, then what I should to do ? I want to do exactly what is written, set invalidate.
It feels like you might be searching for a functionality that isn't there, or might be misunderstanding the purpose or misinterpreting the behaviour you see.
As I see it, item filters are by default as-is, and the optional query parameter indicates if you wish for the endpoint to perform live validation.
It's not a boolean choice of true/false, it's either present (doing the validation when posting) or absent (which assumedly doesn't).
Could you elaborate on what it is you're trying to do here, what you expect it to do and what instead happens?
If the endpoint rejects your create/update requests, it may be a sign of some other misuse like some invalid argument or malformed payload.
I would expect that ?validate=true performs a similar check like the game client does when you load a filter and it warns about things like item types that don't exist, etc.
validate isnt a property of the filter it's just an instruction for the server to validate it
u cant revoke validation as any filter that hasnt been manually validated is by definition not validated
Filters on www site in filter section have validation option to enable or disable. It works. In documentation states what You wrote it is for enable - https://www.pathofexile.com/developer/docs/reference#itemfilters, but not states that it works in one way, direction and can't be disabled. My site edits filters and should be option to revert/enable back validation. But as mentioned in documentation there is no information that through API it works only in one direction. Query have no alert and no rejections it returns 200. I noticed no error.
That's a better description, thanks.
what do u mean by "revert validation"
This is the checkbox I assume they refer to, in your set of item filters on the main website.
Yes this is and through API disabling not works......
You can check on my site, enabling works perfect diabling not
In documantaion there is no information this is in one direction....
i took the docs to mean it will validate the post once rather than setting that flag permanently, does it instead set that checkbox?
Sorry I don't know what You mean (english not fluent)
In site works in API not, only permament check this checkbox. By API could not be disabled but by www site it could be disabled with easy....
does the api request with validate=true also update that checkbox when u look at the filter in the site
when i read the docs it sounded like it would validate the filter once only
And there is no information that in API it works only for enable. Filter could be disabled only by site....
hymmm then in docs states it works only for validate , only ??
Then this is intended ?
Only the relevant people at GGG can answer it properly, but the text strongly suggests something by saying that the only legal value is true.
Now if that is because of some bug they had to work around or some design choice, we don't know.
I post Them email yesterday in this case.....
Strange that public option is in JSON body in case that enabling public can't be reverted back. I think GGG make mistake. Public should be on validation place and validation as public: ?public=true.....not validation......... π
hey guys, i got a quick question about the public-stash API: currently I'm consuming 1 next-id once ever 1.8 seconds on average, assuming I start at the current next-id, will I be able to keep up with changes or am I kicking water up hill?
The impression I get is that you'll be running approximately as fast as the rate limit and keep up most of the time.
There's the old trick of grabbing the next ID early from the first bunch of bytes before you fetch and process the rest of the payload, so you can pipeline a wee bit.
i'm a tiny little bit behind the rate limit, but not by much...i'm actually not parsing the request, i'm getting the next-id from the header(X-Next-Change-Id), but i still need to wait for the request to finish, that's actually the biggest hurdle, the JSON is pretty big
too bad there's no HEAD option available, i'd just be able to grab the next-id in advance and just put them in a blocking queue somewhere
Ooh, they put it in a header these days? That's neat.
I noticed You have tried login via my site about 14.00 +1UTC, I have your session in base, but is something strange. I have Your login and session named as athorization. During authorization login should not be present. Login should be provided after full pass of Authorization. Did You receive some error or something strange ??
@lean phoenix yep, both as I first loaded the site as the last line of the interface and then also a plain page with just an error as the login flow tool me back to your site from the GGG Auth page.
502 bad gateway ?
Site is finished and implemented full OAuth like no other with session manager, refresh token options like auto refresh of acces token, refresh by hand access token etc, all is finished many time agoo and You had error ?? siet....
it's a pity that you didn't take a screenshot, maybe it's from the server side, because for now it's running on a free server, but it still surprises me because I shouldn't get a login. Generally, the GGG servers responses tragically slow, I even put a measurement time and it's always about 2000ms, which is 2 sec ! My scripts quering to databse etc have 1ms......
I assumed it was work in progress as already the very first page I visited had inline error text.
[{"Count":1,"Type":"NOTICE","Code":8,"Text":"Undefined index: HTTP_SEC_CH_UA","File":"\/home\/darek334\/public_html\/php10\/simplefilter\/index.php","Line":51}]
That's what I got when returning from the auth flow, it was still in my tab close undo history.
(or possibly from a fresh request, not sure if it reloads the page or not when reopening it)
oooo Ok I know what it is . It is part when session gets name ok THX going to check ! π
That is, from a page with URI like: https://php10.5v.pl/simplefilter/?code=NNN&state=NNN
Fixed !
Siet a fuc... eaven I had bug. It was for session name for separate sessions in the same machines π ..........all is good now !
This site is good at the bottom are addition information etc it is good 200 is code response means OK etc
Yeah, I just assume it's not intended if what's essentially a raw request logged to the page π
In any way, the login process seems to work now, showing session info in that table cell now instead.
This was a bug during read what browser you use. From $_SERVER['HTTP_SEC_CH_UA'] or $_SERVER['HTTP_USER_AGENT'] and first was $_SERVER['HTTP_SEC_CH_UA'] and should be :
if(isset($_SERVER['HTTP_SEC_CH_UA'] ) ){ π
Yeah You have Firefox-N0Dh. How it is look ?? If You have no item filters created then You will have only session info not a item filter....
I've got one filter from the dark ages.
Can't really dig much into the site or test around, only pulled out the laptop to get you the proper error message.
All is encrypted in database with your key . From database no one could read your tokens etc . Key is transferd during cookie read etc, this is not SID. Administrators cant read encrypted data....
Ok
hello
want to write an script which gets the current trades. but it will not work. for example the link: https://pathofexile.com/api/public-stash-tabs gives me:
can anyone help me?
you need to get a client registered with ggg, details here: https://www.pathofexile.com/developer/docs/authorization
Where can I register an client?
read the link
but you'd have to send an email to ggg
https://www.pathofexile.com/developer/docs/index Getting Started specifically
but you should really read through the docs before sending the email
Thank u
Unfortunately just trying stuff with the API has become a pretty long task, but the oauth stuff also has its upsides
Heya, just one quick question:
I got fed up with the terrible Map stash filtering ingame, so I decided to write a little tool to properly filter through a map stash.
The Problem is now the rate limit. As far as I can see, you need to create an API call for every single map type.. and you can only call the stash API 30 times in 5 minutes. So it takes like 20 minutes to pull an entire map stash, which is a bit absurd.
Has anyone a solution for that? Something I am missing? Or is it really intended that it takes 20 mins?
that's the reality of it unfortunately
I think Zach of poestack had some ideas for it but not sure what they are
Good morning (at least in Europe^^), I would like to access the sound effect files in PoE for some modding experimentations. How can I do that?
Modifying the game files is against ToS, won't help you with anything around that.
Nothing off the shelf will work, there's quite a bit of legwork needed to even read them.
I understand, thanks @worthy cape
You mean legwork like this here?
https://www.reddit.com/r/pathofexile/comments/8h94p4/do_you_want_all_of_the_sound_files_from_the_game/
why does the GGG Tracker bot keep posting random ads? twitter change something with ads and the bot can't parse it properly?
pretty sure nothing changed with the bot, multi reckons it's twitter api issues
which given the slow carcrash that is twitter in recent months surprises probably nobody
probably depends how good threads is for commercial use
Time to go back to rss
not hard to beat twitter
It is not allowed in Europe due to privacy Problems iirc.. so probably not really good for businesses, which want to reach customers across the world
Hi!, So, I am learning how to code in Python and SQL(Haven't Started SQL Yet, but hope to soon) and, I am trying to figure out a way to start practicing the little code I know so far, and since I love PoE, since starting the game back in 2017, I want to try to make something, even if it's simple. Are there any reccomended places I can look, for inspiration or, maybe even looking for someone to help start developing code?
find a problem you're interested in and try to solve it
There's a bit less available to play with out of the box these days when much of the API is behind OAuth but if you've got an idea for a service there, one can always apply for an app.
On the side of data access and playing with that, I'm not sure how well the PyPoE/RePoE forks have fared since I last looked.
In the case of coode validation. I got the answer that this is intentional and indicates the server should validate the provided code in the request before saving. However it is litle nonsense. First of all, behavior differ from this on www site in filter section, where you can uncheck validation, but here you can't. We always receive from the server that the filter is checked, even though it is not, it cannot be changed. For me this is strange and should not be differ in behavior from site, second, if resource should be checked on demand then why the status of validation as checked is received by OAuth request ??
when u say "receive from the server that the filter is checked" do u mean the response includes a field that states it's been validated? iirc the only acknowledgement in docs for validation is, if u do a POST to update an existing filter and set the validation flag, then the response will include the validation errors
i think as long as u pass a valid request (regardless of filter validity) as a POST to a new filter u always get the same response
as a side note it feels like the call to update a filter should probably be a PUT but i guess it might just be overwriting the existing record completely behind the scenes?
nvm im dumb there's a valid field on the filter object that my eyes just slid right over
ah it's always true if a validation is returned
I don't know if We understand clearly. For me it is simple. www site differ from API. On site You can check and uncheck simple. In API after check i.e. by PHP function and POST etc, You can't uncheck this. If You request for Item Filter data with API You always received it is check. You can't unchceck this with API in any way.....
does sending a request with validate=true check the box on the website?
ok, someone fked unicode, and they are yet to recover russian translation 
On the poe website it's different. Why I don't care, but the validate field is called should_validate and not valid (different names when received fileds from serwer: you get valid, you set validated )as it is in the API. In the API documentation, to enable validation, it can only be done with an additional variable in the GET ?validated=true field and not in the JSON section. All is described in API documentation:
https://www.pathofexile.com/developer/docs/reference#itemfilters
After that, I tested many other options, because maybe GGG got lost somewhere and somewhere you can, but you can't.
JSON received after call:
{
"filter": {
"id": "....",
"filter_name": "SimpleFilter",
"realm": "pc",
"description": "...",
"version": "Crucible",
"type": "Normal",
"public": true,
"filter": "code of filter.....",
"validation": {
"valid": true,
"version": "3.21.1",
"validated": "2023-05-31T15:07:39Z"
},
}
}
HTML Code on poe site:
<input type="checkbox" name="should_validate" id="should_validate" class="should-validate" value="1" checked=""> but this no matter, They could process differently on the site then in the API...
right and if u then do a post for the same filter id, without setting validate, do u also get a validation object in the response?
yes:
"validation": {
"valid": true,
"version": "3.21.1",
"validated": "2023-05-31T15:07:39Z"
},
And there is no way to invalidate this by API. You can only uncheck by WWW site.....
Have you tested if this actually has an effect or if this is purely informational?
They may still send validation information but still allow invalid filters
the validation date on that is the same as the one in the previous response
so it's not validating it again
per docs valid is always true regardless of whether validation=true is sent as part of the request - the informative fields are the other two in the object
I tested this many times and in many configurations as I can imagine...
okay, but that's not an answer :p
so it does reject invalid filters if validation is not enabled?
No there is no error, simple after validated - invalidated filter It is always validated and there is no way to invalidate it....
Sounds like a fun discrepancy, but I'd chalk it up to the site being somewhat differently-abled and richer, either by design or by omission on one or the other facet.
You might get an explanation or an intent on where it's going, or you might not get anything and have to deal with this reality.
that field is always true, it doesnt have any bearing on the outcome - if u have ever validated a filter u will get a validation object in ur response
the relevant parts of the response are the version and validated fields
I dont understand where the problem is, but sounds like at this point all you can do is open a bug report
in the second snippet u posted, the validated value is set to the same as in the previous response
which indicates that it has NOT been validated in a second request
in query for given filter, you always get that it is validated - stupid.... π
and instead has returned the last time it was validated
But why by API can be invalidated , for what ??
i'm confused what u want to do
u want to get an existing filter, that has been validated, and invalidate it with no changes?
that doesnt make sense - once it has been validated, it will always be valid until changes are made to the filter code
ehhh I made changes and cant invlidate , simple on the www site you can invalidate by API You can't , what is strange in my question ?? π
the filter has not been revalidated unless ur request url includes validate=true
eeeeeeh it NOT contain THIS I tested in many way , how I can describe it easer ?? π
check the time in the validation object man, its the same as before - no validation has taken place after the second request when u didnt set validate in the url
that sounds to me like its exactly what u want to be able to do - to post changes without having them validated
So the API is actually richer than the information on the website, just keeping track of the last instance of when validation took place?
That's neat.
It makes sense that you're not able to destroy that piece of information, as it's a record of something that has happened in the past and nothing you do onward can change it, except performing a new validation later on?
i'm having to make some assumptions based off the docs and koszmarnica's info since i'm still waiting for my sandbox site to finish being set up to do my oauth request but yes it looks like that's exactly it
i think the confusion here is stemming from how the official site has users update their filters - the checkbox to validate the filter looks like it's preserving whatever setting the user last chose
in api terms that just means it defaults to appending validate=true to the url if the user chose to validate the filter last time
i'm prepared to be wrong on that since i can't test it myself yet but going on how ggg also apparently confirmed this is all intentional...
I've been thinking about requesting a test app with all the bells and whistles to test things out, but it's better for my time to not have that ability π
I have checked again . Change name of filter(for some changings) and send validated=true (again because filter was validated) and the date was not changed Last updated: 31 May 2023 15:03:10 PM

Did you also alter the filter text? Otherwise it might be caching outcomes?
the url field is validate not validated
Code of filter - no , only name of it. But why on site we can invalidate etc and here after one validate request it remains validated. There is no way to invalidate with no VALIDATION=TRUE etc I tested in many way in JSON body etc. Ok this works as intended but it is litle confusing
https://cdn.discordapp.com/attachments/175290321695932416/1129712782149947403/image.png
all is ok, just check:
public static function update_filter(string $ACCESS_TOKEN, string $ID_FILTER, array $CONTENT ){
$query_url = 'https://api.pathofexile.com/item-filter/'.$ID_FILTER;
if(isset($CONTENT['valid' ] ) ){
$query_url .= $CONTENT['valid' ]?'?validate='.$CONTENT['valid' ]:'';
unset($CONTENT['valid' ] );
}
if(isset($CONTENT['public' ] ) && !$CONTENT['public' ] ){
unset($CONTENT['public' ] );
}
return $CONTENT?file_get_contents($query_url, false,
stream_context_create(
array(
'http' => array(
'method' => 'POST',
'header' => array(
'User-Agent: OAuth SimpleFilter/1 (contact: darek334@gazeta.pl) StrictMode', 'Content-Type: application/json', 'Authorization: Bearer '.$ACCESS_TOKEN
),
'content' => json_encode($CONTENT )
)
)
)
):false;
}
and the $CONTENT['valid' ] is boolean not string if someone could ask....
Or You can checek on my site https://php10.5v.pl/simplefilter/
If You have some filter creted then all works perfect. You can check , dates etc, function is as on above..........
site doesnt seem to be working at all atm - trying to save changes returns a 512
[{"Count":1,"Type":"WARNING","Code":512,"Text":"Niepowodzenie aktualizacji filtra 8MpRjLuE","File":"\/home\/darek334\/public_html\/php10\/simplefilter\/index.php","Line":179}]
also it seems the site cant parse my filters from this league at all
It has some sense, but I can't arguee that π, because the date of the last validation is no changing at all...
it also looks like this is being sent by ur site as true regardless of setting
Moment...
OK all is good I will explain this:
hidden is always send (for check if changing of some field occurs like description etc for saving resources. hidden is compared with input, on POE site is the same technique etc), input checkbox if is not checked is not send in form: Not send == false with hidden == no change. Selecting input send true: hidden input has false != true: changing was happen and through API is set as ?validate=true.
After that if has been checked now, hidden becomes also true. If You uncheck input box : input is not send by form:
no input == false, hidden = true: input != hidden : there is change and reaction is done, to not set validate etc, flow is good I checked this many times....
does the same thing happen if u do the api request manually via a tool like postman, rather than through ur own code?
No I don't check in that way,,,, ok I have things to do to next time, thx for participating in this problem I'm very appreciate for all ! I think GGG team should close to this even though it is intentional = valid bool always true.....
You have send blank form with no change. This is not big error and now I will not fix this. In the future I will change ordering of API query and this will be fixed by the way....
Hey guys I have something not to do with an API π I've written a tool intended for HC players to mitigate logout deaths and I'm not completely sure if it goes well with the ToS - if you have time to look over it I compiled the case here: https://www.reddit.com/r/pathofexiledev/comments/150ane8/poelogoutreplay_a_way_to_mitigate_packet_loss/ - thanks in advance π
It definitely touches 7i by virtue of inspecting how the client functions albeit at a surface level, maybe 7e as it's actively producing traffic, maybe 7b if you squint at it.
From an outside perspective, of the tools that people think up it's one of the least naughty ones I've seen.
From a risk standpoint, you always risk your account and the account of others if you interact in unusual ways with game-adjacent things on your machine or produce suspicious traffic patterns.
If you want a certain answer (which probably is "no, don't do this"), you can email support@ to ask.
emailing support is almost always a waste of time yeah
Yeah I already emailed support and they dont comemnt on that
But yea it is touching those points I agree but the logout macro itself is also doing that imo, as its using cports to close the socket iirc. But that can be quite a technical hair splitting which is why im not sure. I just hope that GGG gives out warnings before enforcing in that manner
It is in itself a net positive for the HC community so at least for the discussion this can be something GGG can also integrate in their PoE client.
I'm sure that PoE2 will fix all the fundamental problems with game pacing and the need for logout macros π
Hc is Hc and in my opinion unofficial logouts and desyncs the server is not acceptable. Instead of this macros there could be dedicated button to cut off. But there are portals through You can escape, and therefore ggg will do not changing that. Question:
if you be the owner of such a game, want users to disconnect in this way by macros ? logouts etc ?
In World Of Tanks if You logout and after some period login Your tank is destroyed, and there is no questions.....
that opinion has nothing to do with tooldev
OP explicitly and kindly asked in the linked thread to keep the philosophy and fairness of HC out of the discussion, focusing on the legal aspects of the tool.
Anyone here know why poe.ninja latest snapshot stopped including sort by/display delve depth? Still works for the time machine snapshots, but not latest.
@fickle yew
Ah a minor mistake in the last update. Will fix tonight. Nice to know that someone is actually using the depth ladder.
Nice! Thanks!
The depth sorting is very useful to get ideas for delve builds
Anyone going to Exilecon btw? Would be cool to meet some tooldev people.
I'll be there!
Cool. Let's meet up.
Definitely, I think @carmine merlin is going to be there too.
Yep, will be there too
. Arriving Friday (28th) afternoon
Great. I'll arrive Thursday and be at the dinner Friday.
There the depth column is back in the Depth overview: https://poe.ninja/builds/challenge?type=depthsolo (I did remove it from the experience ladder since I can't get the value for connected accounts anyway)
Exilecon Europe, when?
At least they're gonna show PoE2 off at Gamescom, but that requires going to Germany and being around people.
Exilecon mars, when?
tencent have exilecon at the same time in china
How does that work, does GGG send Devs there or is it without GGG staff?
probs whatever tencent staff works on the china version, as I assume if its at the same time all the NZ staff will stay in NZ
China would be easier to get to than nz...
Yup. Nothing could get me into an airplane for 30+h
fly 8 hours closer, spend a few days not on plane, repeat until in NZ?
itll take you a few extra weeks and alot of extra flights though
Meh sounds like torture still and a lot of money but yeah sounds a bit better
this useful https://www.pathofexile.com/item-data?
I dont think your supposed to query that though, my advice would be to use the ggpk and extract it yourself
if you want unique mods, then querying trade site might be your best bet though
depends what u want it for i suppose
could mean base stat data or stuff from the psapi
You can get base stats from the wiki api
press f for captain crunch nerds
https://www.dignitymemorial.com/obituaries/las-vegas-nv/kevin-mitnick-11371668
Hello, what do You guys think about extending PoB'c "compare" functionality to show steps based on multiple trees? (for example whenver Zizaran posts a build with 5 trees every ~20 points)
https://www.reddit.com/r/pathofexile/comments/156zeuu/order_of_levelling_in_pob/
seems fine, colours probs needs work
Yeah, the other implementation I saw in a PR ended up being pretty complicated: https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/3546 If yours can simply extend the way creators already do their leveling trees I'd be more open to that. Generally PoB steers toward endgame optimization though, and will err on rejecting leveling features simply due to maintainability concerns.
_.index.bin filename checksum algorithm changed
Yep, ggg lowercased folder names
My only guess they hit collision, so seed it now
Oh heck. This probably broke Inya good.
I wonder if there's some far-reaching implications here, like the new particle system from PoE2 moving from string paths to path hashes and they had to krangle the bundles to match?
I'm on a sidetrack to a sidetrack atm, Bun won't resolve any file info hashes with the current seed.
If anyone's digging, the format of .index.dbg seems to be:
uint32 version;
uint32 count;
typedef struct {
byte unk0[24];
uint32 uval24;
} Elem;
Elem elems[count];
There's as many entries as file info chunks in I can't count, 813878 in this file, 813444 in the index._.index.bin, so probably something derived from each of them.
The 24 bytes don't have any structure to them but the following uint32 is small values.
Could of course just be some WIP debug data that accidentally got published, much like the old _.index.txt in pre-Heist.
Enumerated all four-byte suffixes on a given file and its lowecase form, didn't match any of the file info entries, but not sure if that file still exists.
Not sure where to go from here, I could match compressed file slices to existing files to tell their old filenames and the correspondence to new hashes - but that on its own isn't any help.
Can't figure out new index hash algorithm π¦
I assumed the salt added to file names ("++") has been changed so I tried to bruteforce it as suffix & prefix, up to 4 characters (255255255*255 combinations per each try).
Tried to change encoding (ASCII -> Unicode) for file names.
Tried to change letter case.
Tried to use file orders as hash function parameters, both DEC, hex and HEX formats.
Tried some other well-known 64bit hash algorithms (not all of them tho).
Still no luck.
Doing some cross-referencing with the previous release I've mapped out the .dbg file slightly more, the first field of the entries is the new hash as it occurs in the file entry list in the bundle:
{
uint64 new_hash;
uint64 val8[2];
uint32 file_size;
}
It seems like val8[0] and val8[1] are often identical, but not always.
Not related to newness either:
16379945813437288577 is a new file in 3.21.2
9363473673332662835 existed before and has different values.
13928490628064583859 existed before and has identical values.
I have an idea... new angle of attack.
I can't find .index.dbg in my ggpk file
I'm working off Steam, might only be there.
could you upload a copy
Was wondering why the file didn't show up in the directory listing... it starts with a period π
Way past bed time, but it's smelling of that the algorithm has changed rather than the disambiguating suffix. I see a significant reduction in occurrences of the FNV constants once all the false positives are out of the way.

I may have it.
The answer come to you in your sleep?
Given that I got like four hours last night, heavens no π
oh god, 4h is rough
Index bundle decompressed, 22260264 bytes
Bundle count in index binary: 34138
File count in index binary: 813444
Decompressed inner size: 17339183
Done, 813444/813444 extracted, 0 missed.
Need to conjure up some auto-detection logic for Bun to look at the root pathrep's hash to determine which algorithm/seed to use.
@velvet fog @thick hawk @civic crane @carmine merlin @formal kraken - for you and other people playing at home:
The hash algorithm is MurmurHash64A with a seed of 0x1337b33f. The old ++ suffix is gone, both file and directory paths are now lowercase with forward slashes, no trailing slashes.
You can use the hash of the root directory entry as a sentry to tell whether you're using the old hash or the new hash with the specific seed.
The old root is 0x07e47507b4a92e53, new is 0xf42a94e69cff42fe.
I'll be shipping an update for Bun (bun_extract_file) once I run through one last set of extraction tests.
finding php MurmurHash64A support..
Oh gratz!
Meanwhile my PC keep comparing files by content and already detected 264081 new file name in 3240 bundles... I'm so glad I can stop the process lol.
Ok lowercase filenames are quite painful to work with
Also, I don't know since when, but Art directory is no longer special "glued" into root...
And cachedshaders dir too
Not sure if this is a recent change, but it looks like the format of the .dds.header files has changed.
The version number has indeed changed from 1 to 3 for this file I'm looking at.
Headers seem to be this, not sure about the second field yet:
uint32 version, full_width, full_height;
if (version == 3) {
uint32 mip_count;
uint32 unk4;
}
uint32 proxy_size; // size of the embedded proxy DDS file
if (version == 3) {
uint32 full_size; // size of the real DDS file
}
(revised, had mixed up proxy and full sizes)
unk4 seems to commonly be 0xD5, 0xCD and 0x15, could be something derived from pixel formats maybe?
Feels like it should be some information about the full image that is needed ahead of time for the pipeline.
Files with 0xCD seem to be BC1, files with 0x15 seem to be R8G8B8A8, 0xD5 seems to be BC7.
wonder if it's an oodle texture thing
If my tools weren't horribly broken it'd be fun to run some sweeps across the data and see what maps to what, but that's not happening.
Also still working off that lack of sleep, so
seems alluring.
Made Bun slightly more future-proof in case the seed changes some day.
Ooh, new dat64 in 3.21.2b - tieredmicrotransactionsvisuals.dat64. I guess something might've been split out or the next league ones are fancier somehow.
Might be to fix this Tiered microtransactions applied to Mannequin Decorations can now only be set up to the maximum tier you have unlocked.
Ah, I think it's to support a specific (new?) MTX that may have a different UI appearance per tier.
Not gonna spoil more about it ^_^
mirror charges
finally finished most of the file export before exilecon
At that investment tier it has an unprecedented effect of making all items drop only in a mirrored form with an applause sound effect and a message telling you that you have spent enough to win the game.
We call this phenomenon "pay-to-win".
Is my understanding of this correct in that with this rate limit policy I can at most send 30 requests every 5 minutes or else I get timed out for 5 minutes? (also no more than 15 within 10 seconds)
@daring moss yes, but don't forget to add extra 1-2s to them to account for latency
yeah, fair
I was mostly wondering about the 30 tabs per 5 minutes limit, which sounds a bit harsh
but I get that it is so strict for a public client
announcement page don't use PoE/Item/DeferredItemRenderer anymore, can't parse item data anymore
There is no press kit this time around?
@carmine merlin @fickle yew want to meet up after the q&a? @compact isle would love to meet you too at some point
For sure. I'm in watching the q & a atm
Same
Sure let's do that.
@oak estuary where to meet?
We could go to the map device?
Is that top floor?
I can be at the mappy device
I'm next to it. Tall guy with red hair
Be there soon gotta fight off people with cards
Ok I reported this as Bug finally, The Validation case by API, because the date is not changed. Soon next step in my site the personalization of Currency section in https://php10.5v.pl/simplefilter/ I'm excited ;)...
hi, my pob became super laggy and stuttery for no apparent reason, it worked just fine previous years lol, I tried doing fresh reinstall but it didnt help. Any clue why ?
I use the latest version of pob community edition
Try the standalone version maybe that helps
im pretty sure only version of pob that exists for 3.21 is the community edition
kinda odd how u got "tooldev" role without knowing that
kinda odd yes
download portable, try that
I don't get what Faust's role has anything to do with their knowledge about PoB. We're not a PoB support channel
for all you know they might be the person keeping poe.ninja together
@hot karma There's been some people reporting similar problems lately. It'd be interesting to see if there's anything especially weird about your existing configuration (settings.xml + builds) vs. what you have in the portable installation.
ill gladly help, give me a minute
I'm kind of busy tonight, but it'd be interesting to know if you've got something abnormal, like way too many shared items (a typical settings.xml is like two kilobytes), or something else that's off.
@compact isle heads up, https://www.pathofexile2.com/ is redirecting to itself
Hm proper link is without the www but that is still v weird
www.poe2 is linked from some official pages like https://www.pathofexile.com/forum/view-thread/3407196 -- that's how I noticed it
Fixed π ty
Is there a api to get images from the cdn? currently i'm developing a browser tool in angular (mainly to learn angular :D) and i can extract the list of available maps from https://www.pathofexile.com/api/trade/data/static.
but there are no image-links in that json :/
@quick gorge no, it's basically https://www.pathofexile.com/api/trade/data/static + https://www.pathofexile.com/item-data/weapon + https://www.pathofexile.com/item-data/armour + scrape trade api for remaining items
ty
Uh am I going crazy or VisualGGPK2 no longer supports steam?
steam_mode.bat is not there and if i add -steam option directly its missing oodle dll
Sounds like fun. @vestal pond - that's your project right?
I'm sorry for accidentally deleting those two .bat files from the release
I'll make it up later
But -steam should still work, maybe check your working directory or if the dll exists?
its not in the releases no. i copied it from an old folder and it works now
oo2core_9_win64.dll specifically
OAuth etc, create item filter. Is the filter parameter of json body required ?
Docs ? where ? https://www.pathofexile.com/developer/docs/reference#itemfilters I cant create new filter by API, I can update etc but not create, code of filter nothing change....
Any Param without a question mark in front is required
OK.
siet nothing works, I don;t know what it is I receive list of filters except new filter data. It should work the function is similar to update almost the same except id in link:
https://api.pathofexile.com/item-filter/
/**/
public static function create_filter(string $ACCESS_TOKEN, array $CONTENT ){
$query_url = '';
if($CONTENT && isset($CONTENT['filter_name' ] ) && $CONTENT['filter_name' ] ){
$query_url = 'https://api.pathofexile.com/item-filter/';
if(isset($CONTENT['valid' ] ) && $CONTENT['valid' ] ){
$query_url .= '?validate=true';
unset($CONTENT['valid' ] );
}
if(isset($CONTENT['public' ] ) && !$CONTENT['public' ] ){
unset($CONTENT['public' ] );
}
}
echo json_encode($CONTENT );
return $query_url?file_get_contents($query_url, false,
stream_context_create(
array(
'http' => array(
'method' => 'POST',
'header' => array(
'User-Agent: OAuth SimpleFilter/1 (contact: darek334@gazeta.pl) StrictMode', 'Content-Type: application/json', 'Authorization: Bearer '.$ACCESS_TOKEN
),
'content' => json_encode($CONTENT )
)
)
)
):false;
return false;
}
I think problem is with code in filter parameter....
but I set only Show - one word and not works too.....
OK targeted ! The problem is with / at the end of URL !!!!
Frankly I don't know what is the difference between https://api.pathofexile.com/item-filter/ and https://api.pathofexile.com/item-filter but is.... I must read somhere about this....
the trailing slash makes it a different url
Great fun when you're dealing with user agents or users that don't discern for sure.
in general routing would expect each slash to mean something should come after it
so https://api.pathofexile.com/item-filter/ would point to a blank subresource of the item-filter resource
a rare few restful apis don't distinguish between trailing slash and no trailing slash but i think it's pretty standard to not want one
Fond memories from making and interfacing with WebDAV - great fun when clients go into a redirect loop from non-slash to slash, or keep insisting on the incorrect slashless syntax.
WebDAV is nicely strict on this, which works poorly out in reality where people don't discern π
There IIRC a slash means it's a directory/collection, while no slash means it's a file.
In short - use the form you have documented in the API - subtle differences matter.
π
fwiw i've heard ppl apply this to restful apis too occasionally and i'm not fully sure that it's correct
but then again rfcs are made to be broken right 
hi. apologies if this has been asked before but I couldn't find another example. I'm trying to implement OAuth "Public Client" and the authorization request to https://www.pathofexile.com/oauth/authorize is failing with
"error": "invalid_client",
"error_description": "No client id supplied"
}```
but I am supplying a `client_id` request parameter. does anyone know if the client_id has to be registered with GGG to be used?
Yep, the authorization process requires the application and the redirect URIs to be pre-registered: https://www.pathofexile.com/developer/docs#gettingstarted
Note how it says in the field outline here that it's "your registered application's client id": https://www.pathofexile.com/developer/docs/authorization#authorization_code
does the local redirect URI port have to be static then? my code currently gets a random open port
@compact isle Am I reading it right in that you require public clients to specify a fixed port in advance or is it flexible enough to somehow accept a localhost HTTP URI with an arbitrary port in the authorize flow?
sounds like Public Clients also share rate limits across all clients using that client_id. am I reading that right?
Yes, has to be a static port
am not novynn but someone using a public client currently
I think we can do randomised but not 100%
the rate-limit is shared across all public clients using that account. So two tools doing the same thing won't give you an advantage π
thanks for answering. I just have one other question to maybe help clarify. I'm not sure I understand the rate-limit. is it per client_id or per client install? e.g. two different users on different computers are using Public Client OAuth with the same app. does each instance of the app have its own rate limit associated with the authorization or is it shared across all instances of the client?
let me know if I'm not being clear in my example.
it's per account
essentially public clients can't be trusted so everything is based on the account using it
thanks. I understand now.
is there any open source code i can look at that would provide the building blocks for targeting individual account stash tabs, akin to chaos recipe or exilence ?
thnx
Is somewhere JSON resource of filter syntax of conditions like SetBackgroundColor and possible values, etc ?
not exactly what you are asking for, but its probably the best you will find
https://www.pathofexile.com/item-filter/about
But I know yhis site and want this in JSON form π
you will probs have to make it yourself then
Is there a zip or similar of web assets we can use similar to the ones used on pathofexile.com ?
No but there are tools around that can extract assets from the game files https://github.com/SnosMe/poe-dat-viewer/tree/master/lib
I also have a dump for all assets I need for pobbin
Which isn't updated for the latest patch btw (doesn't use the new hashes)
i didnt even consider that the logo, frame borders etc from the website are also probably in the game π
what are you trying to use them for?
if its anything public you might very likely run into licensing/copyright problems
thats why i asked if they had made it available. Games often make graphics available for use on fansites
did you look at the press kits? not sure what's in those
Anyone got a link to the tool that was just posted on the subreddit a day or two ago that has a ton of different functionality, but one example is that it lets you clone certain UI elements in the game and move them to anywhere you want on the screen to make them more central / etc?
found it, it was https://old.reddit.com/r/pathofexile/comments/15it320/lailloken_ui_v150_beta_launch_complete_overhaul/ if anyone cared
So many features but I don't want to steal even a single one. Looks fancy, with wow effect, but useless on practice .. for me at least
im really tempted to use it just for cooldown timers/pulse
that is one thing i wish POE added as a native feature
how do you use the API to dynamically get the current league name ?
there is no real "current" league so you can't really
the common way is to grab the first one from the leagues list and check it isn't standard
well there's at aleast start date
but that only narrows it to all the leageut types
but outside of marketing / patches leagues are just things... it's hard on us too π
I gues i'll have to do multiple filters and truncate the results
How much I gotta slide ya to add another column into that table isCurrentLeague π
the thing is that that just doesn't exist
though maybe there is some sneak we can do hmmm
there's no db table with the leagues info in it?
how is the API servicing that endpoint?
is the Rules field adaptable?
oh, will the description field always contain the sentence This is the default Path of Exile league.
I guess I can use that
leagues are dynamic and dictated by the backend. They don't come from the data files
what are the chances of changing the description of Ruthless <league> slightly ?
just so it has one word in it that just the League desc doesn't (or vice versa)
the issue with alot of this setup is private leagues
if you are logged in a private league is treated the same as other leagues, shows up on tradesite etc
or like making the base league desc say: This is the base default Path of Exile league.
because base would be unique among al league types
cant you just filter out ssf/hc/ruthless for your usecase?
unless that start using that description other places
i guess i can cross that road when it comes to it
yeah i only get 2 results using that line from the desc
guess I can live w/ that. π
does file_get_contents() not work w/ the POE API ?
Don't forget to set user agents and stuff.
Hello guys, I'm looking to develop A google spreadsheet based on Js. This spreasheet would use PoE ninja to auto update prices. My main goal is to make a community tool for people to use much likely something simmilar to the Casual Exile document from Path of math, but for comparing flipping stuff more easily so the game is more affordable to people that can't make that much of currency in the league start. The goal is to make people use this document at first when they can't afford doing higher end stuff and make them transition from flipping to playing more quickly.
The project is using very basic Js as I'm not even close to being a developer myself.
I'm looking for some help doing the project with things like array manipulation and optimization. Nothing that would get much of a headache, but as I said earlier I'm not that much experienced with Js.
Here is what I'm looking to do with this spreadsheet:
- Input lifeforce prices
- Input oils , fragments, delirium orbs, etc. All that can be flipped using lifeforce (Js) - then compare the flipping value and aprox profit
- Input known valuable unique items that can flipped (compare the cost for flipping into them)
- input known valuable craftable items (+2 all skills, phys%+phys flat), output aprox profit
- input card flipping (same as others)
- input alternate quality flipping and corrupt gems flipping
- compare all methods profit range
In the end, my goal is to make a document that let's any player make a lot of currency without the need for flipping for hours or even days. I'm looking for making them do the maximum amount of profit in the least amount of time so they can play the game and enjoy themselves more.
If you're interested in helping me out, i would appreciate that and thanks everybody that read this until the end. Thanks for your time reading it.
Pm me in case π
Why would any of this require javascript
@daring moss its just at hand in Google Sheets and lets you do things in an more idiomatic programming way, if you're already a developer
I'm aware that JS is what Google offers to add more elaborate scripting to sheets, but none of what they described seems to require more than regular formulas
It's a very weird niche where if you had more development experience, why not just use a proper database too
fetching from APIs for example is far easier with access to JSON as a first class citizen
the Excel way is basically pull the full collection of objects into a sheet, then basically use its existing indices etc. In JS you do the request, map the fields you care about and lay them out in the indicies that make the most sense to you. Not saying you cant do either in either language, just saying one will look normal and programmy, and the other will look like an onion of function compisition.
Also, if the OP has any ambition at development, last SO survey clocked 65% of developers using JavaScript, its the language that runs the internet, so a great place to have some experience even if its just means making sick spreadsheets at work that are easier to maintain.
"2022 marks JavaScriptβs tenth year in a row as the most commonly used programming language."
Hrm, can you tell the rarity of an item off of https://www.pathofexile.com/developer/docs/reference#type-Item?
or is there no difference between a 2-mod rare and a 2-mod magic item?
is it one of the items in the properties array?
doesn't seem like it; here's a spine bow for reference
{
"verified": false,
"w": 2,
"h": 4,
"icon": "...",
"support": null,
"stackSize": null,
"maxStackSize": null,
"stackSizeText": null,
"league": "Crucible",
"id": "...",
"fractured": null,
"synthesized": null,
"name": "",
"typeLine": "Serrated Spine Bow",
"baseType": "Spine Bow",
"identified": true,
"itemLevel": null
}
shortened icon and id so it isn't as wide
actually I am surprised how little there is to this item
hm, maybe I'm messing this up somewhere myself
okay, properties is not it:
{
"verified": false,
"w": 2,
"h": 4,
"icon": "...",
"league": "Crucible",
"id": "...",
"sockets": [
{
"group": 0,
"attr": "D",
"sColour": "G"
},
{
"group": 0,
"attr": "D",
"sColour": "G"
}
],
"name": "",
"typeLine": "Serrated Spine Bow",
"baseType": "Spine Bow",
"identified": true,
"ilvl": 86,
"properties": [
{
"name": "Bow",
"values": [],
"displayMode": 0
},
{
"name": "Physical Damage",
"values": [
[
"64-195",
1
]
],
"displayMode": 0,
"type": 9
},
{
"name": "Critical Strike Chance",
"values": [
[
"6.50%",
0
]
],
"displayMode": 0,
"type": 12
},
{
"name": "Attacks per Second",
"values": [
[
"1.40",
0
]
],
"displayMode": 0,
"type": 13
}
],
"requirements": [
{
"name": "Level",
"values": [
[
"64",
0
]
],
"displayMode": 0,
"type": 62
},
{
"name": "Dex",
"values": [
[
"212",
0
]
],
"displayMode": 1,
"type": 64
}
],
"explicitMods": [
"61% increased Physical Damage"
],
"crucibleMods": [
"Adds 2 to 6 Physical Damage",
"15% chance to cause Bleeding on Hit"
],
"frameType": 1,
"x": 10,
"y": 8,
"inventoryId": "Stash1",
"socketedItems": [],
"crucible": {
...
}
}
there just doesn't seem to be any way of figuring out the rarity, hrm
oh properties is just how it stores mods, thought i saw that as another array somewhere
if there's genuinely nothing in the object that specifically indicates rarity then for anything with <3 mods u could check whether the name follows the format {a} {b} {baseType}
Vaal Pyramid Map π
is the basetype for those not "vaal pyramid map"
Probably - I'm just scarred from parsing guild stash audit logs.
actually that wouldn't even work for unidentified items
but stuff like eg. chaos recipe enhancer can sort unided rares from other items so it must have a property somewhere
good call ,let me check their code
oh neptune
who decided that ChaosRecipeEnhancer should be written like a mid-2000s Java enterprise app

interesting
looks like they don't filter for rarity
at least not in their companion app
that's done in the item filter entirely
@daring moss old code of mine uses type for rarity
huh i guess they put the onus on the user to use the right tab and assume any item in it is eligible for chaos recipe?
you tend to only pick up stuff your item filter marks as chaos recipe-able I guess
type?
So the type has special meaning and also indicates rarity
unless I linked a different app
But this is from a character query
type as in typeLine?
typeline is the item name in the response u got above
yeah
Sorry for the screenshot, I'm on a ferry 
"typeLine": "Serrated Spine Bow",
I'm just unsure what other type david might be talking about
My code just says .type, but maybe because it's referencing an item that's socketed into the trew
yea that doesnt seem to be right for stash items
i should probably grab the source myself to poke at it actually, 2s
Howdy hey at work rn but feel free to dm me questions about CRE or post em on our discord
i think the question atm is how the api returns item rarity
it isn't specifically a question about CRE but rather someone brought CRE up as an example for a functionality I was wondering about
Actively working on v2 btw on a separate branch, beta release to be pushed out before league launch
and cre came up as an example of an app that uses rarity to function
but my assumption after looking at CRE is that it doesn't care about rarity, only the item filter does
Our implementation is a hacky work around, as we do not have OAuth set up to access the βrealβ dev APIs
I maybe vaguely remember some GGG dev mention something about rarity along the lines of it being hacky in general, but I might be wrong on that
The official APIs will give you much better item metadata including item class and rarity
I mean, the data I fetched is from the official API
and it didn't come with rarity 
which lines up with their documentation https://www.pathofexile.com/developer/docs/reference#type-Item
Note that there may be differences between the river (psapi) and account stashes.
at least according to the docs they should both handle in Item objects
idk if icon contains any app-specific data but it is just a URL to GGG's CDN which seems to contain some encoded data
ah right it's only a string, for a min i thought that u omitted it because it was some giant object
0 results found for rarity wtf hah
i refuse to believe it's not returned at all 
Yeah so for CRE someone said it we just have it in the filter
I canβt believe itβs not in the actual API lmao thereβs no shot
but unless i'm misinterpreting what one of the properties like w or h are and they're not width and height it's just not in there
It has to be there
w and h iirc are about the item's position in the stash
nah theres an x and y for that
I cant look at the code rn but Iβll post here once I can see what the name of the property is
weird, CRE for me will always perfectly pick out rares in a tab of mixed rarities
ohh
iirc w and h are item dimensions since u can also add those properties to item filters
Yeah I know we have to have the property there but idk what the name is
w/h are how many stash slots it takes up then, yeah
i do it to remove any onehand weapons that aren't 1x3
maybe those non-rare items are not the correct ilvl?

any chance u can do a get for an unidentified magic and rare item so we can compare each?
they are afaik
although if meatbox says theyre doing a hacky way that avoids the actual api then it probably isn't going to help with working out where it is in the api response
oh ok well that is NOT what i expected 
item.frameType != 2
yeah so we have that so that's rarity
for some reason wtf is frametype
(we have a !=2 so it skips any item that isn't rare in a loop in our code)
alright there it is
nice find man that's wild
Items have different frames in-game, thus frame type π
I knew it
the yellow-goldish thing being the frame here
ah yea it's right there in the response for that spinebow too "frameType": 1,
nice
i just completely missed that property when i was scanning through what came back from ur request before 
(itemframetype.dat64 also has a reference to rarity.dat64)
to be fair it was a bulky request
compared to the bullshit we're throwing around at work it's pretty lightweight
haha
it took 4 people but we finally figured out where it was 
if anyone from ggg's webdev is reading this maybe it's worth including this in docs
yeah fields are scuffed af sometimes.
if anyone wants their brain to break here's how we get an item base type (e.g. glove, helmet, boot) deriving from the item image 
public void GetItemClass()
{
//https://web.poecdn.com/gen/image/WzI1LDE0LHsiZiI6IjJESXRlbXMvQXJtb3Vycy9IZWxtZXRzL0hlbG1ldFN0ckRleDciLCJ3IjoyLCJoIjoyLCJzY2FsZSI6MX1d/0884b27765/HelmetStrDex7.png
var urlParts = icon.Split("/".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
string encodedPart = urlParts[4];
while (encodedPart.Length % 4 != 0)
{
encodedPart += "=";
}
string decodedItemData = Encoding.UTF8.GetString(Convert.FromBase64String(encodedPart));
var iconParts = decodedItemData.Split('/');
string itemClass = iconParts[1];
switch (itemClass)
{
case "Armours" when iconParts[2] == "Shields":
itemClass = "OneHandWeapons";
break;
case "Weapons":
case "Armours":
itemClass = iconParts[2];
break;
}
ItemType = itemClass;
}
oh neptune

you don't get the basetype as is?
cre isn't using sapi so i guess they have to work off the image
wait so is that human readable when converted to utf8?
that's pretty amusing
In the new-style CDN URLs, the first part is an base64-encoded JSON dict and the second part is an opaque key that you're not supposed to know how to make.
I wonder what the json dict means
The dict contains instructions to the web server on how to generate the image for different item types like maps and flasks.
It has different contents for different item types.
oho, interesting
just like { field1: "some value" }
contains a whole json object in the url basically
Many items are composed out of several images, like maps have the base plate and the glyph as separate assets, composed with some recolouring as it generates.
Flasks have like four layers including the liquid.
The CDN is friendly enough to serve precomposed images, given proper URLs.
WzI1LDE0LHsiZiI6IjJESXRlbXMvQXJtb3Vycy9IZWxtZXRzL0hlbG1ldFN0ckRleDciLCJ3IjoyLCJoIjoyLCJzY2FsZSI6MX1d
(with padding) decodes to:
[
25,
14,
{
"f": "2DItems/Armours/Helmets/HelmetStrDex7",
"w": 2,
"h": 2,
"scale": 1
}
]
so we, in that code i shared, decode it, and extract the asset path (folder) name for a given item class
from the field named "f"
very neat workaround
and you probably ask why don't u just pull from the nice human readable text in the URL example i posted with the code
it's because not all items are nicely named "HelmetStrDex" etc. some things like rings or amulets might not explicitly contain the item class in teh asset name
once we get the full access to the dev api via oauth i can retire the beautiful code hto

archive it for posterity 
@bright ridge what tool is this for?
Chaos Recipe Enhancer
Tyty
wait why does this sound like it is a massive undertaking that is next to impossible to do
couldn't you make use of the new public client auth flow?
I could but I want to be able to access current and potentially new scopes added that are I currently only available with a private client
I was able to use Exilences implementation of OAuth and have an API deployed
Just got busy at work so never got the client credentials from GGG and hooked my API up to the desktop app
As for rewriting our api logic it needed a good cleaning anyways
After that itβs just a matter of good programing patterns to make the swap to different APIs seamless
new tree data when?
Atlas tree (no ruthless yet, new repo)
https://github.com/grindinggear/atlastree-export
small delay on passive tree
I think there were some other smaller ones, but Emmitt's was the best one
poeplanner guy has one
I need Currency list to my site, any idea what and where use ?
https://poedb.tw/us/atlas-skill-tree 3.22 atlastree
PoEDB provides things come out each league, as well as items, uniques, skills and passives. Path of Exile Wiki editing functions.
passive tree up (sans tattoo stuff)
working on ruthless passive tree now (which is just ascendancy changes afaik)
OK. Is there some API for JSON data of Currency I need simple list of Currency ?
you could use poe.ninja api https://github.com/5k-mirrors/misc-poe-tools/blob/master/doc/poe-ninja-api.md
hymn I saw that and I thought is any other source...
there should be no source other than poe.ninja
If all you're looking for are the names, abbreviations and art paths, there's resources like https://www.pathofexile.com/api/trade/data/static.
Will there be a preload/torrent for Content.ggpk? (There's some things I'd like to parse before league start, if possible)
torrent doesn't contain any required .dat files
Oh it's not .dat I'm interested in, it's the art for the new uniques
torrent file is usually available 16-24 hours before the server up
I'll leave the .dat parsing to you (just noticed the poedb tag) :p.
Gotcha, should be fine then. It's for a personal unique collection project
Some other types of (often small) files can be missing from the torrent due to scrubbing of whole bundles to remove the DATs.
Ah, guess I'll cross my fingers then. Worst case I'll grab em after launch, not like I'm gonna end up finding all the new uniques first day anyhow
you'll need to wait for a couple days
I thought I pushed an update to the beta branch a month ago but forgot to include the update manifest with it so it'll never finish the update completely
if its known its ok, ty xD
Yo, what is the best build planner on OS X currently? I've tried PoB in Wine, but it didn't run quite as well as I'd hoped. Are any online build planners up to the task these days?
none as exhaustive
did you try https://github.com/bernhardfritz/pobfrontend @wise forge
not yet; will give it a shot. thanks!
This is working perfectly, thanks again! My CPU usage isn't pegged at 100% when I have the tree open 
nice, didnt work on my old macbook as its ui scaling was too harsh but glad to hear it works nicely π
Thanks for the speedy atlas tree export this time around! https://atlas.omri.io is updated for 3.22 π
Created by /u/IcyRespawn
hey i just started to work with some poe-go and i'm not sure how does change_id works and the link to poe.ninja that was supposed to Get the data seems not to be working ("http://api.poe.ninja/api/Data/GetStats") and I wonder how can i get item list from the trade, it does not need to be refreshed every changeId
This is the Bast advice at this moment I received. Why there is no list such directors of resources somewhere and I must ask people everywhere ? π ...
I think I will use this resource and poe ninja together...
https://github.com/grindinggear/skilltree-export/tree/master
We aim to update this preview to include passive skill tree tattoo data on Wednesday 16th August (NSZT).
because this isn't a "public" resource. It is used internally by the trade site and there's no promises about it being there a day from now
hey is there a dat reader for JS?
or how difficult would it be to make one (for steam version)?
what is GGG's stance on embedding their (league) promotional art/videos in an app? e.g. to "theme" it for the current league. Is that generally a no?
the official support apis: https://www.pathofexile.com/developer/docs/reference
or my collections: https://poedb.tw/poe-api
Then why this is not documented in API ? And people must ask other to reach this ?
because it isn't supposed to be documented
Why doesn't everyone know where the employee entrance for a McDonald's is?
Because emplye should know, simple and all developers should for that is API, then for what is API then ?
for internal use?
an API isn't always meant to be consumed by external developers
This endpoint is clearly made to fit the trade site
I'm internal registerd developer if I'm using OAuth or not ?
No
do you work for ggg
No but I have registered app
then you're not an internal developer
Then if all uses link not described URL in API is illegal ?? π
you also shouldnt expect it to behave forever as it does
If you're expecting exhaustive curated data for every aspect of the game, you're probably doing community tools for the wrong game.
The vibrant tools community has grown much thanks to self-sourcing everything needed in a hands-off approach. Providing the level of things that you believe there should be would come at a significant engineering costs and I'd like to then ask which parts of the game they should focus less on developing.
Not to mention, part of the charm of the game is the lack of immediately available information, even if data mining sites have skewed the balance in a way that definitely was not originally intended.
People have gotten around with responsible use of undocumented API endpoints for near a decade, the formally documented endpoints and oauth are quite new initiatives to provide a bit more legality and guarantees about services.
And yes, you have opinions about how particular endpoints work. That doesn't matter.
I believe it is also about protecting the user?
You're like a year too late to enjoy the fruits of community efforts like RePoE that provided easy access to curated information.
because expecting them to pass around their session ID was "fine" while there was like... one tool around that was more of a toy than anything
Good old Procurement era π
Most of URL links from this link https://poedb.tw/poe-api is not provided in API and therefor is illegal, not only that, GGG forbids the use of POESESSID as is many times offical discussed :
https://www.pathofexile.com/forum/view-thread/3328601
Then there is API or not, simple...
what do you mean, illegal?

nobody talked about legality anywhere
(ToU forbids reverse engineering of the workings of the web site, etc.)
The ToU forbids a lot of things.
becouse is not documented as public resource as entrance for emploee for McDonald's π
and "by using this site you agree to the ToS" usually isn't binding
I understand it more as a grey area. GGG doesn't endorse usage of these endpoints (as they aren't publicly documented) but they also don't seem to go on witch hunts for every single person who calls them manually
by all means send ggg an email to ask for express permission
I should frame my rejection emails.
although u may also force a more official response to everyone using those resources
to be fair, it probably also just is extremely hard to tell "illegitimate" use of those endpoints from legitimate ones
if there's an argument about this I could much rather see it crippling the trade site itself
i meant a library, not a viewer. though i guess its somewhere in the sources for that tool? does it build libooz to webassembly or smth?
ah ye i see ooz-wasm
Has anyone successfully used pako (https://www.npmjs.com/package/pako) to decode/inflate POB's build code format?
I've tried a bunch of things:
- replacing _ and - with / and +
- atob() that
- pako.inflate() that
But to no avail, none of these turned out to be something pako could inflate.
cc @carmine merlin maybe
You may have the substitution wrong:
local xmlText = Inflate(common.base64.decode(data:gsub("-","+"):gsub("_","/")))
Note that atob gets you something text:y, maybe investigate if the library does some sort of text-based transcoding before it tries to inflate.
Hm that's a good point, looks like atob works with asci and not utf8
If you want a command line you can grab intermediary results from:
echo -n 'buildcode' | tr _- /+ | base64 -d | openssl zlib -d
Like pulling out the data after the base64 -d step into a file and compare it to what you've got from your logic.
alright, figured it out. Here's the solution in case anyone else ever needs it:
function pobBase64ToXml(base64: string) {
const raw = base64.replaceAll("_", "/").replaceAll("-", "+");
const text = atob(raw);
const length = text.length;
const bytes = new Uint8Array(length);
for (let i = 0; i < length; i++) {
bytes[i] = text.charCodeAt(i);
}
return pako.inflate(bytes, { to: "string" });
}
This decodes a base64 POB code back into its original XML.
The trick was that the output of atob() needed one extra step to get back proper utf8 chars.
@worthy cape thanks for the pointers
I actually fell into a similar trap when trying to implement it in Node just now, not really knowing the language.
I used TextEncoder which encoded the codepoints of the string from atob as UTF-8 code units, rather than the codepoint value directly interpreted as a byte.
yeah I was trying the same thing for a while
Ye i remember struggling with the same shit
Does POB support pob: url protocol for full build codes? or just shortened urls (pobbin, pastebin, poeninja)? Looking at PobLink it only shows code for url shorteners (likely due to the fact that it works on link in browser)
Full build codes are too long for URLs, so there are just several sites that have hardcoded support
Library/cli for working with files just lives in the same repo, but published on npm as standalone
If you mean pathofexile-dat it doesn't work unfortunately. There's no type information exported in package.json, and I can't import modules under /dist because package.json hides them
like if i import these, i get ERR_PACKAGE_PATH_NOT_EXPORTED
import {
FileLoader,
SteamBundleLoader
} from 'pathofexile-dat/dist/cli/bundle-loaders.js'
and if i import this, i get "cannot find corresponding type declarations"
import * as POE from 'pathofexile-dat/bundles.js'
specifically, package.json is missing types field, and some modules like the actual bundle loader are hidden in CLI folder which is not exported at all
is it intentional that we can't filter poe.ninja by support gems linked to main skill any more?
https://pbs.twimg.com/media/F26JZ5KXMAAQUtQ?format=png&name=small
Any idea how I can get this tool?
looks like LiveSplit
you could try this new app too https://github.com/exilekit/PoESplit/
this will no longer be happening (the tattoo data in the export)
Novynn, I've been using a public oauth client for a bit now and was wondering, what would happen if someone took my app's client ID to auth for something that isn't the intended use case? e.g. could someone go out of their way to get my app flagged for hitting rate limits too often even when I do everything in my power to adhere to the ratelimits set by your API?
yes, that's the consequence of public clients
though since it's understood that that could happen the rate-limits are per-account rather than per-client
What's a good trading tool? I use an older defunct POE Trades Companion. It still works but I'm curious what else is out there
https://github.com/SnosMe/awakened-poe-trade the best one
Oh yea, love that for price checking and have donated! Any suggestions for incoming trades and management?
Is anyone here interfacing with the HTTP API via Rust? if so, how are you managing the ratelimits?
I've been looking around different crates and couldn't find anything that'd properly accomodate the requirements set by GGG and I'm a bit scared of implementing it myself as I don't enough about tread-safety to make this work without introducing problems
I think there is a client out there that implemented it π€
as in specific for poe? the only one I found is https://crates.io/crates/ezomyte
and it hasn't been updates for 5 years (also doesn't implement ratelimits as far as I can see)
Mh no can't find it, I started one once but that thing isnt fully implemented and might actually be broken
Yes a poe rate limiter
yup, can only find ezomyte and one other (https://crates.io/crates/apiety) which is even older
I don't recommend using it https://github.com/Dav1dde/poe-rs/blob/master/src/client.rs but it did work for me for a while and maybe some inspiration (doesn't implement the headers e.g.)
interesting, you implemented the rate limiting yourself then, i see
and you used a semaphore to count?
Yeah that's pretty old code and I wouldn't do it like that again
the semaphore is definitely an interesting choice
But I dropped the project which needed it so I never finished it


