[{"data":1,"prerenderedAt":3320},["ShallowReactive",2],{"navigation_docs":3,"-reference-decorators":196,"-reference-decorators-surround":3315},[4,127,166],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":36},"Kinotic Apps","i-lucide-rocket","\u002Fapps","1.apps",[10,14,18,37,58,91,106,122],{"title":11,"path":12,"stem":13},"Introduction","\u002Fapps\u002Fintroduction","1.apps\u002F1.introduction",{"title":15,"path":16,"stem":17},"Quick Start","\u002Fapps\u002Fquick-start","1.apps\u002F2.quick-start",{"title":19,"icon":20,"path":21,"stem":22,"children":23,"page":36},"Application Structure","i-lucide-folder-tree","\u002Fapps\u002Fapplication-structure","1.apps\u002F3.application-structure",[24,28,32],{"title":25,"path":26,"stem":27},"Overview","\u002Fapps\u002Fapplication-structure\u002Foverview","1.apps\u002F3.application-structure\u002F1.overview",{"title":29,"path":30,"stem":31},"Applications and Projects","\u002Fapps\u002Fapplication-structure\u002Fapplications-and-projects","1.apps\u002F3.application-structure\u002F2.applications-and-projects",{"title":33,"path":34,"stem":35},"Artifact Types","\u002Fapps\u002Fapplication-structure\u002Fartifact-types","1.apps\u002F3.application-structure\u002F3.artifact-types",false,{"title":38,"icon":39,"path":40,"stem":41,"children":42,"page":36},"Services","i-lucide-network","\u002Fapps\u002Fservices","1.apps\u002F4.services",[43,46,50,54],{"title":25,"path":44,"stem":45},"\u002Fapps\u002Fservices\u002Foverview","1.apps\u002F4.services\u002F1.overview",{"title":47,"path":48,"stem":49},"Publishing Services","\u002Fapps\u002Fservices\u002Fpublishing-services","1.apps\u002F4.services\u002F2.publishing-services",{"title":51,"path":52,"stem":53},"Service Proxies","\u002Fapps\u002Fservices\u002Fservice-proxies","1.apps\u002F4.services\u002F3.service-proxies",{"title":55,"path":56,"stem":57},"Streaming","\u002Fapps\u002Fservices\u002Fstreaming","1.apps\u002F4.services\u002F4.streaming",{"title":59,"icon":60,"path":61,"stem":62,"children":63,"page":36},"Persistence","i-lucide-database","\u002Fapps\u002Fpersistence","1.apps\u002F5.persistence",[64,67,71,75,79,83,87],{"title":25,"path":65,"stem":66},"\u002Fapps\u002Fpersistence\u002Foverview","1.apps\u002F5.persistence\u002F1.overview",{"title":68,"path":69,"stem":70},"Defining Entities","\u002Fapps\u002Fpersistence\u002Fdefining-entities","1.apps\u002F5.persistence\u002F2.defining-entities",{"title":72,"path":73,"stem":74},"Entity Decorators","\u002Fapps\u002Fpersistence\u002Fentity-decorators","1.apps\u002F5.persistence\u002F3.entity-decorators",{"title":76,"path":77,"stem":78},"CRUD Operations","\u002Fapps\u002Fpersistence\u002Fcrud-operations","1.apps\u002F5.persistence\u002F4.crud-operations",{"title":80,"path":81,"stem":82},"Named Queries","\u002Fapps\u002Fpersistence\u002Fnamed-queries","1.apps\u002F5.persistence\u002F5.named-queries",{"title":84,"path":85,"stem":86},"Multi-Tenancy","\u002Fapps\u002Fpersistence\u002Fmulti-tenancy","1.apps\u002F5.persistence\u002F6.multi-tenancy",{"title":88,"path":89,"stem":90},"Migrations","\u002Fapps\u002Fpersistence\u002Fmigrations","1.apps\u002F5.persistence\u002F7.migrations",{"title":92,"icon":93,"path":94,"stem":95,"children":96,"page":36},"Security","i-lucide-shield-check","\u002Fapps\u002Fsecurity","1.apps\u002F6.security",[97,101],{"title":98,"path":99,"stem":100,"icon":93},"Access Control","\u002Fapps\u002Fsecurity\u002Faccess-control","1.apps\u002F6.security\u002F1.access-control",{"title":102,"path":103,"stem":104,"icon":105},"Authentication","\u002Fapps\u002Fsecurity\u002Fauthentication","1.apps\u002F6.security\u002F2.authentication","i-lucide-key-round",{"title":107,"icon":108,"path":109,"stem":110,"children":111,"page":36},"Deployment","i-lucide-cloud-upload","\u002Fapps\u002Fdeployment","1.apps\u002F7.deployment",[112,117],{"title":113,"path":114,"stem":115,"icon":116},"Deployment Workflow","\u002Fapps\u002Fdeployment\u002Fworkflow","1.apps\u002F7.deployment\u002F1.workflow","i-lucide-git-branch",{"title":118,"path":119,"stem":120,"icon":121},"Environments","\u002Fapps\u002Fdeployment\u002Fenvironments","1.apps\u002F7.deployment\u002F2.environments","i-lucide-server",{"title":123,"path":124,"stem":125,"icon":126},"CLI Reference","\u002Fapps\u002Fcli-reference","1.apps\u002F8.cli-reference","i-lucide-terminal",{"title":128,"icon":121,"path":129,"stem":130,"children":131,"page":36},"Kinotic OS","\u002Fplatform","2.platform",[132,137,141,146,151,156,161],{"title":133,"path":134,"stem":135,"icon":136},"System Architecture","\u002Fplatform\u002Farchitecture","2.platform\u002F1.architecture","i-lucide-boxes",{"title":138,"path":139,"stem":140,"icon":6},"Deployment Guide","\u002Fplatform\u002Fdeployment-guide","2.platform\u002F2.deployment-guide",{"title":142,"path":143,"stem":144,"icon":145},"Configuration","\u002Fplatform\u002Fconfiguration","2.platform\u002F3.configuration","i-lucide-settings",{"title":147,"path":148,"stem":149,"icon":150},"Organization Management","\u002Fplatform\u002Forganization-management","2.platform\u002F4.organization-management","i-lucide-building-2",{"title":152,"path":153,"stem":154,"icon":155},"System Security","\u002Fplatform\u002Fsystem-security","2.platform\u002F5.system-security","i-lucide-shield",{"title":157,"path":158,"stem":159,"icon":160},"Observability","\u002Fplatform\u002Fobservability","2.platform\u002F6.observability","i-lucide-activity",{"title":162,"path":163,"stem":164,"icon":165},"Contributing","\u002Fplatform\u002Fcontributing","2.platform\u002F7.contributing","i-lucide-git-pull-request",{"title":167,"icon":168,"path":169,"stem":170,"children":171,"page":36},"Reference","i-lucide-book-open","\u002Freference","3.reference",[172,177,181,186,191],{"title":173,"path":174,"stem":175,"icon":176},"Decorators Reference","\u002Freference\u002Fdecorators","3.reference\u002F1.decorators","i-lucide-at-sign",{"title":178,"path":179,"stem":180,"icon":60},"Migration SQL Grammar","\u002Freference\u002Fmigration-sql-grammar","3.reference\u002F2.migration-sql-grammar",{"title":182,"path":183,"stem":184,"icon":185},"ABAC Expression Language","\u002Freference\u002Fabac-expression-language","3.reference\u002F3.abac-expression-language","i-lucide-file-code",{"title":187,"path":188,"stem":189,"icon":190},"CRI Format","\u002Freference\u002Fcri-format","3.reference\u002F4.cri-format","i-lucide-link",{"title":192,"path":193,"stem":194,"icon":195},"SDK Packages","\u002Freference\u002Fsdk-packages","3.reference\u002F5.sdk-packages","i-lucide-package",{"id":197,"title":173,"body":198,"description":3308,"extension":3309,"links":3310,"meta":3311,"navigation":3312,"path":174,"seo":3313,"stem":175,"__hash__":3314},"docs\u002F3.reference\u002F1.decorators.md",{"type":199,"value":200,"toc":3263},"minimark",[201,205,214,221,224,418,424,457,463,466,617,636,677,680,684,690,701,785,791,798,873,875,879,885,888,992,998,1004,1109,1115,1118,1269,1289,1295,1298,1402,1408,1411,1530,1536,1539,1650,1652,1656,1662,1665,1792,1796,1804,1806,1810,1816,1822,1935,1937,1941,1947,1953,2077,2079,2083,2089,2095,2233,2235,2239,2245,2248,2419,2421,2425,2434,2440,2447,2503,2509,2512,2582,2588,2591,2644,2646,2650,2655,2661,2664,2811,2815,2832,2838,2841,2922,2928,2931,3011,3017,3020,3137,3143,3146,3253,3259],[202,203,72],"h2",{"id":204},"entity-decorators",[206,207,208,209,213],"p",{},"These decorators are imported from ",[210,211,212],"code",{},"@kinotic-ai\u002Fpersistence",".",[215,216,218],"h3",{"id":217},"entitymultitenancytype-entitytype",[210,219,220],{},"@Entity(multiTenancyType?, entityType?)",[206,222,223],{},"Marks a class as a Kinotic entity. Required for any class that should be persisted and managed by the entity service system.",[225,226,231],"pre",{"className":227,"code":228,"language":229,"meta":230,"style":230},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { Entity, MultiTenancyType, EntityType } from '@kinotic-ai\u002Fpersistence'\n\n@Entity()\nexport class Product {\n    \u002F\u002F ...\n}\n\n@Entity(MultiTenancyType.SHARED)\nexport class TenantProduct {\n    \u002F\u002F ...\n}\n\n@Entity(MultiTenancyType.NONE, EntityType.DATA_STREAM)\nexport class SensorReading {\n    \u002F\u002F ...\n}\n","typescript","",[210,232,233,276,283,296,313,320,326,331,346,358,363,368,373,396,408,413],{"__ignoreMap":230},[234,235,238,242,246,250,253,256,258,261,264,267,270,273],"span",{"class":236,"line":237},"line",1,[234,239,241],{"class":240},"s7zQu","import",[234,243,245],{"class":244},"sMK4o"," {",[234,247,249],{"class":248},"sTEyZ"," Entity",[234,251,252],{"class":244},",",[234,254,255],{"class":248}," MultiTenancyType",[234,257,252],{"class":244},[234,259,260],{"class":248}," EntityType",[234,262,263],{"class":244}," }",[234,265,266],{"class":240}," from",[234,268,269],{"class":244}," '",[234,271,212],{"class":272},"sfazB",[234,274,275],{"class":244},"'\n",[234,277,279],{"class":236,"line":278},2,[234,280,282],{"emptyLinePlaceholder":281},true,"\n",[234,284,286,289,293],{"class":236,"line":285},3,[234,287,288],{"class":244},"@",[234,290,292],{"class":291},"s2Zo4","Entity",[234,294,295],{"class":248},"()\n",[234,297,299,302,306,310],{"class":236,"line":298},4,[234,300,301],{"class":240},"export",[234,303,305],{"class":304},"spNyl"," class",[234,307,309],{"class":308},"sBMFI"," Product",[234,311,312],{"class":244}," {\n",[234,314,316],{"class":236,"line":315},5,[234,317,319],{"class":318},"sHwdD","    \u002F\u002F ...\n",[234,321,323],{"class":236,"line":322},6,[234,324,325],{"class":244},"}\n",[234,327,329],{"class":236,"line":328},7,[234,330,282],{"emptyLinePlaceholder":281},[234,332,334,336,338,341,343],{"class":236,"line":333},8,[234,335,288],{"class":244},[234,337,292],{"class":291},[234,339,340],{"class":248},"(MultiTenancyType",[234,342,213],{"class":244},[234,344,345],{"class":248},"SHARED)\n",[234,347,349,351,353,356],{"class":236,"line":348},9,[234,350,301],{"class":240},[234,352,305],{"class":304},[234,354,355],{"class":308}," TenantProduct",[234,357,312],{"class":244},[234,359,361],{"class":236,"line":360},10,[234,362,319],{"class":318},[234,364,366],{"class":236,"line":365},11,[234,367,325],{"class":244},[234,369,371],{"class":236,"line":370},12,[234,372,282],{"emptyLinePlaceholder":281},[234,374,376,378,380,382,384,387,389,391,393],{"class":236,"line":375},13,[234,377,288],{"class":244},[234,379,292],{"class":291},[234,381,340],{"class":248},[234,383,213],{"class":244},[234,385,386],{"class":248},"NONE",[234,388,252],{"class":244},[234,390,260],{"class":248},[234,392,213],{"class":244},[234,394,395],{"class":248},"DATA_STREAM)\n",[234,397,399,401,403,406],{"class":236,"line":398},14,[234,400,301],{"class":240},[234,402,305],{"class":304},[234,404,405],{"class":308}," SensorReading",[234,407,312],{"class":244},[234,409,411],{"class":236,"line":410},15,[234,412,319],{"class":318},[234,414,416],{"class":236,"line":415},16,[234,417,325],{"class":244},[206,419,420],{},[421,422,423],"strong",{},"Parameters:",[425,426,427,445],"ul",{},[428,429,430,433,434,437,438,441,442],"li",{},[210,431,432],{},"multiTenancyType"," — ",[210,435,436],{},"MultiTenancyType.NONE"," (default), ",[210,439,440],{},"MultiTenancyType.SHARED",", or ",[210,443,444],{},"MultiTenancyType.DEDICATED",[428,446,447,433,450,453,454],{},[210,448,449],{},"entityType",[210,451,452],{},"EntityType.TABLE"," (default) or ",[210,455,456],{},"EntityType.DATA_STREAM",[215,458,460],{"id":459},"entityservicedecoratorsconfig",[210,461,462],{},"@EntityServiceDecorators(config)",[206,464,465],{},"Configures per-operation decorators for the entity service. Used to apply ABAC policies, role checks, or other decorators to specific CRUD operations.",[225,467,469],{"className":227,"code":468,"language":229,"meta":230,"style":230},"import { Entity, EntityServiceDecorators, $AbacPolicy } from '@kinotic-ai\u002Fpersistence'\n\n@EntityServiceDecorators({\n    allRead: [\n        $AbacPolicy(\"entity.ownerId == participant.id\")\n    ],\n    allDelete: [\n        $AbacPolicy(\"participant.roles contains 'admin'\")\n    ]\n})\n@Entity()\nexport class Document {\n    \u002F\u002F ...\n}\n",[210,470,471,499,503,516,528,546,554,563,578,583,590,598,609,613],{"__ignoreMap":230},[234,472,473,475,477,479,481,484,486,489,491,493,495,497],{"class":236,"line":237},[234,474,241],{"class":240},[234,476,245],{"class":244},[234,478,249],{"class":248},[234,480,252],{"class":244},[234,482,483],{"class":248}," EntityServiceDecorators",[234,485,252],{"class":244},[234,487,488],{"class":248}," $AbacPolicy",[234,490,263],{"class":244},[234,492,266],{"class":240},[234,494,269],{"class":244},[234,496,212],{"class":272},[234,498,275],{"class":244},[234,500,501],{"class":236,"line":278},[234,502,282],{"emptyLinePlaceholder":281},[234,504,505,507,510,513],{"class":236,"line":285},[234,506,288],{"class":244},[234,508,509],{"class":291},"EntityServiceDecorators",[234,511,512],{"class":248},"(",[234,514,515],{"class":244},"{\n",[234,517,518,522,525],{"class":236,"line":298},[234,519,521],{"class":520},"swJcz","    allRead",[234,523,524],{"class":244},":",[234,526,527],{"class":248}," [\n",[234,529,530,533,535,538,541,543],{"class":236,"line":315},[234,531,532],{"class":291},"        $AbacPolicy",[234,534,512],{"class":248},[234,536,537],{"class":244},"\"",[234,539,540],{"class":272},"entity.ownerId == participant.id",[234,542,537],{"class":244},[234,544,545],{"class":248},")\n",[234,547,548,551],{"class":236,"line":322},[234,549,550],{"class":248},"    ]",[234,552,553],{"class":244},",\n",[234,555,556,559,561],{"class":236,"line":328},[234,557,558],{"class":520},"    allDelete",[234,560,524],{"class":244},[234,562,527],{"class":248},[234,564,565,567,569,571,574,576],{"class":236,"line":333},[234,566,532],{"class":291},[234,568,512],{"class":248},[234,570,537],{"class":244},[234,572,573],{"class":272},"participant.roles contains 'admin'",[234,575,537],{"class":244},[234,577,545],{"class":248},[234,579,580],{"class":236,"line":348},[234,581,582],{"class":248},"    ]\n",[234,584,585,588],{"class":236,"line":360},[234,586,587],{"class":244},"}",[234,589,545],{"class":248},[234,591,592,594,596],{"class":236,"line":365},[234,593,288],{"class":244},[234,595,292],{"class":291},[234,597,295],{"class":248},[234,599,600,602,604,607],{"class":236,"line":370},[234,601,301],{"class":240},[234,603,305],{"class":304},[234,605,606],{"class":308}," Document",[234,608,312],{"class":244},[234,610,611],{"class":236,"line":375},[234,612,319],{"class":318},[234,614,615],{"class":236,"line":398},[234,616,325],{"class":244},[206,618,619,622,623,626,627,626,630,626,633],{},[421,620,621],{},"Operation groups:"," ",[210,624,625],{},"allCreate",", ",[210,628,629],{},"allRead",[210,631,632],{},"allUpdate",[210,634,635],{},"allDelete",[206,637,638,622,641,626,644,626,647,626,650,626,653,626,656,626,659,626,662,626,665,626,668,626,671,626,674],{},[421,639,640],{},"Individual operations:",[210,642,643],{},"save",[210,645,646],{},"bulkSave",[210,648,649],{},"findById",[210,651,652],{},"findByIds",[210,654,655],{},"findAll",[210,657,658],{},"search",[210,660,661],{},"count",[210,663,664],{},"countByQuery",[210,666,667],{},"update",[210,669,670],{},"bulkUpdate",[210,672,673],{},"deleteById",[210,675,676],{},"deleteByQuery",[678,679],"hr",{},[202,681,683],{"id":682},"id-decorators","ID Decorators",[215,685,687],{"id":686},"autogeneratedid",[210,688,689],{},"@AutoGeneratedId",[206,691,692,693,696,697,700],{},"Marks a field as a server-generated ID. The field type must be ",[210,694,695],{},"string | null"," since the ID is ",[210,698,699],{},"null"," before the entity is saved.",[225,702,704],{"className":227,"code":703,"language":229,"meta":230,"style":230},"import { Entity, AutoGeneratedId } from '@kinotic-ai\u002Fpersistence'\n\n@Entity()\nexport class Product {\n    @AutoGeneratedId\n    id: string | null = null\n}\n",[210,705,706,729,733,741,751,759,781],{"__ignoreMap":230},[234,707,708,710,712,714,716,719,721,723,725,727],{"class":236,"line":237},[234,709,241],{"class":240},[234,711,245],{"class":244},[234,713,249],{"class":248},[234,715,252],{"class":244},[234,717,718],{"class":248}," AutoGeneratedId",[234,720,263],{"class":244},[234,722,266],{"class":240},[234,724,269],{"class":244},[234,726,212],{"class":272},[234,728,275],{"class":244},[234,730,731],{"class":236,"line":278},[234,732,282],{"emptyLinePlaceholder":281},[234,734,735,737,739],{"class":236,"line":285},[234,736,288],{"class":244},[234,738,292],{"class":291},[234,740,295],{"class":248},[234,742,743,745,747,749],{"class":236,"line":298},[234,744,301],{"class":240},[234,746,305],{"class":304},[234,748,309],{"class":308},[234,750,312],{"class":244},[234,752,753,756],{"class":236,"line":315},[234,754,755],{"class":244},"    @",[234,757,758],{"class":248},"AutoGeneratedId\n",[234,760,761,764,766,769,772,775,778],{"class":236,"line":322},[234,762,763],{"class":520},"    id",[234,765,524],{"class":244},[234,767,768],{"class":308}," string",[234,770,771],{"class":244}," |",[234,773,774],{"class":308}," null",[234,776,777],{"class":244}," =",[234,779,780],{"class":244}," null\n",[234,782,783],{"class":236,"line":328},[234,784,325],{"class":244},[215,786,788],{"id":787},"id",[210,789,790],{},"@Id",[206,792,793,794,797],{},"Marks a field as a manually-assigned ID. The field type is ",[210,795,796],{},"string"," since the caller is responsible for providing the value.",[225,799,801],{"className":227,"code":800,"language":229,"meta":230,"style":230},"import { Entity, Id } from '@kinotic-ai\u002Fpersistence'\n\n@Entity()\nexport class Product {\n    @Id\n    sku: string = ''\n}\n",[210,802,803,826,830,838,848,855,869],{"__ignoreMap":230},[234,804,805,807,809,811,813,816,818,820,822,824],{"class":236,"line":237},[234,806,241],{"class":240},[234,808,245],{"class":244},[234,810,249],{"class":248},[234,812,252],{"class":244},[234,814,815],{"class":248}," Id",[234,817,263],{"class":244},[234,819,266],{"class":240},[234,821,269],{"class":244},[234,823,212],{"class":272},[234,825,275],{"class":244},[234,827,828],{"class":236,"line":278},[234,829,282],{"emptyLinePlaceholder":281},[234,831,832,834,836],{"class":236,"line":285},[234,833,288],{"class":244},[234,835,292],{"class":291},[234,837,295],{"class":248},[234,839,840,842,844,846],{"class":236,"line":298},[234,841,301],{"class":240},[234,843,305],{"class":304},[234,845,309],{"class":308},[234,847,312],{"class":244},[234,849,850,852],{"class":236,"line":315},[234,851,755],{"class":244},[234,853,854],{"class":248},"Id\n",[234,856,857,860,862,864,866],{"class":236,"line":322},[234,858,859],{"class":520},"    sku",[234,861,524],{"class":244},[234,863,768],{"class":308},[234,865,777],{"class":244},[234,867,868],{"class":244}," ''\n",[234,870,871],{"class":236,"line":328},[234,872,325],{"class":244},[678,874],{},[202,876,878],{"id":877},"field-decorators","Field Decorators",[215,880,882],{"id":881},"notnull",[210,883,884],{},"@NotNull",[206,886,887],{},"Marks a field as required. The persistence layer will reject entities where this field is missing or null.",[225,889,891],{"className":227,"code":890,"language":229,"meta":230,"style":230},"import { Entity, AutoGeneratedId, NotNull } from '@kinotic-ai\u002Fpersistence'\n\n@Entity()\nexport class Product {\n    @AutoGeneratedId\n    id: string | null = null\n\n    @NotNull\n    name: string = ''\n}\n",[210,892,893,920,924,932,942,948,964,968,975,988],{"__ignoreMap":230},[234,894,895,897,899,901,903,905,907,910,912,914,916,918],{"class":236,"line":237},[234,896,241],{"class":240},[234,898,245],{"class":244},[234,900,249],{"class":248},[234,902,252],{"class":244},[234,904,718],{"class":248},[234,906,252],{"class":244},[234,908,909],{"class":248}," NotNull",[234,911,263],{"class":244},[234,913,266],{"class":240},[234,915,269],{"class":244},[234,917,212],{"class":272},[234,919,275],{"class":244},[234,921,922],{"class":236,"line":278},[234,923,282],{"emptyLinePlaceholder":281},[234,925,926,928,930],{"class":236,"line":285},[234,927,288],{"class":244},[234,929,292],{"class":291},[234,931,295],{"class":248},[234,933,934,936,938,940],{"class":236,"line":298},[234,935,301],{"class":240},[234,937,305],{"class":304},[234,939,309],{"class":308},[234,941,312],{"class":244},[234,943,944,946],{"class":236,"line":315},[234,945,755],{"class":244},[234,947,758],{"class":248},[234,949,950,952,954,956,958,960,962],{"class":236,"line":322},[234,951,763],{"class":520},[234,953,524],{"class":244},[234,955,768],{"class":308},[234,957,771],{"class":244},[234,959,774],{"class":308},[234,961,777],{"class":244},[234,963,780],{"class":244},[234,965,966],{"class":236,"line":328},[234,967,282],{"emptyLinePlaceholder":281},[234,969,970,972],{"class":236,"line":333},[234,971,755],{"class":244},[234,973,974],{"class":248},"NotNull\n",[234,976,977,980,982,984,986],{"class":236,"line":348},[234,978,979],{"class":520},"    name",[234,981,524],{"class":244},[234,983,768],{"class":308},[234,985,777],{"class":244},[234,987,868],{"class":244},[234,989,990],{"class":236,"line":360},[234,991,325],{"class":244},[215,993,995],{"id":994},"text",[210,996,997],{},"@Text",[206,999,1000,1001,1003],{},"Enables full-text search indexing on a string field. By default, string fields are indexed as keywords (exact match only). Adding ",[210,1002,997],{}," enables tokenized search.",[225,1005,1007],{"className":227,"code":1006,"language":229,"meta":230,"style":230},"import { Entity, AutoGeneratedId, Text } from '@kinotic-ai\u002Fpersistence'\n\n@Entity()\nexport class Article {\n    @AutoGeneratedId\n    id: string | null = null\n\n    @Text\n    body: string = ''\n}\n",[210,1008,1009,1036,1040,1048,1059,1065,1081,1085,1092,1105],{"__ignoreMap":230},[234,1010,1011,1013,1015,1017,1019,1021,1023,1026,1028,1030,1032,1034],{"class":236,"line":237},[234,1012,241],{"class":240},[234,1014,245],{"class":244},[234,1016,249],{"class":248},[234,1018,252],{"class":244},[234,1020,718],{"class":248},[234,1022,252],{"class":244},[234,1024,1025],{"class":248}," Text",[234,1027,263],{"class":244},[234,1029,266],{"class":240},[234,1031,269],{"class":244},[234,1033,212],{"class":272},[234,1035,275],{"class":244},[234,1037,1038],{"class":236,"line":278},[234,1039,282],{"emptyLinePlaceholder":281},[234,1041,1042,1044,1046],{"class":236,"line":285},[234,1043,288],{"class":244},[234,1045,292],{"class":291},[234,1047,295],{"class":248},[234,1049,1050,1052,1054,1057],{"class":236,"line":298},[234,1051,301],{"class":240},[234,1053,305],{"class":304},[234,1055,1056],{"class":308}," Article",[234,1058,312],{"class":244},[234,1060,1061,1063],{"class":236,"line":315},[234,1062,755],{"class":244},[234,1064,758],{"class":248},[234,1066,1067,1069,1071,1073,1075,1077,1079],{"class":236,"line":322},[234,1068,763],{"class":520},[234,1070,524],{"class":244},[234,1072,768],{"class":308},[234,1074,771],{"class":244},[234,1076,774],{"class":308},[234,1078,777],{"class":244},[234,1080,780],{"class":244},[234,1082,1083],{"class":236,"line":328},[234,1084,282],{"emptyLinePlaceholder":281},[234,1086,1087,1089],{"class":236,"line":333},[234,1088,755],{"class":244},[234,1090,1091],{"class":248},"Text\n",[234,1093,1094,1097,1099,1101,1103],{"class":236,"line":348},[234,1095,1096],{"class":520},"    body",[234,1098,524],{"class":244},[234,1100,768],{"class":308},[234,1102,777],{"class":244},[234,1104,868],{"class":244},[234,1106,1107],{"class":236,"line":360},[234,1108,325],{"class":244},[215,1110,1112],{"id":1111},"precisionprecisiontype",[210,1113,1114],{},"@Precision(PrecisionType)",[206,1116,1117],{},"Sets the numeric precision for a number field. Controls how the value is stored in Elasticsearch.",[225,1119,1121],{"className":227,"code":1120,"language":229,"meta":230,"style":230},"import { Entity, AutoGeneratedId, Precision, PrecisionType } from '@kinotic-ai\u002Fpersistence'\n\n@Entity()\nexport class Measurement {\n    @AutoGeneratedId\n    id: string | null = null\n\n    @Precision(PrecisionType.DOUBLE)\n    value: number = 0\n\n    @Precision(PrecisionType.LONG)\n    timestamp: number = 0\n}\n",[210,1122,1123,1155,1159,1167,1178,1184,1200,1204,1219,1235,1239,1252,1265],{"__ignoreMap":230},[234,1124,1125,1127,1129,1131,1133,1135,1137,1140,1142,1145,1147,1149,1151,1153],{"class":236,"line":237},[234,1126,241],{"class":240},[234,1128,245],{"class":244},[234,1130,249],{"class":248},[234,1132,252],{"class":244},[234,1134,718],{"class":248},[234,1136,252],{"class":244},[234,1138,1139],{"class":248}," Precision",[234,1141,252],{"class":244},[234,1143,1144],{"class":248}," PrecisionType",[234,1146,263],{"class":244},[234,1148,266],{"class":240},[234,1150,269],{"class":244},[234,1152,212],{"class":272},[234,1154,275],{"class":244},[234,1156,1157],{"class":236,"line":278},[234,1158,282],{"emptyLinePlaceholder":281},[234,1160,1161,1163,1165],{"class":236,"line":285},[234,1162,288],{"class":244},[234,1164,292],{"class":291},[234,1166,295],{"class":248},[234,1168,1169,1171,1173,1176],{"class":236,"line":298},[234,1170,301],{"class":240},[234,1172,305],{"class":304},[234,1174,1175],{"class":308}," Measurement",[234,1177,312],{"class":244},[234,1179,1180,1182],{"class":236,"line":315},[234,1181,755],{"class":244},[234,1183,758],{"class":248},[234,1185,1186,1188,1190,1192,1194,1196,1198],{"class":236,"line":322},[234,1187,763],{"class":520},[234,1189,524],{"class":244},[234,1191,768],{"class":308},[234,1193,771],{"class":244},[234,1195,774],{"class":308},[234,1197,777],{"class":244},[234,1199,780],{"class":244},[234,1201,1202],{"class":236,"line":328},[234,1203,282],{"emptyLinePlaceholder":281},[234,1205,1206,1208,1211,1214,1216],{"class":236,"line":333},[234,1207,755],{"class":244},[234,1209,1210],{"class":291},"Precision",[234,1212,1213],{"class":248},"(PrecisionType",[234,1215,213],{"class":244},[234,1217,1218],{"class":248},"DOUBLE)\n",[234,1220,1221,1224,1226,1229,1231],{"class":236,"line":348},[234,1222,1223],{"class":520},"    value",[234,1225,524],{"class":244},[234,1227,1228],{"class":308}," number",[234,1230,777],{"class":244},[234,1232,1234],{"class":1233},"sbssI"," 0\n",[234,1236,1237],{"class":236,"line":360},[234,1238,282],{"emptyLinePlaceholder":281},[234,1240,1241,1243,1245,1247,1249],{"class":236,"line":365},[234,1242,755],{"class":244},[234,1244,1210],{"class":291},[234,1246,1213],{"class":248},[234,1248,213],{"class":244},[234,1250,1251],{"class":248},"LONG)\n",[234,1253,1254,1257,1259,1261,1263],{"class":236,"line":370},[234,1255,1256],{"class":520},"    timestamp",[234,1258,524],{"class":244},[234,1260,1228],{"class":308},[234,1262,777],{"class":244},[234,1264,1234],{"class":1233},[234,1266,1267],{"class":236,"line":375},[234,1268,325],{"class":244},[206,1270,1271,622,1274,626,1277,626,1280,626,1283,626,1286],{},[421,1272,1273],{},"Precision types:",[210,1275,1276],{},"PrecisionType.INT",[210,1278,1279],{},"PrecisionType.SHORT",[210,1281,1282],{},"PrecisionType.LONG",[210,1284,1285],{},"PrecisionType.FLOAT",[210,1287,1288],{},"PrecisionType.DOUBLE",[215,1290,1292],{"id":1291},"notindexed",[210,1293,1294],{},"@NotIndexed",[206,1296,1297],{},"Excludes a field from Elasticsearch indexing. The field is still stored and returned in queries, but cannot be searched or filtered on.",[225,1299,1301],{"className":227,"code":1300,"language":229,"meta":230,"style":230},"import { Entity, AutoGeneratedId, NotIndexed } from '@kinotic-ai\u002Fpersistence'\n\n@Entity()\nexport class Document {\n    @AutoGeneratedId\n    id: string | null = null\n\n    @NotIndexed\n    rawData: string = ''\n}\n",[210,1302,1303,1330,1334,1342,1352,1358,1374,1378,1385,1398],{"__ignoreMap":230},[234,1304,1305,1307,1309,1311,1313,1315,1317,1320,1322,1324,1326,1328],{"class":236,"line":237},[234,1306,241],{"class":240},[234,1308,245],{"class":244},[234,1310,249],{"class":248},[234,1312,252],{"class":244},[234,1314,718],{"class":248},[234,1316,252],{"class":244},[234,1318,1319],{"class":248}," NotIndexed",[234,1321,263],{"class":244},[234,1323,266],{"class":240},[234,1325,269],{"class":244},[234,1327,212],{"class":272},[234,1329,275],{"class":244},[234,1331,1332],{"class":236,"line":278},[234,1333,282],{"emptyLinePlaceholder":281},[234,1335,1336,1338,1340],{"class":236,"line":285},[234,1337,288],{"class":244},[234,1339,292],{"class":291},[234,1341,295],{"class":248},[234,1343,1344,1346,1348,1350],{"class":236,"line":298},[234,1345,301],{"class":240},[234,1347,305],{"class":304},[234,1349,606],{"class":308},[234,1351,312],{"class":244},[234,1353,1354,1356],{"class":236,"line":315},[234,1355,755],{"class":244},[234,1357,758],{"class":248},[234,1359,1360,1362,1364,1366,1368,1370,1372],{"class":236,"line":322},[234,1361,763],{"class":520},[234,1363,524],{"class":244},[234,1365,768],{"class":308},[234,1367,771],{"class":244},[234,1369,774],{"class":308},[234,1371,777],{"class":244},[234,1373,780],{"class":244},[234,1375,1376],{"class":236,"line":328},[234,1377,282],{"emptyLinePlaceholder":281},[234,1379,1380,1382],{"class":236,"line":333},[234,1381,755],{"class":244},[234,1383,1384],{"class":248},"NotIndexed\n",[234,1386,1387,1390,1392,1394,1396],{"class":236,"line":348},[234,1388,1389],{"class":520},"    rawData",[234,1391,524],{"class":244},[234,1393,768],{"class":308},[234,1395,777],{"class":244},[234,1397,868],{"class":244},[234,1399,1400],{"class":236,"line":360},[234,1401,325],{"class":244},[215,1403,1405],{"id":1404},"flattened",[210,1406,1407],{},"@Flattened",[206,1409,1410],{},"Uses Elasticsearch flattened mapping for an object field. All values in the object are indexed as keywords, enabling filtering without the overhead of dynamic field mappings.",[225,1412,1414],{"className":227,"code":1413,"language":229,"meta":230,"style":230},"import { Entity, AutoGeneratedId, Flattened } from '@kinotic-ai\u002Fpersistence'\n\n@Entity()\nexport class Event {\n    @AutoGeneratedId\n    id: string | null = null\n\n    @Flattened\n    metadata: Record\u003Cstring, string> = {}\n}\n",[210,1415,1416,1443,1447,1455,1466,1472,1488,1492,1499,1526],{"__ignoreMap":230},[234,1417,1418,1420,1422,1424,1426,1428,1430,1433,1435,1437,1439,1441],{"class":236,"line":237},[234,1419,241],{"class":240},[234,1421,245],{"class":244},[234,1423,249],{"class":248},[234,1425,252],{"class":244},[234,1427,718],{"class":248},[234,1429,252],{"class":244},[234,1431,1432],{"class":248}," Flattened",[234,1434,263],{"class":244},[234,1436,266],{"class":240},[234,1438,269],{"class":244},[234,1440,212],{"class":272},[234,1442,275],{"class":244},[234,1444,1445],{"class":236,"line":278},[234,1446,282],{"emptyLinePlaceholder":281},[234,1448,1449,1451,1453],{"class":236,"line":285},[234,1450,288],{"class":244},[234,1452,292],{"class":291},[234,1454,295],{"class":248},[234,1456,1457,1459,1461,1464],{"class":236,"line":298},[234,1458,301],{"class":240},[234,1460,305],{"class":304},[234,1462,1463],{"class":308}," Event",[234,1465,312],{"class":244},[234,1467,1468,1470],{"class":236,"line":315},[234,1469,755],{"class":244},[234,1471,758],{"class":248},[234,1473,1474,1476,1478,1480,1482,1484,1486],{"class":236,"line":322},[234,1475,763],{"class":520},[234,1477,524],{"class":244},[234,1479,768],{"class":308},[234,1481,771],{"class":244},[234,1483,774],{"class":308},[234,1485,777],{"class":244},[234,1487,780],{"class":244},[234,1489,1490],{"class":236,"line":328},[234,1491,282],{"emptyLinePlaceholder":281},[234,1493,1494,1496],{"class":236,"line":333},[234,1495,755],{"class":244},[234,1497,1498],{"class":248},"Flattened\n",[234,1500,1501,1504,1506,1509,1512,1514,1516,1518,1521,1523],{"class":236,"line":348},[234,1502,1503],{"class":520},"    metadata",[234,1505,524],{"class":244},[234,1507,1508],{"class":308}," Record",[234,1510,1511],{"class":244},"\u003C",[234,1513,796],{"class":308},[234,1515,252],{"class":244},[234,1517,768],{"class":308},[234,1519,1520],{"class":244},">",[234,1522,777],{"class":244},[234,1524,1525],{"class":244}," {}\n",[234,1527,1528],{"class":236,"line":360},[234,1529,325],{"class":244},[215,1531,1533],{"id":1532},"nested",[210,1534,1535],{},"@Nested",[206,1537,1538],{},"Uses Elasticsearch nested mapping for an array of objects. Preserves the relationship between fields within each object, enabling accurate queries across object boundaries.",[225,1540,1542],{"className":227,"code":1541,"language":229,"meta":230,"style":230},"import { Entity, AutoGeneratedId, Nested } from '@kinotic-ai\u002Fpersistence'\n\n@Entity()\nexport class Order {\n    @AutoGeneratedId\n    id: string | null = null\n\n    @Nested\n    lineItems: LineItem[] = []\n}\n",[210,1543,1544,1571,1575,1583,1594,1600,1616,1620,1627,1646],{"__ignoreMap":230},[234,1545,1546,1548,1550,1552,1554,1556,1558,1561,1563,1565,1567,1569],{"class":236,"line":237},[234,1547,241],{"class":240},[234,1549,245],{"class":244},[234,1551,249],{"class":248},[234,1553,252],{"class":244},[234,1555,718],{"class":248},[234,1557,252],{"class":244},[234,1559,1560],{"class":248}," Nested",[234,1562,263],{"class":244},[234,1564,266],{"class":240},[234,1566,269],{"class":244},[234,1568,212],{"class":272},[234,1570,275],{"class":244},[234,1572,1573],{"class":236,"line":278},[234,1574,282],{"emptyLinePlaceholder":281},[234,1576,1577,1579,1581],{"class":236,"line":285},[234,1578,288],{"class":244},[234,1580,292],{"class":291},[234,1582,295],{"class":248},[234,1584,1585,1587,1589,1592],{"class":236,"line":298},[234,1586,301],{"class":240},[234,1588,305],{"class":304},[234,1590,1591],{"class":308}," Order",[234,1593,312],{"class":244},[234,1595,1596,1598],{"class":236,"line":315},[234,1597,755],{"class":244},[234,1599,758],{"class":248},[234,1601,1602,1604,1606,1608,1610,1612,1614],{"class":236,"line":322},[234,1603,763],{"class":520},[234,1605,524],{"class":244},[234,1607,768],{"class":308},[234,1609,771],{"class":244},[234,1611,774],{"class":308},[234,1613,777],{"class":244},[234,1615,780],{"class":244},[234,1617,1618],{"class":236,"line":328},[234,1619,282],{"emptyLinePlaceholder":281},[234,1621,1622,1624],{"class":236,"line":333},[234,1623,755],{"class":244},[234,1625,1626],{"class":248},"Nested\n",[234,1628,1629,1632,1634,1637,1640,1643],{"class":236,"line":348},[234,1630,1631],{"class":520},"    lineItems",[234,1633,524],{"class":244},[234,1635,1636],{"class":308}," LineItem",[234,1638,1639],{"class":248},"[] ",[234,1641,1642],{"class":244},"=",[234,1644,1645],{"class":248}," []\n",[234,1647,1648],{"class":236,"line":360},[234,1649,325],{"class":244},[678,1651],{},[202,1653,1655],{"id":1654},"relationship","Relationship",[215,1657,1659],{"id":1658},"discriminatorpropertyname",[210,1660,1661],{},"@Discriminator(propertyName)",[206,1663,1664],{},"Marks a field as a polymorphic type discriminator. Used when a field can contain different types and the system needs to determine the concrete type during deserialization.",[225,1666,1668],{"className":227,"code":1667,"language":229,"meta":230,"style":230},"import { Entity, AutoGeneratedId, Discriminator } from '@kinotic-ai\u002Fpersistence'\n\n@Entity()\nexport class Notification {\n    @AutoGeneratedId\n    id: string | null = null\n\n    @Discriminator('type')\n    payload: EmailPayload | SmsPayload | null = null\n}\n",[210,1669,1670,1697,1701,1709,1720,1726,1742,1746,1765,1788],{"__ignoreMap":230},[234,1671,1672,1674,1676,1678,1680,1682,1684,1687,1689,1691,1693,1695],{"class":236,"line":237},[234,1673,241],{"class":240},[234,1675,245],{"class":244},[234,1677,249],{"class":248},[234,1679,252],{"class":244},[234,1681,718],{"class":248},[234,1683,252],{"class":244},[234,1685,1686],{"class":248}," Discriminator",[234,1688,263],{"class":244},[234,1690,266],{"class":240},[234,1692,269],{"class":244},[234,1694,212],{"class":272},[234,1696,275],{"class":244},[234,1698,1699],{"class":236,"line":278},[234,1700,282],{"emptyLinePlaceholder":281},[234,1702,1703,1705,1707],{"class":236,"line":285},[234,1704,288],{"class":244},[234,1706,292],{"class":291},[234,1708,295],{"class":248},[234,1710,1711,1713,1715,1718],{"class":236,"line":298},[234,1712,301],{"class":240},[234,1714,305],{"class":304},[234,1716,1717],{"class":308}," Notification",[234,1719,312],{"class":244},[234,1721,1722,1724],{"class":236,"line":315},[234,1723,755],{"class":244},[234,1725,758],{"class":248},[234,1727,1728,1730,1732,1734,1736,1738,1740],{"class":236,"line":322},[234,1729,763],{"class":520},[234,1731,524],{"class":244},[234,1733,768],{"class":308},[234,1735,771],{"class":244},[234,1737,774],{"class":308},[234,1739,777],{"class":244},[234,1741,780],{"class":244},[234,1743,1744],{"class":236,"line":328},[234,1745,282],{"emptyLinePlaceholder":281},[234,1747,1748,1750,1753,1755,1758,1761,1763],{"class":236,"line":333},[234,1749,755],{"class":244},[234,1751,1752],{"class":291},"Discriminator",[234,1754,512],{"class":248},[234,1756,1757],{"class":244},"'",[234,1759,1760],{"class":272},"type",[234,1762,1757],{"class":244},[234,1764,545],{"class":248},[234,1766,1767,1770,1772,1775,1777,1780,1782,1784,1786],{"class":236,"line":348},[234,1768,1769],{"class":520},"    payload",[234,1771,524],{"class":244},[234,1773,1774],{"class":308}," EmailPayload",[234,1776,771],{"class":244},[234,1778,1779],{"class":308}," SmsPayload",[234,1781,771],{"class":244},[234,1783,774],{"class":308},[234,1785,777],{"class":244},[234,1787,780],{"class":244},[234,1789,1790],{"class":236,"line":360},[234,1791,325],{"class":244},[206,1793,1794],{},[421,1795,423],{},[425,1797,1798],{},[428,1799,1800,1803],{},[210,1801,1802],{},"propertyName"," — The name of the property within the object that identifies its type",[678,1805],{},[202,1807,1809],{"id":1808},"multi-tenancy","Multi-tenancy",[215,1811,1813],{"id":1812},"tenantid",[210,1814,1815],{},"@TenantId",[206,1817,1818,1819,1821],{},"Marks a field as the tenant identifier. Used with ",[210,1820,440],{}," entities to partition data by tenant.",[225,1823,1825],{"className":227,"code":1824,"language":229,"meta":230,"style":230},"import { Entity, AutoGeneratedId, TenantId, MultiTenancyType } from '@kinotic-ai\u002Fpersistence'\n\n@Entity(MultiTenancyType.SHARED)\nexport class Invoice {\n    @AutoGeneratedId\n    id: string | null = null\n\n    @TenantId\n    tenantId: string = ''\n}\n",[210,1826,1827,1858,1862,1874,1885,1891,1907,1911,1918,1931],{"__ignoreMap":230},[234,1828,1829,1831,1833,1835,1837,1839,1841,1844,1846,1848,1850,1852,1854,1856],{"class":236,"line":237},[234,1830,241],{"class":240},[234,1832,245],{"class":244},[234,1834,249],{"class":248},[234,1836,252],{"class":244},[234,1838,718],{"class":248},[234,1840,252],{"class":244},[234,1842,1843],{"class":248}," TenantId",[234,1845,252],{"class":244},[234,1847,255],{"class":248},[234,1849,263],{"class":244},[234,1851,266],{"class":240},[234,1853,269],{"class":244},[234,1855,212],{"class":272},[234,1857,275],{"class":244},[234,1859,1860],{"class":236,"line":278},[234,1861,282],{"emptyLinePlaceholder":281},[234,1863,1864,1866,1868,1870,1872],{"class":236,"line":285},[234,1865,288],{"class":244},[234,1867,292],{"class":291},[234,1869,340],{"class":248},[234,1871,213],{"class":244},[234,1873,345],{"class":248},[234,1875,1876,1878,1880,1883],{"class":236,"line":298},[234,1877,301],{"class":240},[234,1879,305],{"class":304},[234,1881,1882],{"class":308}," Invoice",[234,1884,312],{"class":244},[234,1886,1887,1889],{"class":236,"line":315},[234,1888,755],{"class":244},[234,1890,758],{"class":248},[234,1892,1893,1895,1897,1899,1901,1903,1905],{"class":236,"line":322},[234,1894,763],{"class":520},[234,1896,524],{"class":244},[234,1898,768],{"class":308},[234,1900,771],{"class":244},[234,1902,774],{"class":308},[234,1904,777],{"class":244},[234,1906,780],{"class":244},[234,1908,1909],{"class":236,"line":328},[234,1910,282],{"emptyLinePlaceholder":281},[234,1912,1913,1915],{"class":236,"line":333},[234,1914,755],{"class":244},[234,1916,1917],{"class":248},"TenantId\n",[234,1919,1920,1923,1925,1927,1929],{"class":236,"line":348},[234,1921,1922],{"class":520},"    tenantId",[234,1924,524],{"class":244},[234,1926,768],{"class":308},[234,1928,777],{"class":244},[234,1930,868],{"class":244},[234,1932,1933],{"class":236,"line":360},[234,1934,325],{"class":244},[678,1936],{},[202,1938,1940],{"id":1939},"versioning","Versioning",[215,1942,1944],{"id":1943},"version",[210,1945,1946],{},"@Version",[206,1948,1949,1950,1952],{},"Enables optimistic locking for the entity. The field type must be ",[210,1951,695],{},". The persistence layer uses this field to detect concurrent modifications.",[225,1954,1956],{"className":227,"code":1955,"language":229,"meta":230,"style":230},"import { Entity, AutoGeneratedId, Version } from '@kinotic-ai\u002Fpersistence'\n\n@Entity()\nexport class Product {\n    @AutoGeneratedId\n    id: string | null = null\n\n    @Version\n    version: string | null = null\n\n    name: string = ''\n}\n",[210,1957,1958,1985,1989,1997,2007,2013,2029,2033,2040,2057,2061,2073],{"__ignoreMap":230},[234,1959,1960,1962,1964,1966,1968,1970,1972,1975,1977,1979,1981,1983],{"class":236,"line":237},[234,1961,241],{"class":240},[234,1963,245],{"class":244},[234,1965,249],{"class":248},[234,1967,252],{"class":244},[234,1969,718],{"class":248},[234,1971,252],{"class":244},[234,1973,1974],{"class":248}," Version",[234,1976,263],{"class":244},[234,1978,266],{"class":240},[234,1980,269],{"class":244},[234,1982,212],{"class":272},[234,1984,275],{"class":244},[234,1986,1987],{"class":236,"line":278},[234,1988,282],{"emptyLinePlaceholder":281},[234,1990,1991,1993,1995],{"class":236,"line":285},[234,1992,288],{"class":244},[234,1994,292],{"class":291},[234,1996,295],{"class":248},[234,1998,1999,2001,2003,2005],{"class":236,"line":298},[234,2000,301],{"class":240},[234,2002,305],{"class":304},[234,2004,309],{"class":308},[234,2006,312],{"class":244},[234,2008,2009,2011],{"class":236,"line":315},[234,2010,755],{"class":244},[234,2012,758],{"class":248},[234,2014,2015,2017,2019,2021,2023,2025,2027],{"class":236,"line":322},[234,2016,763],{"class":520},[234,2018,524],{"class":244},[234,2020,768],{"class":308},[234,2022,771],{"class":244},[234,2024,774],{"class":308},[234,2026,777],{"class":244},[234,2028,780],{"class":244},[234,2030,2031],{"class":236,"line":328},[234,2032,282],{"emptyLinePlaceholder":281},[234,2034,2035,2037],{"class":236,"line":333},[234,2036,755],{"class":244},[234,2038,2039],{"class":248},"Version\n",[234,2041,2042,2045,2047,2049,2051,2053,2055],{"class":236,"line":348},[234,2043,2044],{"class":520},"    version",[234,2046,524],{"class":244},[234,2048,768],{"class":308},[234,2050,771],{"class":244},[234,2052,774],{"class":308},[234,2054,777],{"class":244},[234,2056,780],{"class":244},[234,2058,2059],{"class":236,"line":360},[234,2060,282],{"emptyLinePlaceholder":281},[234,2062,2063,2065,2067,2069,2071],{"class":236,"line":365},[234,2064,979],{"class":520},[234,2066,524],{"class":244},[234,2068,768],{"class":308},[234,2070,777],{"class":244},[234,2072,868],{"class":244},[234,2074,2075],{"class":236,"line":370},[234,2076,325],{"class":244},[678,2078],{},[202,2080,2082],{"id":2081},"time-series","Time Series",[215,2084,2086],{"id":2085},"timereference",[210,2087,2088],{},"@TimeReference",[206,2090,2091,2092,2094],{},"Marks a field as the time reference for data stream entities. Used with ",[210,2093,456],{}," to identify the timestamp field.",[225,2096,2098],{"className":227,"code":2097,"language":229,"meta":230,"style":230},"import { Entity, AutoGeneratedId, TimeReference, EntityType } from '@kinotic-ai\u002Fpersistence'\n\n@Entity(undefined, EntityType.DATA_STREAM)\nexport class SensorReading {\n    @AutoGeneratedId\n    id: string | null = null\n\n    @TimeReference\n    timestamp: Date = new Date()\n\n    value: number = 0\n}\n",[210,2099,2100,2131,2135,2152,2162,2168,2184,2188,2195,2213,2217,2229],{"__ignoreMap":230},[234,2101,2102,2104,2106,2108,2110,2112,2114,2117,2119,2121,2123,2125,2127,2129],{"class":236,"line":237},[234,2103,241],{"class":240},[234,2105,245],{"class":244},[234,2107,249],{"class":248},[234,2109,252],{"class":244},[234,2111,718],{"class":248},[234,2113,252],{"class":244},[234,2115,2116],{"class":248}," TimeReference",[234,2118,252],{"class":244},[234,2120,260],{"class":248},[234,2122,263],{"class":244},[234,2124,266],{"class":240},[234,2126,269],{"class":244},[234,2128,212],{"class":272},[234,2130,275],{"class":244},[234,2132,2133],{"class":236,"line":278},[234,2134,282],{"emptyLinePlaceholder":281},[234,2136,2137,2139,2141,2143,2146,2148,2150],{"class":236,"line":285},[234,2138,288],{"class":244},[234,2140,292],{"class":291},[234,2142,512],{"class":248},[234,2144,2145],{"class":244},"undefined,",[234,2147,260],{"class":248},[234,2149,213],{"class":244},[234,2151,395],{"class":248},[234,2153,2154,2156,2158,2160],{"class":236,"line":298},[234,2155,301],{"class":240},[234,2157,305],{"class":304},[234,2159,405],{"class":308},[234,2161,312],{"class":244},[234,2163,2164,2166],{"class":236,"line":315},[234,2165,755],{"class":244},[234,2167,758],{"class":248},[234,2169,2170,2172,2174,2176,2178,2180,2182],{"class":236,"line":322},[234,2171,763],{"class":520},[234,2173,524],{"class":244},[234,2175,768],{"class":308},[234,2177,771],{"class":244},[234,2179,774],{"class":308},[234,2181,777],{"class":244},[234,2183,780],{"class":244},[234,2185,2186],{"class":236,"line":328},[234,2187,282],{"emptyLinePlaceholder":281},[234,2189,2190,2192],{"class":236,"line":333},[234,2191,755],{"class":244},[234,2193,2194],{"class":248},"TimeReference\n",[234,2196,2197,2199,2201,2204,2206,2209,2211],{"class":236,"line":348},[234,2198,1256],{"class":520},[234,2200,524],{"class":244},[234,2202,2203],{"class":308}," Date",[234,2205,777],{"class":244},[234,2207,2208],{"class":244}," new",[234,2210,2203],{"class":520},[234,2212,295],{"class":248},[234,2214,2215],{"class":236,"line":360},[234,2216,282],{"emptyLinePlaceholder":281},[234,2218,2219,2221,2223,2225,2227],{"class":236,"line":365},[234,2220,1223],{"class":520},[234,2222,524],{"class":244},[234,2224,1228],{"class":308},[234,2226,777],{"class":244},[234,2228,1234],{"class":1233},[234,2230,2231],{"class":236,"line":370},[234,2232,325],{"class":244},[678,2234],{},[202,2236,2238],{"id":2237},"query","Query",[215,2240,2242],{"id":2241},"querystatement",[210,2243,2244],{},"@Query(statement)",[206,2246,2247],{},"Defines a named query on an entity service method. The statement uses the Kinotic query syntax.",[225,2249,2251],{"className":227,"code":2250,"language":229,"meta":230,"style":230},"import { Entity, AutoGeneratedId, Query } from '@kinotic-ai\u002Fpersistence'\n\n@Entity()\nexport class Product {\n    @AutoGeneratedId\n    id: string | null = null\n\n    name: string = ''\n    category: string = ''\n\n    @Query(\"category == ?0\")\n    static findByCategory: (category: string) => Promise\u003CProduct[]>\n}\n",[210,2252,2253,2280,2284,2292,2302,2308,2324,2328,2340,2353,2357,2374,2415],{"__ignoreMap":230},[234,2254,2255,2257,2259,2261,2263,2265,2267,2270,2272,2274,2276,2278],{"class":236,"line":237},[234,2256,241],{"class":240},[234,2258,245],{"class":244},[234,2260,249],{"class":248},[234,2262,252],{"class":244},[234,2264,718],{"class":248},[234,2266,252],{"class":244},[234,2268,2269],{"class":248}," Query",[234,2271,263],{"class":244},[234,2273,266],{"class":240},[234,2275,269],{"class":244},[234,2277,212],{"class":272},[234,2279,275],{"class":244},[234,2281,2282],{"class":236,"line":278},[234,2283,282],{"emptyLinePlaceholder":281},[234,2285,2286,2288,2290],{"class":236,"line":285},[234,2287,288],{"class":244},[234,2289,292],{"class":291},[234,2291,295],{"class":248},[234,2293,2294,2296,2298,2300],{"class":236,"line":298},[234,2295,301],{"class":240},[234,2297,305],{"class":304},[234,2299,309],{"class":308},[234,2301,312],{"class":244},[234,2303,2304,2306],{"class":236,"line":315},[234,2305,755],{"class":244},[234,2307,758],{"class":248},[234,2309,2310,2312,2314,2316,2318,2320,2322],{"class":236,"line":322},[234,2311,763],{"class":520},[234,2313,524],{"class":244},[234,2315,768],{"class":308},[234,2317,771],{"class":244},[234,2319,774],{"class":308},[234,2321,777],{"class":244},[234,2323,780],{"class":244},[234,2325,2326],{"class":236,"line":328},[234,2327,282],{"emptyLinePlaceholder":281},[234,2329,2330,2332,2334,2336,2338],{"class":236,"line":333},[234,2331,979],{"class":520},[234,2333,524],{"class":244},[234,2335,768],{"class":308},[234,2337,777],{"class":244},[234,2339,868],{"class":244},[234,2341,2342,2345,2347,2349,2351],{"class":236,"line":348},[234,2343,2344],{"class":520},"    category",[234,2346,524],{"class":244},[234,2348,768],{"class":308},[234,2350,777],{"class":244},[234,2352,868],{"class":244},[234,2354,2355],{"class":236,"line":360},[234,2356,282],{"emptyLinePlaceholder":281},[234,2358,2359,2361,2363,2365,2367,2370,2372],{"class":236,"line":365},[234,2360,755],{"class":244},[234,2362,2238],{"class":291},[234,2364,512],{"class":248},[234,2366,537],{"class":244},[234,2368,2369],{"class":272},"category == ?0",[234,2371,537],{"class":244},[234,2373,545],{"class":248},[234,2375,2376,2379,2382,2384,2387,2391,2393,2395,2398,2401,2404,2406,2409,2412],{"class":236,"line":370},[234,2377,2378],{"class":304},"    static",[234,2380,2381],{"class":520}," findByCategory",[234,2383,524],{"class":244},[234,2385,2386],{"class":244}," (",[234,2388,2390],{"class":2389},"sHdIc","category",[234,2392,524],{"class":244},[234,2394,768],{"class":308},[234,2396,2397],{"class":244},")",[234,2399,2400],{"class":304}," =>",[234,2402,2403],{"class":308}," Promise",[234,2405,1511],{"class":244},[234,2407,2408],{"class":308},"Product",[234,2410,2411],{"class":248},"[]",[234,2413,2414],{"class":244},">\n",[234,2416,2417],{"class":236,"line":375},[234,2418,325],{"class":244},[678,2420],{},[202,2422,2424],{"id":2423},"entity-service-policy-decorators","Entity Service Policy Decorators",[206,2426,2427,2428,2431,2432,213],{},"These factory functions create decorator instances for use within ",[210,2429,2430],{},"@EntityServiceDecorators",". They are imported from ",[210,2433,212],{},[215,2435,2437],{"id":2436},"abacpolicyexpression",[210,2438,2439],{},"$AbacPolicy(expression)",[206,2441,2442,2443,213],{},"Creates an ABAC policy decorator for entity operations. The expression uses the ",[2444,2445,2446],"a",{"href":183},"ABAC expression language",[225,2448,2450],{"className":227,"code":2449,"language":229,"meta":230,"style":230},"import { $AbacPolicy } from '@kinotic-ai\u002Fpersistence'\n\n$AbacPolicy(\"entity.ownerId == participant.id\")\n$AbacPolicy(\"participant.roles contains 'admin'\")\n",[210,2451,2452,2470,2474,2489],{"__ignoreMap":230},[234,2453,2454,2456,2458,2460,2462,2464,2466,2468],{"class":236,"line":237},[234,2455,241],{"class":240},[234,2457,245],{"class":244},[234,2459,488],{"class":248},[234,2461,263],{"class":244},[234,2463,266],{"class":240},[234,2465,269],{"class":244},[234,2467,212],{"class":272},[234,2469,275],{"class":244},[234,2471,2472],{"class":236,"line":278},[234,2473,282],{"emptyLinePlaceholder":281},[234,2475,2476,2479,2481,2483,2485,2487],{"class":236,"line":285},[234,2477,2478],{"class":291},"$AbacPolicy",[234,2480,512],{"class":248},[234,2482,537],{"class":244},[234,2484,540],{"class":272},[234,2486,537],{"class":244},[234,2488,545],{"class":248},[234,2490,2491,2493,2495,2497,2499,2501],{"class":236,"line":298},[234,2492,2478],{"class":291},[234,2494,512],{"class":248},[234,2496,537],{"class":244},[234,2498,573],{"class":272},[234,2500,537],{"class":244},[234,2502,545],{"class":248},[215,2504,2506],{"id":2505},"policypolicies",[210,2507,2508],{},"$Policy(policies)",[206,2510,2511],{},"Creates a policy decorator with a matrix of policy rules.",[225,2513,2515],{"className":227,"code":2514,"language":229,"meta":230,"style":230},"import { $Policy } from '@kinotic-ai\u002Fpersistence'\n\n$Policy([['admin', 'editor'], ['manager']])\n",[210,2516,2517,2536,2540],{"__ignoreMap":230},[234,2518,2519,2521,2523,2526,2528,2530,2532,2534],{"class":236,"line":237},[234,2520,241],{"class":240},[234,2522,245],{"class":244},[234,2524,2525],{"class":248}," $Policy",[234,2527,263],{"class":244},[234,2529,266],{"class":240},[234,2531,269],{"class":244},[234,2533,212],{"class":272},[234,2535,275],{"class":244},[234,2537,2538],{"class":236,"line":278},[234,2539,282],{"emptyLinePlaceholder":281},[234,2541,2542,2545,2548,2550,2553,2555,2557,2559,2562,2564,2567,2569,2572,2574,2577,2579],{"class":236,"line":285},[234,2543,2544],{"class":291},"$Policy",[234,2546,2547],{"class":248},"([[",[234,2549,1757],{"class":244},[234,2551,2552],{"class":272},"admin",[234,2554,1757],{"class":244},[234,2556,252],{"class":244},[234,2558,269],{"class":244},[234,2560,2561],{"class":272},"editor",[234,2563,1757],{"class":244},[234,2565,2566],{"class":248},"]",[234,2568,252],{"class":244},[234,2570,2571],{"class":248}," [",[234,2573,1757],{"class":244},[234,2575,2576],{"class":272},"manager",[234,2578,1757],{"class":244},[234,2580,2581],{"class":248},"]])\n",[215,2583,2585],{"id":2584},"roleroles",[210,2586,2587],{},"$Role(roles)",[206,2589,2590],{},"Creates a role-based access decorator for entity operations.",[225,2592,2594],{"className":227,"code":2593,"language":229,"meta":230,"style":230},"import { $Role } from '@kinotic-ai\u002Fpersistence'\n\n$Role(['admin', 'editor'])\n",[210,2595,2596,2615,2619],{"__ignoreMap":230},[234,2597,2598,2600,2602,2605,2607,2609,2611,2613],{"class":236,"line":237},[234,2599,241],{"class":240},[234,2601,245],{"class":244},[234,2603,2604],{"class":248}," $Role",[234,2606,263],{"class":244},[234,2608,266],{"class":240},[234,2610,269],{"class":244},[234,2612,212],{"class":272},[234,2614,275],{"class":244},[234,2616,2617],{"class":236,"line":278},[234,2618,282],{"emptyLinePlaceholder":281},[234,2620,2621,2624,2627,2629,2631,2633,2635,2637,2639,2641],{"class":236,"line":285},[234,2622,2623],{"class":291},"$Role",[234,2625,2626],{"class":248},"([",[234,2628,1757],{"class":244},[234,2630,2552],{"class":272},[234,2632,1757],{"class":244},[234,2634,252],{"class":244},[234,2636,269],{"class":244},[234,2638,2561],{"class":272},[234,2640,1757],{"class":244},[234,2642,2643],{"class":248},"])\n",[678,2645],{},[202,2647,2649],{"id":2648},"service-decorators","Service Decorators",[206,2651,208,2652,213],{},[210,2653,2654],{},"@kinotic-ai\u002Fcore",[215,2656,2658],{"id":2657},"publishnamespace-name",[210,2659,2660],{},"@Publish(namespace, name?)",[206,2662,2663],{},"Publishes a class as a remotely accessible service. The service becomes available to clients via the RPC gateway.",[225,2665,2667],{"className":227,"code":2666,"language":229,"meta":230,"style":230},"import { Publish } from '@kinotic-ai\u002Fcore'\n\n@Publish('com.example')\nclass UserService {\n    async findUser(id: string): Promise\u003CUser> {\n        \u002F\u002F ...\n    }\n}\n\n@Publish('com.example', 'CustomName')\nclass MyService {\n    \u002F\u002F Published as com.example.CustomName\n}\n",[210,2668,2669,2688,2692,2710,2720,2750,2755,2760,2764,2768,2793,2802,2807],{"__ignoreMap":230},[234,2670,2671,2673,2675,2678,2680,2682,2684,2686],{"class":236,"line":237},[234,2672,241],{"class":240},[234,2674,245],{"class":244},[234,2676,2677],{"class":248}," Publish",[234,2679,263],{"class":244},[234,2681,266],{"class":240},[234,2683,269],{"class":244},[234,2685,2654],{"class":272},[234,2687,275],{"class":244},[234,2689,2690],{"class":236,"line":278},[234,2691,282],{"emptyLinePlaceholder":281},[234,2693,2694,2696,2699,2701,2703,2706,2708],{"class":236,"line":285},[234,2695,288],{"class":244},[234,2697,2698],{"class":291},"Publish",[234,2700,512],{"class":248},[234,2702,1757],{"class":244},[234,2704,2705],{"class":272},"com.example",[234,2707,1757],{"class":244},[234,2709,545],{"class":248},[234,2711,2712,2715,2718],{"class":236,"line":298},[234,2713,2714],{"class":304},"class",[234,2716,2717],{"class":308}," UserService",[234,2719,312],{"class":244},[234,2721,2722,2725,2728,2730,2732,2734,2736,2739,2741,2743,2746,2748],{"class":236,"line":315},[234,2723,2724],{"class":304},"    async",[234,2726,2727],{"class":520}," findUser",[234,2729,512],{"class":244},[234,2731,787],{"class":2389},[234,2733,524],{"class":244},[234,2735,768],{"class":308},[234,2737,2738],{"class":244},"):",[234,2740,2403],{"class":308},[234,2742,1511],{"class":244},[234,2744,2745],{"class":308},"User",[234,2747,1520],{"class":244},[234,2749,312],{"class":244},[234,2751,2752],{"class":236,"line":322},[234,2753,2754],{"class":318},"        \u002F\u002F ...\n",[234,2756,2757],{"class":236,"line":328},[234,2758,2759],{"class":244},"    }\n",[234,2761,2762],{"class":236,"line":333},[234,2763,325],{"class":244},[234,2765,2766],{"class":236,"line":348},[234,2767,282],{"emptyLinePlaceholder":281},[234,2769,2770,2772,2774,2776,2778,2780,2782,2784,2786,2789,2791],{"class":236,"line":360},[234,2771,288],{"class":244},[234,2773,2698],{"class":291},[234,2775,512],{"class":248},[234,2777,1757],{"class":244},[234,2779,2705],{"class":272},[234,2781,1757],{"class":244},[234,2783,252],{"class":244},[234,2785,269],{"class":244},[234,2787,2788],{"class":272},"CustomName",[234,2790,1757],{"class":244},[234,2792,545],{"class":248},[234,2794,2795,2797,2800],{"class":236,"line":365},[234,2796,2714],{"class":304},[234,2798,2799],{"class":308}," MyService",[234,2801,312],{"class":244},[234,2803,2804],{"class":236,"line":370},[234,2805,2806],{"class":318},"    \u002F\u002F Published as com.example.CustomName\n",[234,2808,2809],{"class":236,"line":375},[234,2810,325],{"class":244},[206,2812,2813],{},[421,2814,423],{},[425,2816,2817,2826],{},[428,2818,2819,2822,2823,2397],{},[210,2820,2821],{},"namespace"," — The service namespace (e.g., ",[210,2824,2825],{},"'com.example'",[428,2827,2828,2831],{},[210,2829,2830],{},"name"," — Optional custom service name. Defaults to the class name.",[215,2833,2835],{"id":2834},"versionversion",[210,2836,2837],{},"@Version(version)",[206,2839,2840],{},"Sets the semantic version for a published service. Enables versioned service routing.",[225,2842,2844],{"className":227,"code":2843,"language":229,"meta":230,"style":230},"import { Publish, Version } from '@kinotic-ai\u002Fcore'\n\n@Publish('com.example')\n@Version('2.0.0')\nclass UserService {\n    \u002F\u002F ...\n}\n",[210,2845,2846,2868,2872,2888,2906,2914,2918],{"__ignoreMap":230},[234,2847,2848,2850,2852,2854,2856,2858,2860,2862,2864,2866],{"class":236,"line":237},[234,2849,241],{"class":240},[234,2851,245],{"class":244},[234,2853,2677],{"class":248},[234,2855,252],{"class":244},[234,2857,1974],{"class":248},[234,2859,263],{"class":244},[234,2861,266],{"class":240},[234,2863,269],{"class":244},[234,2865,2654],{"class":272},[234,2867,275],{"class":244},[234,2869,2870],{"class":236,"line":278},[234,2871,282],{"emptyLinePlaceholder":281},[234,2873,2874,2876,2878,2880,2882,2884,2886],{"class":236,"line":285},[234,2875,288],{"class":244},[234,2877,2698],{"class":291},[234,2879,512],{"class":248},[234,2881,1757],{"class":244},[234,2883,2705],{"class":272},[234,2885,1757],{"class":244},[234,2887,545],{"class":248},[234,2889,2890,2892,2895,2897,2899,2902,2904],{"class":236,"line":298},[234,2891,288],{"class":244},[234,2893,2894],{"class":291},"Version",[234,2896,512],{"class":248},[234,2898,1757],{"class":244},[234,2900,2901],{"class":272},"2.0.0",[234,2903,1757],{"class":244},[234,2905,545],{"class":248},[234,2907,2908,2910,2912],{"class":236,"line":315},[234,2909,2714],{"class":304},[234,2911,2717],{"class":308},[234,2913,312],{"class":244},[234,2915,2916],{"class":236,"line":322},[234,2917,319],{"class":318},[234,2919,2920],{"class":236,"line":328},[234,2921,325],{"class":244},[215,2923,2925],{"id":2924},"scope",[210,2926,2927],{},"@Scope",[206,2929,2930],{},"Marks a property as the scope for service routing. Used for multi-tenant service resolution.",[225,2932,2934],{"className":227,"code":2933,"language":229,"meta":230,"style":230},"import { Publish, Scope } from '@kinotic-ai\u002Fcore'\n\n@Publish('com.example')\nclass TenantService {\n    @Scope\n    tenantId: string = ''\n}\n",[210,2935,2936,2959,2963,2979,2988,2995,3007],{"__ignoreMap":230},[234,2937,2938,2940,2942,2944,2946,2949,2951,2953,2955,2957],{"class":236,"line":237},[234,2939,241],{"class":240},[234,2941,245],{"class":244},[234,2943,2677],{"class":248},[234,2945,252],{"class":244},[234,2947,2948],{"class":248}," Scope",[234,2950,263],{"class":244},[234,2952,266],{"class":240},[234,2954,269],{"class":244},[234,2956,2654],{"class":272},[234,2958,275],{"class":244},[234,2960,2961],{"class":236,"line":278},[234,2962,282],{"emptyLinePlaceholder":281},[234,2964,2965,2967,2969,2971,2973,2975,2977],{"class":236,"line":285},[234,2966,288],{"class":244},[234,2968,2698],{"class":291},[234,2970,512],{"class":248},[234,2972,1757],{"class":244},[234,2974,2705],{"class":272},[234,2976,1757],{"class":244},[234,2978,545],{"class":248},[234,2980,2981,2983,2986],{"class":236,"line":298},[234,2982,2714],{"class":304},[234,2984,2985],{"class":308}," TenantService",[234,2987,312],{"class":244},[234,2989,2990,2992],{"class":236,"line":315},[234,2991,755],{"class":244},[234,2993,2994],{"class":248},"Scope\n",[234,2996,2997,2999,3001,3003,3005],{"class":236,"line":322},[234,2998,1922],{"class":520},[234,3000,524],{"class":244},[234,3002,768],{"class":308},[234,3004,777],{"class":244},[234,3006,868],{"class":244},[234,3008,3009],{"class":236,"line":328},[234,3010,325],{"class":244},[215,3012,3014],{"id":3013},"context",[210,3015,3016],{},"@Context()",[206,3018,3019],{},"Injects request context into a method parameter. The parameter receives metadata about the current request.",[225,3021,3023],{"className":227,"code":3022,"language":229,"meta":230,"style":230},"import { Publish, Context } from '@kinotic-ai\u002Fcore'\n\n@Publish('com.example')\nclass AuditService {\n    async logAction(action: string, @Context() context: any): Promise\u003Cvoid> {\n        \u002F\u002F context contains request metadata\n    }\n}\n",[210,3024,3025,3048,3052,3068,3077,3124,3129,3133],{"__ignoreMap":230},[234,3026,3027,3029,3031,3033,3035,3038,3040,3042,3044,3046],{"class":236,"line":237},[234,3028,241],{"class":240},[234,3030,245],{"class":244},[234,3032,2677],{"class":248},[234,3034,252],{"class":244},[234,3036,3037],{"class":248}," Context",[234,3039,263],{"class":244},[234,3041,266],{"class":240},[234,3043,269],{"class":244},[234,3045,2654],{"class":272},[234,3047,275],{"class":244},[234,3049,3050],{"class":236,"line":278},[234,3051,282],{"emptyLinePlaceholder":281},[234,3053,3054,3056,3058,3060,3062,3064,3066],{"class":236,"line":285},[234,3055,288],{"class":244},[234,3057,2698],{"class":291},[234,3059,512],{"class":248},[234,3061,1757],{"class":244},[234,3063,2705],{"class":272},[234,3065,1757],{"class":244},[234,3067,545],{"class":248},[234,3069,3070,3072,3075],{"class":236,"line":298},[234,3071,2714],{"class":304},[234,3073,3074],{"class":308}," AuditService",[234,3076,312],{"class":244},[234,3078,3079,3081,3084,3086,3089,3091,3093,3095,3098,3101,3104,3106,3108,3111,3113,3115,3117,3120,3122],{"class":236,"line":315},[234,3080,2724],{"class":304},[234,3082,3083],{"class":520}," logAction",[234,3085,512],{"class":244},[234,3087,3088],{"class":2389},"action",[234,3090,524],{"class":244},[234,3092,768],{"class":308},[234,3094,252],{"class":244},[234,3096,3097],{"class":244}," @",[234,3099,3100],{"class":291},"Context",[234,3102,3103],{"class":248},"() ",[234,3105,3013],{"class":2389},[234,3107,524],{"class":244},[234,3109,3110],{"class":308}," any",[234,3112,2738],{"class":244},[234,3114,2403],{"class":308},[234,3116,1511],{"class":244},[234,3118,3119],{"class":308},"void",[234,3121,1520],{"class":244},[234,3123,312],{"class":244},[234,3125,3126],{"class":236,"line":322},[234,3127,3128],{"class":318},"        \u002F\u002F context contains request metadata\n",[234,3130,3131],{"class":236,"line":328},[234,3132,2759],{"class":244},[234,3134,3135],{"class":236,"line":333},[234,3136,325],{"class":244},[215,3138,3140],{"id":3139},"abacpolicyexpression-1",[210,3141,3142],{},"@AbacPolicy(expression)",[206,3144,3145],{},"Enforces an ABAC policy on a published service method. The policy is evaluated at the gateway before the method is invoked.",[225,3147,3149],{"className":227,"code":3148,"language":229,"meta":230,"style":230},"import { Publish, AbacPolicy } from '@kinotic-ai\u002Fcore'\n\n@Publish('com.example')\nclass AdminService {\n    @AbacPolicy(\"participant.roles contains 'admin'\")\n    async deleteAllData(): Promise\u003Cvoid> {\n        \u002F\u002F Only reachable by callers with the 'admin' role\n    }\n}\n",[210,3150,3151,3174,3178,3194,3203,3220,3240,3245,3249],{"__ignoreMap":230},[234,3152,3153,3155,3157,3159,3161,3164,3166,3168,3170,3172],{"class":236,"line":237},[234,3154,241],{"class":240},[234,3156,245],{"class":244},[234,3158,2677],{"class":248},[234,3160,252],{"class":244},[234,3162,3163],{"class":248}," AbacPolicy",[234,3165,263],{"class":244},[234,3167,266],{"class":240},[234,3169,269],{"class":244},[234,3171,2654],{"class":272},[234,3173,275],{"class":244},[234,3175,3176],{"class":236,"line":278},[234,3177,282],{"emptyLinePlaceholder":281},[234,3179,3180,3182,3184,3186,3188,3190,3192],{"class":236,"line":285},[234,3181,288],{"class":244},[234,3183,2698],{"class":291},[234,3185,512],{"class":248},[234,3187,1757],{"class":244},[234,3189,2705],{"class":272},[234,3191,1757],{"class":244},[234,3193,545],{"class":248},[234,3195,3196,3198,3201],{"class":236,"line":298},[234,3197,2714],{"class":304},[234,3199,3200],{"class":308}," AdminService",[234,3202,312],{"class":244},[234,3204,3205,3207,3210,3212,3214,3216,3218],{"class":236,"line":315},[234,3206,755],{"class":244},[234,3208,3209],{"class":291},"AbacPolicy",[234,3211,512],{"class":248},[234,3213,537],{"class":244},[234,3215,573],{"class":272},[234,3217,537],{"class":244},[234,3219,545],{"class":248},[234,3221,3222,3224,3227,3230,3232,3234,3236,3238],{"class":236,"line":322},[234,3223,2724],{"class":304},[234,3225,3226],{"class":520}," deleteAllData",[234,3228,3229],{"class":244},"():",[234,3231,2403],{"class":308},[234,3233,1511],{"class":244},[234,3235,3119],{"class":308},[234,3237,1520],{"class":244},[234,3239,312],{"class":244},[234,3241,3242],{"class":236,"line":328},[234,3243,3244],{"class":318},"        \u002F\u002F Only reachable by callers with the 'admin' role\n",[234,3246,3247],{"class":236,"line":333},[234,3248,2759],{"class":244},[234,3250,3251],{"class":236,"line":348},[234,3252,325],{"class":244},[206,3254,3255,3256,3258],{},"See ",[2444,3257,98],{"href":99}," for detailed policy documentation.",[3260,3261,3262],"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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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}",{"title":230,"searchDepth":278,"depth":278,"links":3264},[3265,3269,3273,3281,3284,3287,3290,3293,3296,3301],{"id":204,"depth":278,"text":72,"children":3266},[3267,3268],{"id":217,"depth":285,"text":220},{"id":459,"depth":285,"text":462},{"id":682,"depth":278,"text":683,"children":3270},[3271,3272],{"id":686,"depth":285,"text":689},{"id":787,"depth":285,"text":790},{"id":877,"depth":278,"text":878,"children":3274},[3275,3276,3277,3278,3279,3280],{"id":881,"depth":285,"text":884},{"id":994,"depth":285,"text":997},{"id":1111,"depth":285,"text":1114},{"id":1291,"depth":285,"text":1294},{"id":1404,"depth":285,"text":1407},{"id":1532,"depth":285,"text":1535},{"id":1654,"depth":278,"text":1655,"children":3282},[3283],{"id":1658,"depth":285,"text":1661},{"id":1808,"depth":278,"text":1809,"children":3285},[3286],{"id":1812,"depth":285,"text":1815},{"id":1939,"depth":278,"text":1940,"children":3288},[3289],{"id":1943,"depth":285,"text":1946},{"id":2081,"depth":278,"text":2082,"children":3291},[3292],{"id":2085,"depth":285,"text":2088},{"id":2237,"depth":278,"text":2238,"children":3294},[3295],{"id":2241,"depth":285,"text":2244},{"id":2423,"depth":278,"text":2424,"children":3297},[3298,3299,3300],{"id":2436,"depth":285,"text":2439},{"id":2505,"depth":285,"text":2508},{"id":2584,"depth":285,"text":2587},{"id":2648,"depth":278,"text":2649,"children":3302},[3303,3304,3305,3306,3307],{"id":2657,"depth":285,"text":2660},{"id":2834,"depth":285,"text":2837},{"id":2924,"depth":285,"text":2927},{"id":3013,"depth":285,"text":3016},{"id":3139,"depth":285,"text":3142},"Complete reference for all Kinotic decorators.","md",null,{},{"icon":176},{"title":173,"description":3308},"F4dRyXzoQeNG59Ko2ZArFLJBB5etN9ZEA_FGwKFVMuo",[3316,3318],{"title":162,"path":163,"stem":164,"description":3317,"icon":165,"children":-1},"How to contribute to the Kinotic OS project.",{"title":178,"path":179,"stem":180,"description":3319,"icon":60,"children":-1},"Complete SQL grammar reference for migration scripts.",1775187762911]