#tooldev-general
1 messages · Page 4 of 1
ah you have them extracted
don't use 4k version tho, they're different
But yeah, squint at the files and see if you can backtrack them to UIImages1
Art/2DArt/UIImages/InGame/ItemsHeaderUnique*, I reckon.
Yeah that's the ones, trying to get them out now
I also figured out why I couldnt find them, because my editor properly decoded the text (utf-16) but the search didnt match because it searched with utf-8 -_-
thanks Kate
Yeah, just had the same with both glogg and ripgrep.
Hey, I'm new there, is there any actual parsed ggpk data in a json format (interested in weights of gems, fossils, essences etc.)?
RePoE was the go-to place for most of that kind of data, but it's currently not maintained and stale for 3.20.
poe-dat-schema is probably your best bet now
That took way too long
Tried to parse ggpk file using RePoe - getting this error, what am I doing wrong? Path to ggpk is correct
Current RePoE doesn't handle the removal of DAT files in 3.20. It needs to be adapted to understand DAT64 (or possibly DATL) files.
It needs a PyPoE with updated dat reading logic and some spec updates as well as adaptation to some of the things that changed in 3.20.
See #tooldev-general message for the discussion about it back then.
I hacked it into working with the wiki PyPoE fork but it isn't meant to support external consumers and I can't step up to maintain RePoE.
Alright, thanks
@worthy cape what command you used to convert the map image to red and combine it with the base image?
https://github.com/Project-Path-of-Exile-Wiki/PyPoE/blob/ca073d6c4c72898788c4e2f037e9985fc79eba34/PyPoE/cli/exporter/wiki/parsers/item.py#L3933-L3938
_colorize_rgba: https://github.com/Project-Path-of-Exile-Wiki/PyPoE/blob/ca073d6c4c72898788c4e2f037e9985fc79eba34/PyPoE/cli/exporter/wiki/parsers/item.py#L111-L117
https://pillow.readthedocs.io/en/stable/reference/ImageOps.html#PIL.ImageOps.colorize
Oh wait, wrong section.
This is the logic, ignore the extra saves/loads to disk, never got around cleaning those up: https://github.com/Project-Path-of-Exile-Wiki/PyPoE/blob/ca073d6c4c72898788c4e2f037e9985fc79eba34/PyPoE/cli/exporter/wiki/parsers/item.py#L4159-L4179
It used to use ImageMagick to do the colorization and compositing in the past, but we got rid of that dependency as they didn't have BC7 support and it was a chore to install.
(magick now has BC7 since late 2021)
what command you used in imageMagick?
convert Abyss.png -fill red -fuzz 50% -opaque white AbyssRed.png
convert Base16.png AbyssRed.png -gravity center -composite AbyssBase16.png
Here I used colorize rather than a straight-up multiply to make the glyph stand out better like it does in the game.
Git history suggests this:
f'magick convert "{ico}" -fill rgb({color}) -colorize 100 "{ico}"'`
f'magick composite -gravity center "{ico}" "{base_ico}" "{ico}"'

What's the best way to get offers from trade site? Let's say, I want to get all fertile catalysts offers with stack size 10+ and their prices. The most stupid and straightforward way is to hardcode query and then scrap data from page but I need something more optimal.
@rapid schooner how you will use this data, have you looked into poe.ninja api
PoEDB provides things come out each league, as well as items, uniques, skills and passives. Path of Exile Wiki editing functions.
Does poe.ninja have api? I didnt find that section on site. Planning to make bulk price checking tool to save some time
Thanks I'll look into this
poeninja dogfoods its own api, use the browser tools network tab to see the calls it's using
@rapid schooner poe.ninja prices are ignoring bulk concept, and requesting trade website you won't go far with its rate-limits. This is a new tool but does it correctly https://www.reddit.com/r/pathofexile/comments/10eg8xr/poestack_a_tool_ive_been_developing_help_you_more/
What exactly am I looking for? Im not very experienced with doing such things. Sry for dumb questions
Thanks, will watch video now
Thank you
Couple questions about PublicStashChange API:
- I can't seem to find any indicator of when the change was made. can I only know the age of listed itens if I'm processing in realtime? can I tell if I'm "catching up" or falling behind the current changes (particularly given rate limiting)?
- Is the PublicStashChange ID supposed to repeat if data from the same stash tab reappear? If an item is added to a tab for example, or a note changes on an item. I understood from the docs that if a tab was unlisted it would would only include the ID (so I can unlist the itens that were on it), but I've been running the stream for a bit and haven't ran into any repeated stash ids.
- theoretically the delta change between your current and next id (more specifically some average over N requests) should tell catching/falling. alternative is to query https://www.pathofexile.com/api/trade/data/change-ids and see how far you are (this id is realtime, not 5-min delayed)
- yes, they repeat
can you elaborate on #1? I don't see how can I can tell from comparing ids. do they follow a pattern anyhow? If I see the latest how can I tell how far am i?
#2 either I have something wrong in my code or I need to process more data cause I havent seen a repeat in 100k stashes
@oak salmon 1) their backend has 5 shards, you can compare pairwise 2) it will take 5min for test but you will be sure at least, add condition in code to find stash by your accountname, then change stash in the game, wait, compare ids
If I see the latest how can I tell how far am i?
you can't. If you have data on the rate of change, you can approximate a bit, say normally it's N changes per 24h, and you are at (REALTIME_ID - YOUR_ID) === N/2, then currently you're reading stashes that people last touched 12h ago
ok, I see what you mean now, how the id is made up of five incrementing numbers, I can work with that
hmm, does anyone know if new api tool applications are active atm? sent a mail last monday, didn't get a response yet
mine took about a week, got it 5 days ago
ah that gives me hope, ty
Why are projects never easy, I was looking into extracting ggpk stuff for a .Net project, but LibGGPK2 doesn’t support steam files and LibGGPK3 doesn’t support bin64 files as well, so I figured I’d look into just calling PoB’s static data lua and converting it to json… it works but the format is totally wonk and I’m having to re-parse the key value pairs that lua gives back from its LuaTable format
lua index 1 is strange, but other than that it shouldnt be too bad?
also I think you can just get PoB to output it as a converted json
oO(make C# interop bindings to Bun)
What amount of data access are you looking for? Just bundled file access, DAT64 scaffolding, specs for those?
LibGGPK2 does support Steam version
https://github.com/aianlinb/LibGGPK2/blob/master/LibGGPK2/GGPKContainer.cs#L46
If you are using VisualGGPK2, just append -steam to the startup command line. Or use the SteamMode.bat in release zip file.
Getting response 403, what am I doing wrong?
random guess, bad user agent
There is a user agent format described here: https://www.pathofexile.com/developer/docs which you might be able to match. Not sure about the details, havent messed with the trade api myself and for everything else I do have an oauth token
Thanks
Oh, sick
What's the limit of trade-site api calls per minute (or hour)?
Thank you, now i see
Hi, could anyone tell me where I can find information about hashes_ex? I'm trying to understand the relation between hashes_ex and regular node skill hash so I can get cluster jewel passives allocated when I import my char to pob on my personal side project. thx
Not sure if they've been documented on the forum somewhere but you might be able to squint at the PoB source code to infer their meaning.
https://github.com/PathOfBuildingCommunity/PathOfBuilding/blob/e42c033ad0d1b46f714f902d00fd11fe9885afc2/src/Classes/PassiveSpec.lua#L1169-L1186
https://github.com/PathOfBuildingCommunity/PathOfBuilding/blob/e42c033ad0d1b46f714f902d00fd11fe9885afc2/src/Classes/PassiveSpec.lua#L1214-L1217
https://github.com/PathOfBuildingCommunity/PathOfBuilding/blob/e42c033ad0d1b46f714f902d00fd11fe9885afc2/src/Classes/PassiveSpec.lua#L1497-L1510
!tabs
Stash tab sale when? Generally, stash tabs are on sale every three weeks starting the second weekend of the league - the subreddit has an estimated stash tab sale day in the sidebar
How do I get points? Purchasing the First Blood starter pack is recommended, as it has 200 points, a stash tab, and a weapon effect ||https://www.pathofexile.com/purchase#FirstBloodPack|| Alternatively, supporter packs are more cost effective than individual points, and give you extra stuff too.
Which ones do I get? Recommended first tabs are:
- Currency Tab
- Upgrade to Premium (easier to list your items for trade)
- Map tab (after finishing the campaign)
_ And then what?_ If you're focussing on something specific eg. essence farming, picking up the essence tab might be a good investment. The same goes for the divination, metamorph, and other specialised tabs. However, you may find you can handle things with a combination of regular tabs or a quad tab (and the extra storage space doesn't hurt either)
You may want to run commands in a channel more appropriate for it, this seems off topic for tool development.
im super sorry lol this discord doesnt have a channel specifically for commands so i just picked the most bottom channel 😭
Fwiw, PoB actually does cluster jewel allocation wrong when importing characters. There are edge cases where allocated nodes in-game don't get allocated in PoB
thx
Did anyone try to make requests to tradesite api using proxy?
why
how is extended hashes being used? I got this
[hashes_ex] => Array
(
[0] => 0
[1] => 1
[2] => 5
[3] => 7
[4] => 9
[5] => 10
[6] => 11
[7] => 12
[8] => 13
[9] => 15
[10] => 16
[11] => 30
[12] => 32
[13] => 33
[14] => 35
)
from https://www.pathofexile.com/character-window/get-passive-skills?accountName=Mathil&realm=pc&character=PrettyLimitedPowerTbh
but had no idea and the website https://www.pathofexile.com/developer/docs/reference#extra don't have any explain
also, they have empty extended hashes from url if you click passive from character https://www.pathofexile.com/fullscreen-passive-skill-tree/3.20.2/AAAABgMCbQECBLMFQgj0EFEQWBEtE3EVVhZvFy8YXRo4HMQc3B0UHxgfxyBuJKonLyt4LJwtfTD4Nuk6WDrYOz88BT77QXJBlkWdSi5Kn0yLTLNQMFH7U1JVxlXWWK5Z816lZOdmVGaeZ3FqG2pDa9t2EXyDgKSCm4PbhXuGyom8jmSOvo8aj0aQVZD6ksGa4JtRm6Gg5qHHogCnCKelqyqt8a6zrv-1BLb6uF27AbyavOrAZs0W0B_Q9dLF1AfVi9Wm217cjd2M323fsONq6-7sOO9L73zv6_Af96b60v75AAQnAj77uhqhx5Y2qyruqbhd?accountName=Mathil&realm=pc&characterName=PrettyLimitedPowerTbh
does anyone know the boundaries for the monster resistance icons shown under the health bar?
> 0 >
Literally whether it's greater or lesser than 0
At 0 there's no icon
Same as the old text based display
You can confirm this in pvp if you're uncertain
or in town iirc
Right, yeah
umm, all enchants from heist are removed, what does Tempering Orb do now? any patchnotes
are they? I havnt seen anything around that
first thought smth wrong w my code, then checked and no such stats on trade too
I know they changed the descriptions in 3.20.2, would be odd to remove them so soon after
Updated various Heist Enchantment descriptions to clarify they apply to Explicit modifiers.
https://www.pathofexile.com/forum/view-thread/3351563/page/1#p24893821
only patches more recent iirc are the 2 hotfixes, neither of which mention anything related to it
and heist enchants definitely existed earlier this week
so either unannounced change, or the wording change messed you up
right, ty
np
Finally documented the thing I use for exporting data https://github.com/SnosMe/poe-dat-viewer/blob/master/lib/README.md
Anybody know how foiled items in ItemVisualIdentity are handled?
isnt it just a shader
@formal kraken The new foils are gradient textures with some shaders in Draw2D.hlsl.
Mined gradients here, at least the ones used: https://www.poewiki.net/wiki/List_of_Voidborn_foil_unique_items
(there's one or two more that are unused or for other content)
How does the wiki generate the foil image version? Or is it grabbed from the CDN?
I don't think we do much in the way of visuals. No idea about old foils and the new ones are just tabulated here with the gradient images as a hint.
e.g. https://www.poewiki.net/wiki/Atziri's_Reflection -> Alternate Artwork
oh mh that's an old foil
Art/2DArt/Lookup/Gradients/*.dds for the gradients
I suspect that the current effects are probably the same old Draw2D logic.
Using the same thing for both the tooltips and item images.
Didn't get around looking into any captures as I haven't blown my key yet.
kk thanks, I am beginning to think this doesn't matter anyways for my usecase
just wrote a rushed hacky CLI tool to find "usable" timeless jewels in your stash tabs in a fit of madness from running a bunch of 5-ways and having no idea how to sell them
seems like I can't share images yet sadly
that sounds cool
still need to figure out how to handle glorious vanity small passives
the data i've found doesn't seem to have them: https://github.com/KeshHere/TimelessJewelData
not sure if there's a better source out there or whatever PoB Community uses
hm is there any tool still online that tracks unique stash tab contents? Cant seem to find any
Vague memories of that it's one of the things that is annoying or impossible to get at through the API.
yeah i think the one i remember used the trade api to track it
They treat each unique category as its own stash tab, so if you include it in a snapshot it eats up a lot of your ratelimit to request each sub tab
😦
Same issue with map tabs, you can track them but only if you are doing the tracking in way that it's okay if a update takes like 30 mins
Ladder for tracking of Unique Items found in Path of Exile
if your just looking through a few seeds it easy enough to generate them on the fly (theres tons of tools doing something similar),
if your looking through hundreds I would use LuTs, PoB uses these LuTs: https://github.com/Regisle/TimelessJewelData/tree/main (they havnt been updated to fix the curse issue yet but theres a generator branch if you want to generate them yourself)
current scope is however many can fit into N account stash tabs before GGG pulls out the ol' rate limiter on me, so this looks promising
Readme does perplex me a bit, referencing some .json files that seem to not exist (Jewel_Node_Link.json) or assumed I somehow got a copy of (alternate_passive_additions.json)
yeah the LuT only stores the actual numerical outputs of the prng, I think we got rid of Jewel_Node_Link.json at some point because it went out of date when ggg shuffled some nodes around, you can use whatever method you want but I should probs include an updated one in that repository when I update them for next league,
PoB has its own internal one, its basically just what nodes are in range of what jewel
and alternate_passive_additions.json and alternate_passive_skills.json both come from the ggpk (theres one included with the generator but its out of date for curse nodes from GV)
keshes tool is popular I would be surprised if it didnt have GV small nodes in its csvs, and it might be a bit easier to work with, the LuTs I linked are only needed if speed is the biggest concern
ahh the "all csvs" are only 21mb total, where GV compressed byitself is like 19.2 with the minimal data so maybe his doesnt include those
gotcha, thanks for pointing out where those files went! I'll probably switch over to that dataset once start implementing Glorious Vanity value stuff (aka once I figure out why people actually use them).
and it'll also force me to refactor my current memory hog situation (I just glug all the seed data in-memory and balloon RAM usage to 1.5GB lol)
Very cool thanks ❤️
PoEDB (https://poedb.tw/us/)
A number of improvements have been made to the PoEDB website recently, including
- The content width has been increased from 1140px to 1320px, and you can see more content on a wide screen
- All fonts increased by one level
- Added level chart for Gem skills
- When the unique item has damage/defence affixes, the above attributes will also be modified
- Added the display of the Ascendancy tree
- Added the Passive title background image
- Added the Passive Mastery title background image, and the display of affixes is beautified
- Added the Monster title background image, the resistance icon, and the area information
- Added the Quest title background image
- Added the Atlas location display
- Added the Chapter location display
- Added the The Pantheon location display
- Separation of general Bestiary Recipes and HardMode Recipes, rewrite the Recipes
- Added the Bestiary image
- Added the Map Items background
- Modified the list layout of many pages to two columns to make mobile browsing smoother
PoEDB provides things come out each league, as well as items, uniques, skills and passives. Path of Exile Wiki editing functions.
You would think that it'd just be the one stash tab and the type categories are just a sort of enhanced filter...
I don't get why they'd set it up on the back-end to be multiple stash tabs like that
It might have to do with the public stash stream, if the whole thing was one tab any change would mean the whole tab would be written to the stream which could be a lot of data for some players (this would be even more impactful on the map tab which is the first tab they created that functions this way). Probably just more efficient on their end to work with smaller stash tabs but it does have some downsides on the API side
The live search for trade?
I'm not sure how trade works internally, but the way it works for third parties is they have a stream of public stash tab changes. When anyone in game makes a change to a stash tab that is public the entire tab not just the changes is written to the stream so third parties can update their information on listings/whatever they are doing with the data. The more items in a single "tab" (or sub tab) the bigger each of these updates will be. So splitting things into smaller sub tabs will cause smaller updates.
Yikes

I don't have any information on how they do internal stuff but it would make more sense that they didn't come up with this concept just for external use and the stream is used internally as well but who knows
I believe it's mostly tied to the UI with the buttons to change tabs and the lazy loading of each tab inventory.
I mean ... item enters stash tab, normally id expect there'd be something that gives just that specific item and what tab it entered etc
For both map and unique tabs, filter highlighting is mostly smoke and mirrors based on static or cached data.
So theoretically it should be possible to just push the new item or changes in the stash to the stream
Even for quad tabs vs. regular tabs, there's a noticeable difference in load time.
Without needing to push the whole stash
The trade river is very fun indeed. One good reason for pushing atomic tabs is that you always have a full view on a tab. There's no good point to start if all you have is deltas from the dawn of time.
You could envisionably have some mix of keyframes and deltas, but that makes things more complicated and might be more state to track both on sender and receiver.
"something changes in a tab? pull whole state and schlep it out on the wire"
There is a way to do it for sure but this way does have some advantages. It seems more fault tolerant if you miss some updates or want to skip ahead to catch up you might have a few duplicate items/unlisted items hanging around for a bit but if they update any item in that tab everything will be fixed
Well it wouldn't just be deltas.
There would still be periodic updates for the full tab
Plus I don't think GGG themselves need the deltas for anything so it would be extra work on their end
my guess is internally tabs were saved to the database as a full tab at a time, then when they made public tabs they just mirrored that stream over to the
"river" filtering out any non-public tabs
this also makes sense from the public stash perspective, rather than having to keep track of potentially hundreds or thousands of changes since the tab was last "saved" you just push the current state of said tab, dont need to actualy track what happened in the tab just how it ended up
Yeah and while this way isn't as intuitive right off the bat after working with it for a bit I think I prefer this approach
Anyone able to log on to poeplanner successfully? Doesn't work for me.
less AS but higher single hit, what if they're slowing down the game, so servers can be run at 20 tick rate in poe2 
trying out VSStudio's JSON -> C# feature on the passive skill tree, maybe not the best idea:
tooldev adjacent question, I have a PR that I manage for aurabot export functionality in PoB. I have another dev who wants to add a commit to the PR, but I can't seem to find the button to add him as a contributor
heres the PR in question
just not sure what hoops I have to jump through to allow him to push a commit
IIRC, it's on your own repository.
Normally there's a bit of inheritance from the parent repo somehow, but I'm not sure about the particulars there. It's always been a bit confusing.
alright, I think I did it right if thats the case then
does seem a bit more convoluted than I expected
There's the option to allow maintainers access, which you set on the PR itself.
Then there's explicitly adding collaborators to your whole fork.
Thanks!
help, what am I doing wrong? https://gist.github.com/AnSq/11c8f6bd6528df845fb1ae1f423ccd11
btw if you change your code-block markdown from json to jsonc it will handle comments nicely. (in README.md)
Here's hoping that I didn't break anything in ooz 😉
the easiest way is for him to make PR against your fork on the branch the PR is based off, if you accept said PR itll be merged in, and will show up as a commit for your PR
What did you change? 👀
Nothing since I added SIMDe for cross-platform SIMD. Probably.
Heh, I was going to test the node tool linked above in a container VM but got royally sidetracked by that my IPv6 suddenly not routing.
I did not expect you to reply so fast 
Suitably deep in the rabbit hole, I finally got my network fixed so I could actually install the software:
RuntimeError: abort(RuntimeError: abort(CompileError: WebAssembly.instantiate(): Compiling function #3 failed: Wasm SIMD unsupported @+582). Build with -s ASSERTIONS=1 for more info.). Build with -s ASSERTIONS=1 for more info.
at process.abort (/usr/local/lib/node_modules/pathofexile-dat/node_modules/ooz-wasm/build/ooz.js:9:6498)
at process.emit (node:events:512:28)
at emit (node:internal/process/promises:150:20)
at processPromiseRejections (node:internal/process/promises:284:27)
at process.processTicksAndRejections (node:internal/process/task_queues:96:32)
Node.js v19.6.1
Guessing that whatever the Docker container node:latest is doesn't have the cool extensions enabled or something about CPU capabilities that doesn't carry into the container.
sounds like it compiles to wasm with simd but runs on a platform without simd
bool CpuFeatures::SupportsWasmSimd128() {
#if V8_ENABLE_WEBASSEMBLY
if (IsSupported(SSE4_1)) return true;
if (v8_flags.wasm_simd_ssse3_codegen && IsSupported(SSSE3)) return true;
#endif // V8_ENABLE_WEBASSEMBLY
return false;
}
Oh for crying out loud.
The outer VM was configured with the default qemu CPU type of kvm64 which is a very conservative setting to make it possible to migrate VMs between cluster hosts.
Something more akin to host would be preferred here.
why is this relevant for node/wasm?
Based on the error message, ooz-wasm uses SIMD, which doesn't seem to have any form of scalar fallback path.
but it's compiled to WASM, if V8 has WASM SIMD enabled, it should run no matter if the CPU supports it nor not?
Deep in the guts of function-body-decoder-impl.h this seems to be run in read_value_type, I assume that the code is using those wide registers and it's a hard requirement that the platform has SSE4.1 or possibly SSSE3:
case kS128Code: {
if (!VALIDATE(CheckHardwareSupportsSimd())) {
DecodeError<ValidationTag>(decoder, pc, "Wasm SIMD unsupported");
return kWasmBottom;
}
return kWasmS128;
}
Ah I see, I thought the error was coming from V8's instantiate not from running any code
aka it read simd instructions without simd support
I guess it's raised from when it's parsing the WASM bytecode itself.
oh function-body-decoder-impl.h is V8/node code not ooz ..
Yeah, that was it. Enabled a cooler machine type on the VM and now I'm like OP:
RuntimeError: abort(TypeError: Cannot read properties of undefined (reading 'filter')). Build with -s ASSERTIONS=1 for more info.
should go back to bed
Your problem is that you do not have a files part in your config.json, add an empty "files": [], and it'll be happy.
The library has a whole bunch of unguarded statements like const files = config.files.filter(path => !isInsideSprite(path)) which will blow up unceremoniously if you're missing that key.
(I have no idea what I'm doing in this ecosystem, it's very foreign to me)
Just woke up and there was a huge investigation
updated, run npm update --global pathofexile-dat
Hey there, quick question since I cannot find the info myself. Is there a way to get quest progression data for a character? Just general info about what quests are active for the char and stuff like that.
nothing like that. closest thing will be watching clientlog.txt for "green" lines
Thanks for letting me know, didn't know that was an option. Might be able to work with that ❤️
Hey, this is kind of niche, but is it known that summon phantasm gives attacks the spell tag in the context of certain supports?
this setup isnt working in pob, even tho it works ingame for whatever reason
atm i've only found faster casting to work, but haven't done much testing
Also, the cast speed > attack speed mods don't stack in PoB, even though they do ingame. I think this problem also exists for the spell damage > attack damage mod
Wilma's + anom Kinetic Bolt stack?
ye
im getting 30% attack speed from the lvl 1 faster casting on the stat sheet ingame
Interesting, I'll look into fixing it
Interesting that Summon Phantasm would grant it the spell tag cause it doesn't add that tag from the gem
requireSkillTypes = { SkillType.Attack, SkillType.Damage, SkillType.CreatesMinion, },
addSkillTypes = { SkillType.CreatesMinion, SkillType.MinionsCanExplode, },
excludeSkillTypes = { SkillType.MinionsPersistWhenSkillRemoved, },```
maybe the faster casting is being applied by .createsminion?
other support gems w/ the "cannot support skills that creates minions" don't work with it, like pinpoint
Faster casting has these tags
addSkillTypes = { },
excludeSkillTypes = { SkillType.Instant, SkillType.FixedCastTime, },```
I'll ask someone at GGG
@naive haven confirmed Wilma's shouldn't stack with Anom Kinetic Bolt and it being linked to Summon Phantasm and Faster casting is also a bug
spell -> attack definitely didnt use to stack in game, nor did the cast-> attack speed
I guess they changed it for Wilma's
or as local said, is bugged
yeah
another oddity, when using the same setup with minion speed support instead of faster casting, spiritual command allows the attack skill to benefit from minion speed
which makes sense i suppose but is a little strange
looks like pob recognizes this so ig its intentional
Is there a way to speed up PoB's "Show Node Power"?
do you have full dps turned on?
No. Eff Hit Pool
All of my skills are disabled as well.
Something else that might help would be being able to run in the background. I've been tempted to look into adding it myself but I'm pretty dang unfamiliar with lua.
Rebooting PoB seems to have helped. Not sure why it was going so slow. Still takes a long time but is acceptable speed imo now.
having full dps turned on requires it to run a full pass for each skill in full dps AND one for main skill, so thats one of the main things that slows it down
it also seems to slow down if you leave it open but have been unable to determine why, as the memory leaks have been fixed
Full DPS is worse for active-skill heavy builds then I assume?
as for run in background, it use to do that, but the main thread is paused now, its possible to run it on another thread that wouldnt get paused, but think that might cause issues, the pasue in background probs needs to be changed at some point anyway
yes, but even just putting your main skill in there (so 1 skill) almost doubles the time PoB takes to do node/item power
not sorting by full dps, just having it turned on
lua isnt that hard of a language, but I can take a look at doing this if I get free time at some point
(Though I later disabled all of my skills)
I think the fps limiter is on th c++ simple graphics side, not PoB itself
so unsure if I can actualy do much about it
Honestly, even a point in the right direction might be helpful. I'm a programmer, but, I code in C# and Typescript for work; C and C++ on the side.
Is the fps limiter what determines whether PoB is running in the background?
I think the current implementation is just disabling it in background but youd have to ask wires or zao, I know this PR exists https://github.com/PathOfBuildingCommunity/PathOfBuilding-SimpleGraphic/pull/16 but was never merged
Yeah, LocalIdentity had inconsistent frame time issues with that PR, which is why it never got merged. This commit is what disabled scripts running in the background. https://github.com/PathOfBuildingCommunity/PathOfBuilding-SimpleGraphic/commit/01fb52bb3aa1a827b2fc2da1e3910ea6596be073
Issue is there was no FPS limit on PoB, so it was chewing through a decent amount of CPU even when doing nothing
@worthy cape has been working on somewhat of a rewrite of SimpleGraphic, but afaik it doesn't do anything regarding background tasks, just OpenGL issues
only background task I know of that runs while alt tabed is downloads, but some of the other things on thier own thread probs runs as well
not that many of those exist
as far as I know yes
Seems simple enough to change then. Would just need to figure out how to add an option for it in the frontend. 😛
but simple graphics changes are super uncommon for us to push through
Understandable. I noticed there were like 80 PRs so I figured the team is pretty careful.
I think the better solution is fixing that PR I linked, and just limiting the fps to like 4 while in background, that way it can still run background tasks like node power
the forground limit was the main issue iirc
simple graphic has had 26 total PRs, lua side has had 2639 PRs
Yes, but the reason it limits the speed in the background was to limit CPU usage when you need all of your CPU...for PoE, for example 😄
Here's an example of the issue it was trying to solve: https://github.com/PathOfBuildingCommunity/PathOfBuilding-SimpleGraphic/issues/13
I specifically just want to be able to browse the internet while running PoB's Node Power calculation. And definitely would want it configurable, defaulted to not running in the background.
Even a feature like, "Allow Node Power Calculation in Background" would be useful to me. Because then it would begin limiting CPU again once node power has finished calculating.
64-bit could help if the pre-restart trouble were in part due to memory pressure.
WTB working brain, then you all can have all the features.
On background tasks, as some of the frame pacing inhibits the IPC to/from subscripts it could be an improvement to have a healthy little wait and process subscripts periodically as their callbacks to things like ConPrintf would still tick.
Is there some way to get a testing oauth2 setup without going through the email process? Trying to mess around locally to see if my setup works before going through the process
can't watch old league's information in official web? https://www.pathofexile.com/kalandra will redirect to https://www.pathofexile.com/livestream @compact isle
seems to depend on which league, this works for example: https://www.pathofexile.com/delirium
fixed
Hi! I just downloaded awakened poe trade, and i can't edit the map mods check. I saw there was an issue that has been fixed in a recent comit on github, but it has not reached a released version yet. How can i quick fix it ? (It seems to be linked to profile file generation)
I don't use APT, but if you really wanted to badly enough. you could possibly look for a build someone has made, or make your own build if instructions are provided
Ok i managed to fix it by uninstalling it, deleting manually all config files in %appdata%, reinstalling an old release, and let the auto update function update to last version (manual update bricked the config file too)
@carmine merlin is blade trap meant to work with the attribute stacking mods? tried in pob and it's not adding them
oh ye it does work, just doesn't show up in the added min/max section of the calcs tab
Does for me, link me your build
https://pastebin.com/bkYN8dMR @brave venture theory pob
Pastebin.com is the number one paste tool since 2002. Pastebin is a website where you can store text online for a set period of time.
doesnt show up in here
monkas dont judge the quality of that pob
It's cause the mod has with this weapon in it, that it isn't showing up in the breakdown
wack
autohotkey can't tell which monitor the current window is on? (or do i just reeeeealy suck at google?)
oh now i find it lol, thanks everyone! 😁
For the trade-exchange-request-limit rate limit policy, the Ip limits are 7:15:60, 15:90:120, and 45:300:1800. However, exceeding the 15:90:120 limit results in being timed out for 300 seconds instead of 120 seconds.
Is it worth sending in a bug report or someting? 🙂
Does every base consistent of exactly or at least 2 words?
Some shields have 3 words, but everything else seems to be 2 words
"ring"?
that's a base?
"Chestplate" (body armour)
kalandra ring
okay, I need this 'heuristic' to only parse magic items properly. I assume the only way to get a 'Ring' would be by bricking it and vendor recipe?
also claws (Awl/Blinder/Gouger), daggers (Sai/Trisula/Poignard/Stiletto), rune dagger (Skean), scepters, staves and probs more, cbf looking
yes, but it has to drop bricked becouse its also mirrored
so you wont need to come across it very often, imo just check if it has ring and not one of the other base type names before it
My Problem is parsing a pob magic item like (screenshot). It has 2 mods a suffix (of ...) but no prefix. So I need to know the 2 mods are actually one ... I was hoping I could have an heuristic that the amount of words on the base never goes under 2 (or in some cases 3)
but I guess this is also not 100%
and I dont really wanna pull in an entire mod db
doesnt repoe offer a list of all base items or do i misremember
I could get that myself from the game files, but I dont really wanna do that, especially since I need it clientside
would be the most accurate way, unsure if any heuristic would work well enough
Hi, anyone know how i can get the public stash data? in a way that poe ninja or excilence/poe stack get that data to generate economy charts?
thanks!
do i need to register to fetch the economy data?
You need to send an email requesting access to the API to get approved to access the public stash stream
The river used to be accessible in the past, indeed.
I see! thanks again haha
how long do they usualy take to grant access?
It has to reach a human but I don't think it's super slow, at least not during weekdays.
generally hours but as noted it's Sunday
@compact isle News posts are missing breadcrumbs. can this information be added to know the language of the article?
goddamn ive got so many ideas and they dont answer. Does anyone of you have access and could supply me with an old stashtab file so i can start implementing some evaluations until i get access?
It's been less than a day, lol. Currently 2:30 in the morning for them, also
Documentation not enough? https://www.poewiki.net/wiki/Public_stash_tab_API
Public stash tab API is a basic JSON interface to obtain information relevant for general trade using Premium Stash Tabs for PC clients.
Basically the interface serves global update information (considerable as an update-"stream") on any public stash tabs recognized by the game servers.
API doesn't contain any historical data and always returns ...
Yeah i totaly get it. Absolutely no blame to them. Even if it takes days it would be fine. Its just that i have time today and would like to get startet 🙂
Some old example data would be nice to try out ways of how to implement things
as far as I have seen there is none available online ?!
took me like 20 seconds to get there https://web.archive.org/web/*/http://www.pathofexile.com/api/public-stash-tabs*
might also get lucky with google cache
might be I am just too dumb, but i can't see a way to get the json data from this
Sorry I am quite new to this..
click on one of the longer links with a uuid, select the timeframe it captured
then click on the blue dots to get it
good luck with your project
Thanks ill let you know if I manage to do anything interesting
Hey yall, for those who might know, is the stat_translations file format in the ggpk/steam bundles file for translating stats in a standard file format or is the format something GGG made? I'm trying to wrap my head around the standard, especially when looking at stats with different options
it seems... kind of straight forward, but then I took a look at the timeless jewel translation stuff and it's... interesting
Very custom as far as I know.
Like this is pretty straightforward to parse:
description
1 local_maximum_prefixes_allowed_+
2
-1|1 "{0:+d} Prefix Modifier allowed"
# "{0:+d} Prefix Modifiers allowed"
"Two possible values for local_maximum_prefixes_allowed_+, if -1 or 1, it's the numver formated with string, else use the other"
Then you look at the timeless jewels...
description
4 local_unique_jewel_alternate_tree_version local_unique_jewel_alternate_tree_seed local_unique_jewel_alternate_tree_keystone local_unique_jewel_alternate_tree_internal_revision
20
1 # 1 # "Bathed in the blood of {1} sacrificed in the name of Xibaqua\nPassives in radius are Conquered by the Vaal" reminderstring ReminderTextConqueredPassives
1 # 2 0 "Bathed in the blood of {1} sacrificed in the name of Zerphi\nPassives in radius are Conquered by the Vaal" reminderstring ReminderTextConqueredPassives
1 # 2 1|# "Bathed in the blood of {1} sacrificed in the name of Ahuana\nPassives in radius are Conquered by the Vaal" reminderstring ReminderTextConqueredPassives
1 # 3 # "Bathed in the blood of {1} sacrificed in the name of Doryani\nPassives in radius are Conquered by the Vaal" reminderstring ReminderTextConqueredPassives
...
ouch
1 at the start is the index of the mod at the start, but... the rest doesnt make sense since the names dont change... 
Some of those stats seem vestigial.
probably.
I assume you match up the four values before the string with the four stats listed up-top.
There's three variations, of which the second went through two revisions, obsoleting Zerphi.
That's what I'd assume. I forgot I can look at how RePoE's output for stats and see how they get matched up.
interestingly there's 16 more options after, so the four are just associated with these translations
A legacy keystone 2 is Zerphi, while a current+ keystone 2 is Ahuana.
But there's only 4 in a group so I guess you match them up by index
1 # 2 0 "Bathed in the blood of {1} sacrificed in the name of Zerphi\nPassives in radius are Conquered by the Vaal" reminderstring ReminderTextConqueredPassives
would match something like
local_unique_jewel_alternate_tree_version: 1
local_unique_jewel_alternate_tree_seed: #
local_unique_jewel_alternate_tree_keystone: 2
local_unique_jewel_alternate_tree_internal_revision: 0
Brace for data file breakage: https://www.pathofexile.com/forum/view-thread/3358158
Sorry to bother again, but I cant for the life of me get the authorization to work
I try to use this post to generate an access token in Python. So far i have tried numerous tutorials and combinations (writing everything into the body etc) but I always get 403'd
Probably this is a dumb question but its the first time I am using API's and i was hoping someone might be able to help me maybe
nope. Thanks, trying that!!
the token URL should also be https://www.pathofexile.com/oauth/token not api
I finaly got it to work! Thank you guys!
there is a full guide here https://www.pathofexile.com/developer/docs/authorization
What's the context of this? Are you parsing dom looking for breadcrumbs for the language?
I want the article language, but I can't find any useful information in the post.
breadcrumbs have forumID, which is language information.
Announcement posts haven't had breadcrumbs for a long time. I don't think they'll be added any time soon.
okay, I think I could get forumId from recent forum posts. https://www.pathofexile.com/account/view-posts/Community_Team
Is there a reason you're avoiding the RSS feed for news posts?
RSS are announcements only, I want to know other official messages, it seems that it is better to get from recent forum posts
you could also try this: https://www.pathofexile.com/forum/staff.rss?locale=en_US
Hello fellow exiles, I am back with another, lets face it: probably stupid question regarding the Public stash tab api.
For my purposes I would like to have a snapshot of the current state of the economy. Meaning, I need to get the contents of the public stash tabs once or maybe twice a day.
My current understanding is the following: the API streams only the updates, paginated by the nex_id. So if i want a "complete" set of listed Items i will need to store the listed stashes localy and update my database with each update of the stream.
correct
Am I correct in how this works?
And my question would be: is there a way to just have my code running once or twice a day and acquire a snapshot, without constant updating?
The river (psapi) sends the full contents of any modified tabs.
You need to consume the river in full to not miss updated tabs.
no, except if you use already aggregated data like you'd get from poe.ninja
It's all an incremental stream of full tabs.
There's no way (in the river) of getting the state of a particular tab without sweeping the whole stream for the last instance it was updated.
Technically you could store the last next_id you processed and then step through them until you reach the current id when you start the process. You could run this whenever you want but it probably isn't practical because of the rate limit
Catching up like Zach describes is viable, but you'll miss out on interim updates for any particular tab if it has had an update closer in time.
I thought of this aswell, but i think you are right, with the rate the stream updates I dont think it would be able to catch up realy
Like if a tab is updated at id=9001 and id=9005, the one at 9001 will not have any contents.
You should with some pipelining be able to at least keep pace and probably catch up slowly.
Typically you'd start at a recent point in time and never really pause.
There's some tricks you can do to pipeline better, like reading out the ID from the raw bytes of the response before you parse the actual response so that you can kick off the next request.
It's a bit of a struggle still as time-to-first-byte is often high.
One other thing to consider is if you are working on aggregate data you really don't need need all stash updates. If you expire listings after a short amount of time, missing/skipping some updates is not the end of the world
For the type of items poe ninja tracks there are more than enough listings in a 2 hour window. If every 12 hours you captured 2-3 hours that would probably be fine
Thats very true, this might be the way i will approach this, as I dont really have the possibility to have my pc running and saving data all the time
As far as I have seen, it is not possible to get the up-to-date prices from poe.ninja right?
What kind of traffic volume do people see these days? When it was a bit backed up I got around 5 MiB/s.
Ah, running on a non-server device. That's fun.
Running on a non server will make it harder to catch up as well unless you have really good internet
could just start with a current id, iirc poe.ninja has an api for the current id?
Yes they do.
since the stream is delayed 5 mins you won't be able to pull an ID you see there until 5 mins after you've seen it
Well it seems like the little idea of evaluating the current state of the market is getting out of hand even faster than i wouldve expected. Might use some necromancy to revive my old laptop and set it up to scrape the stream for me now.
Thanks again for the help all of you!
Repurposed laptops? Highly available compute element with integrated UPS.
PoeStack uses variable lookback windows for calculating prices based on how much data is available in each window selecting the smallest window that has enough data. These are the counts of windows used for currency pricings right now in Sanctum. So most of the time 2-4 hours was enough, but there are a few cases where it needed to look at bigger windows
thats really helpful, thanks!
Top machine there powers my PoE game data archival and serving project 
👀 I think I have the same Fractal case on the top
got the bottom one i think 😄
Define R6, big storage machine and toy VM host, has ten of my disks.
bottom full visible one is a meshify?
Middle one I think is a Meshify C Mini.
Bottom half-obscured machine is a HP ML10 v2.
til they made a mini meshify c
I think I have a *5
Noo, I just upgraded it.
I'll take the switch

someone get the blueprint
I can't wait until I manage to get the data thing moved over to the Hetzner machine.
Probably going to take a while as @formal kraken baited me into thinking over if I could ingest releases faster.
oh no
I was about to start a simple, for-fun project to record prices of bulk exchange items frequently enough to see differences between regions. Are there others already doing this? From what I could see, poe.ninja and poestack both don't seem to expose pricing data more granularly than daily.
You can change poestack's graphs to hourly for the last 48 hours
Neat! I might still go ahead and have some fun making something, but that's great 😄
Does poestack just hit exchange and trade for that data or does it also look at psapi at all? I can't imagine that looking at psapi would be worth it for this sort of thing
https://github.com/PoeStack/poestack-public-data/tree/master/economy/overall this data is also updated automatically every few hours
it only uses psapi I make no requests to the trade api
😮 I see, why did you choose to do that? Are you also making use of maintaining stash state for other things?
I am now using the data for other things, but it was mainly about scale I need to execute around 80 thousand trade searches per hour to maintain the hourly data for everything tracked right now across all the leagues
it's really easy to execute those 80k searches vs my own DB since I don't have any rate limits and don't need to leave the datacenter
I see. Do you worry at all about missing long-lived listings that are in stash tabs that have had no changes in a while? Or are you just always tracking since league start anyway?
for pricing I only use listings that are less than 48 hours old and for most pricing it uses an even shorter window if there is enough data
for most currency type items it only uses listings within the last 2-4 hours since there is more than enough data
Makes sense. I'm worried about low-volume areas, since it was my impression the listing index date doesn't get updated when an account logs back in. Maybe that won't be as much of a problem as I'm thinking
it depends on what you are tracking really
if someone has had a divine listed for 2 days and it hasn't sold yet the price is probably not worth considering
for things with lower volumes you might need more than 48 hours of data but those tend to not be the type of items poestack/poeninja track
One example that comes to mind is buy orders. Some folks frequently list a single, long-lived buy order that they don't modify for quite a while after it goes up. (Or I wouldn't expect them to modify it for a while)
the other thing to note is you will get a stash tab update if any item in the tab is updated
so not only would that item need to have not changed in 2 days (note and quantity) but all other items in the tab would also be untouched
Doesn't seem outside the realm of possibility, but either way it seems like an interesting thing to look into
I guess if they list the div in a tab by itself and then don't change rate for 48 hours it would fall off
Yeah, something like listing chaos for various essences in a tab and then not changing those rates for a while
yeah but also not adding or removing any essence from the tab
The note would be on chaos, not essences
seems like a niche enough thing to not worry about
the volume is also much lower, oftentimes it's odd to reason about
yeah the data never felt stable enough that people should really be using it
With the number of stashes you're tracking, how's the size of your stash data? I imagine for performance reasons, the calculated pricing data is historical, but the stash state is not?
I keep a json file of the most recent listed version of each stash for use in some other features but this isn't stored in the DB so the size is fairly irrelevant, but for the pricing stuff I only keep track of the # of tracked items in each stash and what price they are at per account
That goes in the DB and snapshots are taken hourly to aggregate the prices and store them for historical reference
The DB size of public stash state is 4gb
Ah, I see, sounds reasonable, especially if you are pruning out data for stashes with no version newer than 48h old
So you aren't actually storing the stashes themselves and all the item data therein, just the count of things you care about tracking?
yeah the 48 hour thing is sort of for size but also just accuracy, I could keep a week easily but the prices get less accurate the longer time period you consider
I am storing the whole stash but that isn't used at all for the pricing data yeah
the whole stash goes into S3 so I can use it in other features
Oof yeah for cost reasons I can't imagine myself actually making use of offsite object storage, etc.
so far the stash data in DO version of S3 is only 50GB. DO charges $5 per month for 250GB of S3 storage so that might be the cheapest part of the site
Ah neat, don't they also give you the first 5 GB free? Or is that not a thing anymore
Or "free" from the base $5/mo price
If you needed historic stash data this would be way bigger but I only care about the last listed version
Makes sense 😄
I think you pay $5 per month to use spaces at all and that comes with 250GB
Ah I see. Looks like their pricing changed
then you pay like $.02 per gb after or something
Zach do you happen to know if logging in re-indexes someone's stash tabs? I could test this, but figured I'd ask in case someone here knows
I don't think it does
https://www.pathofexile.com/forum/view-thread/3357236/page/1#p24909552 on Mar 1, 2023, 4:23:16 AM
but staff.rss has <pubDate>Mon, 06 Mar 2023 22:06:10 +0000</pubDate>
the pubDate reflects the most recent edit
got it, thanks
Hi GGG introduced PKCE(Proof Key of Code Exchange) to OAuth flow I implemented this in my site to filter personalization it works perfect. You can try, check security, stability etc. If someone have question I can help with OAuth flow.
https://php10.5v.pl/simplefilter/
So I’m writing a parser to pull out the translation data from stat_descriptions.txt, parser-combinators are good fun!
Heh, I was gonna say that they don't do Public Clients with PKCE yet, but the docs suggest that they support some of that now.
@compact isle This seems to be missing from the changelog 😉
Novynn keeping it in secret to introduce with trade api 😄
the swap-over to the new OAuth system wasn't quite as smooth as we'd hoped... so keeping it on the down-low until we're sure it's working correctly
😶
But as I think it is not bad. For me took less than 1 h to adopt and change all the code. During this I improved session flow also and my classes. It was nice ;)....One You should add is fine session lifetime countdown during Authorisation login. Strange that it couldn't be done with standard HTML code, just in metadata tags. There is security connection icon, SSL, etc but not clear information about session...
anyone else having trouble getting an access token for a user today?
Checked on my site works well...
hmm ok thanks
Im getting 1: Error 403
this is whats in the header
2023-03-10 01:52:49 Date Fri, 10 Mar 2023 01:52:49 GMT
2023-03-10 01:52:49 Content-Type text/html; charset=UTF-8
2023-03-10 01:52:49 Transfer-Encoding chunked
2023-03-10 01:52:49 Connection close
2023-03-10 01:52:49 Permissions-Policy accelerometer=(),autoplay=(),camera=(),clipboard-read=(),clipboard-write=(),fullscreen=(),geolocation=(),gyroscope=(),hid=(),interest-cohort=(),magnetometer=(),microphone=(),payment=(),publickey-credentials-get=(),screen-wake-lock=(),serial=(),sync-xhr=(),usb=()
2023-03-10 01:52:49 Referrer-Policy same-origin
2023-03-10 01:52:49 X-Frame-Options SAMEORIGIN
2023-03-10 01:52:49 Cache-Control private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0
2023-03-10 01:52:49 Expires Thu, 01 Jan 1970 00:00:01 GMT
2023-03-10 01:52:49 Vary Accept-Encoding
2023-03-10 01:52:49 Server cloudflare
2023-03-10 01:52:49 CF-RAY 7a57eba82a376f9b-IAD
2023-03-10 01:52:49 Content-Encoding gzip
i think theyre rejecting my request maybe?
Some HTTP status code ??
ya 403 = Forbidden
just starting working again... so strange
Hymm This is during geting access token with CODE token ??
Did you have code token first ??
i got error just using the consent flow to get a token
As I read this happens when is too many invalid requests in a short period, hard to help, You must check all code of program if it make correct requests, that is all what I can say ;/
ya all good, just strange cause i havent changed anything and suddenly stopped working
I received this on updates in short times etc but good requests too, hard to say what is problem....
all good cheers, the redirect_uri for the /callback can be any url where u want to send the user after they consent to the app right? (cant be localhost)
Know this ? : https://www.pathofexile.com/developer/docs/authorization
Public Clients
As I see yes, but I have no experience with local app :/
all good ill figure it out
ty for the chat
Is oauth broken atm or do I need to make some changes after the recent update?
Weird, filterblade seems to be working, but it has basically the same uri parameters, just asks for more scopes
Maybe someone can do me a favor and try the login at https://pobb.in?
I got a 500 Unknown Error after the redirect back
thanks, that was poe api replying with a 400 status code 😦
almost looks like because the token already expired 
I was able to log in just now
sometimes I had that happen when I accidentally consumed the token twice 🤔
After clearing my cookies and trying to log in again, I get the 500
cleared pobb.in or poe cookies?
Both. I cleared both, logged in on pathofexile.com, then tried your login flow
errors started happening like 3 days ago, last change was ~christmas
thanks, I'll try that
mh, maybe I get rate limited. Thanks for the help, have to add a bit more logging
In my site works fine. Couple days agoo I must implement PKCE for token grand flow. Now works great🙂
ooooo pkce support! Desktop devs will be very happy
That is why some of them have disconnection every 10h, They must implement this, it is no so hard. For me took 1h to change all codes and btw upgrades main php class too...
Does POB's Trader let you search by something other than DPS? eHP for instance?
Not yet, it's a planned upgrade though
Wait... im writing my parser for the stat_translations.txt file for a project of mine
and my parser suddenly failed on a specific translation
description
1 minion_maximum_mana_+%
2
1|# ""Minions have {0}% increased maximum Mana""
#|-1 ""Minions have {0}% reduced maximum Mana"" negate 1
lang ""Portuguese""
2
here >> 1|1|# ""Lacaios têm {0}% de Mana máxima aumentada""
#|-1 ""Lacaios têm {0}% de Mana máxima reduzida"" negate 1
lang ""Traditional Chinese""
2
1|# ""召喚物增加 {0}% 最大魔力""
#|-1 ""召喚物減少 {0}% 最大魔力"" negate 1
I think I found a bug in the official files, "1|1|#" is invalid, it's the only place a format like that appears and it's different from the rest of the translations
Artifacts in human-editable file formats? Unpossible 😉
Who's the poor soul who has to go in and edit that LOL
I've seen approximately all the typos in the various formats of PoE over the years, this one is new to me.
You should see the ones in terrain and actor files, the more common it is that it's hand-edited the worse it gets.
Anything that the game parser accepts goes, and probably some more that doesn't.
Now I gotta account for errors... oh boy lol
Same error in the current version.
Stat not present at all in 2.6.3, error in 3.19.2b.
I need more extracted copies...
I love this library im using to parse this stuff but it hurts my brain when I have to do anything more complicated than parse a few sequences in a row... idk how in the hell i'm going to do this now LOL
I'm happy that I do most of my parsing with regexes and string splitting in poe-cpp. I know from experience that strict parsers tend to be hard to adapt when it comes to such aberrations.
im using a library in C# called Pidgin, it's a parser-combinator, so you kinda define it more functionally
public static Parser<char, TranslationSection> _translationSection => Tok(
from lang in Tok("lang ").Then(_string).Optional().Between(SkipWhitespaces)
from lineCount in Tok(Int(10))
from lines in _translationLine.Many()
select new TranslationSection(lang.HasValue ? lang.Value : "English", lines.ToList()));
public static Parser<char, TranslationLine> _translationLine => Tok(
from values in _statValue.AtLeastOnce()
from text in _string.Before(Any.SkipUntil(EndOfLine))
select new TranslationLine(values.ToList(), text));
looks complicated but you kinda build it up bit by bit
the "from" syntax is read like a script
Tok just means token, so anything before a whitespace
so a translation line is a string with at least one stat value, and "string text like this", then skip til the end of the line.
p neat imo
has made my life a LOT easier trying to write this
It's like that in 3.11.2b too, so probably forever.
F
This was even before they changed the formatting syntax, heh:
1|1|# "Lacaios têm %1%%% de Mana máxima aumentada"
#|-1 "Lacaios têm %1%%% de Mana máxima reduzida" negate 1
now THATS a syntax
I forget how many leagues ago it was they changed to more fmt-like placeholders.
Hi. I am trying to get a list of all active skill gems from .dat64 files. Is there a way to filter out gems like https://poedb.tw/us/Icefire (idx 3 in the table SkillGems.dat64) that cannot be used by the player?
This is strange, it almost looks like there is a race condition after exchanging the token and when it becomes actually usable. I can exchange a token fine, but the profile lookup (https://api.pathofexile.com/profile) sometimes fails with a The access token provided is invalid or has expired. This happens less often in my local env than on 'production', which makes me lean even more towards a racy-thing 🤔
can use SiteVisibility of linked baseitem skill
thanks, this seems to do exactly what I need 👍
I'm trying to find the image files for the item frame art for various item types/rarities (like the included image, but without the text on it). I would have expected to be able to find it among game files, but I've used VisualGGPK2 and looked pretty thoroughly and haven't been able to find them. Is there anywhere else I should consider looking?
It's made up of virtual images in sprite sheets, mapped by Art/UIImages1.txt, see the previous discussion: #tooldev-general message
Note that the current used art is the non-4K one, supposedly.
Fantastic. This is exactly what I was looking for. Thank you!
Think I had overlooked it because the sprite sheet was getting clipped due to screen dimensions
The current foil effects are computed live via vertex shader, but this ought to have all the traditional rarities.
.select(|file: &File| file.id.starts_with("Art/2DArt/UIImages/InGame/ItemsHeader"))
.select(|file: &File| {
file.id
.starts_with("Art/2DArt/UIImages/InGame/ItemsSeparator")
})
.select(|file: &File| {
file.id.starts_with("Art/2DArt/UIImages/InGame/") && file.id.ends_with("ItemSymbol")
})
Should be all you need, as zao mentioned from UIImages1.txt
Yay, my parser works!
I spent like 2 hours yesterday trying to work around the problem line but... I figured it's easier to just fix it manually lol
turns out it was
I do recall people having trouble with that in the past - specifically FilterBlade, which is probably why FB isn't currently experiencing any issue
they do have issues atm?
had issues a long time ago and implemented a wait, so is presumably unaffected now
that's big info, thanks
@velvet fog is your model viewer gone? https://poedb.tw/us/model
yes it's hard to maintain
I had some fun problems this league with the new shader stage Animation and extension blocks using generate in actual materials I cared about, I don't quite understand the intended semantics.
Has anyone considered using machine learning with PoB? Curious if there are any repos out there for it.
Many have mused about it, not sure if anyone actually managed to build something.
Anyone know if the maintainer of https://heartofphos.github.io/exile-leveling/ is around here?
The closest thing is probably this genetic algorithm PR https://github.com/PathOfBuildingCommunity/PathOfBuilding/issues/5602
closest "public"
hi guys, im trying to handle retrys in my code
2023-03-16 04:29:41 X-Rate-Limit-Account is in the dict/headers max hits: 2
2023-03-16 04:29:41 X-Rate-Limit-Account is in the dict/headers period: 10
2023-03-16 04:29:41 X-Rate-Limit-Account-State is in the dict/headers current_hits: 1
2023-03-16 04:29:41 X-Rate-Limit-Account-State is in the dict/headers period: 10
2023-03-16 04:29:41 X-Rate-Limit-Account-State is in the dict/headers active time: 0,4
im waiting whatever the period is specified as and also not hitting the api if current = max but im still getting 429s on the 5th or so call..
was thinking I need to use the active time field somehow? has anyone used this?
If the third number in the triplet from X-Rate-Limit-Account-State is not 0, you are currently rate-limited and need to wait at least that many seconds. If that's what you mean by active time field, then yes, you need to be looking at that and waiting that long before issuing another request.
i still dont get it though cause i am waiting until it is 0 / waiting the full period plus extra
wait you said makes 100% sense to me though
like i make a call at this timetamp
2023-03-16 05:17:10 X-Rate-Limit-Account-State is in the dict/headers active time: 0,5
... next call..
2023-03-16 05:17:23 X-Rate-Limit-Account-State is in the dict/headers active time: 0,6
active time still not zero and ive waited more then the period? that doesnt make sense to me haha
Which policy and endpoint is this?
./character
hi guys, sorry to keep asking about this but im really stuck and i dont want to get 429s
2023-03-16 21:53:33 interval time check - intial call for period and retry time
2023-03-16 21:53:33 X-Rate-Limit-Account is in the dict/headers max hits: 2
2023-03-16 21:53:33 X-Rate-Limit-Account is in the dict/headers period: 10
2023-03-16 21:53:34 X-Rate-Limit-Account-State is in the dict/headers current_hits: 1
2023-03-16 21:53:34 X-Rate-Limit-Account-State is in the dict/headers period: 10
2023-03-16 21:53:34 X-Rate-Limit-Account-State is in the dict/headers active time: 0,2
2023-03-16 21:53:34 current_wait_time_extra 12
...
2023-03-16 21:54:55 interval time check - intial call for period and retry time
2023-03-16 21:54:56 X-Rate-Limit-Account is in the dict/headers max hits: 2
2023-03-16 21:54:56 X-Rate-Limit-Account is in the dict/headers period: 10
2023-03-16 21:54:56 X-Rate-Limit-Account-State is in the dict/headers current_hits: 1
2023-03-16 21:54:56 X-Rate-Limit-Account-State is in the dict/headers period: 10
2023-03-16 21:54:56 X-Rate-Limit-Account-State is in the dict/headers active time: 0,6
2023-03-16 21:54:56 current_wait_time_extra 16
2023-03-16 21:54:56 retry after 300 for user xyzxcyz
i increase the time between calls as the active time increases + the period and i still get a 429 after 5 or so calls. I really dont know why.
@light tide do you handle all rules, or only the first one. asking because you seem to split only by colon and have "active time: 0,2"
hmmm not 100% sure what you mean, should the wait period be 10 + 10 + 2/6?
i dunno what the 0 is for haha
@light tide
Consider something like this:
x-rate-limit-account: 45:60:60,240:240:900
x-rate-limit-account-state: 1:60:0,3:240:0
There are two distinct rules here for the account rule.
One where you get 45 requests over 60 seconds and if you violate it, you get 60 seconds of cooloff.
One where you get 240 requests over 240 seconds and get 900 seconds of cooloff.
oh jesus, i didnt know that
ok that makes alot more sense
imma ask chat gtp to give the functio to handle this hahaha
thank you for taking the time to do this picture
hi guys, does anyone have an example on how to handle all the rate limits and the different timeouts if you exceed? any help would be great! a link to a github is enough, thanks for your help
my code is too complicated because some parts are added for UI purposes, some for prevention of large queues created by players. https://github.com/SnosMe/awakened-poe-trade/blob/master/renderer/src/web/price-check/trade/RateLimiter.ts
ty ill take a look, im suprised i cant find any xrate limit examples in general online
It's been ages since I wrote mine but I think my approach was to keep a queue of past request times and shift them out as the lose influence. They govern when the next request can happen and in case of a rate limit event (due to other programs on the account/IP also making requests) I honor the state.
also a reminder these rate limits are dynamic
Mine is also similar to what zao described: keep past request times to understand the state and be able to apply the rule as seen in the latest response, with some added jitter to account for timing issues. Handling the case of an actual timeout is easy if analyzing the state in the response tells me I've actually crossed a limit.
does anyone happen to know if skill activation points are stored in ggpk somewhere?
e.g. for dominus slam, he does a chargeup, then there's an explosion, and then he does the backswing animation, i'm interested in knowing where in the skill animation the damaging explosion actually happens
I haven't looked at them in particular but I believe it might be in the .ao file associated with the animation.
I did a deep delve into the Elder's pirouette skill a while ago with the PoB gang:
animation = "doom_spin"
1.2 = "contact 5.66995 -51.4024 -209.997"
1.2 = "contact 71.7129 -10.1348 -432.326"
1.225 = "contact -10.4145 -83.4963 -368.355"
1.225 = "contact 18.1417 86.7646 -371.073"
// ...
1.975 = "contact -23.54 76.3816 -373.714"
1.975 = "contact 49.3939 -65.5667 -379.359"
3.05358 = "hide 0 0 0"
3.15004 = "teleport 0 0 0"
3.30148 = "reveal 0 0 0"
4.5 = "slam 0 0 0"
Those contact fire hardcoded mortars while the slam, well, is a slam 😄
There's some additional flags elsewhere that refine the meaning of the coordinates, like if contact-is-a-normal, contact-is-an-offset, etc.
oh that helps, thanks!
Is there any ToS friendly way to query which quests a character has completed?
Okay, thanks! Will have to investigate that even further then.
unlucky, doesn't seem like anything related to quest completions is printed there 🥲
Seems about right, the information story there is bad but at least everyone are equally hosed 😄
How fast will PoB be updated for Krangled, if at all?
Is that one of the events? I don't think there's any plans to assist in that.
Yeah, starts tomorrow. Randomizes the passive tree
Way too short lead time and none of the data available that PoB uses.
Figured that was the case but thought I'd ask. Wasn't sure how big a lift it would be or if GGG provides the passive tree in a consumable format for PoB or not.
A bit of the point of the league is to have organic human interaction in sharing revelations and strategies around the tree, it would kind of defeat that intent to spoil it.
Normally we rely on and postprocess the JSON files published shortly before league start in conjunction with some game files.
Other people use .PSG files from the game for the tree representation and go from there.
The mechanism with which the event tree is computed is unknown to everyone and may intentionally be quite opaque and non-static.
You need both the data, the effort to figure out how it's transformed, and most importantly, buy-in from tools people to do the work.
there is no new .psg, and there is no new field in PassiveSkills, so there is a high probability that it is hard-coded in the executable file, in order to avoid being datamined
its possible its also a seeded algorithmic scramble, with the event setting the seed itself
They made a fog of war thing for the passive tree with the intention of hiding the whole tree except for the nodes next to active nodes... I'd imagine they have no intention of it being [easily] viewable in its entirety.
I still hope that every private league gets its own seed
And the main thing about the event is it being randomized and hidden from view, so idk... seems counterintuitive to the league itself to want to be able to preview the entire tree before playing it
this would be so much more fun imo, otherwise it should only take 6 level 55-70 characters to see the whole tree and all the ascendancies using delayed point allocation
so its not unreasonable that the whole tree will be viewable with a fixed seed within 5-6 hours of league launch given a few volunteers and a tooldev willing to do it, without even needing datamining
but I assume no one is gonna go to the effort
which is good
yeah it's just gonna be one different tree which is known after a few hours, then the build makers start making builds and the rest is gonna copy
would be cool if everyone could just have their own version and/or maybe even fish for a good tree
that would be cool but I can't see that level of effort for a 1 week event
its almost certainly the same or less effort than everyone having the same tree no?
if its just data its the same effort to scramble it on league creation, if its done using a seeded algorithmic scramble then its easier to generate the random seed rather than having to store the seed to use for all the leagues
also on a different note, is ggg tracker broken, its only been the twitter posts for a while not the forum posts?
last non-twitter post in that channel was match 2nd?
Imagine all the people complaining about having bad seeds on their account or characters. Rerolls would be a blast. 
same tree confirmed
I was actually hoping to plan during the event. Not before it.
I like importing my existing character into PoB and using it to find powerful nodes. I can get a general sense of how powerful a node is, but sometimes it suggests things I hadn't considered. Or that are counter-intuitive but effect.
try and keep non-tool-dev related things out of this channel please
guys, does anyone know how I can contact the developer of poe.trade? I have a question about the website, but couldn't find any contact info
poe.trade is retired now
All of xyz's PoE-related services are defunct now, I believe.
yeah, I know, I just wanted to ask about the algorithm he used to generate urls when you search an item
poe.trade, I think poe.party was theirs too.
You might have some luck with a forum DM, based on the launch thread this should be them: https://www.pathofexile.com/account/view-profile/xyz
I don't know if they've got any discord presence anymore, the name is great for blending in 😉
oh, didn't think of looking on the forum, will try a DM, thanks c:
they were here at one point, may or may not be still
@chrome topaz is the one
Hey all, I'm trying to get my OAuth2 working and I need help troubleshooting the 403 Forbidden error I get during the Access Token request step.
Is here a good place to discuss in full detail?
yes, just make sure to not accidentally share any secrets
X-OC-Do-Not-Steal: hunter2
I've managed to get the user permission steps to work just fine in both GoLang and Python. I get so far as to landing back on my URI where the code and the state are in the URL but when attempting to request an access token with a POST https://www.pathofexile.com/oauth/token to I get the 403 forbidden.
I'm making sure to send the request with a header Content-Type: application/x-www-form-urlencoded and then including the ID,Secret,grant,code,uri,scope in the body
https://github.com/Dav1dde/pasteofexile/blob/master/worker/src/poe_api.rs#L107-L120 / You have your user agent set?
I'm not recalling that term, let me read up. Likely not.
https://www.pathofexile.com/developer/docs ctrl+f User Agent
Okay so if I'm reading this right there is a second header User-Agent: SOMETHING that I'm likely missing. Do you know where I can find documentation on it? I didn't find anything mentioning it when I read here https://www.pathofexile.com/developer/docs/authorization
check the link I just sent, the format is described there
I see you have yours just set const POE_API_USER_AGENT: &str = "OAuth pobbin/1.0 (contact: ggg@pobb.in)"; I should be able to just copy that formatting?
ah I'm a derp and I didn't read this right. I thought you meant to search your code
thanks!
ladder or items?
items
the river (continuous feed of public stash state)
the stash tab river
slightly outdated: https://www.poewiki.net/wiki/Public_stash_tab_API
thx
I think you need api credentials now to access the river
yeah
indeed
im not interested in accessing it , was just wondering how the bots that whisper me get their info
bots are unlikely to be using the river, more likely to be using trade site alerts (pretending to be a web browser)
unless you don't mean flipping
the river has a 5 min delay
that's flipping yeah, the river is useless for that
arent the flippers the one that just sit in h/o and act like change buro?
depends on your definition, but generally it means buying underpriced items and reselling for a higher price
They're more likely to use the trade site and abuse live search sockets.
I see
I feel like almost all snipers flip items, but not all people flipping snipe items
I mean, getting live results by using the websocket machinery and then doing naughty things to the client to automate snipes.
yeah, but how do they access a websites socket
In any way, largely uninteresting as it's nothing one should do.
"websockets" is a particular technology that lets a webside open up a bidirectional frame-based communication channel to the server.
The trade site uses it to notify the page of new items on live searches, which the page then requests the details of.
websockets are how the live search functionality on the trade site functions, but they're not supposed to be used outside of that context
oh so they open their own socket and hook to the server?
isnt there any way to prevent that ?
not easily since they can just look at how your browser is doing it
Not really, web tech requires the code to run on the user's computer in a program that the user partially controls.
I see ,thx
security is always a cat-and-mouse game
Finally got some time to work on the expedition regex page, I will work on the UI and try to make it a bit more user friendly before next league but the core features are there! And just in time before xanthics stops updating his version!
Any feedback / bug reports are more than welcome https://poe.re/#/expedition
good for practice, but looks overengineered)) current stream speed is 1mbit/s , and in first week it is 15mbit I think?
so author can drop message queue and rust 😄
fun police
It seemed like a bit much but I like rabbitmq so didn't say anything 
I'm toying around with querying character data for our private league and I'm a bit confused by the rate limits, since I'm querying characters I should only be worried about IP and Account rate limits right? Is this a fixed or sliding window?
I'm getting still getting 500 ERR response when attempting my Auth token request. I see the docs suggest to try again later. I've given it 12 hours. Anyone know how long I should expect to give it before trying again? If I change content in my request body/data I get a 400 error indicating something is wrong so I have reason to believe I have the correct pieces to my request but if anyone has suggestions or knows how long to wait that would be nice.
My request looks like this:
Method: POST
url: https://www.pathofexile.com/oauth/token
head: {'Content-Type': 'application/x-www-form-urlencoded',
'User-Agent': 'OAuth chipytools/0.0.1 (Contact: contact@chipy.dev)'}
data: {'client_id': 'chipytools',
'client_secret': 'HIDDEN',
'grant_type': 'authorization_code',
'code': 'HIDDEN',
'redirect_uri': 'https://chipy.dev/poe_auth.html',
'scope': 'account:stashes account:profile'}
<Response [500]>```
that's for PKCE
That's the only place I see authorization_code mentioned.
You sure your redirect url is correct?
Okay well I did try add in my Verifier but then I get a 400 error, so maybe I have the wrong encoding for my verifier?
code_verifier = $base64url_encode($secret)
code_challenge = $base64url_encode(sha256hash($code_verifier))
100% as I am able to get to the permission prompt for PoE site and then I successfully get redirected to my URI with a Code+State
What is your request url?
Hang on... lets me get some samples
https://www.pathofexile.com/oauth/authorize?client_id=chipytools&response_type=code&scope=account:stashes%20account:profile&state=HIDDEN&redirect_uri=https://chipy.dev/poe_auth.html&code_challenge=HIDDEN==&code_challenge_method=S256
*Looks like I didn't type out my URI right above https://chipy.dev/poe_auth.html is the correct value as it's only stored in one variable for my entire script
Then after that approval I get: https://chipy.dev/poe_auth.html?code=HIDDEN&state=HIDDEN
The redirect_uri in your token request has to match exactly I found
Okay I'm going to rebuild a fresh sample test
'client_secret': 'Fav8k1XoxIaj',
'grant_type': 'authorization_code',
'code': 'HIDDEN',
'redirect_uri': 'https://chipy.dev/poe_auth.html',
'scope': 'account:stashes account:profile',
'code_verifier': 'HIDDEN'}```
this gives me a 400 error
```data: {'client_id': 'chipytools',
'client_secret': 'Fav8k1XoxIaj',
'grant_type': 'authorization_code',
'code': 'HIDDEN',
'redirect_uri': 'https://chipy.dev/poe_auth.html',
'scope': 'account:stashes account:profile'}```
This is the 500 error again
I made sure that the URI is all referenced back to a single place so I believe that if the user permission request completes I believe that means the URI matched what PoE has on file
Your secret is in there
hahah RIP well i guess I better generate a new one :p
I pass the scopes directly from the query so that there's no difference
I do uri encode it before hand though on the website
mmmm
Also, I'm guessing in the second example, you're removing the code challenge from your url right?
Oh... no I'm not putting any of it in the URL I'm doing a POST request to https://www.pathofexile.com/oauth/token with that "data" encoded with x-www-form-urlencoded formatting in the payload
is that wrong? Should I have it in the URL too?
I mean the authorize url
oh no, I didn't remove. I'll try that quick
That might have done it? So the auth request doesn't use the Code Challenge anymore?
Heck yeah I got an ACCESSTOKEN!
❤️ @outer jay
A friend and I have been using this all league long. Works great for us and we both like how easy it is to use 🙂
One thing is that we both find ourselves often excluding <2k items from the automatically added. Perhaps a suggestion to have a place to put a threshold for the auto-add? But it's not that much work to just click a couple times since it's now all at the top.
oh, thats a really nice idea. I will try to implement it tomorrow if it doesn't mess up the UI too much 😄
As in something like this paint mockup?
Yeah, precisely
any ideas about what a sane default value for that should be?
I think what you have now is fine. The T0 belts, all the way down to Divinarius-ish
My friend and I exclude Imperial Skean and Sage Robe, but that's just us
"most expensive N per currency" would be most useful IMO, not sure if that's what you're doing, pretty sure xanthics's did something like that
gwennen is a waste of time anyway post-nerf but I guess it's still fun
I love random gambling stuff like that, so I often do it with spare expedition currency haha
gwennen is also pretty nice in private leagues / SSF if you dont aim for the T0-T1 bases!
this tool doesnt have a concept of the expedition currencies at the moment I'm afraid, that might be a good feature for later but I dont think I have time to add it before league start
fair
@mint karma Maybe it should change based on the selected economy?
Good point, hmh, I think I will leave it blank or 0 though. So people can add that filter if they want to but it will be off by default
@civic crane I was looking into making a PR on APT to allow bulk searching non-unique maps. I think that outside of the first couple days of league, many people who are looking to sell their maps are interested in bulk data.
However, it looks the item data njson files need to have the trade tag/note code in the data to make this happen more easily. It seems the scripts for generating it are not in the repo. What do you think about including the maps at different tiers with their note codes to allow them to be bulk searched?
couple of issues with them, better create issue)
Sure, I'll do that
Created #898
Whatup, anyone around? I am in the process of learning how all of this works and I am using postman to interact with the API. I have tried generating my token using the auorization section in postman and when I click the orange button shown here I get a message that doesn't go away. saying it is collecting a token. This goes on until I hit cancel. If I check the console I can see that the token request was sent and received and a token was issued but it is not getting stored automatically the way postman seems to try to store it. Anyone familiar with postman know what I am doing wrong? Should I just give up, put in my token details manually and leave it?
I never figured it out. I ended up just saving the token manually.
Not sure who to let know about this, but the official API docs section on error codes could be improved to include 403 Forbidden and note that if you try the wrong method on some endpoints (like POST to /leagues), you'll get insufficient_scope back. Or better yet, return a 405 Method Not Allowed (if that method is not supported at all).
anyone remember what the ascendancy images are called in the game files? @worthy cape maybe?
Seems to be Art/2DArt/UIImages/Common/IconDexInt_Assassin e.g.
Probably. You could likely see filenames on the wiki articles on the classes.
implemented and deployed 😁
Am I allowed to send gets to https://www.pathofexile.com/api/trade/data/items? Sometimes it works fine and I get an expected response and sometimes I get error messages saying "Bearer realm="pathofexile:production", error="insufficient_scope", error_description="The request requires higher privileges than provided""
Does anyone have a public stash change id for about the start of Kalandra?
1710040184-1712246230-1654997017-1834736995-1779607706 is what I get
Thanks
OAuth tokens have less permissions than guests. You can only use them for the scope they were created for
Oh. That's really helpful. Thank you so much!
I actually expected the opposite to be true. Could you help me understand why things like api/leagues exist separately from /league (which requires oauth) and why league needs oauth to get and leagues doesn't?
Let me get the links actually so I'm being clear.
/api/leagues is an internal website API that we use to power the ladders on the site. Essentially anything outside of the documentation is considered internal and is not intended for third-party use
Oh I see. That was what I was wondering because the trade search features are behind that internal website API.
indeed, they are not intended for third-party usage. We don't offer any support or encouragement in their use since technically it's against our Terms of Service
thanks for clearing that up for me 🙂
now i havent sent any actual requests to it yet but im a little confused about the public stash api. if the results are limited at 255 stashes how do you get them all? how does the pagination thing work? i dont really understand it.
does anyone have maybe an example of it in action?
The developer docs, which I assume you've read, give a pretty good overview. The change ID you're giving to it marks certain stash changes at some point in time. Their servers will try to pack a bunch of stash changes newer than those, up until some maximum limit. (They say 255 stashes, but I've seen responses with more than that sometimes.) The response will also have the next pagination code to use to get the stashes after the ones that got returned to you.
Over time, you'll catch up to the latest publicly available stash changes. From there, just keep polling the endpoint to stay caught up to reality (minus 5 minutes).
As a grossly simplified example, say you requested public stashes and gave it change ID 1-1-1-1-1. You might receive about 255 stash changes, each with an ID greater than 1. But the server has to stop somewhere, so it responds with a next_change_id of 300-301-302-303-304. You'll take that and use it in the next request to the endpoint to continue getting more stash tabs, leaving off where the last request stopped.
Okay so when you send the request without an ID initially.. are those the most recent stashes? Where does it begin?
The start of the river is with all shards of the ID at 0 or so. Not sure where a request without ID is but you can probably guess based on the next ID it reports.
Ninja has a "current ID" value on a stats page somewhere too.
ohhhhh okay
Note that older versions of a particular tab will be empty if superseded by a newer version, so there's not that much point in going very far back.
You can technically fetch everything from the very beginning of the river but its going to be full of such holes.
I think you can detect that you've caught up for a moment when the next ID is what you put in.
thank you so much. so the highest shards have the most recent changes and it goes back from there but older pages are less relevant and more likely useless so it just chooses a start point somehow.
the docs says if youve caught up the array will be empty and repolling with the same next_change_id will show new results when theyre available
I definitely understand now between the explanations here and the docs
Say that I have a tab that with content changes at shard ID 4 and 6.
If you fetch 4 before 6 is published, you get the state of the tab as it were at 4.
When 6 is published fetching 4 again gets you a placeholder and fetching 6 gets you the new state at 6.
it probably takes a snapshot every 5 minutes and publishes that. and then if more than 255 stashIDs change state it creates additional pages.. i guess.
I believe it's fairly tightly tied into how the game aggregates changes you do to your tabs in game, like how they're batched up either with a timeout or when you zone.
i could be way off and i dont want to confuse myself since i think i have the general idea
(there's a reason why you always get whispers when you just entered a map 😄 )
In general, follow the river by chaining IDs and you'll get most of the update contents.
If you're curious about what happens to old data you could make up old IDs and look at what the data does.
now that i have a token and i got postman running i need to learn how to store the data i fetch
Depends a bit on what your ultimate purpose is too.
Consuming the river is a great exercise in both pipelining requests and data ingestion and filtering/processing.
my ultimate purpose is developing broad cs skills. my initial thought with poe was the manipulate poeninja data to create metrics i found useful but as i got into it i figured i may as well just go to the source and everytime i move an inch i see another mile.
which cool. im just enjoying the journey. im learning things ive wanted to learn for a long time.
https://www.pathofexile.com/api/trade/data/change-ids official current id
Oh right, the official site has it.
To your question about the beginning of the river, it's somewhere around 4000 last I checked. As far as I know, the river has pretty much all the changes since it began, so you could even start consuming from the beginning of Sanctum to paint a picture of all public stash tabs throughout the league.
Elasticsearch would work well
+1 on ES, and I believe it's also what GGG uses to power trade and psapi behind the scenes
Does the Item type (https://www.pathofexile.com/developer/docs/reference#type-Item) somehow return the rarity of an item? I.e. is it an unique?
frameType
Normal = 0
Magic = 1
Rare = 2
Unique = 3
Gem = 4
Currency = 5
DivinationCard = 6
Quest = 7
Prophecy = 8
Foil = 9
SupporterFoil = 10
Ah cheers!
nice I was hoping for a recommendation!
TIL, very interesting, thanks.
btw the stats page of poe.ninja is here if someone needs it: https://poe.ninja/stats
is elasticsearch free?
im seeing self managed basic free download but does that transition into me needing to make a purchase
https://github.com/elastic/elasticsearch I mean it says free at least
oh nvm just click the faq me
it is free. i used their website and they have a cloud product that isnt free
they changed the licensing "recently", but that doesnt matter for you
but if you're worried there is also OpenSearch (forked from ES)
True that's what it is called
I was looking for it because I saw it in github/trending a while ago but couldn't remember the name
Yes
okay im getting overwhelmed a bit here. opensearch is recommending i use docker to set it up.
so far i have just been using postman from my pc to mess with the api. im still very new to cs. should i pause here and take some time to learn about docker?
you don't have to use docker, but it certainly makes it easier. You can decide if you want to learn/look into docker, or just 'use' it without understanding it necessarily and continue from there
when i say new i mean im doing harvards free cs50 course and im still on the project 0 in scratch
let me check, I should have a docker-compose ready to go for elasticsearch somewhere
which btw.. scratch is awesome
my 400 year old mom is doing cs50 with me using scratch so far.
i guess the most important question moving forward is why does docker make it easier?
and as a student let me try to answer first based on a guess
it gives me a clean environment to start from
A good stab at an answer 🙂
ty zao
The installation procedure is way easier when you have a known operating environment to install the software and its dependencies into, rather than support installation instructions and all the horrors that comes with targetting all sorts of distros and coexisting with other software and customizations.
nice
I dont, probably on the old laptop 😦
A container has nice interface with the outside world in that it gets access to data via volumes/mounts/network and exposes some ports for the services it provides.
(they have their own suite of problems for which I'm running into approximately all the corner cases, but that's unrelated)
Well, it depends on your environment. I am just gonna assume you're on windows or macosx, then docker makes it a lot easier. If you're on a Linux, it is not necessarily easier.
oh god, there are actually no good resources on starting a single node elasticsearch docker compose locally
If I link you the docs you're gonna turn around and run far away
im going to use opensearch
so unnecessarily complex
pretty much the same setup
opensearch was forked from elasticsearch, so a lot of stuff is the same
ill just take it one step at a time. im reading about docker up front so that i can get it set up right when i use this link https://opensearch.org/downloads.html
and then ill work on the postman integration and maybe hooking it all up to my github or something
ive got 3 projects going on atm so i have to stay focused. i mean dont you all end up with like a million ideas a day for things to do with your skills?
i learn one thing and it spawns a bunch of brain children
i want to use tortoise TTS to make a youtube channel that reads research papers like audiobooks i can fall asleep to and im working on the cs50 course and then this project. PLUS WE GOT A NEW LEAGUE SOON
https://p.dav1d.de/V1Z.yaml save that as opensearch.yaml, bring it up with docker-compose -f opensearch.yaml up
But this is getting too offtopic for #tooldev-general
okay so save that in postman?
or just to my pc
yeah the offtopic thing. i get excited
https://github.com/blahblahdrugs/opensearch.yaml-for-docker i just put it here for now
If it's somewhat related to making tooling around PoE data and of interest to people following along, you could probably create a thread for it - should keep it nice and separated.
😮 we should use more threads!
By the way, there's no reason you couldn't set up a local instance of ES using Docker. Unless you have a compelling reason to choose OpenSearch as an alternative, you do have the option of just running ES.
I want my tool to look up a list of active leagues to easily select one (without worrying about selling) is the service:leagues scope the best way to do that? When I attempt to request it I get this 'error': ['invalid_request'], 'error_description': ['An unsupported scope was requested'] Which I'm guessing means that my authentication type or protocol is wrong ( I did verify that I'm registered for that scope with GGG)
Yes, the /league endpoint is the right place to get that information. Did you already go through the client credentials flow to get an access token that has the service:leagues scope? https://www.pathofexile.com/developer/docs/authorization#client_credentials
I believe I'm getting that error, when attempting that flow. I've been able to complete that authentication and receive a token before (to do my stash searching function) but I had GGG add the new scope and I'm troubleshooting the additional scope.
normally I'd put in the user-permission URL and it'd take me to GGG's authorization page, when I add this scope (separated with a space like my other scopes) it returns the above error instead of taking me to the approval page
This Failshttps://www.pathofexile.com/oauth/authorize?client_id=chipytools&response_type=code&scope=account:profile account:characters account:stashes account:item_filter service:leagues&state=dev&redirect_uri=https://chipy.dev/poe_auth.html
This Works https://www.pathofexile.com/oauth/authorize?client_id=chipytools&response_type=code&scope=account:profile account:characters account:stashes account:item_filter&state=dev&redirect_uri=https://chipy.dev/poe_auth.html
Should I be using the "PKCE" Code Grant method instead for service: type scopes?
Client Credentials Grant
This grant can be used by an application in order to access services unrelated to an individual account that are exposed as part of the Path of Exile API. Unlike other tokens these ones do not have a set expiration time. They can still be revoked manually via your application settings page.
Look at that on the docs
PKCE isn't necessary for service scopes. You're hitting the wrong endpoint to request service credentials. /oauth/authorize is for the authorization code grant. You want the endpoint for the client credentials grant, /oauth/token.
You don't need to navigate to GGG's website and log in for service credentials
ooohhhh let me see, so because it's the service scope i can omit it on this step and add it in when I do my code/token exchange?
oh nope, so I'd have to build two separate tokens, one for services and one for account?
Like Navi mentioned:
This grant can be used by an application in order to access services unrelated to an individual account that are exposed as part of the Path of Exile API.
The leagues endpoint has nothing to do with individual accounts. There's no reason to go through the authorization grant flow when you can just get a set of service creds
I just copy pasted from the docs, no need to credit me
I'm sorry but maybe my english just isn't understand what that means. They are saying since it's not private data there isn't need for OAuth... but I'm trying to translate that into programatic steps so this means I can skip the authentication step for non-private data requests
I'll need to look for examples on github to help it click in my brain
@worldly adder Please read the portion of the docs I linked above. I'll relink it: https://www.pathofexile.com/developer/docs/authorization#client_credentials
This is the same part of the docs Navi and I are referencing
Okay, will do. Appreciate your guiding me ❤️
No problem
Faust, did you happen to find a good way to get a list of all baseTypes? I too would like a list of all baseTypes to and scraping off poedb.tw seems less than optimal
Yep what I thought 
(note that RePoE is still without an active maintainer)

Would consider to the detriment of personal health? Yeah.
Actually able to do any tooldev stuff at all lately? Nope.
As it looks now I won't be capable of doing anything for the next league in any project.
Oh no 😦
i got docker running. still need to spend some time learning it but i at least got it started and ran an image on it. been spending some time messing with some tts machine learning thing which has been tough but ive learned a lot. signed up for copilot too though i havent really any use for it yet
In essence, I've been turbo-stressed about work, life and hobby dev for a long time while also having some related and unrelated physical and mental health problems.
Turns out that taking on every single problem in dev and being universally available to answer things people ask about PoE tooling isn't quite healthy.
I need to focus on myself for an indeterminate amount of time and get some changes implemented there.
I had hoped that someone would take up RePoE after 3.20 and provide a replacement for the data that many tools relied on but it doesn't seem like anyone stepped up.
Glad you're taking some time off then and hopefully do something to relax in your free time.
That's why you should quit and be unemployed like me
You're a huge boon to the community but that doesn't mean you should kill yourself trying to help out. I did the same thing while adjusting to having another human in the house, but I think I have a schedule down now and will stop lurking so much. Just gotta get over the catch-up anxiety, lol
There's also https://snosme.github.io/poe-dat-viewer/
which also, related to the above convo about RePoE, seems like a good candidate for a new .dat source of truth
I'll very likely be trying to help out @civic crane in a big way with it in the future once I get rolling on a project I'm planning
doesnt that just straight up use RePoE?
Nah it reads/parses .dat files (among others) directly, really good reference for rolling your own solutions as well
I may add an exporter to my parser, but what worries is me if people start depending on the output and I actually have to maintain it ...
@daring stag btw was meaning to ask, does it help you if I add a CORS whitelist to pobb.in?
Doesn't make a massive difference to me, have to do a CORS proxy for pastebin anyway, but if it's more convenient for your stats I could use your API directly
nah, stats are w/e, just wondering if I can make integrations easier. And technically you don't have to proxy for pastebin, pobbin already does that
You can proxy pastebin.com through pobb.in try pobb.in/<pastebin id>/raw
Maybe if I add poe.ninja as well 🤔
One less server for me to keep running
but also don't want to shift maintenance responsibility around just more mental overhead for everyone involved
nah, this is basically free for me
@fickle yew Would you mind if I proxied your builds (poe.ninja/pob/<id>) through pobb.in/<id>?
missing PKCE support in changelog https://www.pathofexile.com/developer/docs/changelog
Old method is still working for me
I got it, "error_description":"The redirect URI does not match"
If you provide a clear back link I think that would be okay.
make sure the redirect URI you specify in the /oauth/authorize request is the same as the one provided to /oauth/token
was that really 3 weeks ago 😅
^_^
too busy these days
I'm guessing you can always hit the IP rate limit using any API right? Haven't hit it when querying ~50 characters from different accounts yet so wondering if I should handle it properly
Does it mention the IP rule in X-Rate-Limit-Rules as contributing for those endpoints?
You mean in the header?
Not currently, but since rate limits are dynamic, I'm not sure whether it'll show up at some point
Ah.
i spent the last two days trying to get a github repo working. got it working and then found a better maintained version of roughly the same thing
so we begin again
maybe
Just wanted to say that I appreciated you 
Hello there, quite "new" on making tool for poe (I've mainly done excel spreedsheet for my characters).
I've been working on something close to pobb.in/poe.ninja: a pobcode displayer in a web page using meta-is-beta/HoradricHelper to display. I now come to you for help, with a lots of questions!
I'm searching for site like brather1ng/RePoE to get acces to stats for the gems. I've find out that image are very hard to get by, but lvlvllvlvllvlvl/RePoE managed to get them.
Do you know of any other ways I could get images easily? (I mean, without extracting from the game files, just having a somewhat uptodate repo, but if not, see next question) I don't know if I can extract image with the good format from snosme/poe-dat-viewer.
I'm also french, so I'm trying to get the french translation of stat, I think there is no other way than to use OmegaK2/PyPoE (I've seen pogo and libggpk too) to extract myself the files and building my own repo. Could someone guide me what files I should edit to get this?
Also, I found out that using the stats files, I couldn't find out where are the description of the support gems (teal text), any idea?
And lastly, is there an api to get the passive skill tree data? I'm currently copy-pasting the json from the official site each league.
Optionnal: I've discussed quickly with the concepteur from th3conc3pt3ur/poe-roadmap, there is currently no generated file to have the list of available gem reward, gem vendor. I don't know if the wiki page is automatically done by chuansing's script or if it come from gamefile or if someone is uptdating it manually, but for poe-roadmap, it is done manually.
(If you dare look at my work in progress, it's at antilogos/SimpleBuild on github).
Thanks for anyone able to answer. Thanks very much to all the developpers I've based my code on!
cant help you with most of that but
is there an api to get the passive skill tree data
from the ggpk (if your exporting stuff anyway) or the much easier solution is gggs github page
it come from gamefile or if someone is uptdating it manually
ggg removed gem rewards from the ggpk ages ago and is now a manually updated list iirc
Passive Skill Tree: https://poedb.tw/us/API%3APassive_Skill_Tree
gem rewards added back, but gem vendor no.
most weapon/armor/unique can accessed by ggg's cdn
Nice! and not... I mean, that exactly what I was looking for, I've totally forgot that they had a github, but if I want the French translation, I would still have to extract it from game file or copy paste from official website. I didn't know it was in game file though.
never actually reconstructed it from gamefile myself, but doubt its an easy extraction, yeah French translation would be harder to get as not on github
brather1ng's RePoE is indeed stale now, not sure where lvl's is at.
K2s' PyPoE is quite stale, the wiki has its own diverging PyPoE that handles dat64 and 3.20 but isn't suitable for external consumption, not sure again what lvl used.
Reusing an existing stat translation utility is a good idea as the format is a bit gnarly.
get GGG to host and maintain a simple API for storing/receiving pobs 😄
headless pob isn't too hard to setup
wonder how close to launch we'll get the skill tree
today in theory
Lol good luck Novynn!
lol for real
lol I'm famous
Hi "one guy!"
now taking suggestions
take my energy @compact isle
one guy sadge
.datl file removed, now .dat64 and .datl64 exists
take my energy @compact isle lol
is this the time were we ship some coffee packs to you
Wonder if they could release a few example item JSON's with trees so tools could start updating
Second the request for an example of how items will look in the API and/or ctrl+c
no tree information, just the allocated node's mod text
That's very helpful actually, means we just need to support the mod text to make it work. Cheers!
I'll get some examples hopefully today
will be interested to see what info filters get
items don't drop with trees so no filter things turns out this is wrong, we're adding a function
I assume the weapon tree nodes are tiered by value/rarity... if the mod text is organized by tiers it would be awesome
the advanced text has tiers
In Patch Notes:
Added a new Dexterity/Intelligence Support Gem - Manaforged Arrows: Supports bow attack skills, causing them to trigger when you've spent and amount of total mana on other bow attacks based on the supported skill's mana cost. Supported skills deal more damage based on their mana cost. Cannot modify the skills of minions.
that and should probably be a certain (... spent and amount ---> spent a certain amount)
https://github.com/grindinggear/skilltree-export tree posted
better to post this in the thread itself than in a tool-dev channel
I was gonna go to bed, but might as well update everything now
zao already posted it elsewhere
okay, all projects updated, can go to bed now
Hmm, can you no longer rename the data.json to tree.json and have pob create an lua from it?
it does it from data.json not tree.json
but also theres already a PR up with the new tree
Ah, you used to have to rename it tree.txt
Does this mean that we will not be able to get information on non-allocated nodes on these trees?
Meaning that if I list an item which has its crucible tree revealed, but nothing allocated will not show any information about the nodes and their connectivity on trade?
trade is separate from item copy/paste info, but a decent question
