Skip to content

Puter.js types and docs drift audit - 2026-07-06 #3347

Description

@reynaldichernando

Full deep audit of the puter.js SDK for TypeScript drift and documentation drift against the implementation. Every API family was re-derived from scratch (impl + types + docs read in full).

  • Commit: 2c0a1b9bbbbb8ddce52d5afc1b4d7afc8b1fb961 (2c0a1b9)
  • Date: 2026-07-06
  • Sources of truth: impl src/puter-js/src/modules/ (+ src/puter-js/src/index.js, and src/gui/src/IPC.js for the UI family) · types src/puter-js/types/ · docs src/docs/src/

Legend

🟡 types (impl/docs have it, types don't/wrong) · 🔵 docs (impl/types have it, docs don't/wrong) · 🔴 both · 🐛 impl-bug (advertised param the impl ignores, or phantom typed method) · 🆕/🗑 manifest-drift


🎯 Highest-impact shortlist (cross-family)

  1. 🐛 KV list(pattern, false) silently ignores the pattern — a form the types explicitly sanction; returns the entire keyspace instead of the filtered subset. KV.js:618
  2. 🐛 KV incr(key, 0) / decr(key, 0) off-by-one — explicit 0 is coerced to the default 1. KV.js:323,353
  3. 🔴 KV MAX_VALUE_SIZE documented as 400 KB but is 399 * 1024 (399 KB) — wrong in 6 places across types + docs. KV.js:36
  4. 🐛 FSItem.move() / FSItem.copy() advertised params silently ignoredoverwrite/newName/autoRename are typed & accepted but positionally mis-mapped into the wrong fs.move/fs.copy argument slots. FSItem.js:89-94
  5. 🔴 FSItem.isDir vs impl isDirectory — the documented/typed property does not exist on the instance; every consumer reading item.isDir gets undefined. FSItem.js:17
  6. 🐛 UI notify type & duration silently dropped for apps — two prominently documented options that do nothing in the real Puter desktop (IPC never forwards them). IPC.js:283-290
  7. 🐛 UI socialShare(url) throws in the GUI — documented "options optional", but the IPC handler dereferences event.data.options.left unconditionally. IPC.js:329
  8. 🐛 Networking PSocket.write ArrayBuffer branch throws — calls data.write(...) on an ArrayBuffer; ArrayBuffer input is typed/documented as supported but crashes. PSocket.js:74-75
  9. 🔴 Auth getGlobalUsage shipping with zero types and zero docs. Auth.js:338
  10. 🔴 Perms requestReadAppRootDir / requestWriteAppRootDir missing from types + docs — and they carry live impl bugs (hardcoded read access; undefined-variable ReferenceError). Perms.js:333,346
  11. 🐛 Hosting create('subdomain') single-arg overload untyped — real, explicitly-coded form fails typecheck (types require dirPath). Hosting.js:50
  12. 🔴 AI chat streaming error & image chunk types — real emitted chunk types missing from both ChatResponseChunk and the object doc; the error chunk especially matters since errors arrive as a chunk, not a throw. ai.d.ts:108

🆕/🗑 Manifest-drift (disk vs Expected manifest)

File Status Tag
src/docs/src/Objects/ttsengine.md On disk, not in manifest Objects list (backs AI/txt2speech.listEngines) 🆕
src/docs/src/Objects/ttsvoice.md On disk, not in manifest Objects list (backs AI/txt2speech.listVoices) 🆕

Everything else on disk matches the manifest exactly (all impl modules, FS ops, networking, UI components, types, and docs families/pages present as expected). No removed/renamed files.


AI

Function Item Issue Tag impl ref
chat provider option Read by impl & typed, but undocumented in chat.md options list 🔵 AI.js:800-802
chat driver option Read by impl (maps to provider) & typed, but undocumented 🔵 AI.js:812-814
chat context_management option In impl PARAMS_TO_PASS & types; chat.md documents only compaction 🔵 AI.js:819
chat response option In impl PARAMS_TO_PASS & typed; undocumented (borderline, loosely typed) 🔵 AI.js:819
chat vision option ChatOptions.vision?: boolean typed, but impl never reads a user-supplied vision (only sets it internally) — value silently dropped 🐛 ai.d.ts:36 / AI.js:733
chat (stream) "error" chunk Documented (chat.md:227,295-297 with .message) but absent from ChatResponseChunk.type enum & chatresponsechunk.md 🔴 ai.d.ts:108
chat (stream) "image" chunk Documented (chat.md:377-384, part.image) but absent from type enum, image field & chatresponsechunk.md 🔴 ai.d.ts:108
chat message.images typing ChatMessage.images non-optional but only present on image-gen responses → should be images? 🟡 ai.d.ts:14
chat image_url.thoughtSignature Passed/read in multi-turn image editing but ImageContent doesn't model it 🟡 ai.d.ts:3-6
ChatResponse choices field Typed choices?: unknown; not in chatresponse.md (borderline) 🔵 ai.d.ts:93
speech2speech voiceId alias Impl normalizes voiceIdvoice; missing from types & docs 🔴 AI.js:416
speech2speech modelId alias Impl normalizes modelIdmodel; missing from types & docs 🔴 AI.js:417
speech2speech outputFormat alias Impl normalizes →output_format; missing from types & docs 🔴 AI.js:418
speech2speech voiceSettings alias Impl normalizes →voice_settings; missing from types & docs 🔴 AI.js:419
speech2speech fileFormat alias Impl normalizes →file_format; missing from types & docs 🔴 AI.js:420
speech2speech removeBackgroundNoise alias Impl normalizes →remove_background_noise; not in types; docs use it in an example but options list documents only snake_case 🔴 AI.js:421-423
speech2speech optimizeStreamingLatency alias Impl normalizes →optimize_streaming_latency; missing from types & docs 🔴 AI.js:424-426
speech2speech enableLogging alias Impl normalizes →enable_logging; missing from types & docs 🔴 AI.js:427-429
txt2vid duration alias Impl accepts durationseconds, typed, but txt2vid.md documents only seconds 🔵 AI.js:979-981
txt2vid driver option Read by impl & typed; undocumented 🔵 AI.js:988
txt2img driver option Impl uses options.driver (not provider) for service override; typed but txt2img.md documents provider only 🔵 AI.js:909
txt2img service option Typed service?: string but impl never reads it (only driver) — possible phantom 🐛 (low-conf) ai.d.ts:182
txt2img nano-banana / nano-banana-pro model aliases Impl remaps to Gemini ids; not in options table nor types 🔴 AI.js:900-907
txt2speech.listVoices string-arg overload Impl & types accept a bare engine string; doc Syntax block omits the form 🔵 AI.js:651-652

FileSystem (FS)

Function Item Issue Tag impl ref
FSItem isDirectory vs isDir Impl exposes isDirectory; types & docs call it isDir — property does not exist 🔴 FSItem.js:17
FSItem.move() overwrite, newName params Passed positionally to fs.move, which expects arg[2]=options object → both ignored 🐛 FSItem.js:89-90 / move.js:13-21
FSItem.copy() autoRename, overwrite params Same mis-map: arg[2] expected as options object; both ignored 🐛 FSItem.js:93-94 / copy.js:12-24
FSItem move(), copy() methods Implemented + typed but absent from fsitem.md methods list 🔵 FSItem.js:89,93
read() cache option Impl reads options.cache; missing from ReadOptions and read.md 🔴 read.js:46
readdir() no_subdomains Impl reads/sends it; not in ReaddirOptions 🟡 readdir.js:59,128
readdir() consistency, no_thumbs, no_assocs, no_subdomains Impl-read; readdir.md documents only path,uid 🔵 readdir.js:44,57-60
readdir() readdir(path, options) overload Docs advertise it, but positional branch treats arg[1] as success callback — options mis-handled 🐛 readdir.js:18-25 / readdir.md:14
stat() returnWorkers alias Impl reads returnSubdomains || returnWorkers; alias missing from StatOptions 🟡 stat.js:54,126
stat() consistency Typed but not in stat.md options 🔵 stat.js:31
mkdir() rename alias Impl reads rename || dedupeName; alias typed but not in mkdir.md 🔵 mkdir.js:51
mkdir() recursive alias Impl reads recursive || createMissingParents; typed but not in mkdir.md 🔵 mkdir.js:54
mkdir() shortcutTo Impl sends shortcut_to; typed but not in mkdir.md 🔵 mkdir.js:52
move() dedupeName option Docs advertise it, but move.js never reads any dedupe key nor sends dedupe_name — phantom 🐛 move.js:59-67 / move.md:34
move() newName option Impl supports newName/new_name; move.md omits it 🔵 move.js:63
copy() dedupeName in positional form 3-arg positional branch never extracts dedupeName/dedupe_name from arg[2]; only copy(options) form works 🐛 copy.js:12-24,56
upload() generateThumbnails, thumbnailGenerator, thumbnail Impl reads all three; none in UploadOptions 🟡 upload.js:571,573,690
upload() thumbnail options, appUID, shortcutTo, createFileParent, … upload.md documents only overwrite,dedupeName,createMissingParents 🔵 upload.js:571,737,1311
revokeReadURL() method existence Wired on puter.fs but absent from FS types class and no doc 🔴 revokeReadUrl.js / index.js:44
readdirSubdomains() method existence Wired on puter.fs but absent from FS types class and no doc 🔴 readdirSubdomains.js / index.js:46
sign() doc existence Typed (SignResult) & implemented, but no FS/sign doc page 🔵 sign.js / index.js:42
space() params space.md says "Parameters: None", but impl accepts (success, error) and an options object; example calls puter.space() not puter.fs.space() 🔵 space.js:3-16
FSItem uid/uuid, readURL/writeURL/metadataURL Set by constructor & (URLs) present in types, but omitted from fsitem.md attributes 🔵 FSItem.js:5-11
FSItem.rename() uid vs path (low-conf) Calls fs.rename(this.uid, ...); rename.js else-branch treats arg[0] as path, so uid may be sent as a path 🐛 (low-conf) FSItem.js:86 / rename.js:12-18

KV

Function Item Issue Tag impl ref
MAX_VALUE_SIZE Constant value Impl 399 * 1024 (399 KB); types comment & every value-size mention say 400 KB 🔴 KV.js:36
set value max size "Maximum value size is 400 KB" — wrong, 399 KB 🔴 KV.js:36 / kv.d.ts:128 / set.md:29,37
set (batch) KVSetItem.value / KVSetObject.value Both say 400 KB — wrong 🟡 kv.d.ts:17,26
MAX_VALUE_SIZE prop Types doc comment (400 KB) — wrong 🟡 kv.d.ts:122
incr amount = 0 !amountOrMap treats explicit 0 as falsy → increments by 1 🐛 KV.js:323
decr amount = 0 Same bug: decr(key, 0) decrements by 1 🐛 KV.js:353
list list(pattern, false) Types allow it, but pattern only captured when arg[1]===true → returns ALL keys unfiltered 🐛 KV.js:618-627
list list(true, optConfig) Typed to return KVPair[], but impl returns keys only when a config 2nd arg follows 🐛 / 🟡 KV.js:606
get object-form overload Impl accepts get({ key, optConfig }); no object overload in types 🟡 KV.js:256
del object-form overload Impl accepts del({ key, optConfig }); no object overload in types 🟡 KV.js:540
incr object-form overload Impl accepts incr({ key, pathAndAmountMap, optConfig }); no object overload 🟡 KV.js:308
decr object-form overload Impl accepts decr({ key, pathAndAmountMap, optConfig }); no object overload 🟡 KV.js:338
clear Docs Public alias for flush (typed) but no docs entry / not in KV.md functions 🔵 KV.js:676
optConfig Docs { appUuid } public option in all typed signatures; never mentioned in any KV doc 🔵 KV.js:118

Verified correct: MAX_KEY_SIZE = 1024 ("1 KB") everywhere; add default 1 (correctly handles add(key, 0)); KVPair/KVListPage object docs vs interfaces.


Drivers

Function Item Issue Tag impl ref
call 2-arg overload Impl supports call(iface, parameters) (method defaults to iface) — shown in the impl's own doc comment — but types declare only 3-arg & 4-arg forms 🟡 Drivers.js:262

OS

Function Item Issue Tag impl ref
setAuthToken / setAPIOrigin Types Exist in impl & typed in drivers.d.ts, but os.d.ts omits them (borderline internal plumbing) 🟡 OS.js:26,37

UI

Function Item Issue Tag impl ref
alert body_icon / icon options Typed & documented, and UIAlert supports body_icon, but the ALERT IPC handler forwards only message/buttons/type — dropped for apps 🐛 IPC.js:230-238
notify type option Typed & documented, but showNotification IPC never forwards it to the GUI UINotification 🐛 IPC.js:283-290
notify duration option Typed & documented ("Defaults to 5000"), but never forwarded by the IPC handler 🐛 IPC.js:283-290
socialShare options optional Docs & types mark options optional, but IPC dereferences event.data.options.left unconditionally → socialShare(url) throws in the GUI 🐛 IPC.js:329
socialShare return value Impl returns a promise via #postMessageWithCallback, but IPC never posts back original_msg_id → promise never resolves 🟡 UI.js:729
showFontPicker defaultFont option Typed & honored by standalone fallback, but GUI path ignores it (reads only options.default) 🐛 UIWindowFontPicker.js:47,58 / IPC.js:1350
showFontPicker default alias GUI & standalone both read default; FontPickerOptions omits it 🟡 UIWindowFontPicker.js:58
showColorPicker defaultValue alias GUI reads defaultValue ?? defaultColor ?? default; ColorPickerOptions declares only defaultColor 🟡 UIWindowColorPicker.js:77
showColorPicker default alias Same line reads default; not in ColorPickerOptions 🟡 UIWindowColorPicker.js:77
showColorPicker Parameters section showColorPicker.md has NO Parameters section — neither positional nor options documented 🔵 showColorPicker.md:9-14
prompt options / defaultValue Typed & read by IPC (defaultValue), but prompt.md stops at prompt(message, placeholder) 🔵 prompt.md:9-14
setMenuItemIcon doc file Typed & impl, no docs / absent from UI.md index 🔵 UI.js:1125
setMenuItemIconActive doc file Typed & impl, no docs 🔵 UI.js:1129
setMenuItemChecked doc file Typed & impl, no docs 🔵 UI.js:1133
requestUpgrade doc file Typed & impl, no docs 🔵 UI.js:892
getEntriesFromDataTransferItems doc file Typed & impl, undocumented (helper) 🔵 UI.js:1173
contextMenu theme option Typed (standalone-only), not in contextMenu.md 🔵 UI.js:1147
setWindowPosition/setWindowX/setWindowY clamping Docs say "positive number" but IPC clamps x to [0, innerWidth-100], y to [taskbar_height, innerHeight-100]; undocumented 🔵 IPC.js:1076-1106,1136-1194
launchApp app_name alias / callback / pseudonym form Typed & impl accept app_name, callback, and name#(as)pseudonym; launchApp.md documents none 🔵 UI.js:1309-1327

Note: disableMenuItem/enableMenuItem are app-facing counterparts to the typed setMenuItem* trio but are neither typed nor documented (inconsistency). No phantom typed methods. createWindow handle return {id}, window-size clamping, and all event names (localeChanged/themeChanged/connection, onItemsOpened/onLaunchedWithItems/onWindowClose) match.


Workers

Function Item Issue Tag impl ref
getLoggingHandle method existence In impl & types but absent from all docs 🔵 Workers.js:137
getLoggingHandle events / return Types expose only close+onLog; impl also dispatches a 'log' MessageEvent and defines start/cancel (ReadableStream) — untyped 🟡 Workers.js:161-174
create workerName validity Docs/types say name may contain letters etc.; impl silently lowercases it (toLocaleLowerCase()) 🔵 Workers.js:41
get / delete workerName Same silent lowercasing on lookup; undocumented 🔵 Workers.js:100,115
exec x-puter-no-auth header Impl honors this header to suppress the auto-injected puter-auth token; undocumented escape hatch 🔵 Workers.js:70-73
create Return errors WorkerDeployment.errors typed/documented as populated, but the success (only returning) path omits it 🟡 Workers.js:50-56

router.md / types.md describe the deployed-worker runtime (not the SDK call surface) — internally consistent, nothing to map.


Hosting

Function Item Issue Tag impl ref
create single-arg overload Impl supports create('subdomain'), but types require dirPath and docs list only create(subdomain, dirPath)/create(options) 🔴 Hosting.js:50-58
create options root_dir optionality Impl passes object through, accepts { subdomain } alone; types & docs mark root_dir required 🔴 Hosting.js:76-78
update dirPath optionality Impl allows update('subdomain') → sends root_dir: null (disconnects dir); typed/documented as required, behavior undocumented 🔴 Hosting.js:99
create/update/get/delete subdomain normalization All normalize xxx.puter.site/xxx.puter.com first arg to bare label; undocumented 🔵 Hosting.js:53,64,90,113,129
list return filtering Impl filters out workers.puter.* subdomains; docs/types say "all subdomains" 🔵 Hosting.js:44

Subdomain object doc matches the interface.


Networking

Function Item Issue Tag impl ref
PSocket.write ArrayBuffer branch data.write(...) calls a non-existent method on the ArrayBuffer → TypeError; the data.resize discriminator only exists on resizable ArrayBuffers, so plain ArrayBuffers fall to else → "Invalid data type". ArrayBuffer is typed & documented as supported but unusable 🐛 (+🔴) PSocket.js:74-75
socket events 'drain' event Declared in the event list (PSocket.js:16) and SocketEvent union but never emitted; no on('drain') overload; docs omit it — phantom 🟡 PSocket.js:16
puter.net.generateWispV1URL doc existence In impl & types but documented nowhere 🔵 index.js:627
socket.write callback param Impl & types include write(data, callback); Socket.md/TLSSocket.md document only data 🔵 PSocket.js:70

Emitted events otherwise match: open/data(Uint8Array)/close(boolean)/error(Error); PTLS tlsopen/tlsdata/tlsclose/error.


Peer

Function Item Issue Tag impl ref
PuterPeerConnection 'error' event payload type Type declares error: string, but impl always dispatches an Error object (and docs example uses event.error?.message) 🟡 Peer.js:33-39,213,237,286
PuterPeerServer.message method existence Types declare public message(data), but only a private #message exists — phantom 🟡 Peer.js:104
PuterPeerServer.close method existence Public close() in impl, absent from types and serve.md 🔴 Peer.js:170
PuterPeerConnection.setRemoteDescription / addIceCandidate return shape async (return Promise<void>) in impl but typed as void 🟡 Peer.js:327,331
AppConnection response field Typed readonly response?; AppConnection.md documents only usesSDK 🔵 UI.js (AppConnection)

Peer options (iceServers, forceRelay + default) match; connection/message/open/close events align.


Apps

Function Item Issue Tag impl ref
create title optionality Doc labels title "(required)" then says it defaults to name — contradictory; title is optional (types correct) 🔵 Apps.js:90
create indexURL requiredness Doc says "created with no index page" if omitted, but impl throws 'Index URL is required' 🔵 Apps.js:135-143
checkName doc existence In impl & types (apps.d.ts:195), no doc page / absent from Apps.md functions 🔵 Apps.js:206
getDeveloperProfile doc existence In impl & types (apps.d.ts:196-197), no doc 🔵 Apps.js:232

App / CreateAppResult object docs match their interfaces.


Auth

Function Item Issue Tag impl ref
getGlobalUsage existence Public method (hits /metering/globalUsage) absent from types AND docs entirely 🔴 Auth.js:338
getMonthlyUsage nav/index Doc page exists but not listed in Auth.md functions 🔵 Auth.js:258
getDetailedAppUsage nav/index Doc page exists but not listed in Auth.md functions 🔵 Auth.js:296
whoami doc existence In types (auth.d.ts:119) but no doc page 🔵 Auth.js:211
User object feature_flags, hasDevAccountAccess, otp In the User interface but not documented in user.md 🔵 auth.d.ts:15,16,20

SignInResult / MonthlyUsage / DetailedAppUsage object docs match; signIn options & rejections match.


Perms

Function Item Issue Tag impl ref
requestReadAppRootDir existence Public request* method (takes app_uid) missing from both types and docs 🔴 Perms.js:333
requestWriteAppRootDir existence Public request* method missing from both types and docs 🔴 Perms.js:346

All 14 documented request* methods agree impl↔types↔docs on return shape. requestPermission deprecated alias and grant/revoke/group-mgmt are out of documented scope.


Utils (top-level, src/index.js)

Function Item Issue Tag impl ref
exit doc existence exit(statusCode?) in impl & types but entirely undocumented (no Utils/exit.md, not in Utils.md) 🔵 index.js:1040
print escapeHTML option In impl & typed, but print.md documents only code 🔵 index.js:1258,1267
print variadic form print(...args) prints every arg; docs & types show only a single text param 🔴 index.js:1251,1264
env return values env.md lists only app/web/gui; impl also returns web-worker/service-worker/nodejs (types correct) 🔵 index.js:357-388
on / off existence Public event API puter.on/off (e.g. auth.reauth_required) in impl but not declared in puter.d.ts 🟡 index.js:972,979

randName default separator '-', appID (value, not getter), and return shapes all consistent.


🐛 impl-bug bucket (code fixes, not doc/type edits)

These advertise a param/option the impl silently ignores, declare a phantom method, or crash on documented input.

AI

  • chatvision?: boolean typed but a user-supplied vision is never read (only set internally); passing { vision: true } has no effect. AI.js:733
  • txt2imgservice?: string typed but impl reads only options.driver; service survives only via passthrough (likely phantom). ai.d.ts:182

FileSystem

  • FSItem.move(dest, overwrite, newName) — booleans passed positionally to fs.move, whose positional branch expects arg[2]=options object → overwrite/newName dropped. FSItem.js:89-90
  • FSItem.copy(dest, autoRename, overwrite) — same mis-map; autoRename/overwrite dropped (overwrite lands in the success callback slot). FSItem.js:93-94
  • move({ dedupeName }) — advertised in move.md but move.js never reads any dedupe key nor sends dedupe_name (phantom option). move.js:59-67
  • copy(source, dest, { dedupeName }) — 3-arg positional branch never extracts dedupeName/dedupe_name; only copy(options) honors it. copy.js:12-24,56
  • readdir(path, options) — documented form; positional branch binds arg[1] to success, so an options object there is lost. readdir.js:18-25
  • (low-conf) FSItem.rename(newName) — calls fs.rename(this.uid, ...) but rename.js else-branch stores arg[0] as path, so the uid is treated as a filesystem path. FSItem.js:86 / rename.js:12-18

KV

  • incr(key, 0) / decr(key, 0) — explicit 0 coerced to default 1 via !amountOrMap. KV.js:323,353
  • list(pattern, false[, optConfig]) — pattern only captured when 2nd arg is true; explicit false drops the pattern → returns all keys. KV.js:618-627
  • list(true, optConfig)returnValues not set true when a config object follows → returns bare keys despite typed KVPair[]. KV.js:606

UI

  • alertoptions.body_icon / options.icon never forwarded to the GUI. IPC.js:230-238
  • notifyoptions.type never forwarded to the GUI. IPC.js:283-290
  • notifyoptions.duration never forwarded to the GUI. IPC.js:283-290
  • socialShare(url) — crashes (TypeError) when options omitted despite being optional; and its returned promise never resolves (no original_msg_id reply). IPC.js:329,325-397
  • showFontPicker({ defaultFont }) — typed/standalone-honored option ignored by the GUI, which reads only options.default. UIWindowFontPicker.js:47,58

Workers

  • delete — dead/duplicated error branch: nested identical if (!driverResult.result) constructs new Error("Worker doesn't exist") but never throws it → the message is never surfaced. Workers.js:119-123
  • getLoggingHandle — driver args dropped: make_driver_method([], ...) called with two positional args and no arg_defs, so puter.authToken/workerName are interpreted as success/error callbacks and never sent → logging URL request goes out with no auth token or worker name. Workers.js:138
  • getLoggingHandle — unbound close: logStreamObject.close = socket.close assigns unbound; handle.close() throws an illegal-invocation TypeError (the non-enumerable cancel does it correctly). Workers.js:174

Networking

  • PSocket.write — ArrayBuffer branch calls data.write(...) on an ArrayBuffer (no such method) → TypeError; non-resizable ArrayBuffers never reach it and throw "Invalid data type" instead. PSocket.js:74-75 (same fragile data.resize detection at PTLS.js:102)

Peer

  • PuterPeerServer.message() — typed public method does not exist (only private #message) → phantom; TS compiles, runtime fails. Peer.js:104

Perms

  • #requestAppRootDir(access, app_uid) — hardcodes access: 'read' in the request body, ignoring the parameter → requestWriteAppRootDir requests read access, not write. Perms.js:361
  • #requestAppRootDir — references undefined variable app_or_uuid (should be app_uid) → ReferenceError if that branch is reached. Perms.js:367
  • requestReadAppRootDir error message typo: 'parameter app_uid must be a strinkg'. Perms.js:356
  • getDeveloperProfile — duplicated option parsing + double-Promise nesting (outer executor's return ignored); works only via the success ?? resUpper path (latent bug / dead code). Apps.js:232-268

Generated by an automated deep-audit routine. Each finding re-derived from impl + types + docs at commit 2c0a1b9. False-positive filters applied per the audit spec (internal _-suffixed methods, cosmetic param-name diffs, intentionally-unknown provider payloads, internal plumbing).

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions