aimeat 1.26.0 → 1.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/README.md +7 -0
  2. package/dist/.env.example +17 -0
  3. package/dist/locales/en.json +49 -7
  4. package/dist/locales/fi.json +56 -14
  5. package/dist/public/css/components/app-sandbox.css +62 -0
  6. package/dist/public/css/views/app-grant.css +51 -0
  7. package/dist/public/css/views/landing.css +8 -2
  8. package/dist/public/js/app-sandbox.js +83 -0
  9. package/dist/public/spa.html +16 -1
  10. package/dist/public/views/app-grant.js +107 -0
  11. package/dist/public/views/business.js +8 -1
  12. package/dist/public/views/how-it-works.js +5 -1
  13. package/dist/public/views/landing.js +83 -76
  14. package/dist/public/views/profile/access-tab.js +75 -0
  15. package/dist/scripts/screenshot-worker.d.ts +2 -0
  16. package/dist/scripts/screenshot-worker.d.ts.map +1 -0
  17. package/dist/scripts/screenshot-worker.js +14 -0
  18. package/dist/scripts/screenshot-worker.js.map +1 -0
  19. package/dist/src/auth/jwt.d.ts +2 -0
  20. package/dist/src/auth/jwt.d.ts.map +1 -1
  21. package/dist/src/auth/jwt.js +2 -0
  22. package/dist/src/auth/jwt.js.map +1 -1
  23. package/dist/src/auth/middleware.d.ts.map +1 -1
  24. package/dist/src/auth/middleware.js +6 -2
  25. package/dist/src/auth/middleware.js.map +1 -1
  26. package/dist/src/cli/init-wizard.d.ts +7 -3
  27. package/dist/src/cli/init-wizard.d.ts.map +1 -1
  28. package/dist/src/cli/init-wizard.js +50 -5
  29. package/dist/src/cli/init-wizard.js.map +1 -1
  30. package/dist/src/cli/screenshot-worker.d.ts +2 -0
  31. package/dist/src/cli/screenshot-worker.d.ts.map +1 -0
  32. package/dist/src/cli/screenshot-worker.js +156 -0
  33. package/dist/src/cli/screenshot-worker.js.map +1 -0
  34. package/dist/src/config.d.ts +17 -0
  35. package/dist/src/config.d.ts.map +1 -1
  36. package/dist/src/config.js +25 -0
  37. package/dist/src/config.js.map +1 -1
  38. package/dist/src/generated/api-types.d.ts +529 -0
  39. package/dist/src/generated/api-types.d.ts.map +1 -1
  40. package/dist/src/generated/prisma-postgres/edge.js +20 -3
  41. package/dist/src/generated/prisma-postgres/index-browser.js +17 -0
  42. package/dist/src/generated/prisma-postgres/index.d.ts +1618 -154
  43. package/dist/src/generated/prisma-postgres/index.js +20 -3
  44. package/dist/src/generated/prisma-postgres/package.json +1 -1
  45. package/dist/src/generated/prisma-postgres/schema.prisma +20 -0
  46. package/dist/src/generated/prisma-postgres/wasm.js +20 -3
  47. package/dist/src/index.js +8 -0
  48. package/dist/src/index.js.map +1 -1
  49. package/dist/src/mcp/apps.d.ts +2 -0
  50. package/dist/src/mcp/apps.d.ts.map +1 -1
  51. package/dist/src/mcp/apps.js +18 -1
  52. package/dist/src/mcp/apps.js.map +1 -1
  53. package/dist/src/mcp/extensions.d.ts +1 -0
  54. package/dist/src/mcp/extensions.d.ts.map +1 -1
  55. package/dist/src/mcp/extensions.js +10 -1
  56. package/dist/src/mcp/extensions.js.map +1 -1
  57. package/dist/src/middleware/rate-limit.d.ts +10 -0
  58. package/dist/src/middleware/rate-limit.d.ts.map +1 -1
  59. package/dist/src/middleware/rate-limit.js +24 -4
  60. package/dist/src/middleware/rate-limit.js.map +1 -1
  61. package/dist/src/middleware/subdomain.d.ts +15 -3
  62. package/dist/src/middleware/subdomain.d.ts.map +1 -1
  63. package/dist/src/middleware/subdomain.js +35 -12
  64. package/dist/src/middleware/subdomain.js.map +1 -1
  65. package/dist/src/routes/admin.js +4 -2
  66. package/dist/src/routes/admin.js.map +1 -1
  67. package/dist/src/routes/agent-webhook.d.ts.map +1 -1
  68. package/dist/src/routes/agent-webhook.js +3 -2
  69. package/dist/src/routes/agent-webhook.js.map +1 -1
  70. package/dist/src/routes/app-grants.d.ts +32 -0
  71. package/dist/src/routes/app-grants.d.ts.map +1 -0
  72. package/dist/src/routes/app-grants.js +257 -0
  73. package/dist/src/routes/app-grants.js.map +1 -0
  74. package/dist/src/routes/apps.d.ts +9 -0
  75. package/dist/src/routes/apps.d.ts.map +1 -1
  76. package/dist/src/routes/apps.js +127 -2
  77. package/dist/src/routes/apps.js.map +1 -1
  78. package/dist/src/routes/extensions.d.ts +2 -0
  79. package/dist/src/routes/extensions.d.ts.map +1 -1
  80. package/dist/src/routes/extensions.js +18 -9
  81. package/dist/src/routes/extensions.js.map +1 -1
  82. package/dist/src/routes/foundry.d.ts.map +1 -1
  83. package/dist/src/routes/foundry.js +13 -1
  84. package/dist/src/routes/foundry.js.map +1 -1
  85. package/dist/src/routes/generator.d.ts.map +1 -1
  86. package/dist/src/routes/generator.js +13 -1
  87. package/dist/src/routes/generator.js.map +1 -1
  88. package/dist/src/routes/libs.d.ts +6 -0
  89. package/dist/src/routes/libs.d.ts.map +1 -1
  90. package/dist/src/routes/libs.js +40 -0
  91. package/dist/src/routes/libs.js.map +1 -1
  92. package/dist/src/routes/oauth-login.d.ts +22 -0
  93. package/dist/src/routes/oauth-login.d.ts.map +1 -0
  94. package/dist/src/routes/oauth-login.js +219 -0
  95. package/dist/src/routes/oauth-login.js.map +1 -0
  96. package/dist/src/routes/portal.d.ts.map +1 -1
  97. package/dist/src/routes/portal.js +1 -0
  98. package/dist/src/routes/portal.js.map +1 -1
  99. package/dist/src/routes/subdomains.d.ts +5 -0
  100. package/dist/src/routes/subdomains.d.ts.map +1 -1
  101. package/dist/src/routes/subdomains.js +55 -9
  102. package/dist/src/routes/subdomains.js.map +1 -1
  103. package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
  104. package/dist/src/server-bootstrap/routes-loader.js +16 -0
  105. package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
  106. package/dist/src/server-bootstrap/static-files.d.ts +3 -0
  107. package/dist/src/server-bootstrap/static-files.d.ts.map +1 -1
  108. package/dist/src/server-bootstrap/static-files.js +19 -2
  109. package/dist/src/server-bootstrap/static-files.js.map +1 -1
  110. package/dist/src/server.d.ts.map +1 -1
  111. package/dist/src/server.js +5 -0
  112. package/dist/src/server.js.map +1 -1
  113. package/dist/src/services/hooks.js +2 -2
  114. package/dist/src/services/hooks.js.map +1 -1
  115. package/dist/src/services/oidc-client.d.ts +3 -0
  116. package/dist/src/services/oidc-client.d.ts.map +1 -1
  117. package/dist/src/services/oidc-client.js +17 -2
  118. package/dist/src/services/oidc-client.js.map +1 -1
  119. package/dist/src/services/quota.d.ts +14 -1
  120. package/dist/src/services/quota.d.ts.map +1 -1
  121. package/dist/src/services/quota.js +28 -1
  122. package/dist/src/services/quota.js.map +1 -1
  123. package/dist/src/services/webhook-dispatcher.d.ts.map +1 -1
  124. package/dist/src/services/webhook-dispatcher.js +3 -2
  125. package/dist/src/services/webhook-dispatcher.js.map +1 -1
  126. package/dist/src/storage/interface.d.ts +17 -2
  127. package/dist/src/storage/interface.d.ts.map +1 -1
  128. package/dist/src/storage/interface.js.map +1 -1
  129. package/dist/src/storage/providers/mongodb/index.d.ts +15 -1
  130. package/dist/src/storage/providers/mongodb/index.d.ts.map +1 -1
  131. package/dist/src/storage/providers/mongodb/index.js +106 -0
  132. package/dist/src/storage/providers/mongodb/index.js.map +1 -1
  133. package/dist/src/storage/providers/sqlite/index.d.ts +9 -1
  134. package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
  135. package/dist/src/storage/providers/sqlite/index.js +97 -4
  136. package/dist/src/storage/providers/sqlite/index.js.map +1 -1
  137. package/dist/src/storage/providers/sqlite/repos/identity.d.ts +1 -0
  138. package/dist/src/storage/providers/sqlite/repos/identity.d.ts.map +1 -1
  139. package/dist/src/storage/providers/sqlite/repos/identity.js +10 -4
  140. package/dist/src/storage/providers/sqlite/repos/identity.js.map +1 -1
  141. package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
  142. package/dist/src/storage/providers/sqlite/schema.js +21 -0
  143. package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
  144. package/dist/src/storage/repositories/app-grant.repository.d.ts +22 -0
  145. package/dist/src/storage/repositories/app-grant.repository.d.ts.map +1 -0
  146. package/dist/src/storage/repositories/app-grant.repository.js +2 -0
  147. package/dist/src/storage/repositories/app-grant.repository.js.map +1 -0
  148. package/dist/src/storage/repositories/identity.repository.d.ts +1 -0
  149. package/dist/src/storage/repositories/identity.repository.d.ts.map +1 -1
  150. package/dist/src/storage/repositories/index.d.ts +1 -0
  151. package/dist/src/storage/repositories/index.d.ts.map +1 -1
  152. package/dist/src/utils/env-config.d.ts +5 -2
  153. package/dist/src/utils/env-config.d.ts.map +1 -1
  154. package/dist/src/utils/env-config.js +45 -2
  155. package/dist/src/utils/env-config.js.map +1 -1
  156. package/dist/src/utils/env-validator.d.ts +6 -3
  157. package/dist/src/utils/env-validator.d.ts.map +1 -1
  158. package/dist/src/utils/env-validator.js +14 -3
  159. package/dist/src/utils/env-validator.js.map +1 -1
  160. package/dist/src/utils/url-validator.d.ts +15 -0
  161. package/dist/src/utils/url-validator.d.ts.map +1 -1
  162. package/dist/src/utils/url-validator.js +120 -30
  163. package/dist/src/utils/url-validator.js.map +1 -1
  164. package/dist/static/app-catalog.html +81 -24
  165. package/package.json +3 -1
  166. package/prisma/schema.postgres.prisma +20 -0
  167. package/prisma/schema.prisma +20 -0
@@ -617,6 +617,137 @@ export interface paths {
617
617
  patch?: never;
618
618
  trace?: never;
619
619
  };
620
+ "/v1/app-grants/authorize": {
621
+ parameters: {
622
+ query?: never;
623
+ header?: never;
624
+ path?: never;
625
+ cookie?: never;
626
+ };
627
+ /**
628
+ * Start an app-grant authorization (OAuth-like, PKCE)
629
+ * @description Entry point of the H-2 app-grant flow. A user-published app (running on the isolated
630
+ * app origin `*.apps.<apex>`) sends the owner's browser here to request scoped access to
631
+ * the owner's data. On valid params the node stores a short-lived pending request and
632
+ * **302-redirects** to the trusted apex consent page (`/v1/app-grant?req=...`) where the
633
+ * owner approves. `code_challenge_method` must be `S256`; `redirect_uri` must be on the
634
+ * app origin (never the apex); `scope` must be drawn from the grantable scope set.
635
+ */
636
+ get: operations["appGrantAuthorize"];
637
+ put?: never;
638
+ post?: never;
639
+ delete?: never;
640
+ options?: never;
641
+ head?: never;
642
+ patch?: never;
643
+ trace?: never;
644
+ };
645
+ "/v1/app-grants/request/{requestId}": {
646
+ parameters: {
647
+ query?: never;
648
+ header?: never;
649
+ path?: never;
650
+ cookie?: never;
651
+ };
652
+ /**
653
+ * Read a pending app-grant request (for the consent page)
654
+ * @description Returns the requesting app and the exact scopes (with descriptions) for the consent UI to render. Unguessable id; no auth.
655
+ */
656
+ get: operations["appGrantRequest"];
657
+ put?: never;
658
+ post?: never;
659
+ delete?: never;
660
+ options?: never;
661
+ head?: never;
662
+ patch?: never;
663
+ trace?: never;
664
+ };
665
+ "/v1/app-grants/authorize-consent": {
666
+ parameters: {
667
+ query?: never;
668
+ header?: never;
669
+ path?: never;
670
+ cookie?: never;
671
+ };
672
+ get?: never;
673
+ put?: never;
674
+ /**
675
+ * Approve an app-grant request (owner)
676
+ * @description The owner, authenticated on the apex SPA, approves a pending request. The node mints a
677
+ * single-use authorization code and returns the app's `redirect_url` (carrying the code +
678
+ * state) for the browser to navigate back to the app.
679
+ */
680
+ post: operations["appGrantConsent"];
681
+ delete?: never;
682
+ options?: never;
683
+ head?: never;
684
+ patch?: never;
685
+ trace?: never;
686
+ };
687
+ "/v1/app-grants/token": {
688
+ parameters: {
689
+ query?: never;
690
+ header?: never;
691
+ path?: never;
692
+ cookie?: never;
693
+ };
694
+ get?: never;
695
+ put?: never;
696
+ /**
697
+ * Exchange an app-grant code or refresh token for a scoped app token
698
+ * @description Called by the app from its own origin (CORS `*`). With `grant_type=authorization_code`
699
+ * (+ PKCE `code_verifier`) the node creates the persistent grant and returns a short-lived
700
+ * **scoped** access JWT (role `app`, the granted scopes, an `app_grant` claim) + a rotating
701
+ * refresh token — never the owner's session. With `grant_type=refresh_token` it rotates the
702
+ * refresh token and re-mints the access JWT. A revoked grant yields `401`.
703
+ */
704
+ post: operations["appGrantToken"];
705
+ delete?: never;
706
+ options?: never;
707
+ head?: never;
708
+ patch?: never;
709
+ trace?: never;
710
+ };
711
+ "/v1/app-grants": {
712
+ parameters: {
713
+ query?: never;
714
+ header?: never;
715
+ path?: never;
716
+ cookie?: never;
717
+ };
718
+ /**
719
+ * List the apps the owner has granted access to
720
+ * @description Returns active (non-revoked) app grants with their scopes, origin, and last-used time.
721
+ */
722
+ get: operations["listAppGrants"];
723
+ put?: never;
724
+ post?: never;
725
+ delete?: never;
726
+ options?: never;
727
+ head?: never;
728
+ patch?: never;
729
+ trace?: never;
730
+ };
731
+ "/v1/app-grants/{grantId}": {
732
+ parameters: {
733
+ query?: never;
734
+ header?: never;
735
+ path?: never;
736
+ cookie?: never;
737
+ };
738
+ get?: never;
739
+ put?: never;
740
+ post?: never;
741
+ /**
742
+ * Revoke an app's grant
743
+ * @description Marks the grant revoked and drops its refresh token — the app can no longer refresh (its short access token expires shortly after).
744
+ */
745
+ delete: operations["revokeAppGrant"];
746
+ options?: never;
747
+ head?: never;
748
+ patch?: never;
749
+ trace?: never;
750
+ };
620
751
  "/v1/auth/token/exchange": {
621
752
  parameters: {
622
753
  query?: never;
@@ -3797,6 +3928,62 @@ export interface paths {
3797
3928
  patch: operations["updateSubdomainSite"];
3798
3929
  trace?: never;
3799
3930
  };
3931
+ "/v1/apps/{owner}/{filename}": {
3932
+ parameters: {
3933
+ query?: never;
3934
+ header?: never;
3935
+ path?: never;
3936
+ cookie?: never;
3937
+ };
3938
+ /**
3939
+ * Download or render a published app
3940
+ * @description Returns the app's HTML. Default (no `mode`) responds with `Content-Disposition: attachment`
3941
+ * (programmatic download — never executed as a page). `mode=inline` returns runnable HTML.
3942
+ *
3943
+ * **H-2 app origin:** when the app origin is provisioned (`AIMEAT_APP_ORIGIN_ENABLED`), an
3944
+ * `mode=inline` request arriving on the **apex** origin is **301-redirected** to the isolated
3945
+ * app origin (`https://<sub>.apps.<apex>/` or `https://apps.<apex>/<owner>/<file>`), so runnable
3946
+ * app HTML is never served same-origin as the authenticated SPA. Access-code/paid apps and the
3947
+ * raw download form are unaffected.
3948
+ */
3949
+ get: operations["getAppFile"];
3950
+ put?: never;
3951
+ post?: never;
3952
+ delete?: never;
3953
+ options?: never;
3954
+ head?: never;
3955
+ patch?: never;
3956
+ trace?: never;
3957
+ };
3958
+ "/v1/apps/{owner}/{filename}/screenshot": {
3959
+ parameters: {
3960
+ query?: never;
3961
+ header?: never;
3962
+ path: {
3963
+ /** @description Owner name (bare handle; a legacy owner@node segment is tolerated). */
3964
+ owner: string;
3965
+ /** @description App filename. */
3966
+ filename: string;
3967
+ };
3968
+ cookie?: never;
3969
+ };
3970
+ /**
3971
+ * Serve an app's screenshot image
3972
+ * @description Returns the stored screenshot for the app, or 404 if none. No auth.
3973
+ */
3974
+ get: operations["getAppScreenshot"];
3975
+ put?: never;
3976
+ /**
3977
+ * Set or replace an app's screenshot without re-publishing
3978
+ * @description Stores a base64-encoded image as the app's screenshot. The app's owner may set their own; a node operator may set any app's, so the screenshot worker can backfill defaults for apps that have none. Idempotent (overwrites any existing screenshot). Max 2 MB.
3979
+ */
3980
+ post: operations["setAppScreenshot"];
3981
+ delete?: never;
3982
+ options?: never;
3983
+ head?: never;
3984
+ patch?: never;
3985
+ trace?: never;
3986
+ };
3800
3987
  "/v1/apps/backup": {
3801
3988
  parameters: {
3802
3989
  query?: never;
@@ -4514,6 +4701,53 @@ export interface paths {
4514
4701
  patch?: never;
4515
4702
  trace?: never;
4516
4703
  };
4704
+ "/v1/ghii/login/google": {
4705
+ parameters: {
4706
+ query?: never;
4707
+ header?: never;
4708
+ path?: never;
4709
+ cookie?: never;
4710
+ };
4711
+ /**
4712
+ * Begin Google sign-in (social login)
4713
+ * @description Starts the Google OIDC sign-in flow and redirects the browser to Google's
4714
+ * consent screen. Available only when the node has Google sign-in configured
4715
+ * (`AIMEAT_GOOGLE_OAUTH_ENABLED=true` + client credentials); otherwise returns 503.
4716
+ * This is a browser-navigation endpoint, not an API call.
4717
+ */
4718
+ get: operations["ghiiLoginGoogleStart"];
4719
+ put?: never;
4720
+ post?: never;
4721
+ delete?: never;
4722
+ options?: never;
4723
+ head?: never;
4724
+ patch?: never;
4725
+ trace?: never;
4726
+ };
4727
+ "/v1/ghii/login/google/callback": {
4728
+ parameters: {
4729
+ query?: never;
4730
+ header?: never;
4731
+ path?: never;
4732
+ cookie?: never;
4733
+ };
4734
+ /**
4735
+ * Google sign-in OIDC redirect callback
4736
+ * @description Google redirects the browser here with `code` and `state` after consent. The node
4737
+ * exchanges the code, maps the Google identity to a GHII (linking to an existing account
4738
+ * when Google's verified email matches a locally-verified account, otherwise creating a
4739
+ * new account), establishes an owner session (httpOnly refresh cookie + access token),
4740
+ * and redirects back to the SPA. On any failure it redirects to `/?auth_error=<CODE>`.
4741
+ */
4742
+ get: operations["ghiiLoginGoogleCallback"];
4743
+ put?: never;
4744
+ post?: never;
4745
+ delete?: never;
4746
+ options?: never;
4747
+ head?: never;
4748
+ patch?: never;
4749
+ trace?: never;
4750
+ };
4517
4751
  "/v1/catalogue/directory": {
4518
4752
  parameters: {
4519
4753
  query?: never;
@@ -14118,6 +14352,123 @@ export interface operations {
14118
14352
  404: components["responses"]["NotFound"];
14119
14353
  };
14120
14354
  };
14355
+ appGrantAuthorize: {
14356
+ parameters: {
14357
+ query: {
14358
+ /** @description "owner/filename" */
14359
+ app: string;
14360
+ response_type: "code";
14361
+ redirect_uri: string;
14362
+ /** @description Space/comma-separated grantable scopes */
14363
+ scope: string;
14364
+ state?: string;
14365
+ code_challenge: string;
14366
+ code_challenge_method: "S256";
14367
+ };
14368
+ header?: never;
14369
+ path?: never;
14370
+ cookie?: never;
14371
+ };
14372
+ requestBody?: never;
14373
+ responses: {
14374
+ /** @description Redirect to the apex consent page */
14375
+ 302: {
14376
+ headers: {
14377
+ [name: string]: unknown;
14378
+ };
14379
+ content?: never;
14380
+ };
14381
+ 400: components["responses"]["BadRequest"];
14382
+ 404: components["responses"]["NotFound"];
14383
+ };
14384
+ };
14385
+ appGrantRequest: {
14386
+ parameters: {
14387
+ query?: never;
14388
+ header?: never;
14389
+ path: {
14390
+ requestId: string;
14391
+ };
14392
+ cookie?: never;
14393
+ };
14394
+ requestBody?: never;
14395
+ responses: {
14396
+ 200: components["responses"]["AimeatSuccess"];
14397
+ 404: components["responses"]["NotFound"];
14398
+ };
14399
+ };
14400
+ appGrantConsent: {
14401
+ parameters: {
14402
+ query?: never;
14403
+ header?: never;
14404
+ path?: never;
14405
+ cookie?: never;
14406
+ };
14407
+ requestBody: {
14408
+ content: {
14409
+ "application/json": {
14410
+ request_id: string;
14411
+ };
14412
+ };
14413
+ };
14414
+ responses: {
14415
+ 200: components["responses"]["AimeatSuccess"];
14416
+ 401: components["responses"]["Unauthorized"];
14417
+ 404: components["responses"]["NotFound"];
14418
+ };
14419
+ };
14420
+ appGrantToken: {
14421
+ parameters: {
14422
+ query?: never;
14423
+ header?: never;
14424
+ path?: never;
14425
+ cookie?: never;
14426
+ };
14427
+ requestBody: {
14428
+ content: {
14429
+ "application/json": {
14430
+ /** @enum {string} */
14431
+ grant_type: "authorization_code" | "refresh_token";
14432
+ code?: string;
14433
+ code_verifier?: string;
14434
+ redirect_uri?: string;
14435
+ refresh_token?: string;
14436
+ };
14437
+ };
14438
+ };
14439
+ responses: {
14440
+ 200: components["responses"]["AimeatSuccess"];
14441
+ 400: components["responses"]["BadRequest"];
14442
+ 401: components["responses"]["Unauthorized"];
14443
+ };
14444
+ };
14445
+ listAppGrants: {
14446
+ parameters: {
14447
+ query?: never;
14448
+ header?: never;
14449
+ path?: never;
14450
+ cookie?: never;
14451
+ };
14452
+ requestBody?: never;
14453
+ responses: {
14454
+ 200: components["responses"]["AimeatSuccess"];
14455
+ };
14456
+ };
14457
+ revokeAppGrant: {
14458
+ parameters: {
14459
+ query?: never;
14460
+ header?: never;
14461
+ path: {
14462
+ grantId: string;
14463
+ };
14464
+ cookie?: never;
14465
+ };
14466
+ requestBody?: never;
14467
+ responses: {
14468
+ 200: components["responses"]["AimeatSuccess"];
14469
+ 404: components["responses"]["NotFound"];
14470
+ };
14471
+ };
14121
14472
  exchangeAccessToken: {
14122
14473
  parameters: {
14123
14474
  query?: never;
@@ -19150,6 +19501,113 @@ export interface operations {
19150
19501
  404: components["responses"]["NotFound"];
19151
19502
  };
19152
19503
  };
19504
+ getAppFile: {
19505
+ parameters: {
19506
+ query?: {
19507
+ mode?: "inline";
19508
+ version?: number;
19509
+ /** @description Access code for protected apps */
19510
+ code?: string;
19511
+ };
19512
+ header?: never;
19513
+ path: {
19514
+ owner: string;
19515
+ filename: string;
19516
+ };
19517
+ cookie?: never;
19518
+ };
19519
+ requestBody?: never;
19520
+ responses: {
19521
+ /** @description App HTML (inline or attachment) */
19522
+ 200: {
19523
+ headers: {
19524
+ [name: string]: unknown;
19525
+ };
19526
+ content?: never;
19527
+ };
19528
+ /** @description Redirect to the isolated app origin (H-2 */
19529
+ 301: {
19530
+ headers: {
19531
+ [name: string]: unknown;
19532
+ };
19533
+ content?: never;
19534
+ };
19535
+ 403: components["responses"]["Forbidden"];
19536
+ 404: components["responses"]["NotFound"];
19537
+ };
19538
+ };
19539
+ getAppScreenshot: {
19540
+ parameters: {
19541
+ query?: never;
19542
+ header?: never;
19543
+ path: {
19544
+ /** @description Owner name (bare handle; a legacy owner@node segment is tolerated). */
19545
+ owner: string;
19546
+ /** @description App filename. */
19547
+ filename: string;
19548
+ };
19549
+ cookie?: never;
19550
+ };
19551
+ requestBody?: never;
19552
+ responses: {
19553
+ /** @description Screenshot image bytes */
19554
+ 200: {
19555
+ headers: {
19556
+ [name: string]: unknown;
19557
+ };
19558
+ content: {
19559
+ "image/png": string;
19560
+ };
19561
+ };
19562
+ 400: components["responses"]["BadRequest"];
19563
+ 404: components["responses"]["NotFound"];
19564
+ };
19565
+ };
19566
+ setAppScreenshot: {
19567
+ parameters: {
19568
+ query?: never;
19569
+ header?: never;
19570
+ path: {
19571
+ /** @description Owner name (bare handle; a legacy owner@node segment is tolerated). */
19572
+ owner: string;
19573
+ /** @description App filename. */
19574
+ filename: string;
19575
+ };
19576
+ cookie?: never;
19577
+ };
19578
+ requestBody: {
19579
+ content: {
19580
+ "application/json": {
19581
+ /** @description Base64-encoded image data (PNG or JPEG). */
19582
+ screenshot: string;
19583
+ /** @default image/png */
19584
+ screenshot_mime_type?: string;
19585
+ };
19586
+ };
19587
+ };
19588
+ responses: {
19589
+ /** @description Screenshot stored */
19590
+ 200: {
19591
+ headers: {
19592
+ [name: string]: unknown;
19593
+ };
19594
+ content: {
19595
+ "application/json": Record<string, never>;
19596
+ };
19597
+ };
19598
+ 400: components["responses"]["BadRequest"];
19599
+ 401: components["responses"]["Unauthorized"];
19600
+ 403: components["responses"]["Forbidden"];
19601
+ 404: components["responses"]["NotFound"];
19602
+ /** @description Screenshot exceeds the 2 MB limit */
19603
+ 413: {
19604
+ headers: {
19605
+ [name: string]: unknown;
19606
+ };
19607
+ content?: never;
19608
+ };
19609
+ };
19610
+ };
19153
19611
  exportAppsBackup: {
19154
19612
  parameters: {
19155
19613
  query?: never;
@@ -20555,6 +21013,77 @@ export interface operations {
20555
21013
  429: components["responses"]["RateLimited"];
20556
21014
  };
20557
21015
  };
21016
+ ghiiLoginGoogleStart: {
21017
+ parameters: {
21018
+ query?: {
21019
+ /**
21020
+ * @description Same-site absolute path to return to after a successful login (must start
21021
+ * with `/`). Defaults to `/`. Other values are ignored for safety.
21022
+ */
21023
+ redirect?: string;
21024
+ };
21025
+ header?: never;
21026
+ path?: never;
21027
+ cookie?: never;
21028
+ };
21029
+ requestBody?: never;
21030
+ responses: {
21031
+ /** @description Redirect to the Google authorization endpoint */
21032
+ 302: {
21033
+ headers: {
21034
+ [name: string]: unknown;
21035
+ };
21036
+ content?: never;
21037
+ };
21038
+ /** @description Google sign-in is not available on this node */
21039
+ 503: {
21040
+ headers: {
21041
+ [name: string]: unknown;
21042
+ };
21043
+ content: {
21044
+ "application/json": components["schemas"]["AimeatEnvelope"] & {
21045
+ error?: {
21046
+ /** @example FEATURE_DISABLED */
21047
+ code?: unknown;
21048
+ };
21049
+ };
21050
+ };
21051
+ };
21052
+ };
21053
+ };
21054
+ ghiiLoginGoogleCallback: {
21055
+ parameters: {
21056
+ query: {
21057
+ /** @description Authorization code from Google */
21058
+ code: string;
21059
+ /** @description Opaque state value issued at the start of the flow */
21060
+ state: string;
21061
+ };
21062
+ header?: never;
21063
+ path?: never;
21064
+ cookie?: never;
21065
+ };
21066
+ requestBody?: never;
21067
+ responses: {
21068
+ /**
21069
+ * @description Redirect back to the SPA on success (refresh cookie set), or to
21070
+ * `/?auth_error=<CODE>` on failure.
21071
+ */
21072
+ 302: {
21073
+ headers: {
21074
+ [name: string]: unknown;
21075
+ };
21076
+ content?: never;
21077
+ };
21078
+ /** @description Google sign-in is not available on this node */
21079
+ 503: {
21080
+ headers: {
21081
+ [name: string]: unknown;
21082
+ };
21083
+ content?: never;
21084
+ };
21085
+ };
21086
+ };
20558
21087
  searchDirectory: {
20559
21088
  parameters: {
20560
21089
  query?: {