@open-captable-protocol/canton 0.0.28 → 0.0.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,189 @@
1
+ # OCP Canton SDK
2
+
3
+ A TypeScript SDK for interacting with the Open CapTable Protocol (OCP) on Canton blockchain.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @open-captable-protocol/canton
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ### Basic Setup
14
+
15
+ ```typescript
16
+ import { OcpClient } from '@open-captable-protocol/canton';
17
+
18
+ const client = new OcpClient();
19
+ ```
20
+
21
+ ### Issuer Operations
22
+
23
+ #### Get Issuer as OCF Object
24
+
25
+ Retrieve an issuer contract by ID and convert it to the Open Cap Table Coalition (OCF) format.
26
+
27
+ ```typescript
28
+ import { OcpClient } from '@open-captable-protocol/canton';
29
+
30
+ const client = new OcpClient();
31
+
32
+ // Get issuer as OCF object
33
+ const result = await client.issuer.getIssuerAsOcf({
34
+ contractId: "1234567890abcdef"
35
+ });
36
+
37
+ console.log(result.issuer);
38
+ // {
39
+ // object_type: "ISSUER",
40
+ // legal_name: "My Company Inc.",
41
+ // country_of_formation: "US",
42
+ // formation_date: "2020-01-15",
43
+ // // ... other fields according to OCF schema
44
+ // }
45
+ ```
46
+
47
+ The returned object follows the [OCF Issuer schema](https://schema.opencaptablecoalition.com/v/1.2.0/objects/Issuer.schema.json).
48
+
49
+ #### Create Issuer
50
+
51
+ ```typescript
52
+ const result = await client.issuer.createIssuer({
53
+ issuerAuthorizationContractDetails: {
54
+ contractId: "auth_contract_id",
55
+ createdEventBlob: "serialized_blob",
56
+ synchronizerId: "sync_id",
57
+ templateId: "template_id"
58
+ },
59
+ featuredAppRightContractDetails: {
60
+ contractId: "featured_contract_id",
61
+ createdEventBlob: "serialized_blob",
62
+ synchronizerId: "sync_id",
63
+ templateId: "template_id"
64
+ },
65
+ issuerParty: "issuer_party_id",
66
+ issuerData: {
67
+ legal_name: "My Company Inc.",
68
+ country_of_formation: "US",
69
+ formation_date: "2020-01-15"
70
+ }
71
+ });
72
+ ```
73
+
74
+ #### Update Issuer Data
75
+
76
+ ```typescript
77
+ const result = await client.issuer.updateIssuerData({
78
+ issuerContractId: "issuer_contract_id",
79
+ newIssuerData: {
80
+ legal_name: "Updated Company Name",
81
+ country_of_formation: "US"
82
+ }
83
+ });
84
+ ```
85
+
86
+ #### Authorize Issuer
87
+
88
+ ```typescript
89
+ const result = await client.issuer.authorizeIssuer({
90
+ issuer: "issuer_party_id"
91
+ });
92
+ ```
93
+
94
+ ### Company Valuation Report Operations
95
+
96
+ #### Create Company Valuation Report
97
+
98
+ ```typescript
99
+ const result = await client.companyValuationReport.createCompanyValuationReport({
100
+ companyId: "company123",
101
+ companyValuation: "1000000",
102
+ observers: ["observer1", "observer2"],
103
+ featuredAppRightContractDetails: {
104
+ contractId: "featured_contract_id",
105
+ createdEventBlob: "serialized_blob",
106
+ synchronizerId: "sync_id",
107
+ templateId: "template_id"
108
+ }
109
+ });
110
+ ```
111
+
112
+ #### Update Company Valuation
113
+
114
+ ```typescript
115
+ const result = await client.companyValuationReport.updateCompanyValuation({
116
+ companyValuationReportContractId: "report_contract_id",
117
+ newCompanyValuation: "1500000"
118
+ });
119
+ ```
120
+
121
+ #### Add Observers to Company Valuation Report
122
+
123
+ ```typescript
124
+ const result = await client.companyValuationReport.addObserversToCompanyValuationReport({
125
+ companyValuationReportContractId: "report_contract_id",
126
+ added: ["new_observer1", "new_observer2"]
127
+ });
128
+ ```
129
+
130
+ ## Scripts
131
+
132
+ The SDK includes several utility scripts for common operations:
133
+
134
+ ### Get Issuer as OCF
135
+
136
+ ```bash
137
+ npm run script:get-issuer-ocf <issuer-contract-id>
138
+ ```
139
+
140
+ Or set the environment variable:
141
+ ```bash
142
+ export ISSUER_CONTRACT_ID="your_contract_id"
143
+ npm run script:get-issuer-ocf
144
+ ```
145
+
146
+ ### Create Issuer
147
+
148
+ ```bash
149
+ npm run script:create-issuer <issuer-auth-contract-id> <legal-name> <country-of-formation> <issuer-auth-created-event-blob> <issuer-auth-synchronizer-id> <issuer-party-id> <featured-app-right-contract-id> <featured-app-right-created-event-blob> <featured-app-right-synchronizer-id> <featured-app-right-template-id>
150
+ ```
151
+
152
+ ### Authorize Issuer
153
+
154
+ ```bash
155
+ npm run script:authorize <issuer-party-id>
156
+ ```
157
+
158
+ ## OCF Schema Compliance
159
+
160
+ The `getIssuerAsOcf` function returns data that conforms to the [Open Cap Table Coalition Issuer schema](https://schema.opencaptablecoalition.com/v/1.2.0/objects/Issuer.schema.json). The function handles the conversion from DAML types to OCF format, including:
161
+
162
+ - Converting DAML `Optional<T>` types to JavaScript `T | undefined`
163
+ - Mapping field names from DAML conventions to OCF schema requirements
164
+ - Ensuring all required fields are present
165
+ - Using the contract ID as the OCF object ID
166
+
167
+ ## Development
168
+
169
+ ### Build
170
+
171
+ ```bash
172
+ npm run build
173
+ ```
174
+
175
+ ### Development Mode
176
+
177
+ ```bash
178
+ npm run dev
179
+ ```
180
+
181
+ ### Clean
182
+
183
+ ```bash
184
+ npm run clean
185
+ ```
186
+
187
+ ## License
188
+
189
+ MIT
@@ -1,11 +1,12 @@
1
1
  import { ClientConfig } from '@fairmint/canton-node-sdk';
2
- import { AuthorizeIssuerParams, AuthorizeIssuerResult, CreateIssuerParams, CreateIssuerResult, UpdateIssuerDataParams, UpdateIssuerDataResult, CreateCompanyValuationReportParams, CreateCompanyValuationReportResult, UpdateCompanyValuationParams, UpdateCompanyValuationResult, AddObserversToCompanyValuationReportParams, AddObserversToCompanyValuationReportResult } from './functions';
2
+ import { AuthorizeIssuerParams, AuthorizeIssuerResult, CreateIssuerParams, CreateIssuerResult, UpdateIssuerDataParams, UpdateIssuerDataResult, GetIssuerAsOcfParams, GetIssuerAsOcfResult, CreateCompanyValuationReportParams, CreateCompanyValuationReportResult, UpdateCompanyValuationParams, UpdateCompanyValuationResult, AddObserversToCompanyValuationReportParams, AddObserversToCompanyValuationReportResult } from './functions';
3
3
  export declare class OcpClient {
4
4
  private client;
5
5
  issuer: {
6
6
  authorizeIssuer: (params: AuthorizeIssuerParams) => Promise<AuthorizeIssuerResult>;
7
7
  createIssuer: (params: CreateIssuerParams) => Promise<CreateIssuerResult>;
8
8
  updateIssuerData: (params: UpdateIssuerDataParams) => Promise<UpdateIssuerDataResult>;
9
+ getIssuerAsOcf: (params: GetIssuerAsOcfParams) => Promise<GetIssuerAsOcfResult>;
9
10
  };
10
11
  companyValuationReport: {
11
12
  createCompanyValuationReport: (params: CreateCompanyValuationReportParams) => Promise<CreateCompanyValuationReportResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"OcpClient.d.ts","sourceRoot":"","sources":["../src/OcpClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAuB,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAAmB,qBAAqB,EAAE,qBAAqB,EAAe,kBAAkB,EAAE,kBAAkB,EAAoB,sBAAsB,EAAE,sBAAsB,EAAgC,kCAAkC,EAAE,kCAAkC,EAAyB,4BAA4B,EAAE,4BAA4B,EAAyC,0CAA0C,EAAE,0CAA0C,EAAE,MAAM,aAAa,CAAC;AAE3gB,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAsB;IAE7B,MAAM,EAAE;QACb,eAAe,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;QACnF,YAAY,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAC1E,gBAAgB,EAAE,CAAC,MAAM,EAAE,sBAAsB,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;KACvF,CAAC;IAEK,sBAAsB,EAAE;QAC7B,4BAA4B,EAAE,CAC5B,MAAM,EAAE,kCAAkC,KACvC,OAAO,CAAC,kCAAkC,CAAC,CAAC;QACjD,sBAAsB,EAAE,CACtB,MAAM,EAAE,4BAA4B,KACjC,OAAO,CAAC,4BAA4B,CAAC,CAAC;QAC3C,oCAAoC,EAAE,CACpC,MAAM,EAAE,0CAA0C,KAC/C,OAAO,CAAC,0CAA0C,CAAC,CAAC;KAC1D,CAAC;gBAEU,MAAM,CAAC,EAAE,YAAY;CAmBlC"}
1
+ {"version":3,"file":"OcpClient.d.ts","sourceRoot":"","sources":["../src/OcpClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAuB,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAAmB,qBAAqB,EAAE,qBAAqB,EAAe,kBAAkB,EAAE,kBAAkB,EAAoB,sBAAsB,EAAE,sBAAsB,EAAkB,oBAAoB,EAAE,oBAAoB,EAAgC,kCAAkC,EAAE,kCAAkC,EAAyB,4BAA4B,EAAE,4BAA4B,EAAyC,0CAA0C,EAAE,0CAA0C,EAAE,MAAM,aAAa,CAAC;AAEvkB,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAsB;IAE7B,MAAM,EAAE;QACb,eAAe,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;QACnF,YAAY,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAC1E,gBAAgB,EAAE,CAAC,MAAM,EAAE,sBAAsB,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;QACtF,cAAc,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;KACjF,CAAC;IAEK,sBAAsB,EAAE;QAC7B,4BAA4B,EAAE,CAC5B,MAAM,EAAE,kCAAkC,KACvC,OAAO,CAAC,kCAAkC,CAAC,CAAC;QACjD,sBAAsB,EAAE,CACtB,MAAM,EAAE,4BAA4B,KACjC,OAAO,CAAC,4BAA4B,CAAC,CAAC;QAC3C,oCAAoC,EAAE,CACpC,MAAM,EAAE,0CAA0C,KAC/C,OAAO,CAAC,0CAA0C,CAAC,CAAC;KAC1D,CAAC;gBAEU,MAAM,CAAC,EAAE,YAAY;CAoBlC"}
package/dist/OcpClient.js CHANGED
@@ -9,7 +9,8 @@ class OcpClient {
9
9
  this.issuer = {
10
10
  authorizeIssuer: (params) => (0, functions_1.authorizeIssuer)(this.client, params),
11
11
  createIssuer: (params) => (0, functions_1.createIssuer)(this.client, params),
12
- updateIssuerData: (params) => (0, functions_1.updateIssuerData)(this.client, params)
12
+ updateIssuerData: (params) => (0, functions_1.updateIssuerData)(this.client, params),
13
+ getIssuerAsOcf: (params) => (0, functions_1.getIssuerAsOcf)(this.client, params)
13
14
  };
14
15
  this.companyValuationReport = {
15
16
  createCompanyValuationReport: (params) => (0, functions_1.createCompanyValuationReport)(this.client, params),
@@ -1 +1 @@
1
- {"version":3,"file":"OcpClient.js","sourceRoot":"","sources":["../src/OcpClient.ts"],"names":[],"mappings":";;;AAAA,+DAA8E;AAC9E,2CAA2gB;AAE3gB,MAAa,SAAS;IAqBpB,YAAY,MAAqB;QAC/B,IAAI,CAAC,MAAM,GAAG,IAAI,qCAAmB,CAAC,MAAM,CAAC,CAAC;QAE9C,IAAI,CAAC,MAAM,GAAG;YACZ,eAAe,EAAE,CAAC,MAA6B,EAAE,EAAE,CAAC,IAAA,2BAAe,EAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;YACxF,YAAY,EAAE,CAAC,MAA0B,EAAE,EAAE,CAAC,IAAA,wBAAY,EAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;YAC/E,gBAAgB,EAAE,CAAC,MAA8B,EAAE,EAAE,CAAC,IAAA,4BAAgB,EAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;SAC5F,CAAC;QAEF,IAAI,CAAC,sBAAsB,GAAG;YAC5B,4BAA4B,EAAE,CAAC,MAA0C,EAAE,EAAE,CAC3E,IAAA,wCAA4B,EAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;YACnD,sBAAsB,EAAE,CAAC,MAAoC,EAAE,EAAE,CAC/D,IAAA,kCAAsB,EAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;YAC7C,oCAAoC,EAAE,CACpC,MAAkD,EAClD,EAAE,CAAC,IAAA,gDAAoC,EAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;SAC/D,CAAC;IACJ,CAAC;CACF;AAxCD,8BAwCC"}
1
+ {"version":3,"file":"OcpClient.js","sourceRoot":"","sources":["../src/OcpClient.ts"],"names":[],"mappings":";;;AAAA,+DAA8E;AAC9E,2CAAukB;AAEvkB,MAAa,SAAS;IAsBpB,YAAY,MAAqB;QAC/B,IAAI,CAAC,MAAM,GAAG,IAAI,qCAAmB,CAAC,MAAM,CAAC,CAAC;QAE9C,IAAI,CAAC,MAAM,GAAG;YACZ,eAAe,EAAE,CAAC,MAA6B,EAAE,EAAE,CAAC,IAAA,2BAAe,EAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;YACxF,YAAY,EAAE,CAAC,MAA0B,EAAE,EAAE,CAAC,IAAA,wBAAY,EAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;YAC/E,gBAAgB,EAAE,CAAC,MAA8B,EAAE,EAAE,CAAC,IAAA,4BAAgB,EAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;YAC3F,cAAc,EAAE,CAAC,MAA4B,EAAE,EAAE,CAAC,IAAA,0BAAc,EAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;SACtF,CAAC;QAEF,IAAI,CAAC,sBAAsB,GAAG;YAC5B,4BAA4B,EAAE,CAAC,MAA0C,EAAE,EAAE,CAC3E,IAAA,wCAA4B,EAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;YACnD,sBAAsB,EAAE,CAAC,MAAoC,EAAE,EAAE,CAC/D,IAAA,kCAAsB,EAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;YAC7C,oCAAoC,EAAE,CACpC,MAAkD,EAClD,EAAE,CAAC,IAAA,gDAAoC,EAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;SAC/D,CAAC;IACJ,CAAC;CACF;AA1CD,8BA0CC"}
@@ -1 +1 @@
1
- {"version":3,"file":"createIssuer.d.ts","sourceRoot":"","sources":["../../../src/functions/issuer/createIssuer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0CAA0C,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAGhE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IACjC,0EAA0E;IAC1E,kCAAkC,EAAE,eAAe,CAAC;IACpD,uEAAuE;IACvE,+BAA+B,EAAE,eAAe,CAAC;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,UAAU,EAAE,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC;CACvD;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,kBAAkB,CAAC,CAoD7B"}
1
+ {"version":3,"file":"createIssuer.d.ts","sourceRoot":"","sources":["../../../src/functions/issuer/createIssuer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0CAA0C,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAGhE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IACjC,0EAA0E;IAC1E,kCAAkC,EAAE,eAAe,CAAC;IACpD,uEAAuE;IACvE,+BAA+B,EAAE,eAAe,CAAC;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,UAAU,EAAE,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC;CACvD;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,kBAAkB,CAAC,CAiD7B"}
@@ -79,9 +79,6 @@ async function createIssuer(client, params) {
79
79
  throw new Error('Expected CreatedTreeEvent not found');
80
80
  }
81
81
  const issuerContractId = created.CreatedTreeEvent.value.contractId;
82
- const issuerContractEvents = await client.getEventsByContractId({
83
- contractId: issuerContractId
84
- });
85
82
  return {
86
83
  contractId: issuerContractId,
87
84
  updateId: response.transactionTree.updateId
@@ -1 +1 @@
1
- {"version":3,"file":"createIssuer.js","sourceRoot":"","sources":["../../../src/functions/issuer/createIssuer.ts"],"names":[],"mappings":";;AA2DA,oCAuDC;AAlHD,6FAAoE;AAGpE,mEAA4E;AAkB5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACI,KAAK,UAAU,YAAY,CAChC,MAA2B,EAC3B,MAA0B;IAE1B,+CAA+C;IAC/C,MAAM,eAAe,GAA2D;QAC9E,WAAW,EAAE,MAAM,CAAC,UAAU;KAC/B,CAAC;IAEF,wDAAwD;IACxD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,+BAA+B,CAAC;QAC5D,KAAK,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC;QAC3B,QAAQ,EAAE;YACR;gBACE,eAAe,EAAE;oBACf,UAAU,EAAE,yCAAQ,CAAC,YAAY,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,UAAU;oBACpF,UAAU,EAAE,MAAM,CAAC,kCAAkC,CAAC,UAAU;oBAChE,MAAM,EAAE,cAAc;oBACtB,cAAc,EAAE,eAAe;iBAChC;aACF;SACF;QACD,kBAAkB,EAAE;YAClB;gBACE,UAAU,EAAE,MAAM,CAAC,kCAAkC,CAAC,UAAU;gBAChE,UAAU,EAAE,MAAM,CAAC,kCAAkC,CAAC,UAAU;gBAChE,gBAAgB,EAAE,MAAM,CAAC,kCAAkC,CAAC,gBAAgB;gBAC5E,cAAc,EAAE,MAAM,CAAC,kCAAkC,CAAC,cAAc;aACzE;YACD;gBACE,UAAU,EAAE,MAAM,CAAC,+BAA+B,CAAC,UAAU;gBAC7D,UAAU,EAAE,MAAM,CAAC,+BAA+B,CAAC,UAAU;gBAC7D,gBAAgB,EAAE,MAAM,CAAC,+BAA+B,CAAC,gBAAgB;gBACzE,cAAc,EAAE,MAAM,CAAC,+BAA+B,CAAC,cAAc;aACtE;SACF;KACF,CAA4C,CAAC;IAE9C,MAAM,OAAO,GAAG,IAAA,+CAA4B,EAC1C,QAAQ,EACR,yCAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAC/C,CAAC;IACF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC;IACnE,MAAM,oBAAoB,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC;QAC9D,UAAU,EAAE,gBAAgB;KAC7B,CAAC,CAAA;IAEF,OAAO;QACL,UAAU,EAAE,gBAAgB;QAC5B,QAAQ,EAAE,QAAQ,CAAC,eAAe,CAAC,QAAQ;KAC5C,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"createIssuer.js","sourceRoot":"","sources":["../../../src/functions/issuer/createIssuer.ts"],"names":[],"mappings":";;AA2DA,oCAoDC;AA/GD,6FAAoE;AAGpE,mEAA4E;AAkB5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACI,KAAK,UAAU,YAAY,CAChC,MAA2B,EAC3B,MAA0B;IAE1B,+CAA+C;IAC/C,MAAM,eAAe,GAA2D;QAC9E,WAAW,EAAE,MAAM,CAAC,UAAU;KAC/B,CAAC;IAEF,wDAAwD;IACxD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,+BAA+B,CAAC;QAC5D,KAAK,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC;QAC3B,QAAQ,EAAE;YACR;gBACE,eAAe,EAAE;oBACf,UAAU,EAAE,yCAAQ,CAAC,YAAY,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,UAAU;oBACpF,UAAU,EAAE,MAAM,CAAC,kCAAkC,CAAC,UAAU;oBAChE,MAAM,EAAE,cAAc;oBACtB,cAAc,EAAE,eAAe;iBAChC;aACF;SACF;QACD,kBAAkB,EAAE;YAClB;gBACE,UAAU,EAAE,MAAM,CAAC,kCAAkC,CAAC,UAAU;gBAChE,UAAU,EAAE,MAAM,CAAC,kCAAkC,CAAC,UAAU;gBAChE,gBAAgB,EAAE,MAAM,CAAC,kCAAkC,CAAC,gBAAgB;gBAC5E,cAAc,EAAE,MAAM,CAAC,kCAAkC,CAAC,cAAc;aACzE;YACD;gBACE,UAAU,EAAE,MAAM,CAAC,+BAA+B,CAAC,UAAU;gBAC7D,UAAU,EAAE,MAAM,CAAC,+BAA+B,CAAC,UAAU;gBAC7D,gBAAgB,EAAE,MAAM,CAAC,+BAA+B,CAAC,gBAAgB;gBACzE,cAAc,EAAE,MAAM,CAAC,+BAA+B,CAAC,cAAc;aACtE;SACF;KACF,CAA4C,CAAC;IAE9C,MAAM,OAAO,GAAG,IAAA,+CAA4B,EAC1C,QAAQ,EACR,yCAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAC/C,CAAC;IACF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC;IAEnE,OAAO;QACL,UAAU,EAAE,gBAAgB;QAC5B,QAAQ,EAAE,QAAQ,CAAC,eAAe,CAAC,QAAQ;KAC5C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,70 @@
1
+ import { LedgerJsonApiClient } from '@fairmint/canton-node-sdk';
2
+ /**
3
+ * OCF Issuer object according to the Open Cap Table Coalition schema
4
+ * @see https://schema.opencaptablecoalition.com/v/1.2.0/objects/Issuer.schema.json
5
+ */
6
+ export interface OcfIssuer {
7
+ object_type: 'ISSUER';
8
+ legal_name: string;
9
+ dba?: string;
10
+ formation_date?: string;
11
+ country_of_formation: string;
12
+ country_subdivision_of_formation?: string;
13
+ tax_ids?: Array<{
14
+ tax_id_type: string;
15
+ tax_id: string;
16
+ }>;
17
+ email?: string;
18
+ phone?: string;
19
+ address?: {
20
+ line1?: string;
21
+ line2?: string;
22
+ city?: string;
23
+ state?: string;
24
+ postal_code?: string;
25
+ country?: string;
26
+ };
27
+ initial_shares_authorized?: string | number;
28
+ id?: string;
29
+ comments?: string[];
30
+ }
31
+ export interface GetIssuerAsOcfParams {
32
+ /** Contract ID of the Issuer contract to retrieve */
33
+ contractId: string;
34
+ }
35
+ export interface GetIssuerAsOcfResult {
36
+ /** The OCF Issuer object */
37
+ issuer: OcfIssuer;
38
+ /** The original contract ID */
39
+ contractId: string;
40
+ }
41
+ /**
42
+ * Retrieve an issuer contract by ID and return it as an OCF JSON object
43
+ *
44
+ * This function fetches the issuer contract data from the ledger and transforms it
45
+ * into the Open Cap Table Coalition (OCF) format according to the official schema.
46
+ *
47
+ * @see https://schema.opencaptablecoalition.com/v/1.2.0/objects/Issuer.schema.json
48
+ *
49
+ * @example
50
+ * ```typescript
51
+ * const result = await getIssuerAsOcf(client, {
52
+ * contractId: "1234567890abcdef"
53
+ * });
54
+ *
55
+ * console.log(result.issuer);
56
+ * // {
57
+ * // object_type: "ISSUER",
58
+ * // legal_name: "My Company Inc.",
59
+ * // country_of_formation: "US",
60
+ * // formation_date: "2020-01-15",
61
+ * // // ... other fields
62
+ * // }
63
+ * ```
64
+ *
65
+ * @param client - The ledger JSON API client
66
+ * @param params - Parameters for retrieving the issuer
67
+ * @returns Promise resolving to the OCF Issuer object
68
+ */
69
+ export declare function getIssuerAsOcf(client: LedgerJsonApiClient, params: GetIssuerAsOcfParams): Promise<GetIssuerAsOcfResult>;
70
+ //# sourceMappingURL=getIssuerAsOcf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getIssuerAsOcf.d.ts","sourceRoot":"","sources":["../../../src/functions/issuer/getIssuerAsOcf.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,QAAQ,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,gCAAgC,CAAC,EAAE,MAAM,CAAC;IAC1C,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,yBAAyB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,qDAAqD;IACrD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,4BAA4B;IAC5B,MAAM,EAAE,SAAS,CAAC;IAClB,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,oBAAoB,CAAC,CAgE/B"}
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getIssuerAsOcf = getIssuerAsOcf;
4
+ /**
5
+ * Retrieve an issuer contract by ID and return it as an OCF JSON object
6
+ *
7
+ * This function fetches the issuer contract data from the ledger and transforms it
8
+ * into the Open Cap Table Coalition (OCF) format according to the official schema.
9
+ *
10
+ * @see https://schema.opencaptablecoalition.com/v/1.2.0/objects/Issuer.schema.json
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const result = await getIssuerAsOcf(client, {
15
+ * contractId: "1234567890abcdef"
16
+ * });
17
+ *
18
+ * console.log(result.issuer);
19
+ * // {
20
+ * // object_type: "ISSUER",
21
+ * // legal_name: "My Company Inc.",
22
+ * // country_of_formation: "US",
23
+ * // formation_date: "2020-01-15",
24
+ * // // ... other fields
25
+ * // }
26
+ * ```
27
+ *
28
+ * @param client - The ledger JSON API client
29
+ * @param params - Parameters for retrieving the issuer
30
+ * @returns Promise resolving to the OCF Issuer object
31
+ */
32
+ async function getIssuerAsOcf(client, params) {
33
+ // Get the events for the Issuer contract
34
+ const eventsResponse = await client.getEventsByContractId({
35
+ contractId: params.contractId
36
+ });
37
+ if (!eventsResponse.created?.createdEvent?.createArgument) {
38
+ throw new Error('Invalid contract events response: missing created event or create argument');
39
+ }
40
+ const createArgument = eventsResponse.created.createdEvent.createArgument;
41
+ // Type guard to ensure we have the expected issuer data structure
42
+ function hasIssuerData(arg) {
43
+ return typeof arg === 'object' &&
44
+ arg !== null &&
45
+ 'issuer_data' in arg &&
46
+ typeof arg.issuer_data === 'object';
47
+ }
48
+ if (!hasIssuerData(createArgument)) {
49
+ throw new Error('Issuer data not found in contract create argument');
50
+ }
51
+ const issuerData = createArgument.issuer_data;
52
+ // Helper function to convert DAML Optional to JavaScript undefined
53
+ const toUndefined = (value) => value === null ? undefined : value;
54
+ // Transform DAML issuer data to OCF format
55
+ const ocfIssuer = {
56
+ object_type: 'ISSUER',
57
+ legal_name: issuerData.legal_name || '',
58
+ country_of_formation: issuerData.country_of_formation || '',
59
+ // Optional fields
60
+ ...(issuerData.dba && { dba: issuerData.dba }),
61
+ ...(issuerData.formation_date && { formation_date: issuerData.formation_date }),
62
+ ...(issuerData.country_subdivision_of_formation && {
63
+ country_subdivision_of_formation: issuerData.country_subdivision_of_formation
64
+ }),
65
+ ...(issuerData.tax_ids && { tax_ids: issuerData.tax_ids }),
66
+ ...(issuerData.email && { email: issuerData.email }),
67
+ ...(issuerData.phone && { phone: issuerData.phone }),
68
+ ...(issuerData.address && {
69
+ address: {
70
+ ...(issuerData.address.line1 && { line1: toUndefined(issuerData.address.line1) }),
71
+ ...(issuerData.address.line2 && { line2: toUndefined(issuerData.address.line2) }),
72
+ ...(issuerData.address.city && { city: toUndefined(issuerData.address.city) }),
73
+ ...(issuerData.address.state && { state: toUndefined(issuerData.address.state) }),
74
+ ...(issuerData.address.postal_code && { postal_code: toUndefined(issuerData.address.postal_code) }),
75
+ ...(issuerData.address.country && { country: toUndefined(issuerData.address.country) })
76
+ }
77
+ }),
78
+ ...(issuerData.initial_shares_authorized && {
79
+ initial_shares_authorized: issuerData.initial_shares_authorized
80
+ }),
81
+ // Use contract ID as the OCF object ID
82
+ id: params.contractId
83
+ };
84
+ return {
85
+ issuer: ocfIssuer,
86
+ contractId: params.contractId
87
+ };
88
+ }
89
+ //# sourceMappingURL=getIssuerAsOcf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getIssuerAsOcf.js","sourceRoot":"","sources":["../../../src/functions/issuer/getIssuerAsOcf.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  export * from './authorizeIssuer';
2
2
  export * from './createIssuer';
3
3
  export * from './updateIssuerData';
4
+ export * from './getIssuerAsOcf';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/functions/issuer/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/functions/issuer/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC"}
@@ -17,4 +17,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./authorizeIssuer"), exports);
18
18
  __exportStar(require("./createIssuer"), exports);
19
19
  __exportStar(require("./updateIssuerData"), exports);
20
+ __exportStar(require("./getIssuerAsOcf"), exports);
20
21
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/functions/issuer/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,iDAA+B;AAC/B,qDAAmC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/functions/issuer/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,iDAA+B;AAC/B,qDAAmC;AACnC,mDAAiC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@open-captable-protocol/canton",
3
- "version": "0.0.28",
3
+ "version": "0.0.30",
4
4
  "description": "A TypeScript SDK for interacting with the Open CapTable Protocol (OCP) Factory contract on Canton blockchain",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
@@ -13,7 +13,8 @@
13
13
  "dev": "tsc --watch",
14
14
  "clean": "rm -rf dist",
15
15
  "script:authorize": "ts-node scripts/authorizeIssuer.ts",
16
- "script:create-issuer": "ts-node scripts/createIssuer.ts"
16
+ "script:create-issuer": "ts-node scripts/createIssuer.ts",
17
+ "script:get-issuer-ocf": "ts-node scripts/getIssuerAsOcf.ts"
17
18
  },
18
19
  "dependencies": {
19
20
  "@daml/ledger": "^2.10.2",