@secondlayer/sdk 5.0.0 → 5.2.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/dist/index.d.ts +184 -2
- package/dist/index.js +233 -1
- package/dist/index.js.map +7 -3
- package/dist/streams/index.d.ts +184 -2
- package/dist/streams/index.js +233 -1
- package/dist/streams/index.js.map +7 -3
- package/package.json +3 -2
package/dist/index.d.ts
CHANGED
|
@@ -453,7 +453,189 @@ type DecodedNftTransfer = {
|
|
|
453
453
|
};
|
|
454
454
|
declare function isNftTransfer(event: StreamsEvent): event is NftTransferEvent;
|
|
455
455
|
declare function decodeNftTransfer(event: StreamsEvent): DecodedNftTransfer;
|
|
456
|
-
type
|
|
456
|
+
type DecodedStxTransferPayload = {
|
|
457
|
+
sender: string
|
|
458
|
+
recipient: string
|
|
459
|
+
amount: string
|
|
460
|
+
memo: string | null
|
|
461
|
+
};
|
|
462
|
+
type DecodedStxTransfer = {
|
|
463
|
+
cursor: string
|
|
464
|
+
block_height: number
|
|
465
|
+
tx_id: string
|
|
466
|
+
tx_index: number
|
|
467
|
+
event_index: number
|
|
468
|
+
event_type: "stx_transfer"
|
|
469
|
+
decoded_payload: DecodedStxTransferPayload
|
|
470
|
+
source_cursor: string
|
|
471
|
+
};
|
|
472
|
+
type DecodedStxMintPayload = {
|
|
473
|
+
recipient: string
|
|
474
|
+
amount: string
|
|
475
|
+
};
|
|
476
|
+
type DecodedStxMint = {
|
|
477
|
+
cursor: string
|
|
478
|
+
block_height: number
|
|
479
|
+
tx_id: string
|
|
480
|
+
tx_index: number
|
|
481
|
+
event_index: number
|
|
482
|
+
event_type: "stx_mint"
|
|
483
|
+
decoded_payload: DecodedStxMintPayload
|
|
484
|
+
source_cursor: string
|
|
485
|
+
};
|
|
486
|
+
type DecodedStxBurnPayload = {
|
|
487
|
+
sender: string
|
|
488
|
+
amount: string
|
|
489
|
+
};
|
|
490
|
+
type DecodedStxBurn = {
|
|
491
|
+
cursor: string
|
|
492
|
+
block_height: number
|
|
493
|
+
tx_id: string
|
|
494
|
+
tx_index: number
|
|
495
|
+
event_index: number
|
|
496
|
+
event_type: "stx_burn"
|
|
497
|
+
decoded_payload: DecodedStxBurnPayload
|
|
498
|
+
source_cursor: string
|
|
499
|
+
};
|
|
500
|
+
declare function isStxTransfer(event: StreamsEvent): event is StreamsEvent & {
|
|
501
|
+
event_type: "stx_transfer"
|
|
502
|
+
};
|
|
503
|
+
declare function decodeStxTransfer(event: StreamsEvent): DecodedStxTransfer;
|
|
504
|
+
declare function isStxMint(event: StreamsEvent): event is StreamsEvent & {
|
|
505
|
+
event_type: "stx_mint"
|
|
506
|
+
};
|
|
507
|
+
declare function decodeStxMint(event: StreamsEvent): DecodedStxMint;
|
|
508
|
+
declare function isStxBurn(event: StreamsEvent): event is StreamsEvent & {
|
|
509
|
+
event_type: "stx_burn"
|
|
510
|
+
};
|
|
511
|
+
declare function decodeStxBurn(event: StreamsEvent): DecodedStxBurn;
|
|
512
|
+
type DecodedFtMintPayload = {
|
|
513
|
+
asset_identifier: string
|
|
514
|
+
contract_id: string
|
|
515
|
+
token_name: string | null
|
|
516
|
+
recipient: string
|
|
517
|
+
amount: string
|
|
518
|
+
};
|
|
519
|
+
type DecodedFtMint = {
|
|
520
|
+
cursor: string
|
|
521
|
+
block_height: number
|
|
522
|
+
tx_id: string
|
|
523
|
+
tx_index: number
|
|
524
|
+
event_index: number
|
|
525
|
+
event_type: "ft_mint"
|
|
526
|
+
decoded_payload: DecodedFtMintPayload
|
|
527
|
+
source_cursor: string
|
|
528
|
+
};
|
|
529
|
+
type DecodedFtBurnPayload = {
|
|
530
|
+
asset_identifier: string
|
|
531
|
+
contract_id: string
|
|
532
|
+
token_name: string | null
|
|
533
|
+
sender: string
|
|
534
|
+
amount: string
|
|
535
|
+
};
|
|
536
|
+
type DecodedFtBurn = {
|
|
537
|
+
cursor: string
|
|
538
|
+
block_height: number
|
|
539
|
+
tx_id: string
|
|
540
|
+
tx_index: number
|
|
541
|
+
event_index: number
|
|
542
|
+
event_type: "ft_burn"
|
|
543
|
+
decoded_payload: DecodedFtBurnPayload
|
|
544
|
+
source_cursor: string
|
|
545
|
+
};
|
|
546
|
+
type DecodedNftMintPayload = {
|
|
547
|
+
asset_identifier: string
|
|
548
|
+
contract_id: string
|
|
549
|
+
token_name: string | null
|
|
550
|
+
recipient: string
|
|
551
|
+
value: string
|
|
552
|
+
};
|
|
553
|
+
type DecodedNftMint = {
|
|
554
|
+
cursor: string
|
|
555
|
+
block_height: number
|
|
556
|
+
tx_id: string
|
|
557
|
+
tx_index: number
|
|
558
|
+
event_index: number
|
|
559
|
+
event_type: "nft_mint"
|
|
560
|
+
decoded_payload: DecodedNftMintPayload
|
|
561
|
+
source_cursor: string
|
|
562
|
+
};
|
|
563
|
+
type DecodedNftBurnPayload = {
|
|
564
|
+
asset_identifier: string
|
|
565
|
+
contract_id: string
|
|
566
|
+
token_name: string | null
|
|
567
|
+
sender: string
|
|
568
|
+
value: string
|
|
569
|
+
};
|
|
570
|
+
type DecodedNftBurn = {
|
|
571
|
+
cursor: string
|
|
572
|
+
block_height: number
|
|
573
|
+
tx_id: string
|
|
574
|
+
tx_index: number
|
|
575
|
+
event_index: number
|
|
576
|
+
event_type: "nft_burn"
|
|
577
|
+
decoded_payload: DecodedNftBurnPayload
|
|
578
|
+
source_cursor: string
|
|
579
|
+
};
|
|
580
|
+
declare function isFtMint(event: StreamsEvent): event is StreamsEvent & {
|
|
581
|
+
event_type: "ft_mint"
|
|
582
|
+
};
|
|
583
|
+
declare function decodeFtMint(event: StreamsEvent): DecodedFtMint;
|
|
584
|
+
declare function isFtBurn(event: StreamsEvent): event is StreamsEvent & {
|
|
585
|
+
event_type: "ft_burn"
|
|
586
|
+
};
|
|
587
|
+
declare function decodeFtBurn(event: StreamsEvent): DecodedFtBurn;
|
|
588
|
+
declare function isNftMint(event: StreamsEvent): event is StreamsEvent & {
|
|
589
|
+
event_type: "nft_mint"
|
|
590
|
+
};
|
|
591
|
+
declare function decodeNftMint(event: StreamsEvent): DecodedNftMint;
|
|
592
|
+
declare function isNftBurn(event: StreamsEvent): event is StreamsEvent & {
|
|
593
|
+
event_type: "nft_burn"
|
|
594
|
+
};
|
|
595
|
+
declare function decodeNftBurn(event: StreamsEvent): DecodedNftBurn;
|
|
596
|
+
/** Decoded form of a Clarity `print` event:
|
|
597
|
+
* - `topic`: the print topic, when the contract emits a `{ topic, ... }` tuple
|
|
598
|
+
* - `value`: the Clarity value decoded to JSON (uints as strings, buffers as
|
|
599
|
+
* `0x…` hex, tuples as objects)
|
|
600
|
+
* - `raw_value`: the canonical serialized hex, for byte-exact consumers */
|
|
601
|
+
type DecodedPrintValue = {
|
|
602
|
+
topic: string | null
|
|
603
|
+
value: unknown
|
|
604
|
+
raw_value: string | null
|
|
605
|
+
};
|
|
606
|
+
type DecodedPrintPayload = {
|
|
607
|
+
contract_id: string | null
|
|
608
|
+
payload: DecodedPrintValue
|
|
609
|
+
};
|
|
610
|
+
type DecodedPrint = {
|
|
611
|
+
cursor: string
|
|
612
|
+
block_height: number
|
|
613
|
+
tx_id: string
|
|
614
|
+
tx_index: number
|
|
615
|
+
event_index: number
|
|
616
|
+
event_type: "print"
|
|
617
|
+
decoded_payload: DecodedPrintPayload
|
|
618
|
+
source_cursor: string
|
|
619
|
+
};
|
|
620
|
+
declare function isPrint(event: StreamsEvent): event is StreamsEvent & {
|
|
621
|
+
event_type: "print"
|
|
622
|
+
};
|
|
623
|
+
declare function decodePrint(event: StreamsEvent): DecodedPrint;
|
|
624
|
+
/** Superset of the columns the decoded_events table holds. Every decoded
|
|
625
|
+
* event's `decoded_payload` is assignable to this, so the indexer's writer
|
|
626
|
+
* can map columns generically instead of per-event-type. */
|
|
627
|
+
type DecodedEventColumns = {
|
|
628
|
+
contract_id?: string | null
|
|
629
|
+
asset_identifier?: string | null
|
|
630
|
+
sender?: string | null
|
|
631
|
+
recipient?: string | null
|
|
632
|
+
amount?: string | null
|
|
633
|
+
value?: string | null
|
|
634
|
+
memo?: string | null
|
|
635
|
+
/** JSONB overflow for non-flat types (e.g. print's decoded value). */
|
|
636
|
+
payload?: unknown
|
|
637
|
+
};
|
|
638
|
+
type DecodedEventRow = DecodedFtTransfer | DecodedNftTransfer | DecodedStxTransfer | DecodedStxMint | DecodedStxBurn | DecodedFtMint | DecodedFtBurn | DecodedNftMint | DecodedNftBurn | DecodedPrint;
|
|
457
639
|
import { SubgraphAgentSchema as SubgraphAgentSchema3, SubgraphSpecFormat as SubgraphSpecFormat2, SubgraphSpecOptions as SubgraphSpecOptions3 } from "@secondlayer/shared/subgraphs/spec";
|
|
458
640
|
/**
|
|
459
641
|
* Error thrown by {@link SecondLayer} when an API request fails.
|
|
@@ -566,4 +748,4 @@ type WebhookHeaderInput = HeaderLookup | StandardWebhooksHeaders | Record<string
|
|
|
566
748
|
* ```
|
|
567
749
|
*/
|
|
568
750
|
declare function verifyWebhookSignature(rawBody: string, headers: WebhookHeaderInput, secret: string, toleranceSeconds?: number): boolean;
|
|
569
|
-
export { verifyWebhookSignature, isNftTransfer, isFtTransfer, getSubgraph, decodeNftTransfer, decodeFtTransfer, createStreamsClient, VersionConflictError, ValidationError, UpdateSubscriptionRequest2 as UpdateSubscriptionRequest, Subscriptions, SubscriptionSummary2 as SubscriptionSummary, SubscriptionStatus, SubscriptionRuntime, SubscriptionFormat, SubscriptionDetail2 as SubscriptionDetail, Subgraphs, SubgraphSpecOptions3 as SubgraphSpecOptions, SubgraphSpecFormat2 as SubgraphSpecFormat, SubgraphAgentSchema3 as SubgraphAgentSchema, StreamsTip, StreamsServerError, StreamsReorgsListParams, StreamsReorgsListEnvelope, StreamsReorg, StreamsEventsStreamParams, StreamsEventsListParams, StreamsEventsListEnvelope, StreamsEventsEnvelope, StreamsEventsConsumeResult, StreamsEventsConsumeParams, StreamsEventType, StreamsEventPayload, StreamsEvent, StreamsClient, StreamsCanonicalBlock, SecondLayerOptions, SecondLayer, RotateSecretResponse2 as RotateSecretResponse, ReplayResult2 as ReplayResult, RateLimitError, NftTransfersWalkParams, NftTransfersListParams, NftTransfersEnvelope, NftTransferPayload, NftTransferEvent, NftTransfer, IndexTip, Index, FtTransfersWalkParams, FtTransfersListParams, FtTransfersEnvelope, FtTransferPayload, FtTransferEvent, FtTransfer, FetchLike2 as FetchLike, DeliveryRow2 as DeliveryRow, DecodedNftTransferPayload, DecodedNftTransfer, DecodedFtTransferPayload, DecodedFtTransfer, DecodedEventRow, DeadRow2 as DeadRow, CreateSubscriptionResponse2 as CreateSubscriptionResponse, CreateSubscriptionRequest2 as CreateSubscriptionRequest, AuthError, ApiError };
|
|
751
|
+
export { verifyWebhookSignature, isStxTransfer, isStxMint, isStxBurn, isPrint, isNftTransfer, isNftMint, isNftBurn, isFtTransfer, isFtMint, isFtBurn, getSubgraph, decodeStxTransfer, decodeStxMint, decodeStxBurn, decodePrint, decodeNftTransfer, decodeNftMint, decodeNftBurn, decodeFtTransfer, decodeFtMint, decodeFtBurn, createStreamsClient, VersionConflictError, ValidationError, UpdateSubscriptionRequest2 as UpdateSubscriptionRequest, Subscriptions, SubscriptionSummary2 as SubscriptionSummary, SubscriptionStatus, SubscriptionRuntime, SubscriptionFormat, SubscriptionDetail2 as SubscriptionDetail, Subgraphs, SubgraphSpecOptions3 as SubgraphSpecOptions, SubgraphSpecFormat2 as SubgraphSpecFormat, SubgraphAgentSchema3 as SubgraphAgentSchema, StreamsTip, StreamsServerError, StreamsReorgsListParams, StreamsReorgsListEnvelope, StreamsReorg, StreamsEventsStreamParams, StreamsEventsListParams, StreamsEventsListEnvelope, StreamsEventsEnvelope, StreamsEventsConsumeResult, StreamsEventsConsumeParams, StreamsEventType, StreamsEventPayload, StreamsEvent, StreamsClient, StreamsCanonicalBlock, SecondLayerOptions, SecondLayer, RotateSecretResponse2 as RotateSecretResponse, ReplayResult2 as ReplayResult, RateLimitError, NftTransfersWalkParams, NftTransfersListParams, NftTransfersEnvelope, NftTransferPayload, NftTransferEvent, NftTransfer, IndexTip, Index, FtTransfersWalkParams, FtTransfersListParams, FtTransfersEnvelope, FtTransferPayload, FtTransferEvent, FtTransfer, FetchLike2 as FetchLike, DeliveryRow2 as DeliveryRow, DecodedStxTransferPayload, DecodedStxTransfer, DecodedStxMintPayload, DecodedStxMint, DecodedStxBurnPayload, DecodedStxBurn, DecodedPrintValue, DecodedPrintPayload, DecodedPrint, DecodedNftTransferPayload, DecodedNftTransfer, DecodedNftMintPayload, DecodedNftMint, DecodedNftBurnPayload, DecodedNftBurn, DecodedFtTransferPayload, DecodedFtTransfer, DecodedFtMintPayload, DecodedFtMint, DecodedFtBurnPayload, DecodedFtBurn, DecodedEventRow, DecodedEventColumns, DeadRow2 as DeadRow, CreateSubscriptionResponse2 as CreateSubscriptionResponse, CreateSubscriptionRequest2 as CreateSubscriptionRequest, AuthError, ApiError };
|
package/dist/index.js
CHANGED
|
@@ -848,6 +848,222 @@ function decodeNftTransfer(event) {
|
|
|
848
848
|
source_cursor: event.cursor
|
|
849
849
|
};
|
|
850
850
|
}
|
|
851
|
+
// src/streams/_payload.ts
|
|
852
|
+
function requireString3(payload, field, eventType) {
|
|
853
|
+
const value = payload[field];
|
|
854
|
+
if (typeof value !== "string" || value.length === 0) {
|
|
855
|
+
throw new Error(`${eventType} payload missing ${field}`);
|
|
856
|
+
}
|
|
857
|
+
return value;
|
|
858
|
+
}
|
|
859
|
+
function optionalString(value) {
|
|
860
|
+
return typeof value === "string" && value.length > 0 ? value : null;
|
|
861
|
+
}
|
|
862
|
+
function requireAmount(payload, eventType) {
|
|
863
|
+
const amount = requireString3(payload, "amount", eventType);
|
|
864
|
+
if (!/^(0|[1-9]\d*)$/.test(amount)) {
|
|
865
|
+
throw new Error(`${eventType} payload has malformed amount`);
|
|
866
|
+
}
|
|
867
|
+
return amount;
|
|
868
|
+
}
|
|
869
|
+
function parseAssetIdentifier3(assetIdentifier, eventType) {
|
|
870
|
+
const [contractId, tokenName] = assetIdentifier.split("::");
|
|
871
|
+
if (!contractId) {
|
|
872
|
+
throw new Error(`${eventType} payload has malformed asset_identifier`);
|
|
873
|
+
}
|
|
874
|
+
return {
|
|
875
|
+
contract_id: contractId,
|
|
876
|
+
token_name: tokenName && tokenName.length > 0 ? tokenName : null
|
|
877
|
+
};
|
|
878
|
+
}
|
|
879
|
+
function requireHexValue2(payload, eventType) {
|
|
880
|
+
const rawValue = payload.raw_value;
|
|
881
|
+
if (typeof rawValue === "string") {
|
|
882
|
+
if (!/^0x[0-9a-fA-F]*$/.test(rawValue)) {
|
|
883
|
+
throw new Error(`${eventType} payload has malformed value`);
|
|
884
|
+
}
|
|
885
|
+
return rawValue;
|
|
886
|
+
}
|
|
887
|
+
const value = payload.value;
|
|
888
|
+
const hex = typeof value === "string" ? value : value && typeof value === "object" && typeof value.hex === "string" ? value.hex : null;
|
|
889
|
+
if (!hex) {
|
|
890
|
+
throw new Error(`${eventType} payload missing value`);
|
|
891
|
+
}
|
|
892
|
+
if (!/^0x[0-9a-fA-F]*$/.test(hex)) {
|
|
893
|
+
throw new Error(`${eventType} payload has malformed value`);
|
|
894
|
+
}
|
|
895
|
+
return hex;
|
|
896
|
+
}
|
|
897
|
+
function decodedRow(event, eventType, decoded_payload) {
|
|
898
|
+
return {
|
|
899
|
+
cursor: event.cursor,
|
|
900
|
+
block_height: event.block_height,
|
|
901
|
+
tx_id: event.tx_id,
|
|
902
|
+
tx_index: event.tx_index,
|
|
903
|
+
event_index: event.event_index,
|
|
904
|
+
event_type: eventType,
|
|
905
|
+
decoded_payload,
|
|
906
|
+
source_cursor: event.cursor
|
|
907
|
+
};
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
// src/streams/stx-events.ts
|
|
911
|
+
function isStxTransfer(event) {
|
|
912
|
+
return event.event_type === "stx_transfer";
|
|
913
|
+
}
|
|
914
|
+
function decodeStxTransfer(event) {
|
|
915
|
+
if (!isStxTransfer(event)) {
|
|
916
|
+
throw new Error(`Expected stx_transfer event, got ${event.event_type}`);
|
|
917
|
+
}
|
|
918
|
+
const payload = event.payload;
|
|
919
|
+
return decodedRow(event, "stx_transfer", {
|
|
920
|
+
sender: requireString3(payload, "sender", "stx_transfer"),
|
|
921
|
+
recipient: requireString3(payload, "recipient", "stx_transfer"),
|
|
922
|
+
amount: requireAmount(payload, "stx_transfer"),
|
|
923
|
+
memo: optionalString(payload.memo)
|
|
924
|
+
});
|
|
925
|
+
}
|
|
926
|
+
function isStxMint(event) {
|
|
927
|
+
return event.event_type === "stx_mint";
|
|
928
|
+
}
|
|
929
|
+
function decodeStxMint(event) {
|
|
930
|
+
if (!isStxMint(event)) {
|
|
931
|
+
throw new Error(`Expected stx_mint event, got ${event.event_type}`);
|
|
932
|
+
}
|
|
933
|
+
const payload = event.payload;
|
|
934
|
+
return decodedRow(event, "stx_mint", {
|
|
935
|
+
recipient: requireString3(payload, "recipient", "stx_mint"),
|
|
936
|
+
amount: requireAmount(payload, "stx_mint")
|
|
937
|
+
});
|
|
938
|
+
}
|
|
939
|
+
function isStxBurn(event) {
|
|
940
|
+
return event.event_type === "stx_burn";
|
|
941
|
+
}
|
|
942
|
+
function decodeStxBurn(event) {
|
|
943
|
+
if (!isStxBurn(event)) {
|
|
944
|
+
throw new Error(`Expected stx_burn event, got ${event.event_type}`);
|
|
945
|
+
}
|
|
946
|
+
const payload = event.payload;
|
|
947
|
+
return decodedRow(event, "stx_burn", {
|
|
948
|
+
sender: requireString3(payload, "sender", "stx_burn"),
|
|
949
|
+
amount: requireAmount(payload, "stx_burn")
|
|
950
|
+
});
|
|
951
|
+
}
|
|
952
|
+
// src/streams/token-mint-burn.ts
|
|
953
|
+
function assetFields(event, eventType) {
|
|
954
|
+
const assetIdentifier = requireString3(event.payload, "asset_identifier", eventType);
|
|
955
|
+
const { contract_id, token_name } = parseAssetIdentifier3(assetIdentifier, eventType);
|
|
956
|
+
return {
|
|
957
|
+
asset_identifier: assetIdentifier,
|
|
958
|
+
contract_id: event.contract_id ?? contract_id,
|
|
959
|
+
token_name
|
|
960
|
+
};
|
|
961
|
+
}
|
|
962
|
+
function isFtMint(event) {
|
|
963
|
+
return event.event_type === "ft_mint";
|
|
964
|
+
}
|
|
965
|
+
function decodeFtMint(event) {
|
|
966
|
+
if (!isFtMint(event)) {
|
|
967
|
+
throw new Error(`Expected ft_mint event, got ${event.event_type}`);
|
|
968
|
+
}
|
|
969
|
+
return decodedRow(event, "ft_mint", {
|
|
970
|
+
...assetFields(event, "ft_mint"),
|
|
971
|
+
recipient: requireString3(event.payload, "recipient", "ft_mint"),
|
|
972
|
+
amount: requireAmount(event.payload, "ft_mint")
|
|
973
|
+
});
|
|
974
|
+
}
|
|
975
|
+
function isFtBurn(event) {
|
|
976
|
+
return event.event_type === "ft_burn";
|
|
977
|
+
}
|
|
978
|
+
function decodeFtBurn(event) {
|
|
979
|
+
if (!isFtBurn(event)) {
|
|
980
|
+
throw new Error(`Expected ft_burn event, got ${event.event_type}`);
|
|
981
|
+
}
|
|
982
|
+
return decodedRow(event, "ft_burn", {
|
|
983
|
+
...assetFields(event, "ft_burn"),
|
|
984
|
+
sender: requireString3(event.payload, "sender", "ft_burn"),
|
|
985
|
+
amount: requireAmount(event.payload, "ft_burn")
|
|
986
|
+
});
|
|
987
|
+
}
|
|
988
|
+
function isNftMint(event) {
|
|
989
|
+
return event.event_type === "nft_mint";
|
|
990
|
+
}
|
|
991
|
+
function decodeNftMint(event) {
|
|
992
|
+
if (!isNftMint(event)) {
|
|
993
|
+
throw new Error(`Expected nft_mint event, got ${event.event_type}`);
|
|
994
|
+
}
|
|
995
|
+
return decodedRow(event, "nft_mint", {
|
|
996
|
+
...assetFields(event, "nft_mint"),
|
|
997
|
+
recipient: requireString3(event.payload, "recipient", "nft_mint"),
|
|
998
|
+
value: requireHexValue2(event.payload, "nft_mint")
|
|
999
|
+
});
|
|
1000
|
+
}
|
|
1001
|
+
function isNftBurn(event) {
|
|
1002
|
+
return event.event_type === "nft_burn";
|
|
1003
|
+
}
|
|
1004
|
+
function decodeNftBurn(event) {
|
|
1005
|
+
if (!isNftBurn(event)) {
|
|
1006
|
+
throw new Error(`Expected nft_burn event, got ${event.event_type}`);
|
|
1007
|
+
}
|
|
1008
|
+
return decodedRow(event, "nft_burn", {
|
|
1009
|
+
...assetFields(event, "nft_burn"),
|
|
1010
|
+
sender: requireString3(event.payload, "sender", "nft_burn"),
|
|
1011
|
+
value: requireHexValue2(event.payload, "nft_burn")
|
|
1012
|
+
});
|
|
1013
|
+
}
|
|
1014
|
+
// src/streams/print.ts
|
|
1015
|
+
import { cvToValue, deserializeCV } from "@secondlayer/stacks/clarity";
|
|
1016
|
+
function printValueHex(payload) {
|
|
1017
|
+
if (typeof payload.raw_value === "string")
|
|
1018
|
+
return payload.raw_value;
|
|
1019
|
+
const value = payload.value;
|
|
1020
|
+
if (typeof value === "string" && value.startsWith("0x"))
|
|
1021
|
+
return value;
|
|
1022
|
+
if (value && typeof value === "object" && typeof value.hex === "string") {
|
|
1023
|
+
return value.hex;
|
|
1024
|
+
}
|
|
1025
|
+
return null;
|
|
1026
|
+
}
|
|
1027
|
+
function toJsonSafe(value) {
|
|
1028
|
+
if (typeof value === "bigint")
|
|
1029
|
+
return value.toString();
|
|
1030
|
+
if (Array.isArray(value))
|
|
1031
|
+
return value.map(toJsonSafe);
|
|
1032
|
+
if (value && typeof value === "object") {
|
|
1033
|
+
const out = {};
|
|
1034
|
+
for (const [key, val] of Object.entries(value)) {
|
|
1035
|
+
out[key] = toJsonSafe(val);
|
|
1036
|
+
}
|
|
1037
|
+
return out;
|
|
1038
|
+
}
|
|
1039
|
+
return value;
|
|
1040
|
+
}
|
|
1041
|
+
function isPrint(event) {
|
|
1042
|
+
return event.event_type === "print";
|
|
1043
|
+
}
|
|
1044
|
+
function decodePrint(event) {
|
|
1045
|
+
if (!isPrint(event)) {
|
|
1046
|
+
throw new Error(`Expected print event, got ${event.event_type}`);
|
|
1047
|
+
}
|
|
1048
|
+
const payload = event.payload;
|
|
1049
|
+
const topic = optionalString(payload.topic);
|
|
1050
|
+
const rawValue = printValueHex(payload);
|
|
1051
|
+
let value;
|
|
1052
|
+
if (rawValue) {
|
|
1053
|
+
try {
|
|
1054
|
+
const hex = rawValue.startsWith("0x") ? rawValue.slice(2) : rawValue;
|
|
1055
|
+
value = toJsonSafe(cvToValue(deserializeCV(hex)));
|
|
1056
|
+
} catch {
|
|
1057
|
+
value = toJsonSafe(payload.value ?? null);
|
|
1058
|
+
}
|
|
1059
|
+
} else {
|
|
1060
|
+
value = toJsonSafe(payload.value ?? null);
|
|
1061
|
+
}
|
|
1062
|
+
return decodedRow(event, "print", {
|
|
1063
|
+
contract_id: event.contract_id ?? optionalString(payload.contract_id),
|
|
1064
|
+
payload: { topic, value, raw_value: rawValue }
|
|
1065
|
+
});
|
|
1066
|
+
}
|
|
851
1067
|
// src/streams/types.ts
|
|
852
1068
|
var STREAMS_EVENT_TYPES = [
|
|
853
1069
|
"stx_transfer",
|
|
@@ -907,11 +1123,27 @@ function verifyWebhookSignature(rawBody, headers, secret, toleranceSeconds = 300
|
|
|
907
1123
|
}
|
|
908
1124
|
export {
|
|
909
1125
|
verifyWebhookSignature,
|
|
1126
|
+
isStxTransfer,
|
|
1127
|
+
isStxMint,
|
|
1128
|
+
isStxBurn,
|
|
1129
|
+
isPrint,
|
|
910
1130
|
isNftTransfer,
|
|
1131
|
+
isNftMint,
|
|
1132
|
+
isNftBurn,
|
|
911
1133
|
isFtTransfer,
|
|
1134
|
+
isFtMint,
|
|
1135
|
+
isFtBurn,
|
|
912
1136
|
getSubgraph,
|
|
1137
|
+
decodeStxTransfer,
|
|
1138
|
+
decodeStxMint,
|
|
1139
|
+
decodeStxBurn,
|
|
1140
|
+
decodePrint,
|
|
913
1141
|
decodeNftTransfer,
|
|
1142
|
+
decodeNftMint,
|
|
1143
|
+
decodeNftBurn,
|
|
914
1144
|
decodeFtTransfer,
|
|
1145
|
+
decodeFtMint,
|
|
1146
|
+
decodeFtBurn,
|
|
915
1147
|
createStreamsClient,
|
|
916
1148
|
VersionConflictError,
|
|
917
1149
|
ValidationError,
|
|
@@ -925,5 +1157,5 @@ export {
|
|
|
925
1157
|
ApiError
|
|
926
1158
|
};
|
|
927
1159
|
|
|
928
|
-
//# debugId=
|
|
1160
|
+
//# debugId=CA72339C973F500764756E2164756E21
|
|
929
1161
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/errors.ts", "../src/base.ts", "../src/subgraphs/serialize.ts", "../src/subgraphs/client.ts", "../src/index-api/client.ts", "../src/streams/consumer.ts", "../src/streams/errors.ts", "../src/streams/client.ts", "../src/subscriptions/client.ts", "../src/client.ts", "../src/subgraphs/get-subgraph.ts", "../src/streams/ft-transfer.ts", "../src/streams/nft-transfer.ts", "../src/streams/types.ts", "../src/webhooks.ts"],
|
|
3
|
+
"sources": ["../src/errors.ts", "../src/base.ts", "../src/subgraphs/serialize.ts", "../src/subgraphs/client.ts", "../src/index-api/client.ts", "../src/streams/consumer.ts", "../src/streams/errors.ts", "../src/streams/client.ts", "../src/subscriptions/client.ts", "../src/client.ts", "../src/subgraphs/get-subgraph.ts", "../src/streams/ft-transfer.ts", "../src/streams/nft-transfer.ts", "../src/streams/_payload.ts", "../src/streams/stx-events.ts", "../src/streams/token-mint-burn.ts", "../src/streams/print.ts", "../src/streams/types.ts", "../src/webhooks.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"/**\n * Error thrown by {@link SecondLayer} when an API request fails.\n * Includes the HTTP status code for programmatic error handling.\n *\n * @example\n * ```ts\n * try {\n * await client.subgraphs.get(\"my-subgraph\");\n * } catch (err) {\n * if (err instanceof ApiError && err.status === 404) {\n * console.log(\"Subgraph not found\");\n * }\n * }\n * ```\n */\nexport class ApiError extends Error {\n\tconstructor(\n\t\t/** HTTP status code (0 for network errors). */\n\t\tpublic status: number,\n\t\tmessage: string,\n\t\t/** Raw response body (parsed JSON if possible) — preserved for callers that need error details. */\n\t\tpublic body?: unknown,\n\t\t/** Stable machine-readable code from the API's `{error, code}` error envelope. */\n\t\tpublic code?: string,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"ApiError\";\n\t}\n}\n\n/**\n * Thrown on optimistic-concurrency conflict when a deploy supplies an\n * `expectedVersion` that no longer matches the server's stored version.\n */\nexport class VersionConflictError extends ApiError {\n\tconstructor(\n\t\tpublic currentVersion: string,\n\t\tpublic expectedVersion: string,\n\t\tmessage = `Version conflict: expected ${expectedVersion}, current ${currentVersion}`,\n\t) {\n\t\tsuper(409, message, { currentVersion, expectedVersion });\n\t\tthis.name = \"VersionConflictError\";\n\t}\n}\n",
|
|
6
6
|
"import { ApiError } from \"./errors.ts\";\n\nexport type FetchLike = (\n\tinput: string | URL | Request,\n\tinit?: RequestInit,\n) => Promise<Response>;\n\nexport interface SecondLayerOptions {\n\t/** Base URL of the Secondlayer platform API (trailing slashes are stripped). */\n\tbaseUrl: string;\n\t/** Bearer token for authenticated requests. */\n\tapiKey?: string;\n\t/** Fetch implementation. Tests and edge runtimes can provide their own. */\n\tfetchImpl?: FetchLike;\n\t/** Deploy origin label sent as `x-sl-origin` (telemetry). Defaults to `cli`. */\n\torigin?: \"cli\" | \"mcp\" | \"session\";\n}\n\nconst DEFAULT_BASE_URL = \"https://api.secondlayer.tools\";\n\nexport abstract class BaseClient {\n\tprotected baseUrl: string;\n\tprotected apiKey?: string;\n\tprotected origin: \"cli\" | \"mcp\" | \"session\";\n\n\tconstructor(options: Partial<SecondLayerOptions> = {}) {\n\t\tthis.baseUrl = (options.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/+$/, \"\");\n\t\tthis.apiKey = options.apiKey;\n\t\tthis.origin = options.origin ?? \"cli\";\n\t}\n\n\tstatic authHeaders(apiKey?: string): Record<string, string> {\n\t\tconst headers: Record<string, string> = {\n\t\t\t\"Content-Type\": \"application/json\",\n\t\t};\n\t\tif (apiKey) {\n\t\t\theaders.Authorization = `Bearer ${apiKey}`;\n\t\t}\n\t\treturn headers;\n\t}\n\n\tprotected async request<T>(\n\t\tmethod: string,\n\t\tpath: string,\n\t\tbody?: unknown,\n\t): Promise<T> {\n\t\tconst response = await this.fetchResponse(method, path, body);\n\t\tif (response.status === 204) {\n\t\t\treturn undefined as T;\n\t\t}\n\t\treturn response.json() as Promise<T>;\n\t}\n\n\tprotected async requestText(\n\t\tmethod: string,\n\t\tpath: string,\n\t\tbody?: unknown,\n\t): Promise<string> {\n\t\tconst response = await this.fetchResponse(method, path, body);\n\t\treturn response.text();\n\t}\n\n\tprivate async fetchResponse(\n\t\tmethod: string,\n\t\tpath: string,\n\t\tbody?: unknown,\n\t): Promise<Response> {\n\t\tconst url = `${this.baseUrl}${path}`;\n\t\tconst headers = BaseClient.authHeaders(this.apiKey);\n\t\theaders[\"x-sl-origin\"] = this.origin;\n\n\t\t// Serialize the body BEFORE the network try so a body-encoding error\n\t\t// (e.g. unsupported BigInt) isn't misreported as \"Cannot reach API\".\n\t\t// BigInts are stringified — server schemas accept jsonb so the value\n\t\t// reaches the server intact, and any field that needs an actual bigint\n\t\t// at runtime is rehydrated by the consuming module (subgraph handler\n\t\t// code preserves the literal). See packages/subgraphs source-matcher\n\t\t// for the post-load shape.\n\t\tlet serializedBody: string | undefined;\n\t\tif (body !== undefined && body !== null) {\n\t\t\ttry {\n\t\t\t\tserializedBody = JSON.stringify(body, (_key, value) =>\n\t\t\t\t\ttypeof value === \"bigint\" ? value.toString() : value,\n\t\t\t\t);\n\t\t\t} catch (err) {\n\t\t\t\tconst detail = err instanceof Error ? err.message : String(err);\n\t\t\t\tthrow new ApiError(0, `Failed to serialize request body: ${detail}`);\n\t\t\t}\n\t\t}\n\n\t\tlet response: Response;\n\t\ttry {\n\t\t\tresponse = await fetch(url, {\n\t\t\t\tmethod,\n\t\t\t\theaders,\n\t\t\t\tbody: serializedBody,\n\t\t\t});\n\t\t} catch {\n\t\t\tthrow new ApiError(\n\t\t\t\t0,\n\t\t\t\t`Cannot reach API at ${this.baseUrl}. Check your connection or try again.`,\n\t\t\t);\n\t\t}\n\n\t\tif (!response.ok) {\n\t\t\tif (response.status === 401) {\n\t\t\t\tthrow new ApiError(401, \"API key invalid or expired.\");\n\t\t\t}\n\n\t\t\tif (response.status === 429) {\n\t\t\t\tconst retryAfter = response.headers.get(\"Retry-After\");\n\t\t\t\tconst msg = retryAfter\n\t\t\t\t\t? `Rate limited. Wait ${retryAfter} seconds.`\n\t\t\t\t\t: \"Rate limited. Try again later.\";\n\t\t\t\tthrow new ApiError(429, msg);\n\t\t\t}\n\n\t\t\tif (response.status >= 500) {\n\t\t\t\tthrow new ApiError(\n\t\t\t\t\tresponse.status,\n\t\t\t\t\t`Server error. Try again or check status at ${this.baseUrl}/health`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst errorBody = await response.text();\n\t\t\tlet message = `HTTP ${response.status}`;\n\t\t\tlet parsedBody: unknown = errorBody;\n\t\t\tlet code: string | undefined;\n\t\t\ttry {\n\t\t\t\tconst json = JSON.parse(errorBody);\n\t\t\t\tparsedBody = json;\n\t\t\t\tconst err = json.error ?? json.message;\n\t\t\t\tif (typeof err === \"string\") {\n\t\t\t\t\tmessage = err;\n\t\t\t\t} else if (err && typeof err === \"object\") {\n\t\t\t\t\tmessage = JSON.stringify(err);\n\t\t\t\t}\n\t\t\t\tif (typeof json.code === \"string\") {\n\t\t\t\t\tcode = json.code;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tif (errorBody) message = errorBody;\n\t\t\t}\n\t\t\tthrow new ApiError(response.status, message, parsedBody, code);\n\t\t}\n\n\t\treturn response;\n\t}\n}\n",
|
|
@@ -15,10 +15,14 @@
|
|
|
15
15
|
"import type { InferSubgraphClient } from \"@secondlayer/subgraphs\";\nimport type { SecondLayerOptions } from \"../base.ts\";\nimport { SecondLayer } from \"../client.ts\";\nimport { Subgraphs } from \"./client.ts\";\n\n/**\n * Returns a typed client for a subgraph defined with `defineSubgraph()`.\n *\n * Accepts a plain options object, a `SecondLayer` instance, or a `Subgraphs` instance.\n *\n * @example\n * ```ts\n * import mySubgraph from './subgraphs/my-subgraph'\n * import { getSubgraph } from '@secondlayer/sdk'\n *\n * const client = getSubgraph(mySubgraph, { apiKey: 'sl_...' })\n * const rows = await client.transfers.findMany({ where: { sender: 'SP...' } })\n * ```\n */\nexport function getSubgraph<\n\tT extends { name: string; schema: Record<string, unknown> },\n>(\n\tdef: T,\n\toptions: Partial<SecondLayerOptions> | SecondLayer | Subgraphs = {},\n): InferSubgraphClient<T> {\n\tif (options instanceof Subgraphs) {\n\t\treturn options.typed(def);\n\t}\n\tif (options instanceof SecondLayer) {\n\t\treturn options.subgraphs.typed(def);\n\t}\n\treturn new Subgraphs(options).typed(def);\n}\n",
|
|
16
16
|
"import type { StreamsEvent } from \"./types.ts\";\n\nexport type FtTransferPayload = {\n\tasset_identifier: string;\n\tsender: string;\n\trecipient: string;\n\tamount: string;\n};\n\nexport type FtTransferEvent = StreamsEvent & {\n\tevent_type: \"ft_transfer\";\n\tpayload: FtTransferPayload;\n};\n\nexport type DecodedFtTransferPayload = {\n\tasset_identifier: string;\n\tcontract_id: string;\n\ttoken_name: string | null;\n\tsender: string;\n\trecipient: string;\n\tamount: string;\n};\n\nexport type DecodedFtTransfer = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"ft_transfer\";\n\tdecoded_payload: DecodedFtTransferPayload;\n\tsource_cursor: string;\n};\n\nfunction requireString(\n\tpayload: Record<string, unknown>,\n\tfield: keyof FtTransferPayload,\n): string {\n\tconst value = payload[field];\n\tif (typeof value !== \"string\" || value.length === 0) {\n\t\tthrow new Error(`ft_transfer payload missing ${field}`);\n\t}\n\treturn value;\n}\n\nfunction parseAssetIdentifier(assetIdentifier: string): {\n\tcontract_id: string;\n\ttoken_name: string | null;\n} {\n\tconst [contractId, tokenName] = assetIdentifier.split(\"::\");\n\tif (!contractId) {\n\t\tthrow new Error(\"ft_transfer payload has malformed asset_identifier\");\n\t}\n\treturn {\n\t\tcontract_id: contractId,\n\t\ttoken_name: tokenName && tokenName.length > 0 ? tokenName : null,\n\t};\n}\n\nexport function isFtTransfer(event: StreamsEvent): event is FtTransferEvent {\n\treturn event.event_type === \"ft_transfer\";\n}\n\nexport function decodeFtTransfer(event: StreamsEvent): DecodedFtTransfer {\n\tif (!isFtTransfer(event)) {\n\t\tthrow new Error(`Expected ft_transfer event, got ${event.event_type}`);\n\t}\n\n\tconst payload = event.payload;\n\tconst assetIdentifier = requireString(payload, \"asset_identifier\");\n\tconst sender = requireString(payload, \"sender\");\n\tconst recipient = requireString(payload, \"recipient\");\n\tconst amount = requireString(payload, \"amount\");\n\tif (!/^(0|[1-9]\\d*)$/.test(amount)) {\n\t\tthrow new Error(\"ft_transfer payload has malformed amount\");\n\t}\n\n\tconst { contract_id, token_name } = parseAssetIdentifier(assetIdentifier);\n\n\treturn {\n\t\tcursor: event.cursor,\n\t\tblock_height: event.block_height,\n\t\ttx_id: event.tx_id,\n\t\ttx_index: event.tx_index,\n\t\tevent_index: event.event_index,\n\t\tevent_type: event.event_type,\n\t\tdecoded_payload: {\n\t\t\tasset_identifier: assetIdentifier,\n\t\t\tcontract_id: event.contract_id ?? contract_id,\n\t\t\ttoken_name,\n\t\t\tsender,\n\t\t\trecipient,\n\t\t\tamount,\n\t\t},\n\t\tsource_cursor: event.cursor,\n\t};\n}\n",
|
|
17
17
|
"import type { StreamsEvent } from \"./types.ts\";\n\nexport type NftTransferPayload = {\n\tasset_identifier: string;\n\tsender: string;\n\trecipient: string;\n\tvalue: string | { hex: string };\n};\n\nexport type NftTransferEvent = StreamsEvent & {\n\tevent_type: \"nft_transfer\";\n\tpayload: NftTransferPayload;\n};\n\nexport type DecodedNftTransferPayload = {\n\tasset_identifier: string;\n\tcontract_id: string;\n\ttoken_name: string | null;\n\tsender: string;\n\trecipient: string;\n\tvalue: string;\n};\n\nexport type DecodedNftTransfer = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"nft_transfer\";\n\tdecoded_payload: DecodedNftTransferPayload;\n\tsource_cursor: string;\n};\n\nfunction requireString(\n\tpayload: Record<string, unknown>,\n\tfield: \"asset_identifier\" | \"sender\" | \"recipient\",\n): string {\n\tconst value = payload[field];\n\tif (typeof value !== \"string\" || value.length === 0) {\n\t\tthrow new Error(`nft_transfer payload missing ${field}`);\n\t}\n\treturn value;\n}\n\nfunction requireHexValue(payload: Record<string, unknown>): string {\n\t// Live streams emits the token id as a typed Clarity value at `value`\n\t// (e.g. `{UInt: 52}`) and the canonical hex at `raw_value`. Prefer raw_value\n\t// when available — mirrors the sbtc/bns decoder fix in indexer 1.3.7.\n\tconst rawValue = payload.raw_value;\n\tif (typeof rawValue === \"string\") {\n\t\tif (!/^0x[0-9a-fA-F]*$/.test(rawValue)) {\n\t\t\tthrow new Error(\"nft_transfer payload has malformed value\");\n\t\t}\n\t\treturn rawValue;\n\t}\n\n\tconst value = payload.value;\n\tconst hex =\n\t\ttypeof value === \"string\"\n\t\t\t? value\n\t\t\t: value &&\n\t\t\t\t\ttypeof value === \"object\" &&\n\t\t\t\t\ttypeof (value as { hex?: unknown }).hex === \"string\"\n\t\t\t\t? (value as { hex: string }).hex\n\t\t\t\t: null;\n\n\tif (!hex) {\n\t\tthrow new Error(\"nft_transfer payload missing value\");\n\t}\n\tif (!/^0x[0-9a-fA-F]*$/.test(hex)) {\n\t\tthrow new Error(\"nft_transfer payload has malformed value\");\n\t}\n\treturn hex;\n}\n\nfunction parseAssetIdentifier(assetIdentifier: string): {\n\tcontract_id: string;\n\ttoken_name: string | null;\n} {\n\tconst [contractId, tokenName] = assetIdentifier.split(\"::\");\n\tif (!contractId) {\n\t\tthrow new Error(\"nft_transfer payload has malformed asset_identifier\");\n\t}\n\treturn {\n\t\tcontract_id: contractId,\n\t\ttoken_name: tokenName && tokenName.length > 0 ? tokenName : null,\n\t};\n}\n\nexport function isNftTransfer(event: StreamsEvent): event is NftTransferEvent {\n\treturn event.event_type === \"nft_transfer\";\n}\n\nexport function decodeNftTransfer(event: StreamsEvent): DecodedNftTransfer {\n\tif (!isNftTransfer(event)) {\n\t\tthrow new Error(`Expected nft_transfer event, got ${event.event_type}`);\n\t}\n\n\tconst payload = event.payload;\n\tconst assetIdentifier = requireString(payload, \"asset_identifier\");\n\tconst sender = requireString(payload, \"sender\");\n\tconst recipient = requireString(payload, \"recipient\");\n\tconst value = requireHexValue(payload);\n\tconst { contract_id, token_name } = parseAssetIdentifier(assetIdentifier);\n\n\treturn {\n\t\tcursor: event.cursor,\n\t\tblock_height: event.block_height,\n\t\ttx_id: event.tx_id,\n\t\ttx_index: event.tx_index,\n\t\tevent_index: event.event_index,\n\t\tevent_type: event.event_type,\n\t\tdecoded_payload: {\n\t\t\tasset_identifier: assetIdentifier,\n\t\t\tcontract_id: event.contract_id ?? contract_id,\n\t\t\ttoken_name,\n\t\t\tsender,\n\t\t\trecipient,\n\t\t\tvalue,\n\t\t},\n\t\tsource_cursor: event.cursor,\n\t};\n}\n",
|
|
18
|
+
"import type { StreamsEvent } from \"./types.ts\";\n\n/** Superset of the columns the decoded_events table holds. Every decoded\n * event's `decoded_payload` is assignable to this, so the indexer's writer\n * can map columns generically instead of per-event-type. */\nexport type DecodedEventColumns = {\n\tcontract_id?: string | null;\n\tasset_identifier?: string | null;\n\tsender?: string | null;\n\trecipient?: string | null;\n\tamount?: string | null;\n\tvalue?: string | null;\n\tmemo?: string | null;\n\t/** JSONB overflow for non-flat types (e.g. print's decoded value). */\n\tpayload?: unknown;\n};\n\nexport function requireString(\n\tpayload: Record<string, unknown>,\n\tfield: string,\n\teventType: string,\n): string {\n\tconst value = payload[field];\n\tif (typeof value !== \"string\" || value.length === 0) {\n\t\tthrow new Error(`${eventType} payload missing ${field}`);\n\t}\n\treturn value;\n}\n\nexport function optionalString(value: unknown): string | null {\n\treturn typeof value === \"string\" && value.length > 0 ? value : null;\n}\n\nexport function requireAmount(\n\tpayload: Record<string, unknown>,\n\teventType: string,\n): string {\n\tconst amount = requireString(payload, \"amount\", eventType);\n\tif (!/^(0|[1-9]\\d*)$/.test(amount)) {\n\t\tthrow new Error(`${eventType} payload has malformed amount`);\n\t}\n\treturn amount;\n}\n\nexport function parseAssetIdentifier(\n\tassetIdentifier: string,\n\teventType: string,\n): { contract_id: string; token_name: string | null } {\n\tconst [contractId, tokenName] = assetIdentifier.split(\"::\");\n\tif (!contractId) {\n\t\tthrow new Error(`${eventType} payload has malformed asset_identifier`);\n\t}\n\treturn {\n\t\tcontract_id: contractId,\n\t\ttoken_name: tokenName && tokenName.length > 0 ? tokenName : null,\n\t};\n}\n\n/** NFT token id: live streams emits a typed Clarity value at `value` and the\n * canonical hex at `raw_value`; prefer raw_value when present. */\nexport function requireHexValue(\n\tpayload: Record<string, unknown>,\n\teventType: string,\n): string {\n\tconst rawValue = payload.raw_value;\n\tif (typeof rawValue === \"string\") {\n\t\tif (!/^0x[0-9a-fA-F]*$/.test(rawValue)) {\n\t\t\tthrow new Error(`${eventType} payload has malformed value`);\n\t\t}\n\t\treturn rawValue;\n\t}\n\n\tconst value = payload.value;\n\tconst hex =\n\t\ttypeof value === \"string\"\n\t\t\t? value\n\t\t\t: value &&\n\t\t\t\t\ttypeof value === \"object\" &&\n\t\t\t\t\ttypeof (value as { hex?: unknown }).hex === \"string\"\n\t\t\t\t? (value as { hex: string }).hex\n\t\t\t\t: null;\n\n\tif (!hex) {\n\t\tthrow new Error(`${eventType} payload missing value`);\n\t}\n\tif (!/^0x[0-9a-fA-F]*$/.test(hex)) {\n\t\tthrow new Error(`${eventType} payload has malformed value`);\n\t}\n\treturn hex;\n}\n\n/** Common envelope fields shared by every decoded event, lifted off the\n * source StreamsEvent. The decoder supplies event_type + decoded_payload. */\nexport function decodedRow<T extends string, P>(\n\tevent: StreamsEvent,\n\teventType: T,\n\tdecoded_payload: P,\n): {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: T;\n\tdecoded_payload: P;\n\tsource_cursor: string;\n} {\n\treturn {\n\t\tcursor: event.cursor,\n\t\tblock_height: event.block_height,\n\t\ttx_id: event.tx_id,\n\t\ttx_index: event.tx_index,\n\t\tevent_index: event.event_index,\n\t\tevent_type: eventType,\n\t\tdecoded_payload,\n\t\tsource_cursor: event.cursor,\n\t};\n}\n",
|
|
19
|
+
"import {\n\tdecodedRow,\n\toptionalString,\n\trequireAmount,\n\trequireString,\n} from \"./_payload.ts\";\nimport type { StreamsEvent } from \"./types.ts\";\n\nexport type DecodedStxTransferPayload = {\n\tsender: string;\n\trecipient: string;\n\tamount: string;\n\tmemo: string | null;\n};\n\nexport type DecodedStxTransfer = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"stx_transfer\";\n\tdecoded_payload: DecodedStxTransferPayload;\n\tsource_cursor: string;\n};\n\nexport type DecodedStxMintPayload = {\n\trecipient: string;\n\tamount: string;\n};\n\nexport type DecodedStxMint = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"stx_mint\";\n\tdecoded_payload: DecodedStxMintPayload;\n\tsource_cursor: string;\n};\n\nexport type DecodedStxBurnPayload = {\n\tsender: string;\n\tamount: string;\n};\n\nexport type DecodedStxBurn = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"stx_burn\";\n\tdecoded_payload: DecodedStxBurnPayload;\n\tsource_cursor: string;\n};\n\nexport function isStxTransfer(\n\tevent: StreamsEvent,\n): event is StreamsEvent & { event_type: \"stx_transfer\" } {\n\treturn event.event_type === \"stx_transfer\";\n}\n\nexport function decodeStxTransfer(event: StreamsEvent): DecodedStxTransfer {\n\tif (!isStxTransfer(event)) {\n\t\tthrow new Error(`Expected stx_transfer event, got ${event.event_type}`);\n\t}\n\tconst payload = event.payload;\n\treturn decodedRow(event, \"stx_transfer\", {\n\t\tsender: requireString(payload, \"sender\", \"stx_transfer\"),\n\t\trecipient: requireString(payload, \"recipient\", \"stx_transfer\"),\n\t\tamount: requireAmount(payload, \"stx_transfer\"),\n\t\tmemo: optionalString(payload.memo),\n\t});\n}\n\nexport function isStxMint(\n\tevent: StreamsEvent,\n): event is StreamsEvent & { event_type: \"stx_mint\" } {\n\treturn event.event_type === \"stx_mint\";\n}\n\nexport function decodeStxMint(event: StreamsEvent): DecodedStxMint {\n\tif (!isStxMint(event)) {\n\t\tthrow new Error(`Expected stx_mint event, got ${event.event_type}`);\n\t}\n\tconst payload = event.payload;\n\treturn decodedRow(event, \"stx_mint\", {\n\t\trecipient: requireString(payload, \"recipient\", \"stx_mint\"),\n\t\tamount: requireAmount(payload, \"stx_mint\"),\n\t});\n}\n\nexport function isStxBurn(\n\tevent: StreamsEvent,\n): event is StreamsEvent & { event_type: \"stx_burn\" } {\n\treturn event.event_type === \"stx_burn\";\n}\n\nexport function decodeStxBurn(event: StreamsEvent): DecodedStxBurn {\n\tif (!isStxBurn(event)) {\n\t\tthrow new Error(`Expected stx_burn event, got ${event.event_type}`);\n\t}\n\tconst payload = event.payload;\n\treturn decodedRow(event, \"stx_burn\", {\n\t\tsender: requireString(payload, \"sender\", \"stx_burn\"),\n\t\tamount: requireAmount(payload, \"stx_burn\"),\n\t});\n}\n",
|
|
20
|
+
"import {\n\tdecodedRow,\n\tparseAssetIdentifier,\n\trequireAmount,\n\trequireHexValue,\n\trequireString,\n} from \"./_payload.ts\";\nimport type { StreamsEvent } from \"./types.ts\";\n\nexport type DecodedFtMintPayload = {\n\tasset_identifier: string;\n\tcontract_id: string;\n\ttoken_name: string | null;\n\trecipient: string;\n\tamount: string;\n};\n\nexport type DecodedFtMint = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"ft_mint\";\n\tdecoded_payload: DecodedFtMintPayload;\n\tsource_cursor: string;\n};\n\nexport type DecodedFtBurnPayload = {\n\tasset_identifier: string;\n\tcontract_id: string;\n\ttoken_name: string | null;\n\tsender: string;\n\tamount: string;\n};\n\nexport type DecodedFtBurn = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"ft_burn\";\n\tdecoded_payload: DecodedFtBurnPayload;\n\tsource_cursor: string;\n};\n\nexport type DecodedNftMintPayload = {\n\tasset_identifier: string;\n\tcontract_id: string;\n\ttoken_name: string | null;\n\trecipient: string;\n\tvalue: string;\n};\n\nexport type DecodedNftMint = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"nft_mint\";\n\tdecoded_payload: DecodedNftMintPayload;\n\tsource_cursor: string;\n};\n\nexport type DecodedNftBurnPayload = {\n\tasset_identifier: string;\n\tcontract_id: string;\n\ttoken_name: string | null;\n\tsender: string;\n\tvalue: string;\n};\n\nexport type DecodedNftBurn = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"nft_burn\";\n\tdecoded_payload: DecodedNftBurnPayload;\n\tsource_cursor: string;\n};\n\nfunction assetFields(event: StreamsEvent, eventType: string) {\n\tconst assetIdentifier = requireString(\n\t\tevent.payload,\n\t\t\"asset_identifier\",\n\t\teventType,\n\t);\n\tconst { contract_id, token_name } = parseAssetIdentifier(\n\t\tassetIdentifier,\n\t\teventType,\n\t);\n\treturn {\n\t\tasset_identifier: assetIdentifier,\n\t\tcontract_id: event.contract_id ?? contract_id,\n\t\ttoken_name,\n\t};\n}\n\nexport function isFtMint(\n\tevent: StreamsEvent,\n): event is StreamsEvent & { event_type: \"ft_mint\" } {\n\treturn event.event_type === \"ft_mint\";\n}\n\nexport function decodeFtMint(event: StreamsEvent): DecodedFtMint {\n\tif (!isFtMint(event)) {\n\t\tthrow new Error(`Expected ft_mint event, got ${event.event_type}`);\n\t}\n\treturn decodedRow(event, \"ft_mint\", {\n\t\t...assetFields(event, \"ft_mint\"),\n\t\trecipient: requireString(event.payload, \"recipient\", \"ft_mint\"),\n\t\tamount: requireAmount(event.payload, \"ft_mint\"),\n\t});\n}\n\nexport function isFtBurn(\n\tevent: StreamsEvent,\n): event is StreamsEvent & { event_type: \"ft_burn\" } {\n\treturn event.event_type === \"ft_burn\";\n}\n\nexport function decodeFtBurn(event: StreamsEvent): DecodedFtBurn {\n\tif (!isFtBurn(event)) {\n\t\tthrow new Error(`Expected ft_burn event, got ${event.event_type}`);\n\t}\n\treturn decodedRow(event, \"ft_burn\", {\n\t\t...assetFields(event, \"ft_burn\"),\n\t\tsender: requireString(event.payload, \"sender\", \"ft_burn\"),\n\t\tamount: requireAmount(event.payload, \"ft_burn\"),\n\t});\n}\n\nexport function isNftMint(\n\tevent: StreamsEvent,\n): event is StreamsEvent & { event_type: \"nft_mint\" } {\n\treturn event.event_type === \"nft_mint\";\n}\n\nexport function decodeNftMint(event: StreamsEvent): DecodedNftMint {\n\tif (!isNftMint(event)) {\n\t\tthrow new Error(`Expected nft_mint event, got ${event.event_type}`);\n\t}\n\treturn decodedRow(event, \"nft_mint\", {\n\t\t...assetFields(event, \"nft_mint\"),\n\t\trecipient: requireString(event.payload, \"recipient\", \"nft_mint\"),\n\t\tvalue: requireHexValue(event.payload, \"nft_mint\"),\n\t});\n}\n\nexport function isNftBurn(\n\tevent: StreamsEvent,\n): event is StreamsEvent & { event_type: \"nft_burn\" } {\n\treturn event.event_type === \"nft_burn\";\n}\n\nexport function decodeNftBurn(event: StreamsEvent): DecodedNftBurn {\n\tif (!isNftBurn(event)) {\n\t\tthrow new Error(`Expected nft_burn event, got ${event.event_type}`);\n\t}\n\treturn decodedRow(event, \"nft_burn\", {\n\t\t...assetFields(event, \"nft_burn\"),\n\t\tsender: requireString(event.payload, \"sender\", \"nft_burn\"),\n\t\tvalue: requireHexValue(event.payload, \"nft_burn\"),\n\t});\n}\n",
|
|
21
|
+
"import { cvToValue, deserializeCV } from \"@secondlayer/stacks/clarity\";\nimport { decodedRow, optionalString } from \"./_payload.ts\";\nimport type { StreamsEvent } from \"./types.ts\";\n\n/** Decoded form of a Clarity `print` event:\n * - `topic`: the print topic, when the contract emits a `{ topic, ... }` tuple\n * - `value`: the Clarity value decoded to JSON (uints as strings, buffers as\n * `0x…` hex, tuples as objects)\n * - `raw_value`: the canonical serialized hex, for byte-exact consumers */\nexport type DecodedPrintValue = {\n\ttopic: string | null;\n\tvalue: unknown;\n\traw_value: string | null;\n};\n\nexport type DecodedPrintPayload = {\n\tcontract_id: string | null;\n\tpayload: DecodedPrintValue;\n};\n\nexport type DecodedPrint = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"print\";\n\tdecoded_payload: DecodedPrintPayload;\n\tsource_cursor: string;\n};\n\nfunction printValueHex(payload: Record<string, unknown>): string | null {\n\tif (typeof payload.raw_value === \"string\") return payload.raw_value;\n\tconst value = payload.value;\n\tif (typeof value === \"string\" && value.startsWith(\"0x\")) return value;\n\tif (\n\t\tvalue &&\n\t\ttypeof value === \"object\" &&\n\t\ttypeof (value as { hex?: unknown }).hex === \"string\"\n\t) {\n\t\treturn (value as { hex: string }).hex;\n\t}\n\treturn null;\n}\n\n/** cvToValue yields bigint for Clarity (u)ints; convert recursively to strings\n * so the decoded value is JSON-serializable for the jsonb column / API. */\nfunction toJsonSafe(value: unknown): unknown {\n\tif (typeof value === \"bigint\") return value.toString();\n\tif (Array.isArray(value)) return value.map(toJsonSafe);\n\tif (value && typeof value === \"object\") {\n\t\tconst out: Record<string, unknown> = {};\n\t\tfor (const [key, val] of Object.entries(value)) {\n\t\t\tout[key] = toJsonSafe(val);\n\t\t}\n\t\treturn out;\n\t}\n\treturn value;\n}\n\nexport function isPrint(\n\tevent: StreamsEvent,\n): event is StreamsEvent & { event_type: \"print\" } {\n\treturn event.event_type === \"print\";\n}\n\nexport function decodePrint(event: StreamsEvent): DecodedPrint {\n\tif (!isPrint(event)) {\n\t\tthrow new Error(`Expected print event, got ${event.event_type}`);\n\t}\n\tconst payload = event.payload;\n\tconst topic = optionalString(payload.topic);\n\tconst rawValue = printValueHex(payload);\n\n\tlet value: unknown;\n\tif (rawValue) {\n\t\ttry {\n\t\t\tconst hex = rawValue.startsWith(\"0x\") ? rawValue.slice(2) : rawValue;\n\t\t\tvalue = toJsonSafe(cvToValue(deserializeCV(hex)));\n\t\t} catch {\n\t\t\tvalue = toJsonSafe(payload.value ?? null);\n\t\t}\n\t} else {\n\t\tvalue = toJsonSafe(payload.value ?? null);\n\t}\n\n\treturn decodedRow(event, \"print\", {\n\t\tcontract_id: event.contract_id ?? optionalString(payload.contract_id),\n\t\tpayload: { topic, value, raw_value: rawValue },\n\t});\n}\n",
|
|
18
22
|
"export const STREAMS_EVENT_TYPES = [\n\t\"stx_transfer\",\n\t\"stx_mint\",\n\t\"stx_burn\",\n\t\"stx_lock\",\n\t\"ft_transfer\",\n\t\"ft_mint\",\n\t\"ft_burn\",\n\t\"nft_transfer\",\n\t\"nft_mint\",\n\t\"nft_burn\",\n\t\"print\",\n] as const;\n\nexport type StreamsEventType = (typeof STREAMS_EVENT_TYPES)[number];\n\nexport type StreamsEventPayload = Record<string, unknown>;\n\nexport type StreamsEvent = {\n\tcursor: string;\n\tblock_height: number;\n\tblock_hash: string;\n\tburn_block_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: StreamsEventType;\n\tcontract_id: string | null;\n\tpayload: StreamsEventPayload;\n\tts: string;\n};\n\nexport type StreamsTip = {\n\tblock_height: number;\n\tblock_hash: string;\n\tburn_block_height: number;\n\tlag_seconds: number;\n};\n\nexport type StreamsCanonicalBlock = {\n\tblock_height: number;\n\tblock_hash: string;\n\tburn_block_height: number;\n\tburn_block_hash: string | null;\n\tis_canonical: true;\n};\n\nexport type StreamsReorg = {\n\tdetected_at: string;\n\tfork_point_height: number;\n\torphaned_range: { from: string; to: string };\n\tnew_canonical_tip: string;\n};\n\nexport type StreamsEventsEnvelope = {\n\tevents: StreamsEvent[];\n\tnext_cursor: string | null;\n\ttip: StreamsTip;\n\treorgs: StreamsReorg[];\n};\n\nexport type StreamsEventsListEnvelope = Omit<\n\tStreamsEventsEnvelope,\n\t\"next_cursor\"\n>;\n\nexport type StreamsReorgsListParams = {\n\tsince: string;\n\tlimit?: number;\n};\n\nexport type StreamsReorgsListEnvelope = {\n\treorgs: StreamsReorg[];\n\tnext_since: string | null;\n};\n\nexport type StreamsEventsListParams = {\n\tcursor?: string | null;\n\tfromHeight?: number;\n\ttoHeight?: number;\n\ttypes?: readonly StreamsEventType[];\n\tcontractId?: string;\n\tlimit?: number;\n};\n\nexport type StreamsEventsStreamParams = {\n\tfromCursor?: string | null;\n\ttypes?: readonly StreamsEventType[];\n\tcontractId?: string;\n\tbatchSize?: number;\n\temptyBackoffMs?: number;\n\tmaxPages?: number;\n\tmaxEmptyPolls?: number;\n\tsignal?: AbortSignal;\n};\n\nexport type StreamsEventsConsumeParams = {\n\tfromCursor?: string | null;\n\tmode?: \"tail\" | \"bounded\";\n\ttypes?: readonly StreamsEventType[];\n\tcontractId?: string;\n\tbatchSize?: number;\n\tonBatch: (\n\t\tevents: StreamsEvent[],\n\t\tenvelope: StreamsEventsEnvelope,\n\t) => Promise<string | null | undefined> | string | null | undefined;\n\temptyBackoffMs?: number;\n\tmaxPages?: number;\n\tmaxEmptyPolls?: number;\n\tsignal?: AbortSignal;\n};\n\nexport type StreamsEventsConsumeResult = {\n\tcursor: string | null;\n\tpages: number;\n\temptyPolls: number;\n};\n\nexport type FetchLike = (\n\tinput: string | URL | Request,\n\tinit?: RequestInit,\n) => Promise<Response>;\n\nexport type StreamsClient = {\n\tevents: {\n\t\tlist(params?: StreamsEventsListParams): Promise<StreamsEventsEnvelope>;\n\t\tbyTxId(txId: string): Promise<StreamsEventsListEnvelope>;\n\t\t/**\n\t\t * Pull pages from Streams and call `onBatch` after each page.\n\t\t *\n\t\t * Use `consume` for indexers and ETL jobs that own checkpointing. Return\n\t\t * the checkpoint cursor from `onBatch`. Default `mode: \"tail\"` keeps\n\t\t * polling when caught up; `mode: \"bounded\"` exits on the first empty page.\n\t\t * The consumer also exits when `maxPages`, `maxEmptyPolls`, or `signal`\n\t\t * stops it.\n\t\t */\n\t\tconsume(\n\t\t\tparams: StreamsEventsConsumeParams,\n\t\t): Promise<StreamsEventsConsumeResult>;\n\t\t/**\n\t\t * Follow Streams as an async iterator.\n\t\t *\n\t\t * Use `stream` for live processors and watch-style apps. It tails\n\t\t * indefinitely by default and stops when its `AbortSignal`, `maxPages`, or\n\t\t * `maxEmptyPolls` stops it.\n\t\t */\n\t\tstream(params?: StreamsEventsStreamParams): AsyncIterable<StreamsEvent>;\n\t};\n\tblocks: {\n\t\tevents(heightOrHash: number | string): Promise<StreamsEventsListEnvelope>;\n\t};\n\treorgs: {\n\t\tlist(params: StreamsReorgsListParams): Promise<StreamsReorgsListEnvelope>;\n\t};\n\tcanonical(height: number): Promise<StreamsCanonicalBlock>;\n\ttip(): Promise<StreamsTip>;\n};\n",
|
|
19
23
|
"import {\n\ttype StandardWebhooksHeaders,\n\tverify,\n} from \"@secondlayer/shared/crypto/standard-webhooks\";\n\nexport {\n\ttype StandardWebhooksHeaders,\n\tverify as verifyStandardWebhooksHeaders,\n} from \"@secondlayer/shared/crypto/standard-webhooks\";\n\ntype HeaderLookup = (name: string) => string | null | undefined;\nexport type WebhookHeaderInput =\n\t| HeaderLookup\n\t| StandardWebhooksHeaders\n\t| Record<string, string | string[] | undefined>\n\t| { get: (name: string) => string | null }; // e.g. Fetch `Headers`\n\nfunction pickHeader(headers: WebhookHeaderInput, name: string): string | undefined {\n\tif (typeof headers === \"function\") {\n\t\tconst v = (headers as HeaderLookup)(name);\n\t\treturn typeof v === \"string\" ? v : undefined;\n\t}\n\tif (\n\t\ttypeof (headers as { get?: unknown }).get === \"function\" &&\n\t\t!(name in (headers as Record<string, unknown>))\n\t) {\n\t\tconst v = (headers as { get: (n: string) => string | null }).get(name);\n\t\treturn typeof v === \"string\" ? v : undefined;\n\t}\n\tconst bag = headers as Record<string, string | string[] | undefined>;\n\tlet v = bag[name] ?? bag[name.toLowerCase()];\n\tif (v === undefined) {\n\t\tconst target = name.toLowerCase();\n\t\tfor (const key of Object.keys(bag)) {\n\t\t\tif (key.toLowerCase() === target) {\n\t\t\t\tv = bag[key];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tif (Array.isArray(v)) return v[0];\n\treturn typeof v === \"string\" ? v : undefined;\n}\n\n/**\n * Verify a Secondlayer webhook delivery signature.\n *\n * Every delivery whose subscription `format` is `\"standard-webhooks\"` (the\n * default) carries three Standard Webhooks headers:\n *\n * webhook-id — UUID for the delivery (stable across retries; use as\n * your dedup key)\n * webhook-timestamp — unix seconds at dispatch time\n * webhook-signature — space-separated list of `v1,<base64-hmac>` tuples\n *\n * The signed content is `${id}.${timestamp}.${rawBody}` HMAC-SHA256 with the\n * signing secret. Secrets returned by `sl subscriptions create` (or\n * `rotate-secret`) carry a `whsec_` prefix and are base64-decoded after the\n * prefix is stripped, matching the Svix / Standard Webhooks convention.\n *\n * @param rawBody The raw request body as a string. NEVER pass\n * `JSON.stringify(req.body)` — re-stringifying drops\n * key ordering and whitespace, breaking the HMAC.\n * Use the raw body bytes/string your framework hands\n * you (Express raw body middleware, Hono `c.req.text()`,\n * Bun `await req.text()`, etc.).\n * @param headers The request headers. Accepts a plain object\n * (Express / Node), a Fetch `Headers` instance\n * (Bun / Hono / Workers), or a callback that returns\n * a header value by name. Header name matching is\n * case-insensitive.\n * @param secret The signing secret returned by\n * `sl subscriptions create` / `rotateSecret`. Pass it\n * through verbatim — the helper handles the `whsec_`\n * prefix.\n * @param toleranceSeconds Max age of `webhook-timestamp` in seconds. Default\n * 300 (5 min) per the Standard Webhooks spec.\n * @returns true if every header is present, the timestamp is within\n * tolerance, and a `v1` signature matches.\n *\n * @example\n * ```ts\n * // Hono / Bun\n * import { verifyWebhookSignature } from \"@secondlayer/sdk\";\n *\n * app.post(\"/webhook\", async (c) => {\n * const raw = await c.req.text();\n * if (!verifyWebhookSignature(raw, c.req.raw.headers, process.env.SIGNING_SECRET!)) {\n * return c.text(\"Invalid signature\", 401);\n * }\n * const { type, timestamp, data } = JSON.parse(raw);\n * // ... process data ...\n * return c.body(null, 204);\n * });\n * ```\n *\n * @example\n * ```ts\n * // Express with raw-body middleware\n * import express from \"express\";\n * import { verifyWebhookSignature } from \"@secondlayer/sdk\";\n *\n * app.post(\n * \"/webhook\",\n * express.raw({ type: \"application/json\" }),\n * (req, res) => {\n * const raw = req.body.toString(\"utf8\");\n * if (!verifyWebhookSignature(raw, req.headers, process.env.SIGNING_SECRET!)) {\n * return res.status(401).end();\n * }\n * // ... process raw ...\n * res.status(204).end();\n * },\n * );\n * ```\n */\nexport function verifyWebhookSignature(\n\trawBody: string,\n\theaders: WebhookHeaderInput,\n\tsecret: string,\n\ttoleranceSeconds = 300,\n): boolean {\n\tconst id = pickHeader(headers, \"webhook-id\");\n\tconst timestamp = pickHeader(headers, \"webhook-timestamp\");\n\tconst signature = pickHeader(headers, \"webhook-signature\");\n\tif (!id || !timestamp || !signature) return false;\n\treturn verify(\n\t\trawBody,\n\t\t{\n\t\t\t\"webhook-id\": id,\n\t\t\t\"webhook-timestamp\": timestamp,\n\t\t\t\"webhook-signature\": signature,\n\t\t},\n\t\tsecret,\n\t\t{ toleranceSeconds },\n\t);\n}\n"
|
|
20
24
|
],
|
|
21
|
-
"mappings": ";AAeO,MAAM,iBAAiB,MAAM;AAAA,EAG3B;AAAA,EAGA;AAAA,EAEA;AAAA,EAPR,WAAW,CAEH,QACP,SAEO,MAEA,MACN;AAAA,IACD,MAAM,OAAO;AAAA,IAPN;AAAA,IAGA;AAAA,IAEA;AAAA,IAGP,KAAK,OAAO;AAAA;AAEd;AAAA;AAMO,MAAM,6BAA6B,SAAS;AAAA,EAE1C;AAAA,EACA;AAAA,EAFR,WAAW,CACH,gBACA,iBACP,UAAU,8BAA8B,4BAA4B,kBACnE;AAAA,IACD,MAAM,KAAK,SAAS,EAAE,gBAAgB,gBAAgB,CAAC;AAAA,IAJhD;AAAA,IACA;AAAA,IAIP,KAAK,OAAO;AAAA;AAEd;;;ACzBA,IAAM,mBAAmB;AAAA;AAElB,MAAe,WAAW;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EAEV,WAAW,CAAC,UAAuC,CAAC,GAAG;AAAA,IACtD,KAAK,WAAW,QAAQ,WAAW,kBAAkB,QAAQ,QAAQ,EAAE;AAAA,IACvE,KAAK,SAAS,QAAQ;AAAA,IACtB,KAAK,SAAS,QAAQ,UAAU;AAAA;AAAA,SAG1B,WAAW,CAAC,QAAyC;AAAA,IAC3D,MAAM,UAAkC;AAAA,MACvC,gBAAgB;AAAA,IACjB;AAAA,IACA,IAAI,QAAQ;AAAA,MACX,QAAQ,gBAAgB,UAAU;AAAA,IACnC;AAAA,IACA,OAAO;AAAA;AAAA,OAGQ,QAAU,CACzB,QACA,MACA,MACa;AAAA,IACb,MAAM,WAAW,MAAM,KAAK,cAAc,QAAQ,MAAM,IAAI;AAAA,IAC5D,IAAI,SAAS,WAAW,KAAK;AAAA,MAC5B;AAAA,IACD;AAAA,IACA,OAAO,SAAS,KAAK;AAAA;AAAA,OAGN,YAAW,CAC1B,QACA,MACA,MACkB;AAAA,IAClB,MAAM,WAAW,MAAM,KAAK,cAAc,QAAQ,MAAM,IAAI;AAAA,IAC5D,OAAO,SAAS,KAAK;AAAA;AAAA,OAGR,cAAa,CAC1B,QACA,MACA,MACoB;AAAA,IACpB,MAAM,MAAM,GAAG,KAAK,UAAU;AAAA,IAC9B,MAAM,UAAU,WAAW,YAAY,KAAK,MAAM;AAAA,IAClD,QAAQ,iBAAiB,KAAK;AAAA,IAS9B,IAAI;AAAA,IACJ,IAAI,SAAS,aAAa,SAAS,MAAM;AAAA,MACxC,IAAI;AAAA,QACH,iBAAiB,KAAK,UAAU,MAAM,CAAC,MAAM,UAC5C,OAAO,UAAU,WAAW,MAAM,SAAS,IAAI,KAChD;AAAA,QACC,OAAO,KAAK;AAAA,QACb,MAAM,SAAS,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,QAC9D,MAAM,IAAI,SAAS,GAAG,qCAAqC,QAAQ;AAAA;AAAA,IAErE;AAAA,IAEA,IAAI;AAAA,IACJ,IAAI;AAAA,MACH,WAAW,MAAM,MAAM,KAAK;AAAA,QAC3B;AAAA,QACA;AAAA,QACA,MAAM;AAAA,MACP,CAAC;AAAA,MACA,MAAM;AAAA,MACP,MAAM,IAAI,SACT,GACA,uBAAuB,KAAK,8CAC7B;AAAA;AAAA,IAGD,IAAI,CAAC,SAAS,IAAI;AAAA,MACjB,IAAI,SAAS,WAAW,KAAK;AAAA,QAC5B,MAAM,IAAI,SAAS,KAAK,6BAA6B;AAAA,MACtD;AAAA,MAEA,IAAI,SAAS,WAAW,KAAK;AAAA,QAC5B,MAAM,aAAa,SAAS,QAAQ,IAAI,aAAa;AAAA,QACrD,MAAM,MAAM,aACT,sBAAsB,wBACtB;AAAA,QACH,MAAM,IAAI,SAAS,KAAK,GAAG;AAAA,MAC5B;AAAA,MAEA,IAAI,SAAS,UAAU,KAAK;AAAA,QAC3B,MAAM,IAAI,SACT,SAAS,QACT,8CAA8C,KAAK,gBACpD;AAAA,MACD;AAAA,MAEA,MAAM,YAAY,MAAM,SAAS,KAAK;AAAA,MACtC,IAAI,UAAU,QAAQ,SAAS;AAAA,MAC/B,IAAI,aAAsB;AAAA,MAC1B,IAAI;AAAA,MACJ,IAAI;AAAA,QACH,MAAM,OAAO,KAAK,MAAM,SAAS;AAAA,QACjC,aAAa;AAAA,QACb,MAAM,MAAM,KAAK,SAAS,KAAK;AAAA,QAC/B,IAAI,OAAO,QAAQ,UAAU;AAAA,UAC5B,UAAU;AAAA,QACX,EAAO,SAAI,OAAO,OAAO,QAAQ,UAAU;AAAA,UAC1C,UAAU,KAAK,UAAU,GAAG;AAAA,QAC7B;AAAA,QACA,IAAI,OAAO,KAAK,SAAS,UAAU;AAAA,UAClC,OAAO,KAAK;AAAA,QACb;AAAA,QACC,MAAM;AAAA,QACP,IAAI;AAAA,UAAW,UAAU;AAAA;AAAA,MAE1B,MAAM,IAAI,SAAS,SAAS,QAAQ,SAAS,YAAY,IAAI;AAAA,IAC9D;AAAA,IAEA,OAAO;AAAA;AAET;;;AChJA,IAAM,oBAA4C;AAAA,EAEjD,cAAc;AAAA,EACd,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,KAAK;AAAA,EAEL,aAAa;AAAA,EACb,MAAM;AAAA,EACN,WAAW;AAAA,EACX,IAAI;AACL;AAEA,SAAS,aAAa,CAAC,KAAqB;AAAA,EAC3C,OAAO,kBAAkB,QAAQ;AAAA;AAW3B,SAAS,cAAc,CAC7B,OACyB;AAAA,EACzB,MAAM,UAAkC,CAAC;AAAA,EAEzC,YAAY,QAAQ,UAAU,OAAO,QAAQ,KAAK,GAAG;AAAA,IACpD,IAAI,UAAU,QAAQ,UAAU;AAAA,MAAW;AAAA,IAE3C,MAAM,MAAM,cAAc,MAAM;AAAA,IAEhC,IAAI,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,GAAG;AAAA,MACvD,MAAM,MAAM;AAAA,MACZ,YAAY,IAAI,YAAY,OAAO,QAAQ,GAAG,GAAG;AAAA,QAChD,IAAI,YAAY,QAAQ,YAAY;AAAA,UAAW;AAAA,QAC/C,IAAI,OAAO,MAAM;AAAA,UAChB,QAAQ,OAAO,OAAO,OAAO;AAAA,QAC9B,EAAO,SAAI,CAAC,OAAO,MAAM,OAAO,MAAM,KAAK,EAAE,SAAS,EAAE,GAAG;AAAA,UAC1D,QAAQ,GAAG,OAAO,QAAQ,OAAO,OAAO;AAAA,QACzC;AAAA,MACD;AAAA,IACD,EAAO;AAAA,MACN,QAAQ,OAAO,OAAO,KAAK;AAAA;AAAA,EAE7B;AAAA,EAEA,OAAO;AAAA;AAMD,SAAS,oBAAoB,CAAC,KAAqB;AAAA,EACzD,OAAO,cAAc,GAAG;AAAA;;;ACjBzB,SAAS,wBAAwB,CAAC,QAAqC;AAAA,EACtE,MAAM,KAAK,IAAI;AAAA,EACf,IAAI,OAAO;AAAA,IAAM,GAAG,IAAI,SAAS,OAAO,IAAI;AAAA,EAC5C,IAAI,OAAO;AAAA,IAAO,GAAG,IAAI,UAAU,OAAO,KAAK;AAAA,EAC/C,IAAI,OAAO,UAAU;AAAA,IAAW,GAAG,IAAI,UAAU,OAAO,OAAO,KAAK,CAAC;AAAA,EACrE,IAAI,OAAO,WAAW;AAAA,IAAW,GAAG,IAAI,WAAW,OAAO,OAAO,MAAM,CAAC;AAAA,EACxE,IAAI,OAAO;AAAA,IAAQ,GAAG,IAAI,WAAW,OAAO,MAAM;AAAA,EAClD,IAAI,OAAO,SAAS;AAAA,IACnB,YAAY,KAAK,UAAU,OAAO,QAAQ,OAAO,OAAO,GAAG;AAAA,MAC1D,GAAG,IAAI,KAAK,OAAO,KAAK,CAAC;AAAA,IAC1B;AAAA,EACD;AAAA,EACA,MAAM,MAAM,GAAG,SAAS;AAAA,EACxB,OAAO,MAAM,IAAI,QAAQ;AAAA;AAG1B,SAAS,oBAAoB,CAAC,SAAuC;AAAA,EACpE,MAAM,KAAK,IAAI;AAAA,EACf,IAAI,SAAS;AAAA,IAAW,GAAG,IAAI,UAAU,QAAQ,SAAS;AAAA,EAC1D,MAAM,MAAM,GAAG,SAAS;AAAA,EACxB,OAAO,MAAM,IAAI,QAAQ;AAAA;AAAA;AAGnB,MAAM,kBAAkB,WAAW;AAAA,OACnC,KAAI,GAAyC;AAAA,IAClD,OAAO,KAAK,QAAqC,OAAO,gBAAgB;AAAA;AAAA,OAGnE,IAAG,CAAC,MAAuC;AAAA,IAChD,OAAO,KAAK,QAAwB,OAAO,kBAAkB,MAAM;AAAA;AAAA,OAG9D,QAAO,CACZ,MACA,SACmC;AAAA,IACnC,OAAO,KAAK,QACX,OACA,kBAAkB,oBAAoB,qBAAqB,OAAO,GACnE;AAAA;AAAA,OAGK,OAAM,CACX,MACA,SAC+B;AAAA,IAC/B,OAAO,KAAK,QACX,OACA,kBAAkB,mBAAmB,qBAAqB,OAAO,GAClE;AAAA;AAAA,OAGK,SAAQ,CAAC,MAAc,SAAgD;AAAA,IAC5E,OAAO,KAAK,YACX,OACA,kBAAkB,eAAe,qBAAqB,OAAO,GAC9D;AAAA;AAAA,OAGK,QAAO,CACZ,MACA,SAC2B;AAAA,IAC3B,OAAO,KAAK,QACX,QACA,kBAAkB,gBAClB,OACD;AAAA;AAAA,OAGK,KAAI,CACT,MACsE;AAAA,IACtE,OAAO,KAAK,QAIT,QAAQ,kBAAkB,WAAW;AAAA;AAAA,OAGnC,SAAQ,CACb,MACA,SAC2B;AAAA,IAC3B,OAAO,KAAK,QACX,QACA,kBAAkB,iBAClB,OACD;AAAA;AAAA,OAGK,KAAI,CACT,MACA,MACgC;AAAA,IAChC,MAAM,KAAK,IAAI;AAAA,IACf,IAAI,MAAM,UAAU;AAAA,MAAW,GAAG,IAAI,UAAU,OAAO,KAAK,KAAK,CAAC;AAAA,IAClE,IAAI,MAAM,WAAW;AAAA,MAAW,GAAG,IAAI,WAAW,OAAO,KAAK,MAAM,CAAC;AAAA,IACrE,IAAI,MAAM,aAAa;AAAA,MAAW,GAAG,IAAI,YAAY,OAAO,KAAK,QAAQ,CAAC;AAAA,IAC1E,MAAM,QAAQ,GAAG,SAAS;AAAA,IAC1B,OAAO,KAAK,QACX,OACA,kBAAkB,YAAY,QAAQ,IAAI,UAAU,IACrD;AAAA;AAAA,OAGK,OAAM,CACX,MACA,SAC+B;AAAA,IAC/B,MAAM,KAAK,SAAS,QAAQ,gBAAgB;AAAA,IAC5C,OAAO,KAAK,QACX,UACA,kBAAkB,OAAO,IAC1B;AAAA;AAAA,OAGK,OAAM,CAAC,MAA8D;AAAA,IAC1E,OAAO,KAAK,QAAgC,QAAQ,kBAAkB,IAAI;AAAA;AAAA,OAGrE,UAAS,CAAC,MAAuC;AAAA,IACtD,OAAO,KAAK,QAAwB,OAAO,kBAAkB,aAAa;AAAA;AAAA,OAOrE,OAAM,CAAC,MAAyD;AAAA,IACrE,OAAO,KAAK,QACX,QACA,yBACA,IACD;AAAA;AAAA,OAGK,WAAU,CACf,MACA,OACA,SAA8B,CAAC,GACV;AAAA,IACrB,MAAM,SAAS,MAAM,KAAK,QACzB,OACA,kBAAkB,QAAQ,QAAQ,yBAAyB,MAAM,GAClE;AAAA,IACA,OAAO,MAAM,QAAQ,MAAM,IAAI,SAAS,OAAO;AAAA;AAAA,OAG1C,gBAAe,CACpB,MACA,OACA,SAA8B,CAAC,GACF;AAAA,IAC7B,OAAO,KAAK,QACX,OACA,kBAAkB,QAAQ,cAAc,yBAAyB,MAAM,GACxE;AAAA;AAAA,EAeD,KAAkE,CACjE,KACyB;AAAA,IACzB,MAAM,SAAkC,CAAC;AAAA,IAEzC,WAAW,aAAa,OAAO,KAAK,IAAI,MAAM,GAAG;AAAA,MAChD,OAAO,aAAa,KAAK,kBAAkB,IAAI,MAAM,SAAS;AAAA,IAC/D;AAAA,IAEA,OAAO;AAAA;AAAA,EAGA,iBAAiB,CAAC,cAAsB,WAAmB;AAAA,IAClE,MAAM,OAAO;AAAA,IAEb,OAAO;AAAA,WACA,SAAc,CACnB,UAAiC,CAAC,GAChB;AAAA,QAClB,MAAM,UAAU,QAAQ,QACrB,eAAe,QAAQ,KAAgC,IACvD;AAAA,QAEH,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI,QAAQ,SAAS;AAAA,UACpB,MAAM,UAAU,OAAO,QAAQ,QAAQ,OAAO;AAAA,UAI9C,IAAI,QAAQ,SAAS,GAAG;AAAA,YACvB,IAAI,QAAQ,SAAS,GAAG;AAAA,cACvB,MAAM,QAAQ,QACZ,MAAM,CAAC,EACP,IAAI,EAAE,SAAS,GAAG,EAClB,KAAK,IAAI;AAAA,cACX,MAAM,IAAI,MACT,wDAAwD,OACzD;AAAA,YACD;AAAA,YACA,MAAM,QAAQ,QAAQ;AAAA,YACtB,IAAI,OAAO;AAAA,cACV,OAAO,KAAK,OAAO;AAAA,cACnB,OAAO,qBAAqB,GAAG;AAAA,cAC/B,QAAQ,OAAO;AAAA,YAChB;AAAA,UACD;AAAA,QACD;AAAA,QAEA,MAAM,SAA8B;AAAA,UACnC;AAAA,UACA;AAAA,UACA,OAAO,QAAQ;AAAA,UACf,QAAQ,QAAQ;AAAA,UAChB,QAAQ,QAAQ,QAAQ,KAAK,GAAG;AAAA,UAChC;AAAA,QACD;AAAA,QAEA,OAAO,KAAK,WAAW,cAAc,WAAW,MAAM;AAAA;AAAA,WAKjD,MAAW,CAAC,OAA2C;AAAA,QAC5D,MAAM,UAAU,QACb,eAAe,KAAgC,IAC/C;AAAA,QAEH,MAAM,SAAS,MAAM,KAAK,gBAAgB,cAAc,WAAW;AAAA,UAClE;AAAA,QACD,CAAC;AAAA,QACD,OAAO,OAAO;AAAA;AAAA,IAEhB;AAAA;AAEF;;AC9MA,SAAS,iBAAiB,CACzB,QACA,MACA,OACO;AAAA,EACP,IAAI,UAAU,aAAa,UAAU;AAAA,IAAM;AAAA,EAC3C,OAAO,IAAI,MAAM,OAAO,KAAK,CAAC;AAAA;AAG/B,SAAS,mBAAmB,CAAC,QAIN;AAAA,EACtB,IAAI,OAAO,eAAe;AAAA,IAAW,OAAO,OAAO;AAAA,EACnD,IAAI,OAAO,UAAU,OAAO;AAAA,IAAY;AAAA,EACxC,OAAO;AAAA;AAAA;AAGD,MAAM,cAAc,WAAW;AAAA,EACrC,WAAW,CAAC,UAAuC,CAAC,GAAG;AAAA,IACtD,MAAM,OAAO;AAAA;AAAA,EAGL,cAGL;AAAA,IACH,MAAM,CAAC,SAAgC,CAAC,MACvC,KAAK,gBAAgB,MAAM;AAAA,IAC5B,MAAM,CAAC,SAAgC,CAAC,MACvC,KAAK,gBAAgB,MAAM;AAAA,EAC7B;AAAA,EAES,eAGL;AAAA,IACH,MAAM,CACL,SAAiC,CAAC,MACC,KAAK,iBAAiB,MAAM;AAAA,IAChE,MAAM,CAAC,SAAiC,CAAC,MACxC,KAAK,iBAAiB,MAAM;AAAA,EAC9B;AAAA,OAEc,gBAAe,CAC5B,SAAgC,CAAC,GACF;AAAA,IAC/B,MAAM,eAAe,IAAI;AAAA,IACzB,kBAAkB,cAAc,UAAU,OAAO,MAAM;AAAA,IACvD,kBAAkB,cAAc,eAAe,OAAO,UAAU;AAAA,IAChE,kBAAkB,cAAc,SAAS,OAAO,KAAK;AAAA,IACrD,kBAAkB,cAAc,eAAe,OAAO,UAAU;AAAA,IAChE,kBAAkB,cAAc,UAAU,OAAO,MAAM;AAAA,IACvD,kBAAkB,cAAc,aAAa,OAAO,SAAS;AAAA,IAC7D,kBAAkB,cAAc,eAAe,OAAO,UAAU;AAAA,IAChE,kBAAkB,cAAc,aAAa,OAAO,QAAQ;AAAA,IAE5D,MAAM,QAAQ,aAAa,SAAS;AAAA,IACpC,OAAO,KAAK,QACX,OACA,yBAAyB,QAAQ,IAAI,UAAU,IAChD;AAAA;AAAA,OAGa,iBAAgB,CAC7B,SAAiC,CAAC,GACF;AAAA,IAChC,MAAM,eAAe,IAAI;AAAA,IACzB,kBAAkB,cAAc,UAAU,OAAO,MAAM;AAAA,IACvD,kBAAkB,cAAc,eAAe,OAAO,UAAU;AAAA,IAChE,kBAAkB,cAAc,SAAS,OAAO,KAAK;AAAA,IACrD,kBAAkB,cAAc,eAAe,OAAO,UAAU;AAAA,IAChE,kBAAkB,cAAc,oBAAoB,OAAO,eAAe;AAAA,IAC1E,kBAAkB,cAAc,UAAU,OAAO,MAAM;AAAA,IACvD,kBAAkB,cAAc,aAAa,OAAO,SAAS;AAAA,IAC7D,kBAAkB,cAAc,eAAe,OAAO,UAAU;AAAA,IAChE,kBAAkB,cAAc,aAAa,OAAO,QAAQ;AAAA,IAE5D,MAAM,QAAQ,aAAa,SAAS;AAAA,IACpC,OAAO,KAAK,QACX,OACA,0BAA0B,QAAQ,IAAI,UAAU,IACjD;AAAA;AAAA,SAGc,eAAe,CAC7B,SAAgC,CAAC,GACJ;AAAA,IAC7B,MAAM,YAAY,OAAO,aAAa;AAAA,IACtC,IAAI,SAAS,OAAO,UAAU,OAAO,cAAc;AAAA,IACnD,IAAI,YAAY;AAAA,IAEhB,OAAO,CAAC,OAAO,QAAQ,SAAS;AAAA,MAC/B,MAAM,WAAW,MAAM,KAAK,gBAAgB;AAAA,WACxC;AAAA,QACH,OAAO;AAAA,QACP,QAAQ,YAAY,OAAO,SAAS;AAAA,QACpC,YAAY,YAAY,OAAO,aAAa;AAAA,QAC5C,YAAY,YAAY,oBAAoB,MAAM,IAAI;AAAA,MACvD,CAAC;AAAA,MAED,WAAW,SAAS,SAAS,QAAQ;AAAA,QACpC,IAAI,OAAO,QAAQ;AAAA,UAAS;AAAA,QAC5B,MAAM;AAAA,MACP;AAAA,MAEA,MAAM,aAAa,SAAS;AAAA,MAC5B,IACC,CAAC,cACD,eAAe,UACf,SAAS,OAAO,SAAS,WACxB;AAAA,QACD;AAAA,MACD;AAAA,MAEA,SAAS;AAAA,MACT,YAAY;AAAA,IACb;AAAA;AAAA,SAGc,gBAAgB,CAC9B,SAAiC,CAAC,GACJ;AAAA,IAC9B,MAAM,YAAY,OAAO,aAAa;AAAA,IACtC,IAAI,SAAS,OAAO,UAAU,OAAO,cAAc;AAAA,IACnD,IAAI,YAAY;AAAA,IAEhB,OAAO,CAAC,OAAO,QAAQ,SAAS;AAAA,MAC/B,MAAM,WAAW,MAAM,KAAK,iBAAiB;AAAA,WACzC;AAAA,QACH,OAAO;AAAA,QACP,QAAQ,YAAY,OAAO,SAAS;AAAA,QACpC,YAAY,YAAY,OAAO,aAAa;AAAA,QAC5C,YAAY,YAAY,oBAAoB,MAAM,IAAI;AAAA,MACvD,CAAC;AAAA,MAED,WAAW,SAAS,SAAS,QAAQ;AAAA,QACpC,IAAI,OAAO,QAAQ;AAAA,UAAS;AAAA,QAC5B,MAAM;AAAA,MACP;AAAA,MAEA,MAAM,aAAa,SAAS;AAAA,MAC5B,IACC,CAAC,cACD,eAAe,UACf,SAAS,OAAO,SAAS,WACxB;AAAA,QACD;AAAA,MACD;AAAA,MAEA,SAAS;AAAA,MACT,YAAY;AAAA,IACb;AAAA;AAEF;;;AC7NA,eAAsB,YAAY,CACjC,IACA,QACgB;AAAA,EAChB,IAAI,QAAQ;AAAA,IAAS;AAAA,EAErB,MAAM,IAAI,QAAc,CAAC,YAAY;AAAA,IACpC,MAAM,UAAU,WAAW,SAAS,EAAE;AAAA,IACtC,IAAI,CAAC;AAAA,MAAQ;AAAA,IACb,OAAO,iBACN,SACA,MAAM;AAAA,MACL,aAAa,OAAO;AAAA,MACpB,QAAQ;AAAA,OAET,EAAE,MAAM,KAAK,CACd;AAAA,GACA;AAAA;AAGF,eAAsB,oBAAoB,CAAC,MAgB+B;AAAA,EACzE,MAAM,QAAQ,KAAK,SAAS;AAAA,EAC5B,MAAM,OAAO,KAAK,QAAQ;AAAA,EAC1B,MAAM,iBAAiB,KAAK,kBAAkB;AAAA,EAC9C,MAAM,WAAW,KAAK,YAAY,OAAO;AAAA,EACzC,MAAM,gBAAgB,KAAK,iBAAiB,OAAO;AAAA,EACnD,IAAI,SAAS,KAAK,cAAc;AAAA,EAChC,IAAI,QAAQ;AAAA,EACZ,IAAI,aAAa;AAAA,EAEjB,OACC,QAAQ,YACR,aAAa,iBACb,CAAC,KAAK,QAAQ,SACb;AAAA,IACD,MAAM,WAAW,MAAM,KAAK,YAAY;AAAA,MACvC;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,OAAO,KAAK;AAAA,MACZ,YAAY,KAAK;AAAA,IAClB,CAAC;AAAA,IACD;AAAA,IAEA,MAAM,iBAAiB,MAAM,KAAK,QAAQ,SAAS,QAAQ,QAAQ;AAAA,IACnE,MAAM,aAAa,kBAAkB,SAAS;AAAA,IAE9C,IAAI,cAAc,eAAe,QAAQ;AAAA,MACxC,SAAS;AAAA,MACT,aAAa;AAAA,MACb;AAAA,IACD;AAAA,IAEA,IAAI,SAAS,OAAO,WAAW,GAAG;AAAA,MACjC;AAAA,MACA,IAAI,SAAS,WAAW;AAAA,QACvB,OAAO,EAAE,QAAQ,OAAO,WAAW;AAAA,MACpC;AAAA,MACA,MAAM,MAAM,gBAAgB,KAAK,MAAM;AAAA,MACvC;AAAA,IACD;AAAA,IAEA,OAAO,EAAE,QAAQ,OAAO,WAAW;AAAA,EACpC;AAAA,EAEA,OAAO,EAAE,QAAQ,OAAO,WAAW;AAAA;AAGpC,gBAAuB,mBAAmB,CAAC,MAWV;AAAA,EAChC,MAAM,QAAQ,KAAK,SAAS;AAAA,EAC5B,MAAM,iBAAiB,KAAK,kBAAkB;AAAA,EAC9C,MAAM,WAAW,KAAK,YAAY,OAAO;AAAA,EACzC,MAAM,gBAAgB,KAAK,iBAAiB,OAAO;AAAA,EACnD,IAAI,SAAS,KAAK,cAAc;AAAA,EAChC,IAAI,QAAQ;AAAA,EACZ,IAAI,aAAa;AAAA,EAEjB,OACC,QAAQ,YACR,aAAa,iBACb,CAAC,KAAK,QAAQ,SACb;AAAA,IACD,MAAM,WAAW,MAAM,KAAK,YAAY;AAAA,MACvC;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,OAAO,KAAK;AAAA,MACZ,YAAY,KAAK;AAAA,IAClB,CAAC;AAAA,IACD;AAAA,IAEA,WAAW,SAAS,SAAS,QAAQ;AAAA,MACpC,IAAI,KAAK,QAAQ;AAAA,QAAS;AAAA,MAC1B,MAAM;AAAA,IACP;AAAA,IAEA,MAAM,aAAa,SAAS;AAAA,IAC5B,IAAI,cAAc,eAAe,QAAQ;AAAA,MACxC,SAAS;AAAA,MACT,aAAa;AAAA,MACb;AAAA,IACD;AAAA,IAEA,IAAI,SAAS,OAAO,WAAW,GAAG;AAAA,MACjC;AAAA,MACA,IAAI,cAAc,iBAAiB,SAAS;AAAA,QAAU;AAAA,MACtD,MAAM,MAAM,gBAAgB,KAAK,MAAM;AAAA,MACvC;AAAA,IACD;AAAA,IAEA;AAAA,EACD;AAAA;;;AC3JM,MAAM,kBAAkB,MAAM;AAAA,EAC3B,SAAS;AAAA,EAElB,WAAW,CAAC,UAAU,+BAA+B;AAAA,IACpD,MAAM,OAAO;AAAA,IACb,KAAK,OAAO;AAAA;AAEd;AAAA;AAEO,MAAM,uBAAuB,MAAM;AAAA,EAK/B;AAAA,EAJD,SAAS;AAAA,EAElB,WAAW,CACV,UAAU,kCACD,YACR;AAAA,IACD,MAAM,OAAO;AAAA,IAFJ;AAAA,IAGT,KAAK,OAAO;AAAA;AAEd;AAAA;AAEO,MAAM,wBAAwB,MAAM;AAAA,EAGhC;AAAA,EACA;AAAA,EAHV,WAAW,CACV,SACS,QACA,MACR;AAAA,IACD,MAAM,OAAO;AAAA,IAHJ;AAAA,IACA;AAAA,IAGT,KAAK,OAAO;AAAA;AAEd;AAAA;AAEO,MAAM,2BAA2B,MAAM;AAAA,EAGnC;AAAA,EACA;AAAA,EAHV,WAAW,CACV,SACS,QACA,MACR;AAAA,IACD,MAAM,OAAO;AAAA,IAHJ;AAAA,IACA;AAAA,IAGT,KAAK,OAAO;AAAA;AAEd;;;AChBA,IAAM,2BAA2B;AAQjC,SAAS,gBAAgB,CAAC,SAAyB;AAAA,EAClD,OAAO,QAAQ,QAAQ,QAAQ,EAAE;AAAA;AAGlC,SAAS,kBAAiB,CACzB,QACA,MACA,OACO;AAAA,EACP,IAAI,UAAU,aAAa,UAAU;AAAA,IAAM;AAAA,EAC3C,OAAO,IAAI,MAAM,OAAO,KAAK,CAAC;AAAA;AAG/B,eAAe,YAAY,CAAC,UAAsC;AAAA,EACjE,MAAM,OAAO,MAAM,SAAS,KAAK;AAAA,EACjC,IAAI,KAAK,WAAW;AAAA,IAAG;AAAA,EACvB,IAAI;AAAA,IACH,OAAO,KAAK,MAAM,IAAI;AAAA,IACrB,MAAM;AAAA,IACP,OAAO;AAAA;AAAA;AAIT,SAAS,YAAY,CAAC,MAAe,UAA0B;AAAA,EAC9D,IAAI,QAAQ,OAAO,SAAS,UAAU;AAAA,IACrC,MAAM,SAAS;AAAA,IACf,MAAM,UAAU,OAAO,SAAS,OAAO;AAAA,IACvC,IAAI,OAAO,YAAY,YAAY,QAAQ,SAAS;AAAA,MAAG,OAAO;AAAA,EAC/D;AAAA,EACA,IAAI,OAAO,SAAS,YAAY,KAAK,SAAS;AAAA,IAAG,OAAO;AAAA,EACxD,OAAO;AAAA;AAGR,eAAe,eAAe,CAAC,UAAoC;AAAA,EAClE,MAAM,OAAO,MAAM,aAAa,QAAQ;AAAA,EAExC,IAAI,SAAS,WAAW,KAAK;AAAA,IAC5B,MAAM,IAAI,UAAU,aAAa,MAAM,6BAA6B,CAAC;AAAA,EACtE;AAAA,EAEA,IAAI,SAAS,WAAW,KAAK;AAAA,IAC5B,MAAM,aAAa,SAAS,QAAQ,IAAI,aAAa,KAAK;AAAA,IAC1D,MAAM,IAAI,eACT,aAAa,MAAM,gCAAgC,GACnD,UACD;AAAA,EACD;AAAA,EAEA,IAAI,SAAS,UAAU,KAAK;AAAA,IAC3B,MAAM,IAAI,mBACT,aAAa,MAAM,2BAA2B,SAAS,SAAS,GAChE,SAAS,QACT,IACD;AAAA,EACD;AAAA,EAEA,MAAM,IAAI,gBACT,aAAa,MAAM,4BAA4B,SAAS,SAAS,GACjE,SAAS,QACT,IACD;AAAA;AAGM,SAAS,mBAAmB,CAClC,SACgB;AAAA,EAChB,MAAM,UAAU,iBAAiB,QAAQ,WAAW,wBAAwB;AAAA,EAC5E,MAAM,YAAY,QAAQ,cAAc,CAAC,OAAO,SAAS,MAAM,OAAO,IAAI;AAAA,EAE1E,eAAe,OAAU,CAAC,MAA0B;AAAA,IACnD,MAAM,WAAW,MAAM,UAAU,GAAG,UAAU,QAAQ;AAAA,MACrD,SAAS,EAAE,eAAe,UAAU,QAAQ,SAAS;AAAA,IACtD,CAAC;AAAA,IACD,IAAI,CAAC,SAAS;AAAA,MAAI,MAAM,gBAAgB,QAAQ;AAAA,IAChD,OAAQ,MAAM,SAAS,KAAK;AAAA;AAAA,EAG7B,MAAM,cAAoC;AAAA,IACzC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,QACK;AAAA,IACL,OAAO,WAAW,EAAE,QAAQ,OAAO,OAAO,WAAW,CAAC;AAAA;AAAA,EAGvD,eAAe,UAAU,CACxB,SAAkC,CAAC,GACF;AAAA,IACjC,MAAM,eAAe,IAAI;AAAA,IACzB,mBAAkB,cAAc,UAAU,OAAO,MAAM;AAAA,IACvD,mBAAkB,cAAc,eAAe,OAAO,UAAU;AAAA,IAChE,mBAAkB,cAAc,aAAa,OAAO,QAAQ;AAAA,IAC5D,mBAAkB,cAAc,SAAS,OAAO,KAAK;AAAA,IACrD,mBAAkB,cAAc,eAAe,OAAO,UAAU;AAAA,IAChE,IAAI,OAAO,OAAO,QAAQ;AAAA,MACzB,aAAa,IAAI,SAAS,OAAO,MAAM,KAAK,GAAG,CAAC;AAAA,IACjD;AAAA,IAEA,MAAM,QAAQ,aAAa,SAAS;AAAA,IACpC,OAAO,QACN,qBAAqB,QAAQ,IAAI,UAAU,IAC5C;AAAA;AAAA,EAGD,OAAO;AAAA,IACN,QAAQ;AAAA,MACP,MAAM;AAAA,MACN,MAAM,CAAC,MAAc;AAAA,QACpB,OAAO,QACN,sBAAsB,mBAAmB,IAAI,GAC9C;AAAA;AAAA,MAED,OAAO,CAAC,QAAoC;AAAA,QAC3C,OAAO,qBAAqB;AAAA,UAC3B,YAAY,OAAO;AAAA,UACnB,MAAM,OAAO;AAAA,UACb,OAAO,OAAO;AAAA,UACd,YAAY,OAAO;AAAA,UACnB,WAAW,OAAO,aAAa;AAAA,UAC/B;AAAA,UACA,SAAS,OAAO;AAAA,UAChB,gBAAgB,OAAO;AAAA,UACvB,UAAU,OAAO;AAAA,UACjB,eAAe,OAAO;AAAA,UACtB,QAAQ,OAAO;AAAA,QAChB,CAAC;AAAA;AAAA,MAEF,MAAM,CAAC,SAAoC,CAAC,GAAG;AAAA,QAC9C,OAAO,oBAAoB;AAAA,UAC1B,YAAY,OAAO;AAAA,UACnB,OAAO,OAAO;AAAA,UACd,YAAY,OAAO;AAAA,UACnB,WAAW,OAAO,aAAa;AAAA,UAC/B,gBAAgB,OAAO;AAAA,UACvB,UAAU,OAAO;AAAA,UACjB,eAAe,OAAO;AAAA,UACtB,QAAQ,OAAO;AAAA,UACf;AAAA,QACD,CAAC;AAAA;AAAA,IAEH;AAAA,IACA,QAAQ;AAAA,MACP,MAAM,CAAC,cAA+B;AAAA,QACrC,OAAO,QACN,sBAAsB,mBAAmB,OAAO,YAAY,CAAC,UAC9D;AAAA;AAAA,IAEF;AAAA,IACA,QAAQ;AAAA,MACP,IAAI,CAAC,QAAiC;AAAA,QACrC,MAAM,eAAe,IAAI;AAAA,QACzB,mBAAkB,cAAc,SAAS,OAAO,KAAK;AAAA,QACrD,mBAAkB,cAAc,SAAS,OAAO,KAAK;AAAA,QACrD,MAAM,QAAQ,aAAa,SAAS;AAAA,QACpC,OAAO,QACN,qBAAqB,QAAQ,IAAI,UAAU,IAC5C;AAAA;AAAA,IAEF;AAAA,IACA,SAAS,CAAC,QAAgB;AAAA,MACzB,OAAO,QAA+B,yBAAyB,QAAQ;AAAA;AAAA,IAExE,GAAG,GAAG;AAAA,MACL,OAAO,QAAoB,iBAAiB;AAAA;AAAA,EAE9C;AAAA;;;AC3KM,MAAM,sBAAsB,WAAW;AAAA,OACvC,KAAI,GAA6C;AAAA,IACtD,OAAO,KAAK,QACX,OACA,oBACD;AAAA;AAAA,OAGK,IAAG,CAAC,IAAyC;AAAA,IAClD,OAAO,KAAK,QACX,OACA,sBAAsB,IACvB;AAAA;AAAA,OAGK,OAAM,CACX,OACsC;AAAA,IACtC,OAAO,KAAK,QACX,QACA,sBACA,KACD;AAAA;AAAA,OAGK,OAAM,CACX,IACA,OAC8B;AAAA,IAC9B,OAAO,KAAK,QACX,SACA,sBAAsB,MACtB,KACD;AAAA;AAAA,OAGK,MAAK,CAAC,IAAyC;AAAA,IACpD,OAAO,KAAK,QACX,QACA,sBAAsB,UACvB;AAAA;AAAA,OAGK,OAAM,CAAC,IAAyC;AAAA,IACrD,OAAO,KAAK,QACX,QACA,sBAAsB,WACvB;AAAA;AAAA,OAGK,OAAM,CAAC,IAAmC;AAAA,IAC/C,OAAO,KAAK,QACX,UACA,sBAAsB,IACvB;AAAA;AAAA,OAGK,aAAY,CAAC,IAA2C;AAAA,IAC7D,OAAO,KAAK,QACX,QACA,sBAAsB,kBACvB;AAAA;AAAA,OAGK,iBAAgB,CAAC,IAA8C;AAAA,IACpE,OAAO,KAAK,QACX,OACA,sBAAsB,eACvB;AAAA;AAAA,OAGK,OAAM,CACX,IACA,OACwB;AAAA,IACxB,OAAO,KAAK,QACX,QACA,sBAAsB,aACtB,KACD;AAAA;AAAA,OAGK,KAAI,CAAC,IAA0C;AAAA,IACpD,OAAO,KAAK,QACX,OACA,sBAAsB,SACvB;AAAA;AAAA,OAGK,YAAW,CAAC,IAAY,UAAyC;AAAA,IACtE,OAAO,KAAK,QACX,QACA,sBAAsB,WAAW,kBAClC;AAAA;AAEF;;;ACnHO,MAAM,oBAAoB,WAAW;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,WAAW,CAAC,UAAuC,CAAC,GAAG;AAAA,IACtD,MAAM,OAAO;AAAA,IACb,KAAK,UAAU,oBAAoB;AAAA,MAClC,QAAQ,QAAQ,UAAU;AAAA,MAC1B,SAAS,QAAQ;AAAA,MACjB,WAAW,QAAQ;AAAA,IACpB,CAAC;AAAA,IACD,KAAK,QAAQ,IAAI,MAAM,OAAO;AAAA,IAC9B,KAAK,YAAY,IAAI,UAAU,OAAO;AAAA,IACtC,KAAK,gBAAgB,IAAI,cAAc,OAAO;AAAA;AAEhD;;;ACNO,SAAS,WAEf,CACA,KACA,UAAiE,CAAC,GACzC;AAAA,EACzB,IAAI,mBAAmB,WAAW;AAAA,IACjC,OAAO,QAAQ,MAAM,GAAG;AAAA,EACzB;AAAA,EACA,IAAI,mBAAmB,aAAa;AAAA,IACnC,OAAO,QAAQ,UAAU,MAAM,GAAG;AAAA,EACnC;AAAA,EACA,OAAO,IAAI,UAAU,OAAO,EAAE,MAAM,GAAG;AAAA;;ACGxC,SAAS,aAAa,CACrB,SACA,OACS;AAAA,EACT,MAAM,QAAQ,QAAQ;AAAA,EACtB,IAAI,OAAO,UAAU,YAAY,MAAM,WAAW,GAAG;AAAA,IACpD,MAAM,IAAI,MAAM,+BAA+B,OAAO;AAAA,EACvD;AAAA,EACA,OAAO;AAAA;AAGR,SAAS,oBAAoB,CAAC,iBAG5B;AAAA,EACD,OAAO,YAAY,aAAa,gBAAgB,MAAM,IAAI;AAAA,EAC1D,IAAI,CAAC,YAAY;AAAA,IAChB,MAAM,IAAI,MAAM,oDAAoD;AAAA,EACrE;AAAA,EACA,OAAO;AAAA,IACN,aAAa;AAAA,IACb,YAAY,aAAa,UAAU,SAAS,IAAI,YAAY;AAAA,EAC7D;AAAA;AAGM,SAAS,YAAY,CAAC,OAA+C;AAAA,EAC3E,OAAO,MAAM,eAAe;AAAA;AAGtB,SAAS,gBAAgB,CAAC,OAAwC;AAAA,EACxE,IAAI,CAAC,aAAa,KAAK,GAAG;AAAA,IACzB,MAAM,IAAI,MAAM,mCAAmC,MAAM,YAAY;AAAA,EACtE;AAAA,EAEA,MAAM,UAAU,MAAM;AAAA,EACtB,MAAM,kBAAkB,cAAc,SAAS,kBAAkB;AAAA,EACjE,MAAM,SAAS,cAAc,SAAS,QAAQ;AAAA,EAC9C,MAAM,YAAY,cAAc,SAAS,WAAW;AAAA,EACpD,MAAM,SAAS,cAAc,SAAS,QAAQ;AAAA,EAC9C,IAAI,CAAC,iBAAiB,KAAK,MAAM,GAAG;AAAA,IACnC,MAAM,IAAI,MAAM,0CAA0C;AAAA,EAC3D;AAAA,EAEA,QAAQ,aAAa,eAAe,qBAAqB,eAAe;AAAA,EAExE,OAAO;AAAA,IACN,QAAQ,MAAM;AAAA,IACd,cAAc,MAAM;AAAA,IACpB,OAAO,MAAM;AAAA,IACb,UAAU,MAAM;AAAA,IAChB,aAAa,MAAM;AAAA,IACnB,YAAY,MAAM;AAAA,IAClB,iBAAiB;AAAA,MAChB,kBAAkB;AAAA,MAClB,aAAa,MAAM,eAAe;AAAA,MAClC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,IACA,eAAe,MAAM;AAAA,EACtB;AAAA;;AC7DD,SAAS,cAAa,CACrB,SACA,OACS;AAAA,EACT,MAAM,QAAQ,QAAQ;AAAA,EACtB,IAAI,OAAO,UAAU,YAAY,MAAM,WAAW,GAAG;AAAA,IACpD,MAAM,IAAI,MAAM,gCAAgC,OAAO;AAAA,EACxD;AAAA,EACA,OAAO;AAAA;AAGR,SAAS,eAAe,CAAC,SAA0C;AAAA,EAIlE,MAAM,WAAW,QAAQ;AAAA,EACzB,IAAI,OAAO,aAAa,UAAU;AAAA,IACjC,IAAI,CAAC,mBAAmB,KAAK,QAAQ,GAAG;AAAA,MACvC,MAAM,IAAI,MAAM,0CAA0C;AAAA,IAC3D;AAAA,IACA,OAAO;AAAA,EACR;AAAA,EAEA,MAAM,QAAQ,QAAQ;AAAA,EACtB,MAAM,MACL,OAAO,UAAU,WACd,QACA,SACA,OAAO,UAAU,YACjB,OAAQ,MAA4B,QAAQ,WAC1C,MAA0B,MAC3B;AAAA,EAEL,IAAI,CAAC,KAAK;AAAA,IACT,MAAM,IAAI,MAAM,oCAAoC;AAAA,EACrD;AAAA,EACA,IAAI,CAAC,mBAAmB,KAAK,GAAG,GAAG;AAAA,IAClC,MAAM,IAAI,MAAM,0CAA0C;AAAA,EAC3D;AAAA,EACA,OAAO;AAAA;AAGR,SAAS,qBAAoB,CAAC,iBAG5B;AAAA,EACD,OAAO,YAAY,aAAa,gBAAgB,MAAM,IAAI;AAAA,EAC1D,IAAI,CAAC,YAAY;AAAA,IAChB,MAAM,IAAI,MAAM,qDAAqD;AAAA,EACtE;AAAA,EACA,OAAO;AAAA,IACN,aAAa;AAAA,IACb,YAAY,aAAa,UAAU,SAAS,IAAI,YAAY;AAAA,EAC7D;AAAA;AAGM,SAAS,aAAa,CAAC,OAAgD;AAAA,EAC7E,OAAO,MAAM,eAAe;AAAA;AAGtB,SAAS,iBAAiB,CAAC,OAAyC;AAAA,EAC1E,IAAI,CAAC,cAAc,KAAK,GAAG;AAAA,IAC1B,MAAM,IAAI,MAAM,oCAAoC,MAAM,YAAY;AAAA,EACvE;AAAA,EAEA,MAAM,UAAU,MAAM;AAAA,EACtB,MAAM,kBAAkB,eAAc,SAAS,kBAAkB;AAAA,EACjE,MAAM,SAAS,eAAc,SAAS,QAAQ;AAAA,EAC9C,MAAM,YAAY,eAAc,SAAS,WAAW;AAAA,EACpD,MAAM,QAAQ,gBAAgB,OAAO;AAAA,EACrC,QAAQ,aAAa,eAAe,sBAAqB,eAAe;AAAA,EAExE,OAAO;AAAA,IACN,QAAQ,MAAM;AAAA,IACd,cAAc,MAAM;AAAA,IACpB,OAAO,MAAM;AAAA,IACb,UAAU,MAAM;AAAA,IAChB,aAAa,MAAM;AAAA,IACnB,YAAY,MAAM;AAAA,IAClB,iBAAiB;AAAA,MAChB,kBAAkB;AAAA,MAClB,aAAa,MAAM,eAAe;AAAA,MAClC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,IACA,eAAe,MAAM;AAAA,EACtB;AAAA;;AC1HM,IAAM,sBAAsB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;;ACZA;AAAA;AAAA;AAKA;AAAA,YAEW;AAAA;AAUX,SAAS,UAAU,CAAC,SAA6B,MAAkC;AAAA,EAClF,IAAI,OAAO,YAAY,YAAY;AAAA,IAClC,MAAM,KAAK,QAAyB,IAAI;AAAA,IACxC,OAAO,OAAO,OAAM,WAAW,KAAI;AAAA,EACpC;AAAA,EACA,IACC,OAAQ,QAA8B,QAAQ,cAC9C,EAAE,QAAS,UACV;AAAA,IACD,MAAM,KAAK,QAAkD,IAAI,IAAI;AAAA,IACrE,OAAO,OAAO,OAAM,WAAW,KAAI;AAAA,EACpC;AAAA,EACA,MAAM,MAAM;AAAA,EACZ,IAAI,IAAI,IAAI,SAAS,IAAI,KAAK,YAAY;AAAA,EAC1C,IAAI,MAAM,WAAW;AAAA,IACpB,MAAM,SAAS,KAAK,YAAY;AAAA,IAChC,WAAW,OAAO,OAAO,KAAK,GAAG,GAAG;AAAA,MACnC,IAAI,IAAI,YAAY,MAAM,QAAQ;AAAA,QACjC,IAAI,IAAI;AAAA,QACR;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA,EACA,IAAI,MAAM,QAAQ,CAAC;AAAA,IAAG,OAAO,EAAE;AAAA,EAC/B,OAAO,OAAO,MAAM,WAAW,IAAI;AAAA;AA2E7B,SAAS,sBAAsB,CACrC,SACA,SACA,QACA,mBAAmB,KACT;AAAA,EACV,MAAM,KAAK,WAAW,SAAS,YAAY;AAAA,EAC3C,MAAM,YAAY,WAAW,SAAS,mBAAmB;AAAA,EACzD,MAAM,YAAY,WAAW,SAAS,mBAAmB;AAAA,EACzD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;AAAA,IAAW,OAAO;AAAA,EAC5C,OAAO,OACN,SACA;AAAA,IACC,cAAc;AAAA,IACd,qBAAqB;AAAA,IACrB,qBAAqB;AAAA,EACtB,GACA,QACA,EAAE,iBAAiB,CACpB;AAAA;",
|
|
22
|
-
"debugId": "
|
|
25
|
+
"mappings": "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",
|
|
26
|
+
"debugId": "CA72339C973F500764756E2164756E21",
|
|
23
27
|
"names": []
|
|
24
28
|
}
|
package/dist/streams/index.d.ts
CHANGED
|
@@ -206,5 +206,187 @@ type DecodedNftTransfer = {
|
|
|
206
206
|
};
|
|
207
207
|
declare function isNftTransfer(event: StreamsEvent): event is NftTransferEvent;
|
|
208
208
|
declare function decodeNftTransfer(event: StreamsEvent): DecodedNftTransfer;
|
|
209
|
-
type
|
|
210
|
-
|
|
209
|
+
type DecodedStxTransferPayload = {
|
|
210
|
+
sender: string
|
|
211
|
+
recipient: string
|
|
212
|
+
amount: string
|
|
213
|
+
memo: string | null
|
|
214
|
+
};
|
|
215
|
+
type DecodedStxTransfer = {
|
|
216
|
+
cursor: string
|
|
217
|
+
block_height: number
|
|
218
|
+
tx_id: string
|
|
219
|
+
tx_index: number
|
|
220
|
+
event_index: number
|
|
221
|
+
event_type: "stx_transfer"
|
|
222
|
+
decoded_payload: DecodedStxTransferPayload
|
|
223
|
+
source_cursor: string
|
|
224
|
+
};
|
|
225
|
+
type DecodedStxMintPayload = {
|
|
226
|
+
recipient: string
|
|
227
|
+
amount: string
|
|
228
|
+
};
|
|
229
|
+
type DecodedStxMint = {
|
|
230
|
+
cursor: string
|
|
231
|
+
block_height: number
|
|
232
|
+
tx_id: string
|
|
233
|
+
tx_index: number
|
|
234
|
+
event_index: number
|
|
235
|
+
event_type: "stx_mint"
|
|
236
|
+
decoded_payload: DecodedStxMintPayload
|
|
237
|
+
source_cursor: string
|
|
238
|
+
};
|
|
239
|
+
type DecodedStxBurnPayload = {
|
|
240
|
+
sender: string
|
|
241
|
+
amount: string
|
|
242
|
+
};
|
|
243
|
+
type DecodedStxBurn = {
|
|
244
|
+
cursor: string
|
|
245
|
+
block_height: number
|
|
246
|
+
tx_id: string
|
|
247
|
+
tx_index: number
|
|
248
|
+
event_index: number
|
|
249
|
+
event_type: "stx_burn"
|
|
250
|
+
decoded_payload: DecodedStxBurnPayload
|
|
251
|
+
source_cursor: string
|
|
252
|
+
};
|
|
253
|
+
declare function isStxTransfer(event: StreamsEvent): event is StreamsEvent & {
|
|
254
|
+
event_type: "stx_transfer"
|
|
255
|
+
};
|
|
256
|
+
declare function decodeStxTransfer(event: StreamsEvent): DecodedStxTransfer;
|
|
257
|
+
declare function isStxMint(event: StreamsEvent): event is StreamsEvent & {
|
|
258
|
+
event_type: "stx_mint"
|
|
259
|
+
};
|
|
260
|
+
declare function decodeStxMint(event: StreamsEvent): DecodedStxMint;
|
|
261
|
+
declare function isStxBurn(event: StreamsEvent): event is StreamsEvent & {
|
|
262
|
+
event_type: "stx_burn"
|
|
263
|
+
};
|
|
264
|
+
declare function decodeStxBurn(event: StreamsEvent): DecodedStxBurn;
|
|
265
|
+
type DecodedFtMintPayload = {
|
|
266
|
+
asset_identifier: string
|
|
267
|
+
contract_id: string
|
|
268
|
+
token_name: string | null
|
|
269
|
+
recipient: string
|
|
270
|
+
amount: string
|
|
271
|
+
};
|
|
272
|
+
type DecodedFtMint = {
|
|
273
|
+
cursor: string
|
|
274
|
+
block_height: number
|
|
275
|
+
tx_id: string
|
|
276
|
+
tx_index: number
|
|
277
|
+
event_index: number
|
|
278
|
+
event_type: "ft_mint"
|
|
279
|
+
decoded_payload: DecodedFtMintPayload
|
|
280
|
+
source_cursor: string
|
|
281
|
+
};
|
|
282
|
+
type DecodedFtBurnPayload = {
|
|
283
|
+
asset_identifier: string
|
|
284
|
+
contract_id: string
|
|
285
|
+
token_name: string | null
|
|
286
|
+
sender: string
|
|
287
|
+
amount: string
|
|
288
|
+
};
|
|
289
|
+
type DecodedFtBurn = {
|
|
290
|
+
cursor: string
|
|
291
|
+
block_height: number
|
|
292
|
+
tx_id: string
|
|
293
|
+
tx_index: number
|
|
294
|
+
event_index: number
|
|
295
|
+
event_type: "ft_burn"
|
|
296
|
+
decoded_payload: DecodedFtBurnPayload
|
|
297
|
+
source_cursor: string
|
|
298
|
+
};
|
|
299
|
+
type DecodedNftMintPayload = {
|
|
300
|
+
asset_identifier: string
|
|
301
|
+
contract_id: string
|
|
302
|
+
token_name: string | null
|
|
303
|
+
recipient: string
|
|
304
|
+
value: string
|
|
305
|
+
};
|
|
306
|
+
type DecodedNftMint = {
|
|
307
|
+
cursor: string
|
|
308
|
+
block_height: number
|
|
309
|
+
tx_id: string
|
|
310
|
+
tx_index: number
|
|
311
|
+
event_index: number
|
|
312
|
+
event_type: "nft_mint"
|
|
313
|
+
decoded_payload: DecodedNftMintPayload
|
|
314
|
+
source_cursor: string
|
|
315
|
+
};
|
|
316
|
+
type DecodedNftBurnPayload = {
|
|
317
|
+
asset_identifier: string
|
|
318
|
+
contract_id: string
|
|
319
|
+
token_name: string | null
|
|
320
|
+
sender: string
|
|
321
|
+
value: string
|
|
322
|
+
};
|
|
323
|
+
type DecodedNftBurn = {
|
|
324
|
+
cursor: string
|
|
325
|
+
block_height: number
|
|
326
|
+
tx_id: string
|
|
327
|
+
tx_index: number
|
|
328
|
+
event_index: number
|
|
329
|
+
event_type: "nft_burn"
|
|
330
|
+
decoded_payload: DecodedNftBurnPayload
|
|
331
|
+
source_cursor: string
|
|
332
|
+
};
|
|
333
|
+
declare function isFtMint(event: StreamsEvent): event is StreamsEvent & {
|
|
334
|
+
event_type: "ft_mint"
|
|
335
|
+
};
|
|
336
|
+
declare function decodeFtMint(event: StreamsEvent): DecodedFtMint;
|
|
337
|
+
declare function isFtBurn(event: StreamsEvent): event is StreamsEvent & {
|
|
338
|
+
event_type: "ft_burn"
|
|
339
|
+
};
|
|
340
|
+
declare function decodeFtBurn(event: StreamsEvent): DecodedFtBurn;
|
|
341
|
+
declare function isNftMint(event: StreamsEvent): event is StreamsEvent & {
|
|
342
|
+
event_type: "nft_mint"
|
|
343
|
+
};
|
|
344
|
+
declare function decodeNftMint(event: StreamsEvent): DecodedNftMint;
|
|
345
|
+
declare function isNftBurn(event: StreamsEvent): event is StreamsEvent & {
|
|
346
|
+
event_type: "nft_burn"
|
|
347
|
+
};
|
|
348
|
+
declare function decodeNftBurn(event: StreamsEvent): DecodedNftBurn;
|
|
349
|
+
/** Decoded form of a Clarity `print` event:
|
|
350
|
+
* - `topic`: the print topic, when the contract emits a `{ topic, ... }` tuple
|
|
351
|
+
* - `value`: the Clarity value decoded to JSON (uints as strings, buffers as
|
|
352
|
+
* `0x…` hex, tuples as objects)
|
|
353
|
+
* - `raw_value`: the canonical serialized hex, for byte-exact consumers */
|
|
354
|
+
type DecodedPrintValue = {
|
|
355
|
+
topic: string | null
|
|
356
|
+
value: unknown
|
|
357
|
+
raw_value: string | null
|
|
358
|
+
};
|
|
359
|
+
type DecodedPrintPayload = {
|
|
360
|
+
contract_id: string | null
|
|
361
|
+
payload: DecodedPrintValue
|
|
362
|
+
};
|
|
363
|
+
type DecodedPrint = {
|
|
364
|
+
cursor: string
|
|
365
|
+
block_height: number
|
|
366
|
+
tx_id: string
|
|
367
|
+
tx_index: number
|
|
368
|
+
event_index: number
|
|
369
|
+
event_type: "print"
|
|
370
|
+
decoded_payload: DecodedPrintPayload
|
|
371
|
+
source_cursor: string
|
|
372
|
+
};
|
|
373
|
+
declare function isPrint(event: StreamsEvent): event is StreamsEvent & {
|
|
374
|
+
event_type: "print"
|
|
375
|
+
};
|
|
376
|
+
declare function decodePrint(event: StreamsEvent): DecodedPrint;
|
|
377
|
+
/** Superset of the columns the decoded_events table holds. Every decoded
|
|
378
|
+
* event's `decoded_payload` is assignable to this, so the indexer's writer
|
|
379
|
+
* can map columns generically instead of per-event-type. */
|
|
380
|
+
type DecodedEventColumns = {
|
|
381
|
+
contract_id?: string | null
|
|
382
|
+
asset_identifier?: string | null
|
|
383
|
+
sender?: string | null
|
|
384
|
+
recipient?: string | null
|
|
385
|
+
amount?: string | null
|
|
386
|
+
value?: string | null
|
|
387
|
+
memo?: string | null
|
|
388
|
+
/** JSONB overflow for non-flat types (e.g. print's decoded value). */
|
|
389
|
+
payload?: unknown
|
|
390
|
+
};
|
|
391
|
+
type DecodedEventRow = DecodedFtTransfer | DecodedNftTransfer | DecodedStxTransfer | DecodedStxMint | DecodedStxBurn | DecodedFtMint | DecodedFtBurn | DecodedNftMint | DecodedNftBurn | DecodedPrint;
|
|
392
|
+
export { isStxTransfer, isStxMint, isStxBurn, isPrint, isNftTransfer, isNftMint, isNftBurn, isFtTransfer, isFtMint, isFtBurn, decodeStxTransfer, decodeStxMint, decodeStxBurn, decodePrint, decodeNftTransfer, decodeNftMint, decodeNftBurn, decodeFtTransfer, decodeFtMint, decodeFtBurn, createStreamsClient, ValidationError, StreamsTip, StreamsServerError, StreamsReorgsListParams, StreamsReorgsListEnvelope, StreamsReorg, StreamsEventsStreamParams, StreamsEventsListParams, StreamsEventsListEnvelope, StreamsEventsEnvelope, StreamsEventsConsumeResult, StreamsEventsConsumeParams, StreamsEventType, StreamsEventPayload, StreamsEvent, StreamsClient, StreamsCanonicalBlock, STREAMS_EVENT_TYPES, RateLimitError, NftTransferPayload, NftTransferEvent, FtTransferPayload, FtTransferEvent, FetchLike, DecodedStxTransferPayload, DecodedStxTransfer, DecodedStxMintPayload, DecodedStxMint, DecodedStxBurnPayload, DecodedStxBurn, DecodedPrintValue, DecodedPrintPayload, DecodedPrint, DecodedNftTransferPayload, DecodedNftTransfer, DecodedNftMintPayload, DecodedNftMint, DecodedNftBurnPayload, DecodedNftBurn, DecodedFtTransferPayload, DecodedFtTransfer, DecodedFtMintPayload, DecodedFtMint, DecodedFtBurnPayload, DecodedFtBurn, DecodedEventRow, DecodedEventColumns, AuthError };
|
package/dist/streams/index.js
CHANGED
|
@@ -380,6 +380,222 @@ function decodeNftTransfer(event) {
|
|
|
380
380
|
source_cursor: event.cursor
|
|
381
381
|
};
|
|
382
382
|
}
|
|
383
|
+
// src/streams/_payload.ts
|
|
384
|
+
function requireString3(payload, field, eventType) {
|
|
385
|
+
const value = payload[field];
|
|
386
|
+
if (typeof value !== "string" || value.length === 0) {
|
|
387
|
+
throw new Error(`${eventType} payload missing ${field}`);
|
|
388
|
+
}
|
|
389
|
+
return value;
|
|
390
|
+
}
|
|
391
|
+
function optionalString(value) {
|
|
392
|
+
return typeof value === "string" && value.length > 0 ? value : null;
|
|
393
|
+
}
|
|
394
|
+
function requireAmount(payload, eventType) {
|
|
395
|
+
const amount = requireString3(payload, "amount", eventType);
|
|
396
|
+
if (!/^(0|[1-9]\d*)$/.test(amount)) {
|
|
397
|
+
throw new Error(`${eventType} payload has malformed amount`);
|
|
398
|
+
}
|
|
399
|
+
return amount;
|
|
400
|
+
}
|
|
401
|
+
function parseAssetIdentifier3(assetIdentifier, eventType) {
|
|
402
|
+
const [contractId, tokenName] = assetIdentifier.split("::");
|
|
403
|
+
if (!contractId) {
|
|
404
|
+
throw new Error(`${eventType} payload has malformed asset_identifier`);
|
|
405
|
+
}
|
|
406
|
+
return {
|
|
407
|
+
contract_id: contractId,
|
|
408
|
+
token_name: tokenName && tokenName.length > 0 ? tokenName : null
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
function requireHexValue2(payload, eventType) {
|
|
412
|
+
const rawValue = payload.raw_value;
|
|
413
|
+
if (typeof rawValue === "string") {
|
|
414
|
+
if (!/^0x[0-9a-fA-F]*$/.test(rawValue)) {
|
|
415
|
+
throw new Error(`${eventType} payload has malformed value`);
|
|
416
|
+
}
|
|
417
|
+
return rawValue;
|
|
418
|
+
}
|
|
419
|
+
const value = payload.value;
|
|
420
|
+
const hex = typeof value === "string" ? value : value && typeof value === "object" && typeof value.hex === "string" ? value.hex : null;
|
|
421
|
+
if (!hex) {
|
|
422
|
+
throw new Error(`${eventType} payload missing value`);
|
|
423
|
+
}
|
|
424
|
+
if (!/^0x[0-9a-fA-F]*$/.test(hex)) {
|
|
425
|
+
throw new Error(`${eventType} payload has malformed value`);
|
|
426
|
+
}
|
|
427
|
+
return hex;
|
|
428
|
+
}
|
|
429
|
+
function decodedRow(event, eventType, decoded_payload) {
|
|
430
|
+
return {
|
|
431
|
+
cursor: event.cursor,
|
|
432
|
+
block_height: event.block_height,
|
|
433
|
+
tx_id: event.tx_id,
|
|
434
|
+
tx_index: event.tx_index,
|
|
435
|
+
event_index: event.event_index,
|
|
436
|
+
event_type: eventType,
|
|
437
|
+
decoded_payload,
|
|
438
|
+
source_cursor: event.cursor
|
|
439
|
+
};
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
// src/streams/stx-events.ts
|
|
443
|
+
function isStxTransfer(event) {
|
|
444
|
+
return event.event_type === "stx_transfer";
|
|
445
|
+
}
|
|
446
|
+
function decodeStxTransfer(event) {
|
|
447
|
+
if (!isStxTransfer(event)) {
|
|
448
|
+
throw new Error(`Expected stx_transfer event, got ${event.event_type}`);
|
|
449
|
+
}
|
|
450
|
+
const payload = event.payload;
|
|
451
|
+
return decodedRow(event, "stx_transfer", {
|
|
452
|
+
sender: requireString3(payload, "sender", "stx_transfer"),
|
|
453
|
+
recipient: requireString3(payload, "recipient", "stx_transfer"),
|
|
454
|
+
amount: requireAmount(payload, "stx_transfer"),
|
|
455
|
+
memo: optionalString(payload.memo)
|
|
456
|
+
});
|
|
457
|
+
}
|
|
458
|
+
function isStxMint(event) {
|
|
459
|
+
return event.event_type === "stx_mint";
|
|
460
|
+
}
|
|
461
|
+
function decodeStxMint(event) {
|
|
462
|
+
if (!isStxMint(event)) {
|
|
463
|
+
throw new Error(`Expected stx_mint event, got ${event.event_type}`);
|
|
464
|
+
}
|
|
465
|
+
const payload = event.payload;
|
|
466
|
+
return decodedRow(event, "stx_mint", {
|
|
467
|
+
recipient: requireString3(payload, "recipient", "stx_mint"),
|
|
468
|
+
amount: requireAmount(payload, "stx_mint")
|
|
469
|
+
});
|
|
470
|
+
}
|
|
471
|
+
function isStxBurn(event) {
|
|
472
|
+
return event.event_type === "stx_burn";
|
|
473
|
+
}
|
|
474
|
+
function decodeStxBurn(event) {
|
|
475
|
+
if (!isStxBurn(event)) {
|
|
476
|
+
throw new Error(`Expected stx_burn event, got ${event.event_type}`);
|
|
477
|
+
}
|
|
478
|
+
const payload = event.payload;
|
|
479
|
+
return decodedRow(event, "stx_burn", {
|
|
480
|
+
sender: requireString3(payload, "sender", "stx_burn"),
|
|
481
|
+
amount: requireAmount(payload, "stx_burn")
|
|
482
|
+
});
|
|
483
|
+
}
|
|
484
|
+
// src/streams/token-mint-burn.ts
|
|
485
|
+
function assetFields(event, eventType) {
|
|
486
|
+
const assetIdentifier = requireString3(event.payload, "asset_identifier", eventType);
|
|
487
|
+
const { contract_id, token_name } = parseAssetIdentifier3(assetIdentifier, eventType);
|
|
488
|
+
return {
|
|
489
|
+
asset_identifier: assetIdentifier,
|
|
490
|
+
contract_id: event.contract_id ?? contract_id,
|
|
491
|
+
token_name
|
|
492
|
+
};
|
|
493
|
+
}
|
|
494
|
+
function isFtMint(event) {
|
|
495
|
+
return event.event_type === "ft_mint";
|
|
496
|
+
}
|
|
497
|
+
function decodeFtMint(event) {
|
|
498
|
+
if (!isFtMint(event)) {
|
|
499
|
+
throw new Error(`Expected ft_mint event, got ${event.event_type}`);
|
|
500
|
+
}
|
|
501
|
+
return decodedRow(event, "ft_mint", {
|
|
502
|
+
...assetFields(event, "ft_mint"),
|
|
503
|
+
recipient: requireString3(event.payload, "recipient", "ft_mint"),
|
|
504
|
+
amount: requireAmount(event.payload, "ft_mint")
|
|
505
|
+
});
|
|
506
|
+
}
|
|
507
|
+
function isFtBurn(event) {
|
|
508
|
+
return event.event_type === "ft_burn";
|
|
509
|
+
}
|
|
510
|
+
function decodeFtBurn(event) {
|
|
511
|
+
if (!isFtBurn(event)) {
|
|
512
|
+
throw new Error(`Expected ft_burn event, got ${event.event_type}`);
|
|
513
|
+
}
|
|
514
|
+
return decodedRow(event, "ft_burn", {
|
|
515
|
+
...assetFields(event, "ft_burn"),
|
|
516
|
+
sender: requireString3(event.payload, "sender", "ft_burn"),
|
|
517
|
+
amount: requireAmount(event.payload, "ft_burn")
|
|
518
|
+
});
|
|
519
|
+
}
|
|
520
|
+
function isNftMint(event) {
|
|
521
|
+
return event.event_type === "nft_mint";
|
|
522
|
+
}
|
|
523
|
+
function decodeNftMint(event) {
|
|
524
|
+
if (!isNftMint(event)) {
|
|
525
|
+
throw new Error(`Expected nft_mint event, got ${event.event_type}`);
|
|
526
|
+
}
|
|
527
|
+
return decodedRow(event, "nft_mint", {
|
|
528
|
+
...assetFields(event, "nft_mint"),
|
|
529
|
+
recipient: requireString3(event.payload, "recipient", "nft_mint"),
|
|
530
|
+
value: requireHexValue2(event.payload, "nft_mint")
|
|
531
|
+
});
|
|
532
|
+
}
|
|
533
|
+
function isNftBurn(event) {
|
|
534
|
+
return event.event_type === "nft_burn";
|
|
535
|
+
}
|
|
536
|
+
function decodeNftBurn(event) {
|
|
537
|
+
if (!isNftBurn(event)) {
|
|
538
|
+
throw new Error(`Expected nft_burn event, got ${event.event_type}`);
|
|
539
|
+
}
|
|
540
|
+
return decodedRow(event, "nft_burn", {
|
|
541
|
+
...assetFields(event, "nft_burn"),
|
|
542
|
+
sender: requireString3(event.payload, "sender", "nft_burn"),
|
|
543
|
+
value: requireHexValue2(event.payload, "nft_burn")
|
|
544
|
+
});
|
|
545
|
+
}
|
|
546
|
+
// src/streams/print.ts
|
|
547
|
+
import { cvToValue, deserializeCV } from "@secondlayer/stacks/clarity";
|
|
548
|
+
function printValueHex(payload) {
|
|
549
|
+
if (typeof payload.raw_value === "string")
|
|
550
|
+
return payload.raw_value;
|
|
551
|
+
const value = payload.value;
|
|
552
|
+
if (typeof value === "string" && value.startsWith("0x"))
|
|
553
|
+
return value;
|
|
554
|
+
if (value && typeof value === "object" && typeof value.hex === "string") {
|
|
555
|
+
return value.hex;
|
|
556
|
+
}
|
|
557
|
+
return null;
|
|
558
|
+
}
|
|
559
|
+
function toJsonSafe(value) {
|
|
560
|
+
if (typeof value === "bigint")
|
|
561
|
+
return value.toString();
|
|
562
|
+
if (Array.isArray(value))
|
|
563
|
+
return value.map(toJsonSafe);
|
|
564
|
+
if (value && typeof value === "object") {
|
|
565
|
+
const out = {};
|
|
566
|
+
for (const [key, val] of Object.entries(value)) {
|
|
567
|
+
out[key] = toJsonSafe(val);
|
|
568
|
+
}
|
|
569
|
+
return out;
|
|
570
|
+
}
|
|
571
|
+
return value;
|
|
572
|
+
}
|
|
573
|
+
function isPrint(event) {
|
|
574
|
+
return event.event_type === "print";
|
|
575
|
+
}
|
|
576
|
+
function decodePrint(event) {
|
|
577
|
+
if (!isPrint(event)) {
|
|
578
|
+
throw new Error(`Expected print event, got ${event.event_type}`);
|
|
579
|
+
}
|
|
580
|
+
const payload = event.payload;
|
|
581
|
+
const topic = optionalString(payload.topic);
|
|
582
|
+
const rawValue = printValueHex(payload);
|
|
583
|
+
let value;
|
|
584
|
+
if (rawValue) {
|
|
585
|
+
try {
|
|
586
|
+
const hex = rawValue.startsWith("0x") ? rawValue.slice(2) : rawValue;
|
|
587
|
+
value = toJsonSafe(cvToValue(deserializeCV(hex)));
|
|
588
|
+
} catch {
|
|
589
|
+
value = toJsonSafe(payload.value ?? null);
|
|
590
|
+
}
|
|
591
|
+
} else {
|
|
592
|
+
value = toJsonSafe(payload.value ?? null);
|
|
593
|
+
}
|
|
594
|
+
return decodedRow(event, "print", {
|
|
595
|
+
contract_id: event.contract_id ?? optionalString(payload.contract_id),
|
|
596
|
+
payload: { topic, value, raw_value: rawValue }
|
|
597
|
+
});
|
|
598
|
+
}
|
|
383
599
|
// src/streams/types.ts
|
|
384
600
|
var STREAMS_EVENT_TYPES = [
|
|
385
601
|
"stx_transfer",
|
|
@@ -395,10 +611,26 @@ var STREAMS_EVENT_TYPES = [
|
|
|
395
611
|
"print"
|
|
396
612
|
];
|
|
397
613
|
export {
|
|
614
|
+
isStxTransfer,
|
|
615
|
+
isStxMint,
|
|
616
|
+
isStxBurn,
|
|
617
|
+
isPrint,
|
|
398
618
|
isNftTransfer,
|
|
619
|
+
isNftMint,
|
|
620
|
+
isNftBurn,
|
|
399
621
|
isFtTransfer,
|
|
622
|
+
isFtMint,
|
|
623
|
+
isFtBurn,
|
|
624
|
+
decodeStxTransfer,
|
|
625
|
+
decodeStxMint,
|
|
626
|
+
decodeStxBurn,
|
|
627
|
+
decodePrint,
|
|
400
628
|
decodeNftTransfer,
|
|
629
|
+
decodeNftMint,
|
|
630
|
+
decodeNftBurn,
|
|
401
631
|
decodeFtTransfer,
|
|
632
|
+
decodeFtMint,
|
|
633
|
+
decodeFtBurn,
|
|
402
634
|
createStreamsClient,
|
|
403
635
|
ValidationError,
|
|
404
636
|
StreamsServerError,
|
|
@@ -407,5 +639,5 @@ export {
|
|
|
407
639
|
AuthError
|
|
408
640
|
};
|
|
409
641
|
|
|
410
|
-
//# debugId=
|
|
642
|
+
//# debugId=E980A8AB321591D864756E2164756E21
|
|
411
643
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/streams/consumer.ts", "../src/streams/errors.ts", "../src/streams/client.ts", "../src/streams/ft-transfer.ts", "../src/streams/nft-transfer.ts", "../src/streams/types.ts"],
|
|
3
|
+
"sources": ["../src/streams/consumer.ts", "../src/streams/errors.ts", "../src/streams/client.ts", "../src/streams/ft-transfer.ts", "../src/streams/nft-transfer.ts", "../src/streams/_payload.ts", "../src/streams/stx-events.ts", "../src/streams/token-mint-burn.ts", "../src/streams/print.ts", "../src/streams/types.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import type {\n\tStreamsEvent,\n\tStreamsEventType,\n\tStreamsEventsEnvelope,\n} from \"./types.ts\";\n\ntype StreamsEventsFetchParams = {\n\tcursor?: string | null;\n\tlimit: number;\n\ttypes?: readonly StreamsEventType[];\n\tcontractId?: string;\n};\n\nexport type StreamsEventsFetcher = (\n\tparams: StreamsEventsFetchParams,\n) => Promise<StreamsEventsEnvelope>;\n\nexport type Sleep = (ms: number, signal?: AbortSignal) => Promise<void>;\n\nexport async function defaultSleep(\n\tms: number,\n\tsignal?: AbortSignal,\n): Promise<void> {\n\tif (signal?.aborted) return;\n\n\tawait new Promise<void>((resolve) => {\n\t\tconst timeout = setTimeout(resolve, ms);\n\t\tif (!signal) return;\n\t\tsignal.addEventListener(\n\t\t\t\"abort\",\n\t\t\t() => {\n\t\t\t\tclearTimeout(timeout);\n\t\t\t\tresolve();\n\t\t\t},\n\t\t\t{ once: true },\n\t\t);\n\t});\n}\n\nexport async function consumeStreamsEvents(opts: {\n\tfromCursor?: string | null;\n\tmode?: \"tail\" | \"bounded\";\n\tbatchSize: number;\n\ttypes?: readonly StreamsEventType[];\n\tcontractId?: string;\n\tfetchEvents: StreamsEventsFetcher;\n\tonBatch: (\n\t\tevents: StreamsEvent[],\n\t\tenvelope: StreamsEventsEnvelope,\n\t) => Promise<string | null | undefined> | string | null | undefined;\n\tsleep?: Sleep;\n\temptyBackoffMs?: number;\n\tmaxPages?: number;\n\tmaxEmptyPolls?: number;\n\tsignal?: AbortSignal;\n}): Promise<{ cursor: string | null; pages: number; emptyPolls: number }> {\n\tconst sleep = opts.sleep ?? defaultSleep;\n\tconst mode = opts.mode ?? \"tail\";\n\tconst emptyBackoffMs = opts.emptyBackoffMs ?? 500;\n\tconst maxPages = opts.maxPages ?? Number.POSITIVE_INFINITY;\n\tconst maxEmptyPolls = opts.maxEmptyPolls ?? Number.POSITIVE_INFINITY;\n\tlet cursor = opts.fromCursor ?? null;\n\tlet pages = 0;\n\tlet emptyPolls = 0;\n\n\twhile (\n\t\tpages < maxPages &&\n\t\temptyPolls < maxEmptyPolls &&\n\t\t!opts.signal?.aborted\n\t) {\n\t\tconst envelope = await opts.fetchEvents({\n\t\t\tcursor,\n\t\t\tlimit: opts.batchSize,\n\t\t\ttypes: opts.types,\n\t\t\tcontractId: opts.contractId,\n\t\t});\n\t\tpages++;\n\n\t\tconst returnedCursor = await opts.onBatch(envelope.events, envelope);\n\t\tconst nextCursor = returnedCursor ?? envelope.next_cursor;\n\n\t\tif (nextCursor && nextCursor !== cursor) {\n\t\t\tcursor = nextCursor;\n\t\t\temptyPolls = 0;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (envelope.events.length === 0) {\n\t\t\temptyPolls++;\n\t\t\tif (mode === \"bounded\") {\n\t\t\t\treturn { cursor, pages, emptyPolls };\n\t\t\t}\n\t\t\tawait sleep(emptyBackoffMs, opts.signal);\n\t\t\tcontinue;\n\t\t}\n\n\t\treturn { cursor, pages, emptyPolls };\n\t}\n\n\treturn { cursor, pages, emptyPolls };\n}\n\nexport async function* streamStreamsEvents(opts: {\n\tfromCursor?: string | null;\n\tbatchSize: number;\n\ttypes?: readonly StreamsEventType[];\n\tcontractId?: string;\n\tfetchEvents: StreamsEventsFetcher;\n\tsleep?: Sleep;\n\temptyBackoffMs?: number;\n\tmaxPages?: number;\n\tmaxEmptyPolls?: number;\n\tsignal?: AbortSignal;\n}): AsyncGenerator<StreamsEvent> {\n\tconst sleep = opts.sleep ?? defaultSleep;\n\tconst emptyBackoffMs = opts.emptyBackoffMs ?? 500;\n\tconst maxPages = opts.maxPages ?? Number.POSITIVE_INFINITY;\n\tconst maxEmptyPolls = opts.maxEmptyPolls ?? Number.POSITIVE_INFINITY;\n\tlet cursor = opts.fromCursor ?? null;\n\tlet pages = 0;\n\tlet emptyPolls = 0;\n\n\twhile (\n\t\tpages < maxPages &&\n\t\temptyPolls < maxEmptyPolls &&\n\t\t!opts.signal?.aborted\n\t) {\n\t\tconst envelope = await opts.fetchEvents({\n\t\t\tcursor,\n\t\t\tlimit: opts.batchSize,\n\t\t\ttypes: opts.types,\n\t\t\tcontractId: opts.contractId,\n\t\t});\n\t\tpages++;\n\n\t\tfor (const event of envelope.events) {\n\t\t\tif (opts.signal?.aborted) return;\n\t\t\tyield event;\n\t\t}\n\n\t\tconst nextCursor = envelope.next_cursor;\n\t\tif (nextCursor && nextCursor !== cursor) {\n\t\t\tcursor = nextCursor;\n\t\t\temptyPolls = 0;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (envelope.events.length === 0) {\n\t\t\temptyPolls++;\n\t\t\tif (emptyPolls >= maxEmptyPolls || pages >= maxPages) return;\n\t\t\tawait sleep(emptyBackoffMs, opts.signal);\n\t\t\tcontinue;\n\t\t}\n\n\t\treturn;\n\t}\n}\n",
|
|
6
6
|
"export class AuthError extends Error {\n\treadonly status = 401;\n\n\tconstructor(message = \"API key invalid or expired.\") {\n\t\tsuper(message);\n\t\tthis.name = \"AuthError\";\n\t}\n}\n\nexport class RateLimitError extends Error {\n\treadonly status = 429;\n\n\tconstructor(\n\t\tmessage = \"Rate limited. Try again later.\",\n\t\treadonly retryAfter?: string,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"RateLimitError\";\n\t}\n}\n\nexport class ValidationError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\treadonly status: number,\n\t\treadonly body?: unknown,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"ValidationError\";\n\t}\n}\n\nexport class StreamsServerError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\treadonly status: number,\n\t\treadonly body?: unknown,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"StreamsServerError\";\n\t}\n}\n",
|
|
7
7
|
"import {\n\ttype StreamsEventsFetcher,\n\tconsumeStreamsEvents,\n\tstreamStreamsEvents,\n} from \"./consumer.ts\";\nimport {\n\tAuthError,\n\tRateLimitError,\n\tStreamsServerError,\n\tValidationError,\n} from \"./errors.ts\";\nimport type {\n\tFetchLike,\n\tStreamsCanonicalBlock,\n\tStreamsClient,\n\tStreamsEventsConsumeParams,\n\tStreamsEventsEnvelope,\n\tStreamsEventsListEnvelope,\n\tStreamsEventsListParams,\n\tStreamsEventsStreamParams,\n\tStreamsReorgsListEnvelope,\n\tStreamsReorgsListParams,\n\tStreamsTip,\n} from \"./types.ts\";\n\nconst DEFAULT_STREAMS_BASE_URL = \"https://api.secondlayer.tools\";\n\nexport type CreateStreamsClientOptions = {\n\tapiKey: string;\n\tbaseUrl?: string;\n\tfetchImpl?: FetchLike;\n};\n\nfunction normalizeBaseUrl(baseUrl: string): string {\n\treturn baseUrl.replace(/\\/+$/, \"\");\n}\n\nfunction appendSearchParam(\n\tparams: URLSearchParams,\n\tname: string,\n\tvalue: number | string | null | undefined,\n): void {\n\tif (value === undefined || value === null) return;\n\tparams.set(name, String(value));\n}\n\nasync function responseBody(response: Response): Promise<unknown> {\n\tconst text = await response.text();\n\tif (text.length === 0) return undefined;\n\ttry {\n\t\treturn JSON.parse(text);\n\t} catch {\n\t\treturn text;\n\t}\n}\n\nfunction errorMessage(body: unknown, fallback: string): string {\n\tif (body && typeof body === \"object\") {\n\t\tconst record = body as Record<string, unknown>;\n\t\tconst message = record.error ?? record.message;\n\t\tif (typeof message === \"string\" && message.length > 0) return message;\n\t}\n\tif (typeof body === \"string\" && body.length > 0) return body;\n\treturn fallback;\n}\n\nasync function mapStreamsError(response: Response): Promise<never> {\n\tconst body = await responseBody(response);\n\n\tif (response.status === 401) {\n\t\tthrow new AuthError(errorMessage(body, \"API key invalid or expired.\"));\n\t}\n\n\tif (response.status === 429) {\n\t\tconst retryAfter = response.headers.get(\"Retry-After\") ?? undefined;\n\t\tthrow new RateLimitError(\n\t\t\terrorMessage(body, \"Rate limited. Try again later.\"),\n\t\t\tretryAfter,\n\t\t);\n\t}\n\n\tif (response.status >= 500) {\n\t\tthrow new StreamsServerError(\n\t\t\terrorMessage(body, `Streams server returned ${response.status}.`),\n\t\t\tresponse.status,\n\t\t\tbody,\n\t\t);\n\t}\n\n\tthrow new ValidationError(\n\t\terrorMessage(body, `Streams request returned ${response.status}.`),\n\t\tresponse.status,\n\t\tbody,\n\t);\n}\n\nexport function createStreamsClient(\n\toptions: CreateStreamsClientOptions,\n): StreamsClient {\n\tconst baseUrl = normalizeBaseUrl(options.baseUrl ?? DEFAULT_STREAMS_BASE_URL);\n\tconst fetchImpl = options.fetchImpl ?? ((input, init) => fetch(input, init));\n\n\tasync function request<T>(path: string): Promise<T> {\n\t\tconst response = await fetchImpl(`${baseUrl}${path}`, {\n\t\t\theaders: { Authorization: `Bearer ${options.apiKey}` },\n\t\t});\n\t\tif (!response.ok) await mapStreamsError(response);\n\t\treturn (await response.json()) as T;\n\t}\n\n\tconst fetchEvents: StreamsEventsFetcher = async ({\n\t\tcursor,\n\t\tlimit,\n\t\ttypes,\n\t\tcontractId,\n\t}) => {\n\t\treturn listEvents({ cursor, limit, types, contractId });\n\t};\n\n\tasync function listEvents(\n\t\tparams: StreamsEventsListParams = {},\n\t): Promise<StreamsEventsEnvelope> {\n\t\tconst searchParams = new URLSearchParams();\n\t\tappendSearchParam(searchParams, \"cursor\", params.cursor);\n\t\tappendSearchParam(searchParams, \"from_height\", params.fromHeight);\n\t\tappendSearchParam(searchParams, \"to_height\", params.toHeight);\n\t\tappendSearchParam(searchParams, \"limit\", params.limit);\n\t\tappendSearchParam(searchParams, \"contract_id\", params.contractId);\n\t\tif (params.types?.length) {\n\t\t\tsearchParams.set(\"types\", params.types.join(\",\"));\n\t\t}\n\n\t\tconst query = searchParams.toString();\n\t\treturn request<StreamsEventsEnvelope>(\n\t\t\t`/v1/streams/events${query ? `?${query}` : \"\"}`,\n\t\t);\n\t}\n\n\treturn {\n\t\tevents: {\n\t\t\tlist: listEvents,\n\t\t\tbyTxId(txId: string) {\n\t\t\t\treturn request<StreamsEventsListEnvelope>(\n\t\t\t\t\t`/v1/streams/events/${encodeURIComponent(txId)}`,\n\t\t\t\t);\n\t\t\t},\n\t\t\tconsume(params: StreamsEventsConsumeParams) {\n\t\t\t\treturn consumeStreamsEvents({\n\t\t\t\t\tfromCursor: params.fromCursor,\n\t\t\t\t\tmode: params.mode,\n\t\t\t\t\ttypes: params.types,\n\t\t\t\t\tcontractId: params.contractId,\n\t\t\t\t\tbatchSize: params.batchSize ?? 100,\n\t\t\t\t\tfetchEvents,\n\t\t\t\t\tonBatch: params.onBatch,\n\t\t\t\t\temptyBackoffMs: params.emptyBackoffMs,\n\t\t\t\t\tmaxPages: params.maxPages,\n\t\t\t\t\tmaxEmptyPolls: params.maxEmptyPolls,\n\t\t\t\t\tsignal: params.signal,\n\t\t\t\t});\n\t\t\t},\n\t\t\tstream(params: StreamsEventsStreamParams = {}) {\n\t\t\t\treturn streamStreamsEvents({\n\t\t\t\t\tfromCursor: params.fromCursor,\n\t\t\t\t\ttypes: params.types,\n\t\t\t\t\tcontractId: params.contractId,\n\t\t\t\t\tbatchSize: params.batchSize ?? 100,\n\t\t\t\t\temptyBackoffMs: params.emptyBackoffMs,\n\t\t\t\t\tmaxPages: params.maxPages,\n\t\t\t\t\tmaxEmptyPolls: params.maxEmptyPolls,\n\t\t\t\t\tsignal: params.signal,\n\t\t\t\t\tfetchEvents,\n\t\t\t\t});\n\t\t\t},\n\t\t},\n\t\tblocks: {\n\t\t\tevents(heightOrHash: number | string) {\n\t\t\t\treturn request<StreamsEventsListEnvelope>(\n\t\t\t\t\t`/v1/streams/blocks/${encodeURIComponent(String(heightOrHash))}/events`,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\treorgs: {\n\t\t\tlist(params: StreamsReorgsListParams) {\n\t\t\t\tconst searchParams = new URLSearchParams();\n\t\t\t\tappendSearchParam(searchParams, \"since\", params.since);\n\t\t\t\tappendSearchParam(searchParams, \"limit\", params.limit);\n\t\t\t\tconst query = searchParams.toString();\n\t\t\t\treturn request<StreamsReorgsListEnvelope>(\n\t\t\t\t\t`/v1/streams/reorgs${query ? `?${query}` : \"\"}`,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\tcanonical(height: number) {\n\t\t\treturn request<StreamsCanonicalBlock>(`/v1/streams/canonical/${height}`);\n\t\t},\n\t\ttip() {\n\t\t\treturn request<StreamsTip>(\"/v1/streams/tip\");\n\t\t},\n\t};\n}\n",
|
|
8
8
|
"import type { StreamsEvent } from \"./types.ts\";\n\nexport type FtTransferPayload = {\n\tasset_identifier: string;\n\tsender: string;\n\trecipient: string;\n\tamount: string;\n};\n\nexport type FtTransferEvent = StreamsEvent & {\n\tevent_type: \"ft_transfer\";\n\tpayload: FtTransferPayload;\n};\n\nexport type DecodedFtTransferPayload = {\n\tasset_identifier: string;\n\tcontract_id: string;\n\ttoken_name: string | null;\n\tsender: string;\n\trecipient: string;\n\tamount: string;\n};\n\nexport type DecodedFtTransfer = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"ft_transfer\";\n\tdecoded_payload: DecodedFtTransferPayload;\n\tsource_cursor: string;\n};\n\nfunction requireString(\n\tpayload: Record<string, unknown>,\n\tfield: keyof FtTransferPayload,\n): string {\n\tconst value = payload[field];\n\tif (typeof value !== \"string\" || value.length === 0) {\n\t\tthrow new Error(`ft_transfer payload missing ${field}`);\n\t}\n\treturn value;\n}\n\nfunction parseAssetIdentifier(assetIdentifier: string): {\n\tcontract_id: string;\n\ttoken_name: string | null;\n} {\n\tconst [contractId, tokenName] = assetIdentifier.split(\"::\");\n\tif (!contractId) {\n\t\tthrow new Error(\"ft_transfer payload has malformed asset_identifier\");\n\t}\n\treturn {\n\t\tcontract_id: contractId,\n\t\ttoken_name: tokenName && tokenName.length > 0 ? tokenName : null,\n\t};\n}\n\nexport function isFtTransfer(event: StreamsEvent): event is FtTransferEvent {\n\treturn event.event_type === \"ft_transfer\";\n}\n\nexport function decodeFtTransfer(event: StreamsEvent): DecodedFtTransfer {\n\tif (!isFtTransfer(event)) {\n\t\tthrow new Error(`Expected ft_transfer event, got ${event.event_type}`);\n\t}\n\n\tconst payload = event.payload;\n\tconst assetIdentifier = requireString(payload, \"asset_identifier\");\n\tconst sender = requireString(payload, \"sender\");\n\tconst recipient = requireString(payload, \"recipient\");\n\tconst amount = requireString(payload, \"amount\");\n\tif (!/^(0|[1-9]\\d*)$/.test(amount)) {\n\t\tthrow new Error(\"ft_transfer payload has malformed amount\");\n\t}\n\n\tconst { contract_id, token_name } = parseAssetIdentifier(assetIdentifier);\n\n\treturn {\n\t\tcursor: event.cursor,\n\t\tblock_height: event.block_height,\n\t\ttx_id: event.tx_id,\n\t\ttx_index: event.tx_index,\n\t\tevent_index: event.event_index,\n\t\tevent_type: event.event_type,\n\t\tdecoded_payload: {\n\t\t\tasset_identifier: assetIdentifier,\n\t\t\tcontract_id: event.contract_id ?? contract_id,\n\t\t\ttoken_name,\n\t\t\tsender,\n\t\t\trecipient,\n\t\t\tamount,\n\t\t},\n\t\tsource_cursor: event.cursor,\n\t};\n}\n",
|
|
9
9
|
"import type { StreamsEvent } from \"./types.ts\";\n\nexport type NftTransferPayload = {\n\tasset_identifier: string;\n\tsender: string;\n\trecipient: string;\n\tvalue: string | { hex: string };\n};\n\nexport type NftTransferEvent = StreamsEvent & {\n\tevent_type: \"nft_transfer\";\n\tpayload: NftTransferPayload;\n};\n\nexport type DecodedNftTransferPayload = {\n\tasset_identifier: string;\n\tcontract_id: string;\n\ttoken_name: string | null;\n\tsender: string;\n\trecipient: string;\n\tvalue: string;\n};\n\nexport type DecodedNftTransfer = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"nft_transfer\";\n\tdecoded_payload: DecodedNftTransferPayload;\n\tsource_cursor: string;\n};\n\nfunction requireString(\n\tpayload: Record<string, unknown>,\n\tfield: \"asset_identifier\" | \"sender\" | \"recipient\",\n): string {\n\tconst value = payload[field];\n\tif (typeof value !== \"string\" || value.length === 0) {\n\t\tthrow new Error(`nft_transfer payload missing ${field}`);\n\t}\n\treturn value;\n}\n\nfunction requireHexValue(payload: Record<string, unknown>): string {\n\t// Live streams emits the token id as a typed Clarity value at `value`\n\t// (e.g. `{UInt: 52}`) and the canonical hex at `raw_value`. Prefer raw_value\n\t// when available — mirrors the sbtc/bns decoder fix in indexer 1.3.7.\n\tconst rawValue = payload.raw_value;\n\tif (typeof rawValue === \"string\") {\n\t\tif (!/^0x[0-9a-fA-F]*$/.test(rawValue)) {\n\t\t\tthrow new Error(\"nft_transfer payload has malformed value\");\n\t\t}\n\t\treturn rawValue;\n\t}\n\n\tconst value = payload.value;\n\tconst hex =\n\t\ttypeof value === \"string\"\n\t\t\t? value\n\t\t\t: value &&\n\t\t\t\t\ttypeof value === \"object\" &&\n\t\t\t\t\ttypeof (value as { hex?: unknown }).hex === \"string\"\n\t\t\t\t? (value as { hex: string }).hex\n\t\t\t\t: null;\n\n\tif (!hex) {\n\t\tthrow new Error(\"nft_transfer payload missing value\");\n\t}\n\tif (!/^0x[0-9a-fA-F]*$/.test(hex)) {\n\t\tthrow new Error(\"nft_transfer payload has malformed value\");\n\t}\n\treturn hex;\n}\n\nfunction parseAssetIdentifier(assetIdentifier: string): {\n\tcontract_id: string;\n\ttoken_name: string | null;\n} {\n\tconst [contractId, tokenName] = assetIdentifier.split(\"::\");\n\tif (!contractId) {\n\t\tthrow new Error(\"nft_transfer payload has malformed asset_identifier\");\n\t}\n\treturn {\n\t\tcontract_id: contractId,\n\t\ttoken_name: tokenName && tokenName.length > 0 ? tokenName : null,\n\t};\n}\n\nexport function isNftTransfer(event: StreamsEvent): event is NftTransferEvent {\n\treturn event.event_type === \"nft_transfer\";\n}\n\nexport function decodeNftTransfer(event: StreamsEvent): DecodedNftTransfer {\n\tif (!isNftTransfer(event)) {\n\t\tthrow new Error(`Expected nft_transfer event, got ${event.event_type}`);\n\t}\n\n\tconst payload = event.payload;\n\tconst assetIdentifier = requireString(payload, \"asset_identifier\");\n\tconst sender = requireString(payload, \"sender\");\n\tconst recipient = requireString(payload, \"recipient\");\n\tconst value = requireHexValue(payload);\n\tconst { contract_id, token_name } = parseAssetIdentifier(assetIdentifier);\n\n\treturn {\n\t\tcursor: event.cursor,\n\t\tblock_height: event.block_height,\n\t\ttx_id: event.tx_id,\n\t\ttx_index: event.tx_index,\n\t\tevent_index: event.event_index,\n\t\tevent_type: event.event_type,\n\t\tdecoded_payload: {\n\t\t\tasset_identifier: assetIdentifier,\n\t\t\tcontract_id: event.contract_id ?? contract_id,\n\t\t\ttoken_name,\n\t\t\tsender,\n\t\t\trecipient,\n\t\t\tvalue,\n\t\t},\n\t\tsource_cursor: event.cursor,\n\t};\n}\n",
|
|
10
|
+
"import type { StreamsEvent } from \"./types.ts\";\n\n/** Superset of the columns the decoded_events table holds. Every decoded\n * event's `decoded_payload` is assignable to this, so the indexer's writer\n * can map columns generically instead of per-event-type. */\nexport type DecodedEventColumns = {\n\tcontract_id?: string | null;\n\tasset_identifier?: string | null;\n\tsender?: string | null;\n\trecipient?: string | null;\n\tamount?: string | null;\n\tvalue?: string | null;\n\tmemo?: string | null;\n\t/** JSONB overflow for non-flat types (e.g. print's decoded value). */\n\tpayload?: unknown;\n};\n\nexport function requireString(\n\tpayload: Record<string, unknown>,\n\tfield: string,\n\teventType: string,\n): string {\n\tconst value = payload[field];\n\tif (typeof value !== \"string\" || value.length === 0) {\n\t\tthrow new Error(`${eventType} payload missing ${field}`);\n\t}\n\treturn value;\n}\n\nexport function optionalString(value: unknown): string | null {\n\treturn typeof value === \"string\" && value.length > 0 ? value : null;\n}\n\nexport function requireAmount(\n\tpayload: Record<string, unknown>,\n\teventType: string,\n): string {\n\tconst amount = requireString(payload, \"amount\", eventType);\n\tif (!/^(0|[1-9]\\d*)$/.test(amount)) {\n\t\tthrow new Error(`${eventType} payload has malformed amount`);\n\t}\n\treturn amount;\n}\n\nexport function parseAssetIdentifier(\n\tassetIdentifier: string,\n\teventType: string,\n): { contract_id: string; token_name: string | null } {\n\tconst [contractId, tokenName] = assetIdentifier.split(\"::\");\n\tif (!contractId) {\n\t\tthrow new Error(`${eventType} payload has malformed asset_identifier`);\n\t}\n\treturn {\n\t\tcontract_id: contractId,\n\t\ttoken_name: tokenName && tokenName.length > 0 ? tokenName : null,\n\t};\n}\n\n/** NFT token id: live streams emits a typed Clarity value at `value` and the\n * canonical hex at `raw_value`; prefer raw_value when present. */\nexport function requireHexValue(\n\tpayload: Record<string, unknown>,\n\teventType: string,\n): string {\n\tconst rawValue = payload.raw_value;\n\tif (typeof rawValue === \"string\") {\n\t\tif (!/^0x[0-9a-fA-F]*$/.test(rawValue)) {\n\t\t\tthrow new Error(`${eventType} payload has malformed value`);\n\t\t}\n\t\treturn rawValue;\n\t}\n\n\tconst value = payload.value;\n\tconst hex =\n\t\ttypeof value === \"string\"\n\t\t\t? value\n\t\t\t: value &&\n\t\t\t\t\ttypeof value === \"object\" &&\n\t\t\t\t\ttypeof (value as { hex?: unknown }).hex === \"string\"\n\t\t\t\t? (value as { hex: string }).hex\n\t\t\t\t: null;\n\n\tif (!hex) {\n\t\tthrow new Error(`${eventType} payload missing value`);\n\t}\n\tif (!/^0x[0-9a-fA-F]*$/.test(hex)) {\n\t\tthrow new Error(`${eventType} payload has malformed value`);\n\t}\n\treturn hex;\n}\n\n/** Common envelope fields shared by every decoded event, lifted off the\n * source StreamsEvent. The decoder supplies event_type + decoded_payload. */\nexport function decodedRow<T extends string, P>(\n\tevent: StreamsEvent,\n\teventType: T,\n\tdecoded_payload: P,\n): {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: T;\n\tdecoded_payload: P;\n\tsource_cursor: string;\n} {\n\treturn {\n\t\tcursor: event.cursor,\n\t\tblock_height: event.block_height,\n\t\ttx_id: event.tx_id,\n\t\ttx_index: event.tx_index,\n\t\tevent_index: event.event_index,\n\t\tevent_type: eventType,\n\t\tdecoded_payload,\n\t\tsource_cursor: event.cursor,\n\t};\n}\n",
|
|
11
|
+
"import {\n\tdecodedRow,\n\toptionalString,\n\trequireAmount,\n\trequireString,\n} from \"./_payload.ts\";\nimport type { StreamsEvent } from \"./types.ts\";\n\nexport type DecodedStxTransferPayload = {\n\tsender: string;\n\trecipient: string;\n\tamount: string;\n\tmemo: string | null;\n};\n\nexport type DecodedStxTransfer = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"stx_transfer\";\n\tdecoded_payload: DecodedStxTransferPayload;\n\tsource_cursor: string;\n};\n\nexport type DecodedStxMintPayload = {\n\trecipient: string;\n\tamount: string;\n};\n\nexport type DecodedStxMint = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"stx_mint\";\n\tdecoded_payload: DecodedStxMintPayload;\n\tsource_cursor: string;\n};\n\nexport type DecodedStxBurnPayload = {\n\tsender: string;\n\tamount: string;\n};\n\nexport type DecodedStxBurn = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"stx_burn\";\n\tdecoded_payload: DecodedStxBurnPayload;\n\tsource_cursor: string;\n};\n\nexport function isStxTransfer(\n\tevent: StreamsEvent,\n): event is StreamsEvent & { event_type: \"stx_transfer\" } {\n\treturn event.event_type === \"stx_transfer\";\n}\n\nexport function decodeStxTransfer(event: StreamsEvent): DecodedStxTransfer {\n\tif (!isStxTransfer(event)) {\n\t\tthrow new Error(`Expected stx_transfer event, got ${event.event_type}`);\n\t}\n\tconst payload = event.payload;\n\treturn decodedRow(event, \"stx_transfer\", {\n\t\tsender: requireString(payload, \"sender\", \"stx_transfer\"),\n\t\trecipient: requireString(payload, \"recipient\", \"stx_transfer\"),\n\t\tamount: requireAmount(payload, \"stx_transfer\"),\n\t\tmemo: optionalString(payload.memo),\n\t});\n}\n\nexport function isStxMint(\n\tevent: StreamsEvent,\n): event is StreamsEvent & { event_type: \"stx_mint\" } {\n\treturn event.event_type === \"stx_mint\";\n}\n\nexport function decodeStxMint(event: StreamsEvent): DecodedStxMint {\n\tif (!isStxMint(event)) {\n\t\tthrow new Error(`Expected stx_mint event, got ${event.event_type}`);\n\t}\n\tconst payload = event.payload;\n\treturn decodedRow(event, \"stx_mint\", {\n\t\trecipient: requireString(payload, \"recipient\", \"stx_mint\"),\n\t\tamount: requireAmount(payload, \"stx_mint\"),\n\t});\n}\n\nexport function isStxBurn(\n\tevent: StreamsEvent,\n): event is StreamsEvent & { event_type: \"stx_burn\" } {\n\treturn event.event_type === \"stx_burn\";\n}\n\nexport function decodeStxBurn(event: StreamsEvent): DecodedStxBurn {\n\tif (!isStxBurn(event)) {\n\t\tthrow new Error(`Expected stx_burn event, got ${event.event_type}`);\n\t}\n\tconst payload = event.payload;\n\treturn decodedRow(event, \"stx_burn\", {\n\t\tsender: requireString(payload, \"sender\", \"stx_burn\"),\n\t\tamount: requireAmount(payload, \"stx_burn\"),\n\t});\n}\n",
|
|
12
|
+
"import {\n\tdecodedRow,\n\tparseAssetIdentifier,\n\trequireAmount,\n\trequireHexValue,\n\trequireString,\n} from \"./_payload.ts\";\nimport type { StreamsEvent } from \"./types.ts\";\n\nexport type DecodedFtMintPayload = {\n\tasset_identifier: string;\n\tcontract_id: string;\n\ttoken_name: string | null;\n\trecipient: string;\n\tamount: string;\n};\n\nexport type DecodedFtMint = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"ft_mint\";\n\tdecoded_payload: DecodedFtMintPayload;\n\tsource_cursor: string;\n};\n\nexport type DecodedFtBurnPayload = {\n\tasset_identifier: string;\n\tcontract_id: string;\n\ttoken_name: string | null;\n\tsender: string;\n\tamount: string;\n};\n\nexport type DecodedFtBurn = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"ft_burn\";\n\tdecoded_payload: DecodedFtBurnPayload;\n\tsource_cursor: string;\n};\n\nexport type DecodedNftMintPayload = {\n\tasset_identifier: string;\n\tcontract_id: string;\n\ttoken_name: string | null;\n\trecipient: string;\n\tvalue: string;\n};\n\nexport type DecodedNftMint = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"nft_mint\";\n\tdecoded_payload: DecodedNftMintPayload;\n\tsource_cursor: string;\n};\n\nexport type DecodedNftBurnPayload = {\n\tasset_identifier: string;\n\tcontract_id: string;\n\ttoken_name: string | null;\n\tsender: string;\n\tvalue: string;\n};\n\nexport type DecodedNftBurn = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"nft_burn\";\n\tdecoded_payload: DecodedNftBurnPayload;\n\tsource_cursor: string;\n};\n\nfunction assetFields(event: StreamsEvent, eventType: string) {\n\tconst assetIdentifier = requireString(\n\t\tevent.payload,\n\t\t\"asset_identifier\",\n\t\teventType,\n\t);\n\tconst { contract_id, token_name } = parseAssetIdentifier(\n\t\tassetIdentifier,\n\t\teventType,\n\t);\n\treturn {\n\t\tasset_identifier: assetIdentifier,\n\t\tcontract_id: event.contract_id ?? contract_id,\n\t\ttoken_name,\n\t};\n}\n\nexport function isFtMint(\n\tevent: StreamsEvent,\n): event is StreamsEvent & { event_type: \"ft_mint\" } {\n\treturn event.event_type === \"ft_mint\";\n}\n\nexport function decodeFtMint(event: StreamsEvent): DecodedFtMint {\n\tif (!isFtMint(event)) {\n\t\tthrow new Error(`Expected ft_mint event, got ${event.event_type}`);\n\t}\n\treturn decodedRow(event, \"ft_mint\", {\n\t\t...assetFields(event, \"ft_mint\"),\n\t\trecipient: requireString(event.payload, \"recipient\", \"ft_mint\"),\n\t\tamount: requireAmount(event.payload, \"ft_mint\"),\n\t});\n}\n\nexport function isFtBurn(\n\tevent: StreamsEvent,\n): event is StreamsEvent & { event_type: \"ft_burn\" } {\n\treturn event.event_type === \"ft_burn\";\n}\n\nexport function decodeFtBurn(event: StreamsEvent): DecodedFtBurn {\n\tif (!isFtBurn(event)) {\n\t\tthrow new Error(`Expected ft_burn event, got ${event.event_type}`);\n\t}\n\treturn decodedRow(event, \"ft_burn\", {\n\t\t...assetFields(event, \"ft_burn\"),\n\t\tsender: requireString(event.payload, \"sender\", \"ft_burn\"),\n\t\tamount: requireAmount(event.payload, \"ft_burn\"),\n\t});\n}\n\nexport function isNftMint(\n\tevent: StreamsEvent,\n): event is StreamsEvent & { event_type: \"nft_mint\" } {\n\treturn event.event_type === \"nft_mint\";\n}\n\nexport function decodeNftMint(event: StreamsEvent): DecodedNftMint {\n\tif (!isNftMint(event)) {\n\t\tthrow new Error(`Expected nft_mint event, got ${event.event_type}`);\n\t}\n\treturn decodedRow(event, \"nft_mint\", {\n\t\t...assetFields(event, \"nft_mint\"),\n\t\trecipient: requireString(event.payload, \"recipient\", \"nft_mint\"),\n\t\tvalue: requireHexValue(event.payload, \"nft_mint\"),\n\t});\n}\n\nexport function isNftBurn(\n\tevent: StreamsEvent,\n): event is StreamsEvent & { event_type: \"nft_burn\" } {\n\treturn event.event_type === \"nft_burn\";\n}\n\nexport function decodeNftBurn(event: StreamsEvent): DecodedNftBurn {\n\tif (!isNftBurn(event)) {\n\t\tthrow new Error(`Expected nft_burn event, got ${event.event_type}`);\n\t}\n\treturn decodedRow(event, \"nft_burn\", {\n\t\t...assetFields(event, \"nft_burn\"),\n\t\tsender: requireString(event.payload, \"sender\", \"nft_burn\"),\n\t\tvalue: requireHexValue(event.payload, \"nft_burn\"),\n\t});\n}\n",
|
|
13
|
+
"import { cvToValue, deserializeCV } from \"@secondlayer/stacks/clarity\";\nimport { decodedRow, optionalString } from \"./_payload.ts\";\nimport type { StreamsEvent } from \"./types.ts\";\n\n/** Decoded form of a Clarity `print` event:\n * - `topic`: the print topic, when the contract emits a `{ topic, ... }` tuple\n * - `value`: the Clarity value decoded to JSON (uints as strings, buffers as\n * `0x…` hex, tuples as objects)\n * - `raw_value`: the canonical serialized hex, for byte-exact consumers */\nexport type DecodedPrintValue = {\n\ttopic: string | null;\n\tvalue: unknown;\n\traw_value: string | null;\n};\n\nexport type DecodedPrintPayload = {\n\tcontract_id: string | null;\n\tpayload: DecodedPrintValue;\n};\n\nexport type DecodedPrint = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"print\";\n\tdecoded_payload: DecodedPrintPayload;\n\tsource_cursor: string;\n};\n\nfunction printValueHex(payload: Record<string, unknown>): string | null {\n\tif (typeof payload.raw_value === \"string\") return payload.raw_value;\n\tconst value = payload.value;\n\tif (typeof value === \"string\" && value.startsWith(\"0x\")) return value;\n\tif (\n\t\tvalue &&\n\t\ttypeof value === \"object\" &&\n\t\ttypeof (value as { hex?: unknown }).hex === \"string\"\n\t) {\n\t\treturn (value as { hex: string }).hex;\n\t}\n\treturn null;\n}\n\n/** cvToValue yields bigint for Clarity (u)ints; convert recursively to strings\n * so the decoded value is JSON-serializable for the jsonb column / API. */\nfunction toJsonSafe(value: unknown): unknown {\n\tif (typeof value === \"bigint\") return value.toString();\n\tif (Array.isArray(value)) return value.map(toJsonSafe);\n\tif (value && typeof value === \"object\") {\n\t\tconst out: Record<string, unknown> = {};\n\t\tfor (const [key, val] of Object.entries(value)) {\n\t\t\tout[key] = toJsonSafe(val);\n\t\t}\n\t\treturn out;\n\t}\n\treturn value;\n}\n\nexport function isPrint(\n\tevent: StreamsEvent,\n): event is StreamsEvent & { event_type: \"print\" } {\n\treturn event.event_type === \"print\";\n}\n\nexport function decodePrint(event: StreamsEvent): DecodedPrint {\n\tif (!isPrint(event)) {\n\t\tthrow new Error(`Expected print event, got ${event.event_type}`);\n\t}\n\tconst payload = event.payload;\n\tconst topic = optionalString(payload.topic);\n\tconst rawValue = printValueHex(payload);\n\n\tlet value: unknown;\n\tif (rawValue) {\n\t\ttry {\n\t\t\tconst hex = rawValue.startsWith(\"0x\") ? rawValue.slice(2) : rawValue;\n\t\t\tvalue = toJsonSafe(cvToValue(deserializeCV(hex)));\n\t\t} catch {\n\t\t\tvalue = toJsonSafe(payload.value ?? null);\n\t\t}\n\t} else {\n\t\tvalue = toJsonSafe(payload.value ?? null);\n\t}\n\n\treturn decodedRow(event, \"print\", {\n\t\tcontract_id: event.contract_id ?? optionalString(payload.contract_id),\n\t\tpayload: { topic, value, raw_value: rawValue },\n\t});\n}\n",
|
|
10
14
|
"export const STREAMS_EVENT_TYPES = [\n\t\"stx_transfer\",\n\t\"stx_mint\",\n\t\"stx_burn\",\n\t\"stx_lock\",\n\t\"ft_transfer\",\n\t\"ft_mint\",\n\t\"ft_burn\",\n\t\"nft_transfer\",\n\t\"nft_mint\",\n\t\"nft_burn\",\n\t\"print\",\n] as const;\n\nexport type StreamsEventType = (typeof STREAMS_EVENT_TYPES)[number];\n\nexport type StreamsEventPayload = Record<string, unknown>;\n\nexport type StreamsEvent = {\n\tcursor: string;\n\tblock_height: number;\n\tblock_hash: string;\n\tburn_block_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: StreamsEventType;\n\tcontract_id: string | null;\n\tpayload: StreamsEventPayload;\n\tts: string;\n};\n\nexport type StreamsTip = {\n\tblock_height: number;\n\tblock_hash: string;\n\tburn_block_height: number;\n\tlag_seconds: number;\n};\n\nexport type StreamsCanonicalBlock = {\n\tblock_height: number;\n\tblock_hash: string;\n\tburn_block_height: number;\n\tburn_block_hash: string | null;\n\tis_canonical: true;\n};\n\nexport type StreamsReorg = {\n\tdetected_at: string;\n\tfork_point_height: number;\n\torphaned_range: { from: string; to: string };\n\tnew_canonical_tip: string;\n};\n\nexport type StreamsEventsEnvelope = {\n\tevents: StreamsEvent[];\n\tnext_cursor: string | null;\n\ttip: StreamsTip;\n\treorgs: StreamsReorg[];\n};\n\nexport type StreamsEventsListEnvelope = Omit<\n\tStreamsEventsEnvelope,\n\t\"next_cursor\"\n>;\n\nexport type StreamsReorgsListParams = {\n\tsince: string;\n\tlimit?: number;\n};\n\nexport type StreamsReorgsListEnvelope = {\n\treorgs: StreamsReorg[];\n\tnext_since: string | null;\n};\n\nexport type StreamsEventsListParams = {\n\tcursor?: string | null;\n\tfromHeight?: number;\n\ttoHeight?: number;\n\ttypes?: readonly StreamsEventType[];\n\tcontractId?: string;\n\tlimit?: number;\n};\n\nexport type StreamsEventsStreamParams = {\n\tfromCursor?: string | null;\n\ttypes?: readonly StreamsEventType[];\n\tcontractId?: string;\n\tbatchSize?: number;\n\temptyBackoffMs?: number;\n\tmaxPages?: number;\n\tmaxEmptyPolls?: number;\n\tsignal?: AbortSignal;\n};\n\nexport type StreamsEventsConsumeParams = {\n\tfromCursor?: string | null;\n\tmode?: \"tail\" | \"bounded\";\n\ttypes?: readonly StreamsEventType[];\n\tcontractId?: string;\n\tbatchSize?: number;\n\tonBatch: (\n\t\tevents: StreamsEvent[],\n\t\tenvelope: StreamsEventsEnvelope,\n\t) => Promise<string | null | undefined> | string | null | undefined;\n\temptyBackoffMs?: number;\n\tmaxPages?: number;\n\tmaxEmptyPolls?: number;\n\tsignal?: AbortSignal;\n};\n\nexport type StreamsEventsConsumeResult = {\n\tcursor: string | null;\n\tpages: number;\n\temptyPolls: number;\n};\n\nexport type FetchLike = (\n\tinput: string | URL | Request,\n\tinit?: RequestInit,\n) => Promise<Response>;\n\nexport type StreamsClient = {\n\tevents: {\n\t\tlist(params?: StreamsEventsListParams): Promise<StreamsEventsEnvelope>;\n\t\tbyTxId(txId: string): Promise<StreamsEventsListEnvelope>;\n\t\t/**\n\t\t * Pull pages from Streams and call `onBatch` after each page.\n\t\t *\n\t\t * Use `consume` for indexers and ETL jobs that own checkpointing. Return\n\t\t * the checkpoint cursor from `onBatch`. Default `mode: \"tail\"` keeps\n\t\t * polling when caught up; `mode: \"bounded\"` exits on the first empty page.\n\t\t * The consumer also exits when `maxPages`, `maxEmptyPolls`, or `signal`\n\t\t * stops it.\n\t\t */\n\t\tconsume(\n\t\t\tparams: StreamsEventsConsumeParams,\n\t\t): Promise<StreamsEventsConsumeResult>;\n\t\t/**\n\t\t * Follow Streams as an async iterator.\n\t\t *\n\t\t * Use `stream` for live processors and watch-style apps. It tails\n\t\t * indefinitely by default and stops when its `AbortSignal`, `maxPages`, or\n\t\t * `maxEmptyPolls` stops it.\n\t\t */\n\t\tstream(params?: StreamsEventsStreamParams): AsyncIterable<StreamsEvent>;\n\t};\n\tblocks: {\n\t\tevents(heightOrHash: number | string): Promise<StreamsEventsListEnvelope>;\n\t};\n\treorgs: {\n\t\tlist(params: StreamsReorgsListParams): Promise<StreamsReorgsListEnvelope>;\n\t};\n\tcanonical(height: number): Promise<StreamsCanonicalBlock>;\n\ttip(): Promise<StreamsTip>;\n};\n"
|
|
11
15
|
],
|
|
12
|
-
"mappings": "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",
|
|
13
|
-
"debugId": "
|
|
16
|
+
"mappings": "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",
|
|
17
|
+
"debugId": "E980A8AB321591D864756E2164756E21",
|
|
14
18
|
"names": []
|
|
15
19
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@secondlayer/sdk",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.2.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -36,7 +36,8 @@
|
|
|
36
36
|
"prepublishOnly": "bun run build"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@secondlayer/shared": "^6.
|
|
39
|
+
"@secondlayer/shared": "^6.8.0",
|
|
40
|
+
"@secondlayer/stacks": "^2.2.1",
|
|
40
41
|
"@secondlayer/subgraphs": "^3.2.1"
|
|
41
42
|
},
|
|
42
43
|
"devDependencies": {
|