axhub-sdk 0.5.0 → 0.7.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '053963821b948473882e41080e081b709c301d2e46936f241e2943c11efda494'
4
- data.tar.gz: ae6eadcc57dc330271655820bb2112dd90bcd332a726cec8831bd9d3b05c5ba2
3
+ metadata.gz: af207a4a3d83fa1b8f8fb7f66baa8a6f880877f0971ad6228ab65a9daede4e5e
4
+ data.tar.gz: 478545d4c9b51589fd403141e578f38e2f1189b0dfce8361a4963daae52eea0b
5
5
  SHA512:
6
- metadata.gz: d1969fb1cd767f65117ab6cc35b76614ccf316d151a9366306ba7ca35f92f4afd7282a2712e3dc816ca0ea6b18c5585c7fcb88ca96e2aa68ca5b6bfab4f62c9c
7
- data.tar.gz: a7f088cf9979edbb888661dda47ecb0fe85ccd04189cacf80179ea8a54f1eda083bd58c3fbe662339224a6a3acf75c1cd698e01fd2ea372db50b0db6e35ec4ac
6
+ metadata.gz: f503acb2c6d7b6daae9bac7d9311be9e5fa9e0e5cb51f089a2309be1c01cfa17803c52824d96b039158439c6c9d5c17d3b89789992804797c8599d3ebcb10b38
7
+ data.tar.gz: 39cf39bda82f472d156b6c10a575b3e6c88881b9610e349eb61000949b55c23e9a311b9f564931d35ba3260d2016c984bed9039c5cc8fc7975789d27c277fd79
data/README.md CHANGED
@@ -25,7 +25,7 @@ export AXHUB_TENANT_SLUG="test"
25
25
 
26
26
  PAT mode is explicit: `token_type: :pat` sends `X-Api-Key`. JWT mode is `token_type: :jwt` and sends `Authorization: Bearer`.
27
27
 
28
- ## Agent quickstart: create a disposable app and table
28
+ ## Agent quickstart: create a disposable app and enable its database
29
29
 
30
30
  ```ruby
31
31
  require 'axhub_sdk'
@@ -44,7 +44,6 @@ raise 'authGetApiV1Me did not return a user id' if user_id.nil? || user_id.empty
44
44
 
45
45
  suffix = (Time.now.to_f * 1000).to_i.to_s[-8, 8]
46
46
  slug = "agent-rb-#{suffix}"
47
- table = "items#{suffix[-6, 6]}"
48
47
 
49
48
  app = client.apps.create(
50
49
  slug: slug,
@@ -57,33 +56,22 @@ app = client.apps.create(
57
56
  )
58
57
  app_id = app['id']
59
58
 
60
- client.request(
61
- 'schemaPostApiV1AppsByAppIDTables',
62
- path_params: { appID: app_id },
63
- body: {
64
- table_name: table,
65
- owner_column: 'owner_id',
66
- columns: [
67
- { name: 'owner_id', type: 'uuid', nullable: false },
68
- { name: 'title', type: 'text', nullable: false },
69
- { name: 'status', type: 'text', nullable: false }
70
- ]
71
- }
72
- )
59
+ # Enable raw DB mode: a dedicated Postgres role is issued and DATABASE_URL is
60
+ # injected into the app on its next deploy. The app then does row CRUD over
61
+ # direct SQL with its own pg driver.
62
+ client.request('appsPostApiV1AppsByAppIDRawDb', path_params: { appID: app_id }, body: {})
73
63
 
74
- row = client.request(
75
- 'schemaPostDataByTenantSlugByAppSlugByTable',
76
- path_params: { tenantSlug: 'test', appSlug: slug, table: table },
77
- body: { owner_id: user_id, title: 'hello', status: 'new' }
78
- )
79
- puts "created #{app_id} #{table} #{row['id']}"
64
+ # Admin introspection/browse of the physical DB.
65
+ tables = client.request('schemaGetApiV1AppsByAppIDDbTables', path_params: { appID: app_id })
66
+
67
+ puts "created #{app_id} #{tables}"
80
68
  ```
81
69
 
82
70
  ## How to call the full API surface
83
71
 
84
72
  - High-level app create: `client.apps.create(**body)` uses `default_tenant_id`.
85
73
  - Any route by operation id: `client.request(operation_id, path_params: {}, query: {}, body: nil)`.
86
- - Generated facade: `client.data.schema_post_data_by_tenant_slug_by_app_slug_by_table(path_params: {}, body: {...})`.
74
+ - Generated facade: `client.data.schema_get_api_v1_apps_by_app_id_db_tables(path_params: {})`.
87
75
  - Route inventory: `AxHub::ROUTES`, `AxHub::CONTEXT_ROUTES`, `AxHub::ERROR_CODES`, and `AxHub::OPERATION_METHODS`.
88
76
  - Errors: catch `AxHub::Error` and branch on `code`, `category`, `status`, and `retryable`.
89
77
 
@@ -95,28 +83,15 @@ Use the high-level `apps.create` helper for the first app, then use generated op
95
83
  |------|--------------|----------------------|-------------------|
96
84
  | Create env var | `appsPostApiV1AppsByAppIDEnvVars` | `appID` | `env.list` includes `key` |
97
85
  | Delete env var | `appsDeleteApiV1AppsByAppIDEnvVarsByKey` | `appID`, `key` | `env.list` no longer includes `key` |
98
- | Create table | `schemaPostApiV1AppsByAppIDTables` | `appID` | response `tableName` equals requested name |
99
- | Inspect table | `schemaGetApiV1AppsByAppIDTablesByTableName` | `appID`, `tableName` | response `id` and `tableName` match |
100
- | Add column | `schemaPostApiV1AppsByAppIDTablesByTableNameColumns` | `appID`, `tableName` | inspect contains column name |
101
- | Drop column | `schemaDeleteApiV1AppsByAppIDTablesByTableNameColumnsByColumnName` | `appID`, `tableName`, `columnName` | inspect no longer contains column name |
102
- | Add table grant | `schemaPostApiV1AppsByAppIDTablesByTableNameGrants` | `appID`, `tableName` | response has grant `id` |
103
- | List grants | `schemaGetApiV1AppsByAppIDTablesByTableNameGrants` | `appID`, `tableName` | list contains grant `id` |
104
- | Revoke/delete grant | `schemaDeleteApiV1AppsByAppIDTablesByTableNameGrantsByGrantID` | `appID`, `tableName`, `grantID` | list still contains grant with `revokedAt` set |
105
- | Insert row | `schemaPostDataByTenantSlugByAppSlugByTable` | `tenantSlug`, `appSlug`, `table` | response has row `id` and submitted fields |
106
- | Get row | `schemaGetDataByTenantSlugByAppSlugByTableById` | `tenantSlug`, `appSlug`, `table`, `id` | response row `id` matches |
107
- | Update row | `schemaPatchDataByTenantSlugByAppSlugByTableById` | `tenantSlug`, `appSlug`, `table`, `id` | response contains patched fields |
108
- | List rows | `schemaGetDataByTenantSlugByAppSlugByTable` | `tenantSlug`, `appSlug`, `table` | `items` contains row `id` |
109
- | Count rows | `schemaGetDataByTenantSlugByAppSlugByTableCount` | `tenantSlug`, `appSlug`, `table` | `count` matches expected fixture count |
110
- | Browse admin rows | `schemaGetApiV1AppsByAppIDTablesByTableNameRows` | `appID`, `tableName` | response has `rows` and `columns` arrays |
111
- | Delete row | `schemaDeleteDataByTenantSlugByAppSlugByTableById` | `tenantSlug`, `appSlug`, `table`, `id` | follow-up get returns `404` or `410` |
112
- | Delete table | `schemaDeleteApiV1AppsByAppIDTablesByTableName` | `appID`, `tableName` | follow-up inspect returns `404` or `410` |
86
+ | Enable raw DB | `appsPostApiV1AppsByAppIDRawDb` | `appID` | dedicated Postgres role issued; `DATABASE_URL` injected on next deploy |
87
+ | Disable raw DB | `appsDeleteApiV1AppsByAppIDRawDb` | `appID` | raw DB mode turned off (data preserved) |
88
+ | List DB tables | `schemaGetApiV1AppsByAppIDDbTables` | `appID` | response lists physical `information_schema` tables |
89
+ | Browse DB rows | `schemaGetApiV1AppsByAppIDDbTablesByTableRows` | `appID`, `table` | response has `rows` array |
113
90
  | Delete app | `appsDeleteApiV1AppsByAppID`, then `appsDeleteApiV1AppsByAppIDPermanent` | `appID` | app is soft-deleted, then permanently deleted |
114
91
 
115
92
  Important semantics from live QA:
116
93
 
117
- - Row delete is hard enough for client assertions: a follow-up row get returns `404 not_found` or `410`.
118
- - Table delete is hard enough for client assertions: a follow-up table inspect returns `404 not_found` or `410`.
119
- - Table grant delete is a soft revoke: the grant can remain in `listGrants`, but the same grant id must have `revokedAt` set. Do not assert disappearance.
94
+ - App database access is raw: `appsPostApiV1AppsByAppIDRawDb` issues a dedicated Postgres role and injects `DATABASE_URL` on the next deploy (the connection string is never returned). The app does its own row CRUD via direct SQL; the SDK exposes admin introspection/browse only (`schemaGetApiV1AppsByAppIDDbTables` / `...DbTablesByTableRows`).
120
95
  - Deployment creation without a connected git/bootstrap source can return a precondition-style 4xx. That verifies SDK error handling, not a deploy bug.
121
96
 
122
97
 
@@ -126,7 +101,7 @@ The SDK behavior documented here reflects live production QA against the AX Hub
126
101
 
127
102
  - Tenant used for destructive QA: slug `test`, id `cc1e58f1-8e46-4ac7-96c1-190c4cdd5b70`.
128
103
  - Go, Java, Kotlin, Python, and Ruby each ran the generated all-operation sweep against 189 backend routes: SDK exceptions `0`, backend 5xx `0`.
129
- - Go, Java, Kotlin, Python, and Ruby each passed strict destructive DB QA: 22 live steps, 17 assertions, 7 cleanup calls. The flow created an app, env var, table, column, table grant, row, then updated, listed, counted, browsed, deleted, and re-read to prove deletion semantics.
104
+ - Go, Java, Kotlin, Python, and Ruby each passed strict destructive DB QA: the flow exercised the raw-DB enable/reset lifecycle (instead of the removed dynamic-table flow), then deleted the app and re-read to prove deletion semantics.
130
105
  - Node ran the full production mutation suite and a real app bootstrap/deploy wait. Deployment id `d3a48ce3-0f9c-4bab-aa07-863c31c44460` finished `succeeded`, then the app was deleted permanently.
131
106
 
132
107
  Do not print tokens. Use short-lived PATs for agent QA and revoke them after the run.
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AxHub
4
- VERSION = '0.5.0'
4
+ VERSION = '0.7.0'
5
5
  end
data/lib/axhub_sdk.rb CHANGED
@@ -30,20 +30,26 @@ module AxHub
30
30
  { 'method' => "DELETE", 'path' => "/api/v1/apps/{appID}/access", 'tag' => "Apps", 'operationId' => "appsDeleteApiV1AppsByAppIDAccess" },
31
31
  { 'method' => "POST", 'path' => "/api/v1/apps/{appID}/access", 'tag' => "Apps", 'operationId' => "appsPostApiV1AppsByAppIDAccess" },
32
32
  { 'method' => "GET", 'path' => "/api/v1/apps/{appID}/access/me", 'tag' => "Apps", 'operationId' => "appsGetApiV1AppsByAppIDAccessMe" },
33
+ { 'method' => "POST", 'path' => "/api/v1/apps/{appID}/archive", 'tag' => "Apps", 'operationId' => "appsPostApiV1AppsByAppIDArchive" },
33
34
  { 'method' => "GET", 'path' => "/api/v1/apps/{appID}/comments", 'tag' => "Apps", 'operationId' => "appsGetApiV1AppsByAppIDComments" },
34
35
  { 'method' => "POST", 'path' => "/api/v1/apps/{appID}/comments", 'tag' => "Apps", 'operationId' => "appsPostApiV1AppsByAppIDComments" },
36
+ { 'method' => "GET", 'path' => "/api/v1/apps/{appID}/db/tables", 'tag' => "Schema", 'operationId' => "schemaGetApiV1AppsByAppIDDbTables" },
37
+ { 'method' => "GET", 'path' => "/api/v1/apps/{appID}/db/tables/{table}/rows", 'tag' => "Schema", 'operationId' => "schemaGetApiV1AppsByAppIDDbTablesByTableRows" },
35
38
  { 'method' => "GET", 'path' => "/api/v1/apps/{appID}/deployments", 'tag' => "Deploy", 'operationId' => "deployGetApiV1AppsByAppIDDeployments" },
36
39
  { 'method' => "POST", 'path' => "/api/v1/apps/{appID}/deployments", 'tag' => "Deploy", 'operationId' => "deployPostApiV1AppsByAppIDDeployments" },
37
40
  { 'method' => "GET", 'path' => "/api/v1/apps/{appID}/deployments/{did}", 'tag' => "Deploy", 'operationId' => "deployGetApiV1AppsByAppIDDeploymentsByDid" },
38
41
  { 'method' => "POST", 'path' => "/api/v1/apps/{appID}/deployments/{did}/cancel", 'tag' => "Deploy", 'operationId' => "deployPostApiV1AppsByAppIDDeploymentsByDidCancel" },
39
42
  { 'method' => "POST", 'path' => "/api/v1/apps/{appID}/deployments/{did}/rollback", 'tag' => "Deploy", 'operationId' => "deployPostApiV1AppsByAppIDDeploymentsByDidRollback" },
43
+ { 'method' => "GET", 'path' => "/api/v1/apps/{appID}/diagnosis", 'tag' => "Deploy", 'operationId' => "deployGetApiV1AppsByAppIDDiagnosis" },
40
44
  { 'method' => "GET", 'path' => "/api/v1/apps/{appID}/env-vars", 'tag' => "Apps", 'operationId' => "appsGetApiV1AppsByAppIDEnvVars" },
41
45
  { 'method' => "POST", 'path' => "/api/v1/apps/{appID}/env-vars", 'tag' => "Apps", 'operationId' => "appsPostApiV1AppsByAppIDEnvVars" },
42
46
  { 'method' => "DELETE", 'path' => "/api/v1/apps/{appID}/env-vars/{key}", 'tag' => "Apps", 'operationId' => "appsDeleteApiV1AppsByAppIDEnvVarsByKey" },
47
+ { 'method' => "PUT", 'path' => "/api/v1/apps/{appID}/env-vars/{key}/staging-value", 'tag' => "Apps", 'operationId' => "appsPutApiV1AppsByAppIDEnvVarsByKeyStagingValue" },
43
48
  { 'method' => "DELETE", 'path' => "/api/v1/apps/{appID}/git-connection", 'tag' => "Deploy", 'operationId' => "deployDeleteApiV1AppsByAppIDGitConnection" },
44
49
  { 'method' => "GET", 'path' => "/api/v1/apps/{appID}/git-connection", 'tag' => "Deploy", 'operationId' => "deployGetApiV1AppsByAppIDGitConnection" },
45
50
  { 'method' => "PATCH", 'path' => "/api/v1/apps/{appID}/git-connection", 'tag' => "Deploy", 'operationId' => "deployPatchApiV1AppsByAppIDGitConnection" },
46
51
  { 'method' => "POST", 'path' => "/api/v1/apps/{appID}/git-connection", 'tag' => "Deploy", 'operationId' => "deployPostApiV1AppsByAppIDGitConnection" },
52
+ { 'method' => "POST", 'path' => "/api/v1/apps/{appID}/git/github/connect", 'tag' => "Deploy", 'operationId' => "deployPostApiV1AppsByAppIDGitGithubConnect" },
47
53
  { 'method' => "GET", 'path' => "/api/v1/apps/{appID}/git/github/install/start", 'tag' => "Deploy", 'operationId' => "deployGetApiV1AppsByAppIDGitGithubInstallStart" },
48
54
  { 'method' => "POST", 'path' => "/api/v1/apps/{appID}/icon-dark/upload-url", 'tag' => "Apps", 'operationId' => "appsPostApiV1AppsByAppIDIconDarkUploadUrl" },
49
55
  { 'method' => "POST", 'path' => "/api/v1/apps/{appID}/icon/upload-url", 'tag' => "Apps", 'operationId' => "appsPostApiV1AppsByAppIDIconUploadUrl" },
@@ -56,25 +62,22 @@ module AxHub
56
62
  { 'method' => "GET", 'path' => "/api/v1/apps/{appID}/members", 'tag' => "Apps", 'operationId' => "appsGetApiV1AppsByAppIDMembers" },
57
63
  { 'method' => "POST", 'path' => "/api/v1/apps/{appID}/oauth-clients", 'tag' => "Auth", 'operationId' => "authPostApiV1AppsByAppIDOauthClients" },
58
64
  { 'method' => "DELETE", 'path' => "/api/v1/apps/{appID}/permanent", 'tag' => "Apps", 'operationId' => "appsDeleteApiV1AppsByAppIDPermanent" },
65
+ { 'method' => "POST", 'path' => "/api/v1/apps/{appID}/promotions/{requestID}/retry", 'tag' => "Deploy", 'operationId' => "deployPostApiV1AppsByAppIDPromotionsByRequestIDRetry" },
66
+ { 'method' => "DELETE", 'path' => "/api/v1/apps/{appID}/raw-db", 'tag' => "Apps", 'operationId' => "appsDeleteApiV1AppsByAppIDRawDb" },
67
+ { 'method' => "POST", 'path' => "/api/v1/apps/{appID}/raw-db", 'tag' => "Apps", 'operationId' => "appsPostApiV1AppsByAppIDRawDb" },
68
+ { 'method' => "POST", 'path' => "/api/v1/apps/{appID}/reactivate", 'tag' => "Apps", 'operationId' => "appsPostApiV1AppsByAppIDReactivate" },
69
+ { 'method' => "GET", 'path' => "/api/v1/apps/{appID}/releases", 'tag' => "Deploy", 'operationId' => "deployGetApiV1AppsByAppIDReleases" },
70
+ { 'method' => "GET", 'path' => "/api/v1/apps/{appID}/releases/promote-preflight", 'tag' => "Deploy", 'operationId' => "deployGetApiV1AppsByAppIDReleasesPromotePreflight" },
59
71
  { 'method' => "POST", 'path' => "/api/v1/apps/{appID}/resume", 'tag' => "Apps", 'operationId' => "appsPostApiV1AppsByAppIDResume" },
60
72
  { 'method' => "GET", 'path' => "/api/v1/apps/{appID}/review-requests", 'tag' => "Apps", 'operationId' => "appsGetApiV1AppsByAppIDReviewRequests" },
61
73
  { 'method' => "POST", 'path' => "/api/v1/apps/{appID}/review-requests", 'tag' => "Apps", 'operationId' => "appsPostApiV1AppsByAppIDReviewRequests" },
74
+ { 'method' => "DELETE", 'path' => "/api/v1/apps/{appID}/staging", 'tag' => "Deploy", 'operationId' => "deployDeleteApiV1AppsByAppIDStaging" },
75
+ { 'method' => "PUT", 'path' => "/api/v1/apps/{appID}/staging", 'tag' => "Deploy", 'operationId' => "deployPutApiV1AppsByAppIDStaging" },
62
76
  { 'method' => "POST", 'path' => "/api/v1/apps/{appID}/suspend", 'tag' => "Apps", 'operationId' => "appsPostApiV1AppsByAppIDSuspend" },
63
- { 'method' => "GET", 'path' => "/api/v1/apps/{appID}/tables", 'tag' => "Schema", 'operationId' => "schemaGetApiV1AppsByAppIDTables" },
64
- { 'method' => "POST", 'path' => "/api/v1/apps/{appID}/tables", 'tag' => "Schema", 'operationId' => "schemaPostApiV1AppsByAppIDTables" },
65
- { 'method' => "DELETE", 'path' => "/api/v1/apps/{appID}/tables/{tableName}", 'tag' => "Schema", 'operationId' => "schemaDeleteApiV1AppsByAppIDTablesByTableName" },
66
- { 'method' => "GET", 'path' => "/api/v1/apps/{appID}/tables/{tableName}", 'tag' => "Schema", 'operationId' => "schemaGetApiV1AppsByAppIDTablesByTableName" },
67
- { 'method' => "POST", 'path' => "/api/v1/apps/{appID}/tables/{tableName}/columns", 'tag' => "Schema", 'operationId' => "schemaPostApiV1AppsByAppIDTablesByTableNameColumns" },
68
- { 'method' => "DELETE", 'path' => "/api/v1/apps/{appID}/tables/{tableName}/columns/{columnName}", 'tag' => "Schema", 'operationId' => "schemaDeleteApiV1AppsByAppIDTablesByTableNameColumnsByColumnName" },
69
- { 'method' => "GET", 'path' => "/api/v1/apps/{appID}/tables/{tableName}/grants", 'tag' => "Schema", 'operationId' => "schemaGetApiV1AppsByAppIDTablesByTableNameGrants" },
70
- { 'method' => "POST", 'path' => "/api/v1/apps/{appID}/tables/{tableName}/grants", 'tag' => "Schema", 'operationId' => "schemaPostApiV1AppsByAppIDTablesByTableNameGrants" },
71
- { 'method' => "DELETE", 'path' => "/api/v1/apps/{appID}/tables/{tableName}/grants/{grantID}", 'tag' => "Schema", 'operationId' => "schemaDeleteApiV1AppsByAppIDTablesByTableNameGrantsByGrantID" },
72
- { 'method' => "GET", 'path' => "/api/v1/apps/{appID}/tables/{tableName}/rows", 'tag' => "Schema", 'operationId' => "schemaGetApiV1AppsByAppIDTablesByTableNameRows" },
73
- { 'method' => "GET", 'path' => "/api/v1/apps/{appID}/tables/check-availability", 'tag' => "Schema", 'operationId' => "schemaGetApiV1AppsByAppIDTablesCheckAvailability" },
74
- { 'method' => "GET", 'path' => "/api/v1/apps/{appID}/tables/column-types", 'tag' => "Schema", 'operationId' => "schemaGetApiV1AppsByAppIDTablesColumnTypes" },
75
77
  { 'method' => "GET", 'path' => "/api/v1/apps/discover", 'tag' => "Apps", 'operationId' => "appsGetApiV1AppsDiscover" },
76
78
  { 'method' => "GET", 'path' => "/api/v1/apps/search", 'tag' => "Apps", 'operationId' => "appsGetApiV1AppsSearch" },
77
79
  { 'method' => "DELETE", 'path' => "/api/v1/comments/{commentID}", 'tag' => "Apps", 'operationId' => "appsDeleteApiV1CommentsByCommentID" },
80
+ { 'method' => "POST", 'path' => "/api/v1/git/github/complete", 'tag' => "Deploy", 'operationId' => "deployPostApiV1GitGithubComplete" },
78
81
  { 'method' => "GET", 'path' => "/api/v1/github/accounts", 'tag' => "deploy", 'operationId' => "deployGetApiV1GithubAccounts" },
79
82
  { 'method' => "GET", 'path' => "/api/v1/github/installations/{installationID}/repositories", 'tag' => "deploy", 'operationId' => "deployGetApiV1GithubInstallationsByInstallationIDRepositories" },
80
83
  { 'method' => "GET", 'path' => "/api/v1/invite-links/{token}", 'tag' => "Tenants", 'operationId' => "tenantsGetApiV1InviteLinksByToken" },
@@ -95,6 +98,7 @@ module AxHub
95
98
  { 'method' => "POST", 'path' => "/api/v1/review-requests/{rrID}/reject", 'tag' => "Apps", 'operationId' => "appsPostApiV1ReviewRequestsByRrIDReject" },
96
99
  { 'method' => "GET", 'path' => "/api/v1/review-requests/history", 'tag' => "Apps", 'operationId' => "appsGetApiV1ReviewRequestsHistory" },
97
100
  { 'method' => "GET", 'path' => "/api/v1/review-requests/pending", 'tag' => "Apps", 'operationId' => "appsGetApiV1ReviewRequestsPending" },
101
+ { 'method' => "GET", 'path' => "/api/v1/static-auth/start", 'tag' => "Apps", 'operationId' => "appsGetApiV1StaticAuthStart" },
98
102
  { 'method' => "GET", 'path' => "/api/v1/templates", 'tag' => "Apps", 'operationId' => "appsGetApiV1Templates" },
99
103
  { 'method' => "GET", 'path' => "/api/v1/tenants", 'tag' => "Tenants", 'operationId' => "tenantsGetApiV1Tenants" },
100
104
  { 'method' => "POST", 'path' => "/api/v1/tenants", 'tag' => "Tenants", 'operationId' => "tenantsPostApiV1Tenants" },
@@ -105,6 +109,21 @@ module AxHub
105
109
  { 'method' => "GET", 'path' => "/api/v1/tenants/{tenantID}/app-bootstraps/{bootstrapID}", 'tag' => "Deploy", 'operationId' => "deployGetApiV1TenantsByTenantIDAppBootstrapsByBootstrapID" },
106
110
  { 'method' => "GET", 'path' => "/api/v1/tenants/{tenantID}/apps", 'tag' => "Apps", 'operationId' => "appsGetApiV1TenantsByTenantIDApps" },
107
111
  { 'method' => "POST", 'path' => "/api/v1/tenants/{tenantID}/apps", 'tag' => "Apps", 'operationId' => "appsPostApiV1TenantsByTenantIDApps" },
112
+ { 'method' => "GET", 'path' => "/api/v1/tenants/{tenantID}/apps/{appID}/static/releases", 'tag' => "Apps", 'operationId' => "appsGetApiV1TenantsByTenantIDAppsByAppIDStaticReleases" },
113
+ { 'method' => "POST", 'path' => "/api/v1/tenants/{tenantID}/apps/{appID}/static/releases", 'tag' => "Apps", 'operationId' => "appsPostApiV1TenantsByTenantIDAppsByAppIDStaticReleases" },
114
+ { 'method' => "DELETE", 'path' => "/api/v1/tenants/{tenantID}/apps/{appID}/static/releases/{releaseID}", 'tag' => "Apps", 'operationId' => "appsDeleteApiV1TenantsByTenantIDAppsByAppIDStaticReleasesByReleaseID" },
115
+ { 'method' => "POST", 'path' => "/api/v1/tenants/{tenantID}/apps/{appID}/static/releases/{releaseID}/activate", 'tag' => "Apps", 'operationId' => "appsPostApiV1TenantsByTenantIDAppsByAppIDStaticReleasesByReleaseIDActivate" },
116
+ { 'method' => "POST", 'path' => "/api/v1/tenants/{tenantID}/apps/{appID}/static/releases/{releaseID}/finalize", 'tag' => "Apps", 'operationId' => "appsPostApiV1TenantsByTenantIDAppsByAppIDStaticReleasesByReleaseIDFinalize" },
117
+ { 'method' => "POST", 'path' => "/api/v1/tenants/{tenantID}/apps/{appID}/static/releases/{releaseID}/promote-approve", 'tag' => "Apps", 'operationId' => "appsPostApiV1TenantsByTenantIDAppsByAppIDStaticReleasesByReleaseIDPromoteApprove" },
118
+ { 'method' => "POST", 'path' => "/api/v1/tenants/{tenantID}/apps/{appID}/static/releases/{releaseID}/promote-reject", 'tag' => "Apps", 'operationId' => "appsPostApiV1TenantsByTenantIDAppsByAppIDStaticReleasesByReleaseIDPromoteReject" },
119
+ { 'method' => "POST", 'path' => "/api/v1/tenants/{tenantID}/apps/{appID}/static/releases/{releaseID}/promote-request", 'tag' => "Apps", 'operationId' => "appsPostApiV1TenantsByTenantIDAppsByAppIDStaticReleasesByReleaseIDPromoteRequest" },
120
+ { 'method' => "POST", 'path' => "/api/v1/tenants/{tenantID}/apps/{appID}/static/releases/{releaseID}/rollback", 'tag' => "Apps", 'operationId' => "appsPostApiV1TenantsByTenantIDAppsByAppIDStaticReleasesByReleaseIDRollback" },
121
+ { 'method' => "POST", 'path' => "/api/v1/tenants/{tenantID}/apps/{appID}/static/releases/{releaseID}/stage", 'tag' => "Apps", 'operationId' => "appsPostApiV1TenantsByTenantIDAppsByAppIDStaticReleasesByReleaseIDStage" },
122
+ { 'method' => "GET", 'path' => "/api/v1/tenants/{tenantID}/apps/{appID}/static/site", 'tag' => "Apps", 'operationId' => "appsGetApiV1TenantsByTenantIDAppsByAppIDStaticSite" },
123
+ { 'method' => "PATCH", 'path' => "/api/v1/tenants/{tenantID}/apps/{appID}/static/site", 'tag' => "Apps", 'operationId' => "appsPatchApiV1TenantsByTenantIDAppsByAppIDStaticSite" },
124
+ { 'method' => "POST", 'path' => "/api/v1/tenants/{tenantID}/apps/{appID}/static/site/staging/disable", 'tag' => "Apps", 'operationId' => "appsPostApiV1TenantsByTenantIDAppsByAppIDStaticSiteStagingDisable" },
125
+ { 'method' => "POST", 'path' => "/api/v1/tenants/{tenantID}/apps/{appID}/static/site/staging/enable", 'tag' => "Apps", 'operationId' => "appsPostApiV1TenantsByTenantIDAppsByAppIDStaticSiteStagingEnable" },
126
+ { 'method' => "POST", 'path' => "/api/v1/tenants/{tenantID}/apps/{appID}/static/site/unpublish", 'tag' => "Apps", 'operationId' => "appsPostApiV1TenantsByTenantIDAppsByAppIDStaticSiteUnpublish" },
108
127
  { 'method' => "GET", 'path' => "/api/v1/tenants/{tenantID}/apps/check-availability", 'tag' => "Apps", 'operationId' => "appsGetApiV1TenantsByTenantIDAppsCheckAvailability" },
109
128
  { 'method' => "POST", 'path' => "/api/v1/tenants/{tenantID}/apps/icon/upload-url", 'tag' => "Apps", 'operationId' => "appsPostApiV1TenantsByTenantIDAppsIconUploadUrl" },
110
129
  { 'method' => "GET", 'path' => "/api/v1/tenants/{tenantID}/audit-events", 'tag' => "Audit", 'operationId' => "auditGetApiV1TenantsByTenantIDAuditEvents" },
@@ -121,7 +140,11 @@ module AxHub
121
140
  { 'method' => "DELETE", 'path' => "/api/v1/tenants/{tenantID}/connectors/{connectorID}", 'tag' => "Gateway", 'operationId' => "gatewayDeleteApiV1TenantsByTenantIDConnectorsByConnectorID" },
122
141
  { 'method' => "GET", 'path' => "/api/v1/tenants/{tenantID}/connectors/{connectorID}", 'tag' => "Gateway", 'operationId' => "gatewayGetApiV1TenantsByTenantIDConnectorsByConnectorID" },
123
142
  { 'method' => "PATCH", 'path' => "/api/v1/tenants/{tenantID}/connectors/{connectorID}", 'tag' => "Gateway", 'operationId' => "gatewayPatchApiV1TenantsByTenantIDConnectorsByConnectorID" },
143
+ { 'method' => "POST", 'path' => "/api/v1/tenants/{tenantID}/connectors/{connectorID}/discover", 'tag' => "Gateway", 'operationId' => "gatewayPostApiV1TenantsByTenantIDConnectorsByConnectorIDDiscover" },
144
+ { 'method' => "GET", 'path' => "/api/v1/tenants/{tenantID}/connectors/{connectorID}/resources", 'tag' => "Gateway", 'operationId' => "gatewayGetApiV1TenantsByTenantIDConnectorsByConnectorIDResources" },
124
145
  { 'method' => "POST", 'path' => "/api/v1/tenants/{tenantID}/connectors/{connectorID}/test-connection", 'tag' => "Gateway", 'operationId' => "gatewayPostApiV1TenantsByTenantIDConnectorsByConnectorIDTestConnection" },
146
+ { 'method' => "POST", 'path' => "/api/v1/tenants/{tenantID}/connectors/oauth/google/finalize", 'tag' => "Gateway", 'operationId' => "gatewayPostApiV1TenantsByTenantIDConnectorsOauthGoogleFinalize" },
147
+ { 'method' => "POST", 'path' => "/api/v1/tenants/{tenantID}/connectors/oauth/google/start", 'tag' => "Gateway", 'operationId' => "gatewayPostApiV1TenantsByTenantIDConnectorsOauthGoogleStart" },
125
148
  { 'method' => "GET", 'path' => "/api/v1/tenants/{tenantID}/cost/by-app", 'tag' => "Cost", 'operationId' => "costGetApiV1TenantsByTenantIDCostByApp" },
126
149
  { 'method' => "GET", 'path' => "/api/v1/tenants/{tenantID}/cost/by-cost-center", 'tag' => "Cost", 'operationId' => "costGetApiV1TenantsByTenantIDCostByCostCenter" },
127
150
  { 'method' => "GET", 'path' => "/api/v1/tenants/{tenantID}/cost/export", 'tag' => "Cost", 'operationId' => "costGetApiV1TenantsByTenantIDCostExport" },
@@ -133,6 +156,8 @@ module AxHub
133
156
  { 'method' => "GET", 'path' => "/api/v1/tenants/{tenantID}/email-domains", 'tag' => "Tenants", 'operationId' => "tenantsGetApiV1TenantsByTenantIDEmailDomains" },
134
157
  { 'method' => "POST", 'path' => "/api/v1/tenants/{tenantID}/email-domains", 'tag' => "Tenants", 'operationId' => "tenantsPostApiV1TenantsByTenantIDEmailDomains" },
135
158
  { 'method' => "DELETE", 'path' => "/api/v1/tenants/{tenantID}/email-domains/{domain}", 'tag' => "Tenants", 'operationId' => "tenantsDeleteApiV1TenantsByTenantIDEmailDomainsByDomain" },
159
+ { 'method' => "POST", 'path' => "/api/v1/tenants/{tenantID}/gateway/document-invoke", 'tag' => "Gateway", 'operationId' => "gatewayPostApiV1TenantsByTenantIDGatewayDocumentInvoke" },
160
+ { 'method' => "POST", 'path' => "/api/v1/tenants/{tenantID}/gateway/file-invoke", 'tag' => "Gateway", 'operationId' => "gatewayPostApiV1TenantsByTenantIDGatewayFileInvoke" },
136
161
  { 'method' => "POST", 'path' => "/api/v1/tenants/{tenantID}/gateway/invoke", 'tag' => "Gateway", 'operationId' => "gatewayPostApiV1TenantsByTenantIDGatewayInvoke" },
137
162
  { 'method' => "POST", 'path' => "/api/v1/tenants/{tenantID}/gateway/query", 'tag' => "Gateway", 'operationId' => "gatewayPostApiV1TenantsByTenantIDGatewayQuery" },
138
163
  { 'method' => "POST", 'path' => "/api/v1/tenants/{tenantID}/gateway/sessions", 'tag' => "Gateway", 'operationId' => "gatewayPostApiV1TenantsByTenantIDGatewaySessions" },
@@ -141,6 +166,10 @@ module AxHub
141
166
  { 'method' => "POST", 'path' => "/api/v1/tenants/{tenantID}/grants", 'tag' => "Authorization", 'operationId' => "authorizationPostApiV1TenantsByTenantIDGrants" },
142
167
  { 'method' => "DELETE", 'path' => "/api/v1/tenants/{tenantID}/grants/{grantID}", 'tag' => "Authorization", 'operationId' => "authorizationDeleteApiV1TenantsByTenantIDGrantsByGrantID" },
143
168
  { 'method' => "GET", 'path' => "/api/v1/tenants/{tenantID}/grants/{grantID}", 'tag' => "Authorization", 'operationId' => "authorizationGetApiV1TenantsByTenantIDGrantsByGrantID" },
169
+ { 'method' => "GET", 'path' => "/api/v1/tenants/{tenantID}/groups", 'tag' => "Tenants", 'operationId' => "tenantsGetApiV1TenantsByTenantIDGroups" },
170
+ { 'method' => "POST", 'path' => "/api/v1/tenants/{tenantID}/groups", 'tag' => "Tenants", 'operationId' => "tenantsPostApiV1TenantsByTenantIDGroups" },
171
+ { 'method' => "DELETE", 'path' => "/api/v1/tenants/{tenantID}/groups/{groupID}", 'tag' => "Tenants", 'operationId' => "tenantsDeleteApiV1TenantsByTenantIDGroupsByGroupID" },
172
+ { 'method' => "PATCH", 'path' => "/api/v1/tenants/{tenantID}/groups/{groupID}", 'tag' => "Tenants", 'operationId' => "tenantsPatchApiV1TenantsByTenantIDGroupsByGroupID" },
144
173
  { 'method' => "DELETE", 'path' => "/api/v1/tenants/{tenantID}/icon", 'tag' => "Tenants", 'operationId' => "tenantsDeleteApiV1TenantsByTenantIDIcon" },
145
174
  { 'method' => "POST", 'path' => "/api/v1/tenants/{tenantID}/icon/upload-url", 'tag' => "Tenants", 'operationId' => "tenantsPostApiV1TenantsByTenantIDIconUploadUrl" },
146
175
  { 'method' => "GET", 'path' => "/api/v1/tenants/{tenantID}/identity-providers", 'tag' => "Auth", 'operationId' => "authGetApiV1TenantsByTenantIDIdentityProviders" },
@@ -162,12 +191,20 @@ module AxHub
162
191
  { 'method' => "GET", 'path' => "/api/v1/tenants/{tenantID}/members", 'tag' => "Tenants", 'operationId' => "tenantsGetApiV1TenantsByTenantIDMembers" },
163
192
  { 'method' => "PATCH", 'path' => "/api/v1/tenants/{tenantID}/members/{membershipID}", 'tag' => "Tenants", 'operationId' => "tenantsPatchApiV1TenantsByTenantIDMembersByMembershipID" },
164
193
  { 'method' => "POST", 'path' => "/api/v1/tenants/{tenantID}/members/{membershipID}/deactivate", 'tag' => "Tenants", 'operationId' => "tenantsPostApiV1TenantsByTenantIDMembersByMembershipIDDeactivate" },
194
+ { 'method' => "PATCH", 'path' => "/api/v1/tenants/{tenantID}/members/{membershipID}/group", 'tag' => "Tenants", 'operationId' => "tenantsPatchApiV1TenantsByTenantIDMembersByMembershipIDGroup" },
165
195
  { 'method' => "POST", 'path' => "/api/v1/tenants/{tenantID}/members/{membershipID}/reactivate", 'tag' => "Tenants", 'operationId' => "tenantsPostApiV1TenantsByTenantIDMembersByMembershipIDReactivate" },
196
+ { 'method' => "POST", 'path' => "/api/v1/tenants/{tenantID}/members/{membershipID}/restore-scim", 'tag' => "Tenants", 'operationId' => "tenantsPostApiV1TenantsByTenantIDMembersByMembershipIDRestoreScim" },
197
+ { 'method' => "DELETE", 'path' => "/api/v1/tenants/{tenantID}/members/{userID}/seat", 'tag' => "Tenants", 'operationId' => "tenantsDeleteApiV1TenantsByTenantIDMembersByUserIDSeat" },
198
+ { 'method' => "POST", 'path' => "/api/v1/tenants/{tenantID}/members/{userID}/seat", 'tag' => "Tenants", 'operationId' => "tenantsPostApiV1TenantsByTenantIDMembersByUserIDSeat" },
199
+ { 'method' => "GET", 'path' => "/api/v1/tenants/{tenantID}/members/directory", 'tag' => "Tenants", 'operationId' => "tenantsGetApiV1TenantsByTenantIDMembersDirectory" },
166
200
  { 'method' => "GET", 'path' => "/api/v1/tenants/{tenantID}/presets", 'tag' => "Authorization", 'operationId' => "authorizationGetApiV1TenantsByTenantIDPresets" },
167
201
  { 'method' => "POST", 'path' => "/api/v1/tenants/{tenantID}/presets", 'tag' => "Authorization", 'operationId' => "authorizationPostApiV1TenantsByTenantIDPresets" },
168
202
  { 'method' => "DELETE", 'path' => "/api/v1/tenants/{tenantID}/presets/{presetID}", 'tag' => "Authorization", 'operationId' => "authorizationDeleteApiV1TenantsByTenantIDPresetsByPresetID" },
169
203
  { 'method' => "GET", 'path' => "/api/v1/tenants/{tenantID}/presets/{presetID}", 'tag' => "Authorization", 'operationId' => "authorizationGetApiV1TenantsByTenantIDPresetsByPresetID" },
170
204
  { 'method' => "PATCH", 'path' => "/api/v1/tenants/{tenantID}/presets/{presetID}", 'tag' => "Authorization", 'operationId' => "authorizationPatchApiV1TenantsByTenantIDPresetsByPresetID" },
205
+ { 'method' => "GET", 'path' => "/api/v1/tenants/{tenantID}/scim/connection", 'tag' => "Tenants", 'operationId' => "tenantsGetApiV1TenantsByTenantIDScimConnection" },
206
+ { 'method' => "DELETE", 'path' => "/api/v1/tenants/{tenantID}/scim/token", 'tag' => "Tenants", 'operationId' => "tenantsDeleteApiV1TenantsByTenantIDScimToken" },
207
+ { 'method' => "POST", 'path' => "/api/v1/tenants/{tenantID}/scim/token", 'tag' => "Tenants", 'operationId' => "tenantsPostApiV1TenantsByTenantIDScimToken" },
171
208
  { 'method' => "GET", 'path' => "/api/v1/tenants/{tenantID}/subjects", 'tag' => "Authorization", 'operationId' => "authorizationGetApiV1TenantsByTenantIDSubjects" },
172
209
  { 'method' => "POST", 'path' => "/api/v1/tenants/{tenantID}/subjects", 'tag' => "Authorization", 'operationId' => "authorizationPostApiV1TenantsByTenantIDSubjects" },
173
210
  { 'method' => "GET", 'path' => "/api/v1/tenants/{tenantID}/subjects/{subjectID}", 'tag' => "Authorization", 'operationId' => "authorizationGetApiV1TenantsByTenantIDSubjectsBySubjectID" },
@@ -184,18 +221,13 @@ module AxHub
184
221
  { 'method' => "GET", 'path' => "/auth/silent/callback", 'tag' => "Auth", 'operationId' => "authGetAuthSilentCallback" },
185
222
  { 'method' => "GET", 'path' => "/auth/silent/start", 'tag' => "Auth", 'operationId' => "authGetAuthSilentStart" },
186
223
  { 'method' => "GET", 'path' => "/config/public", 'tag' => "Config", 'operationId' => "configGetConfigPublic" },
187
- { 'method' => "GET", 'path' => "/data/{tenantSlug}/{appSlug}/{table}", 'tag' => "Schema", 'operationId' => "schemaGetDataByTenantSlugByAppSlugByTable" },
188
- { 'method' => "POST", 'path' => "/data/{tenantSlug}/{appSlug}/{table}", 'tag' => "Schema", 'operationId' => "schemaPostDataByTenantSlugByAppSlugByTable" },
189
- { 'method' => "GET", 'path' => "/data/{tenantSlug}/{appSlug}/{table}/_count", 'tag' => "Schema", 'operationId' => "schemaGetDataByTenantSlugByAppSlugByTableCount" },
190
- { 'method' => "DELETE", 'path' => "/data/{tenantSlug}/{appSlug}/{table}/{id}", 'tag' => "Schema", 'operationId' => "schemaDeleteDataByTenantSlugByAppSlugByTableById" },
191
- { 'method' => "GET", 'path' => "/data/{tenantSlug}/{appSlug}/{table}/{id}", 'tag' => "Schema", 'operationId' => "schemaGetDataByTenantSlugByAppSlugByTableById" },
192
- { 'method' => "PATCH", 'path' => "/data/{tenantSlug}/{appSlug}/{table}/{id}", 'tag' => "Schema", 'operationId' => "schemaPatchDataByTenantSlugByAppSlugByTableById" },
193
224
  { 'method' => "GET", 'path' => "/internal/app-access", 'tag' => "Apps", 'operationId' => "appsGetInternalAppAccess" },
194
225
  { 'method' => "GET", 'path' => "/oauth/authorize", 'tag' => "Auth", 'operationId' => "authGetOauthAuthorize" },
195
226
  { 'method' => "POST", 'path' => "/oauth/authorize/tenant", 'tag' => "Auth", 'operationId' => "authPostOauthAuthorizeTenant" },
196
227
  { 'method' => "POST", 'path' => "/oauth/device_authorization", 'tag' => "Auth", 'operationId' => "authPostOauthDeviceAuthorization" },
197
228
  { 'method' => "POST", 'path' => "/oauth/device/authorize", 'tag' => "Auth", 'operationId' => "authPostOauthDeviceAuthorize" },
198
229
  { 'method' => "GET", 'path' => "/oauth/device/lookup", 'tag' => "Auth", 'operationId' => "authGetOauthDeviceLookup" },
230
+ { 'method' => "GET", 'path' => "/oauth/google/callback", 'tag' => "Gateway", 'operationId' => "gatewayGetOauthGoogleCallback" },
199
231
  { 'method' => "POST", 'path' => "/oauth/register", 'tag' => "Auth", 'operationId' => "authPostOauthRegister" },
200
232
  { 'method' => "POST", 'path' => "/oauth/revoke", 'tag' => "Auth", 'operationId' => "authPostOauthRevoke" },
201
233
  { 'method' => "POST", 'path' => "/oauth/token", 'tag' => "Auth", 'operationId' => "authPostOauthToken" },
@@ -218,9 +250,11 @@ module AxHub
218
250
  "already_suspended" => ErrorInfo.new("conflict", 409, false),
219
251
  "already_terminal" => ErrorInfo.new("conflict", 409, false),
220
252
  "app_unavailable" => ErrorInfo.new("conflict", 409, false),
253
+ "auth_expired" => ErrorInfo.new("unavailable", 503, false),
221
254
  "bad_request" => ErrorInfo.new("validation", 400, false),
222
255
  "build_env_no_override" => ErrorInfo.new("validation", 400, false),
223
256
  "cannot_reactivate" => ErrorInfo.new("conflict", 409, false),
257
+ "charge_failed" => ErrorInfo.new("CategoryPaymentRequired", 402, false),
224
258
  "confirm_required" => ErrorInfo.new("precondition_failed", 412, false),
225
259
  "conflict" => ErrorInfo.new("conflict", 409, false),
226
260
  "connector_inactive" => ErrorInfo.new("permission_denied", 403, false),
@@ -229,7 +263,9 @@ module AxHub
229
263
  "domain_taken" => ErrorInfo.new("conflict", 409, false),
230
264
  "duplicate" => ErrorInfo.new("validation", 400, false),
231
265
  "empty" => ErrorInfo.new("validation", 400, false),
266
+ "exceeds_max" => ErrorInfo.new("conflict", 409, false),
232
267
  "expiry_in_past" => ErrorInfo.new("validation", 400, false),
268
+ "feature_not_in_plan" => ErrorInfo.new("permission_denied", 403, false),
233
269
  "final_visibility_too_wide" => ErrorInfo.new("validation", 400, false),
234
270
  "forbidden" => ErrorInfo.new("permission_denied", 403, false),
235
271
  "github_device_flow_disabled" => ErrorInfo.new("unavailable", 503, false),
@@ -238,32 +274,50 @@ module AxHub
238
274
  "grant_expired" => ErrorInfo.new("permission_denied", 403, false),
239
275
  "grant_revoked" => ErrorInfo.new("permission_denied", 403, false),
240
276
  "internal_error" => ErrorInfo.new("internal", 500, false),
277
+ "invalid_drive" => ErrorInfo.new("validation", 400, false),
278
+ "invalid_entitlement" => ErrorInfo.new("validation", 400, false),
241
279
  "invalid_expiry" => ErrorInfo.new("validation", 400, false),
242
280
  "invalid_format" => ErrorInfo.new("validation", 400, false),
281
+ "invalid_oauth_state" => ErrorInfo.new("validation", 400, false),
243
282
  "invalid_state_transition" => ErrorInfo.new("conflict", 409, false),
283
+ "invalid_target" => ErrorInfo.new("conflict", 409, false),
244
284
  "invalid_value" => ErrorInfo.new("validation", 400, false),
245
285
  "invitation_expired" => ErrorInfo.new("not_found", 410, false),
246
286
  "kind_engine_mismatch" => ErrorInfo.new("validation", 400, false),
247
287
  "last_admin" => ErrorInfo.new("conflict", 409, false),
248
288
  "link_invalid" => ErrorInfo.new("not_found", 404, false),
249
289
  "no_active_grant" => ErrorInfo.new("not_found", 404, false),
290
+ "no_available_seat" => ErrorInfo.new("conflict", 409, false),
291
+ "no_billing_key" => ErrorInfo.new("CategoryPaymentRequired", 402, false),
292
+ "no_payment_method" => ErrorInfo.new("CategoryPaymentRequired", 402, false),
250
293
  "not_admin" => ErrorInfo.new("permission_denied", 403, false),
251
294
  "not_allowed" => ErrorInfo.new("validation", 400, false),
252
295
  "not_deleted" => ErrorInfo.new("conflict", 409, false),
296
+ "not_deployed" => ErrorInfo.new("conflict", 409, false),
253
297
  "not_found" => ErrorInfo.new("not_found", 404, false),
254
298
  "not_member" => ErrorInfo.new("permission_denied", 403, false),
255
299
  "not_promotable" => ErrorInfo.new("precondition_failed", 412, false),
256
300
  "not_suspended" => ErrorInfo.new("conflict", 409, false),
301
+ "oauth_denied" => ErrorInfo.new("validation", 400, false),
302
+ "payment_failed" => ErrorInfo.new("CategoryPaymentRequired", 402, false),
303
+ "payment_required" => ErrorInfo.new("CategoryPaymentRequired", 402, false),
257
304
  "pending_exists" => ErrorInfo.new("conflict", 409, false),
258
305
  "pending_review_exists" => ErrorInfo.new("precondition_failed", 412, false),
259
306
  "permanently_deleted" => ErrorInfo.new("not_found", 410, false),
307
+ "plan_version_exists" => ErrorInfo.new("conflict", 409, false),
260
308
  "precondition_failed" => ErrorInfo.new("precondition_failed", 412, false),
261
309
  "preset_in_use" => ErrorInfo.new("conflict", 409, false),
262
310
  "preset_mismatch" => ErrorInfo.new("validation", 400, false),
311
+ "preset_not_in_plan" => ErrorInfo.new("CategoryPaymentRequired", 402, false),
263
312
  "prod_deploy_required" => ErrorInfo.new("precondition_failed", 412, false),
264
313
  "promote_in_progress" => ErrorInfo.new("precondition_failed", 412, true),
314
+ "quota_exceeded" => ErrorInfo.new("CategoryPaymentRequired", 402, false),
265
315
  "required" => ErrorInfo.new("validation", 400, false),
316
+ "resource_quota_exceeded" => ErrorInfo.new("CategoryPaymentRequired", 402, false),
266
317
  "schema_name_taken" => ErrorInfo.new("conflict", 409, false),
318
+ "seat_in_use" => ErrorInfo.new("conflict", 409, false),
319
+ "seat_unassigned" => ErrorInfo.new("CategoryPaymentRequired", 402, false),
320
+ "seats_not_supported" => ErrorInfo.new("conflict", 409, false),
267
321
  "session_ended" => ErrorInfo.new("unauthenticated", 401, true),
268
322
  "session_expired" => ErrorInfo.new("unauthenticated", 401, true),
269
323
  "slug_taken" => ErrorInfo.new("conflict", 409, false),
@@ -271,11 +325,16 @@ module AxHub
271
325
  "staging_mismatch" => ErrorInfo.new("precondition_failed", 412, false),
272
326
  "staging_not_enabled" => ErrorInfo.new("precondition_failed", 412, false),
273
327
  "staging_required" => ErrorInfo.new("precondition_failed", 412, false),
274
- "temporarily_unavailable" => ErrorInfo.new("unavailable", 503, true),
328
+ "static_release_in_use" => ErrorInfo.new("conflict", 409, false),
329
+ "static_release_not_ready" => ErrorInfo.new("precondition_failed", 412, false),
330
+ "temporarily_unavailable" => ErrorInfo.new("unavailable", 429, true),
275
331
  "token_expired" => ErrorInfo.new("unauthenticated", 401, true),
276
332
  "token_invalid" => ErrorInfo.new("unauthenticated", 401, true),
277
333
  "token_missing" => ErrorInfo.new("unauthenticated", 401, true),
278
334
  "too_long" => ErrorInfo.new("validation", 400, false),
335
+ "unknown_plan" => ErrorInfo.new("not_found", 404, false),
336
+ "unpaid_balance" => ErrorInfo.new("CategoryPaymentRequired", 402, false),
337
+ "unsupported_for_static_app" => ErrorInfo.new("conflict", 409, false),
279
338
  "version_not_approved" => ErrorInfo.new("permission_denied", 403, false),
280
339
  "visibility_widen_not_allowed" => ErrorInfo.new("conflict", 409, false),
281
340
  }.freeze
@@ -320,21 +379,6 @@ module AxHub
320
379
  _send(req, uri, camelize: true)
321
380
  end
322
381
 
323
- # Raw-path transport for endpoints with no generated operation-id facade
324
- # (the ergonomic data ring: dynamic CRUD + runtime schema discover). `path`
325
- # is already fully substituted; `query` keys may be array-valued so repeated
326
- # filter params (e.g. `tag=eq.a&tag=eq.b`) serialize via URI.encode_www_form.
327
- # Defaults to `camelize: false` to mirror the node data transport: row bodies
328
- # and list envelopes (`has_more`/`per_page`) are returned verbatim.
329
- def request_raw(method, path, query: {}, body: nil, camelize: false)
330
- uri = URI(@base_url + path); uri.query = URI.encode_www_form(query) unless query.nil? || query.empty?
331
- req_class = Net::HTTP.const_get(method.to_s.capitalize); req = req_class.new(uri); req['X-Request-ID'] = request_id
332
- unless body.nil?
333
- req['Content-Type'] = 'application/json'; req.body = JSON.generate(body)
334
- end
335
- _send(req, uri, camelize: camelize)
336
- end
337
-
338
382
  private
339
383
 
340
384
  # Shared auth + send + redirect policy + response/error normalization tail.
@@ -403,4 +447,3 @@ module AxHub
403
447
  end
404
448
 
405
449
  require_relative 'axhub_sdk/operations'
406
- require_relative 'axhub_sdk/data'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: axhub-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jocoding AX Partners
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-06-17 00:00:00.000000000 Z
11
+ date: 2026-07-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -50,17 +50,6 @@ files:
50
50
  - README.md
51
51
  - axhub-sdk.gemspec
52
52
  - lib/axhub_sdk.rb
53
- - lib/axhub_sdk/data.rb
54
- - lib/axhub_sdk/data/client.rb
55
- - lib/axhub_sdk/data/discover.rb
56
- - lib/axhub_sdk/data/dsl/ops.rb
57
- - lib/axhub_sdk/data/dsl/schema.rb
58
- - lib/axhub_sdk/data/dsl/validation.rb
59
- - lib/axhub_sdk/data/errors.rb
60
- - lib/axhub_sdk/data/pagination.rb
61
- - lib/axhub_sdk/data/projection.rb
62
- - lib/axhub_sdk/data/schema_cache.rb
63
- - lib/axhub_sdk/data/where_serializer.rb
64
53
  - lib/axhub_sdk/operations.rb
65
54
  - lib/axhub_sdk/version.rb
66
55
  homepage: https://github.com/jocoding-ax-partners/axhub-sdk-ruby