schema, api

This commit is contained in:
spaced4ndy
2026-09-28 17:40:08 +04:00
parent 6fb0d453df
commit 3e8f3f0a00
5 changed files with 87 additions and 3 deletions
+4
View File
@@ -441,6 +441,9 @@ Remote controller app version range (min and max as version strings).
InvalidCode:
- type: "invalidCode"
InvalidReceipt:
- type: "invalidReceipt"
ServiceNotConfigured:
- type: "serviceNotConfigured"
@@ -477,6 +480,7 @@ CredentialNotVerified:
- "payment_not_entitled"
- "payment_pending"
- "provider_unavailable"
- "provider_not_configured"
- "rate_limited"
- "code_invalid"
- "code_used"
@@ -249,6 +249,7 @@ export interface BadgeProof {
export type BadgeRedeemError =
| BadgeRedeemError.InvalidCode
| BadgeRedeemError.InvalidReceipt
| BadgeRedeemError.ServiceNotConfigured
| BadgeRedeemError.BadgeActive
| BadgeRedeemError.ServiceError
@@ -259,6 +260,7 @@ export type BadgeRedeemError =
export namespace BadgeRedeemError {
export type Tag =
| "invalidCode"
| "invalidReceipt"
| "serviceNotConfigured"
| "badgeActive"
| "serviceError"
@@ -274,6 +276,10 @@ export namespace BadgeRedeemError {
type: "invalidCode"
}
export interface InvalidReceipt extends Interface {
type: "invalidReceipt"
}
export interface ServiceNotConfigured extends Interface {
type: "serviceNotConfigured"
}
@@ -312,6 +318,7 @@ export enum BadgeServiceErrorCode {
Payment_not_entitled = "payment_not_entitled",
Payment_pending = "payment_pending",
Provider_unavailable = "provider_unavailable",
Provider_not_configured = "provider_not_configured",
Rate_limited = "rate_limited",
Code_invalid = "code_invalid",
Code_used = "code_used",
@@ -188,6 +188,9 @@ class BadgeProof(TypedDict):
class BadgeRedeemError_invalidCode(TypedDict):
type: Literal["invalidCode"]
class BadgeRedeemError_invalidReceipt(TypedDict):
type: Literal["invalidReceipt"]
class BadgeRedeemError_serviceNotConfigured(TypedDict):
type: Literal["serviceNotConfigured"]
@@ -210,6 +213,7 @@ class BadgeRedeemError_credentialNotVerified(TypedDict):
BadgeRedeemError = (
BadgeRedeemError_invalidCode
| BadgeRedeemError_invalidReceipt
| BadgeRedeemError_serviceNotConfigured
| BadgeRedeemError_badgeActive
| BadgeRedeemError_serviceError
@@ -218,9 +222,9 @@ BadgeRedeemError = (
| BadgeRedeemError_credentialNotVerified
)
BadgeRedeemError_Tag = Literal["invalidCode", "serviceNotConfigured", "badgeActive", "serviceError", "invalidResponse", "unknownKeyIndex", "credentialNotVerified"]
BadgeRedeemError_Tag = Literal["invalidCode", "invalidReceipt", "serviceNotConfigured", "badgeActive", "serviceError", "invalidResponse", "unknownKeyIndex", "credentialNotVerified"]
BadgeServiceErrorCode = Literal["bad_request", "unsupported_version", "unknown_purchase_key", "unknown_offer_id", "offer_disabled", "offer_mismatch", "product_unavailable", "payment_not_entitled", "payment_pending", "provider_unavailable", "rate_limited", "code_invalid", "code_used", "code_expired", "receipt_invalid", "receipt_used", "internal"]
BadgeServiceErrorCode = Literal["bad_request", "unsupported_version", "unknown_purchase_key", "unknown_offer_id", "offer_disabled", "offer_mismatch", "product_unavailable", "payment_not_entitled", "payment_pending", "provider_unavailable", "provider_not_configured", "rate_limited", "code_invalid", "code_used", "code_expired", "receipt_invalid", "receipt_used", "internal"]
BadgeStatus = Literal["active", "expired", "expiredOld", "failed", "unknownKey"]
@@ -279,7 +279,8 @@ CREATE TABLE test_chat_schema.badge_purchases (
issue_failed_since timestamp with time zone,
issue_error_at timestamp with time zone,
issue_error text,
next_wake_at timestamp with time zone
next_wake_at timestamp with time zone,
badge_store_receipt_id bigint
);
@@ -295,6 +296,30 @@ ALTER TABLE test_chat_schema.badge_purchases ALTER COLUMN badge_purchase_id ADD
CREATE TABLE test_chat_schema.badge_store_receipts (
badge_store_receipt_id bigint NOT NULL,
user_id bigint NOT NULL,
provider text NOT NULL,
transaction_ref text NOT NULL,
purchase_key bytea NOT NULL,
purchase_priv_key bytea NOT NULL,
master_key bytea NOT NULL,
created_at timestamp with time zone NOT NULL
);
ALTER TABLE test_chat_schema.badge_store_receipts ALTER COLUMN badge_store_receipt_id ADD GENERATED ALWAYS AS IDENTITY (
SEQUENCE NAME test_chat_schema.badge_store_receipts_badge_store_receipt_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1
);
CREATE TABLE test_chat_schema.calls (
call_id bigint NOT NULL,
contact_id bigint NOT NULL,
@@ -1793,6 +1818,16 @@ ALTER TABLE ONLY test_chat_schema.badge_purchases
ALTER TABLE ONLY test_chat_schema.badge_store_receipts
ADD CONSTRAINT badge_store_receipts_pkey PRIMARY KEY (badge_store_receipt_id);
ALTER TABLE ONLY test_chat_schema.badge_store_receipts
ADD CONSTRAINT badge_store_receipts_provider_transaction_ref_key UNIQUE (provider, transaction_ref);
ALTER TABLE ONLY test_chat_schema.calls
ADD CONSTRAINT calls_pkey PRIMARY KEY (call_id);
@@ -2192,10 +2227,18 @@ CREATE UNIQUE INDEX idx_badge_purchases_code_redemption ON test_chat_schema.badg
CREATE UNIQUE INDEX idx_badge_purchases_store_receipt ON test_chat_schema.badge_purchases USING btree (badge_store_receipt_id);
CREATE INDEX idx_badge_purchases_user ON test_chat_schema.badge_purchases USING btree (user_id);
CREATE INDEX idx_badge_store_receipts_user ON test_chat_schema.badge_store_receipts USING btree (user_id);
CREATE INDEX idx_calls_chat_item_id ON test_chat_schema.calls USING btree (chat_item_id);
@@ -2994,11 +3037,21 @@ ALTER TABLE ONLY test_chat_schema.badge_purchases
ALTER TABLE ONLY test_chat_schema.badge_purchases
ADD CONSTRAINT badge_purchases_badge_store_receipt_id_fkey FOREIGN KEY (badge_store_receipt_id) REFERENCES test_chat_schema.badge_store_receipts(badge_store_receipt_id);
ALTER TABLE ONLY test_chat_schema.badge_purchases
ADD CONSTRAINT badge_purchases_user_id_fkey FOREIGN KEY (user_id) REFERENCES test_chat_schema.users(user_id) ON DELETE CASCADE;
ALTER TABLE ONLY test_chat_schema.badge_store_receipts
ADD CONSTRAINT badge_store_receipts_user_id_fkey FOREIGN KEY (user_id) REFERENCES test_chat_schema.users(user_id) ON DELETE CASCADE;
ALTER TABLE ONLY test_chat_schema.calls
ADD CONSTRAINT calls_chat_item_id_fkey FOREIGN KEY (chat_item_id) REFERENCES test_chat_schema.chat_items(chat_item_id) ON DELETE CASCADE;
@@ -938,6 +938,7 @@ CREATE TABLE badge_purchases(
issue_error_at TEXT,
issue_error TEXT,
next_wake_at TEXT,
badge_store_receipt_id INTEGER REFERENCES badge_store_receipts,
UNIQUE(purchase_key)
) STRICT;
CREATE TABLE badge_ledger(
@@ -981,6 +982,17 @@ CREATE TABLE badge_code_redemptions(
created_at TEXT NOT NULL,
UNIQUE(user_id, code)
) STRICT;
CREATE TABLE badge_store_receipts(
badge_store_receipt_id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL REFERENCES users ON DELETE CASCADE,
provider TEXT NOT NULL,
transaction_ref TEXT NOT NULL,
purchase_key BLOB NOT NULL,
purchase_priv_key BLOB NOT NULL,
master_key BLOB NOT NULL,
created_at TEXT NOT NULL,
UNIQUE(provider, transaction_ref)
) STRICT;
CREATE INDEX contact_profiles_index ON contact_profiles(
display_name,
full_name
@@ -1544,6 +1556,10 @@ CREATE INDEX idx_badge_code_redemptions_user ON badge_code_redemptions(
CREATE UNIQUE INDEX idx_badge_purchases_code_redemption ON badge_purchases(
badge_code_redemption_id
);
CREATE INDEX idx_badge_store_receipts_user ON badge_store_receipts(user_id);
CREATE UNIQUE INDEX idx_badge_purchases_store_receipt ON badge_purchases(
badge_store_receipt_id
);
CREATE TRIGGER on_group_members_insert_update_summary
AFTER INSERT ON group_members
FOR EACH ROW