[{"data":1,"prerenderedAt":910},["ShallowReactive",2],{"navigation_docs":3,"-apps-services-service-proxies":196,"-apps-services-service-proxies-surround":905},[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":51,"body":198,"description":899,"extension":900,"links":901,"meta":902,"navigation":325,"path":52,"seo":903,"stem":53,"__hash__":904},"docs\u002F1.apps\u002F4.services\u002F3.service-proxies.md",{"type":199,"value":200,"toc":892},"minimark",[201,205,210,213,241,246,663,667,828,832,835,888],[202,203,204],"p",{},"Service proxies let you call remote services as if they were local objects. You define a typed interface, create a class that implements it, and delegate calls to the remote service through the Kinotic connection.",[206,207,209],"h2",{"id":208},"writing-a-service-proxy","Writing a Service Proxy",[202,211,212],{},"The pattern is:",[214,215,216,220,223,230],"ol",{},[217,218,219],"li",{},"Define an interface describing the service methods",[217,221,222],{},"Create a class that implements the interface",[217,224,225,226],{},"In the constructor, obtain a proxy via ",[227,228,229],"code",{},"kinotic.serviceProxy()",[217,231,232,233,236,237,240],{},"Implement methods by calling ",[227,234,235],{},"invoke()"," or ",[227,238,239],{},"invokeStream()"," on the proxy",[242,243,245],"h3",{"id":244},"example","Example",[247,248,253],"pre",{"className":249,"code":250,"language":251,"meta":252,"style":252},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import type { IKinotic, IServiceProxy } from '@kinotic-ai\u002Fcore'\nimport type { Observable } from 'rxjs'\n\nexport interface INotificationService {\n    sendAlert(message: string): Promise\u003Cvoid>\n    watchAlerts(severity: string): Observable\u003CAlert>\n}\n\nexport class NotificationService implements INotificationService {\n\n    private readonly serviceProxy: IServiceProxy\n\n    constructor(kinotic: IKinotic) {\n        this.serviceProxy = kinotic.serviceProxy('com.example.NotificationService')\n    }\n\n    sendAlert(message: string): Promise\u003Cvoid> {\n        return this.serviceProxy.invoke('sendAlert', [message])\n    }\n\n    watchAlerts(severity: string): Observable\u003CAlert> {\n        return this.serviceProxy.invokeStream('watchAlerts', [severity])\n    }\n}\n","typescript","",[227,254,255,297,320,327,344,379,405,411,416,434,439,456,461,481,515,521,526,552,587,592,597,622,653,658],{"__ignoreMap":252},[256,257,260,264,267,271,275,278,281,284,287,290,294],"span",{"class":258,"line":259},"line",1,[256,261,263],{"class":262},"s7zQu","import",[256,265,266],{"class":262}," type",[256,268,270],{"class":269},"sMK4o"," {",[256,272,274],{"class":273},"sTEyZ"," IKinotic",[256,276,277],{"class":269},",",[256,279,280],{"class":273}," IServiceProxy",[256,282,283],{"class":269}," }",[256,285,286],{"class":262}," from",[256,288,289],{"class":269}," '",[256,291,293],{"class":292},"sfazB","@kinotic-ai\u002Fcore",[256,295,296],{"class":269},"'\n",[256,298,300,302,304,306,309,311,313,315,318],{"class":258,"line":299},2,[256,301,263],{"class":262},[256,303,266],{"class":262},[256,305,270],{"class":269},[256,307,308],{"class":273}," Observable",[256,310,283],{"class":269},[256,312,286],{"class":262},[256,314,289],{"class":269},[256,316,317],{"class":292},"rxjs",[256,319,296],{"class":269},[256,321,323],{"class":258,"line":322},3,[256,324,326],{"emptyLinePlaceholder":325},true,"\n",[256,328,330,333,337,341],{"class":258,"line":329},4,[256,331,332],{"class":262},"export",[256,334,336],{"class":335},"spNyl"," interface",[256,338,340],{"class":339},"sBMFI"," INotificationService",[256,342,343],{"class":269}," {\n",[256,345,347,351,354,358,361,364,367,370,373,376],{"class":258,"line":346},5,[256,348,350],{"class":349},"swJcz","    sendAlert",[256,352,353],{"class":269},"(",[256,355,357],{"class":356},"sHdIc","message",[256,359,360],{"class":269},":",[256,362,363],{"class":339}," string",[256,365,366],{"class":269},"):",[256,368,369],{"class":339}," Promise",[256,371,372],{"class":269},"\u003C",[256,374,375],{"class":339},"void",[256,377,378],{"class":269},">\n",[256,380,382,385,387,390,392,394,396,398,400,403],{"class":258,"line":381},6,[256,383,384],{"class":349},"    watchAlerts",[256,386,353],{"class":269},[256,388,389],{"class":356},"severity",[256,391,360],{"class":269},[256,393,363],{"class":339},[256,395,366],{"class":269},[256,397,308],{"class":339},[256,399,372],{"class":269},[256,401,402],{"class":339},"Alert",[256,404,378],{"class":269},[256,406,408],{"class":258,"line":407},7,[256,409,410],{"class":269},"}\n",[256,412,414],{"class":258,"line":413},8,[256,415,326],{"emptyLinePlaceholder":325},[256,417,419,421,424,427,430,432],{"class":258,"line":418},9,[256,420,332],{"class":262},[256,422,423],{"class":335}," class",[256,425,426],{"class":339}," NotificationService",[256,428,429],{"class":335}," implements",[256,431,340],{"class":339},[256,433,343],{"class":269},[256,435,437],{"class":258,"line":436},10,[256,438,326],{"emptyLinePlaceholder":325},[256,440,442,445,448,451,453],{"class":258,"line":441},11,[256,443,444],{"class":335},"    private",[256,446,447],{"class":335}," readonly",[256,449,450],{"class":349}," serviceProxy",[256,452,360],{"class":269},[256,454,455],{"class":339}," IServiceProxy\n",[256,457,459],{"class":258,"line":458},12,[256,460,326],{"emptyLinePlaceholder":325},[256,462,464,467,469,472,474,476,479],{"class":258,"line":463},13,[256,465,466],{"class":335},"    constructor",[256,468,353],{"class":269},[256,470,471],{"class":356},"kinotic",[256,473,360],{"class":269},[256,475,274],{"class":339},[256,477,478],{"class":269},")",[256,480,343],{"class":269},[256,482,484,487,490,493,496,499,502,504,507,510,512],{"class":258,"line":483},14,[256,485,486],{"class":269},"        this.",[256,488,489],{"class":273},"serviceProxy",[256,491,492],{"class":269}," =",[256,494,495],{"class":273}," kinotic",[256,497,498],{"class":269},".",[256,500,489],{"class":501},"s2Zo4",[256,503,353],{"class":349},[256,505,506],{"class":269},"'",[256,508,509],{"class":292},"com.example.NotificationService",[256,511,506],{"class":269},[256,513,514],{"class":349},")\n",[256,516,518],{"class":258,"line":517},15,[256,519,520],{"class":269},"    }\n",[256,522,524],{"class":258,"line":523},16,[256,525,326],{"emptyLinePlaceholder":325},[256,527,529,531,533,535,537,539,541,543,545,547,550],{"class":258,"line":528},17,[256,530,350],{"class":349},[256,532,353],{"class":269},[256,534,357],{"class":356},[256,536,360],{"class":269},[256,538,363],{"class":339},[256,540,366],{"class":269},[256,542,369],{"class":339},[256,544,372],{"class":269},[256,546,375],{"class":339},[256,548,549],{"class":269},">",[256,551,343],{"class":269},[256,553,555,558,561,563,565,568,570,572,575,577,579,582,584],{"class":258,"line":554},18,[256,556,557],{"class":262},"        return",[256,559,560],{"class":269}," this.",[256,562,489],{"class":273},[256,564,498],{"class":269},[256,566,567],{"class":501},"invoke",[256,569,353],{"class":349},[256,571,506],{"class":269},[256,573,574],{"class":292},"sendAlert",[256,576,506],{"class":269},[256,578,277],{"class":269},[256,580,581],{"class":349}," [",[256,583,357],{"class":273},[256,585,586],{"class":349},"])\n",[256,588,590],{"class":258,"line":589},19,[256,591,520],{"class":269},[256,593,595],{"class":258,"line":594},20,[256,596,326],{"emptyLinePlaceholder":325},[256,598,600,602,604,606,608,610,612,614,616,618,620],{"class":258,"line":599},21,[256,601,384],{"class":349},[256,603,353],{"class":269},[256,605,389],{"class":356},[256,607,360],{"class":269},[256,609,363],{"class":339},[256,611,366],{"class":269},[256,613,308],{"class":339},[256,615,372],{"class":269},[256,617,402],{"class":339},[256,619,549],{"class":269},[256,621,343],{"class":269},[256,623,625,627,629,631,633,636,638,640,643,645,647,649,651],{"class":258,"line":624},22,[256,626,557],{"class":262},[256,628,560],{"class":269},[256,630,489],{"class":273},[256,632,498],{"class":269},[256,634,635],{"class":501},"invokeStream",[256,637,353],{"class":349},[256,639,506],{"class":269},[256,641,642],{"class":292},"watchAlerts",[256,644,506],{"class":269},[256,646,277],{"class":269},[256,648,581],{"class":349},[256,650,389],{"class":273},[256,652,586],{"class":349},[256,654,656],{"class":258,"line":655},23,[256,657,520],{"class":269},[256,659,661],{"class":258,"line":660},24,[256,662,410],{"class":269},[242,664,666],{"id":665},"usage","Usage",[247,668,670],{"className":249,"code":669,"language":251,"meta":252,"style":252},"import { Kinotic } from '@kinotic-ai\u002Fcore'\n\nconst notifications = new NotificationService(Kinotic)\n\n\u002F\u002F Request-response\nawait notifications.sendAlert('High CPU usage detected')\n\n\u002F\u002F Streaming (returns an Observable)\nnotifications.watchAlerts('critical').subscribe((alert) => {\n    console.log('Alert:', alert)\n})\n",[227,671,672,691,695,714,718,724,747,751,756,795,821],{"__ignoreMap":252},[256,673,674,676,678,681,683,685,687,689],{"class":258,"line":259},[256,675,263],{"class":262},[256,677,270],{"class":269},[256,679,680],{"class":273}," Kinotic",[256,682,283],{"class":269},[256,684,286],{"class":262},[256,686,289],{"class":269},[256,688,293],{"class":292},[256,690,296],{"class":269},[256,692,693],{"class":258,"line":299},[256,694,326],{"emptyLinePlaceholder":325},[256,696,697,700,703,706,709,711],{"class":258,"line":322},[256,698,699],{"class":335},"const",[256,701,702],{"class":273}," notifications ",[256,704,705],{"class":269},"=",[256,707,708],{"class":269}," new",[256,710,426],{"class":501},[256,712,713],{"class":273},"(Kinotic)\n",[256,715,716],{"class":258,"line":329},[256,717,326],{"emptyLinePlaceholder":325},[256,719,720],{"class":258,"line":346},[256,721,723],{"class":722},"sHwdD","\u002F\u002F Request-response\n",[256,725,726,729,732,734,736,738,740,743,745],{"class":258,"line":381},[256,727,728],{"class":262},"await",[256,730,731],{"class":273}," notifications",[256,733,498],{"class":269},[256,735,574],{"class":501},[256,737,353],{"class":273},[256,739,506],{"class":269},[256,741,742],{"class":292},"High CPU usage detected",[256,744,506],{"class":269},[256,746,514],{"class":273},[256,748,749],{"class":258,"line":407},[256,750,326],{"emptyLinePlaceholder":325},[256,752,753],{"class":258,"line":413},[256,754,755],{"class":722},"\u002F\u002F Streaming (returns an Observable)\n",[256,757,758,761,763,765,767,769,772,774,776,778,781,783,785,788,790,793],{"class":258,"line":418},[256,759,760],{"class":273},"notifications",[256,762,498],{"class":269},[256,764,642],{"class":501},[256,766,353],{"class":273},[256,768,506],{"class":269},[256,770,771],{"class":292},"critical",[256,773,506],{"class":269},[256,775,478],{"class":273},[256,777,498],{"class":269},[256,779,780],{"class":501},"subscribe",[256,782,353],{"class":273},[256,784,353],{"class":269},[256,786,787],{"class":356},"alert",[256,789,478],{"class":269},[256,791,792],{"class":335}," =>",[256,794,343],{"class":269},[256,796,797,800,802,805,807,809,812,814,816,819],{"class":258,"line":436},[256,798,799],{"class":273},"    console",[256,801,498],{"class":269},[256,803,804],{"class":501},"log",[256,806,353],{"class":349},[256,808,506],{"class":269},[256,810,811],{"class":292},"Alert:",[256,813,506],{"class":269},[256,815,277],{"class":269},[256,817,818],{"class":273}," alert",[256,820,514],{"class":349},[256,822,823,826],{"class":258,"line":441},[256,824,825],{"class":269},"}",[256,827,514],{"class":273},[206,829,831],{"id":830},"invocation-methods","Invocation Methods",[202,833,834],{},"Each proxy provides two ways to call the remote service:",[836,837,838,854],"table",{},[839,840,841],"thead",{},[842,843,844,848,851],"tr",{},[845,846,847],"th",{},"Method",[845,849,850],{},"Returns",[845,852,853],{},"Use When",[855,856,857,873],"tbody",{},[842,858,859,865,870],{},[860,861,862],"td",{},[227,863,864],{},"invoke(method, args?)",[860,866,867],{},[227,868,869],{},"Promise\u003Cany>",[860,871,872],{},"The service returns a single result",[842,874,875,880,885],{},[860,876,877],{},[227,878,879],{},"invokeStream(method, args?)",[860,881,882],{},[227,883,884],{},"Observable\u003Cany>",[860,886,887],{},"The service pushes multiple values over time",[889,890,891],"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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .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}",{"title":252,"searchDepth":299,"depth":299,"links":893},[894,898],{"id":208,"depth":299,"text":209,"children":895},[896,897],{"id":244,"depth":322,"text":245},{"id":665,"depth":322,"text":666},{"id":830,"depth":299,"text":831},"How to call remote services using service proxies in Kinotic.","md",null,{},{"title":51,"description":899},"NSSYuo9XeNSU6dwDDQBnp3ybEtAGnLERZw7F1XJKHA0",[906,908],{"title":47,"path":48,"stem":49,"description":907,"children":-1},"How to publish TypeScript services in Kinotic using decorators.",{"title":55,"path":56,"stem":57,"description":909,"children":-1},"Real-time data streaming between services and clients.",1775187764957]