lockally 0.3.2 → 0.3.3
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 +4 -4
- data/README.md +4 -4
- data/docs/AdminApi.md +3 -3
- data/docs/AdminsApi.md +1 -1
- data/docs/AgentsApi.md +2 -2
- data/docs/AiApi.md +1 -1
- data/docs/AliasesApi.md +1 -1
- data/docs/ApiKeysApi.md +3 -3
- data/docs/DomainsApi.md +3 -3
- data/docs/MailboxesApi.md +6 -6
- data/docs/SendApi.md +4 -4
- data/docs/TenantApi.md +1 -1
- data/docs/TestApi.md +1 -1
- data/docs/WebhooksApi.md +3 -3
- data/lib/lockally/api/admin_api.rb +6 -6
- data/lib/lockally/api/admins_api.rb +2 -2
- data/lib/lockally/api/agents_api.rb +4 -4
- data/lib/lockally/api/ai_api.rb +2 -2
- data/lib/lockally/api/aliases_api.rb +2 -2
- data/lib/lockally/api/api_keys_api.rb +6 -6
- data/lib/lockally/api/domains_api.rb +6 -6
- data/lib/lockally/api/mailboxes_api.rb +12 -12
- data/lib/lockally/api/send_api.rb +8 -8
- data/lib/lockally/api/tenant_api.rb +2 -2
- data/lib/lockally/api/test_api.rb +2 -2
- data/lib/lockally/api/webhooks_api.rb +6 -6
- data/lib/lockally/version.rb +1 -1
- data/spec/api/admin_api_spec.rb +3 -3
- data/spec/api/admins_api_spec.rb +1 -1
- data/spec/api/agents_api_spec.rb +2 -2
- data/spec/api/ai_api_spec.rb +1 -1
- data/spec/api/aliases_api_spec.rb +1 -1
- data/spec/api/api_keys_api_spec.rb +3 -3
- data/spec/api/domains_api_spec.rb +3 -3
- data/spec/api/mailboxes_api_spec.rb +6 -6
- data/spec/api/send_api_spec.rb +4 -4
- data/spec/api/tenant_api_spec.rb +1 -1
- data/spec/api/test_api_spec.rb +1 -1
- data/spec/api/webhooks_api_spec.rb +3 -3
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6bceffb53f9911996a34e7ec90909f0b411b470417a6e7bc1b83915fc98bde18
|
|
4
|
+
data.tar.gz: 43417dce1867c643b299072ffe07ff9109c763ec72d240011cc25ce0ceea8b09
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: cef9ac94498466f846d907d93778968d2d151974162ccc891746f707a77799b3e2562a75bf7b22504763e5d90d92e5ae3a0a4d6069d286c33f0fa137d700efb9
|
|
7
|
+
data.tar.gz: 255404b54ec8dfc336a3c2d794e376d4ea0f21cc73cf996860a15043058b94cb65e00d26fd79dd81c3594456c041cae90080280c8a25ab853edbdebbf845f26e
|
data/README.md
CHANGED
|
@@ -35,7 +35,7 @@ Insufficient scope returns `403` with the required scope name in `detail`.
|
|
|
35
35
|
This SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
|
|
36
36
|
|
|
37
37
|
- API version: 0.1.0
|
|
38
|
-
- Package version: 0.3.
|
|
38
|
+
- Package version: 0.3.3
|
|
39
39
|
- Generator version: 7.23.0
|
|
40
40
|
- Build package: org.openapitools.codegen.languages.RubyClientCodegen
|
|
41
41
|
|
|
@@ -52,16 +52,16 @@ gem build lockally.gemspec
|
|
|
52
52
|
Then either install the gem locally:
|
|
53
53
|
|
|
54
54
|
```shell
|
|
55
|
-
gem install ./lockally-0.3.
|
|
55
|
+
gem install ./lockally-0.3.3.gem
|
|
56
56
|
```
|
|
57
57
|
|
|
58
|
-
(for development, run `gem install --dev ./lockally-0.3.
|
|
58
|
+
(for development, run `gem install --dev ./lockally-0.3.3.gem` to install the development dependencies)
|
|
59
59
|
|
|
60
60
|
or publish the gem to a gem hosting service, e.g. [RubyGems](https://rubygems.org/).
|
|
61
61
|
|
|
62
62
|
Finally add this to the Gemfile:
|
|
63
63
|
|
|
64
|
-
gem 'lockally', '~> 0.3.
|
|
64
|
+
gem 'lockally', '~> 0.3.3'
|
|
65
65
|
|
|
66
66
|
### Install from Git
|
|
67
67
|
|
data/docs/AdminApi.md
CHANGED
|
@@ -15,7 +15,7 @@ All URIs are relative to *https://api.lockally.com*
|
|
|
15
15
|
|
|
16
16
|
Tenant-admin email+password login
|
|
17
17
|
|
|
18
|
-
Exchanges an admin's email + password for a session token. The web console at `app.lockally.com` posts this on form submission and stores the returned token in an httpOnly cookie. **No enumeration leak.** Wrong-email and wrong-password both return the same 401 with title \"Invalid credentials\". The argon2id verify runs even on lookup miss (well, structurally
|
|
18
|
+
Exchanges an admin's email + password for a session token. The web console at `app.lockally.com` posts this on form submission and stores the returned token in an httpOnly cookie. **No enumeration leak.** Wrong-email and wrong-password both return the same 401 with title \"Invalid credentials\". The argon2id verify runs even on lookup miss (well, structurally, the lookup fails fast but the response shape is constant) so timing leaks are bounded. Tokens are prefixed `adm_sess_` and valid for 7 days. Use as the `Authorization: Bearer` value on all subsequent calls.
|
|
19
19
|
|
|
20
20
|
### Examples
|
|
21
21
|
|
|
@@ -79,7 +79,7 @@ No authorization required
|
|
|
79
79
|
|
|
80
80
|
Invalidate the current admin session
|
|
81
81
|
|
|
82
|
-
Deletes the session row from the database. Idempotent
|
|
82
|
+
Deletes the session row from the database. Idempotent, calling logout on an already-invalid token returns 204 anyway.
|
|
83
83
|
|
|
84
84
|
### Examples
|
|
85
85
|
|
|
@@ -144,7 +144,7 @@ nil (empty response body)
|
|
|
144
144
|
|
|
145
145
|
Get the current admin + tenant
|
|
146
146
|
|
|
147
|
-
Returns the admin profile + tenant for the session token presented in `Authorization: Bearer`. Used by the web console's layout load function to populate the sidebar. Returns 403 if called with an API key (lk_live_*) bearer
|
|
147
|
+
Returns the admin profile + tenant for the session token presented in `Authorization: Bearer`. Used by the web console's layout load function to populate the sidebar. Returns 403 if called with an API key (lk_live_*) bearer, admin context only exists for session tokens.
|
|
148
148
|
|
|
149
149
|
### Examples
|
|
150
150
|
|
data/docs/AdminsApi.md
CHANGED
|
@@ -217,7 +217,7 @@ This endpoint does not need any parameter.
|
|
|
217
217
|
|
|
218
218
|
Update an admin
|
|
219
219
|
|
|
220
|
-
Supply at least one of `password`, `display_name`, `role`, `disabled`. **Safety rails.** A session bearer (adm_sess_*) cannot disable itself
|
|
220
|
+
Supply at least one of `password`, `display_name`, `role`, `disabled`. **Safety rails.** A session bearer (adm_sess_*) cannot disable itself, use another admin or an API key (which bypasses the self-rail). Disabling the last active admin returns 409 to prevent orphaning the tenant from its console.
|
|
221
221
|
|
|
222
222
|
### Examples
|
|
223
223
|
|
data/docs/AgentsApi.md
CHANGED
|
@@ -235,7 +235,7 @@ end
|
|
|
235
235
|
|
|
236
236
|
Grant a mailbox to a key
|
|
237
237
|
|
|
238
|
-
Body: {\"mailbox\": \"email or id\"}. Refused (422) for mailboxes with agent access disabled or an active E2E encryption key
|
|
238
|
+
Body: {\"mailbox\": \"email or id\"}. Refused (422) for mailboxes with agent access disabled or an active E2E encryption key, the server cannot read E2E mailboxes.
|
|
239
239
|
|
|
240
240
|
### Examples
|
|
241
241
|
|
|
@@ -654,7 +654,7 @@ end
|
|
|
654
654
|
|
|
655
655
|
Reply in-thread (agent stream)
|
|
656
656
|
|
|
657
|
-
The server builds In-Reply-To/References and defaults recipients + subject from the conversation
|
|
657
|
+
The server builds In-Reply-To/References and defaults recipients + subject from the conversation, a minimal call is {\"text\": \"...\"}. Guarded by the reply-loop detector (≥5 outbound/10min → 429 + agent.loop_detected). Idempotency-Key required.
|
|
658
658
|
|
|
659
659
|
### Examples
|
|
660
660
|
|
data/docs/AiApi.md
CHANGED
|
@@ -16,7 +16,7 @@ All URIs are relative to *https://api.lockally.com*
|
|
|
16
16
|
|
|
17
17
|
LLM-classify a thread
|
|
18
18
|
|
|
19
|
-
Returns {intent, urgency, summary, suggested_action} via the tenant's AI tier (BYOK or prepaid units
|
|
19
|
+
Returns {intent, urgency, summary, suggested_action} via the tenant's AI tier (BYOK or prepaid units, see /v1/ai-config). Cached per thread state: unchanged threads return the cache free; ?refresh=true forces a re-run. A failed model call charges nothing. 402 when the AI tier is off.
|
|
20
20
|
|
|
21
21
|
### Examples
|
|
22
22
|
|
data/docs/AliasesApi.md
CHANGED
data/docs/ApiKeysApi.md
CHANGED
|
@@ -15,7 +15,7 @@ All URIs are relative to *https://api.lockally.com*
|
|
|
15
15
|
|
|
16
16
|
Create an API key
|
|
17
17
|
|
|
18
|
-
Provisions a fresh API key for the calling tenant. **The full `secret` is included in this response ONLY
|
|
18
|
+
Provisions a fresh API key for the calling tenant. **The full `secret` is included in this response ONLY**, store it immediately. The cleartext secret is not recoverable from the argon2id hash kept server-side; rotate by creating a new key and revoking the old one.
|
|
19
19
|
|
|
20
20
|
### Examples
|
|
21
21
|
|
|
@@ -84,7 +84,7 @@ end
|
|
|
84
84
|
|
|
85
85
|
List API keys
|
|
86
86
|
|
|
87
|
-
Returns all API keys (active and revoked) belonging to the calling tenant. The `secret` is **never** returned
|
|
87
|
+
Returns all API keys (active and revoked) belonging to the calling tenant. The `secret` is **never** returned, only prefix + metadata.
|
|
88
88
|
|
|
89
89
|
### Examples
|
|
90
90
|
|
|
@@ -150,7 +150,7 @@ This endpoint does not need any parameter.
|
|
|
150
150
|
|
|
151
151
|
Revoke an API key
|
|
152
152
|
|
|
153
|
-
Soft-deletes (sets `revoked_at`) on the named key. The row stays for audit purposes; the key no longer authenticates. You **cannot revoke the key currently being used** to make this call
|
|
153
|
+
Soft-deletes (sets `revoked_at`) on the named key. The row stays for audit purposes; the key no longer authenticates. You **cannot revoke the key currently being used** to make this call, that would lock you out. Use a different `tenant:admin` key.
|
|
154
154
|
|
|
155
155
|
### Examples
|
|
156
156
|
|
data/docs/DomainsApi.md
CHANGED
|
@@ -21,7 +21,7 @@ All URIs are relative to *https://api.lockally.com*
|
|
|
21
21
|
|
|
22
22
|
Register a domain
|
|
23
23
|
|
|
24
|
-
Registers a new domain for the calling tenant. Generates a DKIM keypair and verification token. Returns DNS instructions the tenant must publish under their own DNS (verification TXT, SPF include, DKIM TXT, MX records to `mx1`/`mx2.lockally.com`, DMARC seed). **Idempotent
|
|
24
|
+
Registers a new domain for the calling tenant. Generates a DKIM keypair and verification token. Returns DNS instructions the tenant must publish under their own DNS (verification TXT, SPF include, DKIM TXT, MX records to `mx1`/`mx2.lockally.com`, DMARC seed). **Idempotent**, re-posting the same domain returns the existing record with the same DKIM keys and token (regenerating would break the tenant's published DNS). Returns 200 on idempotent hit, 201 on first create. Returns 409 if the domain is already claimed by a different tenant.
|
|
25
25
|
|
|
26
26
|
### Examples
|
|
27
27
|
|
|
@@ -90,7 +90,7 @@ end
|
|
|
90
90
|
|
|
91
91
|
Delete a domain
|
|
92
92
|
|
|
93
|
-
Removes the domain registration. Refuses with 409 if any mailbox is still attached
|
|
93
|
+
Removes the domain registration. Refuses with 409 if any mailbox is still attached, delete the mailboxes first.
|
|
94
94
|
|
|
95
95
|
### Examples
|
|
96
96
|
|
|
@@ -497,7 +497,7 @@ This endpoint does not need any parameter.
|
|
|
497
497
|
|
|
498
498
|
Force-poll DNS verification
|
|
499
499
|
|
|
500
|
-
Synchronously checks the `_lockally-verify.<domain>` TXT record against the stored verification token. Returns 200 either way: the returned `verified` boolean tells you whether DNS now confirms. Caller polls until `verified: true`.
|
|
500
|
+
Synchronously checks the `_lockally-verify.<domain>` TXT record against the stored verification token. Returns 200 either way: the returned `verified` boolean tells you whether DNS now confirms. Caller polls until `verified: true`. A later version may have the platform auto-polls and fires a `domain.verified` webhook.
|
|
501
501
|
|
|
502
502
|
### Examples
|
|
503
503
|
|
data/docs/MailboxesApi.md
CHANGED
|
@@ -95,7 +95,7 @@ end
|
|
|
95
95
|
|
|
96
96
|
Create a mailbox
|
|
97
97
|
|
|
98
|
-
Creates a mailbox on a tenant-verified domain. If `password` is omitted, lockally generates a 16-char password and returns it in the response
|
|
98
|
+
Creates a mailbox on a tenant-verified domain. If `password` is omitted, lockally generates a 16-char password and returns it in the response, shown once. **Gate.** The mailbox's domain must already be registered AND verified for this tenant (via `/v1/domains` + `/v1/domains/{domain}/verify`). **Idempotent.** Re-posting the same email returns the existing mailbox UNTOUCHED, password is NOT regenerated. To change a password, use PATCH instead.
|
|
99
99
|
|
|
100
100
|
### Examples
|
|
101
101
|
|
|
@@ -232,7 +232,7 @@ nil (empty response body)
|
|
|
232
232
|
|
|
233
233
|
Remove the vacation responder
|
|
234
234
|
|
|
235
|
-
Idempotent
|
|
235
|
+
Idempotent, 204 whether or not a row existed.
|
|
236
236
|
|
|
237
237
|
### Examples
|
|
238
238
|
|
|
@@ -300,7 +300,7 @@ nil (empty response body)
|
|
|
300
300
|
|
|
301
301
|
Download a previously-issued mailbox export
|
|
302
302
|
|
|
303
|
-
Public endpoint (no Authorization header). Validates the one-shot token from the URL, marks it used, and streams an mbox file. Second GET with the same token returns 404
|
|
303
|
+
Public endpoint (no Authorization header). Validates the one-shot token from the URL, marks it used, and streams an mbox file. Second GET with the same token returns 404, tokens are single-use.
|
|
304
304
|
|
|
305
305
|
### Examples
|
|
306
306
|
|
|
@@ -366,7 +366,7 @@ No authorization required
|
|
|
366
366
|
|
|
367
367
|
Request a mailbox export
|
|
368
368
|
|
|
369
|
-
Issues a one-shot \"presigned\" download URL for the mailbox's content in mbox format. The URL works without an Authorization header
|
|
369
|
+
Issues a one-shot \"presigned\" download URL for the mailbox's content in mbox format. The URL works without an Authorization header, the token in the query string is the authz. TTL is 5 minutes; the token is consumed on first GET. **v1 caveat:** the synthesized mbox only contains outbound mail (sent mail only). A later version will cover received mail for full inbox + folder structure + flags. The endpoint contract stays unchanged. **Scope changed:** this used to accept `mailboxes:read`. It takes any mailbox in the tenant and returns that mailbox's mail, so it now requires `tenant:admin`, matching `POST /v1/ediscovery/export`. A key scoped `mailboxes:read` gets 403 and has to be reissued; admin console sessions are unaffected.
|
|
370
370
|
|
|
371
371
|
### Examples
|
|
372
372
|
|
|
@@ -571,7 +571,7 @@ end
|
|
|
571
571
|
|
|
572
572
|
List mailboxes
|
|
573
573
|
|
|
574
|
-
Returns mailboxes under the calling tenant
|
|
574
|
+
Returns mailboxes under the calling tenant, active and soft-deleted. `?limit=N` between 1 and 200 (default 50).
|
|
575
575
|
|
|
576
576
|
### Examples
|
|
577
577
|
|
|
@@ -843,7 +843,7 @@ nil (empty response body)
|
|
|
843
843
|
|
|
844
844
|
Set the vacation responder
|
|
845
845
|
|
|
846
|
-
Upsert
|
|
846
|
+
Upsert, same endpoint creates or replaces the rule. Clears `synced_at`; the rule is staged until a later sync pushes it to the mail server.
|
|
847
847
|
|
|
848
848
|
### Examples
|
|
849
849
|
|
data/docs/SendApi.md
CHANGED
|
@@ -153,7 +153,7 @@ end
|
|
|
153
153
|
|
|
154
154
|
Aggregate delivery stats
|
|
155
155
|
|
|
156
|
-
Counts by delivery outcome (delivered/bounced/deferred/complaint) plus rates over a window, from the delivery-event store. Privacy-first: this reflects what receiving servers reported, NOT whether a human opened the mail
|
|
156
|
+
Counts by delivery outcome (delivered/bounced/deferred/complaint) plus rates over a window, from the delivery-event store. Privacy-first: this reflects what receiving servers reported, NOT whether a human opened the mail, Lockally does no open/click tracking.
|
|
157
157
|
|
|
158
158
|
### Examples
|
|
159
159
|
|
|
@@ -228,7 +228,7 @@ end
|
|
|
228
228
|
|
|
229
229
|
List outbound messages
|
|
230
230
|
|
|
231
|
-
Returns recent outbound messages for the calling tenant, sorted newest first.
|
|
231
|
+
Returns recent outbound messages for the calling tenant, sorted newest first.
|
|
232
232
|
|
|
233
233
|
### Examples
|
|
234
234
|
|
|
@@ -309,7 +309,7 @@ end
|
|
|
309
309
|
|
|
310
310
|
Send an email
|
|
311
311
|
|
|
312
|
-
Submits an email for delivery via lockally. Returns 202 immediately once the message is accepted into lockally's queue; the actual SMTP submission to the recipient is async. Track delivery via `GET /v1/messages/{id}` or webhook subscriptions for `delivery.delivered` / `delivery.bounced` / `delivery.complaint`. **Idempotency-Key required.**
|
|
312
|
+
Submits an email for delivery via lockally. Returns 202 immediately once the message is accepted into lockally's queue; the actual SMTP submission to the recipient is async. Track delivery via `GET /v1/messages/{id}` or webhook subscriptions for `delivery.delivered` / `delivery.bounced` / `delivery.complaint`. **Idempotency-Key required.** Any unique string per send, 24-hour dedupe window. Repeated calls with the same key return byte-exact the original response and do NOT create a duplicate message. **Sender authorisation.** `from` must be an address the calling tenant owns on a verified domain. A mailbox always qualifies. On business and combined accounts an **alias** qualifies too, so a send-only address such as `no-reply@` need not be a billed seat. An alias on an unverified domain, or one belonging to another account, is refused with `403`. A catch-all creates no aliases and so grants no sending rights. **Rate cap.** Per-tenant `rate_cap_per_min` (returned on `/v1/tenant`) is enforced, 429 with `Retry-After: 60` once tripped. **Recipient warning.** Over 25 total recipients (To+Cc+Bcc) sets a `warning` field in the response, large fan-outs queue noticeably at scale. Hard cap is 100/send. **Not every success is a 202.** Check the status code, not just the body. A `200` means nothing was queued: either every recipient was already suppressed, or the call used a test key and the send was simulated. Both are successes, and neither produces a real delivery. See the `200` response below. **Warm-up headers.** While the platform is in its outbound warm-up ramp, accepted sends carry `X-Warmup-Day`, `X-Warmup-Daily-Cap` and `X-Warmup-Used-Today`. They describe a platform-wide cap shared by every tenant, not your own allowance, and they disappear once the ramp finishes. Hitting the cap returns 429.
|
|
313
313
|
|
|
314
314
|
### Examples
|
|
315
315
|
|
|
@@ -380,7 +380,7 @@ end
|
|
|
380
380
|
|
|
381
381
|
Send a batch of emails
|
|
382
382
|
|
|
383
|
-
Sends up to 500 messages in one call. Each is validated and enqueued independently
|
|
383
|
+
Sends up to 500 messages in one call. Each is validated and enqueued independently, a bad message fails only its own slot (partial success, HTTP 200). One `Idempotency-Key` header covers the batch; per-message keys are derived as `<key>:<index>`.
|
|
384
384
|
|
|
385
385
|
### Examples
|
|
386
386
|
|
data/docs/TenantApi.md
CHANGED
|
@@ -80,7 +80,7 @@ This endpoint does not need any parameter.
|
|
|
80
80
|
|
|
81
81
|
Usage snapshot
|
|
82
82
|
|
|
83
|
-
Returns the tenant's current usage + cap consumption. Designed for poll-based alerting on the integrator side (e.g. \"warn when daily quota is 80% used\").
|
|
83
|
+
Returns the tenant's current usage + cap consumption. Designed for poll-based alerting on the integrator side (e.g. \"warn when daily quota is 80% used\"). Computed live on request, so there is no cache, so callers should poll at most once per minute.
|
|
84
84
|
|
|
85
85
|
### Examples
|
|
86
86
|
|
data/docs/TestApi.md
CHANGED
|
@@ -13,7 +13,7 @@ All URIs are relative to *https://api.lockally.com*
|
|
|
13
13
|
|
|
14
14
|
Simulate an inbound email (test keys only)
|
|
15
15
|
|
|
16
|
-
Runs a synthetic message through the REAL indexing pipeline
|
|
16
|
+
Runs a synthetic message through the REAL indexing pipeline, thread adoption, deterministic extraction (incl. injection_risk), and the message.received webhook, so the whole agent loop is testable without a real domain or MTA. Requires an lk_test_* key (create with {\"test\": true} on POST /v1/api-keys). Body: {mailbox, from, subject, text, in_reply_to?, references?}.
|
|
17
17
|
|
|
18
18
|
### Examples
|
|
19
19
|
|
data/docs/WebhooksApi.md
CHANGED
|
@@ -16,7 +16,7 @@ All URIs are relative to *https://api.lockally.com*
|
|
|
16
16
|
|
|
17
17
|
Create a webhook
|
|
18
18
|
|
|
19
|
-
Subscribes a URL to one or more event types. Returns the `signing_secret` ONCE in the response
|
|
19
|
+
Subscribes a URL to one or more event types. Returns the `signing_secret` ONCE in the response, store it immediately. Every outbound POST is signed: X-Lockally-Signature: t=<unix>,v1=<hex(hmac_sha256(secret, t + \".\" + body))> Verify on your end using HMAC-SHA256 with a 5-minute timestamp window (replay protection). A reference verifier ships in [Signature verification](https://developers.lockally.com/webhooks/verification/). Event names: see the [event catalogue](https://developers.lockally.com/webhooks/events/).
|
|
20
20
|
|
|
21
21
|
### Examples
|
|
22
22
|
|
|
@@ -153,7 +153,7 @@ nil (empty response body)
|
|
|
153
153
|
|
|
154
154
|
List webhooks
|
|
155
155
|
|
|
156
|
-
Returns the calling tenant's webhook subscriptions. Never returns the signing secret
|
|
156
|
+
Returns the calling tenant's webhook subscriptions. Never returns the signing secret, only metadata.
|
|
157
157
|
|
|
158
158
|
### Examples
|
|
159
159
|
|
|
@@ -219,7 +219,7 @@ This endpoint does not need any parameter.
|
|
|
219
219
|
|
|
220
220
|
Update a webhook
|
|
221
221
|
|
|
222
|
-
Supply at least one of `url`, `events`, `paused`. Setting `paused` to `false` ALSO resets `consecutive_failures` to 0
|
|
222
|
+
Supply at least one of `url`, `events`, `paused`. Setting `paused` to `false` ALSO resets `consecutive_failures` to 0, re-arms the 50-failure auto-pause counter.
|
|
223
223
|
|
|
224
224
|
### Examples
|
|
225
225
|
|
|
@@ -20,7 +20,7 @@ module Lockally
|
|
|
20
20
|
@api_client = api_client
|
|
21
21
|
end
|
|
22
22
|
# Tenant-admin email+password login
|
|
23
|
-
# Exchanges an admin's email + password for a session token. The web console at `app.lockally.com` posts this on form submission and stores the returned token in an httpOnly cookie. **No enumeration leak.** Wrong-email and wrong-password both return the same 401 with title \"Invalid credentials\". The argon2id verify runs even on lookup miss (well, structurally
|
|
23
|
+
# Exchanges an admin's email + password for a session token. The web console at `app.lockally.com` posts this on form submission and stores the returned token in an httpOnly cookie. **No enumeration leak.** Wrong-email and wrong-password both return the same 401 with title \"Invalid credentials\". The argon2id verify runs even on lookup miss (well, structurally, the lookup fails fast but the response shape is constant) so timing leaks are bounded. Tokens are prefixed `adm_sess_` and valid for 7 days. Use as the `Authorization: Bearer` value on all subsequent calls.
|
|
24
24
|
# @param admin_login_request [AdminLoginRequest]
|
|
25
25
|
# @param [Hash] opts the optional parameters
|
|
26
26
|
# @return [AdminLogin200Response]
|
|
@@ -30,7 +30,7 @@ module Lockally
|
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
# Tenant-admin email+password login
|
|
33
|
-
# Exchanges an admin's email + password for a session token. The web console at `app.lockally.com` posts this on form submission and stores the returned token in an httpOnly cookie. **No enumeration leak.** Wrong-email and wrong-password both return the same 401 with title \"Invalid credentials\". The argon2id verify runs even on lookup miss (well, structurally
|
|
33
|
+
# Exchanges an admin's email + password for a session token. The web console at `app.lockally.com` posts this on form submission and stores the returned token in an httpOnly cookie. **No enumeration leak.** Wrong-email and wrong-password both return the same 401 with title \"Invalid credentials\". The argon2id verify runs even on lookup miss (well, structurally, the lookup fails fast but the response shape is constant) so timing leaks are bounded. Tokens are prefixed `adm_sess_` and valid for 7 days. Use as the `Authorization: Bearer` value on all subsequent calls.
|
|
34
34
|
# @param admin_login_request [AdminLoginRequest]
|
|
35
35
|
# @param [Hash] opts the optional parameters
|
|
36
36
|
# @return [Array<(AdminLogin200Response, Integer, Hash)>] AdminLogin200Response data, response status code and response headers
|
|
@@ -88,7 +88,7 @@ module Lockally
|
|
|
88
88
|
end
|
|
89
89
|
|
|
90
90
|
# Invalidate the current admin session
|
|
91
|
-
# Deletes the session row from the database. Idempotent
|
|
91
|
+
# Deletes the session row from the database. Idempotent, calling logout on an already-invalid token returns 204 anyway.
|
|
92
92
|
# @param [Hash] opts the optional parameters
|
|
93
93
|
# @return [nil]
|
|
94
94
|
def admin_logout(opts = {})
|
|
@@ -97,7 +97,7 @@ module Lockally
|
|
|
97
97
|
end
|
|
98
98
|
|
|
99
99
|
# Invalidate the current admin session
|
|
100
|
-
# Deletes the session row from the database. Idempotent
|
|
100
|
+
# Deletes the session row from the database. Idempotent, calling logout on an already-invalid token returns 204 anyway.
|
|
101
101
|
# @param [Hash] opts the optional parameters
|
|
102
102
|
# @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
|
|
103
103
|
def admin_logout_with_http_info(opts = {})
|
|
@@ -145,7 +145,7 @@ module Lockally
|
|
|
145
145
|
end
|
|
146
146
|
|
|
147
147
|
# Get the current admin + tenant
|
|
148
|
-
# Returns the admin profile + tenant for the session token presented in `Authorization: Bearer`. Used by the web console's layout load function to populate the sidebar. Returns 403 if called with an API key (lk_live_*) bearer
|
|
148
|
+
# Returns the admin profile + tenant for the session token presented in `Authorization: Bearer`. Used by the web console's layout load function to populate the sidebar. Returns 403 if called with an API key (lk_live_*) bearer, admin context only exists for session tokens.
|
|
149
149
|
# @param [Hash] opts the optional parameters
|
|
150
150
|
# @return [GetCurrentAdmin200Response]
|
|
151
151
|
def get_current_admin(opts = {})
|
|
@@ -154,7 +154,7 @@ module Lockally
|
|
|
154
154
|
end
|
|
155
155
|
|
|
156
156
|
# Get the current admin + tenant
|
|
157
|
-
# Returns the admin profile + tenant for the session token presented in `Authorization: Bearer`. Used by the web console's layout load function to populate the sidebar. Returns 403 if called with an API key (lk_live_*) bearer
|
|
157
|
+
# Returns the admin profile + tenant for the session token presented in `Authorization: Bearer`. Used by the web console's layout load function to populate the sidebar. Returns 403 if called with an API key (lk_live_*) bearer, admin context only exists for session tokens.
|
|
158
158
|
# @param [Hash] opts the optional parameters
|
|
159
159
|
# @return [Array<(GetCurrentAdmin200Response, Integer, Hash)>] GetCurrentAdmin200Response data, response status code and response headers
|
|
160
160
|
def get_current_admin_with_http_info(opts = {})
|
|
@@ -206,7 +206,7 @@ module Lockally
|
|
|
206
206
|
end
|
|
207
207
|
|
|
208
208
|
# Update an admin
|
|
209
|
-
# Supply at least one of `password`, `display_name`, `role`, `disabled`. **Safety rails.** A session bearer (adm_sess_*) cannot disable itself
|
|
209
|
+
# Supply at least one of `password`, `display_name`, `role`, `disabled`. **Safety rails.** A session bearer (adm_sess_*) cannot disable itself, use another admin or an API key (which bypasses the self-rail). Disabling the last active admin returns 409 to prevent orphaning the tenant from its console.
|
|
210
210
|
# @param id [String]
|
|
211
211
|
# @param update_admin_request [UpdateAdminRequest]
|
|
212
212
|
# @param [Hash] opts the optional parameters
|
|
@@ -217,7 +217,7 @@ module Lockally
|
|
|
217
217
|
end
|
|
218
218
|
|
|
219
219
|
# Update an admin
|
|
220
|
-
# Supply at least one of `password`, `display_name`, `role`, `disabled`. **Safety rails.** A session bearer (adm_sess_*) cannot disable itself
|
|
220
|
+
# Supply at least one of `password`, `display_name`, `role`, `disabled`. **Safety rails.** A session bearer (adm_sess_*) cannot disable itself, use another admin or an API key (which bypasses the self-rail). Disabling the last active admin returns 409 to prevent orphaning the tenant from its console.
|
|
221
221
|
# @param id [String]
|
|
222
222
|
# @param update_admin_request [UpdateAdminRequest]
|
|
223
223
|
# @param [Hash] opts the optional parameters
|
|
@@ -227,7 +227,7 @@ module Lockally
|
|
|
227
227
|
end
|
|
228
228
|
|
|
229
229
|
# Grant a mailbox to a key
|
|
230
|
-
# Body: {\"mailbox\": \"email or id\"}. Refused (422) for mailboxes with agent access disabled or an active E2E encryption key
|
|
230
|
+
# Body: {\"mailbox\": \"email or id\"}. Refused (422) for mailboxes with agent access disabled or an active E2E encryption key, the server cannot read E2E mailboxes.
|
|
231
231
|
# @param key_id [String]
|
|
232
232
|
# @param [Hash] opts the optional parameters
|
|
233
233
|
# @return [MailboxGrant]
|
|
@@ -237,7 +237,7 @@ module Lockally
|
|
|
237
237
|
end
|
|
238
238
|
|
|
239
239
|
# Grant a mailbox to a key
|
|
240
|
-
# Body: {\"mailbox\": \"email or id\"}. Refused (422) for mailboxes with agent access disabled or an active E2E encryption key
|
|
240
|
+
# Body: {\"mailbox\": \"email or id\"}. Refused (422) for mailboxes with agent access disabled or an active E2E encryption key, the server cannot read E2E mailboxes.
|
|
241
241
|
# @param key_id [String]
|
|
242
242
|
# @param [Hash] opts the optional parameters
|
|
243
243
|
# @return [Array<(MailboxGrant, Integer, Hash)>] MailboxGrant data, response status code and response headers
|
|
@@ -617,7 +617,7 @@ module Lockally
|
|
|
617
617
|
end
|
|
618
618
|
|
|
619
619
|
# Reply in-thread (agent stream)
|
|
620
|
-
# The server builds In-Reply-To/References and defaults recipients + subject from the conversation
|
|
620
|
+
# The server builds In-Reply-To/References and defaults recipients + subject from the conversation, a minimal call is {\"text\": \"...\"}. Guarded by the reply-loop detector (≥5 outbound/10min → 429 + agent.loop_detected). Idempotency-Key required.
|
|
621
621
|
# @param thread_id [String]
|
|
622
622
|
# @param idempotency_key [String]
|
|
623
623
|
# @param [Hash] opts the optional parameters
|
|
@@ -628,7 +628,7 @@ module Lockally
|
|
|
628
628
|
end
|
|
629
629
|
|
|
630
630
|
# Reply in-thread (agent stream)
|
|
631
|
-
# The server builds In-Reply-To/References and defaults recipients + subject from the conversation
|
|
631
|
+
# The server builds In-Reply-To/References and defaults recipients + subject from the conversation, a minimal call is {\"text\": \"...\"}. Guarded by the reply-loop detector (≥5 outbound/10min → 429 + agent.loop_detected). Idempotency-Key required.
|
|
632
632
|
# @param thread_id [String]
|
|
633
633
|
# @param idempotency_key [String]
|
|
634
634
|
# @param [Hash] opts the optional parameters
|
data/lib/lockally/api/ai_api.rb
CHANGED
|
@@ -20,7 +20,7 @@ module Lockally
|
|
|
20
20
|
@api_client = api_client
|
|
21
21
|
end
|
|
22
22
|
# LLM-classify a thread
|
|
23
|
-
# Returns {intent, urgency, summary, suggested_action} via the tenant's AI tier (BYOK or prepaid units
|
|
23
|
+
# Returns {intent, urgency, summary, suggested_action} via the tenant's AI tier (BYOK or prepaid units, see /v1/ai-config). Cached per thread state: unchanged threads return the cache free; ?refresh=true forces a re-run. A failed model call charges nothing. 402 when the AI tier is off.
|
|
24
24
|
# @param thread_id [String]
|
|
25
25
|
# @param [Hash] opts the optional parameters
|
|
26
26
|
# @option opts [Boolean] :refresh
|
|
@@ -31,7 +31,7 @@ module Lockally
|
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
# LLM-classify a thread
|
|
34
|
-
# Returns {intent, urgency, summary, suggested_action} via the tenant's AI tier (BYOK or prepaid units
|
|
34
|
+
# Returns {intent, urgency, summary, suggested_action} via the tenant's AI tier (BYOK or prepaid units, see /v1/ai-config). Cached per thread state: unchanged threads return the cache free; ?refresh=true forces a re-run. A failed model call charges nothing. 402 when the AI tier is off.
|
|
35
35
|
# @param thread_id [String]
|
|
36
36
|
# @param [Hash] opts the optional parameters
|
|
37
37
|
# @option opts [Boolean] :refresh
|
|
@@ -88,7 +88,7 @@ module Lockally
|
|
|
88
88
|
end
|
|
89
89
|
|
|
90
90
|
# Delete an alias
|
|
91
|
-
# Hard-delete (no soft-delete window
|
|
91
|
+
# Hard-delete (no soft-delete window, aliases are cheap to recreate).
|
|
92
92
|
# @param address [String]
|
|
93
93
|
# @param [Hash] opts the optional parameters
|
|
94
94
|
# @return [nil]
|
|
@@ -98,7 +98,7 @@ module Lockally
|
|
|
98
98
|
end
|
|
99
99
|
|
|
100
100
|
# Delete an alias
|
|
101
|
-
# Hard-delete (no soft-delete window
|
|
101
|
+
# Hard-delete (no soft-delete window, aliases are cheap to recreate).
|
|
102
102
|
# @param address [String]
|
|
103
103
|
# @param [Hash] opts the optional parameters
|
|
104
104
|
# @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
|
|
@@ -20,7 +20,7 @@ module Lockally
|
|
|
20
20
|
@api_client = api_client
|
|
21
21
|
end
|
|
22
22
|
# Create an API key
|
|
23
|
-
# Provisions a fresh API key for the calling tenant. **The full `secret` is included in this response ONLY
|
|
23
|
+
# Provisions a fresh API key for the calling tenant. **The full `secret` is included in this response ONLY**, store it immediately. The cleartext secret is not recoverable from the argon2id hash kept server-side; rotate by creating a new key and revoking the old one.
|
|
24
24
|
# @param create_api_key_request [CreateApiKeyRequest]
|
|
25
25
|
# @param [Hash] opts the optional parameters
|
|
26
26
|
# @return [CreateApiKey201Response]
|
|
@@ -30,7 +30,7 @@ module Lockally
|
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
# Create an API key
|
|
33
|
-
# Provisions a fresh API key for the calling tenant. **The full `secret` is included in this response ONLY
|
|
33
|
+
# Provisions a fresh API key for the calling tenant. **The full `secret` is included in this response ONLY**, store it immediately. The cleartext secret is not recoverable from the argon2id hash kept server-side; rotate by creating a new key and revoking the old one.
|
|
34
34
|
# @param create_api_key_request [CreateApiKeyRequest]
|
|
35
35
|
# @param [Hash] opts the optional parameters
|
|
36
36
|
# @return [Array<(CreateApiKey201Response, Integer, Hash)>] CreateApiKey201Response data, response status code and response headers
|
|
@@ -88,7 +88,7 @@ module Lockally
|
|
|
88
88
|
end
|
|
89
89
|
|
|
90
90
|
# List API keys
|
|
91
|
-
# Returns all API keys (active and revoked) belonging to the calling tenant. The `secret` is **never** returned
|
|
91
|
+
# Returns all API keys (active and revoked) belonging to the calling tenant. The `secret` is **never** returned, only prefix + metadata.
|
|
92
92
|
# @param [Hash] opts the optional parameters
|
|
93
93
|
# @return [ListApiKeys200Response]
|
|
94
94
|
def list_api_keys(opts = {})
|
|
@@ -97,7 +97,7 @@ module Lockally
|
|
|
97
97
|
end
|
|
98
98
|
|
|
99
99
|
# List API keys
|
|
100
|
-
# Returns all API keys (active and revoked) belonging to the calling tenant. The `secret` is **never** returned
|
|
100
|
+
# Returns all API keys (active and revoked) belonging to the calling tenant. The `secret` is **never** returned, only prefix + metadata.
|
|
101
101
|
# @param [Hash] opts the optional parameters
|
|
102
102
|
# @return [Array<(ListApiKeys200Response, Integer, Hash)>] ListApiKeys200Response data, response status code and response headers
|
|
103
103
|
def list_api_keys_with_http_info(opts = {})
|
|
@@ -145,7 +145,7 @@ module Lockally
|
|
|
145
145
|
end
|
|
146
146
|
|
|
147
147
|
# Revoke an API key
|
|
148
|
-
# Soft-deletes (sets `revoked_at`) on the named key. The row stays for audit purposes; the key no longer authenticates. You **cannot revoke the key currently being used** to make this call
|
|
148
|
+
# Soft-deletes (sets `revoked_at`) on the named key. The row stays for audit purposes; the key no longer authenticates. You **cannot revoke the key currently being used** to make this call, that would lock you out. Use a different `tenant:admin` key.
|
|
149
149
|
# @param id [String]
|
|
150
150
|
# @param [Hash] opts the optional parameters
|
|
151
151
|
# @return [nil]
|
|
@@ -155,7 +155,7 @@ module Lockally
|
|
|
155
155
|
end
|
|
156
156
|
|
|
157
157
|
# Revoke an API key
|
|
158
|
-
# Soft-deletes (sets `revoked_at`) on the named key. The row stays for audit purposes; the key no longer authenticates. You **cannot revoke the key currently being used** to make this call
|
|
158
|
+
# Soft-deletes (sets `revoked_at`) on the named key. The row stays for audit purposes; the key no longer authenticates. You **cannot revoke the key currently being used** to make this call, that would lock you out. Use a different `tenant:admin` key.
|
|
159
159
|
# @param id [String]
|
|
160
160
|
# @param [Hash] opts the optional parameters
|
|
161
161
|
# @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
|
|
@@ -20,7 +20,7 @@ module Lockally
|
|
|
20
20
|
@api_client = api_client
|
|
21
21
|
end
|
|
22
22
|
# Register a domain
|
|
23
|
-
# Registers a new domain for the calling tenant. Generates a DKIM keypair and verification token. Returns DNS instructions the tenant must publish under their own DNS (verification TXT, SPF include, DKIM TXT, MX records to `mx1`/`mx2.lockally.com`, DMARC seed). **Idempotent
|
|
23
|
+
# Registers a new domain for the calling tenant. Generates a DKIM keypair and verification token. Returns DNS instructions the tenant must publish under their own DNS (verification TXT, SPF include, DKIM TXT, MX records to `mx1`/`mx2.lockally.com`, DMARC seed). **Idempotent**, re-posting the same domain returns the existing record with the same DKIM keys and token (regenerating would break the tenant's published DNS). Returns 200 on idempotent hit, 201 on first create. Returns 409 if the domain is already claimed by a different tenant.
|
|
24
24
|
# @param create_domain_request [CreateDomainRequest]
|
|
25
25
|
# @param [Hash] opts the optional parameters
|
|
26
26
|
# @return [Domain]
|
|
@@ -30,7 +30,7 @@ module Lockally
|
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
# Register a domain
|
|
33
|
-
# Registers a new domain for the calling tenant. Generates a DKIM keypair and verification token. Returns DNS instructions the tenant must publish under their own DNS (verification TXT, SPF include, DKIM TXT, MX records to `mx1`/`mx2.lockally.com`, DMARC seed). **Idempotent
|
|
33
|
+
# Registers a new domain for the calling tenant. Generates a DKIM keypair and verification token. Returns DNS instructions the tenant must publish under their own DNS (verification TXT, SPF include, DKIM TXT, MX records to `mx1`/`mx2.lockally.com`, DMARC seed). **Idempotent**, re-posting the same domain returns the existing record with the same DKIM keys and token (regenerating would break the tenant's published DNS). Returns 200 on idempotent hit, 201 on first create. Returns 409 if the domain is already claimed by a different tenant.
|
|
34
34
|
# @param create_domain_request [CreateDomainRequest]
|
|
35
35
|
# @param [Hash] opts the optional parameters
|
|
36
36
|
# @return [Array<(Domain, Integer, Hash)>] Domain data, response status code and response headers
|
|
@@ -88,7 +88,7 @@ module Lockally
|
|
|
88
88
|
end
|
|
89
89
|
|
|
90
90
|
# Delete a domain
|
|
91
|
-
# Removes the domain registration. Refuses with 409 if any mailbox is still attached
|
|
91
|
+
# Removes the domain registration. Refuses with 409 if any mailbox is still attached, delete the mailboxes first.
|
|
92
92
|
# @param domain [String]
|
|
93
93
|
# @param [Hash] opts the optional parameters
|
|
94
94
|
# @return [nil]
|
|
@@ -98,7 +98,7 @@ module Lockally
|
|
|
98
98
|
end
|
|
99
99
|
|
|
100
100
|
# Delete a domain
|
|
101
|
-
# Removes the domain registration. Refuses with 409 if any mailbox is still attached
|
|
101
|
+
# Removes the domain registration. Refuses with 409 if any mailbox is still attached, delete the mailboxes first.
|
|
102
102
|
# @param domain [String]
|
|
103
103
|
# @param [Hash] opts the optional parameters
|
|
104
104
|
# @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
|
|
@@ -458,7 +458,7 @@ module Lockally
|
|
|
458
458
|
end
|
|
459
459
|
|
|
460
460
|
# Force-poll DNS verification
|
|
461
|
-
# Synchronously checks the `_lockally-verify.<domain>` TXT record against the stored verification token. Returns 200 either way: the returned `verified` boolean tells you whether DNS now confirms. Caller polls until `verified: true`.
|
|
461
|
+
# Synchronously checks the `_lockally-verify.<domain>` TXT record against the stored verification token. Returns 200 either way: the returned `verified` boolean tells you whether DNS now confirms. Caller polls until `verified: true`. A later version may have the platform auto-polls and fires a `domain.verified` webhook.
|
|
462
462
|
# @param domain [String]
|
|
463
463
|
# @param [Hash] opts the optional parameters
|
|
464
464
|
# @return [Domain]
|
|
@@ -468,7 +468,7 @@ module Lockally
|
|
|
468
468
|
end
|
|
469
469
|
|
|
470
470
|
# Force-poll DNS verification
|
|
471
|
-
# Synchronously checks the `_lockally-verify.<domain>` TXT record against the stored verification token. Returns 200 either way: the returned `verified` boolean tells you whether DNS now confirms. Caller polls until `verified: true`.
|
|
471
|
+
# Synchronously checks the `_lockally-verify.<domain>` TXT record against the stored verification token. Returns 200 either way: the returned `verified` boolean tells you whether DNS now confirms. Caller polls until `verified: true`. A later version may have the platform auto-polls and fires a `domain.verified` webhook.
|
|
472
472
|
# @param domain [String]
|
|
473
473
|
# @param [Hash] opts the optional parameters
|
|
474
474
|
# @return [Array<(Domain, Integer, Hash)>] Domain data, response status code and response headers
|