@arcadiasystems/morse-sdk 0.1.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.
Files changed (156) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/LICENSE +21 -0
  3. package/README.md +404 -0
  4. package/dist/clients.d.ts +12 -0
  5. package/dist/clients.d.ts.map +1 -0
  6. package/dist/clients.js +6 -0
  7. package/dist/clients.js.map +1 -0
  8. package/dist/codecs.d.ts +45 -0
  9. package/dist/codecs.d.ts.map +1 -0
  10. package/dist/codecs.js +132 -0
  11. package/dist/codecs.js.map +1 -0
  12. package/dist/compatibility.d.ts +22 -0
  13. package/dist/compatibility.d.ts.map +1 -0
  14. package/dist/compatibility.js +22 -0
  15. package/dist/compatibility.js.map +1 -0
  16. package/dist/config.d.ts +92 -0
  17. package/dist/config.d.ts.map +1 -0
  18. package/dist/config.js +85 -0
  19. package/dist/config.js.map +1 -0
  20. package/dist/errors.d.ts +101 -0
  21. package/dist/errors.d.ts.map +1 -0
  22. package/dist/errors.js +214 -0
  23. package/dist/errors.js.map +1 -0
  24. package/dist/index.d.ts +15 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +14 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/ops/cap.d.ts +79 -0
  29. package/dist/ops/cap.d.ts.map +1 -0
  30. package/dist/ops/cap.js +104 -0
  31. package/dist/ops/cap.js.map +1 -0
  32. package/dist/ops/collection.d.ts +50 -0
  33. package/dist/ops/collection.d.ts.map +1 -0
  34. package/dist/ops/collection.js +55 -0
  35. package/dist/ops/collection.js.map +1 -0
  36. package/dist/ops/entry-from-bytes.d.ts +129 -0
  37. package/dist/ops/entry-from-bytes.d.ts.map +1 -0
  38. package/dist/ops/entry-from-bytes.js +137 -0
  39. package/dist/ops/entry-from-bytes.js.map +1 -0
  40. package/dist/ops/entry.d.ts +173 -0
  41. package/dist/ops/entry.d.ts.map +1 -0
  42. package/dist/ops/entry.js +235 -0
  43. package/dist/ops/entry.js.map +1 -0
  44. package/dist/ops/index.d.ts +9 -0
  45. package/dist/ops/index.d.ts.map +1 -0
  46. package/dist/ops/index.js +9 -0
  47. package/dist/ops/index.js.map +1 -0
  48. package/dist/ops/internal.d.ts +21 -0
  49. package/dist/ops/internal.d.ts.map +1 -0
  50. package/dist/ops/internal.js +42 -0
  51. package/dist/ops/internal.js.map +1 -0
  52. package/dist/ops/publication.d.ts +74 -0
  53. package/dist/ops/publication.d.ts.map +1 -0
  54. package/dist/ops/publication.js +123 -0
  55. package/dist/ops/publication.js.map +1 -0
  56. package/dist/ptb/cap.d.ts +36 -0
  57. package/dist/ptb/cap.d.ts.map +1 -0
  58. package/dist/ptb/cap.js +44 -0
  59. package/dist/ptb/cap.js.map +1 -0
  60. package/dist/ptb/collection.d.ts +27 -0
  61. package/dist/ptb/collection.d.ts.map +1 -0
  62. package/dist/ptb/collection.js +33 -0
  63. package/dist/ptb/collection.js.map +1 -0
  64. package/dist/ptb/entry.d.ts +104 -0
  65. package/dist/ptb/entry.d.ts.map +1 -0
  66. package/dist/ptb/entry.js +155 -0
  67. package/dist/ptb/entry.js.map +1 -0
  68. package/dist/ptb/index.d.ts +9 -0
  69. package/dist/ptb/index.d.ts.map +1 -0
  70. package/dist/ptb/index.js +9 -0
  71. package/dist/ptb/index.js.map +1 -0
  72. package/dist/ptb/internal.d.ts +11 -0
  73. package/dist/ptb/internal.d.ts.map +1 -0
  74. package/dist/ptb/internal.js +12 -0
  75. package/dist/ptb/internal.js.map +1 -0
  76. package/dist/ptb/publication.d.ts +51 -0
  77. package/dist/ptb/publication.d.ts.map +1 -0
  78. package/dist/ptb/publication.js +61 -0
  79. package/dist/ptb/publication.js.map +1 -0
  80. package/dist/read/entry-bcs.d.ts +47 -0
  81. package/dist/read/entry-bcs.d.ts.map +1 -0
  82. package/dist/read/entry-bcs.js +36 -0
  83. package/dist/read/entry-bcs.js.map +1 -0
  84. package/dist/read/index.d.ts +5 -0
  85. package/dist/read/index.d.ts.map +1 -0
  86. package/dist/read/index.js +5 -0
  87. package/dist/read/index.js.map +1 -0
  88. package/dist/read/reader.d.ts +148 -0
  89. package/dist/read/reader.d.ts.map +1 -0
  90. package/dist/read/reader.js +403 -0
  91. package/dist/read/reader.js.map +1 -0
  92. package/dist/seal/adapter.d.ts +56 -0
  93. package/dist/seal/adapter.d.ts.map +1 -0
  94. package/dist/seal/adapter.js +7 -0
  95. package/dist/seal/adapter.js.map +1 -0
  96. package/dist/seal/default-adapter.d.ts +90 -0
  97. package/dist/seal/default-adapter.d.ts.map +1 -0
  98. package/dist/seal/default-adapter.js +187 -0
  99. package/dist/seal/default-adapter.js.map +1 -0
  100. package/dist/seal/identity.d.ts +31 -0
  101. package/dist/seal/identity.d.ts.map +1 -0
  102. package/dist/seal/identity.js +79 -0
  103. package/dist/seal/identity.js.map +1 -0
  104. package/dist/seal/index.d.ts +8 -0
  105. package/dist/seal/index.d.ts.map +1 -0
  106. package/dist/seal/index.js +7 -0
  107. package/dist/seal/index.js.map +1 -0
  108. package/dist/types.d.ts +160 -0
  109. package/dist/types.d.ts.map +1 -0
  110. package/dist/types.js +33 -0
  111. package/dist/types.js.map +1 -0
  112. package/dist/wallets/adapter.d.ts +34 -0
  113. package/dist/wallets/adapter.d.ts.map +1 -0
  114. package/dist/wallets/adapter.js +6 -0
  115. package/dist/wallets/adapter.js.map +1 -0
  116. package/dist/wallets/index.d.ts +7 -0
  117. package/dist/wallets/index.d.ts.map +1 -0
  118. package/dist/wallets/index.js +6 -0
  119. package/dist/wallets/index.js.map +1 -0
  120. package/dist/wallets/keypair-adapter.d.ts +31 -0
  121. package/dist/wallets/keypair-adapter.d.ts.map +1 -0
  122. package/dist/wallets/keypair-adapter.js +210 -0
  123. package/dist/wallets/keypair-adapter.js.map +1 -0
  124. package/dist/wallets/wallet-standard-signer.d.ts +118 -0
  125. package/dist/wallets/wallet-standard-signer.d.ts.map +1 -0
  126. package/dist/wallets/wallet-standard-signer.js +207 -0
  127. package/dist/wallets/wallet-standard-signer.js.map +1 -0
  128. package/dist/walrus/adapter.d.ts +91 -0
  129. package/dist/walrus/adapter.d.ts.map +1 -0
  130. package/dist/walrus/adapter.js +11 -0
  131. package/dist/walrus/adapter.js.map +1 -0
  132. package/dist/walrus/default-adapter.d.ts +104 -0
  133. package/dist/walrus/default-adapter.d.ts.map +1 -0
  134. package/dist/walrus/default-adapter.js +146 -0
  135. package/dist/walrus/default-adapter.js.map +1 -0
  136. package/dist/walrus/default-read-adapter.d.ts +89 -0
  137. package/dist/walrus/default-read-adapter.d.ts.map +1 -0
  138. package/dist/walrus/default-read-adapter.js +81 -0
  139. package/dist/walrus/default-read-adapter.js.map +1 -0
  140. package/dist/walrus/http-aggregator-read-adapter.d.ts +107 -0
  141. package/dist/walrus/http-aggregator-read-adapter.d.ts.map +1 -0
  142. package/dist/walrus/http-aggregator-read-adapter.js +174 -0
  143. package/dist/walrus/http-aggregator-read-adapter.js.map +1 -0
  144. package/dist/walrus/http-publisher-write-adapter.d.ts +97 -0
  145. package/dist/walrus/http-publisher-write-adapter.d.ts.map +1 -0
  146. package/dist/walrus/http-publisher-write-adapter.js +249 -0
  147. package/dist/walrus/http-publisher-write-adapter.js.map +1 -0
  148. package/dist/walrus/index.d.ts +11 -0
  149. package/dist/walrus/index.d.ts.map +1 -0
  150. package/dist/walrus/index.js +11 -0
  151. package/dist/walrus/index.js.map +1 -0
  152. package/dist/walrus/quilt-patch-id.d.ts +34 -0
  153. package/dist/walrus/quilt-patch-id.d.ts.map +1 -0
  154. package/dist/walrus/quilt-patch-id.js +103 -0
  155. package/dist/walrus/quilt-patch-id.js.map +1 -0
  156. package/package.json +72 -0
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Public barrel for the read layer.
3
+ */
4
+ export { type EntryListPage, type ListEntriesOptions, type ListPublicationsOptions, type ListPublisherCapsOptions, type OwnedPublication, type PublicationListPage, type PublicationReader, type PublisherCapListPage, RpcPublicationReader, type ScanEntriesOptions, } from "./reader.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/read/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACN,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,oBAAoB,EACpB,KAAK,kBAAkB,GACvB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Public barrel for the read layer.
3
+ */
4
+ export { RpcPublicationReader, } from "./reader.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/read/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EASN,oBAAoB,GAEpB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,148 @@
1
+ /**
2
+ * Read layer for publications: a swappable interface plus an RPC-backed
3
+ * implementation. Future indexer implementations satisfy the same interface.
4
+ */
5
+ import type { ObjectReader } from "../clients.js";
6
+ import type { Entry, OwnerCapId, PackageId, Publication, PublicationId, PublisherCap, PublisherCapId, Revision, SuiAddress } from "../types.js";
7
+ /** Lightweight handle returned by `listPublicationsOwnedBy`. */
8
+ export interface OwnedPublication {
9
+ readonly ownerCapId: OwnerCapId;
10
+ readonly publicationId: PublicationId;
11
+ }
12
+ /** Result of a single page of `listPublicationsOwnedBy`. */
13
+ export interface PublicationListPage {
14
+ readonly results: readonly OwnedPublication[];
15
+ readonly nextCursor: string | null;
16
+ }
17
+ /** Options for `listPublicationsOwnedBy`. */
18
+ export interface ListPublicationsOptions {
19
+ readonly limit?: number;
20
+ readonly cursor?: string;
21
+ readonly signal?: AbortSignal;
22
+ }
23
+ /** Result of a single page of `listPublisherCapsOwnedBy`. */
24
+ export interface PublisherCapListPage {
25
+ readonly results: readonly PublisherCap[];
26
+ readonly nextCursor: string | null;
27
+ }
28
+ /** Options for `listPublisherCapsOwnedBy`. */
29
+ export interface ListPublisherCapsOptions {
30
+ readonly limit?: number;
31
+ readonly cursor?: string;
32
+ readonly signal?: AbortSignal;
33
+ }
34
+ /** Result of a single page of `listEntries`. */
35
+ export interface EntryListPage {
36
+ readonly results: readonly Entry[];
37
+ readonly nextCursor: string | null;
38
+ }
39
+ /**
40
+ * Options for `listEntries`. Order is the dynamic-field object-store order, not
41
+ * insertion order; sort by `entry.id` for chronological order. By default
42
+ * `limit` is `DEFAULT_PAGE_LIMIT` and the cursor is opaque to consumers.
43
+ */
44
+ export interface ListEntriesOptions {
45
+ readonly limit?: number;
46
+ readonly cursor?: string;
47
+ readonly signal?: AbortSignal;
48
+ }
49
+ /** Options for `scanEntries`. `pageSize` controls the per-RPC page size. */
50
+ export interface ScanEntriesOptions {
51
+ readonly pageSize?: number;
52
+ readonly signal?: AbortSignal;
53
+ }
54
+ /**
55
+ * Read-only access to the publication domain: publications and the
56
+ * PublisherCaps that grant write access to them.
57
+ */
58
+ export interface PublicationReader {
59
+ /**
60
+ * Fetch a publication by ID.
61
+ * @throws {NotFoundError} If no object exists at the given ID.
62
+ * @throws {ValidationError} If the on-chain JSON does not match the expected shape.
63
+ * @throws {TransportError} On RPC failure.
64
+ */
65
+ getPublication(id: PublicationId, signal?: AbortSignal): Promise<Publication>;
66
+ /**
67
+ * Page through publications owned (via OwnerCap) by an address.
68
+ * @throws {TransportError} On RPC failure.
69
+ */
70
+ listPublicationsOwnedBy(address: SuiAddress, options?: ListPublicationsOptions): Promise<PublicationListPage>;
71
+ /**
72
+ * Fetch a PublisherCap by ID.
73
+ * @throws {NotFoundError} If no object exists at the given ID.
74
+ * @throws {ValidationError} If the on-chain JSON does not match the expected shape.
75
+ * @throws {TransportError} On RPC failure.
76
+ */
77
+ getPublisherCap(id: PublisherCapId, signal?: AbortSignal): Promise<PublisherCap>;
78
+ /**
79
+ * Page through PublisherCaps owned by an address.
80
+ * @throws {TransportError} On RPC failure.
81
+ */
82
+ listPublisherCapsOwnedBy(address: SuiAddress, options?: ListPublisherCapsOptions): Promise<PublisherCapListPage>;
83
+ /**
84
+ * Fetch a single entry by collection name and entry id.
85
+ * @throws {NotFoundError} If the collection or entry does not exist.
86
+ * @throws {ValidationError} If the on-chain bytes do not match the BCS schema.
87
+ * @throws {TransportError} On RPC failure.
88
+ */
89
+ getEntry(publicationId: PublicationId, collectionName: string, entryId: number, signal?: AbortSignal): Promise<Entry>;
90
+ /**
91
+ * Fetch a single revision by collection name, entry id, and revision id.
92
+ * @throws {NotFoundError} If the collection, entry, or revision does not exist.
93
+ * @throws {ValidationError} If the on-chain bytes do not match the BCS schema.
94
+ * @throws {TransportError} On RPC failure.
95
+ */
96
+ getRevision(publicationId: PublicationId, collectionName: string, entryId: number, revisionId: number, signal?: AbortSignal): Promise<Revision>;
97
+ /**
98
+ * Page through entries in a collection. See `ListEntriesOptions` for
99
+ * ordering and pagination semantics.
100
+ *
101
+ * @throws {NotFoundError} If the collection does not exist.
102
+ * @throws {ValidationError} If the on-chain bytes do not match the BCS schema.
103
+ * @throws {TransportError} On RPC failure.
104
+ */
105
+ listEntries(publicationId: PublicationId, collectionName: string, options?: ListEntriesOptions): Promise<EntryListPage>;
106
+ /**
107
+ * Iterate every entry in a collection. Auto-paginates `listEntries` until
108
+ * the cursor is exhausted; consumers can `for await` and break early. Same
109
+ * ordering caveat as `listEntries` (object-store, not chronological).
110
+ *
111
+ * @throws {NotFoundError} If the collection does not exist.
112
+ * @throws {ValidationError} If the on-chain bytes do not match the BCS schema.
113
+ * @throws {TransportError} On RPC failure.
114
+ */
115
+ scanEntries(publicationId: PublicationId, collectionName: string, options?: ScanEntriesOptions): AsyncIterable<Entry>;
116
+ }
117
+ /** RPC-backed `PublicationReader` using a Sui client. */
118
+ export declare class RpcPublicationReader implements PublicationReader {
119
+ private readonly client;
120
+ private readonly originalPackageId;
121
+ /**
122
+ * @param originalPackageId The canonical (`original-id`) package address.
123
+ * Required by Sui type filters, which always use the original-id form
124
+ * regardless of the package's current upgrade version.
125
+ */
126
+ constructor(client: ObjectReader, originalPackageId: PackageId);
127
+ /**
128
+ * Build a reader from a morse package config (typically the value returned
129
+ * by `morseConfig({network})`). Picks `originalPackageId ?? packageId`
130
+ * internally; passing the post-upgrade `packageId` to the constructor
131
+ * directly would silently empty type-filtered list results.
132
+ */
133
+ static fromMorseConfig(config: {
134
+ packageId: PackageId;
135
+ originalPackageId?: PackageId;
136
+ }, client: ObjectReader): RpcPublicationReader;
137
+ getPublication(id: PublicationId, signal?: AbortSignal): Promise<Publication>;
138
+ listPublicationsOwnedBy(address: SuiAddress, options?: ListPublicationsOptions): Promise<PublicationListPage>;
139
+ getPublisherCap(id: PublisherCapId, signal?: AbortSignal): Promise<PublisherCap>;
140
+ listPublisherCapsOwnedBy(address: SuiAddress, options?: ListPublisherCapsOptions): Promise<PublisherCapListPage>;
141
+ getEntry(publicationId: PublicationId, collectionName: string, entryId: number, signal?: AbortSignal): Promise<Entry>;
142
+ getRevision(publicationId: PublicationId, collectionName: string, entryId: number, revisionId: number, signal?: AbortSignal): Promise<Revision>;
143
+ listEntries(publicationId: PublicationId, collectionName: string, options?: ListEntriesOptions): Promise<EntryListPage>;
144
+ scanEntries(publicationId: PublicationId, collectionName: string, options?: ScanEntriesOptions): AsyncIterable<Entry>;
145
+ private entriesTableId;
146
+ private callClient;
147
+ }
148
+ //# sourceMappingURL=reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reader.d.ts","sourceRoot":"","sources":["../../src/read/reader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,403 @@
1
+ /**
2
+ * Read layer for publications: a swappable interface plus an RPC-backed
3
+ * implementation. Future indexer implementations satisfy the same interface.
4
+ */
5
+ import { accessPolicyFromU8, storageModeFromU8, toBlobObjectId, toOwnerCapId, toPublicationId, toPublisherCapId, toQuiltPatchId, toSuiAddress, toSuiObjectId, } from "../codecs.js";
6
+ import { NotFoundError, TransportError, ValidationError } from "../errors.js";
7
+ import { EntryBcs, EntryIdBcs } from "./entry-bcs.js";
8
+ const DEFAULT_PAGE_LIMIT = 50;
9
+ /** RPC-backed `PublicationReader` using a Sui client. */
10
+ export class RpcPublicationReader {
11
+ client;
12
+ originalPackageId;
13
+ /**
14
+ * @param originalPackageId The canonical (`original-id`) package address.
15
+ * Required by Sui type filters, which always use the original-id form
16
+ * regardless of the package's current upgrade version.
17
+ */
18
+ constructor(client, originalPackageId) {
19
+ this.client = client;
20
+ this.originalPackageId = originalPackageId;
21
+ }
22
+ /**
23
+ * Build a reader from a morse package config (typically the value returned
24
+ * by `morseConfig({network})`). Picks `originalPackageId ?? packageId`
25
+ * internally; passing the post-upgrade `packageId` to the constructor
26
+ * directly would silently empty type-filtered list results.
27
+ */
28
+ static fromMorseConfig(config, client) {
29
+ return new RpcPublicationReader(client, config.originalPackageId ?? config.packageId);
30
+ }
31
+ async getPublication(id, signal) {
32
+ let response;
33
+ try {
34
+ response = await this.callClient("getObject", () => this.client.getObject({
35
+ objectId: id,
36
+ include: { json: true },
37
+ ...(signal === undefined ? {} : { signal }),
38
+ }));
39
+ }
40
+ catch (error) {
41
+ if (error instanceof TransportError &&
42
+ isObjectNotFoundError(error.cause, id)) {
43
+ throw new NotFoundError("publication", id, { cause: error.cause });
44
+ }
45
+ throw error;
46
+ }
47
+ const object = response.object;
48
+ if (!object) {
49
+ throw new NotFoundError("publication", id);
50
+ }
51
+ return parsePublication(object);
52
+ }
53
+ async listPublicationsOwnedBy(address, options = {}) {
54
+ const { limit = DEFAULT_PAGE_LIMIT, cursor, signal } = options;
55
+ const ownerCapType = `${this.originalPackageId}::publication::OwnerCap`;
56
+ const response = await this.callClient("listOwnedObjects", () => this.client.listOwnedObjects({
57
+ owner: address,
58
+ type: ownerCapType,
59
+ limit,
60
+ cursor: cursor ?? null,
61
+ include: { json: true },
62
+ ...(signal === undefined ? {} : { signal }),
63
+ }));
64
+ const results = response.objects.map((object) => parseOwnedPublication(object));
65
+ return { results, nextCursor: response.cursor };
66
+ }
67
+ async getPublisherCap(id, signal) {
68
+ let response;
69
+ try {
70
+ response = await this.callClient("getObject", () => this.client.getObject({
71
+ objectId: id,
72
+ include: { json: true },
73
+ ...(signal === undefined ? {} : { signal }),
74
+ }));
75
+ }
76
+ catch (error) {
77
+ if (error instanceof TransportError &&
78
+ isObjectNotFoundError(error.cause, id)) {
79
+ throw new NotFoundError("publisher-cap", id, { cause: error.cause });
80
+ }
81
+ throw error;
82
+ }
83
+ const object = response.object;
84
+ if (!object) {
85
+ throw new NotFoundError("publisher-cap", id);
86
+ }
87
+ return parsePublisherCap(object);
88
+ }
89
+ async listPublisherCapsOwnedBy(address, options = {}) {
90
+ const { limit = DEFAULT_PAGE_LIMIT, cursor, signal } = options;
91
+ const publisherCapType = `${this.originalPackageId}::publication::PublisherCap`;
92
+ const response = await this.callClient("listOwnedObjects", () => this.client.listOwnedObjects({
93
+ owner: address,
94
+ type: publisherCapType,
95
+ limit,
96
+ cursor: cursor ?? null,
97
+ include: { json: true },
98
+ ...(signal === undefined ? {} : { signal }),
99
+ }));
100
+ const results = response.objects.map((object) => parsePublisherCap(object));
101
+ return { results, nextCursor: response.cursor };
102
+ }
103
+ async getEntry(publicationId, collectionName, entryId, signal) {
104
+ const tableId = await this.entriesTableId(publicationId, collectionName, signal);
105
+ const nameBcs = EntryIdBcs.serialize(entryId).toBytes();
106
+ let response;
107
+ try {
108
+ response = await this.callClient("getDynamicField", () => this.client.getDynamicField({
109
+ parentId: tableId,
110
+ name: { type: "u64", bcs: nameBcs },
111
+ ...(signal === undefined ? {} : { signal }),
112
+ }));
113
+ }
114
+ catch (error) {
115
+ if (error instanceof TransportError &&
116
+ isDynamicFieldNotFoundError(error.cause)) {
117
+ throw new NotFoundError("entry", `${collectionName}:${entryId}`, {
118
+ cause: error.cause,
119
+ });
120
+ }
121
+ throw error;
122
+ }
123
+ return parseEntry(response.dynamicField.value.bcs, entryId);
124
+ }
125
+ async getRevision(publicationId, collectionName, entryId, revisionId, signal) {
126
+ const entry = await this.getEntry(publicationId, collectionName, entryId, signal);
127
+ const revision = entry.revisions[revisionId];
128
+ if (!revision) {
129
+ throw new NotFoundError("revision", `${collectionName}:${entryId}:${revisionId}`);
130
+ }
131
+ return revision;
132
+ }
133
+ async listEntries(publicationId, collectionName, options = {}) {
134
+ const { limit = DEFAULT_PAGE_LIMIT, cursor, signal } = options;
135
+ const tableId = await this.entriesTableId(publicationId, collectionName, signal);
136
+ const response = await this.callClient("listDynamicFields", () => this.client.listDynamicFields({
137
+ parentId: tableId,
138
+ limit,
139
+ cursor: cursor ?? null,
140
+ include: { value: true },
141
+ ...(signal === undefined ? {} : { signal }),
142
+ }));
143
+ const results = response.dynamicFields.map((field) => parseDynamicEntry(field));
144
+ return { results, nextCursor: response.cursor };
145
+ }
146
+ async *scanEntries(publicationId, collectionName, options = {}) {
147
+ const { pageSize = DEFAULT_PAGE_LIMIT, signal } = options;
148
+ let cursor;
149
+ while (true) {
150
+ const page = await this.listEntries(publicationId, collectionName, {
151
+ limit: pageSize,
152
+ ...(cursor === undefined ? {} : { cursor }),
153
+ ...(signal === undefined ? {} : { signal }),
154
+ });
155
+ for (const entry of page.results) {
156
+ yield entry;
157
+ }
158
+ if (page.nextCursor === null) {
159
+ return;
160
+ }
161
+ cursor = page.nextCursor;
162
+ }
163
+ }
164
+ async entriesTableId(publicationId, collectionName, signal) {
165
+ const publication = await this.getPublication(publicationId, signal);
166
+ const collection = publication.collections.find((c) => c.name === collectionName);
167
+ if (!collection) {
168
+ throw new NotFoundError("collection", `${publicationId}:${collectionName}`);
169
+ }
170
+ return collection.entriesTableId;
171
+ }
172
+ async callClient(operation, call) {
173
+ try {
174
+ return await call();
175
+ }
176
+ catch (cause) {
177
+ throw new TransportError(`${operation} failed`, { cause });
178
+ }
179
+ }
180
+ }
181
+ function parsePublication(object) {
182
+ const json = object.json;
183
+ if (!json) {
184
+ throw new ValidationError(`Publication ${object.objectId} has no parsed JSON content`, "publication.json");
185
+ }
186
+ const id = toPublicationId(object.objectId);
187
+ const name = readString(json, "name", "publication.name");
188
+ const slug = readString(json, "slug", "publication.slug");
189
+ const collections = parseCollections(json.collections);
190
+ const revokedPublisherCapsTableId = parseTableId(json.revoked_publisher_caps, "publication.revoked_publisher_caps");
191
+ return {
192
+ id,
193
+ name,
194
+ slug,
195
+ collections,
196
+ revokedPublisherCapsTableId,
197
+ };
198
+ }
199
+ function parseCollections(value) {
200
+ if (value === null || typeof value !== "object") {
201
+ throw new ValidationError("Publication collections field is missing or not an object", "publication.collections");
202
+ }
203
+ const contents = value.contents;
204
+ if (!Array.isArray(contents)) {
205
+ throw new ValidationError("Publication collections.contents is not an array", "publication.collections.contents");
206
+ }
207
+ return contents.map((entry, index) => parseCollection(entry, index));
208
+ }
209
+ function parseCollection(value, index) {
210
+ const path = `publication.collections[${index}]`;
211
+ if (value === null || typeof value !== "object") {
212
+ throw new ValidationError(`${path} is not an object`, path);
213
+ }
214
+ const inner = value.value;
215
+ if (inner === null || typeof inner !== "object") {
216
+ throw new ValidationError(`${path}.value is not an object`, `${path}.value`);
217
+ }
218
+ const collection = inner;
219
+ return {
220
+ name: readString(collection, "name", `${path}.name`),
221
+ storageMode: storageModeFromU8(readU8(collection, "storage_mode", `${path}.storage_mode`)),
222
+ nextEntryId: readSafeInteger(collection, "next_entry_id", `${path}.next_entry_id`),
223
+ entriesTableId: parseTableId(collection.entries, `${path}.entries`),
224
+ };
225
+ }
226
+ function parsePublisherCap(object) {
227
+ const json = object.json;
228
+ if (!json || typeof json !== "object") {
229
+ throw new ValidationError(`PublisherCap ${object.objectId} has no parsed JSON content`, "publisherCap.json");
230
+ }
231
+ // Move `ID` and `address` fields serialize as bare hex strings.
232
+ // Move `UID` (e.g. the struct's own `id` field) serializes as `{ id: "0x..." }`;
233
+ // we use `object.objectId` from the SDK metadata wrapper for the cap's ID instead.
234
+ const fields = json;
235
+ if (typeof fields.publication_id !== "string") {
236
+ throw new ValidationError("PublisherCap.publication_id is missing or not a string", "publisherCap.publication_id");
237
+ }
238
+ if (typeof fields.holder !== "string") {
239
+ throw new ValidationError("PublisherCap.holder is missing or not a string", "publisherCap.holder");
240
+ }
241
+ return {
242
+ id: toPublisherCapId(object.objectId),
243
+ publicationId: toPublicationId(fields.publication_id),
244
+ holder: toSuiAddress(fields.holder),
245
+ };
246
+ }
247
+ function parseOwnedPublication(object) {
248
+ const json = object.json;
249
+ if (!json || typeof json !== "object") {
250
+ throw new ValidationError(`OwnerCap ${object.objectId} has no parsed JSON content`, "ownerCap.json");
251
+ }
252
+ const publicationIdRaw = json
253
+ .publication_id;
254
+ if (typeof publicationIdRaw !== "string") {
255
+ throw new ValidationError("OwnerCap.publication_id is missing or not a string", "ownerCap.publication_id");
256
+ }
257
+ return {
258
+ ownerCapId: toOwnerCapId(object.objectId),
259
+ publicationId: toPublicationId(publicationIdRaw),
260
+ };
261
+ }
262
+ function readString(json, key, field) {
263
+ const value = json[key];
264
+ if (typeof value !== "string") {
265
+ throw new ValidationError(`Field ${field} is missing or not a string`, field);
266
+ }
267
+ return value;
268
+ }
269
+ function readU8(json, key, field) {
270
+ const raw = json[key];
271
+ const value = typeof raw === "string" ? Number(raw) : raw;
272
+ if (typeof value !== "number" ||
273
+ !Number.isInteger(value) ||
274
+ value < 0 ||
275
+ value > 255) {
276
+ throw new ValidationError(`Field ${field} is not a valid u8: ${JSON.stringify(raw)}`, field);
277
+ }
278
+ return value;
279
+ }
280
+ function readSafeInteger(json, key, field) {
281
+ const raw = json[key];
282
+ const value = typeof raw === "string" ? Number(raw) : raw;
283
+ if (typeof value !== "number" || !Number.isSafeInteger(value) || value < 0) {
284
+ throw new ValidationError(`Field ${field} is not a non-negative safe integer: ${JSON.stringify(raw)}`, field);
285
+ }
286
+ return value;
287
+ }
288
+ /**
289
+ * Detect the specific Sui gRPC per-object "not found" error. Matches the
290
+ * `Object {id} not found` message format thrown by the batch object lookup
291
+ * so unrelated transport failures (timeouts, service unavailable) are not
292
+ * misclassified as missing objects.
293
+ *
294
+ * Uses the same anchored regex strategy as `isDynamicFieldNotFoundError`,
295
+ * not exact equality, so a future Sui gRPC release that adds a trailing
296
+ * detail (e.g. `Object 0x... not found at version N`) still matches without
297
+ * silently degrading to "transport failure". Anchoring with `^...$` keeps
298
+ * substring false positives out (e.g. "service unavailable: connection not
299
+ * found"). The `objectId` is matched literally for caller-side specificity.
300
+ */
301
+ function isObjectNotFoundError(cause, objectId) {
302
+ if (!(cause instanceof Error)) {
303
+ return false;
304
+ }
305
+ const escaped = objectId.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
306
+ return new RegExp(`^Object ${escaped} not found(\\b|$)`).test(cause.message);
307
+ }
308
+ function parseEntry(bcs, entryId) {
309
+ let parsed;
310
+ try {
311
+ parsed = EntryBcs.parse(bcs);
312
+ }
313
+ catch (cause) {
314
+ throw new ValidationError(`Failed to decode Entry BCS for id ${entryId}: ${cause instanceof Error ? cause.message : String(cause)}`, "entry.bcs", { cause });
315
+ }
316
+ return {
317
+ id: entryId,
318
+ name: parsed.name,
319
+ revisions: parsed.revisions.map((r, i) => convertRevision(r, i)),
320
+ draftHead: parsed.draft_head === null ? null : safeIntFromBig(parsed.draft_head),
321
+ publicHead: parsed.public_head === null ? null : safeIntFromBig(parsed.public_head),
322
+ };
323
+ }
324
+ function parseDynamicEntry(field) {
325
+ if (!field.value) {
326
+ throw new ValidationError(`Dynamic field ${field.fieldId} returned without value despite include.value=true`, "dynamicField.value");
327
+ }
328
+ let id;
329
+ try {
330
+ id = EntryIdBcs.parse(field.name.bcs);
331
+ }
332
+ catch (cause) {
333
+ throw new ValidationError(`Failed to decode entry id from dynamic-field name`, "dynamicField.name", { cause });
334
+ }
335
+ const numericId = safeIntFromString(id);
336
+ return parseEntry(field.value.bcs, numericId);
337
+ }
338
+ function convertRevision(parsed, index) {
339
+ return {
340
+ id: index,
341
+ blobRef: convertBlobRef(parsed.blob_ref),
342
+ contentType: parsed.content_type,
343
+ encrypted: parsed.encrypted,
344
+ accessPolicy: accessPolicyFromU8(parsed.access_policy),
345
+ // On-chain bytes have already passed Move's `assert_valid_publisher_seal_id`
346
+ // invariants (length, prefix, policy tag), so we brand them here without
347
+ // re-validating client-side. This lets `Revision.sealId` flow directly into
348
+ // `SealAdapter.decrypt` without a consumer-side cast.
349
+ sealId: parsed.seal_id === null
350
+ ? null
351
+ : new Uint8Array(parsed.seal_id),
352
+ author: toSuiAddress(parsed.author),
353
+ };
354
+ }
355
+ function convertBlobRef(parsed) {
356
+ if (parsed.$kind === "Blob") {
357
+ return { kind: "blob", blobObjectId: toBlobObjectId(parsed.Blob) };
358
+ }
359
+ return {
360
+ kind: "quilt",
361
+ patchId: toQuiltPatchId(new Uint8Array(parsed.QuiltPatch)),
362
+ };
363
+ }
364
+ function safeIntFromBig(value) {
365
+ const asNumber = Number(value);
366
+ if (!Number.isSafeInteger(asNumber) || asNumber < 0) {
367
+ throw new ValidationError(`u64 value ${value} exceeds Number.MAX_SAFE_INTEGER`, "u64");
368
+ }
369
+ return asNumber;
370
+ }
371
+ function safeIntFromString(value) {
372
+ return safeIntFromBig(value);
373
+ }
374
+ /**
375
+ * Match the Sui gRPC core's "Object 0x... not found" message format. The
376
+ * dynamic-field RPC routes through batch-getObjects under the hood and
377
+ * surfaces the same shape. Loose substring matches misclassify transport
378
+ * failures (e.g. "service unavailable: connection not found") as missing
379
+ * objects.
380
+ */
381
+ function isDynamicFieldNotFoundError(cause) {
382
+ if (!(cause instanceof Error)) {
383
+ return false;
384
+ }
385
+ return /^Object 0x[0-9a-f]+ not found$/i.test(cause.message);
386
+ }
387
+ function parseTableId(value, field) {
388
+ if (value === null || typeof value !== "object") {
389
+ throw new ValidationError(`Field ${field} is not an object`, field);
390
+ }
391
+ const id = value.id;
392
+ if (typeof id === "string") {
393
+ return toSuiObjectId(id);
394
+ }
395
+ if (id !== null && typeof id === "object") {
396
+ const innerId = id.id;
397
+ if (typeof innerId === "string") {
398
+ return toSuiObjectId(innerId);
399
+ }
400
+ }
401
+ throw new ValidationError(`Field ${field}.id is not a string or { id: string }`, `${field}.id`);
402
+ }
403
+ //# sourceMappingURL=reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reader.js","sourceRoot":"","sources":["../../src/read/reader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Seal adapter interface: encrypt content under a publisher Seal identity
3
+ * and decrypt with a consumer-supplied `SessionKey`. Configuration
4
+ * (key servers, threshold, package id) is bound at construction time.
5
+ */
6
+ import type { SessionKey } from "@mysten/seal";
7
+ import type { PublisherCapId, SealId } from "../types.js";
8
+ export interface SealEncryptOptions {
9
+ readonly sealId: SealId;
10
+ /** Optional additional authenticated data bound into the ciphertext. */
11
+ readonly aad?: Uint8Array;
12
+ }
13
+ export interface SealEncryptResult {
14
+ readonly ciphertext: Uint8Array;
15
+ }
16
+ export interface SealDecryptOptions {
17
+ /**
18
+ * Session key constructed by the consumer's wallet (out-of-band: requires
19
+ * a signed personal message). The SDK never builds session keys silently.
20
+ */
21
+ readonly sessionKey: SessionKey;
22
+ readonly sealId: SealId;
23
+ readonly publisherCapId: PublisherCapId;
24
+ }
25
+ /**
26
+ * Combined Seal adapter. Implementations bundle a `SealClient`, the morse
27
+ * package id (Seal binds it into ciphertext envelopes), and a TSS threshold.
28
+ * Errors normalize to `SealError` (content/authorization failures) or
29
+ * `TransportError` (network).
30
+ */
31
+ export interface SealAdapter {
32
+ /**
33
+ * Encrypt `plaintext` under the supplied Seal identity. The ciphertext
34
+ * envelope binds the morse package id and the TSS threshold; decrypting
35
+ * later requires the same key-server set and threshold the adapter was
36
+ * constructed with.
37
+ *
38
+ * @throws {SealError} On Seal-side encryption failure (rare).
39
+ * @throws {TransportError} On network failure.
40
+ */
41
+ encrypt(plaintext: Uint8Array, options: SealEncryptOptions): Promise<SealEncryptResult>;
42
+ /**
43
+ * Decrypt `ciphertext` produced by an earlier `encrypt` call. The Seal
44
+ * key servers verify that `publisherCapId` is active (not in the
45
+ * publication's revoked denylist) before issuing decryption material;
46
+ * a revoked cap surfaces as `SealError("no-access")`.
47
+ *
48
+ * @throws {SealError} On Seal authorization failure (`no-access`),
49
+ * decryption failure (`decrypt-failed` — also raised when `sealId` is
50
+ * malformed), session-key expiry (`session-expired`), or rate
51
+ * limiting (`rate-limited`).
52
+ * @throws {TransportError} On network or PTB build failure.
53
+ */
54
+ decrypt(ciphertext: Uint8Array, options: SealDecryptOptions): Promise<Uint8Array>;
55
+ }
56
+ //# sourceMappingURL=adapter.d.ts.map