@polyester/sdk 0.12.0 → 0.13.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.
- package/CHANGELOG.md +10 -0
- package/dist/core-client.d.ts +3 -3
- package/dist/core-client.d.ts.map +1 -1
- package/dist/core-client.js +35 -50
- package/dist/core-client.js.map +1 -1
- package/dist/services/accounts/accounts.d.ts +2 -2
- package/dist/services/accounts/accounts.d.ts.map +1 -1
- package/dist/services/accounts/accounts.js +2 -2
- package/dist/services/accounts/accounts.js.map +1 -1
- package/dist/services/address-book/address-book.d.ts +2 -2
- package/dist/services/address-book/address-book.d.ts.map +1 -1
- package/dist/services/address-book/address-book.js +2 -2
- package/dist/services/address-book/address-book.js.map +1 -1
- package/dist/services/api-keys/api-keys.d.ts +2 -2
- package/dist/services/api-keys/api-keys.d.ts.map +1 -1
- package/dist/services/api-keys/api-keys.js +3 -3
- package/dist/services/api-keys/api-keys.js.map +1 -1
- package/dist/services/auth/account-signer-auth.d.ts +3 -2
- package/dist/services/auth/account-signer-auth.d.ts.map +1 -1
- package/dist/services/auth/account-signer-auth.js.map +1 -1
- package/dist/services/auth/auth.d.ts +3 -7
- package/dist/services/auth/auth.d.ts.map +1 -1
- package/dist/services/auth/auth.js +1 -1
- package/dist/services/auth/auth.js.map +1 -1
- package/dist/services/auth/profile/profile.d.ts +2 -2
- package/dist/services/auth/profile/profile.d.ts.map +1 -1
- package/dist/services/auth/profile/profile.js +2 -2
- package/dist/services/auth/profile/profile.js.map +1 -1
- package/dist/services/balances/balances.d.ts +2 -2
- package/dist/services/balances/balances.d.ts.map +1 -1
- package/dist/services/balances/balances.js +2 -2
- package/dist/services/balances/balances.js.map +1 -1
- package/dist/services/candles/candles.d.ts +2 -2
- package/dist/services/candles/candles.d.ts.map +1 -1
- package/dist/services/candles/candles.js +2 -2
- package/dist/services/candles/candles.js.map +1 -1
- package/dist/services/chain-analytics/chain-analytics.d.ts +2 -2
- package/dist/services/chain-analytics/chain-analytics.d.ts.map +1 -1
- package/dist/services/chain-analytics/chain-analytics.js +2 -2
- package/dist/services/chain-analytics/chain-analytics.js.map +1 -1
- package/dist/services/deposit/deposit.d.ts +2 -2
- package/dist/services/deposit/deposit.d.ts.map +1 -1
- package/dist/services/deposit/deposit.js +2 -2
- package/dist/services/deposit/deposit.js.map +1 -1
- package/dist/services/fees/fees.d.ts +2 -2
- package/dist/services/fees/fees.d.ts.map +1 -1
- package/dist/services/fees/fees.js +2 -2
- package/dist/services/fees/fees.js.map +1 -1
- package/dist/services/guard-signer/guard-signer.d.ts +2 -2
- package/dist/services/guard-signer/guard-signer.d.ts.map +1 -1
- package/dist/services/guard-signer/guard-signer.js +2 -2
- package/dist/services/guard-signer/guard-signer.js.map +1 -1
- package/dist/services/heatmap/heatmap.d.ts +2 -2
- package/dist/services/heatmap/heatmap.d.ts.map +1 -1
- package/dist/services/heatmap/heatmap.js +2 -2
- package/dist/services/heatmap/heatmap.js.map +1 -1
- package/dist/services/internal-transfers/internal-transfers.d.ts +2 -2
- package/dist/services/internal-transfers/internal-transfers.d.ts.map +1 -1
- package/dist/services/internal-transfers/internal-transfers.js +2 -2
- package/dist/services/internal-transfers/internal-transfers.js.map +1 -1
- package/dist/services/lifecycle/lifecycle.d.ts +2 -2
- package/dist/services/lifecycle/lifecycle.d.ts.map +1 -1
- package/dist/services/lifecycle/lifecycle.js +2 -2
- package/dist/services/lifecycle/lifecycle.js.map +1 -1
- package/dist/services/lifecycle/lifecycle.schemas.d.ts +42 -42
- package/dist/services/market-data/market-data.d.ts +2 -2
- package/dist/services/market-data/market-data.d.ts.map +1 -1
- package/dist/services/market-data/market-data.js +2 -2
- package/dist/services/market-data/market-data.js.map +1 -1
- package/dist/services/market-overview/market-overview.d.ts +2 -2
- package/dist/services/market-overview/market-overview.d.ts.map +1 -1
- package/dist/services/market-overview/market-overview.js +2 -2
- package/dist/services/market-overview/market-overview.js.map +1 -1
- package/dist/services/mfa/mfa.d.ts +2 -2
- package/dist/services/mfa/mfa.d.ts.map +1 -1
- package/dist/services/mfa/mfa.js +2 -2
- package/dist/services/mfa/mfa.js.map +1 -1
- package/dist/services/orderbook/orderbook.d.ts +2 -2
- package/dist/services/orderbook/orderbook.d.ts.map +1 -1
- package/dist/services/orderbook/orderbook.js +2 -2
- package/dist/services/orderbook/orderbook.js.map +1 -1
- package/dist/services/orders/orders-input.schemas.d.ts +1 -1
- package/dist/services/orders/orders-output.schemas.d.ts +6 -6
- package/dist/services/orders/orders.d.ts +2 -2
- package/dist/services/orders/orders.d.ts.map +1 -1
- package/dist/services/orders/orders.js +3 -3
- package/dist/services/orders/orders.js.map +1 -1
- package/dist/services/policies/api-key-policies/api-key-policies.d.ts +2 -2
- package/dist/services/policies/api-key-policies/api-key-policies.d.ts.map +1 -1
- package/dist/services/policies/api-key-policies/api-key-policies.js +2 -2
- package/dist/services/policies/api-key-policies/api-key-policies.js.map +1 -1
- package/dist/services/policies/subaccount-policies/subaccount-policies.d.ts +2 -2
- package/dist/services/policies/subaccount-policies/subaccount-policies.d.ts.map +1 -1
- package/dist/services/policies/subaccount-policies/subaccount-policies.js +2 -2
- package/dist/services/policies/subaccount-policies/subaccount-policies.js.map +1 -1
- package/dist/services/rate-limits/rate-limits.d.ts +2 -2
- package/dist/services/rate-limits/rate-limits.d.ts.map +1 -1
- package/dist/services/rate-limits/rate-limits.js.map +1 -1
- package/dist/services/social-verification/social-verification.d.ts +2 -2
- package/dist/services/social-verification/social-verification.d.ts.map +1 -1
- package/dist/services/social-verification/social-verification.js +2 -2
- package/dist/services/social-verification/social-verification.js.map +1 -1
- package/dist/services/subaccounts/subaccounts.d.ts +3 -3
- package/dist/services/subaccounts/subaccounts.d.ts.map +1 -1
- package/dist/services/subaccounts/subaccounts.js +11 -9
- package/dist/services/subaccounts/subaccounts.js.map +1 -1
- package/dist/services/subaccounts/subaccounts.schemas.d.ts +4 -4
- package/dist/services/trades/trades.d.ts +2 -2
- package/dist/services/trades/trades.d.ts.map +1 -1
- package/dist/services/trades/trades.js +2 -2
- package/dist/services/trades/trades.js.map +1 -1
- package/dist/services/trading-withdraws/trading-withdraws.d.ts +2 -2
- package/dist/services/trading-withdraws/trading-withdraws.d.ts.map +1 -1
- package/dist/services/trading-withdraws/trading-withdraws.js +2 -2
- package/dist/services/trading-withdraws/trading-withdraws.js.map +1 -1
- package/dist/services/transfers/transfers.d.ts +2 -2
- package/dist/services/transfers/transfers.d.ts.map +1 -1
- package/dist/services/transfers/transfers.js +2 -2
- package/dist/services/transfers/transfers.js.map +1 -1
- package/dist/services/triggers/trigger-input.schemas.d.ts +1 -1
- package/dist/services/triggers/triggers-output.schemas.d.ts +15 -15
- package/dist/services/triggers/triggers.d.ts +2 -2
- package/dist/services/triggers/triggers.d.ts.map +1 -1
- package/dist/services/triggers/triggers.js +2 -2
- package/dist/services/triggers/triggers.js.map +1 -1
- package/dist/services/vip/vip.d.ts +2 -2
- package/dist/services/vip/vip.js.map +1 -1
- package/dist/services/whiteboard/whiteboard.d.ts +2 -2
- package/dist/services/whiteboard/whiteboard.d.ts.map +1 -1
- package/dist/services/whiteboard/whiteboard.js +2 -2
- package/dist/services/whiteboard/whiteboard.js.map +1 -1
- package/dist/services/zipper/zipper.d.ts +2 -2
- package/dist/services/zipper/zipper.d.ts.map +1 -1
- package/dist/services/zipper/zipper.js +2 -2
- package/dist/services/zipper/zipper.js.map +1 -1
- package/dist/shared/transports.d.ts +7 -1
- package/dist/shared/transports.d.ts.map +1 -1
- package/dist/shared/transports.js.map +1 -1
- package/package.json +1 -1
|
@@ -31,62 +31,62 @@ declare const CreateTriggerResultSchema: v.SchemaWithPipe<readonly [v.ObjectSche
|
|
|
31
31
|
type CreateTriggerResult = v.InferOutput<typeof CreateTriggerResultSchema>;
|
|
32
32
|
declare const CancelTriggerResultSchema: v.SchemaWithPipe<readonly [v.ObjectSchema<{
|
|
33
33
|
readonly triggerId: v.SchemaWithPipe<readonly [v.BigintSchema<undefined>, v.TransformAction<bigint, string>]>;
|
|
34
|
-
readonly status: v.SchemaWithPipe<readonly [v.EnumSchema<typeof TriggerStatus, undefined>, v.TransformAction<TriggerStatus, "unspecified" | "
|
|
34
|
+
readonly status: v.SchemaWithPipe<readonly [v.EnumSchema<typeof TriggerStatus, undefined>, v.TransformAction<TriggerStatus, "unspecified" | "failed" | "cancelled" | "created" | "completed" | "armed" | "running" | "paused">]>;
|
|
35
35
|
readonly tsNs: v.BigintSchema<undefined>;
|
|
36
36
|
}, undefined>, v.TransformAction<{
|
|
37
37
|
triggerId: string;
|
|
38
|
-
status: "unspecified" | "
|
|
38
|
+
status: "unspecified" | "failed" | "cancelled" | "created" | "completed" | "armed" | "running" | "paused";
|
|
39
39
|
tsNs: bigint;
|
|
40
40
|
}, {
|
|
41
41
|
ts: number;
|
|
42
42
|
tsNs: string;
|
|
43
43
|
triggerId: string;
|
|
44
|
-
status: "unspecified" | "
|
|
44
|
+
status: "unspecified" | "failed" | "cancelled" | "created" | "completed" | "armed" | "running" | "paused";
|
|
45
45
|
}>]>;
|
|
46
46
|
type CancelTriggerResult = v.InferOutput<typeof CancelTriggerResultSchema>;
|
|
47
47
|
declare const ModifyTriggerResultSchema: v.SchemaWithPipe<readonly [v.ObjectSchema<{
|
|
48
48
|
readonly triggerId: v.SchemaWithPipe<readonly [v.BigintSchema<undefined>, v.TransformAction<bigint, string>]>;
|
|
49
|
-
readonly status: v.SchemaWithPipe<readonly [v.EnumSchema<typeof TriggerStatus, undefined>, v.TransformAction<TriggerStatus, "unspecified" | "
|
|
49
|
+
readonly status: v.SchemaWithPipe<readonly [v.EnumSchema<typeof TriggerStatus, undefined>, v.TransformAction<TriggerStatus, "unspecified" | "failed" | "cancelled" | "created" | "completed" | "armed" | "running" | "paused">]>;
|
|
50
50
|
readonly tsNs: v.BigintSchema<undefined>;
|
|
51
51
|
}, undefined>, v.TransformAction<{
|
|
52
52
|
triggerId: string;
|
|
53
|
-
status: "unspecified" | "
|
|
53
|
+
status: "unspecified" | "failed" | "cancelled" | "created" | "completed" | "armed" | "running" | "paused";
|
|
54
54
|
tsNs: bigint;
|
|
55
55
|
}, {
|
|
56
56
|
ts: number;
|
|
57
57
|
tsNs: string;
|
|
58
58
|
triggerId: string;
|
|
59
|
-
status: "unspecified" | "
|
|
59
|
+
status: "unspecified" | "failed" | "cancelled" | "created" | "completed" | "armed" | "running" | "paused";
|
|
60
60
|
}>]>;
|
|
61
61
|
type ModifyTriggerResult = v.InferOutput<typeof ModifyTriggerResultSchema>;
|
|
62
62
|
declare const PauseTriggerResultSchema: v.SchemaWithPipe<readonly [v.ObjectSchema<{
|
|
63
63
|
readonly triggerId: v.SchemaWithPipe<readonly [v.BigintSchema<undefined>, v.TransformAction<bigint, string>]>;
|
|
64
|
-
readonly status: v.SchemaWithPipe<readonly [v.EnumSchema<typeof TriggerStatus, undefined>, v.TransformAction<TriggerStatus, "unspecified" | "
|
|
64
|
+
readonly status: v.SchemaWithPipe<readonly [v.EnumSchema<typeof TriggerStatus, undefined>, v.TransformAction<TriggerStatus, "unspecified" | "failed" | "cancelled" | "created" | "completed" | "armed" | "running" | "paused">]>;
|
|
65
65
|
readonly tsNs: v.BigintSchema<undefined>;
|
|
66
66
|
}, undefined>, v.TransformAction<{
|
|
67
67
|
triggerId: string;
|
|
68
|
-
status: "unspecified" | "
|
|
68
|
+
status: "unspecified" | "failed" | "cancelled" | "created" | "completed" | "armed" | "running" | "paused";
|
|
69
69
|
tsNs: bigint;
|
|
70
70
|
}, {
|
|
71
71
|
ts: number;
|
|
72
72
|
tsNs: string;
|
|
73
73
|
triggerId: string;
|
|
74
|
-
status: "unspecified" | "
|
|
74
|
+
status: "unspecified" | "failed" | "cancelled" | "created" | "completed" | "armed" | "running" | "paused";
|
|
75
75
|
}>]>;
|
|
76
76
|
type PauseTriggerResult = v.InferOutput<typeof PauseTriggerResultSchema>;
|
|
77
77
|
declare const ResumeTriggerResultSchema: v.SchemaWithPipe<readonly [v.ObjectSchema<{
|
|
78
78
|
readonly triggerId: v.SchemaWithPipe<readonly [v.BigintSchema<undefined>, v.TransformAction<bigint, string>]>;
|
|
79
|
-
readonly status: v.SchemaWithPipe<readonly [v.EnumSchema<typeof TriggerStatus, undefined>, v.TransformAction<TriggerStatus, "unspecified" | "
|
|
79
|
+
readonly status: v.SchemaWithPipe<readonly [v.EnumSchema<typeof TriggerStatus, undefined>, v.TransformAction<TriggerStatus, "unspecified" | "failed" | "cancelled" | "created" | "completed" | "armed" | "running" | "paused">]>;
|
|
80
80
|
readonly tsNs: v.BigintSchema<undefined>;
|
|
81
81
|
}, undefined>, v.TransformAction<{
|
|
82
82
|
triggerId: string;
|
|
83
|
-
status: "unspecified" | "
|
|
83
|
+
status: "unspecified" | "failed" | "cancelled" | "created" | "completed" | "armed" | "running" | "paused";
|
|
84
84
|
tsNs: bigint;
|
|
85
85
|
}, {
|
|
86
86
|
ts: number;
|
|
87
87
|
tsNs: string;
|
|
88
88
|
triggerId: string;
|
|
89
|
-
status: "unspecified" | "
|
|
89
|
+
status: "unspecified" | "failed" | "cancelled" | "created" | "completed" | "armed" | "running" | "paused";
|
|
90
90
|
}>]>;
|
|
91
91
|
type ResumeTriggerResult = v.InferOutput<typeof ResumeTriggerResultSchema>;
|
|
92
92
|
type StopDetailsOutput = {
|
|
@@ -528,7 +528,7 @@ declare function createTriggerSchema(scales: SdkScales): v.SchemaWithPipe<readon
|
|
|
528
528
|
triggerId: string;
|
|
529
529
|
subaccountId: string;
|
|
530
530
|
symbolId: number;
|
|
531
|
-
status: "unspecified" | "
|
|
531
|
+
status: "unspecified" | "failed" | "cancelled" | "created" | "completed" | "armed" | "running" | "paused";
|
|
532
532
|
parentOrderId: string | undefined;
|
|
533
533
|
qty: string;
|
|
534
534
|
feeAsset: "unspecified" | "quote" | "base";
|
|
@@ -669,7 +669,7 @@ declare function createTriggerSchema(scales: SdkScales): v.SchemaWithPipe<readon
|
|
|
669
669
|
triggerId: string;
|
|
670
670
|
subaccountId: string;
|
|
671
671
|
symbolId: number;
|
|
672
|
-
status: "unspecified" | "
|
|
672
|
+
status: "unspecified" | "failed" | "cancelled" | "created" | "completed" | "armed" | "running" | "paused";
|
|
673
673
|
parentOrderId: string | undefined;
|
|
674
674
|
qty: string;
|
|
675
675
|
feeAsset: "unspecified" | "quote" | "base";
|
|
@@ -810,7 +810,7 @@ declare function createTriggerSchema(scales: SdkScales): v.SchemaWithPipe<readon
|
|
|
810
810
|
triggerId: string;
|
|
811
811
|
subaccountId: string;
|
|
812
812
|
symbolId: number;
|
|
813
|
-
status: "unspecified" | "
|
|
813
|
+
status: "unspecified" | "failed" | "cancelled" | "created" | "completed" | "armed" | "running" | "paused";
|
|
814
814
|
parentOrderId: string | undefined;
|
|
815
815
|
qty: string;
|
|
816
816
|
feeAsset: "unspecified" | "quote" | "base";
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { AuthApiTransports } from "../../shared/transports.js";
|
|
1
2
|
import { PolyesterMutationOptions, PolyesterRequestOptions } from "../../shared/request-options.js";
|
|
2
3
|
import { SubaccountResolver } from "../subaccount-resolver.js";
|
|
3
4
|
import { PolyesterRealtime } from "../../realtime/types.js";
|
|
@@ -7,7 +8,6 @@ import { SdkScales } from "../../shared/decimal-surface.js";
|
|
|
7
8
|
import { CancelTriggerInput, CreateTriggerInput, GetTriggerInput, ListTriggerEventsInput, ListTriggersInput, ModifyTriggerInput, PauseTriggerInput, ResumeTriggerInput } from "./trigger-input.schemas.js";
|
|
8
9
|
import { CancelTriggerResult, CreateTriggerResult, ListTriggerEventsResult, ModifyTriggerResult, PauseTriggerResult, ResumeTriggerResult, Trigger, TriggerEvent } from "./triggers-output.schemas.js";
|
|
9
10
|
import "./triggers.schemas.js";
|
|
10
|
-
import { Transport } from "@connectrpc/connect";
|
|
11
11
|
//#region src/services/triggers/triggers.d.ts
|
|
12
12
|
interface ListTriggersResult {
|
|
13
13
|
triggers: Trigger[];
|
|
@@ -24,7 +24,7 @@ interface SubscribeTriggerEventsInput extends BaseSubscribeInput<TriggerEvent> {
|
|
|
24
24
|
*/
|
|
25
25
|
declare class TriggersService {
|
|
26
26
|
#private;
|
|
27
|
-
constructor(
|
|
27
|
+
constructor(transports: AuthApiTransports, realtime: PolyesterRealtime, resolver: SubaccountResolver | undefined, scales: SdkScales);
|
|
28
28
|
/**
|
|
29
29
|
* Creates a standalone trigger for a symbol ID, using that market's catalog quantity scale.
|
|
30
30
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"triggers.d.ts","names":[],"sources":["../../../src/services/triggers/triggers.ts"],"mappings":";;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"triggers.d.ts","names":[],"sources":["../../../src/services/triggers/triggers.ts"],"mappings":";;;;;;;;;;;UA2DiB;EACb,UAAU;EACV;;UAGM,+BAA+B,mBAAmB;EACxD;;UAGM,oCAAoC,mBAAmB;EAC7D;;;;;cAMS;;EAWL,YAAA,YAAY,mBACZ,UAAU,mBACV,UAAU,gCACV,QAAQ;;;;EAeN,OACF,OAAO,oBACP,UAAU,2BACX,QAAQ;;;;EAWL,IAAI,OAAO,iBAAiB,UAAU,0BAA0B,QAAQ;;;;EAgBxE,KACF,QAAO,mBACP,UAAU,0BACX,QAAQ;;;;EAiBL,OACF,OAAO,oBACP,UAAU,2BACX,QAAQ;;;;EAaL,OACF,OAAO,oBACP,UAAU,2BACX,QAAQ;;;;EAWL,MACF,OAAO,mBACP,UAAU,2BACX,QAAQ;;;;EAaL,OACF,OAAO,oBACP,UAAU,2BACX,QAAQ;;;;EAaL,WACF,OAAO,wBACP,UAAU,0BACX,QAAQ;;;;EAyBX,UAAU,OAAO;;;;EAmBjB,gBAAgB,OAAO"}
|
|
@@ -21,8 +21,8 @@ var TriggersService = class {
|
|
|
21
21
|
#modifyTriggerInputSchema;
|
|
22
22
|
#triggerSchema;
|
|
23
23
|
#triggerEventSchema;
|
|
24
|
-
constructor(
|
|
25
|
-
this.#client = createClient(TriggersService$1,
|
|
24
|
+
constructor(transports, realtime, resolver, scales) {
|
|
25
|
+
this.#client = createClient(TriggersService$1, transports.authApi);
|
|
26
26
|
this.#realtime = realtime;
|
|
27
27
|
this.#resolver = resolver;
|
|
28
28
|
this.#scales = scales;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"triggers.js","names":["#client","Proto.TriggersService","#realtime","#resolver","#scales","#createTriggerInputSchema","#modifyTriggerInputSchema","#triggerSchema","#triggerEventSchema","Proto.TriggerSchema","Proto.TriggerEventSchema"],"sources":["../../../src/services/triggers/triggers.ts"],"sourcesContent":["import * as Proto from \"../../gen/triggers/v1/triggers_pb.js\";\nimport { createClient, type Client, type Transport } from \"@connectrpc/connect\";\nimport * as v from \"valibot\";\nimport { parse } from \"../../shared/validation.js\";\nimport { type SubaccountResolver, resolveAccountScopedInput } from \"../subaccount-resolver.js\";\nimport { removeUndefined } from \"../../utils/remove-undefined.js\";\nimport {\n toConnectCallOptions,\n type PolyesterMutationOptions,\n type PolyesterRequestOptions,\n} from \"../../shared/request-options.js\";\nimport type { SdkScales } from \"../../shared/decimal-surface.js\";\nimport { connectReadyGatedProtoChannel } from \"../../realtime/ready-gated-subscription.js\";\nimport {\n createCreateTriggerInputSchema,\n createModifyTriggerInputSchema,\n ListTriggersInputSchema,\n CancelTriggerInputSchema,\n PauseTriggerInputSchema,\n ResumeTriggerInputSchema,\n GetTriggerInputSchema,\n ListTriggerEventsInputSchema,\n CreateTriggerResultSchema,\n CancelTriggerResultSchema,\n ModifyTriggerResultSchema,\n PauseTriggerResultSchema,\n ResumeTriggerResultSchema,\n createTriggerSchema,\n createTriggerEventSchema,\n type Trigger,\n type CreateTriggerInput,\n type ListTriggersInput,\n type CancelTriggerInput,\n type GetTriggerInput,\n type ModifyTriggerInput,\n type PauseTriggerInput,\n type ResumeTriggerInput,\n type ListTriggerEventsInput,\n type CreateTriggerResult,\n type CancelTriggerResult,\n type ModifyTriggerResult,\n type PauseTriggerResult,\n type ResumeTriggerResult,\n type ListTriggerEventsResult,\n type TriggerEvent,\n} from \"./triggers.schemas.js\";\nimport type { BaseSubscribeInput } from \"../../shared/types.js\";\nimport type { PolyesterRealtime } from \"../../realtime/index.js\";\n\nexport type {\n CreateTriggerResult,\n CancelTriggerResult,\n ModifyTriggerResult,\n PauseTriggerResult,\n ResumeTriggerResult,\n ListTriggerEventsResult,\n};\n\nexport interface ListTriggersResult {\n triggers: Trigger[];\n nextPageToken: string;\n}\n\ninterface SubscribeTriggersInput extends BaseSubscribeInput<Trigger> {\n accountId: string;\n}\n\ninterface SubscribeTriggerEventsInput extends BaseSubscribeInput<TriggerEvent> {\n accountId: string;\n}\n\n/**\n * Manages standalone order triggers and their realtime lifecycle/event streams.\n */\nexport class TriggersService {\n #client: Client<typeof Proto.TriggersService>;\n #realtime: PolyesterRealtime;\n #resolver?: SubaccountResolver;\n #scales: SdkScales;\n #createTriggerInputSchema: ReturnType<typeof createCreateTriggerInputSchema>;\n #modifyTriggerInputSchema: ReturnType<typeof createModifyTriggerInputSchema>;\n #triggerSchema: ReturnType<typeof createTriggerSchema>;\n #triggerEventSchema: ReturnType<typeof createTriggerEventSchema>;\n\n constructor(\n transport: Transport,\n realtime: PolyesterRealtime,\n resolver: SubaccountResolver | undefined,\n scales: SdkScales,\n ) {\n this.#client = createClient(Proto.TriggersService, transport);\n this.#realtime = realtime;\n this.#resolver = resolver;\n this.#scales = scales;\n this.#createTriggerInputSchema = createCreateTriggerInputSchema(scales);\n this.#modifyTriggerInputSchema = createModifyTriggerInputSchema(scales);\n this.#triggerSchema = createTriggerSchema(scales);\n this.#triggerEventSchema = createTriggerEventSchema(scales);\n }\n\n /**\n * Creates a standalone trigger for a symbol ID, using that market's catalog quantity scale.\n */\n async create(\n input: CreateTriggerInput,\n options?: PolyesterMutationOptions,\n ): Promise<CreateTriggerResult> {\n await this.#scales.ready();\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validatedInput = parse(this.#createTriggerInputSchema, resolved);\n const res = await this.#client.createTrigger(validatedInput, toConnectCallOptions(options));\n return parse(CreateTriggerResultSchema, res);\n }\n\n /**\n * Fetches one trigger by id in the resolved account scope and returns null when the backend response contains no trigger.\n */\n async get(input: GetTriggerInput, options?: PolyesterRequestOptions): Promise<Trigger | null> {\n await this.#scales.ready();\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validated = parse(GetTriggerInputSchema, resolved);\n const res = await this.#client.getTrigger(\n removeUndefined(validated),\n toConnectCallOptions(options),\n );\n\n if (!res.trigger) return null;\n return parse(this.#triggerSchema, res.trigger);\n }\n\n /**\n * Lists triggers for the resolved account scope with optional symbol ID, status, trigger type, parent order, limit, and page-token filters. Results are returned newest-first.\n */\n async list(\n input: ListTriggersInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<ListTriggersResult> {\n await this.#scales.ready();\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validated = parse(ListTriggersInputSchema, resolved);\n const res = await this.#client.listTriggers(\n removeUndefined(validated),\n toConnectCallOptions(options),\n );\n return {\n triggers: parse(v.array(this.#triggerSchema), res.triggers),\n nextPageToken: res.nextPageToken,\n };\n }\n\n /**\n * Cancels an active trigger by id in the resolved account scope and returns the trigger id, resulting status, and server timestamp.\n */\n async cancel(\n input: CancelTriggerInput,\n options?: PolyesterMutationOptions,\n ): Promise<CancelTriggerResult> {\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validated = parse(CancelTriggerInputSchema, resolved);\n const res = await this.#client.cancelTrigger(\n removeUndefined(validated),\n toConnectCallOptions(options),\n );\n return parse(CancelTriggerResultSchema, res);\n }\n\n /**\n * Applies a limited patch to an existing trigger. The symbol ID routes policy checks for exposure-increasing changes.\n */\n async modify(\n input: ModifyTriggerInput,\n options?: PolyesterMutationOptions,\n ): Promise<ModifyTriggerResult> {\n await this.#scales.ready();\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validated = parse(this.#modifyTriggerInputSchema, resolved);\n const res = await this.#client.modifyTrigger(validated, toConnectCallOptions(options));\n return parse(ModifyTriggerResultSchema, res);\n }\n\n /**\n * Pauses an active trigger without discarding its immutable strategy configuration.\n */\n async pause(\n input: PauseTriggerInput,\n options?: PolyesterMutationOptions,\n ): Promise<PauseTriggerResult> {\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validated = parse(PauseTriggerInputSchema, resolved);\n const res = await this.#client.pauseTrigger(\n removeUndefined(validated),\n toConnectCallOptions(options),\n );\n return parse(PauseTriggerResultSchema, res);\n }\n\n /**\n * Resumes a paused trigger using its symbol ID for policy checks.\n */\n async resume(\n input: ResumeTriggerInput,\n options?: PolyesterMutationOptions,\n ): Promise<ResumeTriggerResult> {\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validated = parse(ResumeTriggerInputSchema, resolved);\n const res = await this.#client.resumeTrigger(\n removeUndefined(validated),\n toConnectCallOptions(options),\n );\n return parse(ResumeTriggerResultSchema, res);\n }\n\n /**\n * Returns newest-first historical lifecycle events for one trigger, optionally filtered by event type. Fired events enumerate child-order actions. The SDK defaults limit to 50.\n */\n async listEvents(\n input: ListTriggerEventsInput,\n options?: PolyesterRequestOptions,\n ): Promise<ListTriggerEventsResult> {\n await this.#scales.ready();\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validated = parse(ListTriggerEventsInputSchema, resolved);\n\n const res = await this.#client.listTriggerEvents(\n removeUndefined({\n triggerId: validated.triggerId,\n subaccountId: validated.subaccountId,\n limit: validated.limit ?? 50,\n eventType: validated.eventType,\n pageToken: validated.pageToken ?? \"\",\n }),\n toConnectCallOptions(options),\n );\n\n return {\n events: parse(v.array(this.#triggerEventSchema), res.events),\n nextPageToken: res.nextPageToken,\n };\n }\n\n /**\n * Subscribes to private trigger state updates on private:spot:triggers:{accountId}:proto and emits parsed trigger records.\n */\n subscribe(input: SubscribeTriggersInput): () => void {\n const channel = `private:spot:triggers:${input.accountId}:proto`;\n return connectReadyGatedProtoChannel(this.#realtime, {\n channel,\n schema: Proto.TriggerSchema,\n ready: () => this.#scales.ready(),\n onPublication: (data) => {\n const trigger = parse(this.#triggerSchema, data);\n input.onEvent(trigger);\n },\n onConnected: () => input.onOpen?.(),\n onDisconnected: () => input.onClose?.(),\n onError: input.onError,\n });\n }\n\n /**\n * Subscribes to private trigger lifecycle events on private:spot:triggers:events:{accountId}:proto and emits parsed trigger event records.\n */\n subscribeEvents(input: SubscribeTriggerEventsInput): () => void {\n const channel = `private:spot:triggers:events:${input.accountId}:proto`;\n return connectReadyGatedProtoChannel(this.#realtime, {\n channel,\n schema: Proto.TriggerEventSchema,\n ready: () => this.#scales.ready(),\n onPublication: (data) => {\n const event = parse(this.#triggerEventSchema, data);\n input.onEvent(event);\n },\n onConnected: () => input.onOpen?.(),\n onDisconnected: () => input.onClose?.(),\n onError: input.onError,\n });\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"triggers.js","names":["#client","Proto.TriggersService","#realtime","#resolver","#scales","#createTriggerInputSchema","#modifyTriggerInputSchema","#triggerSchema","#triggerEventSchema","Proto.TriggerSchema","Proto.TriggerEventSchema"],"sources":["../../../src/services/triggers/triggers.ts"],"sourcesContent":["import * as Proto from \"../../gen/triggers/v1/triggers_pb.js\";\nimport { createClient, type Client } from \"@connectrpc/connect\";\nimport * as v from \"valibot\";\nimport { parse } from \"../../shared/validation.js\";\nimport { type SubaccountResolver, resolveAccountScopedInput } from \"../subaccount-resolver.js\";\nimport { removeUndefined } from \"../../utils/remove-undefined.js\";\nimport {\n toConnectCallOptions,\n type PolyesterMutationOptions,\n type PolyesterRequestOptions,\n} from \"../../shared/request-options.js\";\nimport type { SdkScales } from \"../../shared/decimal-surface.js\";\nimport type { AuthApiTransports } from \"../../shared/transports.js\";\nimport { connectReadyGatedProtoChannel } from \"../../realtime/ready-gated-subscription.js\";\nimport {\n createCreateTriggerInputSchema,\n createModifyTriggerInputSchema,\n ListTriggersInputSchema,\n CancelTriggerInputSchema,\n PauseTriggerInputSchema,\n ResumeTriggerInputSchema,\n GetTriggerInputSchema,\n ListTriggerEventsInputSchema,\n CreateTriggerResultSchema,\n CancelTriggerResultSchema,\n ModifyTriggerResultSchema,\n PauseTriggerResultSchema,\n ResumeTriggerResultSchema,\n createTriggerSchema,\n createTriggerEventSchema,\n type Trigger,\n type CreateTriggerInput,\n type ListTriggersInput,\n type CancelTriggerInput,\n type GetTriggerInput,\n type ModifyTriggerInput,\n type PauseTriggerInput,\n type ResumeTriggerInput,\n type ListTriggerEventsInput,\n type CreateTriggerResult,\n type CancelTriggerResult,\n type ModifyTriggerResult,\n type PauseTriggerResult,\n type ResumeTriggerResult,\n type ListTriggerEventsResult,\n type TriggerEvent,\n} from \"./triggers.schemas.js\";\nimport type { BaseSubscribeInput } from \"../../shared/types.js\";\nimport type { PolyesterRealtime } from \"../../realtime/index.js\";\n\nexport type {\n CreateTriggerResult,\n CancelTriggerResult,\n ModifyTriggerResult,\n PauseTriggerResult,\n ResumeTriggerResult,\n ListTriggerEventsResult,\n};\n\nexport interface ListTriggersResult {\n triggers: Trigger[];\n nextPageToken: string;\n}\n\ninterface SubscribeTriggersInput extends BaseSubscribeInput<Trigger> {\n accountId: string;\n}\n\ninterface SubscribeTriggerEventsInput extends BaseSubscribeInput<TriggerEvent> {\n accountId: string;\n}\n\n/**\n * Manages standalone order triggers and their realtime lifecycle/event streams.\n */\nexport class TriggersService {\n #client: Client<typeof Proto.TriggersService>;\n #realtime: PolyesterRealtime;\n #resolver?: SubaccountResolver;\n #scales: SdkScales;\n #createTriggerInputSchema: ReturnType<typeof createCreateTriggerInputSchema>;\n #modifyTriggerInputSchema: ReturnType<typeof createModifyTriggerInputSchema>;\n #triggerSchema: ReturnType<typeof createTriggerSchema>;\n #triggerEventSchema: ReturnType<typeof createTriggerEventSchema>;\n\n constructor(\n transports: AuthApiTransports,\n realtime: PolyesterRealtime,\n resolver: SubaccountResolver | undefined,\n scales: SdkScales,\n ) {\n this.#client = createClient(Proto.TriggersService, transports.authApi);\n this.#realtime = realtime;\n this.#resolver = resolver;\n this.#scales = scales;\n this.#createTriggerInputSchema = createCreateTriggerInputSchema(scales);\n this.#modifyTriggerInputSchema = createModifyTriggerInputSchema(scales);\n this.#triggerSchema = createTriggerSchema(scales);\n this.#triggerEventSchema = createTriggerEventSchema(scales);\n }\n\n /**\n * Creates a standalone trigger for a symbol ID, using that market's catalog quantity scale.\n */\n async create(\n input: CreateTriggerInput,\n options?: PolyesterMutationOptions,\n ): Promise<CreateTriggerResult> {\n await this.#scales.ready();\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validatedInput = parse(this.#createTriggerInputSchema, resolved);\n const res = await this.#client.createTrigger(validatedInput, toConnectCallOptions(options));\n return parse(CreateTriggerResultSchema, res);\n }\n\n /**\n * Fetches one trigger by id in the resolved account scope and returns null when the backend response contains no trigger.\n */\n async get(input: GetTriggerInput, options?: PolyesterRequestOptions): Promise<Trigger | null> {\n await this.#scales.ready();\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validated = parse(GetTriggerInputSchema, resolved);\n const res = await this.#client.getTrigger(\n removeUndefined(validated),\n toConnectCallOptions(options),\n );\n\n if (!res.trigger) return null;\n return parse(this.#triggerSchema, res.trigger);\n }\n\n /**\n * Lists triggers for the resolved account scope with optional symbol ID, status, trigger type, parent order, limit, and page-token filters. Results are returned newest-first.\n */\n async list(\n input: ListTriggersInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<ListTriggersResult> {\n await this.#scales.ready();\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validated = parse(ListTriggersInputSchema, resolved);\n const res = await this.#client.listTriggers(\n removeUndefined(validated),\n toConnectCallOptions(options),\n );\n return {\n triggers: parse(v.array(this.#triggerSchema), res.triggers),\n nextPageToken: res.nextPageToken,\n };\n }\n\n /**\n * Cancels an active trigger by id in the resolved account scope and returns the trigger id, resulting status, and server timestamp.\n */\n async cancel(\n input: CancelTriggerInput,\n options?: PolyesterMutationOptions,\n ): Promise<CancelTriggerResult> {\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validated = parse(CancelTriggerInputSchema, resolved);\n const res = await this.#client.cancelTrigger(\n removeUndefined(validated),\n toConnectCallOptions(options),\n );\n return parse(CancelTriggerResultSchema, res);\n }\n\n /**\n * Applies a limited patch to an existing trigger. The symbol ID routes policy checks for exposure-increasing changes.\n */\n async modify(\n input: ModifyTriggerInput,\n options?: PolyesterMutationOptions,\n ): Promise<ModifyTriggerResult> {\n await this.#scales.ready();\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validated = parse(this.#modifyTriggerInputSchema, resolved);\n const res = await this.#client.modifyTrigger(validated, toConnectCallOptions(options));\n return parse(ModifyTriggerResultSchema, res);\n }\n\n /**\n * Pauses an active trigger without discarding its immutable strategy configuration.\n */\n async pause(\n input: PauseTriggerInput,\n options?: PolyesterMutationOptions,\n ): Promise<PauseTriggerResult> {\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validated = parse(PauseTriggerInputSchema, resolved);\n const res = await this.#client.pauseTrigger(\n removeUndefined(validated),\n toConnectCallOptions(options),\n );\n return parse(PauseTriggerResultSchema, res);\n }\n\n /**\n * Resumes a paused trigger using its symbol ID for policy checks.\n */\n async resume(\n input: ResumeTriggerInput,\n options?: PolyesterMutationOptions,\n ): Promise<ResumeTriggerResult> {\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validated = parse(ResumeTriggerInputSchema, resolved);\n const res = await this.#client.resumeTrigger(\n removeUndefined(validated),\n toConnectCallOptions(options),\n );\n return parse(ResumeTriggerResultSchema, res);\n }\n\n /**\n * Returns newest-first historical lifecycle events for one trigger, optionally filtered by event type. Fired events enumerate child-order actions. The SDK defaults limit to 50.\n */\n async listEvents(\n input: ListTriggerEventsInput,\n options?: PolyesterRequestOptions,\n ): Promise<ListTriggerEventsResult> {\n await this.#scales.ready();\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validated = parse(ListTriggerEventsInputSchema, resolved);\n\n const res = await this.#client.listTriggerEvents(\n removeUndefined({\n triggerId: validated.triggerId,\n subaccountId: validated.subaccountId,\n limit: validated.limit ?? 50,\n eventType: validated.eventType,\n pageToken: validated.pageToken ?? \"\",\n }),\n toConnectCallOptions(options),\n );\n\n return {\n events: parse(v.array(this.#triggerEventSchema), res.events),\n nextPageToken: res.nextPageToken,\n };\n }\n\n /**\n * Subscribes to private trigger state updates on private:spot:triggers:{accountId}:proto and emits parsed trigger records.\n */\n subscribe(input: SubscribeTriggersInput): () => void {\n const channel = `private:spot:triggers:${input.accountId}:proto`;\n return connectReadyGatedProtoChannel(this.#realtime, {\n channel,\n schema: Proto.TriggerSchema,\n ready: () => this.#scales.ready(),\n onPublication: (data) => {\n const trigger = parse(this.#triggerSchema, data);\n input.onEvent(trigger);\n },\n onConnected: () => input.onOpen?.(),\n onDisconnected: () => input.onClose?.(),\n onError: input.onError,\n });\n }\n\n /**\n * Subscribes to private trigger lifecycle events on private:spot:triggers:events:{accountId}:proto and emits parsed trigger event records.\n */\n subscribeEvents(input: SubscribeTriggerEventsInput): () => void {\n const channel = `private:spot:triggers:events:${input.accountId}:proto`;\n return connectReadyGatedProtoChannel(this.#realtime, {\n channel,\n schema: Proto.TriggerEventSchema,\n ready: () => this.#scales.ready(),\n onPublication: (data) => {\n const event = parse(this.#triggerEventSchema, data);\n input.onEvent(event);\n },\n onConnected: () => input.onOpen?.(),\n onDisconnected: () => input.onClose?.(),\n onError: input.onError,\n });\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AuthAndPublicApiTransports } from "../../shared/transports.js";
|
|
2
2
|
import { PolyesterRequestOptions } from "../../shared/request-options.js";
|
|
3
3
|
import { VipStatus, VipTierCatalog } from "./vip.schemas.js";
|
|
4
4
|
//#region src/services/vip/vip.d.ts
|
|
@@ -7,7 +7,7 @@ import { VipStatus, VipTierCatalog } from "./vip.schemas.js";
|
|
|
7
7
|
*/
|
|
8
8
|
declare class VipService {
|
|
9
9
|
#private;
|
|
10
|
-
constructor(transports:
|
|
10
|
+
constructor(transports: AuthAndPublicApiTransports);
|
|
11
11
|
/**
|
|
12
12
|
* Returns the complete active VIP0+ tier catalog, including policy version, effective time, retention threshold, and per-tier volume/AOP thresholds and fee rates.
|
|
13
13
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vip.js","names":["#publicClient","Proto.VIPService","#authClient"],"sources":["../../../src/services/vip/vip.ts"],"sourcesContent":["import { createClient, type Client } from \"@connectrpc/connect\";\nimport * as Proto from \"../../gen/vip/v1/vip_pb.js\";\nimport {\n toConnectCallOptions,\n type PolyesterRequestOptions,\n} from \"../../shared/request-options.js\";\nimport type {
|
|
1
|
+
{"version":3,"file":"vip.js","names":["#publicClient","Proto.VIPService","#authClient"],"sources":["../../../src/services/vip/vip.ts"],"sourcesContent":["import { createClient, type Client } from \"@connectrpc/connect\";\nimport * as Proto from \"../../gen/vip/v1/vip_pb.js\";\nimport {\n toConnectCallOptions,\n type PolyesterRequestOptions,\n} from \"../../shared/request-options.js\";\nimport type { AuthAndPublicApiTransports } from \"../../shared/transports.js\";\nimport { parse } from \"../../shared/validation.js\";\nimport {\n VipStatusSchema,\n VipTierCatalogSchema,\n type VipStatus,\n type VipTierCatalog,\n} from \"./vip.schemas.js\";\n\n/**\n * Reads public VIP policy catalogs and authenticated caller-root VIP status.\n */\nexport class VipService {\n #publicClient: Client<typeof Proto.VIPService>;\n #authClient: Client<typeof Proto.VIPService>;\n\n constructor(transports: AuthAndPublicApiTransports) {\n this.#publicClient = createClient(Proto.VIPService, transports.publicApi);\n this.#authClient = createClient(Proto.VIPService, transports.authApi);\n }\n\n /**\n * Returns the complete active VIP0+ tier catalog, including policy version, effective time, retention threshold, and per-tier volume/AOP thresholds and fee rates.\n */\n async listTiers(options?: PolyesterRequestOptions): Promise<VipTierCatalog> {\n const res = await this.#publicClient.listVIPTiers({}, toConnectCallOptions(options));\n return parse(VipTierCatalogSchema, res);\n }\n\n /**\n * Returns VIP qualification status for the authenticated caller's root account, including effective/volume/AOP tiers, optional rolling metrics, and next-tier thresholds.\n */\n async getStatus(options?: PolyesterRequestOptions): Promise<VipStatus> {\n const res = await this.#authClient.getVIPStatus({}, toConnectCallOptions(options));\n return parse(VipStatusSchema, res);\n }\n}\n"],"mappings":";;;;;;;;;AAkBA,IAAa,aAAb,MAAwB;CACpB;CACA;CAEA,YAAY,YAAwC;EAChD,KAAKA,gBAAgB,aAAaC,YAAkB,WAAW,SAAS;EACxE,KAAKC,cAAc,aAAaD,YAAkB,WAAW,OAAO;CACxE;;;;CAKA,MAAM,UAAU,SAA4D;EACxE,MAAM,MAAM,MAAM,KAAKD,cAAc,aAAa,CAAC,GAAG,qBAAqB,OAAO,CAAC;EACnF,OAAO,MAAM,sBAAsB,GAAG;CAC1C;;;;CAKA,MAAM,UAAU,SAAuD;EACnE,MAAM,MAAM,MAAM,KAAKE,YAAY,aAAa,CAAC,GAAG,qBAAqB,OAAO,CAAC;EACjF,OAAO,MAAM,iBAAiB,GAAG;CACrC;AACJ"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
+
import { AuthApiTransports } from "../../shared/transports.js";
|
|
1
2
|
import { PolyesterMutationOptions, PolyesterRequestOptions } from "../../shared/request-options.js";
|
|
2
3
|
import { ArchiveWhiteboardBoardInput, ArchiveWhiteboardBoardResult, CreateWhiteboardBoardInput, CreateWhiteboardBoardResult, GetWhiteboardBoardInput, GetWhiteboardBoardResult, ListWhiteboardBoardsInput, ListWhiteboardBoardsResult, MintWhiteboardJoinTokenInput, UpdateWhiteboardBoardAclInput, UpdateWhiteboardBoardAclResult, UpdateWhiteboardBoardInput, UpdateWhiteboardBoardResult, WhiteboardJoinTokenResult } from "./whiteboard.schemas.js";
|
|
3
|
-
import { Transport } from "@connectrpc/connect";
|
|
4
4
|
//#region src/services/whiteboard/whiteboard.d.ts
|
|
5
5
|
/**
|
|
6
6
|
* Manages collaborative whiteboards, ACLs, archive state, and join tokens.
|
|
7
7
|
*/
|
|
8
8
|
declare class WhiteboardService {
|
|
9
9
|
#private;
|
|
10
|
-
constructor(
|
|
10
|
+
constructor(transports: AuthApiTransports);
|
|
11
11
|
/**
|
|
12
12
|
* Creates a whiteboard and returns the parsed whiteboard record.
|
|
13
13
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whiteboard.d.ts","names":[],"sources":["../../../src/services/whiteboard/whiteboard.ts"],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"file":"whiteboard.d.ts","names":[],"sources":["../../../src/services/whiteboard/whiteboard.ts"],"mappings":";;;;;;;cA4Ca;;EAGG,YAAA,YAAY;;;;EAOlB,OACF,OAAO,4BACP,UAAU,2BACX,QAAQ;;;;EASL,IACF,OAAO,kCACP,UAAU,0BACX,QAAQ;;;;EAYL,KACF,QAAO,2BACP,UAAU,0BACX,QAAQ;;;;EASL,OACF,OAAO,4BACP,UAAU,2BACX,QAAQ;;;;EAYL,UACF,OAAO,+BACP,UAAU,2BACX,QAAQ;;;;EAYL,QACF,OAAO,6BACP,UAAU,2BACX,QAAQ;;;;EASL,cACF,OAAO,uCACP,UAAU,2BACX,QAAQ"}
|
|
@@ -10,8 +10,8 @@ import { createClient } from "@connectrpc/connect";
|
|
|
10
10
|
*/
|
|
11
11
|
var WhiteboardService = class {
|
|
12
12
|
#client;
|
|
13
|
-
constructor(
|
|
14
|
-
this.#client = createClient(WhiteboardService$1,
|
|
13
|
+
constructor(transports) {
|
|
14
|
+
this.#client = createClient(WhiteboardService$1, transports.authApi);
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
17
17
|
* Creates a whiteboard and returns the parsed whiteboard record.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whiteboard.js","names":["#client","Proto.WhiteboardService"],"sources":["../../../src/services/whiteboard/whiteboard.ts"],"sourcesContent":["import { createClient, type Client
|
|
1
|
+
{"version":3,"file":"whiteboard.js","names":["#client","Proto.WhiteboardService"],"sources":["../../../src/services/whiteboard/whiteboard.ts"],"sourcesContent":["import { createClient, type Client } from \"@connectrpc/connect\";\nimport * as Proto from \"../../gen/collab/v1/whiteboard_pb.js\";\nimport { removeUndefined } from \"../../utils/remove-undefined.js\";\nimport { parse } from \"../../shared/validation.js\";\nimport type { AuthApiTransports } from \"../../shared/transports.js\";\nimport {\n toConnectCallOptions,\n type PolyesterMutationOptions,\n type PolyesterRequestOptions,\n} from \"../../shared/request-options.js\";\nimport {\n ArchiveWhiteboardBoardInputSchema,\n ArchiveWhiteboardBoardResultSchema,\n CreateWhiteboardBoardInputSchema,\n CreateWhiteboardBoardResultSchema,\n GetWhiteboardBoardInputSchema,\n GetWhiteboardBoardResultSchema,\n ListWhiteboardBoardsInputSchema,\n ListWhiteboardBoardsResultSchema,\n MintWhiteboardJoinTokenInputSchema,\n UpdateWhiteboardBoardAclInputSchema,\n UpdateWhiteboardBoardAclResultSchema,\n UpdateWhiteboardBoardInputSchema,\n UpdateWhiteboardBoardResultSchema,\n WhiteboardJoinTokenResultSchema,\n type ArchiveWhiteboardBoardInput,\n type ArchiveWhiteboardBoardResult,\n type CreateWhiteboardBoardInput,\n type CreateWhiteboardBoardResult,\n type GetWhiteboardBoardInput,\n type GetWhiteboardBoardResult,\n type ListWhiteboardBoardsInput,\n type ListWhiteboardBoardsResult,\n type MintWhiteboardJoinTokenInput,\n type UpdateWhiteboardBoardAclInput,\n type UpdateWhiteboardBoardAclResult,\n type UpdateWhiteboardBoardInput,\n type UpdateWhiteboardBoardResult,\n type WhiteboardJoinTokenResult,\n} from \"./whiteboard.schemas.js\";\n\n/**\n * Manages collaborative whiteboards, ACLs, archive state, and join tokens.\n */\nexport class WhiteboardService {\n #client: Client<typeof Proto.WhiteboardService>;\n\n constructor(transports: AuthApiTransports) {\n this.#client = createClient(Proto.WhiteboardService, transports.authApi);\n }\n\n /**\n * Creates a whiteboard and returns the parsed whiteboard record.\n */\n async create(\n input: CreateWhiteboardBoardInput,\n options?: PolyesterMutationOptions,\n ): Promise<CreateWhiteboardBoardResult> {\n const validatedInput = parse(CreateWhiteboardBoardInputSchema, input);\n const res = await this.#client.createBoard(validatedInput, toConnectCallOptions(options));\n return parse(CreateWhiteboardBoardResultSchema, res);\n }\n\n /**\n * Fetches a whiteboard by id and returns null when no whiteboard is present in the response.\n */\n async get(\n input: GetWhiteboardBoardInput | string,\n options?: PolyesterRequestOptions,\n ): Promise<GetWhiteboardBoardResult> {\n const validatedInput = parse(\n GetWhiteboardBoardInputSchema,\n typeof input === \"string\" ? { boardId: input } : input,\n );\n const res = await this.#client.getBoard(validatedInput, toConnectCallOptions(options));\n return parse(GetWhiteboardBoardResultSchema, res);\n }\n\n /**\n * Returns whiteboards matching the requested filters.\n */\n async list(\n input: ListWhiteboardBoardsInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<ListWhiteboardBoardsResult> {\n const validatedInput = parse(ListWhiteboardBoardsInputSchema, input);\n const res = await this.#client.listBoards(validatedInput, toConnectCallOptions(options));\n return parse(ListWhiteboardBoardsResultSchema, res);\n }\n\n /**\n * Updates whiteboard metadata such as title or archive-related fields.\n */\n async update(\n input: UpdateWhiteboardBoardInput,\n options?: PolyesterMutationOptions,\n ): Promise<UpdateWhiteboardBoardResult> {\n const validatedInput = parse(UpdateWhiteboardBoardInputSchema, input);\n const res = await this.#client.updateBoard(\n removeUndefined({ ...validatedInput }) as Proto.UpdateBoardRequest,\n toConnectCallOptions(options),\n );\n return parse(UpdateWhiteboardBoardResultSchema, res);\n }\n\n /**\n * Updates whiteboard access-control entries.\n */\n async updateAcl(\n input: UpdateWhiteboardBoardAclInput,\n options?: PolyesterMutationOptions,\n ): Promise<UpdateWhiteboardBoardAclResult> {\n const validatedInput = parse(UpdateWhiteboardBoardAclInputSchema, input);\n const res = await this.#client.updateBoardAcl(\n validatedInput,\n toConnectCallOptions(options),\n );\n return parse(UpdateWhiteboardBoardAclResultSchema, res);\n }\n\n /**\n * Archives a whiteboard by id.\n */\n async archive(\n input: ArchiveWhiteboardBoardInput,\n options?: PolyesterMutationOptions,\n ): Promise<ArchiveWhiteboardBoardResult> {\n const validatedInput = parse(ArchiveWhiteboardBoardInputSchema, input);\n const res = await this.#client.archiveBoard(validatedInput, toConnectCallOptions(options));\n return parse(ArchiveWhiteboardBoardResultSchema, res);\n }\n\n /**\n * Creates a join token that can grant access to a whiteboard.\n */\n async mintJoinToken(\n input: MintWhiteboardJoinTokenInput | string,\n options?: PolyesterMutationOptions,\n ): Promise<WhiteboardJoinTokenResult> {\n const validatedInput = parse(\n MintWhiteboardJoinTokenInputSchema,\n typeof input === \"string\" ? { boardId: input } : input,\n );\n const res = await this.#client.mintJoinToken(validatedInput, toConnectCallOptions(options));\n return parse(WhiteboardJoinTokenResultSchema, res);\n }\n}\n"],"mappings":";;;;;;;;;;AA4CA,IAAa,oBAAb,MAA+B;CAC3B;CAEA,YAAY,YAA+B;EACvC,KAAKA,UAAU,aAAaC,qBAAyB,WAAW,OAAO;CAC3E;;;;CAKA,MAAM,OACF,OACA,SACoC;EACpC,MAAM,iBAAiB,MAAM,kCAAkC,KAAK;EACpE,MAAM,MAAM,MAAM,KAAKD,QAAQ,YAAY,gBAAgB,qBAAqB,OAAO,CAAC;EACxF,OAAO,MAAM,mCAAmC,GAAG;CACvD;;;;CAKA,MAAM,IACF,OACA,SACiC;EACjC,MAAM,iBAAiB,MACnB,+BACA,OAAO,UAAU,WAAW,EAAE,SAAS,MAAM,IAAI,KACrD;EACA,MAAM,MAAM,MAAM,KAAKA,QAAQ,SAAS,gBAAgB,qBAAqB,OAAO,CAAC;EACrF,OAAO,MAAM,gCAAgC,GAAG;CACpD;;;;CAKA,MAAM,KACF,QAAmC,CAAC,GACpC,SACmC;EACnC,MAAM,iBAAiB,MAAM,iCAAiC,KAAK;EACnE,MAAM,MAAM,MAAM,KAAKA,QAAQ,WAAW,gBAAgB,qBAAqB,OAAO,CAAC;EACvF,OAAO,MAAM,kCAAkC,GAAG;CACtD;;;;CAKA,MAAM,OACF,OACA,SACoC;EACpC,MAAM,iBAAiB,MAAM,kCAAkC,KAAK;EACpE,MAAM,MAAM,MAAM,KAAKA,QAAQ,YAC3B,gBAAgB,EAAE,GAAG,eAAe,CAAC,GACrC,qBAAqB,OAAO,CAChC;EACA,OAAO,MAAM,mCAAmC,GAAG;CACvD;;;;CAKA,MAAM,UACF,OACA,SACuC;EACvC,MAAM,iBAAiB,MAAM,qCAAqC,KAAK;EACvE,MAAM,MAAM,MAAM,KAAKA,QAAQ,eAC3B,gBACA,qBAAqB,OAAO,CAChC;EACA,OAAO,MAAM,sCAAsC,GAAG;CAC1D;;;;CAKA,MAAM,QACF,OACA,SACqC;EACrC,MAAM,iBAAiB,MAAM,mCAAmC,KAAK;EACrE,MAAM,MAAM,MAAM,KAAKA,QAAQ,aAAa,gBAAgB,qBAAqB,OAAO,CAAC;EACzF,OAAO,MAAM,oCAAoC,GAAG;CACxD;;;;CAKA,MAAM,cACF,OACA,SACkC;EAClC,MAAM,iBAAiB,MACnB,oCACA,OAAO,UAAU,WAAW,EAAE,SAAS,MAAM,IAAI,KACrD;EACA,MAAM,MAAM,MAAM,KAAKA,QAAQ,cAAc,gBAAgB,qBAAqB,OAAO,CAAC;EAC1F,OAAO,MAAM,iCAAiC,GAAG;CACrD;AACJ"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { DepositWithdrawConfig } from "../../shared/catalog-config.js";
|
|
2
|
+
import { PublicApiTransports } from "../../shared/transports.js";
|
|
2
3
|
import { PolyesterRequestOptions } from "../../shared/request-options.js";
|
|
3
4
|
import { PolyesterRealtime } from "../../realtime/types.js";
|
|
4
5
|
import { BaseSubscribeInput } from "../../shared/types.js";
|
|
5
6
|
import { SdkScales } from "../../shared/decimal-surface.js";
|
|
6
7
|
import { ZippedAssetSupplyBatch } from "./zipper.schemas.js";
|
|
7
|
-
import { Transport } from "@connectrpc/connect";
|
|
8
8
|
//#region src/services/zipper/zipper.d.ts
|
|
9
9
|
interface SubscribeZippedAssetSupplyInput extends BaseSubscribeInput<ZippedAssetSupplyBatch> {}
|
|
10
10
|
/**
|
|
@@ -12,7 +12,7 @@ interface SubscribeZippedAssetSupplyInput extends BaseSubscribeInput<ZippedAsset
|
|
|
12
12
|
*/
|
|
13
13
|
declare class ZipperService {
|
|
14
14
|
#private;
|
|
15
|
-
constructor(
|
|
15
|
+
constructor(transports: PublicApiTransports, realtime?: PolyesterRealtime, scales?: SdkScales);
|
|
16
16
|
/**
|
|
17
17
|
* Returns supported external chains, unified assets, chain-specific asset variants, network fees, min deposit/withdraw amounts, and contract metadata for Zipper-powered deposit and withdraw flows.
|
|
18
18
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zipper.d.ts","names":[],"sources":["../../../src/services/zipper/zipper.ts"],"mappings":";;;;;;;;
|
|
1
|
+
{"version":3,"file":"zipper.d.ts","names":[],"sources":["../../../src/services/zipper/zipper.ts"],"mappings":";;;;;;;;UAqBiB,wCAAwC,mBAAmB;;;;cAK/D;;EAKG,YAAA,YAAY,qBAAqB,WAAW,mBAAmB,SAAS;;;;EAS9E,yBACF,UAAU,0BACX,QAAQ;;;;;EASX,2BAA2B,OAAO"}
|
|
@@ -14,8 +14,8 @@ var ZipperService = class {
|
|
|
14
14
|
#client;
|
|
15
15
|
#realtime;
|
|
16
16
|
#scales;
|
|
17
|
-
constructor(
|
|
18
|
-
this.#client = createClient(ZipperService$1,
|
|
17
|
+
constructor(transports, realtime, scales) {
|
|
18
|
+
this.#client = createClient(ZipperService$1, transports.publicApi);
|
|
19
19
|
this.#realtime = realtime;
|
|
20
20
|
this.#scales = scales;
|
|
21
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zipper.js","names":["#client","Proto.ZipperService","#realtime","#scales","Proto.ZippedAssetSupplyBatchSchema"],"sources":["../../../src/services/zipper/zipper.ts"],"sourcesContent":["import { create } from \"@bufbuild/protobuf\";\nimport * as Proto from \"../../gen/chain/zipper/v1/zipper_pb.js\";\nimport type { PolyesterRealtime } from \"../../realtime/types.js\";\nimport { createClient, type Client
|
|
1
|
+
{"version":3,"file":"zipper.js","names":["#client","Proto.ZipperService","#realtime","#scales","Proto.ZippedAssetSupplyBatchSchema"],"sources":["../../../src/services/zipper/zipper.ts"],"sourcesContent":["import { create } from \"@bufbuild/protobuf\";\nimport * as Proto from \"../../gen/chain/zipper/v1/zipper_pb.js\";\nimport type { PolyesterRealtime } from \"../../realtime/types.js\";\nimport { createClient, type Client } from \"@connectrpc/connect\";\nimport {\n DepositWithdrawConfigSchema,\n createZippedAssetSupplyBatchSchema,\n type DepositWithdrawConfig,\n type ZippedAssetSupplyBatch,\n} from \"./zipper.schemas.js\";\nimport { parse } from \"../../shared/validation.js\";\nimport {\n toConnectCallOptions,\n type PolyesterRequestOptions,\n} from \"../../shared/request-options.js\";\nimport type { BaseSubscribeInput } from \"../../shared/types.js\";\nimport type { SdkScales } from \"../../shared/decimal-surface.js\";\nimport { ConfigurationError } from \"../../shared/errors.js\";\nimport { snapshotThenStream } from \"../../realtime/snapshot-then-stream.js\";\nimport type { PublicApiTransports } from \"../../shared/transports.js\";\n\nexport interface SubscribeZippedAssetSupplyInput extends BaseSubscribeInput<ZippedAssetSupplyBatch> {}\n\n/**\n * Reads public Zipper deposit/withdraw chain and asset configuration.\n */\nexport class ZipperService {\n #client: Client<typeof Proto.ZipperService>;\n #realtime: PolyesterRealtime | undefined;\n #scales: SdkScales | undefined;\n\n constructor(transports: PublicApiTransports, realtime?: PolyesterRealtime, scales?: SdkScales) {\n this.#client = createClient(Proto.ZipperService, transports.publicApi);\n this.#realtime = realtime;\n this.#scales = scales;\n }\n\n /**\n * Returns supported external chains, unified assets, chain-specific asset variants, network fees, min deposit/withdraw amounts, and contract metadata for Zipper-powered deposit and withdraw flows.\n */\n async getDepositWithdrawConfig(\n options?: PolyesterRequestOptions,\n ): Promise<DepositWithdrawConfig> {\n const res = await this.#client.getDepositWithdrawConfig({}, toConnectCallOptions(options));\n return parse(DepositWithdrawConfigSchema, res);\n }\n\n /**\n * Attaches to the public supply stream before capturing a route-supply snapshot,\n * then resnapshots whenever the channel establishes a new subscription epoch.\n */\n subscribeZippedAssetSupply(input: SubscribeZippedAssetSupplyInput): () => void {\n const realtime = this.#realtime;\n const scales = this.#scales;\n if (!realtime || !scales) {\n throw new ConfigurationError(\n \"Zipper supply subscriptions require a client-owned realtime connection and catalog scales.\",\n );\n }\n\n const channel = \"public:chain:zipped-asset:supply:proto\";\n const schema = createZippedAssetSupplyBatchSchema(scales);\n let catalogReady = false;\n const parseBatch = (batch: Proto.ZippedAssetSupplyBatch): ZippedAssetSupplyBatch =>\n parse(schema, batch);\n const parseUpdates = (\n updates: readonly Proto.ZippedAssetSupplyUpdate[],\n ): ZippedAssetSupplyBatch[\"updates\"] =>\n parseBatch(create(Proto.ZippedAssetSupplyBatchSchema, { updates: [...updates] }))\n .updates;\n const stream = snapshotThenStream({\n realtime,\n channel,\n schema: Proto.ZippedAssetSupplyBatchSchema,\n snapshotErrorLog: \"Failed to fetch zipped asset supply\",\n snapshotRetry: { maxAttempts: 3, delayMs: 1_000 },\n snapshotFailureMode: () => (catalogReady ? \"live\" : \"wait\"),\n fetchSnapshot: async () => {\n await scales.ready();\n catalogReady = true;\n return this.getDepositWithdrawConfig();\n },\n readPublication: (batch) => batch.updates,\n bufferPublicationKey: (update) => update.zippedAssetId,\n applySnapshot: (snapshot, bufferedUpdates) => {\n const latestByZippedAssetId = new Map<number, string>();\n for (const asset of snapshot.assets) {\n for (const variant of asset.variants) {\n latestByZippedAssetId.set(variant.zippedAssetId, variant.supply);\n }\n }\n for (const update of parseUpdates(bufferedUpdates)) {\n latestByZippedAssetId.set(update.zippedAssetId, update.supply);\n }\n input.onEvent({\n updates: Array.from(latestByZippedAssetId, ([zippedAssetId, supply]) => ({\n zippedAssetId,\n supply,\n })),\n });\n },\n applyLivePublications: (updates) => {\n input.onEvent({\n updates: parseUpdates(updates),\n });\n },\n onOpen: input.onOpen,\n onClose: input.onClose,\n onError: input.onError,\n });\n\n return () => stream.unsubscribe();\n }\n}\n"],"mappings":";;;;;;;;;;;;AA0BA,IAAa,gBAAb,MAA2B;CACvB;CACA;CACA;CAEA,YAAY,YAAiC,UAA8B,QAAoB;EAC3F,KAAKA,UAAU,aAAaC,iBAAqB,WAAW,SAAS;EACrE,KAAKC,YAAY;EACjB,KAAKC,UAAU;CACnB;;;;CAKA,MAAM,yBACF,SAC8B;EAC9B,MAAM,MAAM,MAAM,KAAKH,QAAQ,yBAAyB,CAAC,GAAG,qBAAqB,OAAO,CAAC;EACzF,OAAO,MAAM,6BAA6B,GAAG;CACjD;;;;;CAMA,2BAA2B,OAAoD;EAC3E,MAAM,WAAW,KAAKE;EACtB,MAAM,SAAS,KAAKC;EACpB,IAAI,CAAC,YAAY,CAAC,QACd,MAAM,IAAI,mBACN,4FACJ;EAGJ,MAAM,UAAU;EAChB,MAAM,SAAS,mCAAmC,MAAM;EACxD,IAAI,eAAe;EACnB,MAAM,cAAc,UAChB,MAAM,QAAQ,KAAK;EACvB,MAAM,gBACF,YAEA,WAAW,OAAOC,8BAAoC,EAAE,SAAS,CAAC,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,CAC5E;EACT,MAAM,SAAS,mBAAmB;GAC9B;GACA;GACA,QAAQA;GACR,kBAAkB;GAClB,eAAe;IAAE,aAAa;IAAG,SAAS;GAAM;GAChD,2BAA4B,eAAe,SAAS;GACpD,eAAe,YAAY;IACvB,MAAM,OAAO,MAAM;IACnB,eAAe;IACf,OAAO,KAAK,yBAAyB;GACzC;GACA,kBAAkB,UAAU,MAAM;GAClC,uBAAuB,WAAW,OAAO;GACzC,gBAAgB,UAAU,oBAAoB;IAC1C,MAAM,wCAAwB,IAAI,IAAoB;IACtD,KAAK,MAAM,SAAS,SAAS,QACzB,KAAK,MAAM,WAAW,MAAM,UACxB,sBAAsB,IAAI,QAAQ,eAAe,QAAQ,MAAM;IAGvE,KAAK,MAAM,UAAU,aAAa,eAAe,GAC7C,sBAAsB,IAAI,OAAO,eAAe,OAAO,MAAM;IAEjE,MAAM,QAAQ,EACV,SAAS,MAAM,KAAK,wBAAwB,CAAC,eAAe,aAAa;KACrE;KACA;IACJ,EAAE,EACN,CAAC;GACL;GACA,wBAAwB,YAAY;IAChC,MAAM,QAAQ,EACV,SAAS,aAAa,OAAO,EACjC,CAAC;GACL;GACA,QAAQ,MAAM;GACd,SAAS,MAAM;GACf,SAAS,MAAM;EACnB,CAAC;EAED,aAAa,OAAO,YAAY;CACpC;AACJ"}
|
|
@@ -5,6 +5,12 @@ interface Transports {
|
|
|
5
5
|
authApi: Transport;
|
|
6
6
|
publicApi: Transport;
|
|
7
7
|
}
|
|
8
|
+
/** Connect transports available to services that call authenticated APIs. */
|
|
9
|
+
type AuthApiTransports = Pick<Transports, "authApi">;
|
|
10
|
+
/** Connect transports available to services that call public APIs. */
|
|
11
|
+
type PublicApiTransports = Pick<Transports, "publicApi">;
|
|
12
|
+
/** Connect transports available to services that call both public and authenticated APIs. */
|
|
13
|
+
type AuthAndPublicApiTransports = Pick<Transports, "authApi" | "publicApi">;
|
|
8
14
|
/**
|
|
9
15
|
* Generic JWT auth for HTTP/Connect endpoints that follow the Bearer token contract.
|
|
10
16
|
*/
|
|
@@ -24,5 +30,5 @@ interface ApiKeyEd25519AuthProvider {
|
|
|
24
30
|
getSecretKey: () => Uint8Array | null | Promise<Uint8Array | null>;
|
|
25
31
|
}
|
|
26
32
|
//#endregion
|
|
27
|
-
export { ApiKeyEd25519AuthProvider, JwtAuthProvider, Transports };
|
|
33
|
+
export { ApiKeyEd25519AuthProvider, AuthAndPublicApiTransports, AuthApiTransports, JwtAuthProvider, PublicApiTransports, Transports };
|
|
28
34
|
//# sourceMappingURL=transports.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transports.d.ts","names":[],"sources":["../../src/shared/transports.ts"],"mappings":";;;UA8BiB;EACb,SAAS;EACT,WAAW
|
|
1
|
+
{"version":3,"file":"transports.d.ts","names":[],"sources":["../../src/shared/transports.ts"],"mappings":";;;UA8BiB;EACb,SAAS;EACT,WAAW;;;KAIH,oBAAoB,KAAK;;KAGzB,sBAAsB,KAAK;;KAG3B,6BAA6B,KAAK;;;;UAK7B;EACb;;EAEA,gCAAgC;;;;;;UAOnB;EACb;EACA,gCAAgC;;EAEhC,oBAAoB,oBAAoB,QAAQ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transports.js","names":[],"sources":["../../src/shared/transports.ts"],"sourcesContent":["import { createConnectTransport } from \"@connectrpc/connect-web\";\nimport type { Transport, Interceptor } from \"@connectrpc/connect\";\nimport { toBinary, toJsonString } from \"@bufbuild/protobuf\";\nimport { signAsync } from \"@noble/ed25519\";\nimport { createErrorMappingTransport } from \"./connect-error-mapping.js\";\nimport {\n AuthenticationError,\n ConfigurationError,\n isAbortError,\n NetworkError,\n PolyesterError,\n} from \"./errors.js\";\n\nexport { isAbortError };\n\nexport type ConnectWireFormat = \"binary\" | \"json\";\n\nexport const POLYESTER_MOCK_HEADER = \"x-polyester-mock\";\n\nexport interface TransportConfig {\n apiUrl: string;\n interceptors?: Interceptor[];\n auth?: JwtAuthProvider | ApiKeyEd25519AuthProvider;\n /**\n * Connect wire format. Defaults to binary for production performance.\n * Use `json` for the API Playground visualization.\n */\n wireFormat?: ConnectWireFormat;\n}\n\nexport interface Transports {\n authApi: Transport;\n publicApi: Transport;\n}\n\n/**\n * Generic JWT auth for HTTP/Connect endpoints that follow the Bearer token contract.\n */\nexport interface JwtAuthProvider {\n kind: \"jwt\";\n /** Typically wraps the configured browser auth token storage. */\n getToken: () => string | null | Promise<string | null>;\n}\n\n/**\n * Generic Ed25519 API key auth for HTTP/Connect endpoints that follow the\n * X-API-KEY-ID / X-API-TIMESTAMP / X-API-SIGNATURE contract.\n */\nexport interface ApiKeyEd25519AuthProvider {\n kind: \"api-key-ed25519\";\n getKeyId: () => string | null | Promise<string | null>;\n /** Ed25519 secret key bytes (not hex) for signing. */\n getSecretKey: () => Uint8Array | null | Promise<Uint8Array | null>;\n}\n\nexport interface ApiKeyEd25519SigningRequest {\n url: string | URL;\n method: string;\n body?: Uint8Array;\n timestamp?: string;\n}\n\n/**\n * Returns the fetch implementation used by SDK transports.\n */\nexport function makeFetch(): typeof fetch {\n const wrappedFetch = Object.assign(\n async (input: Parameters<typeof fetch>[0], init?: Parameters<typeof fetch>[1]) => {\n // Normalize headers into a mutable Headers object\n const headers = new Headers(init?.headers);\n\n try {\n const res = await fetch(input, {\n ...init,\n headers,\n redirect: \"manual\",\n });\n\n return res;\n } catch (err) {\n if (isAbortError(err)) throw err;\n throw new NetworkError(\"Transport request failed\", { cause: err });\n }\n },\n fetch,\n );\n\n return wrappedFetch;\n}\n\n/**\n * Creates Connect transports for SDK service clients.\n */\nexport function createTransports(config: TransportConfig): Transports {\n const { apiUrl, interceptors = [], auth, wireFormat = \"binary\" } = config;\n const useBinaryFormat = wireFormat === \"binary\";\n const publicApi = createErrorMappingTransport(\n createConnectTransport({\n baseUrl: apiUrl,\n useBinaryFormat,\n interceptors,\n fetch: makeFetch(),\n }),\n );\n\n const authInterceptors = auth\n ? auth.kind === \"jwt\"\n ? [createAuthInterceptor(auth, { wireFormat }), ...interceptors]\n : [...interceptors, createAuthInterceptor(auth, { wireFormat })]\n : interceptors;\n const authApi = createErrorMappingTransport(\n createConnectTransport({\n baseUrl: apiUrl,\n useBinaryFormat,\n interceptors: authInterceptors,\n fetch: makeFetch(),\n }),\n );\n\n return { authApi, publicApi };\n}\n\n/**\n * Creates an interceptor that enables mock transport behavior.\n */\nexport function createMockInterceptor(getEnabled: () => boolean): Interceptor {\n return (next) => async (req) => {\n if (getEnabled()) req.header.set(POLYESTER_MOCK_HEADER, \"true\");\n return next(req);\n };\n}\n\nasync function sha256Hex(bytes: Uint8Array): Promise<string> {\n if (typeof crypto === \"undefined\" || !crypto.subtle) {\n throw new ConfigurationError(\"SHA-256 not available in this environment\");\n }\n const hash = await crypto.subtle.digest(\"SHA-256\", bytes.slice());\n return Array.from(new Uint8Array(hash), (b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nlet lastTimestamp = 0;\nfunction nextTimestamp(): string {\n lastTimestamp = Math.max(lastTimestamp + 1, Date.now());\n return String(lastTimestamp);\n}\n\nfunction canonicalQueryString(params: URLSearchParams): string {\n const pairs: string[] = [];\n for (const [k, v] of params.entries()) {\n pairs.push(`${encodeURIComponent(k)}=${encodeURIComponent(v)}`);\n }\n pairs.sort();\n return pairs.join(\"&\");\n}\n\n/**\n * Creates API-key authentication headers for endpoints using the Polyester Ed25519 signing contract.\n */\nexport async function createApiKeyEd25519AuthHeaders(\n auth: ApiKeyEd25519AuthProvider,\n request: ApiKeyEd25519SigningRequest,\n): Promise<Record<string, string>> {\n let keyId: string | null;\n let secretKey: Uint8Array | null;\n try {\n [keyId, secretKey] = await Promise.all([auth.getKeyId(), auth.getSecretKey()]);\n } catch (cause) {\n if (cause instanceof PolyesterError) throw cause;\n throw new ConfigurationError(\"API key credential provider failed\", { cause });\n }\n if (!keyId || !secretKey) throw new ConfigurationError(\"Missing API key ID or secret key\");\n if (!(secretKey instanceof Uint8Array) || secretKey.byteLength !== 32) {\n throw new ConfigurationError(\"API key secret key must contain exactly 32 bytes\");\n }\n\n const urlObj = new URL(request.url);\n const timestamp = request.timestamp ?? nextTimestamp();\n const bodyHash = await sha256Hex(request.body ?? new Uint8Array(0));\n const canonicalQuery = canonicalQueryString(urlObj.searchParams);\n const canonical = `${timestamp}\\n${request.method}\\n${urlObj.pathname}\\n${canonicalQuery}\\n${bodyHash}`;\n const msgBytes = new TextEncoder().encode(canonical);\n const sig = await signAsync(msgBytes, secretKey);\n const signatureHex = Array.from(sig, (b: number) => b.toString(16).padStart(2, \"0\")).join(\"\");\n\n return {\n \"X-API-KEY-ID\": keyId,\n \"X-API-TIMESTAMP\": timestamp,\n \"X-API-SIGNATURE\": signatureHex,\n };\n}\n\n/**\n * Resolves a JWT credential and translates provider failures or invalid values\n * into stable SDK errors.\n */\nexport async function resolveJwtToken(auth: JwtAuthProvider): Promise<string | null> {\n let token: string | null;\n try {\n token = await auth.getToken();\n } catch (cause) {\n if (cause instanceof PolyesterError) throw cause;\n throw new AuthenticationError(\"JWT token provider failed\", { cause });\n }\n if (token !== null && typeof token !== \"string\") {\n throw new ConfigurationError(\"JWT token provider must return a string or null\");\n }\n return token;\n}\n\n/**\n * Creates an interceptor that attaches SDK authentication headers.\n */\nexport function createAuthInterceptor(\n auth: JwtAuthProvider | ApiKeyEd25519AuthProvider,\n options?: { wireFormat?: ConnectWireFormat },\n): Interceptor {\n return (next) => async (req) => {\n const wireFormat = options?.wireFormat ?? \"binary\";\n if (auth.kind === \"jwt\") {\n const token = await resolveJwtToken(auth);\n if (token) {\n req.header.set(\"Authorization\", `Bearer ${token}`);\n }\n } else if (auth.kind === \"api-key-ed25519\") {\n if (req.stream) {\n throw new ConfigurationError(\n \"API key authentication does not support streaming Connect RPCs\",\n );\n }\n // Unary request: serialize the message using the method's input schema.\n const inputSchema = req.method.input;\n const bodyBytes =\n wireFormat === \"json\"\n ? new TextEncoder().encode(toJsonString(inputSchema, req.message))\n : toBinary(inputSchema, req.message);\n\n const headers = await createApiKeyEd25519AuthHeaders(auth, {\n url: req.url,\n method: req.requestMethod,\n body: bodyBytes,\n });\n for (const [key, value] of Object.entries(headers)) {\n req.header.set(key, value);\n }\n }\n return next(req);\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transports.js","names":[],"sources":["../../src/shared/transports.ts"],"sourcesContent":["import { createConnectTransport } from \"@connectrpc/connect-web\";\nimport type { Transport, Interceptor } from \"@connectrpc/connect\";\nimport { toBinary, toJsonString } from \"@bufbuild/protobuf\";\nimport { signAsync } from \"@noble/ed25519\";\nimport { createErrorMappingTransport } from \"./connect-error-mapping.js\";\nimport {\n AuthenticationError,\n ConfigurationError,\n isAbortError,\n NetworkError,\n PolyesterError,\n} from \"./errors.js\";\n\nexport { isAbortError };\n\nexport type ConnectWireFormat = \"binary\" | \"json\";\n\nexport const POLYESTER_MOCK_HEADER = \"x-polyester-mock\";\n\nexport interface TransportConfig {\n apiUrl: string;\n interceptors?: Interceptor[];\n auth?: JwtAuthProvider | ApiKeyEd25519AuthProvider;\n /**\n * Connect wire format. Defaults to binary for production performance.\n * Use `json` for the API Playground visualization.\n */\n wireFormat?: ConnectWireFormat;\n}\n\nexport interface Transports {\n authApi: Transport;\n publicApi: Transport;\n}\n\n/** Connect transports available to services that call authenticated APIs. */\nexport type AuthApiTransports = Pick<Transports, \"authApi\">;\n\n/** Connect transports available to services that call public APIs. */\nexport type PublicApiTransports = Pick<Transports, \"publicApi\">;\n\n/** Connect transports available to services that call both public and authenticated APIs. */\nexport type AuthAndPublicApiTransports = Pick<Transports, \"authApi\" | \"publicApi\">;\n\n/**\n * Generic JWT auth for HTTP/Connect endpoints that follow the Bearer token contract.\n */\nexport interface JwtAuthProvider {\n kind: \"jwt\";\n /** Typically wraps the configured browser auth token storage. */\n getToken: () => string | null | Promise<string | null>;\n}\n\n/**\n * Generic Ed25519 API key auth for HTTP/Connect endpoints that follow the\n * X-API-KEY-ID / X-API-TIMESTAMP / X-API-SIGNATURE contract.\n */\nexport interface ApiKeyEd25519AuthProvider {\n kind: \"api-key-ed25519\";\n getKeyId: () => string | null | Promise<string | null>;\n /** Ed25519 secret key bytes (not hex) for signing. */\n getSecretKey: () => Uint8Array | null | Promise<Uint8Array | null>;\n}\n\nexport interface ApiKeyEd25519SigningRequest {\n url: string | URL;\n method: string;\n body?: Uint8Array;\n timestamp?: string;\n}\n\n/**\n * Returns the fetch implementation used by SDK transports.\n */\nexport function makeFetch(): typeof fetch {\n const wrappedFetch = Object.assign(\n async (input: Parameters<typeof fetch>[0], init?: Parameters<typeof fetch>[1]) => {\n // Normalize headers into a mutable Headers object\n const headers = new Headers(init?.headers);\n\n try {\n const res = await fetch(input, {\n ...init,\n headers,\n redirect: \"manual\",\n });\n\n return res;\n } catch (err) {\n if (isAbortError(err)) throw err;\n throw new NetworkError(\"Transport request failed\", { cause: err });\n }\n },\n fetch,\n );\n\n return wrappedFetch;\n}\n\n/**\n * Creates Connect transports for SDK service clients.\n */\nexport function createTransports(config: TransportConfig): Transports {\n const { apiUrl, interceptors = [], auth, wireFormat = \"binary\" } = config;\n const useBinaryFormat = wireFormat === \"binary\";\n const publicApi = createErrorMappingTransport(\n createConnectTransport({\n baseUrl: apiUrl,\n useBinaryFormat,\n interceptors,\n fetch: makeFetch(),\n }),\n );\n\n const authInterceptors = auth\n ? auth.kind === \"jwt\"\n ? [createAuthInterceptor(auth, { wireFormat }), ...interceptors]\n : [...interceptors, createAuthInterceptor(auth, { wireFormat })]\n : interceptors;\n const authApi = createErrorMappingTransport(\n createConnectTransport({\n baseUrl: apiUrl,\n useBinaryFormat,\n interceptors: authInterceptors,\n fetch: makeFetch(),\n }),\n );\n\n return { authApi, publicApi };\n}\n\n/**\n * Creates an interceptor that enables mock transport behavior.\n */\nexport function createMockInterceptor(getEnabled: () => boolean): Interceptor {\n return (next) => async (req) => {\n if (getEnabled()) req.header.set(POLYESTER_MOCK_HEADER, \"true\");\n return next(req);\n };\n}\n\nasync function sha256Hex(bytes: Uint8Array): Promise<string> {\n if (typeof crypto === \"undefined\" || !crypto.subtle) {\n throw new ConfigurationError(\"SHA-256 not available in this environment\");\n }\n const hash = await crypto.subtle.digest(\"SHA-256\", bytes.slice());\n return Array.from(new Uint8Array(hash), (b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nlet lastTimestamp = 0;\nfunction nextTimestamp(): string {\n lastTimestamp = Math.max(lastTimestamp + 1, Date.now());\n return String(lastTimestamp);\n}\n\nfunction canonicalQueryString(params: URLSearchParams): string {\n const pairs: string[] = [];\n for (const [k, v] of params.entries()) {\n pairs.push(`${encodeURIComponent(k)}=${encodeURIComponent(v)}`);\n }\n pairs.sort();\n return pairs.join(\"&\");\n}\n\n/**\n * Creates API-key authentication headers for endpoints using the Polyester Ed25519 signing contract.\n */\nexport async function createApiKeyEd25519AuthHeaders(\n auth: ApiKeyEd25519AuthProvider,\n request: ApiKeyEd25519SigningRequest,\n): Promise<Record<string, string>> {\n let keyId: string | null;\n let secretKey: Uint8Array | null;\n try {\n [keyId, secretKey] = await Promise.all([auth.getKeyId(), auth.getSecretKey()]);\n } catch (cause) {\n if (cause instanceof PolyesterError) throw cause;\n throw new ConfigurationError(\"API key credential provider failed\", { cause });\n }\n if (!keyId || !secretKey) throw new ConfigurationError(\"Missing API key ID or secret key\");\n if (!(secretKey instanceof Uint8Array) || secretKey.byteLength !== 32) {\n throw new ConfigurationError(\"API key secret key must contain exactly 32 bytes\");\n }\n\n const urlObj = new URL(request.url);\n const timestamp = request.timestamp ?? nextTimestamp();\n const bodyHash = await sha256Hex(request.body ?? new Uint8Array(0));\n const canonicalQuery = canonicalQueryString(urlObj.searchParams);\n const canonical = `${timestamp}\\n${request.method}\\n${urlObj.pathname}\\n${canonicalQuery}\\n${bodyHash}`;\n const msgBytes = new TextEncoder().encode(canonical);\n const sig = await signAsync(msgBytes, secretKey);\n const signatureHex = Array.from(sig, (b: number) => b.toString(16).padStart(2, \"0\")).join(\"\");\n\n return {\n \"X-API-KEY-ID\": keyId,\n \"X-API-TIMESTAMP\": timestamp,\n \"X-API-SIGNATURE\": signatureHex,\n };\n}\n\n/**\n * Resolves a JWT credential and translates provider failures or invalid values\n * into stable SDK errors.\n */\nexport async function resolveJwtToken(auth: JwtAuthProvider): Promise<string | null> {\n let token: string | null;\n try {\n token = await auth.getToken();\n } catch (cause) {\n if (cause instanceof PolyesterError) throw cause;\n throw new AuthenticationError(\"JWT token provider failed\", { cause });\n }\n if (token !== null && typeof token !== \"string\") {\n throw new ConfigurationError(\"JWT token provider must return a string or null\");\n }\n return token;\n}\n\n/**\n * Creates an interceptor that attaches SDK authentication headers.\n */\nexport function createAuthInterceptor(\n auth: JwtAuthProvider | ApiKeyEd25519AuthProvider,\n options?: { wireFormat?: ConnectWireFormat },\n): Interceptor {\n return (next) => async (req) => {\n const wireFormat = options?.wireFormat ?? \"binary\";\n if (auth.kind === \"jwt\") {\n const token = await resolveJwtToken(auth);\n if (token) {\n req.header.set(\"Authorization\", `Bearer ${token}`);\n }\n } else if (auth.kind === \"api-key-ed25519\") {\n if (req.stream) {\n throw new ConfigurationError(\n \"API key authentication does not support streaming Connect RPCs\",\n );\n }\n // Unary request: serialize the message using the method's input schema.\n const inputSchema = req.method.input;\n const bodyBytes =\n wireFormat === \"json\"\n ? new TextEncoder().encode(toJsonString(inputSchema, req.message))\n : toBinary(inputSchema, req.message);\n\n const headers = await createApiKeyEd25519AuthHeaders(auth, {\n url: req.url,\n method: req.requestMethod,\n body: bodyBytes,\n });\n for (const [key, value] of Object.entries(headers)) {\n req.header.set(key, value);\n }\n }\n return next(req);\n };\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED