[{"data":1,"prerenderedAt":3648},["ShallowReactive",2],{"navigation":3,"\u002Frecipes\u002Femail-archive":927},[4,40,114,446,474,498,596,903],{"title":5,"path":6,"stem":7,"children":8},"Architecture","\u002Farchitecture","architecture",[9,14,28,32,36],{"title":10,"path":6,"stem":11,"access":12,"icon":13},"Overview","architecture\u002Findex","public","i-lucide-network",{"title":10,"path":15,"stem":16,"children":17,"access":12,"icon":19},"\u002Farchitecture\u002Fkernel","architecture\u002F1.kernel\u002Findex",[18,20,24],{"title":10,"path":15,"stem":16,"access":12,"icon":19},"i-lucide-box",{"title":21,"path":22,"stem":23,"access":12},"Enclave","\u002Farchitecture\u002Fkernel\u002Fenclave","architecture\u002F1.kernel\u002Fenclave",{"title":25,"path":26,"stem":27,"access":12},"Forking the enclave","\u002Farchitecture\u002Fkernel\u002Fforking-the-enclave","architecture\u002F1.kernel\u002Fforking-the-enclave",{"title":29,"path":30,"stem":31,"access":12},"Ports","\u002Farchitecture\u002Fports","architecture\u002F2.ports",{"title":33,"path":34,"stem":35,"access":12},"Service layers","\u002Farchitecture\u002Fservice-layers","architecture\u002F3.service-layers",{"title":37,"path":38,"stem":39,"access":12},"Families","\u002Farchitecture\u002Ffamilies","architecture\u002F4.families",{"title":41,"path":42,"stem":43,"children":44},"Core","\u002Fcore","core",[45,47,50,53,56,88,97],{"title":10,"path":42,"stem":46,"access":12,"icon":19},"core\u002Findex",{"title":10,"path":48,"stem":49,"access":12},"\u002Fcore\u002F01-overview","core\u002F01-overview",{"title":10,"path":51,"stem":52,"access":12},"\u002Fcore\u002F05-stores","core\u002F05-stores",{"title":10,"path":54,"stem":55,"access":12},"\u002Fcore\u002F06-permissions-and-keyring","core\u002F06-permissions-and-keyring",{"title":10,"path":57,"stem":58,"children":59,"access":12},"\u002Fcore\u002Fnoydb","core\u002F2.noydb\u002Findex",[60,61,65,68,72,76,80,84],{"title":10,"path":57,"stem":58,"access":12},{"title":62,"path":63,"stem":64,"access":12},"Noydb","\u002Fcore\u002Fnoydb\u002Fmethods","core\u002F2.noydb\u002F1.methods",{"title":21,"path":66,"stem":67,"access":12},"\u002Fcore\u002Fnoydb\u002Fenclave","core\u002F2.noydb\u002F2.enclave",{"title":69,"path":70,"stem":71,"access":12},"Secret & keyring","\u002Fcore\u002Fnoydb\u002Fkeyring","core\u002F2.noydb\u002F3.keyring",{"title":73,"path":74,"stem":75,"access":12},"Authentication","\u002Fcore\u002Fnoydb\u002Fauthentication","core\u002F2.noydb\u002F4.authentication",{"title":77,"path":78,"stem":79,"access":12},"Auth recovery","\u002Fcore\u002Fnoydb\u002Frecovery","core\u002F2.noydb\u002F5.recovery",{"title":81,"path":82,"stem":83,"access":12},"Configuration","\u002Fcore\u002Fnoydb\u002Fconfiguration","core\u002F2.noydb\u002F6.configuration",{"title":85,"path":86,"stem":87,"access":12},"Strategies","\u002Fcore\u002Fnoydb\u002Fstrategies","core\u002F2.noydb\u002F7.strategies",{"title":10,"path":89,"stem":90,"children":91,"access":12},"\u002Fcore\u002Fvault","core\u002F3.vault\u002Findex",[92,93],{"title":10,"path":89,"stem":90,"access":12},{"title":94,"path":95,"stem":96,"access":12},"Vault","\u002Fcore\u002Fvault\u002Fmethods","core\u002F3.vault\u002F1.methods",{"title":10,"path":98,"stem":99,"children":100,"access":12},"\u002Fcore\u002Fcollection","core\u002F4.collection\u002Findex",[101,102,106,110],{"title":10,"path":98,"stem":99,"access":12},{"title":103,"path":104,"stem":105,"access":12},"Collection","\u002Fcore\u002Fcollection\u002Fmethods","core\u002F4.collection\u002F1.methods",{"title":107,"path":108,"stem":109,"access":12},"Querying","\u002Fcore\u002Fcollection\u002Fquerying","core\u002F4.collection\u002F2.querying",{"title":111,"path":112,"stem":113,"access":12},"Schema","\u002Fcore\u002Fcollection\u002Fschema","core\u002F4.collection\u002F3.schema",{"title":37,"path":115,"stem":116,"children":117},"\u002Ffamilies","families",[118,121,168,194,208,212,216,294,340],{"title":10,"path":115,"stem":119,"access":12,"icon":120},"families\u002Findex","i-lucide-plug",{"title":122,"path":123,"stem":124,"children":125,"access":12,"icon":127},"as-Exports","\u002Ffamilies\u002Fas","families\u002Fas\u002Findex",[126,128,132,136,140,144,148,152,156,160,164],{"title":122,"path":123,"stem":124,"access":12,"icon":127},"i-lucide-book-open",{"title":129,"path":130,"stem":131,"access":12},"aws-s3","\u002Ffamilies\u002Fas\u002Faws-s3","families\u002Fas\u002Faws-s3",{"title":133,"path":134,"stem":135,"access":12},"blob","\u002Ffamilies\u002Fas\u002Fblob","families\u002Fas\u002Fblob",{"title":137,"path":138,"stem":139,"access":12},"csv","\u002Ffamilies\u002Fas\u002Fcsv","families\u002Fas\u002Fcsv",{"title":141,"path":142,"stem":143,"access":12},"json","\u002Ffamilies\u002Fas\u002Fjson","families\u002Fas\u002Fjson",{"title":145,"path":146,"stem":147,"access":12},"ndjson","\u002Ffamilies\u002Fas\u002Fndjson","families\u002Fas\u002Fndjson",{"title":149,"path":150,"stem":151,"access":12},"noydb","\u002Ffamilies\u002Fas\u002Fnoydb","families\u002Fas\u002Fnoydb",{"title":153,"path":154,"stem":155,"access":12},"sql","\u002Ffamilies\u002Fas\u002Fsql","families\u002Fas\u002Fsql",{"title":157,"path":158,"stem":159,"access":12},"xlsx","\u002Ffamilies\u002Fas\u002Fxlsx","families\u002Fas\u002Fxlsx",{"title":161,"path":162,"stem":163,"access":12},"xml","\u002Ffamilies\u002Fas\u002Fxml","families\u002Fas\u002Fxml",{"title":165,"path":166,"stem":167,"access":12},"zip","\u002Ffamilies\u002Fas\u002Fzip","families\u002Fas\u002Fzip",{"title":169,"path":170,"stem":171,"children":172,"access":12,"icon":127},"at-Seals","\u002Ffamilies\u002Fat","families\u002Fat\u002Findex",[173,174,178,182,186,190],{"title":169,"path":170,"stem":171,"access":12,"icon":127},{"title":175,"path":176,"stem":177,"access":12},"aws-kms","\u002Ffamilies\u002Fat\u002Faws-kms","families\u002Fat\u002Faws-kms",{"title":179,"path":180,"stem":181,"access":12},"azure-keyvault","\u002Ffamilies\u002Fat\u002Fazure-keyvault","families\u002Fat\u002Fazure-keyvault",{"title":183,"path":184,"stem":185,"access":12},"env","\u002Ffamilies\u002Fat\u002Fenv","families\u002Fat\u002Fenv",{"title":187,"path":188,"stem":189,"access":12},"gcp-kms","\u002Ffamilies\u002Fat\u002Fgcp-kms","families\u002Fat\u002Fgcp-kms",{"title":191,"path":192,"stem":193,"access":12},"macos-keychain","\u002Ffamilies\u002Fat\u002Fmacos-keychain","families\u002Fat\u002Fmacos-keychain",{"title":195,"path":196,"stem":197,"children":198,"access":12,"icon":127},"by-Sessions","\u002Ffamilies\u002Fby","families\u002Fby\u002Findex",[199,200,204],{"title":195,"path":196,"stem":197,"access":12,"icon":127},{"title":201,"path":202,"stem":203,"access":12},"peer","\u002Ffamilies\u002Fby\u002Fpeer","families\u002Fby\u002Fpeer",{"title":205,"path":206,"stem":207,"access":12},"tabs","\u002Ffamilies\u002Fby\u002Ftabs","families\u002Fby\u002Ftabs",{"title":209,"path":210,"stem":211,"access":12},"Classifying a package","\u002Ffamilies\u002Fclassification","families\u002Fclassification",{"title":213,"path":214,"stem":215,"access":12},"Command-line tools","\u002Ffamilies\u002Fcli","families\u002Fcli",{"title":217,"path":218,"stem":219,"children":220,"access":12,"icon":127},"in-Frameworks","\u002Ffamilies\u002Fin","families\u002Fin\u002Findex",[221,222,226,230,234,238,242,246,250,254,258,262,266,270,274,278,282,286,290],{"title":217,"path":218,"stem":219,"access":12,"icon":127},{"title":223,"path":224,"stem":225,"access":12},"ai","\u002Ffamilies\u002Fin\u002Fai","families\u002Fin\u002Fai",{"title":227,"path":228,"stem":229,"access":12},"devtools","\u002Ffamilies\u002Fin\u002Fdevtools","families\u002Fin\u002Fdevtools",{"title":231,"path":232,"stem":233,"access":12},"devtools-tui","\u002Ffamilies\u002Fin\u002Fdevtools-tui","families\u002Fin\u002Fdevtools-tui",{"title":235,"path":236,"stem":237,"access":12},"liff","\u002Ffamilies\u002Fin\u002Fliff","families\u002Fin\u002Fliff",{"title":239,"path":240,"stem":241,"access":12},"nextjs","\u002Ffamilies\u002Fin\u002Fnextjs","families\u002Fin\u002Fnextjs",{"title":243,"path":244,"stem":245,"access":12},"nuxt","\u002Ffamilies\u002Fin\u002Fnuxt","families\u002Fin\u002Fnuxt",{"title":247,"path":248,"stem":249,"access":12},"pinia","\u002Ffamilies\u002Fin\u002Fpinia","families\u002Fin\u002Fpinia",{"title":251,"path":252,"stem":253,"access":12},"pwa","\u002Ffamilies\u002Fin\u002Fpwa","families\u002Fin\u002Fpwa",{"title":255,"path":256,"stem":257,"access":12},"react","\u002Ffamilies\u002Fin\u002Freact","families\u002Fin\u002Freact",{"title":259,"path":260,"stem":261,"access":12},"relay","\u002Ffamilies\u002Fin\u002Frelay","families\u002Fin\u002Frelay",{"title":263,"path":264,"stem":265,"access":12},"rest","\u002Ffamilies\u002Fin\u002Frest","families\u002Fin\u002Frest",{"title":267,"path":268,"stem":269,"access":12},"solid","\u002Ffamilies\u002Fin\u002Fsolid","families\u002Fin\u002Fsolid",{"title":271,"path":272,"stem":273,"access":12},"svelte","\u002Ffamilies\u002Fin\u002Fsvelte","families\u002Fin\u002Fsvelte",{"title":275,"path":276,"stem":277,"access":12},"tanstack-query","\u002Ffamilies\u002Fin\u002Ftanstack-query","families\u002Fin\u002Ftanstack-query",{"title":279,"path":280,"stem":281,"access":12},"tanstack-table","\u002Ffamilies\u002Fin\u002Ftanstack-table","families\u002Fin\u002Ftanstack-table",{"title":283,"path":284,"stem":285,"access":12},"vue","\u002Ffamilies\u002Fin\u002Fvue","families\u002Fin\u002Fvue",{"title":287,"path":288,"stem":289,"access":12},"yjs","\u002Ffamilies\u002Fin\u002Fyjs","families\u002Fin\u002Fyjs",{"title":291,"path":292,"stem":293,"access":12},"zustand","\u002Ffamilies\u002Fin\u002Fzustand","families\u002Fin\u002Fzustand",{"title":295,"path":296,"stem":297,"children":298,"access":12,"icon":127},"on-Auth","\u002Ffamilies\u002Fon","families\u002Fon\u002Findex",[299,300,304,308,312,316,320,324,328,332,336],{"title":295,"path":296,"stem":297,"access":12,"icon":127},{"title":301,"path":302,"stem":303,"access":12},"email-otp","\u002Ffamilies\u002Fon\u002Femail-otp","families\u002Fon\u002Femail-otp",{"title":305,"path":306,"stem":307,"access":12},"magic-link","\u002Ffamilies\u002Fon\u002Fmagic-link","families\u002Fon\u002Fmagic-link",{"title":309,"path":310,"stem":311,"access":12},"oidc","\u002Ffamilies\u002Fon\u002Foidc","families\u002Fon\u002Foidc",{"title":313,"path":314,"stem":315,"access":12},"password","\u002Ffamilies\u002Fon\u002Fpassword","families\u002Fon\u002Fpassword",{"title":317,"path":318,"stem":319,"access":12},"pin","\u002Ffamilies\u002Fon\u002Fpin","families\u002Fon\u002Fpin",{"title":321,"path":322,"stem":323,"access":12},"recovery","\u002Ffamilies\u002Fon\u002Frecovery","families\u002Fon\u002Frecovery",{"title":325,"path":326,"stem":327,"access":12},"shamir","\u002Ffamilies\u002Fon\u002Fshamir","families\u002Fon\u002Fshamir",{"title":329,"path":330,"stem":331,"access":12},"threat","\u002Ffamilies\u002Fon\u002Fthreat","families\u002Fon\u002Fthreat",{"title":333,"path":334,"stem":335,"access":12},"totp","\u002Ffamilies\u002Fon\u002Ftotp","families\u002Fon\u002Ftotp",{"title":337,"path":338,"stem":339,"access":12},"webauthn","\u002Ffamilies\u002Fon\u002Fwebauthn","families\u002Fon\u002Fwebauthn",{"title":341,"path":342,"stem":343,"children":344,"access":12,"icon":127},"to-Stores","\u002Ffamilies\u002Fto","families\u002Fto\u002Findex",[345,346,350,353,357,361,365,370,374,378,382,386,390,394,398,402,406,410,414,417,421,425,429,434,438,442],{"title":341,"path":342,"stem":343,"access":12,"icon":127},{"title":347,"path":348,"stem":349,"access":12},"aws-dynamo","\u002Ffamilies\u002Fto\u002Faws-dynamo","families\u002Fto\u002Faws-dynamo",{"title":129,"path":351,"stem":352,"access":12},"\u002Ffamilies\u002Fto\u002Faws-s3","families\u002Fto\u002Faws-s3",{"title":354,"path":355,"stem":356,"access":12},"browser-fs","\u002Ffamilies\u002Fto\u002Fbrowser-fs","families\u002Fto\u002Fbrowser-fs",{"title":358,"path":359,"stem":360,"access":12},"browser-idb","\u002Ffamilies\u002Fto\u002Fbrowser-idb","families\u002Fto\u002Fbrowser-idb",{"title":362,"path":363,"stem":364,"access":12},"browser-local","\u002Ffamilies\u002Fto\u002Fbrowser-local","families\u002Fto\u002Fbrowser-local",{"title":366,"path":367,"stem":368,"access":12,"icon":369},"Choosing a store","\u002Ffamilies\u002Fto\u002Fchoosing-a-store","families\u002Fto\u002Fchoosing-a-store","i-lucide-split",{"title":371,"path":372,"stem":373,"access":12},"cloudflare-d1","\u002Ffamilies\u002Fto\u002Fcloudflare-d1","families\u002Fto\u002Fcloudflare-d1",{"title":375,"path":376,"stem":377,"access":12},"cloudflare-r2","\u002Ffamilies\u002Fto\u002Fcloudflare-r2","families\u002Fto\u002Fcloudflare-r2",{"title":379,"path":380,"stem":381,"access":12},"drive","\u002Ffamilies\u002Fto\u002Fdrive","families\u002Fto\u002Fdrive",{"title":383,"path":384,"stem":385,"access":12},"file","\u002Ffamilies\u002Fto\u002Ffile","families\u002Fto\u002Ffile",{"title":387,"path":388,"stem":389,"access":12},"icloud","\u002Ffamilies\u002Fto\u002Ficloud","families\u002Fto\u002Ficloud",{"title":391,"path":392,"stem":393,"access":12},"memory","\u002Ffamilies\u002Fto\u002Fmemory","families\u002Fto\u002Fmemory",{"title":395,"path":396,"stem":397,"access":12},"meter","\u002Ffamilies\u002Fto\u002Fmeter","families\u002Fto\u002Fmeter",{"title":399,"path":400,"stem":401,"access":12},"mysql","\u002Ffamilies\u002Fto\u002Fmysql","families\u002Fto\u002Fmysql",{"title":403,"path":404,"stem":405,"access":12},"nfs","\u002Ffamilies\u002Fto\u002Fnfs","families\u002Fto\u002Fnfs",{"title":407,"path":408,"stem":409,"access":12},"postgres","\u002Ffamilies\u002Fto\u002Fpostgres","families\u002Fto\u002Fpostgres",{"title":411,"path":412,"stem":413,"access":12},"probe","\u002Ffamilies\u002Fto\u002Fprobe","families\u002Fto\u002Fprobe",{"title":263,"path":415,"stem":416,"access":12},"\u002Ffamilies\u002Fto\u002Frest","families\u002Fto\u002Frest",{"title":418,"path":419,"stem":420,"access":12},"smb","\u002Ffamilies\u002Fto\u002Fsmb","families\u002Fto\u002Fsmb",{"title":422,"path":423,"stem":424,"access":12},"sqlite","\u002Ffamilies\u002Fto\u002Fsqlite","families\u002Fto\u002Fsqlite",{"title":426,"path":427,"stem":428,"access":12},"ssh","\u002Ffamilies\u002Fto\u002Fssh","families\u002Fto\u002Fssh",{"title":430,"path":431,"stem":432,"access":12,"icon":433},"Store-locator descriptors","\u002Ffamilies\u002Fto\u002Fstore-locator","families\u002Fto\u002Fstore-locator","i-lucide-map-pin",{"title":435,"path":436,"stem":437,"access":12},"supabase","\u002Ffamilies\u002Fto\u002Fsupabase","families\u002Fto\u002Fsupabase",{"title":439,"path":440,"stem":441,"access":12},"turso","\u002Ffamilies\u002Fto\u002Fturso","families\u002Fto\u002Fturso",{"title":443,"path":444,"stem":445,"access":12},"webdav","\u002Ffamilies\u002Fto\u002Fwebdav","families\u002Fto\u002Fwebdav",{"title":447,"path":448,"stem":449,"children":450},"Faq","\u002Ffaq","faq",[451,454,458,462,466,470],{"title":10,"path":448,"stem":452,"access":12,"icon":453},"faq\u002Findex","i-lucide-circle-help",{"title":455,"path":456,"stem":457,"access":12},"Where can noy-db run?","\u002Ffaq\u002Fwhere-can-noy-db-run","faq\u002F1.where-can-noy-db-run",{"title":459,"path":460,"stem":461,"access":12},"Native mobile & PWA","\u002Ffaq\u002Fmobile-and-pwa","faq\u002F2.mobile-and-pwa",{"title":463,"path":464,"stem":465,"access":12},"Threat model","\u002Ffaq\u002Fthreat-model","faq\u002F3.threat-model",{"title":467,"path":468,"stem":469,"access":12},"Community & ecosystem","\u002Ffaq\u002Fcommunity-and-ecosystem","faq\u002F4.community-and-ecosystem",{"title":471,"path":472,"stem":473,"access":12},"Licensing","\u002Ffaq\u002Flicensing","faq\u002F5.licensing",{"title":475,"path":476,"stem":477,"children":478},"Glossary","\u002Fglossary","glossary",[479,482,486,490,494],{"title":10,"path":476,"stem":480,"access":12,"icon":481},"glossary\u002Findex","i-lucide-book-a",{"title":483,"path":484,"stem":485,"access":12},"Core vocabulary","\u002Fglossary\u002Fcore-vocabulary","glossary\u002Fcore-vocabulary",{"title":487,"path":488,"stem":489,"access":12},"Deletion vocabulary","\u002Fglossary\u002Fdeletion","glossary\u002Fdeletion",{"title":491,"path":492,"stem":493,"access":12},"Satellite collection vocabulary","\u002Fglossary\u002Fsatellite-collections","glossary\u002Fsatellite-collections",{"title":495,"path":496,"stem":497,"access":12},"Schema migration vocabulary","\u002Fglossary\u002Fschema-migration","glossary\u002Fschema-migration",{"title":499,"path":500,"stem":501,"children":502},"Recipes","\u002Frecipes","recipes",[503,506,510,514,518,522,526,530,534,538,542,546,550,554,558,562,567,571,575,580,584,588,592],{"title":10,"path":500,"stem":504,"access":12,"icon":505},"recipes\u002Findex","i-lucide-play",{"title":507,"path":508,"stem":509,"access":12},"Accounting app","\u002Frecipes\u002Faccounting-app","recipes\u002Faccounting-app",{"title":511,"path":512,"stem":513,"access":12},"Analytics app","\u002Frecipes\u002Fanalytics-app","recipes\u002Fanalytics-app",{"title":515,"path":516,"stem":517,"access":12},"Attestation verifier","\u002Frecipes\u002Fattestation-verifier","recipes\u002Fattestation-verifier",{"title":519,"path":520,"stem":521,"access":12},"AWS-KMS attestation","\u002Frecipes\u002Faws-kms-pdf-attestation","recipes\u002Faws-kms-pdf-attestation",{"title":523,"path":524,"stem":525,"access":12},"Browser durability","\u002Frecipes\u002Fbrowser-durability","recipes\u002Fbrowser-durability",{"title":527,"path":528,"stem":529,"access":12},"Production cloud store","\u002Frecipes\u002Fcloud-store","recipes\u002Fcloud-store",{"title":531,"path":532,"stem":533,"access":12},"Compose your own setup","\u002Frecipes\u002Fcompose-your-own","recipes\u002Fcompose-your-own",{"title":535,"path":536,"stem":537,"access":12},"Confidential HR records","\u002Frecipes\u002Fconfidential-hr","recipes\u002Fconfidential-hr",{"title":539,"path":540,"stem":541,"access":12},"Composing an echo secret","\u002Frecipes\u002Fecho-secret-enrollment","recipes\u002Fecho-secret-enrollment",{"title":543,"path":544,"stem":545,"access":12},"Email archive","\u002Frecipes\u002Femail-archive","recipes\u002Femail-archive",{"title":547,"path":548,"stem":549,"access":12},"Email archive — threads & revisions","\u002Frecipes\u002Femail-archive-threads-revisions","recipes\u002Femail-archive-threads-revisions",{"title":551,"path":552,"stem":553,"access":12},"Export & portability","\u002Frecipes\u002Fexport-portability","recipes\u002Fexport-portability",{"title":555,"path":556,"stem":557,"access":12},"Passwordless OIDC (AWS Cognito)","\u002Frecipes\u002Fpasswordless-oidc","recipes\u002Fpasswordless-oidc",{"title":559,"path":560,"stem":561,"access":12},"Personal notebook","\u002Frecipes\u002Fpersonal-notebook","recipes\u002Fpersonal-notebook",{"title":563,"path":564,"stem":565,"access":12,"icon":566},"Playgrounds","\u002Frecipes\u002Fplaygrounds","recipes\u002Fplaygrounds","i-lucide-gamepad-2",{"title":568,"path":569,"stem":570,"access":12},"React invoice app","\u002Frecipes\u002Freact-invoices","recipes\u002Freact-invoices",{"title":572,"path":573,"stem":574,"access":12},"Collaborative app","\u002Frecipes\u002Frealtime-crdt-app","recipes\u002Frealtime-crdt-app",{"title":576,"path":577,"stem":578,"access":12,"icon":579},"Run the showcases","\u002Frecipes\u002Frun-the-showcases","recipes\u002Frun-the-showcases","i-lucide-flask-conical",{"title":581,"path":582,"stem":583,"access":12},"Search & RAG","\u002Frecipes\u002Fsearch-rag","recipes\u002Fsearch-rag",{"title":585,"path":586,"stem":587,"access":12},"Team vault topology","\u002Frecipes\u002Fteam-vault-topology","recipes\u002Fteam-vault-topology",{"title":589,"path":590,"stem":591,"access":12},"Unlock ceremonies","\u002Frecipes\u002Funlock-ceremonies","recipes\u002Funlock-ceremonies",{"title":593,"path":594,"stem":595,"access":12},"User preferences","\u002Frecipes\u002Fuser-preferences","recipes\u002Fuser-preferences",{"title":597,"path":598,"stem":599,"children":600},"Services","\u002Fservices","services",[601,604,608,612,616,620,624,628,632,636,640,644,648,652,656,660,664,668,672,676,680,684,688,692,696,700,704,710,714,718,722,726,730,734,738,742,746,750,755,759,763,767,771,775,779,783,787,791,795,799,803,807,811,815,819,823,827,831,835,839,843,847,851,855,859,863,867,871,875,879,883,887,891,895,899],{"title":10,"path":598,"stem":602,"access":12,"icon":603},"services\u002Findex","i-lucide-layers",{"title":605,"path":606,"stem":607,"access":12},"archive","\u002Fservices\u002Farchive","services\u002Farchive",{"title":609,"path":610,"stem":611,"access":12},"attestation","\u002Fservices\u002Fattestation","services\u002Fattestation",{"title":613,"path":614,"stem":615,"access":12},"auth-introspection","\u002Fservices\u002Fauth-introspection","services\u002Fauth-introspection",{"title":617,"path":618,"stem":619,"access":12},"auth-landscape","\u002Fservices\u002Fauth-landscape","services\u002Fauth-landscape",{"title":621,"path":622,"stem":623,"access":12},"blobs","\u002Fservices\u002Fblobs","services\u002Fblobs",{"title":625,"path":626,"stem":627,"access":12},"broker","\u002Fservices\u002Fbroker","services\u002Fbroker",{"title":629,"path":630,"stem":631,"access":12},"bundle","\u002Fservices\u002Fbundle","services\u002Fbundle",{"title":633,"path":634,"stem":635,"access":12},"classified","\u002Fservices\u002Fclassified","services\u002Fclassified",{"title":637,"path":638,"stem":639,"access":12},"computed","\u002Fservices\u002Fcomputed","services\u002Fcomputed",{"title":641,"path":642,"stem":643,"access":12},"consent","\u002Fservices\u002Fconsent","services\u002Fconsent",{"title":645,"path":646,"stem":647,"access":12},"cover","\u002Fservices\u002Fcover","services\u002Fcover",{"title":649,"path":650,"stem":651,"access":12},"coverage","\u002Fservices\u002Fcoverage","services\u002Fcoverage",{"title":653,"path":654,"stem":655,"access":12},"crdt","\u002Fservices\u002Fcrdt","services\u002Fcrdt",{"title":657,"path":658,"stem":659,"access":12},"cross-join","\u002Fservices\u002Fcross-join","services\u002Fcross-join",{"title":661,"path":662,"stem":663,"access":12},"custody","\u002Fservices\u002Fcustody","services\u002Fcustody",{"title":665,"path":666,"stem":667,"access":12},"derivations","\u002Fservices\u002Fderivations","services\u002Fderivations",{"title":669,"path":670,"stem":671,"access":12},"directory","\u002Fservices\u002Fdirectory","services\u002Fdirectory",{"title":673,"path":674,"stem":675,"access":12},"search — AI","\u002Fservices\u002Fembeddings","services\u002Fembeddings",{"title":677,"path":678,"stem":679,"access":12},"Field metadata","\u002Fservices\u002Ffield-metadata","services\u002Ffield-metadata",{"title":681,"path":682,"stem":683,"access":12},"Foreign refs","\u002Fservices\u002Fforeign-refs","services\u002Fforeign-refs",{"title":685,"path":686,"stem":687,"access":12},"forget","\u002Fservices\u002Fforget","services\u002Fforget",{"title":689,"path":690,"stem":691,"access":12},"governance","\u002Fservices\u002Fgovernance","services\u002Fgovernance",{"title":693,"path":694,"stem":695,"access":12},"guards","\u002Fservices\u002Fguards","services\u002Fguards",{"title":697,"path":698,"stem":699,"access":12},"history","\u002Fservices\u002Fhistory","services\u002Fhistory",{"title":701,"path":702,"stem":703,"access":12},"i18n","\u002Fservices\u002Fi18n","services\u002Fi18n",{"title":705,"path":706,"stem":707,"children":708,"access":12},"indexing","\u002Fservices\u002Findexing","services\u002Findexing",[709],{"title":705,"path":706,"stem":707,"access":12},{"title":711,"path":712,"stem":713,"access":12},"introspection","\u002Fservices\u002Fintrospection","services\u002Fintrospection",{"title":715,"path":716,"stem":717,"access":12},"joins","\u002Fservices\u002Fjoins","services\u002Fjoins",{"title":719,"path":720,"stem":721,"access":12},"lazy","\u002Fservices\u002Flazy","services\u002Flazy",{"title":723,"path":724,"stem":725,"access":12},"links","\u002Fservices\u002Flinks","services\u002Flinks",{"title":727,"path":728,"stem":729,"access":12},"live","\u002Fservices\u002Flive","services\u002Flive",{"title":731,"path":732,"stem":733,"access":12},"lookup","\u002Fservices\u002Flookup","services\u002Flookup",{"title":735,"path":736,"stem":737,"access":12},"manifest","\u002Fservices\u002Fmanifest","services\u002Fmanifest",{"title":739,"path":740,"stem":741,"access":12},"materialized-views","\u002Fservices\u002Fmaterialized-views","services\u002Fmaterialized-views",{"title":743,"path":744,"stem":745,"access":12},"Metadata ladder","\u002Fservices\u002Fmetadata-ladder","services\u002Fmetadata-ladder",{"title":747,"path":748,"stem":749,"access":12},"Metadata riders","\u002Fservices\u002Fmetadata-riders","services\u002Fmetadata-riders",{"title":751,"path":752,"stem":753,"access":12,"badge":754},"metrics","\u002Fservices\u002Fmetrics","services\u002Fmetrics","Planned",{"title":756,"path":757,"stem":758,"access":12,"badge":754},"migrations","\u002Fservices\u002Fmigrations","services\u002Fmigrations",{"title":760,"path":761,"stem":762,"access":12},"money","\u002Fservices\u002Fmoney","services\u002Fmoney",{"title":764,"path":765,"stem":766,"access":12},"numbering","\u002Fservices\u002Fnumbering","services\u002Fnumbering",{"title":768,"path":769,"stem":770,"access":12},"overlay-views","\u002Fservices\u002Foverlay-views","services\u002Foverlay-views",{"title":772,"path":773,"stem":774,"access":12,"badge":754},"partitioning","\u002Fservices\u002Fpartitioning","services\u002Fpartitioning",{"title":776,"path":777,"stem":778,"access":12},"periods","\u002Fservices\u002Fperiods","services\u002Fperiods",{"title":780,"path":781,"stem":782,"access":12},"persisted-schemas","\u002Fservices\u002Fpersisted-schemas","services\u002Fpersisted-schemas",{"title":784,"path":785,"stem":786,"access":12},"plaintext-bypass","\u002Fservices\u002Fplaintext-bypass","services\u002Fplaintext-bypass",{"title":788,"path":789,"stem":790,"access":12},"pod-redirect","\u002Fservices\u002Fpod-redirect","services\u002Fpod-redirect",{"title":792,"path":793,"stem":794,"access":12},"pod-signature","\u002Fservices\u002Fpod-signature","services\u002Fpod-signature",{"title":796,"path":797,"stem":798,"access":12},"policy","\u002Fservices\u002Fpolicy","services\u002Fpolicy",{"title":800,"path":801,"stem":802,"access":12},"portability","\u002Fservices\u002Fportability","services\u002Fportability",{"title":804,"path":805,"stem":806,"access":12},"reduce","\u002Fservices\u002Freduce","services\u002Freduce",{"title":808,"path":809,"stem":810,"access":12},"routing","\u002Fservices\u002Frouting","services\u002Frouting",{"title":812,"path":813,"stem":814,"access":12},"satellites","\u002Fservices\u002Fsatellites","services\u002Fsatellites",{"title":816,"path":817,"stem":818,"access":12},"schema-identifiers","\u002Fservices\u002Fschema-identifiers","services\u002Fschema-identifiers",{"title":820,"path":821,"stem":822,"access":12},"schema-update","\u002Fservices\u002Fschema-update","services\u002Fschema-update",{"title":824,"path":825,"stem":826,"access":12},"sealed-record","\u002Fservices\u002Fsealed-record","services\u002Fsealed-record",{"title":828,"path":829,"stem":830,"access":12},"sealing provider id","\u002Fservices\u002Fsealing-pid-stability","services\u002Fsealing-pid-stability",{"title":832,"path":833,"stem":834,"access":12},"search — full-text","\u002Fservices\u002Fsearch","services\u002Fsearch",{"title":836,"path":837,"stem":838,"access":12},"sequence","\u002Fservices\u002Fsequence","services\u002Fsequence",{"title":840,"path":841,"stem":842,"access":12},"session","\u002Fservices\u002Fsession","services\u002Fsession",{"title":844,"path":845,"stem":846,"access":12},"session-tiers","\u002Fservices\u002Fsession-tiers","services\u002Fsession-tiers",{"title":848,"path":849,"stem":850,"access":12},"shadow","\u002Fservices\u002Fshadow","services\u002Fshadow",{"title":852,"path":853,"stem":854,"access":12},"share-link","\u002Fservices\u002Fshare-link","services\u002Fshare-link",{"title":856,"path":857,"stem":858,"access":12},"snapshots","\u002Fservices\u002Fsnapshots","services\u002Fsnapshots",{"title":860,"path":861,"stem":862,"access":12},"store capabilities","\u002Fservices\u002Fstorage-capability-matrix","services\u002Fstorage-capability-matrix",{"title":864,"path":865,"stem":866,"access":12},"sync","\u002Fservices\u002Fsync","services\u002Fsync",{"title":868,"path":869,"stem":870,"access":12},"team","\u002Fservices\u002Fteam","services\u002Fteam",{"title":872,"path":873,"stem":874,"access":12},"tiers","\u002Fservices\u002Ftiers","services\u002Ftiers",{"title":876,"path":877,"stem":878,"access":12},"transactions","\u002Fservices\u002Ftransactions","services\u002Ftransactions",{"title":880,"path":881,"stem":882,"access":12},"partitions","\u002Fservices\u002Ftransferable-partitions","services\u002Ftransferable-partitions",{"title":884,"path":885,"stem":886,"access":12},"user-envelope","\u002Fservices\u002Fuser-envelope","services\u002Fuser-envelope",{"title":888,"path":889,"stem":890,"access":12,"badge":754},"validation","\u002Fservices\u002Fvalidation","services\u002Fvalidation",{"title":892,"path":893,"stem":894,"access":12},"vault-head","\u002Fservices\u002Fvault-head","services\u002Fvault-head",{"title":896,"path":897,"stem":898,"access":12},"via","\u002Fservices\u002Fvia","services\u002Fvia",{"title":900,"path":901,"stem":902,"access":12},"withdrawal","\u002Fservices\u002Fwithdrawal","services\u002Fwithdrawal",{"title":904,"path":905,"stem":906,"children":907},"Start","\u002Fstart","start",[908,911,915,919,923],{"title":10,"path":905,"stem":909,"access":12,"icon":910},"start\u002Findex","i-lucide-flag",{"title":912,"path":913,"stem":914,"access":12},"Install","\u002Fstart\u002Finstall","start\u002F1.install",{"title":916,"path":917,"stem":918,"access":12},"Your first vault","\u002Fstart\u002Ffirst-vault","start\u002F2.first-vault",{"title":920,"path":921,"stem":922,"access":12},"Your first service","\u002Fstart\u002Ffirst-service","start\u002F3.first-service",{"title":924,"path":925,"stem":926,"access":12},"See the ciphertext","\u002Fstart\u002Fsee-the-ciphertext","start\u002F4.see-the-ciphertext",{"id":928,"title":543,"access":12,"apiToc":929,"body":930,"category":3640,"description":3641,"extension":3642,"meta":3643,"navigation":3640,"nest":3640,"path":544,"seo":3644,"sinceVersion":3640,"status":3645,"stem":545,"subtitle":3640,"tier":3646,"tocExternal":3640,"__hash__":3647},"docs\u002Frecipes\u002Femail-archive.md",false,{"type":931,"value":932,"toc":3631},"minimark",[933,937,961,975,989,994,1005,1258,1262,1272,1280,1303,1307,1536,1551,1555,2056,2071,2075,2081,2256,3558,3562,3581,3603,3607,3627],[934,935,543],"h1",{"id":936},"email-archive",[938,939,940],"blockquote",{},[941,942,943,947,948,952,953,956,957,960],"p",{},[944,945,946],"strong",{},"Audience:"," apps that ingest raw MIME email (",[949,950,951],"code",{},".eml",") and need to query metadata, serve attachments, and keep forensic originals — inboxes, archives, compliance systems.\n",[944,954,955],{},"Bundle:"," core + ",[949,958,959],{},"withBlobs()",".",[941,962,963,964,966,967,970,971,974],{},"You receive raw MIME emails (",[949,965,951],{}," files) and want three things at once:\nquery the metadata (from, to, subject, thread) as structured data, serve\nthe bodies and attachments as files, and keep the original bytes for\nforensic re-parsing. This recipe shows how to lay that out in noy-db —\nan encrypted, offline-first document store where structured data lives\nin queryable ",[944,968,969],{},"records"," and binary payloads live in ",[944,972,973],{},"blob slots","\nattached to those records.",[941,976,977,978,983,984,988],{},"It assumes you know the basics of\n",[979,980,982],"a",{"href":981},"..\u002Fcore\u002F01-overview","vaults and collections"," and uses\nthe ",[979,985,987],{"href":986},"..\u002Fservices\u002Fblobs","blobs service"," for attachments.",[990,991,993],"h2",{"id":992},"setup","Setup",[941,995,996,997,1000,1001,1004],{},"Blobs are an opt-in service: pass ",[949,998,999],{},"blobsStrategy: withBlobs()"," to\n",[949,1002,1003],{},"createNoydb",". Everything else in this recipe is core.",[1006,1007,1012],"pre",{"className":1008,"code":1009,"language":1010,"meta":1011,"style":1011},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createNoydb } from '@noy-db\u002Fhub'\nimport { withBlobs } from '@noy-db\u002Fhub\u002Fblobs'\nimport { toFile } from '@noy-db\u002Fto-file'\n\nconst db = await createNoydb({\n  store: toFile({ dir: '.\u002Fmail-data' }),\n  user: 'me',\n  secret: 'user-supplied secret',\n  blobsStrategy: withBlobs(),        \u002F\u002F enables collection.blob(id)\n})\n\nconst vault = await db.openVault('mail')\n","ts","",[949,1013,1014,1047,1068,1089,1096,1121,1159,1176,1193,1213,1222,1227],{"__ignoreMap":1011},[1015,1016,1019,1023,1027,1031,1034,1037,1040,1044],"span",{"class":1017,"line":1018},"line",1,[1015,1020,1022],{"class":1021},"s7zQu","import",[1015,1024,1026],{"class":1025},"sMK4o"," {",[1015,1028,1030],{"class":1029},"sTEyZ"," createNoydb",[1015,1032,1033],{"class":1025}," }",[1015,1035,1036],{"class":1021}," from",[1015,1038,1039],{"class":1025}," '",[1015,1041,1043],{"class":1042},"sfazB","@noy-db\u002Fhub",[1015,1045,1046],{"class":1025},"'\n",[1015,1048,1050,1052,1054,1057,1059,1061,1063,1066],{"class":1017,"line":1049},2,[1015,1051,1022],{"class":1021},[1015,1053,1026],{"class":1025},[1015,1055,1056],{"class":1029}," withBlobs",[1015,1058,1033],{"class":1025},[1015,1060,1036],{"class":1021},[1015,1062,1039],{"class":1025},[1015,1064,1065],{"class":1042},"@noy-db\u002Fhub\u002Fblobs",[1015,1067,1046],{"class":1025},[1015,1069,1071,1073,1075,1078,1080,1082,1084,1087],{"class":1017,"line":1070},3,[1015,1072,1022],{"class":1021},[1015,1074,1026],{"class":1025},[1015,1076,1077],{"class":1029}," toFile",[1015,1079,1033],{"class":1025},[1015,1081,1036],{"class":1021},[1015,1083,1039],{"class":1025},[1015,1085,1086],{"class":1042},"@noy-db\u002Fto-file",[1015,1088,1046],{"class":1025},[1015,1090,1092],{"class":1017,"line":1091},4,[1015,1093,1095],{"emptyLinePlaceholder":1094},true,"\n",[1015,1097,1099,1103,1106,1109,1112,1115,1118],{"class":1017,"line":1098},5,[1015,1100,1102],{"class":1101},"spNyl","const",[1015,1104,1105],{"class":1029}," db ",[1015,1107,1108],{"class":1025},"=",[1015,1110,1111],{"class":1021}," await",[1015,1113,1030],{"class":1114},"s2Zo4",[1015,1116,1117],{"class":1029},"(",[1015,1119,1120],{"class":1025},"{\n",[1015,1122,1124,1128,1131,1133,1135,1138,1141,1143,1145,1148,1151,1153,1156],{"class":1017,"line":1123},6,[1015,1125,1127],{"class":1126},"swJcz","  store",[1015,1129,1130],{"class":1025},":",[1015,1132,1077],{"class":1114},[1015,1134,1117],{"class":1029},[1015,1136,1137],{"class":1025},"{",[1015,1139,1140],{"class":1126}," dir",[1015,1142,1130],{"class":1025},[1015,1144,1039],{"class":1025},[1015,1146,1147],{"class":1042},".\u002Fmail-data",[1015,1149,1150],{"class":1025},"'",[1015,1152,1033],{"class":1025},[1015,1154,1155],{"class":1029},")",[1015,1157,1158],{"class":1025},",\n",[1015,1160,1162,1165,1167,1169,1172,1174],{"class":1017,"line":1161},7,[1015,1163,1164],{"class":1126},"  user",[1015,1166,1130],{"class":1025},[1015,1168,1039],{"class":1025},[1015,1170,1171],{"class":1042},"me",[1015,1173,1150],{"class":1025},[1015,1175,1158],{"class":1025},[1015,1177,1179,1182,1184,1186,1189,1191],{"class":1017,"line":1178},8,[1015,1180,1181],{"class":1126},"  secret",[1015,1183,1130],{"class":1025},[1015,1185,1039],{"class":1025},[1015,1187,1188],{"class":1042},"user-supplied secret",[1015,1190,1150],{"class":1025},[1015,1192,1158],{"class":1025},[1015,1194,1196,1199,1201,1203,1206,1209],{"class":1017,"line":1195},9,[1015,1197,1198],{"class":1126},"  blobsStrategy",[1015,1200,1130],{"class":1025},[1015,1202,1056],{"class":1114},[1015,1204,1205],{"class":1029},"()",[1015,1207,1208],{"class":1025},",",[1015,1210,1212],{"class":1211},"sHwdD","        \u002F\u002F enables collection.blob(id)\n",[1015,1214,1216,1219],{"class":1017,"line":1215},10,[1015,1217,1218],{"class":1025},"}",[1015,1220,1221],{"class":1029},")\n",[1015,1223,1225],{"class":1017,"line":1224},11,[1015,1226,1095],{"emptyLinePlaceholder":1094},[1015,1228,1230,1232,1235,1237,1239,1242,1244,1247,1249,1251,1254,1256],{"class":1017,"line":1229},12,[1015,1231,1102],{"class":1101},[1015,1233,1234],{"class":1029}," vault ",[1015,1236,1108],{"class":1025},[1015,1238,1111],{"class":1021},[1015,1240,1241],{"class":1029}," db",[1015,1243,960],{"class":1025},[1015,1245,1246],{"class":1114},"openVault",[1015,1248,1117],{"class":1029},[1015,1250,1150],{"class":1025},[1015,1252,1253],{"class":1042},"mail",[1015,1255,1150],{"class":1025},[1015,1257,1221],{"class":1029},[990,1259,1261],{"id":1260},"short-answer","Short answer",[941,1263,1264,1267,1268,1271],{},[944,1265,1266],{},"An email is ONE entity with many facets."," Model it as one ",[949,1269,1270],{},"Email","\nrecord plus N+2 blob slots on that same record:",[1006,1273,1278],{"className":1274,"code":1276,"language":1277},[1275],"language-text","emails\u002F\u003Cemail-id>        ← the record (structured fields)\n  └─ blob slots:\n     ├─ 'raw'            ← original .eml (always)\n     ├─ 'body-html'      ← if HTML part exists\n     ├─ 'body-text'      ← if plaintext body is > 10 KB\n     └─ 'att-N-\u003Cfile>'   ← one blob per attachment\n","text",[949,1279,1276],{"__ignoreMap":1011},[941,1281,1282,1283,1286,1287,1290,1291,1294,1295,1298,1299,1302],{},"Don't split into separate ",[949,1284,1285],{},"emails"," + ",[949,1288,1289],{},"attachments"," collections unless\nyou cross ~50 000 emails. The attachment manifest lives on the email\nrecord; the bytes are blob slots on that same record. noy-db's\ncontent-address deduplication (each blob is stored under an ",[949,1292,1293],{},"eTag"," —\n",[949,1296,1297],{},"HMAC-SHA-256(blob key, plaintext bytes)",") stores the same PDF attached\nto 100 emails as ",[944,1300,1301],{},"one"," blob on disk.",[990,1304,1306],{"id":1305},"the-decision-matrix-which-part-lives-where","The decision matrix — which part lives where",[1308,1309,1310,1330],"table",{},[1311,1312,1313],"thead",{},[1314,1315,1316,1320,1323,1327],"tr",{},[1317,1318,1319],"th",{},"Part",[1317,1321,1322],{},"Size",[1317,1324,1326],{"align":1325},"center","Query-needed?",[1317,1328,1329],{"align":1325},"→ Where",[1331,1332,1333,1365,1390,1409,1427,1446,1466,1486,1504,1520],"tbody",{},[1314,1334,1335,1354,1357,1360],{},[1336,1337,1338,1341,1342,1341,1345,1341,1348,1341,1351],"td",{},[949,1339,1340],{},"from",", ",[949,1343,1344],{},"to",[949,1346,1347],{},"cc",[949,1349,1350],{},"subject",[949,1352,1353],{},"receivedAt",[1336,1355,1356],{},"tiny",[1336,1358,1359],{"align":1325},"yes",[1336,1361,1362],{"align":1325},[944,1363,1364],{},"record",[1314,1366,1367,1381,1383,1386],{},[1336,1368,1369,1341,1372,1341,1375,1341,1378],{},[949,1370,1371],{},"messageId",[949,1373,1374],{},"threadId",[949,1376,1377],{},"inReplyTo",[949,1379,1380],{},"references",[1336,1382,1356],{},[1336,1384,1385],{"align":1325},"yes (threading)",[1336,1387,1388],{"align":1325},[944,1389,1364],{},[1314,1391,1392,1401,1403,1405],{},[1336,1393,1394,1341,1397,1400],{},[949,1395,1396],{},"labels",[949,1398,1399],{},"flags"," (read \u002F starred \u002F archived \u002F replied)",[1336,1402,1356],{},[1336,1404,1359],{"align":1325},[1336,1406,1407],{"align":1325},[944,1408,1364],{},[1314,1410,1411,1417,1420,1423],{},[1336,1412,1413,1416],{},[949,1414,1415],{},"bodyPreview"," (first ~200 chars)",[1336,1418,1419],{},"small",[1336,1421,1422],{"align":1325},"no (display)",[1336,1424,1425],{"align":1325},[944,1426,1364],{},[1314,1428,1429,1435,1438,1441],{},[1336,1430,1431,1434],{},[949,1432,1433],{},"bodyText"," plaintext",[1336,1436,1437],{},"1–50 KB typical",[1336,1439,1440],{"align":1325},"rarely",[1336,1442,1443],{"align":1325},[944,1444,1445],{},"record if \u003C 10 KB, blob if larger",[1314,1447,1448,1453,1456,1458],{},[1336,1449,1450],{},[949,1451,1452],{},"bodyHtml",[1336,1454,1455],{},"often 100 KB+",[1336,1457,1422],{"align":1325},[1336,1459,1460,1462,1463],{"align":1325},[944,1461,133],{}," slot ",[949,1464,1465],{},"body-html",[1314,1467,1468,1473,1476,1479],{},[1336,1469,1470,1471],{},"Raw ",[949,1472,951],{},[1336,1474,1475],{},"50 KB – few MB",[1336,1477,1478],{"align":1325},"no (forensic)",[1336,1480,1481,1462,1483],{"align":1325},[944,1482,133],{},[949,1484,1485],{},"raw",[1314,1487,1488,1493,1496,1499],{},[1336,1489,1490,1491,1155],{},"Attachments (PDFs, images, nested ",[949,1492,951],{},[1336,1494,1495],{},"10 KB – 100 MB",[1336,1497,1498],{"align":1325},"no (download)",[1336,1500,1501,1503],{"align":1325},[944,1502,133],{}," slot per attachment",[1314,1505,1506,1512,1514,1516],{},[1336,1507,1508,1511],{},[949,1509,1510],{},"attachments[]"," metadata (filename, mime, size, slot name)",[1336,1513,1356],{},[1336,1515,1359],{"align":1325},[1336,1517,1518],{"align":1325},[944,1519,1364],{},[1314,1521,1522,1528,1530,1532],{},[1336,1523,1524,1527],{},[949,1525,1526],{},"extracted"," (AI summary, topics, action items)",[1336,1529,1419],{},[1336,1531,1359],{"align":1325},[1336,1533,1534],{"align":1325},[944,1535,1364],{},[941,1537,1538,1539,1550],{},"One rule: ",[944,1540,1541,1542,1545,1546,1549],{},"if you ever ",[949,1543,1544],{},".where()"," or ",[949,1547,1548],{},".orderBy()"," on it, put it on the\nrecord",". Otherwise it's a blob. Keep records small so the in-memory\nvault stays fast; blobs lazy-load.",[990,1552,1554],{"id":1553},"concrete-record-shape","Concrete record shape",[1006,1556,1558],{"className":1008,"code":1557,"language":1010,"meta":1011,"style":1011},"interface Address {\n  email: string\n  name?: string\n}\n\ninterface Email {\n  id: string                      \u002F\u002F ULID — stable identity\n  messageId: string               \u002F\u002F RFC 5322 Message-ID header (dedup)\n  threadId: string                \u002F\u002F derived — see \"Threading\"\n\n  inReplyTo?: string\n  references?: string[]\n\n  from: Address\n  to: Address[]\n  cc?: Address[]\n  bcc?: Address[]\n  subject: string\n  receivedAt: string              \u002F\u002F ISO-8601 — Received: header timestamp\n  sentAt?: string                 \u002F\u002F ISO-8601 — Date: header\n\n  labels?: string[]\n  flags?: {\n    read?: boolean\n    starred?: boolean\n    replied?: boolean\n    archived?: boolean\n  }\n\n  bodyPreview: string             \u002F\u002F first ~200 chars for listing UIs\n  bodyText?: string               \u002F\u002F plaintext ONLY if \u003C 10 KB\n  bodyTextInBlob?: boolean        \u002F\u002F true → fetch blob slot 'body-text'\n  bodyHtmlInBlob?: boolean        \u002F\u002F true → fetch blob slot 'body-html'\n\n  attachments?: Array\u003C{\n    filename: string\n    mimeType: string\n    sizeBytes: number\n    contentId?: string            \u002F\u002F cid:... reference for inline images\n    slotName: string              \u002F\u002F blob slot holding the bytes\n  }>\n\n  extracted?: {\n    summary?: string\n    topics?: string[]\n    sentiment?: number\n    actionItems?: string[]\n    invoiceNumber?: string        \u002F\u002F when the email IS an invoice\n  }\n}\n",[949,1559,1560,1572,1582,1592,1597,1601,1610,1623,1635,1647,1651,1660,1672,1677,1688,1700,1712,1724,1734,1747,1760,1765,1777,1787,1798,1808,1818,1828,1834,1839,1852,1865,1879,1892,1897,1911,1921,1931,1942,1955,1968,1974,1979,1989,1999,2011,2021,2033,2046,2051],{"__ignoreMap":1011},[1015,1561,1562,1565,1569],{"class":1017,"line":1018},[1015,1563,1564],{"class":1101},"interface",[1015,1566,1568],{"class":1567},"sBMFI"," Address",[1015,1570,1571],{"class":1025}," {\n",[1015,1573,1574,1577,1579],{"class":1017,"line":1049},[1015,1575,1576],{"class":1126},"  email",[1015,1578,1130],{"class":1025},[1015,1580,1581],{"class":1567}," string\n",[1015,1583,1584,1587,1590],{"class":1017,"line":1070},[1015,1585,1586],{"class":1126},"  name",[1015,1588,1589],{"class":1025},"?:",[1015,1591,1581],{"class":1567},[1015,1593,1594],{"class":1017,"line":1091},[1015,1595,1596],{"class":1025},"}\n",[1015,1598,1599],{"class":1017,"line":1098},[1015,1600,1095],{"emptyLinePlaceholder":1094},[1015,1602,1603,1605,1608],{"class":1017,"line":1123},[1015,1604,1564],{"class":1101},[1015,1606,1607],{"class":1567}," Email",[1015,1609,1571],{"class":1025},[1015,1611,1612,1615,1617,1620],{"class":1017,"line":1161},[1015,1613,1614],{"class":1126},"  id",[1015,1616,1130],{"class":1025},[1015,1618,1619],{"class":1567}," string",[1015,1621,1622],{"class":1211},"                      \u002F\u002F ULID — stable identity\n",[1015,1624,1625,1628,1630,1632],{"class":1017,"line":1178},[1015,1626,1627],{"class":1126},"  messageId",[1015,1629,1130],{"class":1025},[1015,1631,1619],{"class":1567},[1015,1633,1634],{"class":1211},"               \u002F\u002F RFC 5322 Message-ID header (dedup)\n",[1015,1636,1637,1640,1642,1644],{"class":1017,"line":1195},[1015,1638,1639],{"class":1126},"  threadId",[1015,1641,1130],{"class":1025},[1015,1643,1619],{"class":1567},[1015,1645,1646],{"class":1211},"                \u002F\u002F derived — see \"Threading\"\n",[1015,1648,1649],{"class":1017,"line":1215},[1015,1650,1095],{"emptyLinePlaceholder":1094},[1015,1652,1653,1656,1658],{"class":1017,"line":1224},[1015,1654,1655],{"class":1126},"  inReplyTo",[1015,1657,1589],{"class":1025},[1015,1659,1581],{"class":1567},[1015,1661,1662,1665,1667,1669],{"class":1017,"line":1229},[1015,1663,1664],{"class":1126},"  references",[1015,1666,1589],{"class":1025},[1015,1668,1619],{"class":1567},[1015,1670,1671],{"class":1029},"[]\n",[1015,1673,1675],{"class":1017,"line":1674},13,[1015,1676,1095],{"emptyLinePlaceholder":1094},[1015,1678,1680,1683,1685],{"class":1017,"line":1679},14,[1015,1681,1682],{"class":1126},"  from",[1015,1684,1130],{"class":1025},[1015,1686,1687],{"class":1567}," Address\n",[1015,1689,1691,1694,1696,1698],{"class":1017,"line":1690},15,[1015,1692,1693],{"class":1126},"  to",[1015,1695,1130],{"class":1025},[1015,1697,1568],{"class":1567},[1015,1699,1671],{"class":1029},[1015,1701,1703,1706,1708,1710],{"class":1017,"line":1702},16,[1015,1704,1705],{"class":1126},"  cc",[1015,1707,1589],{"class":1025},[1015,1709,1568],{"class":1567},[1015,1711,1671],{"class":1029},[1015,1713,1715,1718,1720,1722],{"class":1017,"line":1714},17,[1015,1716,1717],{"class":1126},"  bcc",[1015,1719,1589],{"class":1025},[1015,1721,1568],{"class":1567},[1015,1723,1671],{"class":1029},[1015,1725,1727,1730,1732],{"class":1017,"line":1726},18,[1015,1728,1729],{"class":1126},"  subject",[1015,1731,1130],{"class":1025},[1015,1733,1581],{"class":1567},[1015,1735,1737,1740,1742,1744],{"class":1017,"line":1736},19,[1015,1738,1739],{"class":1126},"  receivedAt",[1015,1741,1130],{"class":1025},[1015,1743,1619],{"class":1567},[1015,1745,1746],{"class":1211},"              \u002F\u002F ISO-8601 — Received: header timestamp\n",[1015,1748,1750,1753,1755,1757],{"class":1017,"line":1749},20,[1015,1751,1752],{"class":1126},"  sentAt",[1015,1754,1589],{"class":1025},[1015,1756,1619],{"class":1567},[1015,1758,1759],{"class":1211},"                 \u002F\u002F ISO-8601 — Date: header\n",[1015,1761,1763],{"class":1017,"line":1762},21,[1015,1764,1095],{"emptyLinePlaceholder":1094},[1015,1766,1768,1771,1773,1775],{"class":1017,"line":1767},22,[1015,1769,1770],{"class":1126},"  labels",[1015,1772,1589],{"class":1025},[1015,1774,1619],{"class":1567},[1015,1776,1671],{"class":1029},[1015,1778,1780,1783,1785],{"class":1017,"line":1779},23,[1015,1781,1782],{"class":1126},"  flags",[1015,1784,1589],{"class":1025},[1015,1786,1571],{"class":1025},[1015,1788,1790,1793,1795],{"class":1017,"line":1789},24,[1015,1791,1792],{"class":1126},"    read",[1015,1794,1589],{"class":1025},[1015,1796,1797],{"class":1567}," boolean\n",[1015,1799,1801,1804,1806],{"class":1017,"line":1800},25,[1015,1802,1803],{"class":1126},"    starred",[1015,1805,1589],{"class":1025},[1015,1807,1797],{"class":1567},[1015,1809,1811,1814,1816],{"class":1017,"line":1810},26,[1015,1812,1813],{"class":1126},"    replied",[1015,1815,1589],{"class":1025},[1015,1817,1797],{"class":1567},[1015,1819,1821,1824,1826],{"class":1017,"line":1820},27,[1015,1822,1823],{"class":1126},"    archived",[1015,1825,1589],{"class":1025},[1015,1827,1797],{"class":1567},[1015,1829,1831],{"class":1017,"line":1830},28,[1015,1832,1833],{"class":1025},"  }\n",[1015,1835,1837],{"class":1017,"line":1836},29,[1015,1838,1095],{"emptyLinePlaceholder":1094},[1015,1840,1842,1845,1847,1849],{"class":1017,"line":1841},30,[1015,1843,1844],{"class":1126},"  bodyPreview",[1015,1846,1130],{"class":1025},[1015,1848,1619],{"class":1567},[1015,1850,1851],{"class":1211},"             \u002F\u002F first ~200 chars for listing UIs\n",[1015,1853,1855,1858,1860,1862],{"class":1017,"line":1854},31,[1015,1856,1857],{"class":1126},"  bodyText",[1015,1859,1589],{"class":1025},[1015,1861,1619],{"class":1567},[1015,1863,1864],{"class":1211},"               \u002F\u002F plaintext ONLY if \u003C 10 KB\n",[1015,1866,1868,1871,1873,1876],{"class":1017,"line":1867},32,[1015,1869,1870],{"class":1126},"  bodyTextInBlob",[1015,1872,1589],{"class":1025},[1015,1874,1875],{"class":1567}," boolean",[1015,1877,1878],{"class":1211},"        \u002F\u002F true → fetch blob slot 'body-text'\n",[1015,1880,1882,1885,1887,1889],{"class":1017,"line":1881},33,[1015,1883,1884],{"class":1126},"  bodyHtmlInBlob",[1015,1886,1589],{"class":1025},[1015,1888,1875],{"class":1567},[1015,1890,1891],{"class":1211},"        \u002F\u002F true → fetch blob slot 'body-html'\n",[1015,1893,1895],{"class":1017,"line":1894},34,[1015,1896,1095],{"emptyLinePlaceholder":1094},[1015,1898,1900,1903,1905,1908],{"class":1017,"line":1899},35,[1015,1901,1902],{"class":1126},"  attachments",[1015,1904,1589],{"class":1025},[1015,1906,1907],{"class":1567}," Array",[1015,1909,1910],{"class":1025},"\u003C{\n",[1015,1912,1914,1917,1919],{"class":1017,"line":1913},36,[1015,1915,1916],{"class":1126},"    filename",[1015,1918,1130],{"class":1025},[1015,1920,1581],{"class":1567},[1015,1922,1924,1927,1929],{"class":1017,"line":1923},37,[1015,1925,1926],{"class":1126},"    mimeType",[1015,1928,1130],{"class":1025},[1015,1930,1581],{"class":1567},[1015,1932,1934,1937,1939],{"class":1017,"line":1933},38,[1015,1935,1936],{"class":1126},"    sizeBytes",[1015,1938,1130],{"class":1025},[1015,1940,1941],{"class":1567}," number\n",[1015,1943,1945,1948,1950,1952],{"class":1017,"line":1944},39,[1015,1946,1947],{"class":1126},"    contentId",[1015,1949,1589],{"class":1025},[1015,1951,1619],{"class":1567},[1015,1953,1954],{"class":1211},"            \u002F\u002F cid:... reference for inline images\n",[1015,1956,1958,1961,1963,1965],{"class":1017,"line":1957},40,[1015,1959,1960],{"class":1126},"    slotName",[1015,1962,1130],{"class":1025},[1015,1964,1619],{"class":1567},[1015,1966,1967],{"class":1211},"              \u002F\u002F blob slot holding the bytes\n",[1015,1969,1971],{"class":1017,"line":1970},41,[1015,1972,1973],{"class":1025},"  }>\n",[1015,1975,1977],{"class":1017,"line":1976},42,[1015,1978,1095],{"emptyLinePlaceholder":1094},[1015,1980,1982,1985,1987],{"class":1017,"line":1981},43,[1015,1983,1984],{"class":1126},"  extracted",[1015,1986,1589],{"class":1025},[1015,1988,1571],{"class":1025},[1015,1990,1992,1995,1997],{"class":1017,"line":1991},44,[1015,1993,1994],{"class":1126},"    summary",[1015,1996,1589],{"class":1025},[1015,1998,1581],{"class":1567},[1015,2000,2002,2005,2007,2009],{"class":1017,"line":2001},45,[1015,2003,2004],{"class":1126},"    topics",[1015,2006,1589],{"class":1025},[1015,2008,1619],{"class":1567},[1015,2010,1671],{"class":1029},[1015,2012,2014,2017,2019],{"class":1017,"line":2013},46,[1015,2015,2016],{"class":1126},"    sentiment",[1015,2018,1589],{"class":1025},[1015,2020,1941],{"class":1567},[1015,2022,2024,2027,2029,2031],{"class":1017,"line":2023},47,[1015,2025,2026],{"class":1126},"    actionItems",[1015,2028,1589],{"class":1025},[1015,2030,1619],{"class":1567},[1015,2032,1671],{"class":1029},[1015,2034,2036,2039,2041,2043],{"class":1017,"line":2035},48,[1015,2037,2038],{"class":1126},"    invoiceNumber",[1015,2040,1589],{"class":1025},[1015,2042,1619],{"class":1567},[1015,2044,2045],{"class":1211},"        \u002F\u002F when the email IS an invoice\n",[1015,2047,2049],{"class":1017,"line":2048},49,[1015,2050,1833],{"class":1025},[1015,2052,2054],{"class":1017,"line":2053},50,[1015,2055,1596],{"class":1025},[941,2057,2058,2059,2061,2062,2065,2066,2070],{},"Note there is no ",[949,2060,1293],{}," on the manifest: the content address is slot\nmetadata, maintained by the blobs service. Read it with\n",[949,2063,2064],{},"emails.blob(id).list()"," when you need it (see\n",[979,2067,2069],{"href":2068},"\u002Frecipes\u002Femail-archive-threads-revisions#shared-documents-across-a-thread","Shared documents",").",[990,2072,2074],{"id":2073},"ingest-flow","Ingest flow",[941,2076,2077,2078,2080],{},"MIME parsing itself is out of noy-db's scope — use any ",[949,2079,951],{}," parser\nand adapt its output to this minimal shape:",[1006,2082,2084],{"className":1008,"code":2083,"language":1010,"meta":1011,"style":1011},"\u002F\u002F The shape your MIME parser must produce.\ninterface ParsedEmail {\n  headers: Record\u003Cstring, string | undefined>\n  from: Address\n  to: Address[]\n  cc?: Address[]\n  subject: string\n  receivedAt: string              \u002F\u002F ISO-8601, from the top Received: header\n  text?: string\n  html?: string\n  attachments: Array\u003C{\n    filename: string\n    contentType: string\n    size: number\n    contentId?: string\n    bytes: Uint8Array\n  }>\n}\n",[949,2085,2086,2091,2100,2129,2137,2147,2157,2165,2176,2185,2194,2204,2212,2221,2230,2238,2248,2252],{"__ignoreMap":1011},[1015,2087,2088],{"class":1017,"line":1018},[1015,2089,2090],{"class":1211},"\u002F\u002F The shape your MIME parser must produce.\n",[1015,2092,2093,2095,2098],{"class":1017,"line":1049},[1015,2094,1564],{"class":1101},[1015,2096,2097],{"class":1567}," ParsedEmail",[1015,2099,1571],{"class":1025},[1015,2101,2102,2105,2107,2110,2113,2116,2118,2120,2123,2126],{"class":1017,"line":1070},[1015,2103,2104],{"class":1126},"  headers",[1015,2106,1130],{"class":1025},[1015,2108,2109],{"class":1567}," Record",[1015,2111,2112],{"class":1025},"\u003C",[1015,2114,2115],{"class":1567},"string",[1015,2117,1208],{"class":1025},[1015,2119,1619],{"class":1567},[1015,2121,2122],{"class":1025}," |",[1015,2124,2125],{"class":1567}," undefined",[1015,2127,2128],{"class":1025},">\n",[1015,2130,2131,2133,2135],{"class":1017,"line":1091},[1015,2132,1682],{"class":1126},[1015,2134,1130],{"class":1025},[1015,2136,1687],{"class":1567},[1015,2138,2139,2141,2143,2145],{"class":1017,"line":1098},[1015,2140,1693],{"class":1126},[1015,2142,1130],{"class":1025},[1015,2144,1568],{"class":1567},[1015,2146,1671],{"class":1029},[1015,2148,2149,2151,2153,2155],{"class":1017,"line":1123},[1015,2150,1705],{"class":1126},[1015,2152,1589],{"class":1025},[1015,2154,1568],{"class":1567},[1015,2156,1671],{"class":1029},[1015,2158,2159,2161,2163],{"class":1017,"line":1161},[1015,2160,1729],{"class":1126},[1015,2162,1130],{"class":1025},[1015,2164,1581],{"class":1567},[1015,2166,2167,2169,2171,2173],{"class":1017,"line":1178},[1015,2168,1739],{"class":1126},[1015,2170,1130],{"class":1025},[1015,2172,1619],{"class":1567},[1015,2174,2175],{"class":1211},"              \u002F\u002F ISO-8601, from the top Received: header\n",[1015,2177,2178,2181,2183],{"class":1017,"line":1195},[1015,2179,2180],{"class":1126},"  text",[1015,2182,1589],{"class":1025},[1015,2184,1581],{"class":1567},[1015,2186,2187,2190,2192],{"class":1017,"line":1215},[1015,2188,2189],{"class":1126},"  html",[1015,2191,1589],{"class":1025},[1015,2193,1581],{"class":1567},[1015,2195,2196,2198,2200,2202],{"class":1017,"line":1224},[1015,2197,1902],{"class":1126},[1015,2199,1130],{"class":1025},[1015,2201,1907],{"class":1567},[1015,2203,1910],{"class":1025},[1015,2205,2206,2208,2210],{"class":1017,"line":1229},[1015,2207,1916],{"class":1126},[1015,2209,1130],{"class":1025},[1015,2211,1581],{"class":1567},[1015,2213,2214,2217,2219],{"class":1017,"line":1674},[1015,2215,2216],{"class":1126},"    contentType",[1015,2218,1130],{"class":1025},[1015,2220,1581],{"class":1567},[1015,2222,2223,2226,2228],{"class":1017,"line":1679},[1015,2224,2225],{"class":1126},"    size",[1015,2227,1130],{"class":1025},[1015,2229,1941],{"class":1567},[1015,2231,2232,2234,2236],{"class":1017,"line":1690},[1015,2233,1947],{"class":1126},[1015,2235,1589],{"class":1025},[1015,2237,1581],{"class":1567},[1015,2239,2240,2243,2245],{"class":1017,"line":1702},[1015,2241,2242],{"class":1126},"    bytes",[1015,2244,1130],{"class":1025},[1015,2246,2247],{"class":1567}," Uint8Array\n",[1015,2249,2250],{"class":1017,"line":1714},[1015,2251,1973],{"class":1025},[1015,2253,2254],{"class":1017,"line":1726},[1015,2255,1596],{"class":1025},[1006,2257,2259],{"className":1008,"code":2258,"language":1010,"meta":1011,"style":1011},"import { readFile } from 'node:fs\u002Fpromises'\nimport { generateULID, type Collection } from '@noy-db\u002Fhub'\nimport { parseEmail } from '.\u002Fyour-eml-parser'   \u002F\u002F MIME → ParsedEmail\n\n\u002F** Filename → safe slot-name fragment. *\u002F\nfunction slug(filename: string): string {\n  return filename.toLowerCase().replace(\u002F[^a-z0-9.]+\u002Fg, '-')\n}\n\nasync function ingestEml(emails: Collection\u003CEmail>, emlBytes: Uint8Array): Promise\u003Cstring> {\n  const parsed = parseEmail(emlBytes)\n  const id = generateULID()\n\n  const attachments = parsed.attachments.map((a, i) => ({\n    filename: a.filename,\n    mimeType: a.contentType,\n    sizeBytes: a.size,\n    contentId: a.contentId,                         \u002F\u002F for cid: inline images\n    slotName: `att-${i}-${slug(a.filename)}`,\n  }))\n\n  const record: Email = {\n    id,\n    messageId: parsed.headers['message-id'] ?? id,\n    threadId: await deriveThreadId(emails, parsed),\n    inReplyTo: parsed.headers['in-reply-to'],\n    references: parsed.headers['references']?.split(\u002F\\s+\u002F),\n    from: parsed.from,\n    to: parsed.to,\n    cc: parsed.cc,\n    subject: parsed.subject,\n    receivedAt: parsed.receivedAt,\n    bodyPreview: (parsed.text ?? '').slice(0, 200),\n    bodyText: parsed.text && parsed.text.length \u003C 10_000 ? parsed.text : undefined,\n    bodyTextInBlob: (parsed.text?.length ?? 0) >= 10_000,\n    bodyHtmlInBlob: !!parsed.html,\n    attachments,\n  }\n  await emails.put(id, record)\n\n  \u002F\u002F Always store the raw .eml — forensic source of truth\n  await emails.blob(id).put('raw', emlBytes, { mimeType: 'message\u002Frfc822' })\n\n  if (record.bodyTextInBlob) {\n    await emails.blob(id).put('body-text', new TextEncoder().encode(parsed.text!))\n  }\n  if (record.bodyHtmlInBlob) {\n    await emails.blob(id).put('body-html', new TextEncoder().encode(parsed.html!))\n  }\n\n  for (const [i, att] of attachments.entries()) {\n    const src = parsed.attachments[i]!\n    await emails.blob(id).put(att.slotName, src.bytes, {\n      mimeType: att.mimeType,\n      filename: att.filename,\n    })\n  }\n\n  return id\n}\n\nconst emails = vault.collection\u003CEmail>('emails')\nconst emlBytes = new Uint8Array(await readFile('.\u002Finbox\u002Fq2-invoice.eml'))\nconst id = await ingestEml(emails, emlBytes)\n\u002F\u002F → '01J1ZC4Q4T9GQ0V4Y3F2M8KDXP'\n",[949,2260,2261,2281,2308,2331,2335,2340,2365,2411,2415,2419,2467,2487,2501,2505,2546,2561,2576,2591,2609,2649,2657,2661,2676,2683,2717,2741,2768,2812,2827,2842,2857,2872,2887,2930,2978,3012,3031,3038,3042,3066,3070,3075,3127,3131,3149,3207,3211,3228,3280,3284,3288,3325,3351,3395,3412,3428,3436,3441,3446,3454,3459,3464,3498,3530,3552],{"__ignoreMap":1011},[1015,2262,2263,2265,2267,2270,2272,2274,2276,2279],{"class":1017,"line":1018},[1015,2264,1022],{"class":1021},[1015,2266,1026],{"class":1025},[1015,2268,2269],{"class":1029}," readFile",[1015,2271,1033],{"class":1025},[1015,2273,1036],{"class":1021},[1015,2275,1039],{"class":1025},[1015,2277,2278],{"class":1042},"node:fs\u002Fpromises",[1015,2280,1046],{"class":1025},[1015,2282,2283,2285,2287,2290,2292,2295,2298,2300,2302,2304,2306],{"class":1017,"line":1049},[1015,2284,1022],{"class":1021},[1015,2286,1026],{"class":1025},[1015,2288,2289],{"class":1029}," generateULID",[1015,2291,1208],{"class":1025},[1015,2293,2294],{"class":1021}," type",[1015,2296,2297],{"class":1029}," Collection",[1015,2299,1033],{"class":1025},[1015,2301,1036],{"class":1021},[1015,2303,1039],{"class":1025},[1015,2305,1043],{"class":1042},[1015,2307,1046],{"class":1025},[1015,2309,2310,2312,2314,2317,2319,2321,2323,2326,2328],{"class":1017,"line":1070},[1015,2311,1022],{"class":1021},[1015,2313,1026],{"class":1025},[1015,2315,2316],{"class":1029}," parseEmail",[1015,2318,1033],{"class":1025},[1015,2320,1036],{"class":1021},[1015,2322,1039],{"class":1025},[1015,2324,2325],{"class":1042},".\u002Fyour-eml-parser",[1015,2327,1150],{"class":1025},[1015,2329,2330],{"class":1211},"   \u002F\u002F MIME → ParsedEmail\n",[1015,2332,2333],{"class":1017,"line":1091},[1015,2334,1095],{"emptyLinePlaceholder":1094},[1015,2336,2337],{"class":1017,"line":1098},[1015,2338,2339],{"class":1211},"\u002F** Filename → safe slot-name fragment. *\u002F\n",[1015,2341,2342,2345,2348,2350,2354,2356,2358,2361,2363],{"class":1017,"line":1123},[1015,2343,2344],{"class":1101},"function",[1015,2346,2347],{"class":1114}," slug",[1015,2349,1117],{"class":1025},[1015,2351,2353],{"class":2352},"sHdIc","filename",[1015,2355,1130],{"class":1025},[1015,2357,1619],{"class":1567},[1015,2359,2360],{"class":1025},"):",[1015,2362,1619],{"class":1567},[1015,2364,1571],{"class":1025},[1015,2366,2367,2370,2373,2375,2378,2380,2382,2385,2387,2390,2393,2396,2400,2402,2404,2407,2409],{"class":1017,"line":1161},[1015,2368,2369],{"class":1021},"  return",[1015,2371,2372],{"class":1029}," filename",[1015,2374,960],{"class":1025},[1015,2376,2377],{"class":1114},"toLowerCase",[1015,2379,1205],{"class":1126},[1015,2381,960],{"class":1025},[1015,2383,2384],{"class":1114},"replace",[1015,2386,1117],{"class":1126},[1015,2388,2389],{"class":1025},"\u002F[^",[1015,2391,2392],{"class":1042},"a-z0-9.",[1015,2394,2395],{"class":1025},"]+\u002F",[1015,2397,2399],{"class":2398},"sbssI","g",[1015,2401,1208],{"class":1025},[1015,2403,1039],{"class":1025},[1015,2405,2406],{"class":1042},"-",[1015,2408,1150],{"class":1025},[1015,2410,1221],{"class":1126},[1015,2412,2413],{"class":1017,"line":1178},[1015,2414,1596],{"class":1025},[1015,2416,2417],{"class":1017,"line":1195},[1015,2418,1095],{"emptyLinePlaceholder":1094},[1015,2420,2421,2424,2427,2430,2432,2434,2436,2438,2440,2442,2445,2448,2450,2453,2455,2458,2460,2462,2465],{"class":1017,"line":1215},[1015,2422,2423],{"class":1101},"async",[1015,2425,2426],{"class":1101}," function",[1015,2428,2429],{"class":1114}," ingestEml",[1015,2431,1117],{"class":1025},[1015,2433,1285],{"class":2352},[1015,2435,1130],{"class":1025},[1015,2437,2297],{"class":1567},[1015,2439,2112],{"class":1025},[1015,2441,1270],{"class":1567},[1015,2443,2444],{"class":1025},">,",[1015,2446,2447],{"class":2352}," emlBytes",[1015,2449,1130],{"class":1025},[1015,2451,2452],{"class":1567}," Uint8Array",[1015,2454,2360],{"class":1025},[1015,2456,2457],{"class":1567}," Promise",[1015,2459,2112],{"class":1025},[1015,2461,2115],{"class":1567},[1015,2463,2464],{"class":1025},">",[1015,2466,1571],{"class":1025},[1015,2468,2469,2472,2475,2478,2480,2482,2485],{"class":1017,"line":1224},[1015,2470,2471],{"class":1101},"  const",[1015,2473,2474],{"class":1029}," parsed",[1015,2476,2477],{"class":1025}," =",[1015,2479,2316],{"class":1114},[1015,2481,1117],{"class":1126},[1015,2483,2484],{"class":1029},"emlBytes",[1015,2486,1221],{"class":1126},[1015,2488,2489,2491,2494,2496,2498],{"class":1017,"line":1229},[1015,2490,2471],{"class":1101},[1015,2492,2493],{"class":1029}," id",[1015,2495,2477],{"class":1025},[1015,2497,2289],{"class":1114},[1015,2499,2500],{"class":1126},"()\n",[1015,2502,2503],{"class":1017,"line":1674},[1015,2504,1095],{"emptyLinePlaceholder":1094},[1015,2506,2507,2509,2512,2514,2516,2518,2520,2522,2525,2527,2529,2531,2533,2536,2538,2541,2544],{"class":1017,"line":1679},[1015,2508,2471],{"class":1101},[1015,2510,2511],{"class":1029}," attachments",[1015,2513,2477],{"class":1025},[1015,2515,2474],{"class":1029},[1015,2517,960],{"class":1025},[1015,2519,1289],{"class":1029},[1015,2521,960],{"class":1025},[1015,2523,2524],{"class":1114},"map",[1015,2526,1117],{"class":1126},[1015,2528,1117],{"class":1025},[1015,2530,979],{"class":2352},[1015,2532,1208],{"class":1025},[1015,2534,2535],{"class":2352}," i",[1015,2537,1155],{"class":1025},[1015,2539,2540],{"class":1101}," =>",[1015,2542,2543],{"class":1126}," (",[1015,2545,1120],{"class":1025},[1015,2547,2548,2550,2552,2555,2557,2559],{"class":1017,"line":1690},[1015,2549,1916],{"class":1126},[1015,2551,1130],{"class":1025},[1015,2553,2554],{"class":1029}," a",[1015,2556,960],{"class":1025},[1015,2558,2353],{"class":1029},[1015,2560,1158],{"class":1025},[1015,2562,2563,2565,2567,2569,2571,2574],{"class":1017,"line":1702},[1015,2564,1926],{"class":1126},[1015,2566,1130],{"class":1025},[1015,2568,2554],{"class":1029},[1015,2570,960],{"class":1025},[1015,2572,2573],{"class":1029},"contentType",[1015,2575,1158],{"class":1025},[1015,2577,2578,2580,2582,2584,2586,2589],{"class":1017,"line":1714},[1015,2579,1936],{"class":1126},[1015,2581,1130],{"class":1025},[1015,2583,2554],{"class":1029},[1015,2585,960],{"class":1025},[1015,2587,2588],{"class":1029},"size",[1015,2590,1158],{"class":1025},[1015,2592,2593,2595,2597,2599,2601,2604,2606],{"class":1017,"line":1726},[1015,2594,1947],{"class":1126},[1015,2596,1130],{"class":1025},[1015,2598,2554],{"class":1029},[1015,2600,960],{"class":1025},[1015,2602,2603],{"class":1029},"contentId",[1015,2605,1208],{"class":1025},[1015,2607,2608],{"class":1211},"                         \u002F\u002F for cid: inline images\n",[1015,2610,2611,2613,2615,2618,2621,2624,2627,2629,2631,2633,2636,2639,2641,2644,2647],{"class":1017,"line":1736},[1015,2612,1960],{"class":1126},[1015,2614,1130],{"class":1025},[1015,2616,2617],{"class":1025}," `",[1015,2619,2620],{"class":1042},"att-",[1015,2622,2623],{"class":1025},"${",[1015,2625,2626],{"class":1029},"i",[1015,2628,1218],{"class":1025},[1015,2630,2406],{"class":1042},[1015,2632,2623],{"class":1025},[1015,2634,2635],{"class":1114},"slug",[1015,2637,2638],{"class":1029},"(a",[1015,2640,960],{"class":1025},[1015,2642,2643],{"class":1029},"filename)",[1015,2645,2646],{"class":1025},"}`",[1015,2648,1158],{"class":1025},[1015,2650,2651,2654],{"class":1017,"line":1749},[1015,2652,2653],{"class":1025},"  }",[1015,2655,2656],{"class":1126},"))\n",[1015,2658,2659],{"class":1017,"line":1762},[1015,2660,1095],{"emptyLinePlaceholder":1094},[1015,2662,2663,2665,2668,2670,2672,2674],{"class":1017,"line":1767},[1015,2664,2471],{"class":1101},[1015,2666,2667],{"class":1029}," record",[1015,2669,1130],{"class":1025},[1015,2671,1607],{"class":1567},[1015,2673,2477],{"class":1025},[1015,2675,1571],{"class":1025},[1015,2677,2678,2681],{"class":1017,"line":1779},[1015,2679,2680],{"class":1029},"    id",[1015,2682,1158],{"class":1025},[1015,2684,2685,2688,2690,2692,2694,2697,2700,2702,2705,2707,2710,2713,2715],{"class":1017,"line":1789},[1015,2686,2687],{"class":1126},"    messageId",[1015,2689,1130],{"class":1025},[1015,2691,2474],{"class":1029},[1015,2693,960],{"class":1025},[1015,2695,2696],{"class":1029},"headers",[1015,2698,2699],{"class":1126},"[",[1015,2701,1150],{"class":1025},[1015,2703,2704],{"class":1042},"message-id",[1015,2706,1150],{"class":1025},[1015,2708,2709],{"class":1126},"] ",[1015,2711,2712],{"class":1025},"??",[1015,2714,2493],{"class":1029},[1015,2716,1158],{"class":1025},[1015,2718,2719,2722,2724,2726,2729,2731,2733,2735,2737,2739],{"class":1017,"line":1800},[1015,2720,2721],{"class":1126},"    threadId",[1015,2723,1130],{"class":1025},[1015,2725,1111],{"class":1021},[1015,2727,2728],{"class":1114}," deriveThreadId",[1015,2730,1117],{"class":1126},[1015,2732,1285],{"class":1029},[1015,2734,1208],{"class":1025},[1015,2736,2474],{"class":1029},[1015,2738,1155],{"class":1126},[1015,2740,1158],{"class":1025},[1015,2742,2743,2746,2748,2750,2752,2754,2756,2758,2761,2763,2766],{"class":1017,"line":1810},[1015,2744,2745],{"class":1126},"    inReplyTo",[1015,2747,1130],{"class":1025},[1015,2749,2474],{"class":1029},[1015,2751,960],{"class":1025},[1015,2753,2696],{"class":1029},[1015,2755,2699],{"class":1126},[1015,2757,1150],{"class":1025},[1015,2759,2760],{"class":1042},"in-reply-to",[1015,2762,1150],{"class":1025},[1015,2764,2765],{"class":1126},"]",[1015,2767,1158],{"class":1025},[1015,2769,2770,2773,2775,2777,2779,2781,2783,2785,2787,2789,2791,2794,2797,2799,2802,2805,2808,2810],{"class":1017,"line":1820},[1015,2771,2772],{"class":1126},"    references",[1015,2774,1130],{"class":1025},[1015,2776,2474],{"class":1029},[1015,2778,960],{"class":1025},[1015,2780,2696],{"class":1029},[1015,2782,2699],{"class":1126},[1015,2784,1150],{"class":1025},[1015,2786,1380],{"class":1042},[1015,2788,1150],{"class":1025},[1015,2790,2765],{"class":1126},[1015,2792,2793],{"class":1025},"?.",[1015,2795,2796],{"class":1114},"split",[1015,2798,1117],{"class":1126},[1015,2800,2801],{"class":1025},"\u002F",[1015,2803,2804],{"class":1042},"\\s",[1015,2806,2807],{"class":1025},"+\u002F",[1015,2809,1155],{"class":1126},[1015,2811,1158],{"class":1025},[1015,2813,2814,2817,2819,2821,2823,2825],{"class":1017,"line":1830},[1015,2815,2816],{"class":1126},"    from",[1015,2818,1130],{"class":1025},[1015,2820,2474],{"class":1029},[1015,2822,960],{"class":1025},[1015,2824,1340],{"class":1029},[1015,2826,1158],{"class":1025},[1015,2828,2829,2832,2834,2836,2838,2840],{"class":1017,"line":1836},[1015,2830,2831],{"class":1126},"    to",[1015,2833,1130],{"class":1025},[1015,2835,2474],{"class":1029},[1015,2837,960],{"class":1025},[1015,2839,1344],{"class":1029},[1015,2841,1158],{"class":1025},[1015,2843,2844,2847,2849,2851,2853,2855],{"class":1017,"line":1841},[1015,2845,2846],{"class":1126},"    cc",[1015,2848,1130],{"class":1025},[1015,2850,2474],{"class":1029},[1015,2852,960],{"class":1025},[1015,2854,1347],{"class":1029},[1015,2856,1158],{"class":1025},[1015,2858,2859,2862,2864,2866,2868,2870],{"class":1017,"line":1854},[1015,2860,2861],{"class":1126},"    subject",[1015,2863,1130],{"class":1025},[1015,2865,2474],{"class":1029},[1015,2867,960],{"class":1025},[1015,2869,1350],{"class":1029},[1015,2871,1158],{"class":1025},[1015,2873,2874,2877,2879,2881,2883,2885],{"class":1017,"line":1867},[1015,2875,2876],{"class":1126},"    receivedAt",[1015,2878,1130],{"class":1025},[1015,2880,2474],{"class":1029},[1015,2882,960],{"class":1025},[1015,2884,1353],{"class":1029},[1015,2886,1158],{"class":1025},[1015,2888,2889,2892,2894,2896,2899,2901,2903,2906,2909,2911,2913,2916,2918,2921,2923,2926,2928],{"class":1017,"line":1881},[1015,2890,2891],{"class":1126},"    bodyPreview",[1015,2893,1130],{"class":1025},[1015,2895,2543],{"class":1126},[1015,2897,2898],{"class":1029},"parsed",[1015,2900,960],{"class":1025},[1015,2902,1277],{"class":1029},[1015,2904,2905],{"class":1025}," ??",[1015,2907,2908],{"class":1025}," ''",[1015,2910,1155],{"class":1126},[1015,2912,960],{"class":1025},[1015,2914,2915],{"class":1114},"slice",[1015,2917,1117],{"class":1126},[1015,2919,2920],{"class":2398},"0",[1015,2922,1208],{"class":1025},[1015,2924,2925],{"class":2398}," 200",[1015,2927,1155],{"class":1126},[1015,2929,1158],{"class":1025},[1015,2931,2932,2935,2937,2939,2941,2943,2946,2948,2950,2952,2954,2957,2960,2963,2966,2968,2970,2972,2975],{"class":1017,"line":1894},[1015,2933,2934],{"class":1126},"    bodyText",[1015,2936,1130],{"class":1025},[1015,2938,2474],{"class":1029},[1015,2940,960],{"class":1025},[1015,2942,1277],{"class":1029},[1015,2944,2945],{"class":1025}," &&",[1015,2947,2474],{"class":1029},[1015,2949,960],{"class":1025},[1015,2951,1277],{"class":1029},[1015,2953,960],{"class":1025},[1015,2955,2956],{"class":1029},"length",[1015,2958,2959],{"class":1025}," \u003C",[1015,2961,2962],{"class":2398}," 10_000",[1015,2964,2965],{"class":1025}," ?",[1015,2967,2474],{"class":1029},[1015,2969,960],{"class":1025},[1015,2971,1277],{"class":1029},[1015,2973,2974],{"class":1025}," :",[1015,2976,2977],{"class":1025}," undefined,\n",[1015,2979,2980,2983,2985,2987,2989,2991,2993,2995,2997,2999,3002,3005,3008,3010],{"class":1017,"line":1899},[1015,2981,2982],{"class":1126},"    bodyTextInBlob",[1015,2984,1130],{"class":1025},[1015,2986,2543],{"class":1126},[1015,2988,2898],{"class":1029},[1015,2990,960],{"class":1025},[1015,2992,1277],{"class":1029},[1015,2994,2793],{"class":1025},[1015,2996,2956],{"class":1029},[1015,2998,2905],{"class":1025},[1015,3000,3001],{"class":2398}," 0",[1015,3003,3004],{"class":1126},") ",[1015,3006,3007],{"class":1025},">=",[1015,3009,2962],{"class":2398},[1015,3011,1158],{"class":1025},[1015,3013,3014,3017,3019,3022,3024,3026,3029],{"class":1017,"line":1913},[1015,3015,3016],{"class":1126},"    bodyHtmlInBlob",[1015,3018,1130],{"class":1025},[1015,3020,3021],{"class":1025}," !!",[1015,3023,2898],{"class":1029},[1015,3025,960],{"class":1025},[1015,3027,3028],{"class":1029},"html",[1015,3030,1158],{"class":1025},[1015,3032,3033,3036],{"class":1017,"line":1923},[1015,3034,3035],{"class":1029},"    attachments",[1015,3037,1158],{"class":1025},[1015,3039,3040],{"class":1017,"line":1933},[1015,3041,1833],{"class":1025},[1015,3043,3044,3047,3050,3052,3055,3057,3060,3062,3064],{"class":1017,"line":1944},[1015,3045,3046],{"class":1021},"  await",[1015,3048,3049],{"class":1029}," emails",[1015,3051,960],{"class":1025},[1015,3053,3054],{"class":1114},"put",[1015,3056,1117],{"class":1126},[1015,3058,3059],{"class":1029},"id",[1015,3061,1208],{"class":1025},[1015,3063,2667],{"class":1029},[1015,3065,1221],{"class":1126},[1015,3067,3068],{"class":1017,"line":1957},[1015,3069,1095],{"emptyLinePlaceholder":1094},[1015,3071,3072],{"class":1017,"line":1970},[1015,3073,3074],{"class":1211},"  \u002F\u002F Always store the raw .eml — forensic source of truth\n",[1015,3076,3077,3079,3081,3083,3085,3087,3089,3091,3093,3095,3097,3099,3101,3103,3105,3107,3109,3111,3114,3116,3118,3121,3123,3125],{"class":1017,"line":1976},[1015,3078,3046],{"class":1021},[1015,3080,3049],{"class":1029},[1015,3082,960],{"class":1025},[1015,3084,133],{"class":1114},[1015,3086,1117],{"class":1126},[1015,3088,3059],{"class":1029},[1015,3090,1155],{"class":1126},[1015,3092,960],{"class":1025},[1015,3094,3054],{"class":1114},[1015,3096,1117],{"class":1126},[1015,3098,1150],{"class":1025},[1015,3100,1485],{"class":1042},[1015,3102,1150],{"class":1025},[1015,3104,1208],{"class":1025},[1015,3106,2447],{"class":1029},[1015,3108,1208],{"class":1025},[1015,3110,1026],{"class":1025},[1015,3112,3113],{"class":1126}," mimeType",[1015,3115,1130],{"class":1025},[1015,3117,1039],{"class":1025},[1015,3119,3120],{"class":1042},"message\u002Frfc822",[1015,3122,1150],{"class":1025},[1015,3124,1033],{"class":1025},[1015,3126,1221],{"class":1126},[1015,3128,3129],{"class":1017,"line":1981},[1015,3130,1095],{"emptyLinePlaceholder":1094},[1015,3132,3133,3136,3138,3140,3142,3145,3147],{"class":1017,"line":1991},[1015,3134,3135],{"class":1021},"  if",[1015,3137,2543],{"class":1126},[1015,3139,1364],{"class":1029},[1015,3141,960],{"class":1025},[1015,3143,3144],{"class":1029},"bodyTextInBlob",[1015,3146,3004],{"class":1126},[1015,3148,1120],{"class":1025},[1015,3150,3151,3154,3156,3158,3160,3162,3164,3166,3168,3170,3172,3174,3177,3179,3181,3184,3187,3189,3191,3194,3196,3198,3200,3202,3205],{"class":1017,"line":2001},[1015,3152,3153],{"class":1021},"    await",[1015,3155,3049],{"class":1029},[1015,3157,960],{"class":1025},[1015,3159,133],{"class":1114},[1015,3161,1117],{"class":1126},[1015,3163,3059],{"class":1029},[1015,3165,1155],{"class":1126},[1015,3167,960],{"class":1025},[1015,3169,3054],{"class":1114},[1015,3171,1117],{"class":1126},[1015,3173,1150],{"class":1025},[1015,3175,3176],{"class":1042},"body-text",[1015,3178,1150],{"class":1025},[1015,3180,1208],{"class":1025},[1015,3182,3183],{"class":1025}," new",[1015,3185,3186],{"class":1114}," TextEncoder",[1015,3188,1205],{"class":1126},[1015,3190,960],{"class":1025},[1015,3192,3193],{"class":1114},"encode",[1015,3195,1117],{"class":1126},[1015,3197,2898],{"class":1029},[1015,3199,960],{"class":1025},[1015,3201,1277],{"class":1029},[1015,3203,3204],{"class":1025},"!",[1015,3206,2656],{"class":1126},[1015,3208,3209],{"class":1017,"line":2013},[1015,3210,1833],{"class":1025},[1015,3212,3213,3215,3217,3219,3221,3224,3226],{"class":1017,"line":2023},[1015,3214,3135],{"class":1021},[1015,3216,2543],{"class":1126},[1015,3218,1364],{"class":1029},[1015,3220,960],{"class":1025},[1015,3222,3223],{"class":1029},"bodyHtmlInBlob",[1015,3225,3004],{"class":1126},[1015,3227,1120],{"class":1025},[1015,3229,3230,3232,3234,3236,3238,3240,3242,3244,3246,3248,3250,3252,3254,3256,3258,3260,3262,3264,3266,3268,3270,3272,3274,3276,3278],{"class":1017,"line":2035},[1015,3231,3153],{"class":1021},[1015,3233,3049],{"class":1029},[1015,3235,960],{"class":1025},[1015,3237,133],{"class":1114},[1015,3239,1117],{"class":1126},[1015,3241,3059],{"class":1029},[1015,3243,1155],{"class":1126},[1015,3245,960],{"class":1025},[1015,3247,3054],{"class":1114},[1015,3249,1117],{"class":1126},[1015,3251,1150],{"class":1025},[1015,3253,1465],{"class":1042},[1015,3255,1150],{"class":1025},[1015,3257,1208],{"class":1025},[1015,3259,3183],{"class":1025},[1015,3261,3186],{"class":1114},[1015,3263,1205],{"class":1126},[1015,3265,960],{"class":1025},[1015,3267,3193],{"class":1114},[1015,3269,1117],{"class":1126},[1015,3271,2898],{"class":1029},[1015,3273,960],{"class":1025},[1015,3275,3028],{"class":1029},[1015,3277,3204],{"class":1025},[1015,3279,2656],{"class":1126},[1015,3281,3282],{"class":1017,"line":2048},[1015,3283,1833],{"class":1025},[1015,3285,3286],{"class":1017,"line":2053},[1015,3287,1095],{"emptyLinePlaceholder":1094},[1015,3289,3291,3294,3296,3298,3301,3303,3305,3308,3310,3313,3315,3317,3320,3323],{"class":1017,"line":3290},51,[1015,3292,3293],{"class":1021},"  for",[1015,3295,2543],{"class":1126},[1015,3297,1102],{"class":1101},[1015,3299,3300],{"class":1025}," [",[1015,3302,2626],{"class":1029},[1015,3304,1208],{"class":1025},[1015,3306,3307],{"class":1029}," att",[1015,3309,2765],{"class":1025},[1015,3311,3312],{"class":1025}," of",[1015,3314,2511],{"class":1029},[1015,3316,960],{"class":1025},[1015,3318,3319],{"class":1114},"entries",[1015,3321,3322],{"class":1126},"()) ",[1015,3324,1120],{"class":1025},[1015,3326,3328,3331,3334,3336,3338,3340,3342,3344,3346,3348],{"class":1017,"line":3327},52,[1015,3329,3330],{"class":1101},"    const",[1015,3332,3333],{"class":1029}," src",[1015,3335,2477],{"class":1025},[1015,3337,2474],{"class":1029},[1015,3339,960],{"class":1025},[1015,3341,1289],{"class":1029},[1015,3343,2699],{"class":1126},[1015,3345,2626],{"class":1029},[1015,3347,2765],{"class":1126},[1015,3349,3350],{"class":1025},"!\n",[1015,3352,3354,3356,3358,3360,3362,3364,3366,3368,3370,3372,3374,3377,3379,3382,3384,3386,3388,3391,3393],{"class":1017,"line":3353},53,[1015,3355,3153],{"class":1021},[1015,3357,3049],{"class":1029},[1015,3359,960],{"class":1025},[1015,3361,133],{"class":1114},[1015,3363,1117],{"class":1126},[1015,3365,3059],{"class":1029},[1015,3367,1155],{"class":1126},[1015,3369,960],{"class":1025},[1015,3371,3054],{"class":1114},[1015,3373,1117],{"class":1126},[1015,3375,3376],{"class":1029},"att",[1015,3378,960],{"class":1025},[1015,3380,3381],{"class":1029},"slotName",[1015,3383,1208],{"class":1025},[1015,3385,3333],{"class":1029},[1015,3387,960],{"class":1025},[1015,3389,3390],{"class":1029},"bytes",[1015,3392,1208],{"class":1025},[1015,3394,1571],{"class":1025},[1015,3396,3398,3401,3403,3405,3407,3410],{"class":1017,"line":3397},54,[1015,3399,3400],{"class":1126},"      mimeType",[1015,3402,1130],{"class":1025},[1015,3404,3307],{"class":1029},[1015,3406,960],{"class":1025},[1015,3408,3409],{"class":1029},"mimeType",[1015,3411,1158],{"class":1025},[1015,3413,3415,3418,3420,3422,3424,3426],{"class":1017,"line":3414},55,[1015,3416,3417],{"class":1126},"      filename",[1015,3419,1130],{"class":1025},[1015,3421,3307],{"class":1029},[1015,3423,960],{"class":1025},[1015,3425,2353],{"class":1029},[1015,3427,1158],{"class":1025},[1015,3429,3431,3434],{"class":1017,"line":3430},56,[1015,3432,3433],{"class":1025},"    }",[1015,3435,1221],{"class":1126},[1015,3437,3439],{"class":1017,"line":3438},57,[1015,3440,1833],{"class":1025},[1015,3442,3444],{"class":1017,"line":3443},58,[1015,3445,1095],{"emptyLinePlaceholder":1094},[1015,3447,3449,3451],{"class":1017,"line":3448},59,[1015,3450,2369],{"class":1021},[1015,3452,3453],{"class":1029}," id\n",[1015,3455,3457],{"class":1017,"line":3456},60,[1015,3458,1596],{"class":1025},[1015,3460,3462],{"class":1017,"line":3461},61,[1015,3463,1095],{"emptyLinePlaceholder":1094},[1015,3465,3467,3469,3472,3474,3477,3479,3482,3484,3486,3488,3490,3492,3494,3496],{"class":1017,"line":3466},62,[1015,3468,1102],{"class":1101},[1015,3470,3471],{"class":1029}," emails ",[1015,3473,1108],{"class":1025},[1015,3475,3476],{"class":1029}," vault",[1015,3478,960],{"class":1025},[1015,3480,3481],{"class":1114},"collection",[1015,3483,2112],{"class":1025},[1015,3485,1270],{"class":1567},[1015,3487,2464],{"class":1025},[1015,3489,1117],{"class":1029},[1015,3491,1150],{"class":1025},[1015,3493,1285],{"class":1042},[1015,3495,1150],{"class":1025},[1015,3497,1221],{"class":1029},[1015,3499,3501,3503,3506,3508,3510,3512,3514,3517,3519,3521,3523,3526,3528],{"class":1017,"line":3500},63,[1015,3502,1102],{"class":1101},[1015,3504,3505],{"class":1029}," emlBytes ",[1015,3507,1108],{"class":1025},[1015,3509,3183],{"class":1025},[1015,3511,2452],{"class":1114},[1015,3513,1117],{"class":1029},[1015,3515,3516],{"class":1021},"await",[1015,3518,2269],{"class":1114},[1015,3520,1117],{"class":1029},[1015,3522,1150],{"class":1025},[1015,3524,3525],{"class":1042},".\u002Finbox\u002Fq2-invoice.eml",[1015,3527,1150],{"class":1025},[1015,3529,2656],{"class":1029},[1015,3531,3533,3535,3538,3540,3542,3544,3547,3549],{"class":1017,"line":3532},64,[1015,3534,1102],{"class":1101},[1015,3536,3537],{"class":1029}," id ",[1015,3539,1108],{"class":1025},[1015,3541,1111],{"class":1021},[1015,3543,2429],{"class":1114},[1015,3545,3546],{"class":1029},"(emails",[1015,3548,1208],{"class":1025},[1015,3550,3551],{"class":1029}," emlBytes)\n",[1015,3553,3555],{"class":1017,"line":3554},65,[1015,3556,3557],{"class":1211},"\u002F\u002F → '01J1ZC4Q4T9GQ0V4Y3F2M8KDXP'\n",[990,3559,3561],{"id":3560},"when-to-flip-to-a-secondary-attachments-collection","When to flip to a secondary attachments collection",[941,3563,3564,3565,3568,3569,3572,3573,3576,3577,3580],{},"Add ",[949,3566,3567],{},"vault.collection\u003CAttachmentIndex>('attachments_index')"," as a\n",[944,3570,3571],{},"manually maintained secondary collection"," (not built with the\n",[979,3574,739],{"href":3575},"..\u002Fservices\u002Fmaterialized-views"," service — you\nwrite the sync logic yourself, e.g. inside ",[949,3578,3579],{},"ingestEml","), not a source\nof truth, when:",[3582,3583,3584,3591,3597],"ol",{},[3585,3586,3587,3590],"li",{},[944,3588,3589],{},"You cross ~50 000 emails"," and scan+filter queries for\n\"find all PDFs\" become slow.",[3585,3592,3593,3596],{},[944,3594,3595],{},"You have retention rules per attachment type"," (e.g. \"medical\nimages purge after 7 years, legal agreements retain indefinitely\")\n— easier to run lifecycle policies on a dedicated collection.",[3585,3598,3599,3602],{},[944,3600,3601],{},"You want attachments searchable independent of email state","\n(e.g. search deleted emails' attachments for compliance).",[990,3604,3606],{"id":3605},"see-also","See also",[3608,3609,3610,3615,3621],"ul",{},[3585,3611,3612,3614],{},[979,3613,547],{"href":548}," — the continuation: threading, HTML rendering, and revision tracking.",[3585,3616,3617,3620],{},[979,3618,3619],{"href":622},"Blobs service"," — the slot\u002Fchunking\u002Fdedup layer this recipe stores attachments in.",[3585,3622,3623,3626],{},[979,3624,3625],{"href":500},"Recipes overview"," — the composition model when this recipe stops being enough.",[3628,3629,3630],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":1011,"searchDepth":1070,"depth":1070,"links":3632},[3633,3634,3635,3636,3637,3638,3639],{"id":992,"depth":1049,"text":993},{"id":1260,"depth":1049,"text":1261},{"id":1305,"depth":1049,"text":1306},{"id":1553,"depth":1049,"text":1554},{"id":2073,"depth":1049,"text":2074},{"id":3560,"depth":1049,"text":3561},{"id":3605,"depth":1049,"text":3606},null,"Model MIME emails as one queryable record plus blob slots — the record\u002Fblob decision matrix and the ingest flow.","md",{},{"title":543,"description":3641},"stable","important","V3VNiaxED7JeHN8x-3ZsiP7eBvThXeFSlVK-W8M0wOk",1791896575843]