@misofm/partyos 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 (58) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +50 -0
  3. package/dist/client.d.ts +84 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +109 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/contracts/partyos/deps/sui/vec_set.d.ts +21 -0
  8. package/dist/contracts/partyos/deps/sui/vec_set.d.ts.map +1 -0
  9. package/dist/contracts/partyos/deps/sui/vec_set.js +20 -0
  10. package/dist/contracts/partyos/deps/sui/vec_set.js.map +1 -0
  11. package/dist/contracts/partyos/party.d.ts +481 -0
  12. package/dist/contracts/partyos/party.d.ts.map +1 -0
  13. package/dist/contracts/partyos/party.js +527 -0
  14. package/dist/contracts/partyos/party.js.map +1 -0
  15. package/dist/contracts/utils/index.d.ts +104 -0
  16. package/dist/contracts/utils/index.d.ts.map +1 -0
  17. package/dist/contracts/utils/index.js +272 -0
  18. package/dist/contracts/utils/index.js.map +1 -0
  19. package/dist/contracts.d.ts +12 -0
  20. package/dist/contracts.d.ts.map +1 -0
  21. package/dist/contracts.js +21 -0
  22. package/dist/contracts.js.map +1 -0
  23. package/dist/deployments.d.ts +33 -0
  24. package/dist/deployments.d.ts.map +1 -0
  25. package/dist/deployments.js +63 -0
  26. package/dist/deployments.js.map +1 -0
  27. package/dist/index.d.ts +7 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +14 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/internal.d.ts +5 -0
  32. package/dist/internal.d.ts.map +1 -0
  33. package/dist/internal.js +24 -0
  34. package/dist/internal.js.map +1 -0
  35. package/dist/queries.d.ts +37 -0
  36. package/dist/queries.d.ts.map +1 -0
  37. package/dist/queries.js +123 -0
  38. package/dist/queries.js.map +1 -0
  39. package/dist/transactions.d.ts +74 -0
  40. package/dist/transactions.d.ts.map +1 -0
  41. package/dist/transactions.js +85 -0
  42. package/dist/transactions.js.map +1 -0
  43. package/dist/types.d.ts +12 -0
  44. package/dist/types.d.ts.map +1 -0
  45. package/dist/types.js +4 -0
  46. package/dist/types.js.map +1 -0
  47. package/package.json +97 -0
  48. package/src/client.ts +165 -0
  49. package/src/contracts/partyos/deps/sui/vec_set.ts +22 -0
  50. package/src/contracts/partyos/party.ts +798 -0
  51. package/src/contracts/utils/index.ts +428 -0
  52. package/src/contracts.ts +31 -0
  53. package/src/deployments.ts +90 -0
  54. package/src/index.ts +15 -0
  55. package/src/internal.ts +30 -0
  56. package/src/queries.ts +167 -0
  57. package/src/transactions.ts +167 -0
  58. package/src/types.ts +18 -0
@@ -0,0 +1,123 @@
1
+ // Copyright (c) Miso Labs, Inc.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import { deriveDynamicFieldID, deriveObjectID, normalizeStructTag } from "@mysten/sui/utils";
4
+ import { bcs } from "@mysten/sui/bcs";
5
+ import { MembershipKey as MembershipKeyBcs, Party as PartyBcs, PendingInviteKey as PendingInviteKeyBcs, PendingMembershipKey as PendingMembershipKeyBcs, } from "./contracts/partyos/party.js";
6
+ import { keyBytes, mapParty } from "./internal.js";
7
+ /** True for the Core API's "object does not exist" error (a missing dynamic field). */
8
+ export function isNotFound(e) {
9
+ const msg = e instanceof Error ? e.message : String(e);
10
+ return /not\s*found|does not exist|no object/i.test(msg);
11
+ }
12
+ /**
13
+ * Reads an object's BCS content, or null when it does not exist. A missing
14
+ * object (e.g. an unset dynamic field) surfaces as a thrown "not found" from the
15
+ * Core API, not an empty result, so optional reads can treat it as absence.
16
+ */
17
+ export async function getObjectContent(client, objectId) {
18
+ try {
19
+ const { object } = await client.core.getObject({ objectId, include: { content: true } });
20
+ return object?.content ?? null;
21
+ }
22
+ catch (e) {
23
+ if (isNotFound(e))
24
+ return null;
25
+ throw e;
26
+ }
27
+ }
28
+ /** The `Party` struct tag of one partyos deployment. */
29
+ export function partyType(partyPackageId) {
30
+ return normalizeStructTag(`${partyPackageId}::party::Party`);
31
+ }
32
+ // A Party from another partyos package (a previous generation) parses
33
+ // identically but no deployed package accepts it, so the object's type is
34
+ // checked against the deployment before its content is trusted.
35
+ function assertPartyType(objectId, type, partyPackageId) {
36
+ const expected = partyType(partyPackageId);
37
+ if (type === undefined || normalizeStructTag(type) !== expected) {
38
+ throw new Error(`Object ${objectId} is ${type ?? "of unknown type"}, not a ${expected}` +
39
+ (type?.endsWith("::party::Party") ? " (a Party from a different partyos deployment)" : ""));
40
+ }
41
+ }
42
+ /** Fetches and parses a shared `Party` object of this deployment's partyos package. */
43
+ export async function getPartyById(client, partyId, partyPackageId) {
44
+ let object;
45
+ try {
46
+ ({ object } = await client.core.getObject({ objectId: partyId, include: { content: true } }));
47
+ }
48
+ catch (e) {
49
+ if (isNotFound(e))
50
+ throw new Error(`Party not found: ${partyId}`);
51
+ throw e;
52
+ }
53
+ if (!object?.content)
54
+ throw new Error(`Party not found: ${partyId}`);
55
+ assertPartyType(partyId, object.type, partyPackageId);
56
+ return mapParty(partyId, PartyBcs.parse(object.content));
57
+ }
58
+ /**
59
+ * Fetches and parses multiple shared `Party` objects in one Core request.
60
+ * Missing objects are skipped; an object of another type is an error.
61
+ */
62
+ export async function getPartiesByIds(client, partyIds, partyPackageId) {
63
+ if (partyIds.length === 0)
64
+ return {};
65
+ const { objects } = await client.core.getObjects({
66
+ objectIds: [...new Set(partyIds)],
67
+ include: { content: true },
68
+ });
69
+ const parties = {};
70
+ for (const obj of objects) {
71
+ if (obj instanceof Error)
72
+ continue;
73
+ assertPartyType(obj.objectId, obj.type, partyPackageId);
74
+ parties[obj.objectId] = mapParty(obj.objectId, PartyBcs.parse(obj.content));
75
+ }
76
+ return parties;
77
+ }
78
+ /** Derives a party's `PartyAdminCap` id (it is a `derived_object` off the party UID). */
79
+ export function derivePartyAdminCapId(partyId, partyPackageId) {
80
+ return deriveObjectID(partyId, `${partyPackageId}::party::PartyAdminCapKey`, bcs.Address.serialize(partyId).toBytes());
81
+ }
82
+ // === Group membership reads ===
83
+ /** Collects the ids stored in every dynamic-field key of `parentId` whose type ends with `keySuffix`. */
84
+ async function collectKeyIds(client, parentId, keySuffix, codec) {
85
+ const ids = [];
86
+ let cursor;
87
+ do {
88
+ const page = await client.core.listDynamicFields({ parentId, cursor: cursor ?? undefined });
89
+ for (const f of page.dynamicFields) {
90
+ if (typeof f.name?.type === "string" && f.name.type.endsWith(keySuffix) && f.name.bcs != null) {
91
+ const [id] = codec.parse(keyBytes(f.name.bcs));
92
+ ids.push(String(id));
93
+ }
94
+ }
95
+ cursor = page.hasNextPage ? page.cursor : null;
96
+ } while (cursor);
97
+ return ids;
98
+ }
99
+ /**
100
+ * The group ids a party currently belongs to, read from its `MembershipKey`
101
+ * dynamic fields (the member-side record). No indexer required.
102
+ */
103
+ export async function getMemberships(client, partyId) {
104
+ return collectKeyIds(client, partyId, "::party::MembershipKey", MembershipKeyBcs);
105
+ }
106
+ /** The member ids invited to a group but not yet accepted (its `PendingInviteKey` fields). */
107
+ export async function getPendingInvites(client, groupId) {
108
+ return collectKeyIds(client, groupId, "::party::PendingInviteKey", PendingInviteKeyBcs);
109
+ }
110
+ /**
111
+ * The group ids that have invited a party but are still awaiting its response.
112
+ * This reads the member-side `PendingMembershipKey` inbox index, so it only
113
+ * enumerates the target party's dynamic fields.
114
+ */
115
+ export async function getPendingMemberships(client, partyId) {
116
+ return collectKeyIds(client, partyId, "::party::PendingMembershipKey", PendingMembershipKeyBcs);
117
+ }
118
+ /** Whether `memberId` currently holds a membership record for `groupId`. */
119
+ export async function isMember(client, memberId, groupId, partyPackageId) {
120
+ const fieldId = deriveDynamicFieldID(memberId, `${partyPackageId}::party::MembershipKey`, MembershipKeyBcs.serialize([groupId]).toBytes());
121
+ return (await getObjectContent(client, fieldId)) !== null;
122
+ }
123
+ //# sourceMappingURL=queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import type { Transaction } from "@mysten/sui/transactions";
2
+ export type TxThunk = (tx: Transaction) => void | Promise<void>;
3
+ export interface CreatePartyParams {
4
+ /** Human-readable party name (not verified; app-layer verifies). */
5
+ name: string;
6
+ /** Address that receives the PartyAdminCap. */
7
+ recipient: string;
8
+ partyPackageId: string;
9
+ }
10
+ /** Creates an individual party, shares it, and transfers its admin cap to `recipient`. */
11
+ export declare function createIndividualParty(params: CreatePartyParams): TxThunk;
12
+ /** Creates a group party (empty member set), shares it, transfers its admin cap. */
13
+ export declare function createGroupParty(params: CreatePartyParams): TxThunk;
14
+ export interface InvitePartyParams {
15
+ groupId: string;
16
+ groupCapId: string;
17
+ /** The individual party (shared object id) to invite. */
18
+ memberId: string;
19
+ partyPackageId: string;
20
+ }
21
+ /** Invites an individual party to a group (gated by the group's admin cap). */
22
+ export declare function inviteParty(params: InvitePartyParams): TxThunk;
23
+ export interface AcceptInviteParams {
24
+ groupId: string;
25
+ memberId: string;
26
+ /** The member party's admin cap id (proves consent). */
27
+ memberCapId: string;
28
+ partyPackageId: string;
29
+ }
30
+ /** Accepts a pending invite, joining the member to the group (member's cap). */
31
+ export declare function acceptInvite(params: AcceptInviteParams): TxThunk;
32
+ export interface DeclineInviteParams {
33
+ groupId: string;
34
+ /** The invited individual party (shared object id). */
35
+ memberId: string;
36
+ memberCapId: string;
37
+ partyPackageId: string;
38
+ }
39
+ /** Declines a pending invite (member's cap). */
40
+ export declare function declineInvite(params: DeclineInviteParams): TxThunk;
41
+ export interface RevokeInviteParams {
42
+ groupId: string;
43
+ /** The invited individual party (shared object id). */
44
+ memberId: string;
45
+ groupCapId: string;
46
+ partyPackageId: string;
47
+ }
48
+ /** Revokes a pending invite (group's admin cap). */
49
+ export declare function revokeInvite(params: RevokeInviteParams): TxThunk;
50
+ export interface LeaveGroupParams {
51
+ groupId: string;
52
+ memberId: string;
53
+ memberCapId: string;
54
+ partyPackageId: string;
55
+ }
56
+ /** Leaves a group, authorized by the member's own admin cap. */
57
+ export declare function leaveGroup(params: LeaveGroupParams): TxThunk;
58
+ export interface RemoveMemberParams {
59
+ groupId: string;
60
+ groupCapId: string;
61
+ memberId: string;
62
+ partyPackageId: string;
63
+ }
64
+ /** Evicts a member from a group (group's admin cap); scrubs the member's record too. */
65
+ export declare function removeMember(params: RemoveMemberParams): TxThunk;
66
+ export interface SetNameParams {
67
+ partyId: string;
68
+ capId: string;
69
+ name: string;
70
+ partyPackageId: string;
71
+ }
72
+ /** Sets the party's human-readable name. */
73
+ export declare function setName(params: SetNameParams): TxThunk;
74
+ //# sourceMappingURL=transactions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactions.d.ts","sourceRoot":"","sources":["../src/transactions.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAG5D,MAAM,MAAM,OAAO,GAAG,CAAC,EAAE,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEhE,MAAM,WAAW,iBAAiB;IAChC,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,0FAA0F;AAC1F,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAOxE;AAED,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAOnE;AAMD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,+EAA+E;AAC/E,wBAAgB,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAO9D;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,gFAAgF;AAChF,wBAAgB,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAOhE;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,gDAAgD;AAChD,wBAAgB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAOlE;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,oDAAoD;AACpD,wBAAgB,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAOhE;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,gEAAgE;AAChE,wBAAgB,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAO5D;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wFAAwF;AACxF,wBAAgB,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAOhE;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,4CAA4C;AAC5C,wBAAgB,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAOtD"}
@@ -0,0 +1,85 @@
1
+ // Copyright (c) Miso Labs, Inc.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import * as party from "./contracts/partyos/party.js";
4
+ /** Creates an individual party, shares it, and transfers its admin cap to `recipient`. */
5
+ export function createIndividualParty(params) {
6
+ return (tx) => {
7
+ const kind = tx.add(party.newIndividualKind({ package: params.partyPackageId }));
8
+ const res = tx.add(party._new({ package: params.partyPackageId, arguments: [kind, params.name] }));
9
+ tx.add(party.share({ package: params.partyPackageId, arguments: [res[0], res[1]] }));
10
+ tx.transferObjects([res[1]], params.recipient);
11
+ };
12
+ }
13
+ /** Creates a group party (empty member set), shares it, transfers its admin cap. */
14
+ export function createGroupParty(params) {
15
+ return (tx) => {
16
+ const kind = tx.add(party.newGroupKind({ package: params.partyPackageId }));
17
+ const res = tx.add(party._new({ package: params.partyPackageId, arguments: [kind, params.name] }));
18
+ tx.add(party.share({ package: params.partyPackageId, arguments: [res[0], res[1]] }));
19
+ tx.transferObjects([res[1]], params.recipient);
20
+ };
21
+ }
22
+ /** Invites an individual party to a group (gated by the group's admin cap). */
23
+ export function inviteParty(params) {
24
+ return (tx) => {
25
+ tx.add(party.inviteParty({
26
+ package: params.partyPackageId,
27
+ arguments: [params.groupId, params.memberId, params.groupCapId],
28
+ }));
29
+ };
30
+ }
31
+ /** Accepts a pending invite, joining the member to the group (member's cap). */
32
+ export function acceptInvite(params) {
33
+ return (tx) => {
34
+ tx.add(party.acceptInvite({
35
+ package: params.partyPackageId,
36
+ arguments: [params.groupId, params.memberId, params.memberCapId],
37
+ }));
38
+ };
39
+ }
40
+ /** Declines a pending invite (member's cap). */
41
+ export function declineInvite(params) {
42
+ return (tx) => {
43
+ tx.add(party.declineInvite({
44
+ package: params.partyPackageId,
45
+ arguments: [params.groupId, params.memberId, params.memberCapId],
46
+ }));
47
+ };
48
+ }
49
+ /** Revokes a pending invite (group's admin cap). */
50
+ export function revokeInvite(params) {
51
+ return (tx) => {
52
+ tx.add(party.revokeInvite({
53
+ package: params.partyPackageId,
54
+ arguments: [params.groupId, params.memberId, params.groupCapId],
55
+ }));
56
+ };
57
+ }
58
+ /** Leaves a group, authorized by the member's own admin cap. */
59
+ export function leaveGroup(params) {
60
+ return (tx) => {
61
+ tx.add(party.leave({
62
+ package: params.partyPackageId,
63
+ arguments: [params.groupId, params.memberId, params.memberCapId],
64
+ }));
65
+ };
66
+ }
67
+ /** Evicts a member from a group (group's admin cap); scrubs the member's record too. */
68
+ export function removeMember(params) {
69
+ return (tx) => {
70
+ tx.add(party.removeMember({
71
+ package: params.partyPackageId,
72
+ arguments: [params.groupId, params.groupCapId, params.memberId],
73
+ }));
74
+ };
75
+ }
76
+ /** Sets the party's human-readable name. */
77
+ export function setName(params) {
78
+ return (tx) => {
79
+ tx.add(party.setName({
80
+ package: params.partyPackageId,
81
+ arguments: [params.partyId, params.capId, params.name],
82
+ }));
83
+ };
84
+ }
85
+ //# sourceMappingURL=transactions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactions.js","sourceRoot":"","sources":["../src/transactions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export type PartyKind = "individual" | "group";
2
+ export interface Party {
3
+ id: string;
4
+ kind: PartyKind;
5
+ /** Human-readable name (not verified). */
6
+ name: string;
7
+ /** Member party ids — present only when `kind === "group"`. */
8
+ members?: string[];
9
+ /** Unix ms when the party was created. */
10
+ createdAtMs: number;
11
+ }
12
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,OAAO,CAAC;AAE/C,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAC;CACrB"}
package/dist/types.js ADDED
@@ -0,0 +1,4 @@
1
+ // Copyright (c) Miso Labs, Inc.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ export {};
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,sCAAsC"}
package/package.json ADDED
@@ -0,0 +1,97 @@
1
+ {
2
+ "name": "@misofm/partyos",
3
+ "version": "0.1.0",
4
+ "packageManager": "bun@1.4.0",
5
+ "description": "Typed bindings, queries, and PTB builders for the PartyOS object model (Party identity, admin caps, and group membership) on Sui.",
6
+ "license": "Apache-2.0",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/misofm/sdks.git"
10
+ },
11
+ "homepage": "https://github.com/misofm/sdks#readme",
12
+ "bugs": {
13
+ "url": "https://github.com/misofm/sdks/issues"
14
+ },
15
+ "keywords": [
16
+ "sui",
17
+ "move",
18
+ "miso",
19
+ "partyos",
20
+ "party",
21
+ "identity",
22
+ "blockchain",
23
+ "sdk"
24
+ ],
25
+ "publishConfig": {
26
+ "access": "public"
27
+ },
28
+ "module": "./dist/index.js",
29
+ "types": "./dist/index.d.ts",
30
+ "type": "module",
31
+ "sideEffects": false,
32
+ "scripts": {
33
+ "typecheck": "tsc --noEmit",
34
+ "test": "bun test",
35
+ "docs": "typedoc",
36
+ "build": "rm -rf dist && tsc -p tsconfig.build.json",
37
+ "prepack": "rm -rf dist && tsc -p tsconfig.build.json",
38
+ "prepare": "rm -rf dist && tsc -p tsconfig.build.json --noCheck"
39
+ },
40
+ "exports": {
41
+ ".": {
42
+ "types": "./dist/index.d.ts",
43
+ "default": "./dist/index.js"
44
+ },
45
+ "./client": {
46
+ "types": "./dist/client.d.ts",
47
+ "default": "./dist/client.js"
48
+ },
49
+ "./deployments": {
50
+ "types": "./dist/deployments.d.ts",
51
+ "default": "./dist/deployments.js"
52
+ },
53
+ "./queries": {
54
+ "types": "./dist/queries.d.ts",
55
+ "default": "./dist/queries.js"
56
+ },
57
+ "./transactions": {
58
+ "types": "./dist/transactions.d.ts",
59
+ "default": "./dist/transactions.js"
60
+ },
61
+ "./types": {
62
+ "types": "./dist/types.d.ts",
63
+ "default": "./dist/types.js"
64
+ },
65
+ "./contracts": {
66
+ "types": "./dist/contracts.d.ts",
67
+ "default": "./dist/contracts.js"
68
+ },
69
+ "./contracts/*": {
70
+ "types": "./dist/contracts/*.d.ts",
71
+ "default": "./dist/contracts/*.js"
72
+ },
73
+ "./package.json": "./package.json"
74
+ },
75
+ "files": [
76
+ "dist",
77
+ "src",
78
+ "README.md",
79
+ "LICENSE",
80
+ "package.json"
81
+ ],
82
+ "dependencies": {
83
+ "@mysten/bcs": "^2.1.1"
84
+ },
85
+ "devDependencies": {
86
+ "@mysten/sui": "2.29.0",
87
+ "@types/bun": "^1.4.0",
88
+ "typedoc": "^0.28.20",
89
+ "typedoc-plugin-markdown": "^4.13.0",
90
+ "typescript": "^7.0.2"
91
+ },
92
+ "peerDependencies": {
93
+ "@mysten/sui": "2.29.0",
94
+ "typescript": "^5.7 || ^6 || ^7"
95
+ },
96
+ "main": "./dist/index.js"
97
+ }
package/src/client.ts ADDED
@@ -0,0 +1,165 @@
1
+ // Copyright (c) Miso Labs, Inc.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ // Party queries and transaction builders bound to one verified partyos
5
+ // deployment. Consumers reach this through `client.partyos` after
6
+ // `$extend(partyos())`, or construct `PartyosClient` directly.
7
+
8
+ import type { ClientWithCoreApi, SuiClientRegistration } from "@mysten/sui/client";
9
+ import { getPartyDeployment, normalizePartyDeployment, type PartyDeployment } from "./deployments.ts";
10
+ import { PARTY_REF_RETURNING_CALLS } from "./contracts.ts";
11
+ import * as queries from "./queries.ts";
12
+ import * as transactions from "./transactions.ts";
13
+ import type { TxThunk } from "./transactions.ts";
14
+ import type { Party } from "./types.ts";
15
+ import * as partyMod from "./contracts/partyos/party.ts";
16
+
17
+ type BoundMoveFunction<F> = F extends (options: infer Options) => infer Result
18
+ ? Options extends { package?: unknown }
19
+ ? (options: Omit<Options, "package">) => Result
20
+ : F
21
+ : F;
22
+ type BoundModule<M extends object, Removed extends PropertyKey> = {
23
+ [Key in Exclude<keyof M, Removed>]: BoundMoveFunction<M[Key]>;
24
+ };
25
+
26
+ /** Defaults generated calls to one package and removes reference-returning calls. */
27
+ export function bindModulePackage<M extends object, K extends readonly (keyof M)[]>(
28
+ mod: M,
29
+ pkg: string,
30
+ unavailable: K = [] as unknown as K,
31
+ ): BoundModule<M, K[number]> {
32
+ const out: Record<string, unknown> = {};
33
+ for (const [key, value] of Object.entries({ ...mod })) {
34
+ if ((unavailable as readonly string[]).includes(key)) continue;
35
+ out[key] =
36
+ typeof value === "function"
37
+ ? (options: { package?: string }) => (value as (o: unknown) => unknown)({ package: pkg, ...options })
38
+ : value;
39
+ }
40
+ return out as BoundModule<M, K[number]>;
41
+ }
42
+
43
+ export interface PartyosOptions<Name extends string = "partyos"> {
44
+ /** Name for the client extension. Defaults to "partyos". */
45
+ name?: Name;
46
+ /** Explicit deployment. Omit only when this SDK bundles a verified manifest for the client's network. */
47
+ deployment?: PartyDeployment;
48
+ }
49
+
50
+ /**
51
+ * Creates a PartyOS client extension for use with `$extend()`.
52
+ *
53
+ * @example
54
+ * ```ts
55
+ * const client = new SuiGrpcClient({ network: "testnet" }).$extend(partyos());
56
+ * const party = await client.partyos.getPartyById("0x...");
57
+ * ```
58
+ */
59
+ export function partyos<const Name extends string = "partyos">(
60
+ options: PartyosOptions<Name> = {},
61
+ ): SuiClientRegistration<ClientWithCoreApi, Name, PartyosClient> {
62
+ const name = (options.name ?? "partyos") as Name;
63
+ return {
64
+ name,
65
+ register: (client) =>
66
+ new PartyosClient(
67
+ client,
68
+ options.deployment ? normalizePartyDeployment(options.deployment) : getPartyDeployment(client.network),
69
+ ),
70
+ };
71
+ }
72
+
73
+ /** Package-bound PartyOS client. */
74
+ export class PartyosClient {
75
+ #client: ClientWithCoreApi;
76
+ #deployment: PartyDeployment;
77
+
78
+ constructor(client: ClientWithCoreApi, deployment: PartyDeployment) {
79
+ this.#client = client;
80
+ this.#deployment = normalizePartyDeployment(deployment);
81
+ }
82
+
83
+ /** The exact deployment selected for this client. */
84
+ get deployment(): PartyDeployment {
85
+ return this.#deployment;
86
+ }
87
+
88
+ get #pkg(): string {
89
+ return this.#deployment.partyos;
90
+ }
91
+
92
+ // === Queries ===
93
+
94
+ async getPartyById(partyId: string): Promise<Party> {
95
+ return queries.getPartyById(this.#client, partyId, this.#pkg);
96
+ }
97
+ async getPartiesByIds(partyIds: readonly string[]): Promise<Partial<Record<string, Party>>> {
98
+ return queries.getPartiesByIds(this.#client, partyIds, this.#pkg);
99
+ }
100
+ derivePartyAdminCapId(partyId: string): string {
101
+ return queries.derivePartyAdminCapId(partyId, this.#pkg);
102
+ }
103
+ /** Group ids a party belongs to (member-side membership records). */
104
+ async getMemberships(partyId: string): Promise<string[]> {
105
+ return queries.getMemberships(this.#client, partyId);
106
+ }
107
+ /** Member ids invited to a group but not yet accepted. */
108
+ async getPendingInvites(groupId: string): Promise<string[]> {
109
+ return queries.getPendingInvites(this.#client, groupId);
110
+ }
111
+ /** Group ids that have invited this party but are awaiting its response. */
112
+ async getPendingMemberships(partyId: string): Promise<string[]> {
113
+ return queries.getPendingMemberships(this.#client, partyId);
114
+ }
115
+ /** Whether a party is a member of a group. */
116
+ async isMember(memberId: string, groupId: string): Promise<boolean> {
117
+ return queries.isMember(this.#client, memberId, groupId, this.#pkg);
118
+ }
119
+
120
+ // === Transaction builders (thunks; the package id is bound from the client) ===
121
+
122
+ get tx() {
123
+ const pkg = this.#pkg;
124
+ return {
125
+ createIndividualParty: (p: Omit<transactions.CreatePartyParams, "partyPackageId">): TxThunk =>
126
+ transactions.createIndividualParty({ ...p, partyPackageId: pkg }),
127
+ createGroupParty: (p: Omit<transactions.CreatePartyParams, "partyPackageId">): TxThunk =>
128
+ transactions.createGroupParty({ ...p, partyPackageId: pkg }),
129
+ setName: (p: Omit<transactions.SetNameParams, "partyPackageId">): TxThunk =>
130
+ transactions.setName({ ...p, partyPackageId: pkg }),
131
+ inviteParty: (p: Omit<transactions.InvitePartyParams, "partyPackageId">): TxThunk =>
132
+ transactions.inviteParty({ ...p, partyPackageId: pkg }),
133
+ acceptInvite: (p: Omit<transactions.AcceptInviteParams, "partyPackageId">): TxThunk =>
134
+ transactions.acceptInvite({ ...p, partyPackageId: pkg }),
135
+ declineInvite: (p: Omit<transactions.DeclineInviteParams, "partyPackageId">): TxThunk =>
136
+ transactions.declineInvite({ ...p, partyPackageId: pkg }),
137
+ revokeInvite: (p: Omit<transactions.RevokeInviteParams, "partyPackageId">): TxThunk =>
138
+ transactions.revokeInvite({ ...p, partyPackageId: pkg }),
139
+ leaveGroup: (p: Omit<transactions.LeaveGroupParams, "partyPackageId">): TxThunk =>
140
+ transactions.leaveGroup({ ...p, partyPackageId: pkg }),
141
+ removeMember: (p: Omit<transactions.RemoveMemberParams, "partyPackageId">): TxThunk =>
142
+ transactions.removeMember({ ...p, partyPackageId: pkg }),
143
+ };
144
+ }
145
+
146
+ // === Generated type-safe Move calls (for tx.add) ===
147
+
148
+ get call() {
149
+ return {
150
+ party: bindModulePackage(partyMod, this.#pkg, PARTY_REF_RETURNING_CALLS),
151
+ };
152
+ }
153
+
154
+ // === Generated BCS structs (for parsing object/event content) ===
155
+
156
+ get bcs() {
157
+ return {
158
+ Party: partyMod.Party,
159
+ PartyAdminCap: partyMod.PartyAdminCap,
160
+ };
161
+ }
162
+ }
163
+
164
+ /** @deprecated Use `PartyosClient`. Retained for callers migrating from `@misofm/protocol/party`. */
165
+ export { PartyosClient as PartyProtocolClient };
@@ -0,0 +1,22 @@
1
+ /**************************************************************
2
+ * THIS FILE IS GENERATED AND SHOULD NOT BE MANUALLY MODIFIED *
3
+ **************************************************************/
4
+ import { type BcsType, bcs } from '@mysten/sui/bcs';
5
+ import type {} from "@mysten/bcs";
6
+ import { MoveStruct } from '../../../utils/index.ts';
7
+ const $moduleName = '0x2::vec_set';
8
+ /**
9
+ * A set data structure backed by a vector. The set is guaranteed not to contain
10
+ * duplicate keys. All operations are O(N) in the size of the set
11
+ *
12
+ * - the intention of this data structure is only to provide the convenience of
13
+ * programming against a set API. Sets that need sorted iteration rather than
14
+ * insertion order iteration should be handwritten.
15
+ */
16
+ export function VecSet<K extends BcsType<any>>(...typeParameters: [
17
+ K
18
+ ]) {
19
+ return new MoveStruct({ name: `${$moduleName}::VecSet<${typeParameters[0].name as K['name']}>`, fields: {
20
+ contents: bcs.vector(typeParameters[0])
21
+ } });
22
+ }