vb-os 0.1.0__py3-none-any.whl
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.
- vb_os-0.1.0.dist-info/METADATA +500 -0
- vb_os-0.1.0.dist-info/RECORD +82 -0
- vb_os-0.1.0.dist-info/WHEEL +4 -0
- vb_os-0.1.0.dist-info/entry_points.txt +2 -0
- vb_os-0.1.0.dist-info/licenses/LICENSE +6 -0
- vbos/__init__.py +229 -0
- vbos/_transport.py +40 -0
- vbos/client.py +505 -0
- vbos/exceptions.py +136 -0
- vbos/models.py +920 -0
- vbos/py.typed +0 -0
- vbos/resources/__init__.py +0 -0
- vbos/resources/account.py +96 -0
- vbos/resources/alert_rules.py +125 -0
- vbos/resources/analytics.py +144 -0
- vbos/resources/audit_log.py +80 -0
- vbos/resources/billing.py +64 -0
- vbos/resources/boundaries.py +278 -0
- vbos/resources/certification_models.py +107 -0
- vbos/resources/certifications.py +147 -0
- vbos/resources/connector_providers.py +67 -0
- vbos/resources/connectors.py +541 -0
- vbos/resources/deployments.py +261 -0
- vbos/resources/environments.py +171 -0
- vbos/resources/flow_templates.py +67 -0
- vbos/resources/flows.py +458 -0
- vbos/resources/governed_workspaces.py +349 -0
- vbos/resources/keys.py +251 -0
- vbos/resources/members.py +135 -0
- vbos/resources/named_sets.py +146 -0
- vbos/resources/notifications.py +83 -0
- vbos/resources/org.py +135 -0
- vbos/resources/projects.py +210 -0
- vbos/resources/service_accounts.py +111 -0
- vbos/resources/templates.py +80 -0
- vbos/resources/users.py +53 -0
- vbos/resources/webhooks.py +194 -0
- vbos/resources/workspaces.py +170 -0
- vbos/retry.py +72 -0
- vbos_cli/__init__.py +3 -0
- vbos_cli/__main__.py +5 -0
- vbos_cli/cli.py +218 -0
- vbos_cli/client.py +215 -0
- vbos_cli/commands/__init__.py +1 -0
- vbos_cli/commands/account.py +155 -0
- vbos_cli/commands/alert_rules.py +205 -0
- vbos_cli/commands/analytics.py +53 -0
- vbos_cli/commands/audit_log.py +109 -0
- vbos_cli/commands/auth.py +397 -0
- vbos_cli/commands/boundaries.py +504 -0
- vbos_cli/commands/certify.py +316 -0
- vbos_cli/commands/completions.py +36 -0
- vbos_cli/commands/config_cmd.py +101 -0
- vbos_cli/commands/connectors.py +596 -0
- vbos_cli/commands/deployments.py +248 -0
- vbos_cli/commands/environments.py +213 -0
- vbos_cli/commands/evaluations.py +236 -0
- vbos_cli/commands/flows.py +812 -0
- vbos_cli/commands/governed_workspaces.py +239 -0
- vbos_cli/commands/keys.py +221 -0
- vbos_cli/commands/members.py +187 -0
- vbos_cli/commands/named_sets.py +190 -0
- vbos_cli/commands/notifications.py +135 -0
- vbos_cli/commands/org.py +83 -0
- vbos_cli/commands/org_mgmt.py +121 -0
- vbos_cli/commands/projects.py +330 -0
- vbos_cli/commands/replay.py +44 -0
- vbos_cli/commands/templates.py +128 -0
- vbos_cli/commands/verify.py +150 -0
- vbos_cli/commands/webhooks.py +353 -0
- vbos_cli/commands/workspaces.py +163 -0
- vbos_cli/config.py +99 -0
- vbos_cli/credentials/__init__.py +1 -0
- vbos_cli/credentials/file.py +141 -0
- vbos_cli/credentials/keychain.py +54 -0
- vbos_cli/credentials/migration.py +39 -0
- vbos_cli/credentials/store.py +124 -0
- vbos_cli/errors.py +40 -0
- vbos_cli/formatters.py +288 -0
- vbos_cli/local_bridge.py +233 -0
- vbos_cli/output.py +67 -0
- vbos_cli/profiles.py +15 -0
|
@@ -0,0 +1,500 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: vb-os
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Python SDK for the VB-OS Verification Cloud Platform
|
|
5
|
+
Project-URL: Homepage, https://vb-os.org
|
|
6
|
+
Project-URL: Documentation, https://docs.vb-os.org
|
|
7
|
+
Project-URL: Repository, https://github.com/VB-OS/vb-os-python-sdk
|
|
8
|
+
Author-email: "MNC Labs, Inc." <engineering@vb-os.org>
|
|
9
|
+
Maintainer-email: "Asaad N. Riaz" <asaad@vb-os.org>
|
|
10
|
+
License-Expression: LicenseRef-Proprietary
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: Other/Proprietary License
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Typing :: Typed
|
|
21
|
+
Requires-Python: >=3.10
|
|
22
|
+
Requires-Dist: httpx<1.0.0,>=0.27.0
|
|
23
|
+
Requires-Dist: pydantic<3.0.0,>=2.0.0
|
|
24
|
+
Provides-Extra: cli
|
|
25
|
+
Requires-Dist: click<9.0.0,>=8.1.0; extra == 'cli'
|
|
26
|
+
Requires-Dist: cryptography<45.0.0,>=43.0.0; extra == 'cli'
|
|
27
|
+
Requires-Dist: keyring<26.0.0,>=25.0.0; extra == 'cli'
|
|
28
|
+
Requires-Dist: tomli-w<2.0.0,>=1.0.0; extra == 'cli'
|
|
29
|
+
Provides-Extra: dev
|
|
30
|
+
Requires-Dist: mypy>=1.10.0; extra == 'dev'
|
|
31
|
+
Requires-Dist: pytest-asyncio>=0.24.0; extra == 'dev'
|
|
32
|
+
Requires-Dist: pytest-cov>=5.0.0; extra == 'dev'
|
|
33
|
+
Requires-Dist: pytest>=8.0.0; extra == 'dev'
|
|
34
|
+
Requires-Dist: respx>=0.22.0; extra == 'dev'
|
|
35
|
+
Requires-Dist: ruff>=0.4.0; extra == 'dev'
|
|
36
|
+
Description-Content-Type: text/markdown
|
|
37
|
+
|
|
38
|
+
# VB-OS Python SDK
|
|
39
|
+
|
|
40
|
+
Python SDK for the VB-OS Verification Cloud Platform.
|
|
41
|
+
|
|
42
|
+
## Installation
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
pip install vb-os
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Quick Start
|
|
49
|
+
|
|
50
|
+
```python
|
|
51
|
+
from vbos import VBOSClient
|
|
52
|
+
|
|
53
|
+
with VBOSClient(api_key="your-api-key") as client:
|
|
54
|
+
result = client.verify(
|
|
55
|
+
workload={"amount": 5000, "currency": "USD"},
|
|
56
|
+
boundary_ref="B_FIN_PAYMENT",
|
|
57
|
+
)
|
|
58
|
+
print(result.decision) # ASSERT or DEFER
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Async Usage
|
|
62
|
+
|
|
63
|
+
```python
|
|
64
|
+
from vbos import AsyncVBOSClient
|
|
65
|
+
|
|
66
|
+
async with AsyncVBOSClient(api_key="your-api-key") as client:
|
|
67
|
+
result = await client.verify(
|
|
68
|
+
workload={"amount": 5000, "currency": "USD"},
|
|
69
|
+
boundary_ref="B_FIN_PAYMENT",
|
|
70
|
+
)
|
|
71
|
+
print(result.decision)
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Configuration
|
|
75
|
+
|
|
76
|
+
```python
|
|
77
|
+
client = VBOSClient(
|
|
78
|
+
api_key="your-api-key",
|
|
79
|
+
base_url="https://api.vb-os.org", # default
|
|
80
|
+
max_retries=3, # default; 5xx only
|
|
81
|
+
timeout=30.0, # seconds
|
|
82
|
+
)
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Resource Namespaces
|
|
86
|
+
|
|
87
|
+
All 27 resource groups are available as namespaced sub-clients on both
|
|
88
|
+
`VBOSClient` (sync) and `AsyncVBOSClient` (async).
|
|
89
|
+
|
|
90
|
+
### Verification
|
|
91
|
+
|
|
92
|
+
```python
|
|
93
|
+
# Single verification
|
|
94
|
+
result = client.verify(workload={"amount": 5000}, boundary_ref="B_FIN")
|
|
95
|
+
|
|
96
|
+
# Batch verification
|
|
97
|
+
results = client.verify_batch(
|
|
98
|
+
workloads=[{"amount": 1000}, {"amount": 2000}],
|
|
99
|
+
boundary_ref="B_FIN",
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
# Dry-run validation (no record created)
|
|
103
|
+
validation = client.validate(
|
|
104
|
+
workload={"amount": 5000},
|
|
105
|
+
boundary_ref="B_FIN",
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
# Trigger certification run
|
|
109
|
+
run = client.certify(project_id="proj-id", scope="full")
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Evaluations
|
|
113
|
+
|
|
114
|
+
```python
|
|
115
|
+
# List evaluations
|
|
116
|
+
page = client.evaluations.list("project-id", limit=50)
|
|
117
|
+
|
|
118
|
+
# Get evaluation detail
|
|
119
|
+
detail = client.evaluations.get("project-id", "eval-id")
|
|
120
|
+
|
|
121
|
+
# Replay an evaluation
|
|
122
|
+
replay = client.evaluations.replay("project-id", "eval-id")
|
|
123
|
+
|
|
124
|
+
# Export evaluations
|
|
125
|
+
export = client.evaluations.export("project-id", format="csv")
|
|
126
|
+
|
|
127
|
+
# Share an evaluation
|
|
128
|
+
share = client.evaluations.share("project-id", "eval-id")
|
|
129
|
+
|
|
130
|
+
# Retrieve a shared evaluation by token
|
|
131
|
+
shared = client.evaluations.get_shared("share-token")
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Boundaries
|
|
135
|
+
|
|
136
|
+
```python
|
|
137
|
+
boundaries = client.boundaries.list("project-id")
|
|
138
|
+
boundary = client.boundaries.create(
|
|
139
|
+
"project-id",
|
|
140
|
+
boundary_ref="B_KYC_CHECK",
|
|
141
|
+
display_name="KYC Check",
|
|
142
|
+
)
|
|
143
|
+
boundary = client.boundaries.get("project-id", "B_KYC_CHECK")
|
|
144
|
+
client.boundaries.update_draft(
|
|
145
|
+
"project-id", "B_KYC_CHECK",
|
|
146
|
+
dsl_source="require_evidence: license_number",
|
|
147
|
+
)
|
|
148
|
+
client.boundaries.submit("project-id", "B_KYC_CHECK")
|
|
149
|
+
versions = client.boundaries.versions("project-id", "B_KYC_CHECK")
|
|
150
|
+
version = client.boundaries.get_version("project-id", "B_KYC_CHECK", "v1")
|
|
151
|
+
client.boundaries.approve("project-id", "B_KYC_CHECK", "v1")
|
|
152
|
+
client.boundaries.reject("project-id", "B_KYC_CHECK", "v1")
|
|
153
|
+
diff = client.boundaries.diff("project-id", "B_KYC_CHECK", "v1", "v2")
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Deployments
|
|
157
|
+
|
|
158
|
+
```python
|
|
159
|
+
deployments = client.deployments.list("project-id", "env-id")
|
|
160
|
+
deployment = client.deployments.create("project-id", "env-id", version_id="v1")
|
|
161
|
+
active = client.deployments.active("project-id", "env-id")
|
|
162
|
+
client.deployments.approve("project-id", "env-id", "deploy-id")
|
|
163
|
+
client.deployments.reject("project-id", "env-id", "deploy-id")
|
|
164
|
+
client.deployments.promote("project-id", "env-id", "deploy-id")
|
|
165
|
+
client.deployments.rollback("project-id", "env-id", "deploy-id")
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Certifications
|
|
169
|
+
|
|
170
|
+
```python
|
|
171
|
+
runs = client.certifications.list("project-id")
|
|
172
|
+
run = client.certifications.get("project-id", "run-id")
|
|
173
|
+
report = client.certifications.get_report("project-id", "run-id")
|
|
174
|
+
|
|
175
|
+
# Poll until terminal status (COMPLETED/FAILED/CANCELLED)
|
|
176
|
+
result = client.certifications.wait(
|
|
177
|
+
"project-id", "run-id",
|
|
178
|
+
poll_interval_seconds=2.0,
|
|
179
|
+
max_attempts=150,
|
|
180
|
+
)
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### Certification Models
|
|
184
|
+
|
|
185
|
+
```python
|
|
186
|
+
models = client.certification_models.list("project-id")
|
|
187
|
+
model = client.certification_models.create("project-id", name="Model A")
|
|
188
|
+
version = client.certification_models.create_version(
|
|
189
|
+
"project-id", "model-id",
|
|
190
|
+
)
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Projects
|
|
194
|
+
|
|
195
|
+
```python
|
|
196
|
+
projects = client.projects.list()
|
|
197
|
+
project = client.projects.create(name="My Project", slug="my-project")
|
|
198
|
+
project = client.projects.get("project-id")
|
|
199
|
+
client.projects.update("project-id", name="Renamed")
|
|
200
|
+
client.projects.archive("project-id")
|
|
201
|
+
client.projects.delete("project-id")
|
|
202
|
+
members = client.projects.list_members("project-id")
|
|
203
|
+
client.projects.add_member("project-id", user_id="user-id", role="editor")
|
|
204
|
+
client.projects.remove_member("project-id", "user-id")
|
|
205
|
+
client.projects.update_member("project-id", "user-id", role="viewer")
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### Environments
|
|
209
|
+
|
|
210
|
+
```python
|
|
211
|
+
envs = client.environments.list("project-id")
|
|
212
|
+
env = client.environments.create("project-id", name="staging")
|
|
213
|
+
env = client.environments.get("project-id", "env-id")
|
|
214
|
+
client.environments.update("project-id", "env-id", name="production")
|
|
215
|
+
client.environments.deactivate("project-id", "env-id")
|
|
216
|
+
client.environments.reactivate("project-id", "env-id")
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### Templates
|
|
220
|
+
|
|
221
|
+
```python
|
|
222
|
+
templates = client.templates.list()
|
|
223
|
+
template = client.templates.get("template-id")
|
|
224
|
+
fork = client.templates.fork("template-id", project_id="proj-id")
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### Organization
|
|
228
|
+
|
|
229
|
+
```python
|
|
230
|
+
org = client.org.get()
|
|
231
|
+
client.org.update(display_name="My Org")
|
|
232
|
+
settings = client.org.get_settings()
|
|
233
|
+
client.org.update_settings(default_project="proj-id")
|
|
234
|
+
policy = client.org.get_ai_policy()
|
|
235
|
+
client.org.update_ai_policy(allowed_models=["gpt-4"])
|
|
236
|
+
client.org.transfer_ownership(new_owner_id="user-id")
|
|
237
|
+
client.org.accept_transfer("transfer-id")
|
|
238
|
+
client.org.cancel_transfer("transfer-id")
|
|
239
|
+
transfer = client.org.get_transfer()
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### Members
|
|
243
|
+
|
|
244
|
+
```python
|
|
245
|
+
members = client.members.list()
|
|
246
|
+
client.members.invite(email="user@example.com", role="member")
|
|
247
|
+
client.members.set_role("user-id", role="admin")
|
|
248
|
+
client.members.remove("user-id")
|
|
249
|
+
client.members.suspend("user-id")
|
|
250
|
+
client.members.reactivate("user-id")
|
|
251
|
+
client.members.revoke_invitation("invitation-id")
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### API Keys
|
|
255
|
+
|
|
256
|
+
```python
|
|
257
|
+
keys = client.keys.list()
|
|
258
|
+
created = client.keys.create(name="CI Key", scopes=["verify"])
|
|
259
|
+
key = client.keys.get("key-id")
|
|
260
|
+
client.keys.rotate("key-id")
|
|
261
|
+
client.keys.revoke("key-id")
|
|
262
|
+
client.keys.disable("key-id")
|
|
263
|
+
client.keys.enable("key-id")
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### Service Accounts
|
|
267
|
+
|
|
268
|
+
```python
|
|
269
|
+
accounts = client.service_accounts.list()
|
|
270
|
+
account = client.service_accounts.create(name="deploy-bot")
|
|
271
|
+
client.service_accounts.update("sa-id", name="deploy-bot-v2")
|
|
272
|
+
client.service_accounts.disable("sa-id")
|
|
273
|
+
client.service_accounts.enable("sa-id")
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
### Webhooks
|
|
277
|
+
|
|
278
|
+
```python
|
|
279
|
+
hooks = client.webhooks.list("project-id")
|
|
280
|
+
hook = client.webhooks.create("project-id", url="https://...")
|
|
281
|
+
client.webhooks.update("project-id", "hook-id", url="https://new")
|
|
282
|
+
client.webhooks.delete("project-id", "hook-id")
|
|
283
|
+
client.webhooks.rotate_secret("project-id", "hook-id")
|
|
284
|
+
deliveries = client.webhooks.deliveries("project-id", "hook-id")
|
|
285
|
+
org_hooks = client.webhooks.list_org()
|
|
286
|
+
client.webhooks.create_org(url="https://org-level")
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
### Analytics
|
|
290
|
+
|
|
291
|
+
```python
|
|
292
|
+
rate = client.analytics.assertion_rate("project-id")
|
|
293
|
+
deferral = client.analytics.deferral_rate("project-id")
|
|
294
|
+
summary = client.analytics.evaluations("project-id")
|
|
295
|
+
failures = client.analytics.failure_reasons("project-id")
|
|
296
|
+
latency = client.analytics.latency("project-id")
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
### Audit Log
|
|
300
|
+
|
|
301
|
+
```python
|
|
302
|
+
logs = client.audit_log.list()
|
|
303
|
+
job = client.audit_log.export(start="2025-01-01", end="2025-02-01")
|
|
304
|
+
status = client.audit_log.export_status("job-id")
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
### Billing
|
|
308
|
+
|
|
309
|
+
```python
|
|
310
|
+
usage = client.billing.usage()
|
|
311
|
+
subscription = client.billing.subscription()
|
|
312
|
+
invoices = client.billing.invoices()
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
### Flows
|
|
316
|
+
|
|
317
|
+
```python
|
|
318
|
+
flow = client.flows.create("project-id", name="Onboarding")
|
|
319
|
+
flows = client.flows.list("project-id")
|
|
320
|
+
flow = client.flows.get("project-id", "flow-id")
|
|
321
|
+
client.flows.update("project-id", "flow-id", name="Updated")
|
|
322
|
+
client.flows.delete("project-id", "flow-id")
|
|
323
|
+
export = client.flows.export("project-id", "flow-id")
|
|
324
|
+
client.flows.import_flow("project-id", definition={...})
|
|
325
|
+
client.flows.from_template("project-id", template_id="tmpl-id")
|
|
326
|
+
v = client.flows.create_version("project-id", "flow-id")
|
|
327
|
+
versions = client.flows.list_versions("project-id", "flow-id")
|
|
328
|
+
v = client.flows.get_version("project-id", "flow-id", "v1")
|
|
329
|
+
client.flows.update_version("project-id", "flow-id", "v1", name="v1-fix")
|
|
330
|
+
client.flows.delete_version("project-id", "flow-id", "v1")
|
|
331
|
+
client.flows.approve_version("project-id", "flow-id", "v1")
|
|
332
|
+
client.flows.deploy("project-id", "flow-id", env_id="env-id")
|
|
333
|
+
client.flows.suspend("project-id", "flow-id")
|
|
334
|
+
dry = client.flows.dry_run("project-id", "flow-id", workload={...})
|
|
335
|
+
execs = client.flows.list_executions("project-id", "flow-id")
|
|
336
|
+
recon = client.flows.reconstruct_execution(
|
|
337
|
+
"project-id", "flow-id", "exec-id",
|
|
338
|
+
)
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
### Flow Templates
|
|
342
|
+
|
|
343
|
+
```python
|
|
344
|
+
templates = client.flow_templates.list()
|
|
345
|
+
template = client.flow_templates.get("template-id")
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
### Alert Rules
|
|
349
|
+
|
|
350
|
+
```python
|
|
351
|
+
rule = client.alert_rules.create("project-id", name="High Defer")
|
|
352
|
+
rules = client.alert_rules.list("project-id")
|
|
353
|
+
rule = client.alert_rules.get("project-id", "rule-id")
|
|
354
|
+
client.alert_rules.update("project-id", "rule-id", name="Updated")
|
|
355
|
+
client.alert_rules.delete("project-id", "rule-id")
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
### Connectors
|
|
359
|
+
|
|
360
|
+
```python
|
|
361
|
+
connector = client.connectors.create("project-id", provider="npi")
|
|
362
|
+
connectors = client.connectors.list("project-id")
|
|
363
|
+
connector = client.connectors.get("project-id", "conn-id")
|
|
364
|
+
client.connectors.update("project-id", "conn-id", name="Renamed")
|
|
365
|
+
client.connectors.delete("project-id", "conn-id")
|
|
366
|
+
test = client.connectors.test("project-id", "conn-id")
|
|
367
|
+
gather = client.connectors.gather("project-id", "conn-id")
|
|
368
|
+
analytics = client.connectors.analytics("project-id", "conn-id")
|
|
369
|
+
resources = client.connectors.resources("project-id", "conn-id")
|
|
370
|
+
schema = client.connectors.schema("project-id", "conn-id")
|
|
371
|
+
schedule = client.connectors.get_schedule("project-id", "conn-id")
|
|
372
|
+
client.connectors.set_schedule("project-id", "conn-id", cron="0 * * * *")
|
|
373
|
+
gathers = client.connectors.list_gathers("project-id", "conn-id")
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
### Connector Providers
|
|
377
|
+
|
|
378
|
+
```python
|
|
379
|
+
providers = client.connector_providers.list()
|
|
380
|
+
schema = client.connector_providers.schema("npi")
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
### Named Sets
|
|
384
|
+
|
|
385
|
+
```python
|
|
386
|
+
ns = client.named_sets.create("project-id", name="Exclusions")
|
|
387
|
+
sets = client.named_sets.list("project-id")
|
|
388
|
+
ns = client.named_sets.get("project-id", "set-id")
|
|
389
|
+
client.named_sets.update("project-id", "set-id", name="Updated")
|
|
390
|
+
client.named_sets.delete("project-id", "set-id")
|
|
391
|
+
usage = client.named_sets.usage("project-id", "set-id")
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
### Governed Workspaces
|
|
395
|
+
|
|
396
|
+
```python
|
|
397
|
+
gw = client.governed_workspaces.create("project-id", name="Prod")
|
|
398
|
+
gws = client.governed_workspaces.list("project-id")
|
|
399
|
+
gw = client.governed_workspaces.get("project-id", "gw-id")
|
|
400
|
+
v = client.governed_workspaces.create_version("project-id", "gw-id")
|
|
401
|
+
v = client.governed_workspaces.get_version("project-id", "gw-id", "v1")
|
|
402
|
+
client.governed_workspaces.submit("project-id", "gw-id", "v1")
|
|
403
|
+
client.governed_workspaces.approve("project-id", "gw-id", "v1")
|
|
404
|
+
client.governed_workspaces.deploy("project-id", "gw-id", "v1")
|
|
405
|
+
client.governed_workspaces.archive("project-id", "gw-id")
|
|
406
|
+
inst = client.governed_workspaces.create_instance(
|
|
407
|
+
"project-id", "gw-id",
|
|
408
|
+
)
|
|
409
|
+
client.governed_workspaces.submit_instance(
|
|
410
|
+
"project-id", "gw-id", "inst-id",
|
|
411
|
+
)
|
|
412
|
+
inst = client.governed_workspaces.get_instance(
|
|
413
|
+
"project-id", "gw-id", "inst-id",
|
|
414
|
+
)
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
### Notifications
|
|
418
|
+
|
|
419
|
+
```python
|
|
420
|
+
notifications = client.notifications.list()
|
|
421
|
+
client.notifications.read("notification-id")
|
|
422
|
+
client.notifications.unread("notification-id")
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
### Account
|
|
426
|
+
|
|
427
|
+
```python
|
|
428
|
+
client.account.delete()
|
|
429
|
+
client.account.cancel_delete()
|
|
430
|
+
status = client.account.deletion_status()
|
|
431
|
+
export = client.account.export()
|
|
432
|
+
latest = client.account.export_latest()
|
|
433
|
+
status = client.account.export_status("export-id")
|
|
434
|
+
download = client.account.export_download("export-id")
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
### Workspaces
|
|
438
|
+
|
|
439
|
+
```python
|
|
440
|
+
workspaces = client.workspaces.list()
|
|
441
|
+
ws = client.workspaces.create(name="Engineering")
|
|
442
|
+
ws = client.workspaces.get("ws-id")
|
|
443
|
+
client.workspaces.update("ws-id", name="Renamed")
|
|
444
|
+
client.workspaces.archive("ws-id")
|
|
445
|
+
client.workspaces.delete("ws-id")
|
|
446
|
+
members = client.workspaces.list_members("ws-id")
|
|
447
|
+
client.workspaces.add_member("ws-id", user_id="user-id")
|
|
448
|
+
client.workspaces.remove_member("ws-id", "user-id")
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
### Users
|
|
452
|
+
|
|
453
|
+
```python
|
|
454
|
+
me = client.users.me()
|
|
455
|
+
orgs = client.users.organizations()
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
## Error Handling
|
|
459
|
+
|
|
460
|
+
```python
|
|
461
|
+
from vbos import (
|
|
462
|
+
VBOSError,
|
|
463
|
+
VBOSAuthenticationError,
|
|
464
|
+
VBOSAuthorizationError,
|
|
465
|
+
VBOSNotFoundError,
|
|
466
|
+
VBOSRateLimitError,
|
|
467
|
+
VBOSServerError,
|
|
468
|
+
VBOSValidationError,
|
|
469
|
+
)
|
|
470
|
+
|
|
471
|
+
try:
|
|
472
|
+
result = client.verify(workload={"amount": 5000})
|
|
473
|
+
except VBOSRateLimitError as e:
|
|
474
|
+
print(f"Rate limited, retry after {e.retry_after}s")
|
|
475
|
+
except VBOSAuthenticationError:
|
|
476
|
+
print("Invalid API key")
|
|
477
|
+
except VBOSNotFoundError:
|
|
478
|
+
print("Resource not found")
|
|
479
|
+
except VBOSServerError:
|
|
480
|
+
print("Server error (retried automatically)")
|
|
481
|
+
except VBOSError as e:
|
|
482
|
+
print(f"[{e.status_code}] {e.error_code}: {e.message}")
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
## Retry Behavior
|
|
486
|
+
|
|
487
|
+
- **5xx responses** are retried with full-jitter exponential backoff
|
|
488
|
+
(up to `max_retries`, default 3).
|
|
489
|
+
- **429 (rate limited)** raises `VBOSRateLimitError` immediately
|
|
490
|
+
(no automatic retry). The `retry_after` attribute contains the
|
|
491
|
+
server-suggested wait time.
|
|
492
|
+
- All other errors raise immediately without retry.
|
|
493
|
+
|
|
494
|
+
## Development
|
|
495
|
+
|
|
496
|
+
```bash
|
|
497
|
+
pip install -e ".[dev]"
|
|
498
|
+
python -m pytest tests/ -v
|
|
499
|
+
python -m ruff check vbos/ tests/
|
|
500
|
+
```
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
vbos/__init__.py,sha256=xLJRzoLNpripdn4JJR6rCeom8f0N0uME-_IjKl5W0YQ,4858
|
|
2
|
+
vbos/_transport.py,sha256=iIv3ViIYB88pJqRlLUahJmCBisiQdwrt7wu6STDZkdE,1123
|
|
3
|
+
vbos/client.py,sha256=bA9n-Wl_WZzd2v0Q6n952E4NbaZfz_Ib3_X7FYzBChc,21594
|
|
4
|
+
vbos/exceptions.py,sha256=aNYqsNf5lD9_bzk8ECLLKWZnlxF2b201DJZKl8bbPHQ,3574
|
|
5
|
+
vbos/models.py,sha256=ua6UF9QY_LeyHrJcnNP8Z-c48TdvGP22NP8CaiYEQbA,23832
|
|
6
|
+
vbos/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
|
+
vbos/retry.py,sha256=W5l0FlusJqU3is8BVxu_tdSznCHweBnLwUn_2M6Pms0,2060
|
|
8
|
+
vbos/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
|
+
vbos/resources/account.py,sha256=ZcFXUT7lz6YYGD7p4IW0A333ouFx6qEY0Gdv80bZE28,3565
|
|
10
|
+
vbos/resources/alert_rules.py,sha256=snWS-uQ9-tyw3MhW37bYM3s7gUUn5LXEYNtctwzeyPM,4420
|
|
11
|
+
vbos/resources/analytics.py,sha256=VWTIRK4s3ftJPCgN41Fh0gJTrsmVYJ4jJCn9ZlODQVY,5025
|
|
12
|
+
vbos/resources/audit_log.py,sha256=Mo1K2hlnA78q3LelxdbA6vGWlkrLZOToeiB_weeJWdM,3102
|
|
13
|
+
vbos/resources/billing.py,sha256=4NLBEH_Vj9Sl_KMtcSwD3TrDefs2ZRmOodxB-kE2Chg,2517
|
|
14
|
+
vbos/resources/boundaries.py,sha256=sCGw8FQNVO6i7shJJdOa3wAKCoODRAVkSNCBADU_LGE,9335
|
|
15
|
+
vbos/resources/certification_models.py,sha256=5-JkWpnIGnCd89KDdeMN89JFEWMkT4MI6ksk3S73drU,3803
|
|
16
|
+
vbos/resources/certifications.py,sha256=RLMaetbDLqjjxbMDqT3I7kLN4m74k3yd16ZxmlioiJw,4915
|
|
17
|
+
vbos/resources/connector_providers.py,sha256=3-XTa-Rqo2iFVpPRgUZShBRb3dTL-R7SL0lf2lajC6s,2426
|
|
18
|
+
vbos/resources/connectors.py,sha256=2io_N6EOcWBEhEsCH5r7vNY-mD5B4gD1_mpTufHZNFk,17483
|
|
19
|
+
vbos/resources/deployments.py,sha256=QQO2L4dqyVqsPmoddX4A-ICyihGGIH6HN1kn1o8M0pw,8080
|
|
20
|
+
vbos/resources/environments.py,sha256=uReLgd53-HbLg5SGjH8FEth7mtpfPuQdgn1TJ75qrCw,5713
|
|
21
|
+
vbos/resources/flow_templates.py,sha256=WRiuvEnSKWa5HamnADXkY-fBtIffSEM5eYKeMRcCsKc,2351
|
|
22
|
+
vbos/resources/flows.py,sha256=Yyu7xUH22tQlNklcC_5FvKX-b5hTZQLgnkTsZweKFeY,15632
|
|
23
|
+
vbos/resources/governed_workspaces.py,sha256=_ubnUTGsyd1Cw74NhIUlRx6wJhAjjT4Ohlx_DRikDC0,11183
|
|
24
|
+
vbos/resources/keys.py,sha256=RkRPqmgkwLSzJ0JiGnDVBJ2Zqi397X1yUisItWZd0IU,7339
|
|
25
|
+
vbos/resources/members.py,sha256=HQKzSporCu05MduyHZimVvkbu_TuFKTaCx-n_ku3Q0s,4783
|
|
26
|
+
vbos/resources/named_sets.py,sha256=jGKMPCUejxKX_k4DiFa5x6xfVbJEssyq6w31ssTILa0,5201
|
|
27
|
+
vbos/resources/notifications.py,sha256=G_2gBIJrkV0n9qQY7UnNKtG3-DqxFq2_0e0rG47N9ao,2926
|
|
28
|
+
vbos/resources/org.py,sha256=K0p-EPTW0Ar8s7YGpzt_mVTiD0Dt-M6zt-ZcBHggyk0,5220
|
|
29
|
+
vbos/resources/projects.py,sha256=YcUCHXCWIsdYhOApiqzGhadUEpfKr-WnTfNXtVeQBF0,7196
|
|
30
|
+
vbos/resources/service_accounts.py,sha256=rzTSS_iYY-G-TfLiBt_1OE_W9Cry7Ruydecq6-XqrXk,4157
|
|
31
|
+
vbos/resources/templates.py,sha256=mqNQYj3wktfBizZSeB-q8iBIg8-sVSjrjUCGkv8_LRY,2879
|
|
32
|
+
vbos/resources/users.py,sha256=-45njunQOZheHNHNrxbViVRGQHN1fQJ3KyI3prqmzJM,1814
|
|
33
|
+
vbos/resources/webhooks.py,sha256=HBWRhef8qW1kfUp6UIQCqzMVmEEqUit3nb0GsB7CYpE,6808
|
|
34
|
+
vbos/resources/workspaces.py,sha256=prCWxuFeSmMf6noAhcD2pddoOK5ZMV_swkTyaBJd594,6324
|
|
35
|
+
vbos_cli/__init__.py,sha256=vimvws_sGXTa8Hj3u-mfsBFvzpJH2ZKgYntWj86NIDY,109
|
|
36
|
+
vbos_cli/__main__.py,sha256=uszDTQhxHgYhxbkFJNYVE15FzKE_pmEbwehL7bxYlFA,77
|
|
37
|
+
vbos_cli/cli.py,sha256=pqDwe9N-ZTVP2hkEYQ3koMRAm-tt4-TJtIDiu6XZPCQ,7511
|
|
38
|
+
vbos_cli/client.py,sha256=ksIJdIR52DWc4r_w_JqS4aAUkTY4Cy7QN5IOIIhcaTU,6800
|
|
39
|
+
vbos_cli/config.py,sha256=azoj1wuvz6rwHv12FlRZay8cd8-3DfhB-T3XqQgsxcc,2473
|
|
40
|
+
vbos_cli/errors.py,sha256=v0XStV-RtDODTgnBzHc-awzSX5PkcDYmOEyLcQW6Mug,1142
|
|
41
|
+
vbos_cli/formatters.py,sha256=2xqFdSP4a7ueRRm4WQLH-ipL1nuSiatQ8j8HcxEpNDE,8337
|
|
42
|
+
vbos_cli/local_bridge.py,sha256=ocN8WkV32MpD2sm4qoQW0t9jLynahhJ_Sy0RK37Syo8,7219
|
|
43
|
+
vbos_cli/output.py,sha256=oB7HZEqlCcdnATe-rcN7O1ygq6QPl6MjQLa0XOEKvOU,2509
|
|
44
|
+
vbos_cli/profiles.py,sha256=8yuycwFoxpJ2a-z6mdu381O3WNOG-12CuckwgnA5AFg,414
|
|
45
|
+
vbos_cli/commands/__init__.py,sha256=gQ6tnU0Rvm0-ESWFUBU-KDl5dpNOpUTG509hXOQQjwY,27
|
|
46
|
+
vbos_cli/commands/account.py,sha256=qOyEhuM8f6-xUSRrnRKokeNKV8ONx2c9RVd1Sgf-zjo,3712
|
|
47
|
+
vbos_cli/commands/alert_rules.py,sha256=8jLKTqLzpvS0oXqB8fV_yF13NHQ8Wwh9JX9gI6R9mco,5789
|
|
48
|
+
vbos_cli/commands/analytics.py,sha256=ZFGDI_Ceow601ppfG6myJH7JuXjj0vWOI63gkvEMNjc,1474
|
|
49
|
+
vbos_cli/commands/audit_log.py,sha256=WjN_ncPKLPorxRr0iOb2IYavnGxuAubSOz-ua6KgUTQ,3223
|
|
50
|
+
vbos_cli/commands/auth.py,sha256=gOoZxgx8lZNO4xmfkBVVJUv-GoOnX4Ic8p2-gTCw7Xo,12567
|
|
51
|
+
vbos_cli/commands/boundaries.py,sha256=_GHoQYkpqP4QJmui3jEQMod9cd3rKZ2rUOpFPWYZ9Cw,15735
|
|
52
|
+
vbos_cli/commands/certify.py,sha256=OYedk4qjFn4E4DKwCwB_bYv81E7eNDed-wwXhXnn9kU,9791
|
|
53
|
+
vbos_cli/commands/completions.py,sha256=o_kNn82tedJPa6oe5hiFMAbnq3k4UHwIxuaRH3bkQHQ,1010
|
|
54
|
+
vbos_cli/commands/config_cmd.py,sha256=zY7wFUsbEeO4xT36GumInO3cu2sSW8GztX4ODXWBHmw,3080
|
|
55
|
+
vbos_cli/commands/connectors.py,sha256=CMsiOT98PPw-KnQ53ZEmJorFSEl9npR3NR_DAIUzgJs,18513
|
|
56
|
+
vbos_cli/commands/deployments.py,sha256=m6JYZePnSvmFP9c9EMPyBZi14a2MLhV9-N57u0BuFhY,7800
|
|
57
|
+
vbos_cli/commands/environments.py,sha256=SrZ5wCjjefnIScOhbEa-Teit_9tev0j-Y4k-Mfz-Myo,6106
|
|
58
|
+
vbos_cli/commands/evaluations.py,sha256=_YhflMP4GHYRxNdW8tBIGXr4w_gn7zngehy1rpfFhOU,7062
|
|
59
|
+
vbos_cli/commands/flows.py,sha256=4nPolbJxBkEyInXqJ5xZWJAzCbx1es5qsvB9sM8c4pA,23157
|
|
60
|
+
vbos_cli/commands/governed_workspaces.py,sha256=K__7yt9Gi8Wwg_HwEwQyIHtr-KJ_hjsGIStZ1yjfgy8,7133
|
|
61
|
+
vbos_cli/commands/keys.py,sha256=JFNundyX9WTscq8oyCO5yPnPn5gkZNyE0tWw4eCw-UA,6552
|
|
62
|
+
vbos_cli/commands/members.py,sha256=dlcVMzPCrNDL_qSnolhm7mj5d7J4_nK5YmBTESzjUwg,5101
|
|
63
|
+
vbos_cli/commands/named_sets.py,sha256=kAyOwJzR1VRqwlCgtLXkjzrco-JMLvg3Xyw5lcEdvw8,5630
|
|
64
|
+
vbos_cli/commands/notifications.py,sha256=oJ7Ntnbs6QVkdyPojLZZtGqRXLDkDs654IFQx9CfWKU,3482
|
|
65
|
+
vbos_cli/commands/org.py,sha256=jbxgn2wkR8tgUhqSSZGGARq7Vu-n5Ze1yru-eanIQMs,2769
|
|
66
|
+
vbos_cli/commands/org_mgmt.py,sha256=_FmZAJntWPIGgPTp5LKIwde1jnRKRytGOc7UxFGzDoI,2895
|
|
67
|
+
vbos_cli/commands/projects.py,sha256=e3qXneyNBuEvq4cWVkgfi2eHfw0oe_DH7Q4Dij6r6Ds,8967
|
|
68
|
+
vbos_cli/commands/replay.py,sha256=XqgfrmZTygtz5MTv44hrzgGxt5aQ0CBcIsx_YzlYGZw,1134
|
|
69
|
+
vbos_cli/commands/templates.py,sha256=QDwdVh8uGyqjkRFtR0Z08-sn2lBFvc7N_ye8qOCSht4,3284
|
|
70
|
+
vbos_cli/commands/verify.py,sha256=aq_jLukUBTgY9vf9UrCU91ZalDVdWFwVHuQSqsuKlWc,4326
|
|
71
|
+
vbos_cli/commands/webhooks.py,sha256=zfDZJD2swGZ5y1qZPjtN0wJNu_bcF3j_R2MrvyUxd1I,10450
|
|
72
|
+
vbos_cli/commands/workspaces.py,sha256=QygShYE-r1rzSS37WilJDEOUI1bVoeDkh5sWB1qGRu0,4614
|
|
73
|
+
vbos_cli/credentials/__init__.py,sha256=7KYPgtc0f3rqedCJsIwVx_SV-5YY5__KiipfiMLND4o,35
|
|
74
|
+
vbos_cli/credentials/file.py,sha256=hotXrRzywNIvlXXze9IKsSLBrS0VyhFJtZ-kJaEDsBM,4664
|
|
75
|
+
vbos_cli/credentials/keychain.py,sha256=reeSuOwJUJIRxE202BsB_8DMjRJpXHbppeo4H0N3_eU,1360
|
|
76
|
+
vbos_cli/credentials/migration.py,sha256=9aJbBklmiX2gFee9ZVShqfFDEpUoSqz_mSfz16Btk2o,1255
|
|
77
|
+
vbos_cli/credentials/store.py,sha256=YlzR-zP1B1cc80xnCvdlUpwNLPB2aGfNHKF5O4q92s0,3732
|
|
78
|
+
vb_os-0.1.0.dist-info/METADATA,sha256=Lc49bH7eJ5rnSvHTXRknFsu1fkCgFxCkkm4dAqYWZR4,14918
|
|
79
|
+
vb_os-0.1.0.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
|
|
80
|
+
vb_os-0.1.0.dist-info/entry_points.txt,sha256=GjXI4O3hOCI6zq6Jzo1PJaNjz-2Kkq-yHHk3pdUjsqc,43
|
|
81
|
+
vb_os-0.1.0.dist-info/licenses/LICENSE,sha256=oamqAH3dCQ3s0Sm57KXbA7Nu2mG8TEU98gLMHDGXs44,274
|
|
82
|
+
vb_os-0.1.0.dist-info/RECORD,,
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
Copyright (c) 2024-2026 MNC Labs, Inc. All rights reserved.
|
|
2
|
+
|
|
3
|
+
This software is proprietary and confidential. Unauthorized copying, modification,
|
|
4
|
+
distribution, or use of this software, via any medium, is strictly prohibited.
|
|
5
|
+
|
|
6
|
+
For licensing inquiries, contact: legal@vb-os.org
|