@misofm/platform 0.25.0 → 0.26.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 (140) hide show
  1. package/README.md +144 -45
  2. package/dist/auth.d.ts +8 -13
  3. package/dist/auth.d.ts.map +1 -1
  4. package/dist/auth.js +78 -59
  5. package/dist/auth.js.map +1 -1
  6. package/dist/catalog.d.ts +5 -5
  7. package/dist/catalog.d.ts.map +1 -1
  8. package/dist/catalog.js +33 -21
  9. package/dist/catalog.js.map +1 -1
  10. package/dist/client.d.ts +17 -30
  11. package/dist/client.d.ts.map +1 -1
  12. package/dist/client.js +53 -75
  13. package/dist/client.js.map +1 -1
  14. package/dist/cover.d.ts +4 -3
  15. package/dist/cover.d.ts.map +1 -1
  16. package/dist/cover.js +28 -17
  17. package/dist/cover.js.map +1 -1
  18. package/dist/credits.d.ts +12 -10
  19. package/dist/credits.d.ts.map +1 -1
  20. package/dist/credits.js +60 -33
  21. package/dist/credits.js.map +1 -1
  22. package/dist/deployments.d.ts +21 -13
  23. package/dist/deployments.d.ts.map +1 -1
  24. package/dist/deployments.js +84 -37
  25. package/dist/deployments.js.map +1 -1
  26. package/dist/errors.d.ts +91 -0
  27. package/dist/errors.d.ts.map +1 -0
  28. package/dist/errors.js +111 -0
  29. package/dist/errors.js.map +1 -0
  30. package/dist/execute.d.ts +3 -1
  31. package/dist/execute.d.ts.map +1 -1
  32. package/dist/execute.js +9 -4
  33. package/dist/execute.js.map +1 -1
  34. package/dist/genre.d.ts +25 -41
  35. package/dist/genre.d.ts.map +1 -1
  36. package/dist/genre.js +71 -20
  37. package/dist/genre.js.map +1 -1
  38. package/dist/party/client.d.ts +16 -13
  39. package/dist/party/client.d.ts.map +1 -1
  40. package/dist/party/client.js +33 -22
  41. package/dist/party/client.js.map +1 -1
  42. package/dist/party/extensions/links.d.ts +2 -1
  43. package/dist/party/extensions/links.d.ts.map +1 -1
  44. package/dist/party/extensions/links.js +2 -1
  45. package/dist/party/extensions/links.js.map +1 -1
  46. package/dist/party/queries.d.ts +12 -11
  47. package/dist/party/queries.d.ts.map +1 -1
  48. package/dist/party/queries.js +63 -57
  49. package/dist/party/queries.js.map +1 -1
  50. package/dist/party/types.d.ts +31 -20
  51. package/dist/party/types.d.ts.map +1 -1
  52. package/dist/party/types.js +82 -1
  53. package/dist/party/types.js.map +1 -1
  54. package/dist/pressing.d.ts +55 -35
  55. package/dist/pressing.d.ts.map +1 -1
  56. package/dist/pressing.js +99 -76
  57. package/dist/pressing.js.map +1 -1
  58. package/dist/queries.d.ts +1 -1
  59. package/dist/queries.d.ts.map +1 -1
  60. package/dist/queries.js +5 -4
  61. package/dist/queries.js.map +1 -1
  62. package/dist/read/artist.d.ts +6 -4
  63. package/dist/read/artist.d.ts.map +1 -1
  64. package/dist/read/artist.js +29 -27
  65. package/dist/read/artist.js.map +1 -1
  66. package/dist/read/catalog.d.ts +20 -17
  67. package/dist/read/catalog.d.ts.map +1 -1
  68. package/dist/read/catalog.js +120 -141
  69. package/dist/read/catalog.js.map +1 -1
  70. package/dist/read/client.d.ts +10 -9
  71. package/dist/read/client.d.ts.map +1 -1
  72. package/dist/read/client.js.map +1 -1
  73. package/dist/read/genres.d.ts +5 -3
  74. package/dist/read/genres.d.ts.map +1 -1
  75. package/dist/read/genres.js +18 -15
  76. package/dist/read/genres.js.map +1 -1
  77. package/dist/read/index.d.ts.map +1 -1
  78. package/dist/read/index.js +7 -1
  79. package/dist/read/index.js.map +1 -1
  80. package/dist/read/receipts.d.ts +15 -6
  81. package/dist/read/receipts.d.ts.map +1 -1
  82. package/dist/read/receipts.js +73 -60
  83. package/dist/read/receipts.js.map +1 -1
  84. package/dist/read/wallet.d.ts +11 -9
  85. package/dist/read/wallet.d.ts.map +1 -1
  86. package/dist/read/wallet.js +117 -132
  87. package/dist/read/wallet.js.map +1 -1
  88. package/dist/read/works.d.ts +9 -16
  89. package/dist/read/works.d.ts.map +1 -1
  90. package/dist/read/works.js +48 -117
  91. package/dist/read/works.js.map +1 -1
  92. package/dist/recording-extensions.d.ts +8 -7
  93. package/dist/recording-extensions.d.ts.map +1 -1
  94. package/dist/recording-extensions.js +30 -63
  95. package/dist/recording-extensions.js.map +1 -1
  96. package/dist/release-extensions.d.ts +3 -2
  97. package/dist/release-extensions.d.ts.map +1 -1
  98. package/dist/release-extensions.js +9 -10
  99. package/dist/release-extensions.js.map +1 -1
  100. package/dist/royalty.d.ts +51 -51
  101. package/dist/royalty.d.ts.map +1 -1
  102. package/dist/royalty.js +93 -11
  103. package/dist/royalty.js.map +1 -1
  104. package/dist/share.d.ts +7 -6
  105. package/dist/share.d.ts.map +1 -1
  106. package/dist/share.js +37 -30
  107. package/dist/share.js.map +1 -1
  108. package/dist/vault.d.ts +20 -8
  109. package/dist/vault.d.ts.map +1 -1
  110. package/dist/vault.js +31 -15
  111. package/dist/vault.js.map +1 -1
  112. package/package.json +11 -4
  113. package/src/auth.ts +89 -70
  114. package/src/catalog.ts +33 -49
  115. package/src/client.ts +117 -97
  116. package/src/cover.ts +17 -26
  117. package/src/credits.ts +43 -75
  118. package/src/deployments.ts +103 -69
  119. package/src/errors.ts +156 -0
  120. package/src/execute.ts +10 -6
  121. package/src/genre.ts +38 -23
  122. package/src/party/client.ts +35 -23
  123. package/src/party/extensions/links.ts +3 -2
  124. package/src/party/queries.ts +77 -65
  125. package/src/party/types.ts +52 -48
  126. package/src/pressing.ts +158 -161
  127. package/src/queries.ts +5 -5
  128. package/src/read/artist.ts +47 -42
  129. package/src/read/catalog.ts +200 -223
  130. package/src/read/client.ts +12 -11
  131. package/src/read/genres.ts +24 -16
  132. package/src/read/index.ts +7 -1
  133. package/src/read/receipts.ts +128 -67
  134. package/src/read/wallet.ts +194 -162
  135. package/src/read/works.ts +75 -194
  136. package/src/recording-extensions.ts +38 -92
  137. package/src/release-extensions.ts +7 -12
  138. package/src/royalty.ts +117 -20
  139. package/src/share.ts +44 -29
  140. package/src/vault.ts +47 -24
package/README.md CHANGED
@@ -98,7 +98,14 @@ singletons.
98
98
  Register the client extension on any client implementing Sui's Core API
99
99
  ([SDK building guidelines](https://sdk.mystenlabs.com/sui/sdk-building)):
100
100
 
101
+ Every method that performs I/O — a chain read, a signed execution — returns an
102
+ `Effect.Effect<A, E>` (`R = never`: the client already provided `SuiClient`
103
+ internally). Run a program with `Effect.runPromise` (or compose it further
104
+ with other Effects) at your own boundary; PTB builders (`tx.*`) stay plain
105
+ synchronous functions.
106
+
101
107
  ```ts
108
+ import { Effect } from "effect";
102
109
  import { SuiGrpcClient } from "@mysten/sui/grpc";
103
110
  import { Transaction } from "@mysten/sui/transactions";
104
111
  import { miso } from "@misofm/platform";
@@ -107,40 +114,58 @@ const client = new SuiGrpcClient({ network: "testnet", baseUrl }).$extend(
107
114
  miso({ deployment: verifiedDeployment }),
108
115
  );
109
116
 
110
- // One memoized Core API read proves this endpoint is the deployment's exact
111
- // ledger before any synchronous client-bound builder can be used.
112
- await client.miso.ready();
113
-
114
- // The permissionless object-model SDK is part of the same facade.
115
- const release = await client.miso.protocol.getReleaseById(releaseId);
116
- // Party identity comes from @misofm/partyos; platform adds the extensions.
117
- // client.miso.party is a PartyPlatformClient wrapping a PartyosClient (core
118
- // reads/builders delegate straight through) bound to this deployment's
119
- // `partyos` (core) and `party` (extensions) sections also importable
120
- // standalone from `@misofm/platform/party`.
121
- const party = await client.miso.party.getPartyById(partyId);
122
-
123
- // Read: run + one currency's offer, one round trip, no registry lookup.
124
- const { pressing, listing } = await client.miso.getSale({
125
- releaseId,
126
- edition,
127
- currencyType: USD_COIN_TYPE,
117
+ const program = Effect.gen(function* () {
118
+ // One memoized Core API read proves this endpoint is the deployment's exact
119
+ // ledger before any synchronous client-bound builder can be used.
120
+ yield* client.miso.ready();
121
+
122
+ // The permissionless object-model SDK is part of the same facade.
123
+ const release = yield* client.miso.protocol!.getReleaseById(releaseId); // protocol is set once ready() succeeded
124
+ // Party identity comes from @misofm/partyos; platform adds the extensions.
125
+ // client.miso.party is a PartyPlatformClient wrapping a PartyosClient (core
126
+ // reads/builders delegate straight through) bound to this deployment's
127
+ // `partyos` (core) and `party` (extensions) sections — also importable
128
+ // standalone from `@misofm/platform/party`.
129
+ const party = yield* client.miso.party.getPartyById(partyId);
130
+
131
+ // Read: run + one currency's offer, one round trip, no registry lookup.
132
+ const { pressing, listing } = yield* client.miso.getSale({
133
+ releaseId,
134
+ edition,
135
+ currencyType: USD_COIN_TYPE,
136
+ });
137
+
138
+ return { release, party, pressing, listing };
128
139
  });
129
140
 
130
- // Write: a thunk, so it composes with protocol calls in the same PTB.
141
+ const { pressing, listing } = await Effect.runPromise(program);
142
+
143
+ // Write: a thunk, so it composes with protocol calls in the same PTB. `tx`
144
+ // builders never touch the network — no Effect involved.
131
145
  const tx = new Transaction();
132
146
  tx.add(
133
147
  client.miso.tx.purchaseRecord({
134
148
  releaseId,
135
149
  edition,
136
150
  currencyType: USD_COIN_TYPE,
137
- paymentAmount: listing.pricing.amount,
138
- expectedPricing: listing.pricing,
151
+ paymentAmount: listing!.pricing.amount,
152
+ expectedPricing: listing!.pricing,
139
153
  recipient: buyer,
140
154
  }),
141
155
  );
142
156
  ```
143
157
 
158
+ A read that can fail closed (a missing release, a mismatched chain identifier)
159
+ fails with one of this SDK's tagged errors — see [Errors](#errors) — so
160
+ recover with `Effect.catchTag`/`Effect.catchTags` instead of inspecting a
161
+ thrown message:
162
+
163
+ ```ts
164
+ const releaseOrNull = client.miso.protocol!
165
+ .getReleaseById(releaseId)
166
+ .pipe(Effect.catchTag("ObjectNotFoundError", () => Effect.succeed(null)));
167
+ ```
168
+
144
169
  The bundled Testnet deployment includes both verified immutable package IDs.
145
170
  Custom deployments can still mark sales unavailable explicitly; sales builders
146
171
  and readers fail closed whenever either package is unavailable.
@@ -173,11 +198,16 @@ it. `PartyPlatformClient` wraps a `PartyosClient` — every core method
173
198
  standalone (the same class `client.miso.party` returns):
174
199
 
175
200
  ```ts
201
+ import { Effect } from "effect";
176
202
  import { PartyosClient } from "@misofm/partyos";
177
203
  import { PartyPlatformClient } from "@misofm/platform/party";
178
204
 
179
205
  const core = new PartyosClient(client, verifiedDeployment.partyos);
180
206
  const party = new PartyPlatformClient(client, core, verifiedDeployment.party);
207
+
208
+ // Every read method returns Effect<A, E> (R = never) — the class already
209
+ // carries the ClientWithCoreApi it was constructed with.
210
+ const profile = await Effect.runPromise(party.getProfile(partyId)); // Option<Profile>
181
211
  ```
182
212
 
183
213
  Every generated Move package on this side of the boundary — the Party
@@ -200,7 +230,14 @@ objects into the JSON-safe views a client actually renders. It works in browsers
200
230
  Workers, and servers. Miso's HTTP API is a thin validated and cached transport over
201
231
  this same surface, not a separate domain implementation.
202
232
 
233
+ Every read here takes the resolved `MisoConfig` (package ids, not a transport)
234
+ and declares `SuiClient`/`SuiGraphQL` in its Requirements — `createMisoClient`
235
+ still bundles the transport, config, and Party client the way it always did;
236
+ provide its `sui`/`graphqlRaw` as the Effect services once, at the boundary:
237
+
203
238
  ```ts
239
+ import { Effect, Layer } from "effect";
240
+ import { SuiClient, SuiGraphQL } from "@misofm/effect";
204
241
  import {
205
242
  createMisoClient,
206
243
  getDiscoverShelf,
@@ -209,10 +246,16 @@ import {
209
246
  } from "@misofm/platform/read";
210
247
 
211
248
  const miso = createMisoClient({ config: verifiedReadConfig });
249
+ const layer = Layer.mergeAll(SuiClient.layer(miso.sui), SuiGraphQL.layer(miso.graphqlRaw));
212
250
 
213
- const discover = await getDiscoverShelf(miso);
214
- const release = await getReleaseDetail(miso, releaseId);
215
- const library = await getOwnedRecords(miso, walletAddress);
251
+ const program = Effect.gen(function* () {
252
+ const discover = yield* getDiscoverShelf(miso.config);
253
+ const release = yield* getReleaseDetail(releaseId, miso.config);
254
+ const library = yield* getOwnedRecords(walletAddress, miso.config);
255
+ return { discover, release, library };
256
+ });
257
+
258
+ const { discover, release, library } = await Effect.runPromise(program.pipe(Effect.provide(layer)));
216
259
  ```
217
260
 
218
261
  The package root also exposes the same functions under the `read` namespace:
@@ -221,7 +264,9 @@ The package root also exposes the same functions under the `read` namespace:
221
264
  import { read } from "@misofm/platform";
222
265
 
223
266
  const miso = read.createMisoClient({ config: verifiedReadConfig });
224
- const artist = await read.getArtistProfile(miso, partyId);
267
+ const artist = await Effect.runPromise(
268
+ read.getArtistProfile(partyId, miso.config).pipe(Effect.provide(SuiClient.layer(miso.sui))),
269
+ );
225
270
  ```
226
271
 
227
272
  ### Authenticated platform mutations
@@ -418,6 +463,7 @@ Recording creator remainder; lower-level routed-stake builders remain
418
463
  available for the Move layer's 100% composition-cut case.
419
464
 
420
465
  ```ts
466
+ import { Effect } from "effect";
421
467
  import {
422
468
  assertAtomicPublicationBounds,
423
469
  parseAtomicPublicationResult,
@@ -437,9 +483,8 @@ const publication = {
437
483
  // PTB exceeds the SDK's command/input safety limits or has an invalid graph.
438
484
  assertAtomicPublicationBounds(publication);
439
485
 
440
- const executed = await client.miso.executeViaExecutor(
441
- executor,
442
- publishAtomicCatalog(publication),
486
+ const executed = await Effect.runPromise(
487
+ client.miso.executeViaExecutor(executor, publishAtomicCatalog(publication)),
443
488
  );
444
489
  const result = parseAtomicPublicationResult(publication, executed);
445
490
  ```
@@ -466,29 +511,30 @@ embedded as `SHARE_TEMPLATE`, initializer patched via `patchInitializer`).
466
511
  Publish and initialize are necessarily two transactions:
467
512
 
468
513
  ```ts
514
+ import { Effect } from "effect";
515
+
469
516
  // Sequential (one currency, two txs):
470
- const currency = await client.miso.createShareCurrency(signer, {
471
- name: "Song Shares",
472
- description: "",
473
- });
517
+ const currency = await Effect.runPromise(
518
+ client.miso.createShareCurrency(signer, {
519
+ name: "Song Shares",
520
+ description: "…",
521
+ }),
522
+ );
474
523
  // → { packageId, currencyId, shareType, treasuryCapId, gasUsed }
475
524
 
476
- // Batched (many currencies, via a ParallelTransactionExecutor):
525
+ // Batched (many currencies, via a ParallelTransactionExecutor). Both submit
526
+ // exclusively through the executor (R = never), unlike `createShareCurrency`
527
+ // above, which needs `SuiClient` for its sequential `execThunks` calls.
477
528
  import { publishShareCurrencies, initializeShareCurrencies } from "@misofm/platform";
478
- const { packageIds } = await publishShareCurrencies(
479
- executor,
480
- initializerAddress,
481
- 10,
482
- );
483
- const { currencies } = await initializeShareCurrencies(
484
- executor,
485
- signerAddress,
486
- packageIds,
487
- (pkg) => ({
529
+
530
+ const program = Effect.gen(function* () {
531
+ const { packageIds } = yield* publishShareCurrencies(executor, initializerAddress, 10);
532
+ return yield* initializeShareCurrencies(executor, signerAddress, packageIds, (pkg) => ({
488
533
  name: "…",
489
534
  description: "…",
490
- }),
491
- );
535
+ }));
536
+ });
537
+ const { currencies } = await Effect.runPromise(program);
492
538
  ```
493
539
 
494
540
  `executeViaExecutor(executor, ...thunks)` (`execute.ts`) submits a
@@ -670,6 +716,59 @@ carry an optional `RecordingRoleLevel` (`Producer`, `Vocalist`, `Engineer`,
670
716
  (`Instrumentalist`, `Custom`, and the unleveled `ArtistsAndRepertoire` /
671
717
  `Copyist`) are spelled out separately in `RecordingRole`.
672
718
 
719
+ ## Errors
720
+
721
+ Every typed failure is a `Schema.TaggedError` (`@misofm/platform/errors`),
722
+ recoverable with `Effect.catchTag`/`Effect.catchTags` instead of message
723
+ sniffing. The foundation's Sui read/write vocabulary
724
+ (`ObjectNotFoundError { objectId }`, `ObjectTypeMismatchError { objectId,
725
+ expected, actual }`, `SuiRpcError { operation, cause }`, `BcsDecodeError {
726
+ type, objectId?, cause }`, `TransactionFailedError { digest, status }`,
727
+ `GraphQLUnavailableError {}`, `DeploymentError { message }`) is re-exported
728
+ from `@misofm/effect/errors` so this is the only import a consumer needs:
729
+
730
+ ```ts
731
+ import {
732
+ ObjectNotFoundError,
733
+ ReleaseNotFoundError,
734
+ RecordSalesUnavailableError,
735
+ OperationsUnavailableError,
736
+ MisoChainIdentifierMismatchError,
737
+ MisoClientNotReadyError,
738
+ MisoNetworkMismatchError,
739
+ } from "@misofm/platform/errors";
740
+ ```
741
+
742
+ Platform-specific tags:
743
+
744
+ | Error | Fields | Raised by |
745
+ | --- | --- | --- |
746
+ | `RecordSalesUnavailableError` | `reason` | `requireRecordSalesDeployment`, every sales read/builder on a legacy or unconfigured deployment |
747
+ | `OperationsUnavailableError` | `reason` | `requireOperationsDeployment`, `client.miso.vault`/`call.*` operations surfaces |
748
+ | `MisoPlatformDeploymentInvalidError` | `message` | `assertMisoPlatformDeployment` / `normalizeMisoPlatformDeployment` |
749
+ | `MisoNetworkMismatchError` | `clientNetwork`, `deploymentNetwork` | `miso()`/`misoPlatform()` registration (synchronous) |
750
+ | `MisoChainIdentifierMismatchError` | `actual`, `expected` | `client.miso.ready()` |
751
+ | `MisoClientNotReadyError` | `operation` | synchronous client-bound surfaces (`tx`, `ids`, `call`, `vault`, `party`, `protocol`) used before `ready()` |
752
+ | `MalformedRecordSoldEventError` | `digest?`, `reason?` | `findRecordSales`/`getPurchaseReceipt(s)` on a malformed `RecordSoldEvent` |
753
+ | `MisoAuthError` | `code`, `reason`, `status?`, `cause?` | `@misofm/platform/auth` (`requestAuthorizationChallenge`, `authenticatedFetch`, …) |
754
+ | `ReleaseNotFoundError` | `releaseId` | `@misofm/platform/read` (`getReleaseResources`, `getReleaseDetail`, …) — the typed replacement for the api read service's old `isMissingRelease` message bridge |
755
+ | `ReceiptNotFoundError` | `digest` | `getPurchaseReceipt(s)` when neither the fullnode nor the indexer has the transaction |
756
+ | `RecordPurchaseNotFoundError` | `digest` | `getPurchaseReceipt(s)` when the transaction exists but carries no `RecordSoldEvent` |
757
+ | `ForeignPressingError` | `pressingId`, `actualType?` | reserved for read-layer Pressing type-mismatch bridging |
758
+
759
+ ```ts
760
+ import { Effect } from "effect";
761
+
762
+ const release = client.miso.protocol!
763
+ .getReleaseById(releaseId)
764
+ .pipe(
765
+ Effect.catchTags({
766
+ ObjectNotFoundError: () => Effect.succeed(null),
767
+ SuiRpcError: (e) => Effect.die(e), // transport failure: not recoverable here
768
+ }),
769
+ );
770
+ ```
771
+
673
772
  ## Layout
674
773
 
675
774
  ```
package/dist/auth.d.ts CHANGED
@@ -1,3 +1,7 @@
1
+ import { Effect } from "effect";
2
+ import { MisoAuthError, type MisoAuthErrorCode } from "./errors.ts";
3
+ export type { MisoAuthErrorCode };
4
+ export { MisoAuthError };
1
5
  export type AuthNetwork = "testnet" | "mainnet";
2
6
  export interface ApiAuthorizationFields {
3
7
  method: string;
@@ -23,15 +27,6 @@ export declare const MISO_AUTH_HEADERS: {
23
27
  readonly signature: "X-Sui-Signature";
24
28
  readonly issuedAt: "X-Sui-Issued-At";
25
29
  };
26
- export type MisoAuthErrorCode = "invalid_target" | "challenge_rejected" | "invalid_challenge" | "signing_failed";
27
- export declare class MisoAuthError extends Error {
28
- readonly code: MisoAuthErrorCode;
29
- readonly status?: number;
30
- constructor(code: MisoAuthErrorCode, message: string, options?: {
31
- status?: number;
32
- cause?: unknown;
33
- });
34
- }
35
30
  /** The byte-exact Sui personal message required for an authenticated API mutation. */
36
31
  export declare function buildApiAuthorizationPayload(fields: ApiAuthorizationFields): string;
37
32
  export declare function isValidAuthorizationTarget(method: string, path: string): boolean;
@@ -49,15 +44,15 @@ export interface RequestAuthorizationChallengeOptions {
49
44
  nowMs?: number;
50
45
  }
51
46
  /** Ask Miso to verify the Enoki account and issue the exact message to sign. */
52
- export declare function requestAuthorizationChallenge(options: RequestAuthorizationChallengeOptions): Promise<AuthorizationChallenge>;
47
+ export declare const requestAuthorizationChallenge: (options: RequestAuthorizationChallengeOptions) => Effect.Effect<AuthorizationChallenge, MisoAuthError, never>;
53
48
  export interface CreateAuthorizationHeadersOptions extends RequestAuthorizationChallengeOptions {
54
49
  signer: PersonalMessageSigner;
55
50
  }
56
51
  /** Verify the challenge locally, sign it as a Sui personal message, and produce API headers. */
57
- export declare function createAuthorizationHeaders(options: CreateAuthorizationHeadersOptions): Promise<{
52
+ export declare const createAuthorizationHeaders: (options: CreateAuthorizationHeadersOptions) => Effect.Effect<{
58
53
  challenge: AuthorizationChallenge;
59
54
  headers: Headers;
60
- }>;
55
+ }, MisoAuthError, never>;
61
56
  export interface AuthenticatedFetchOptions extends RequestInit {
62
57
  auth: {
63
58
  token: string;
@@ -69,5 +64,5 @@ export interface AuthenticatedFetchOptions extends RequestInit {
69
64
  fetch?: typeof globalThis.fetch;
70
65
  }
71
66
  /** Perform a protected Miso API mutation with a fresh Enoki-verified Sui signature. */
72
- export declare function authenticatedFetch(input: string | URL, options: AuthenticatedFetchOptions): Promise<Response>;
67
+ export declare const authenticatedFetch: (input: string | URL, options: AuthenticatedFetchOptions) => Effect.Effect<Response, MisoAuthError, never>;
73
68
  //# sourceMappingURL=auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEpE,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,CAAC;AAEzB,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;AAEhD,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAuB,SAAQ,sBAAsB;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,mBAAmB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1F;AAED,eAAO,MAAM,wBAAwB,QAAiB,CAAC;AACvD,eAAO,MAAM,4BAA4B,QAAa,CAAC;AAEvD,eAAO,MAAM,iBAAiB;aAC5B,OAAO,EAAE,eAAe;aACxB,SAAS,EAAE,iBAAiB;aAC5B,QAAQ,EAAE,iBAAiB;CACnB,CAAC;AAEX,sFAAsF;AACtF,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAUnF;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAOhF;AAED,8DAA8D;AAC9D,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,GAAE,MAAmB,GAAG,MAAM,GAAG,IAAI,CAYzG;AA4FD,MAAM,WAAW,oCAAoC;IACnD,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;IAC5B,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,gFAAgF;AAChF,eAAO,MAAM,6BAA6B,gHAwCxC,CAAC;AAEH,MAAM,WAAW,iCAAkC,SAAQ,oCAAoC;IAC7F,MAAM,EAAE,qBAAqB,CAAC;CAC/B;AAED,gGAAgG;AAChG,eAAO,MAAM,0BAA0B;eAEN,sBAAsB;aAAW,OAAO;wBAqBvE,CAAC;AAEH,MAAM,WAAW,yBAA0B,SAAQ,WAAW;IAC5D,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,qBAAqB,CAAC;QAC9B,OAAO,CAAC,EAAE,WAAW,CAAC;KACvB,CAAC;IACF,YAAY,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;IAC5B,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AAED,uFAAuF;AACvF,eAAO,MAAM,kBAAkB,4GA+B7B,CAAC"}
package/dist/auth.js CHANGED
@@ -1,6 +1,9 @@
1
1
  // Copyright (c) Miso Labs, Inc.
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
  import { isValidSuiAddress, normalizeSuiAddress } from "@mysten/sui/utils";
4
+ import { Effect } from "effect";
5
+ import { MisoAuthError } from "./errors.js";
6
+ export { MisoAuthError };
4
7
  export const AUTHORIZATION_MAX_AGE_MS = 5 * 60 * 1_000;
5
8
  export const AUTHORIZATION_FUTURE_SKEW_MS = 60 * 1_000;
6
9
  export const MISO_AUTH_HEADERS = {
@@ -8,16 +11,6 @@ export const MISO_AUTH_HEADERS = {
8
11
  signature: "X-Sui-Signature",
9
12
  issuedAt: "X-Sui-Issued-At",
10
13
  };
11
- export class MisoAuthError extends Error {
12
- code;
13
- status;
14
- constructor(code, message, options = {}) {
15
- super(message, options.cause === undefined ? undefined : { cause: options.cause });
16
- this.name = "MisoAuthError";
17
- this.code = code;
18
- this.status = options.status;
19
- }
20
- }
21
14
  /** The byte-exact Sui personal message required for an authenticated API mutation. */
22
15
  export function buildApiAuthorizationPayload(fields) {
23
16
  return [
@@ -50,16 +43,22 @@ export function parseFreshAuthorizationIssuedAt(input, nowMs = Date.now()) {
50
43
  const canonical = new Date(issuedAtMs).toISOString();
51
44
  return input === canonical ? canonical : null;
52
45
  }
53
- function target(method, path) {
46
+ const target = Effect.fn("target")(function* (method, path) {
54
47
  const normalized = { method: method.toUpperCase(), path };
55
48
  if (!isValidAuthorizationTarget(normalized.method, normalized.path)) {
56
- throw new MisoAuthError("invalid_target", "Authenticated requests require a mutation under /platform/.");
49
+ return yield* new MisoAuthError({
50
+ code: "invalid_target",
51
+ reason: "Authenticated requests require a mutation under /platform/.",
52
+ });
57
53
  }
58
54
  return normalized;
59
- }
60
- function parseChallenge(input, expected) {
55
+ });
56
+ const parseChallenge = Effect.fn("parseChallenge")(function* (input, expected) {
61
57
  if (input === null || typeof input !== "object" || Array.isArray(input)) {
62
- throw new MisoAuthError("invalid_challenge", "The API returned an invalid authorization challenge.");
58
+ return yield* new MisoAuthError({
59
+ code: "invalid_challenge",
60
+ reason: "The API returned an invalid authorization challenge.",
61
+ });
63
62
  }
64
63
  const body = input;
65
64
  if (typeof body.payload !== "string" ||
@@ -71,7 +70,10 @@ function parseChallenge(input, expected) {
71
70
  typeof body.expiresAt !== "string" ||
72
71
  !isValidSuiAddress(body.address) ||
73
72
  (body.network !== "testnet" && body.network !== "mainnet")) {
74
- throw new MisoAuthError("invalid_challenge", "The API returned an invalid authorization challenge.");
73
+ return yield* new MisoAuthError({
74
+ code: "invalid_challenge",
75
+ reason: "The API returned an invalid authorization challenge.",
76
+ });
75
77
  }
76
78
  const nowMs = expected.nowMs ?? Date.now();
77
79
  const issuedAt = parseFreshAuthorizationIssuedAt(body.issuedAt, nowMs);
@@ -97,64 +99,75 @@ function parseChallenge(input, expected) {
97
99
  expiresAtMs <= nowMs ||
98
100
  expiresAtMs > Date.parse(issuedAt) + AUTHORIZATION_MAX_AGE_MS ||
99
101
  body.payload !== buildApiAuthorizationPayload(challenge)) {
100
- throw new MisoAuthError("invalid_challenge", "The authorization challenge did not match this request.");
102
+ return yield* new MisoAuthError({
103
+ code: "invalid_challenge",
104
+ reason: "The authorization challenge did not match this request.",
105
+ });
101
106
  }
102
107
  return challenge;
103
- }
104
- async function responseMessage(response) {
105
- const body = await response.clone().json().catch(() => null);
106
- if (typeof body?.error === "object" && typeof body.error.message === "string")
107
- return body.error.message;
108
- if (typeof body?.error === "string")
109
- return body.error;
110
- if (typeof body?.message === "string")
111
- return body.message;
112
- return `Authorization challenge failed (${response.status}).`;
108
+ });
109
+ function responseMessage(response) {
110
+ return Effect.tryPromise(() => response.clone().json()).pipe(Effect.map((body) => body), Effect.orElseSucceed(() => null), Effect.map((body) => {
111
+ if (typeof body?.error === "object" && typeof body.error.message === "string")
112
+ return body.error.message;
113
+ if (typeof body?.error === "string")
114
+ return body.error;
115
+ if (typeof body?.message === "string")
116
+ return body.message;
117
+ return `Authorization challenge failed (${response.status}).`;
118
+ }));
113
119
  }
114
120
  /** Ask Miso to verify the Enoki account and issue the exact message to sign. */
115
- export async function requestAuthorizationChallenge(options) {
116
- const expected = target(options.method, options.path);
121
+ export const requestAuthorizationChallenge = Effect.fn("requestAuthorizationChallenge")(function* (options) {
122
+ const expected = yield* target(options.method, options.path);
117
123
  if (!options.token || !isValidSuiAddress(options.address)) {
118
- throw new MisoAuthError("challenge_rejected", "A valid Enoki token and Sui address are required.");
124
+ return yield* new MisoAuthError({
125
+ code: "challenge_rejected",
126
+ reason: "A valid Enoki token and Sui address are required.",
127
+ });
119
128
  }
120
129
  const apiUrl = new URL(options.apiUrl);
121
130
  const challengeUrl = options.challengeUrl === undefined
122
131
  ? new URL("/platform/auth/challenge", apiUrl.origin)
123
132
  : new URL(options.challengeUrl, apiUrl);
124
133
  const fetcher = options.fetch ?? globalThis.fetch;
125
- const response = await fetcher(challengeUrl, {
126
- method: "POST",
127
- headers: {
128
- Authorization: `Bearer ${options.token}`,
129
- [MISO_AUTH_HEADERS.address]: normalizeSuiAddress(options.address),
130
- "Content-Type": "application/json",
131
- },
132
- body: JSON.stringify(expected),
134
+ const response = yield* Effect.tryPromise({
135
+ try: (signal) => fetcher(challengeUrl, {
136
+ method: "POST",
137
+ headers: {
138
+ Authorization: `Bearer ${options.token}`,
139
+ [MISO_AUTH_HEADERS.address]: normalizeSuiAddress(options.address),
140
+ "Content-Type": "application/json",
141
+ },
142
+ body: JSON.stringify(expected),
143
+ signal,
144
+ }),
145
+ catch: (cause) => new MisoAuthError({ code: "challenge_rejected", reason: "The authorization challenge request failed.", cause }),
133
146
  });
134
147
  if (!response.ok) {
135
- throw new MisoAuthError("challenge_rejected", await responseMessage(response), { status: response.status });
148
+ const reason = yield* responseMessage(response);
149
+ return yield* new MisoAuthError({ code: "challenge_rejected", reason, status: response.status });
136
150
  }
137
- const body = await response.json().catch(() => null);
138
- return parseChallenge(body, {
151
+ const body = yield* Effect.tryPromise(() => response.json()).pipe(Effect.orElseSucceed(() => null));
152
+ return yield* parseChallenge(body, {
139
153
  ...expected,
140
154
  address: options.address,
141
155
  network: options.network,
142
156
  nowMs: options.nowMs,
143
157
  });
144
- }
158
+ });
145
159
  /** Verify the challenge locally, sign it as a Sui personal message, and produce API headers. */
146
- export async function createAuthorizationHeaders(options) {
147
- const challenge = await requestAuthorizationChallenge(options);
148
- let signature;
149
- try {
150
- const signed = await options.signer.signPersonalMessage(new TextEncoder().encode(challenge.payload));
151
- signature = signed.signature;
152
- }
153
- catch (cause) {
154
- throw new MisoAuthError("signing_failed", "The authorization request was not signed.", { cause });
155
- }
160
+ export const createAuthorizationHeaders = Effect.fn("createAuthorizationHeaders")(function* (options) {
161
+ const challenge = yield* requestAuthorizationChallenge(options);
162
+ const signature = yield* Effect.tryPromise({
163
+ try: () => options.signer.signPersonalMessage(new TextEncoder().encode(challenge.payload)),
164
+ catch: (cause) => new MisoAuthError({ code: "signing_failed", reason: "The authorization request was not signed.", cause }),
165
+ }).pipe(Effect.map((signed) => signed.signature));
156
166
  if (!signature) {
157
- throw new MisoAuthError("signing_failed", "The signer returned an empty authorization signature.");
167
+ return yield* new MisoAuthError({
168
+ code: "signing_failed",
169
+ reason: "The signer returned an empty authorization signature.",
170
+ });
158
171
  }
159
172
  return {
160
173
  challenge,
@@ -165,17 +178,20 @@ export async function createAuthorizationHeaders(options) {
165
178
  [MISO_AUTH_HEADERS.issuedAt]: challenge.issuedAt,
166
179
  }),
167
180
  };
168
- }
181
+ });
169
182
  /** Perform a protected Miso API mutation with a fresh Enoki-verified Sui signature. */
170
- export async function authenticatedFetch(input, options) {
183
+ export const authenticatedFetch = Effect.fn("authenticatedFetch")(function* (input, options) {
171
184
  const { auth, challengeUrl, fetch: fetchOption, ...init } = options;
172
185
  const url = new URL(input);
173
186
  const method = (init.method ?? "").toUpperCase();
174
187
  if (url.search || url.hash) {
175
- throw new MisoAuthError("invalid_target", "Authenticated request URLs cannot include a query or fragment.");
188
+ return yield* new MisoAuthError({
189
+ code: "invalid_target",
190
+ reason: "Authenticated request URLs cannot include a query or fragment.",
191
+ });
176
192
  }
177
193
  const fetcher = fetchOption ?? globalThis.fetch;
178
- const authorization = await createAuthorizationHeaders({
194
+ const authorization = yield* createAuthorizationHeaders({
179
195
  apiUrl: url,
180
196
  challengeUrl,
181
197
  fetch: fetcher,
@@ -188,6 +204,9 @@ export async function authenticatedFetch(input, options) {
188
204
  });
189
205
  const headers = new Headers(init.headers);
190
206
  authorization.headers.forEach((value, name) => headers.set(name, value));
191
- return fetcher(url, { ...init, method, headers });
192
- }
207
+ return yield* Effect.tryPromise({
208
+ try: (signal) => fetcher(url, { ...init, method, headers, signal }),
209
+ catch: (cause) => new MisoAuthError({ code: "invalid_target", reason: "The authenticated request failed.", cause }),
210
+ });
211
+ });
193
212
  //# sourceMappingURL=auth.js.map
package/dist/auth.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,sCAAsC;AAEtC,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAqB3E,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;AACvD,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,GAAG,KAAK,CAAC;AAEvD,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,OAAO,EAAE,eAAe;IACxB,SAAS,EAAE,iBAAiB;IAC5B,QAAQ,EAAE,iBAAiB;CACnB,CAAC;AAQX,MAAM,OAAO,aAAc,SAAQ,KAAK;IAC7B,IAAI,CAAoB;IACxB,MAAM,CAAU;IAEzB,YAAY,IAAuB,EAAE,OAAe,EAAE,OAAO,GAAyC,EAAE;QACtG,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACnF,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC/B,CAAC;CACF;AAED,sFAAsF;AACtF,MAAM,UAAU,4BAA4B,CAAC,MAA8B;IACzE,OAAO;QACL,8BAA8B;QAC9B,EAAE;QACF,WAAW,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE;QACxC,SAAS,MAAM,CAAC,IAAI,EAAE;QACtB,YAAY,MAAM,CAAC,OAAO,EAAE;QAC5B,YAAY,MAAM,CAAC,OAAO,EAAE;QAC5B,cAAc,MAAM,CAAC,QAAQ,EAAE;KAChC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,MAAc,EAAE,IAAY;IACrE,OAAO,CACL,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACjE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAC7B,IAAI,CAAC,MAAM,IAAI,KAAK;QACpB,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CACvB,CAAC;AACJ,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,+BAA+B,CAAC,KAAc,EAAE,KAAK,GAAW,IAAI,CAAC,GAAG,EAAE;IACxF,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9C,IACE,UAAU,GAAG,KAAK,GAAG,4BAA4B;QACjD,KAAK,GAAG,UAAU,GAAG,wBAAwB,EAC7C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;IACrD,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AAChD,CAAC;AAED,SAAS,MAAM,CAAC,MAAc,EAAE,IAAY;IAC1C,MAAM,UAAU,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC;IAC1D,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,aAAa,CAAC,gBAAgB,EAAE,6DAA6D,CAAC,CAAC;IAC3G,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,cAAc,CACrB,KAAc,EACd,QAAkG;IAElG,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,aAAa,CAAC,mBAAmB,EAAE,sDAAsD,CAAC,CAAC;IACvG,CAAC;IACD,MAAM,IAAI,GAAG,KAA+D,CAAC;IAC7E,IACE,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;QAChC,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ;QAC/B,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;QAC7B,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;QAChC,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;QAChC,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ;QACjC,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ;QAClC,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC;QAChC,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,EAC1D,CAAC;QACD,MAAM,IAAI,aAAa,CAAC,mBAAmB,EAAE,sDAAsD,CAAC,CAAC;IACvG,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAAG,+BAA+B,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/C,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3D,MAAM,eAAe,GAAG,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC9D,MAAM,SAAS,GAA2B;QACxC,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,OAAO,EAAE,gBAAgB;QACzB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,SAAS,EAAE,IAAI,CAAC,SAAS;KAC1B,CAAC;IACF,MAAM,kBAAkB,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAEnG,IACE,CAAC,QAAQ;QACT,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM;QAC/B,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI;QAC3B,gBAAgB,KAAK,eAAe;QACpC,CAAC,QAAQ,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO,CAAC;QACrE,IAAI,CAAC,SAAS,KAAK,kBAAkB;QACrC,WAAW,IAAI,KAAK;QACpB,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,wBAAwB;QAC7D,IAAI,CAAC,OAAO,KAAK,4BAA4B,CAAC,SAAS,CAAC,EACxD,CAAC;QACD,MAAM,IAAI,aAAa,CAAC,mBAAmB,EAAE,yDAAyD,CAAC,CAAC;IAC1G,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,QAAkB;IAC/C,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAGnD,CAAC;IACT,IAAI,OAAO,IAAI,EAAE,KAAK,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;IACzG,IAAI,OAAO,IAAI,EAAE,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC;IACvD,IAAI,OAAO,IAAI,EAAE,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC;IAC3D,OAAO,mCAAmC,QAAQ,CAAC,MAAM,IAAI,CAAC;AAChE,CAAC;AAcD,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,OAA6C;IAE7C,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,aAAa,CAAC,oBAAoB,EAAE,mDAAmD,CAAC,CAAC;IACrG,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,KAAK,SAAS;QACrD,CAAC,CAAC,IAAI,GAAG,CAAC,0BAA0B,EAAE,MAAM,CAAC,MAAM,CAAC;QACpD,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC;IAClD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,YAAY,EAAE;QAC3C,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,OAAO,CAAC,KAAK,EAAE;YACxC,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC;YACjE,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;KAC/B,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,aAAa,CAAC,oBAAoB,EAAE,MAAM,eAAe,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9G,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACrD,OAAO,cAAc,CAAC,IAAI,EAAE;QAC1B,GAAG,QAAQ;QACX,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CAAC;AACL,CAAC;AAMD,gGAAgG;AAChG,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,OAA0C;IAE1C,MAAM,SAAS,GAAG,MAAM,6BAA6B,CAAC,OAAO,CAAC,CAAC;IAC/D,IAAI,SAAiB,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QACrG,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,aAAa,CAAC,gBAAgB,EAAE,2CAA2C,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACpG,CAAC;IACD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,aAAa,CAAC,gBAAgB,EAAE,uDAAuD,CAAC,CAAC;IACrG,CAAC;IACD,OAAO;QACL,SAAS;QACT,OAAO,EAAE,IAAI,OAAO,CAAC;YACnB,aAAa,EAAE,UAAU,OAAO,CAAC,KAAK,EAAE;YACxC,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,OAAO;YAC9C,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,SAAS;YACxC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,QAAQ;SACjD,CAAC;KACH,CAAC;AACJ,CAAC;AAaD,uFAAuF;AACvF,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAmB,EACnB,OAAkC;IAElC,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IACpE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAC3B,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACjD,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QAC3B,MAAM,IAAI,aAAa,CAAC,gBAAgB,EAAE,gEAAgE,CAAC,CAAC;IAC9G,CAAC;IACD,MAAM,OAAO,GAAG,WAAW,IAAI,UAAU,CAAC,KAAK,CAAC;IAChD,MAAM,aAAa,GAAG,MAAM,0BAA0B,CAAC;QACrD,MAAM,EAAE,GAAG;QACX,YAAY;QACZ,KAAK,EAAE,OAAO;QACd,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,MAAM;QACN,IAAI,EAAE,GAAG,CAAC,QAAQ;KACnB,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACzE,OAAO,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;AACpD,CAAC"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
package/dist/catalog.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import type { ClientWithCoreApi } from "@mysten/sui/client";
2
- import type { SuiGraphQLClient } from "@mysten/sui/graphql";
1
+ import { Effect } from "effect";
3
2
  import { type Recording } from "@misofm/musicos";
3
+ import { SuiClient, SuiGraphQL, SuiRpcError, type BcsDecodeError, type ObjectNotFoundError } from "@misofm/effect";
4
4
  import { type CreditView, type RecordingCreditsView } from "./credits.ts";
5
5
  export interface GetReleaseTrackCreditsOptions {
6
6
  /** Core Miso package that defines Composition and Recording. */
@@ -24,13 +24,13 @@ export interface ReleaseTrackCredits {
24
24
  * are then resolved concurrently, deduplicated, and all composition credit
25
25
  * fields are fetched concurrently as well.
26
26
  */
27
- export declare function getReleaseTrackCredits(client: ClientWithCoreApi, graphqlClient: SuiGraphQLClient, releaseId: string, options: GetReleaseTrackCreditsOptions): Promise<Record<string, ReleaseTrackCredits>>;
27
+ export declare const getReleaseTrackCredits: (releaseId: string, options: GetReleaseTrackCreditsOptions) => Effect.Effect<Record<string, ReleaseTrackCredits>, BcsDecodeError | ObjectNotFoundError | SuiRpcError, SuiClient | SuiGraphQL>;
28
28
  /**
29
29
  * Composition and recording credits for the supplied recordings, keyed by
30
30
  * recording id. This form is intended for consumers that already loaded a
31
31
  * release and do not need to fetch it again.
32
32
  */
33
- export declare function getTrackCreditsByRecordingIds(client: ClientWithCoreApi, graphqlClient: SuiGraphQLClient, recordingIdsInput: readonly string[], options: GetReleaseTrackCreditsOptions): Promise<Record<string, ReleaseTrackCredits>>;
33
+ export declare const getTrackCreditsByRecordingIds: (recordingIdsInput: readonly string[], options: GetReleaseTrackCreditsOptions) => Effect.Effect<Record<string, ReleaseTrackCredits>, BcsDecodeError | SuiRpcError, SuiClient | SuiGraphQL>;
34
34
  export interface GetAdministeredRecordingsOptions {
35
35
  /**
36
36
  * @deprecated Resolution is batched; this option is retained for source
@@ -44,5 +44,5 @@ export interface GetAdministeredRecordingsOptions {
44
44
  * Three bounded stages: list the owner's `RecordingAdminCap`s, resolve every
45
45
  * share type in one aliased GraphQL query, then batch-fetch the recordings.
46
46
  */
47
- export declare function getAdministeredRecordings(client: ClientWithCoreApi, graphqlClient: SuiGraphQLClient, owner: string, misoPackageId: string, options?: GetAdministeredRecordingsOptions): Promise<Recording[]>;
47
+ export declare const getAdministeredRecordings: (owner: string, misoPackageId: string, options?: GetAdministeredRecordingsOptions | undefined) => Effect.Effect<Recording[], BcsDecodeError | SuiRpcError, SuiClient | SuiGraphQL>;
48
48
  //# sourceMappingURL=catalog.d.ts.map