@open-captable-protocol/canton 0.2.145 → 0.2.147

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.
@@ -0,0 +1,465 @@
1
+ "use strict";
2
+ /**
3
+ * Runtime type guards for OCF objects.
4
+ *
5
+ * These utilities enable safer type narrowing without unsafe casts.
6
+ * Use them when receiving data from external sources or when type information
7
+ * may be lost (e.g., deserialization).
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * const data: unknown = await fetchFromApi();
12
+ * if (isOcfIssuer(data)) {
13
+ * // TypeScript knows data is OcfIssuer here
14
+ * console.log(data.legal_name);
15
+ * }
16
+ * ```
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.isObject = isObject;
20
+ exports.isNonEmptyString = isNonEmptyString;
21
+ exports.isNumericValue = isNumericValue;
22
+ exports.isIsoDateString = isIsoDateString;
23
+ exports.isMonetary = isMonetary;
24
+ exports.isOcfIssuer = isOcfIssuer;
25
+ exports.isOcfStakeholder = isOcfStakeholder;
26
+ exports.isOcfStockClass = isOcfStockClass;
27
+ exports.isOcfStockIssuance = isOcfStockIssuance;
28
+ exports.isOcfStockTransfer = isOcfStockTransfer;
29
+ exports.isOcfStockCancellation = isOcfStockCancellation;
30
+ exports.isOcfStockRepurchase = isOcfStockRepurchase;
31
+ exports.isOcfStockLegendTemplate = isOcfStockLegendTemplate;
32
+ exports.isOcfStockPlan = isOcfStockPlan;
33
+ exports.isOcfVestingTerms = isOcfVestingTerms;
34
+ exports.isOcfEquityCompensationIssuance = isOcfEquityCompensationIssuance;
35
+ exports.isOcfEquityCompensationExercise = isOcfEquityCompensationExercise;
36
+ exports.isOcfEquityCompensationCancellation = isOcfEquityCompensationCancellation;
37
+ exports.isOcfWarrantIssuance = isOcfWarrantIssuance;
38
+ exports.isOcfWarrantCancellation = isOcfWarrantCancellation;
39
+ exports.isOcfConvertibleIssuance = isOcfConvertibleIssuance;
40
+ exports.isOcfConvertibleCancellation = isOcfConvertibleCancellation;
41
+ exports.isOcfValuation = isOcfValuation;
42
+ exports.isOcfDocument = isOcfDocument;
43
+ exports.detectOcfObjectType = detectOcfObjectType;
44
+ exports.assertOcfIssuer = assertOcfIssuer;
45
+ exports.assertOcfStakeholder = assertOcfStakeholder;
46
+ exports.assertOcfStockClass = assertOcfStockClass;
47
+ // ===== Primitive Type Guards =====
48
+ /**
49
+ * Check if a value is a non-null object.
50
+ */
51
+ function isObject(value) {
52
+ return typeof value === 'object' && value !== null;
53
+ }
54
+ /**
55
+ * Check if a value is a non-empty string.
56
+ */
57
+ function isNonEmptyString(value) {
58
+ return typeof value === 'string' && value.length > 0;
59
+ }
60
+ /**
61
+ * Check if a value is a valid numeric string or number.
62
+ */
63
+ function isNumericValue(value) {
64
+ if (typeof value === 'number' && !Number.isNaN(value)) {
65
+ return true;
66
+ }
67
+ if (typeof value === 'string' && value.length > 0) {
68
+ const num = Number(value);
69
+ return !Number.isNaN(num);
70
+ }
71
+ return false;
72
+ }
73
+ /**
74
+ * Check if a value is a valid ISO date string (YYYY-MM-DD format).
75
+ */
76
+ function isIsoDateString(value) {
77
+ if (typeof value !== 'string')
78
+ return false;
79
+ const match = /^\d{4}-\d{2}-\d{2}$/.exec(value);
80
+ if (!match)
81
+ return false;
82
+ const date = new Date(value);
83
+ return !Number.isNaN(date.getTime());
84
+ }
85
+ /**
86
+ * Check if a value is a valid Monetary object.
87
+ */
88
+ function isMonetary(value) {
89
+ if (!isObject(value))
90
+ return false;
91
+ return 'amount' in value && isNumericValue(value.amount) && 'currency' in value && typeof value.currency === 'string';
92
+ }
93
+ // ===== OCF Object Type Guards =====
94
+ /**
95
+ * Type guard for OcfIssuer objects.
96
+ *
97
+ * @example
98
+ * ```typescript
99
+ * const result = await ocp.OpenCapTable.issuer.getIssuerAsOcf({ contractId });
100
+ * if (isOcfIssuer(result.issuer)) {
101
+ * console.log(result.issuer.legal_name);
102
+ * }
103
+ * ```
104
+ */
105
+ function isOcfIssuer(value) {
106
+ if (!isObject(value))
107
+ return false;
108
+ return (isNonEmptyString(value.id) &&
109
+ isNonEmptyString(value.legal_name) &&
110
+ isNonEmptyString(value.formation_date) &&
111
+ isNonEmptyString(value.country_of_formation));
112
+ }
113
+ /**
114
+ * Type guard for OcfStakeholder objects.
115
+ */
116
+ function isOcfStakeholder(value) {
117
+ if (!isObject(value))
118
+ return false;
119
+ return (isNonEmptyString(value.id) &&
120
+ isObject(value.name) &&
121
+ isNonEmptyString(value.name.legal_name) &&
122
+ typeof value.stakeholder_type === 'string' &&
123
+ ['INDIVIDUAL', 'INSTITUTION'].includes(value.stakeholder_type));
124
+ }
125
+ /**
126
+ * Type guard for OcfStockClass objects.
127
+ */
128
+ function isOcfStockClass(value) {
129
+ if (!isObject(value))
130
+ return false;
131
+ return (isNonEmptyString(value.id) &&
132
+ isNonEmptyString(value.name) &&
133
+ isNonEmptyString(value.default_id_prefix) &&
134
+ typeof value.class_type === 'string' &&
135
+ ['COMMON', 'PREFERRED'].includes(value.class_type) &&
136
+ isNumericValue(value.initial_shares_authorized) &&
137
+ isNumericValue(value.votes_per_share) &&
138
+ isNumericValue(value.seniority));
139
+ }
140
+ /**
141
+ * Type guard for OcfStockIssuance objects.
142
+ */
143
+ function isOcfStockIssuance(value) {
144
+ if (!isObject(value))
145
+ return false;
146
+ return (isNonEmptyString(value.id) &&
147
+ isNonEmptyString(value.date) &&
148
+ isNonEmptyString(value.security_id) &&
149
+ isNonEmptyString(value.custom_id) &&
150
+ isNonEmptyString(value.stakeholder_id) &&
151
+ isNonEmptyString(value.stock_class_id) &&
152
+ isNumericValue(value.quantity) &&
153
+ isMonetary(value.share_price));
154
+ }
155
+ /**
156
+ * Type guard for OcfStockTransfer objects.
157
+ */
158
+ function isOcfStockTransfer(value) {
159
+ if (!isObject(value))
160
+ return false;
161
+ return (isNonEmptyString(value.id) &&
162
+ isNonEmptyString(value.date) &&
163
+ isNonEmptyString(value.security_id) &&
164
+ isNumericValue(value.quantity) &&
165
+ Array.isArray(value.resulting_security_ids));
166
+ }
167
+ /**
168
+ * Type guard for OcfStockCancellation objects.
169
+ */
170
+ function isOcfStockCancellation(value) {
171
+ if (!isObject(value))
172
+ return false;
173
+ return (isNonEmptyString(value.id) &&
174
+ isNonEmptyString(value.date) &&
175
+ isNonEmptyString(value.security_id) &&
176
+ isNumericValue(value.quantity) &&
177
+ isNonEmptyString(value.reason_text));
178
+ }
179
+ /**
180
+ * Type guard for OcfStockRepurchase objects.
181
+ */
182
+ function isOcfStockRepurchase(value) {
183
+ if (!isObject(value))
184
+ return false;
185
+ return (isNonEmptyString(value.id) &&
186
+ isNonEmptyString(value.date) &&
187
+ isNonEmptyString(value.security_id) &&
188
+ isNumericValue(value.quantity) &&
189
+ isMonetary(value.price));
190
+ }
191
+ /**
192
+ * Type guard for OcfStockLegendTemplate objects.
193
+ */
194
+ function isOcfStockLegendTemplate(value) {
195
+ if (!isObject(value))
196
+ return false;
197
+ return isNonEmptyString(value.id) && isNonEmptyString(value.name) && isNonEmptyString(value.text);
198
+ }
199
+ /**
200
+ * Type guard for OcfStockPlan objects.
201
+ */
202
+ function isOcfStockPlan(value) {
203
+ if (!isObject(value))
204
+ return false;
205
+ return (isNonEmptyString(value.id) &&
206
+ isNonEmptyString(value.plan_name) &&
207
+ isNumericValue(value.initial_shares_reserved) &&
208
+ Array.isArray(value.stock_class_ids));
209
+ }
210
+ /**
211
+ * Type guard for OcfVestingTerms objects.
212
+ */
213
+ function isOcfVestingTerms(value) {
214
+ if (!isObject(value))
215
+ return false;
216
+ return (isNonEmptyString(value.id) &&
217
+ isNonEmptyString(value.name) &&
218
+ isNonEmptyString(value.description) &&
219
+ typeof value.allocation_type === 'string' &&
220
+ Array.isArray(value.vesting_conditions));
221
+ }
222
+ /**
223
+ * Type guard for OcfEquityCompensationIssuance objects.
224
+ */
225
+ function isOcfEquityCompensationIssuance(value) {
226
+ if (!isObject(value))
227
+ return false;
228
+ return (isNonEmptyString(value.id) &&
229
+ isNonEmptyString(value.date) &&
230
+ isNonEmptyString(value.security_id) &&
231
+ isNonEmptyString(value.custom_id) &&
232
+ isNonEmptyString(value.stakeholder_id) &&
233
+ typeof value.compensation_type === 'string' &&
234
+ isNumericValue(value.quantity));
235
+ }
236
+ /**
237
+ * Type guard for OcfEquityCompensationExercise objects.
238
+ */
239
+ function isOcfEquityCompensationExercise(value) {
240
+ if (!isObject(value))
241
+ return false;
242
+ return (isNonEmptyString(value.id) &&
243
+ isNonEmptyString(value.date) &&
244
+ isNonEmptyString(value.security_id) &&
245
+ isNumericValue(value.quantity) &&
246
+ Array.isArray(value.resulting_security_ids));
247
+ }
248
+ /**
249
+ * Type guard for OcfEquityCompensationCancellation objects.
250
+ */
251
+ function isOcfEquityCompensationCancellation(value) {
252
+ if (!isObject(value))
253
+ return false;
254
+ return (isNonEmptyString(value.id) &&
255
+ isNonEmptyString(value.date) &&
256
+ isNonEmptyString(value.security_id) &&
257
+ isNumericValue(value.quantity) &&
258
+ isNonEmptyString(value.reason_text));
259
+ }
260
+ /**
261
+ * Type guard for OcfWarrantIssuance objects.
262
+ */
263
+ function isOcfWarrantIssuance(value) {
264
+ if (!isObject(value))
265
+ return false;
266
+ return (isNonEmptyString(value.id) &&
267
+ isNonEmptyString(value.date) &&
268
+ isNonEmptyString(value.security_id) &&
269
+ isNonEmptyString(value.custom_id) &&
270
+ isNonEmptyString(value.stakeholder_id) &&
271
+ isMonetary(value.purchase_price) &&
272
+ Array.isArray(value.exercise_triggers));
273
+ }
274
+ /**
275
+ * Type guard for OcfWarrantCancellation objects.
276
+ */
277
+ function isOcfWarrantCancellation(value) {
278
+ if (!isObject(value))
279
+ return false;
280
+ return (isNonEmptyString(value.id) &&
281
+ isNonEmptyString(value.date) &&
282
+ isNonEmptyString(value.security_id) &&
283
+ isNumericValue(value.quantity) &&
284
+ isNonEmptyString(value.reason_text));
285
+ }
286
+ /**
287
+ * Type guard for OcfConvertibleIssuance objects.
288
+ */
289
+ function isOcfConvertibleIssuance(value) {
290
+ if (!isObject(value))
291
+ return false;
292
+ return (isNonEmptyString(value.id) &&
293
+ isNonEmptyString(value.date) &&
294
+ isNonEmptyString(value.security_id) &&
295
+ isNonEmptyString(value.custom_id) &&
296
+ isNonEmptyString(value.stakeholder_id) &&
297
+ isMonetary(value.investment_amount) &&
298
+ typeof value.convertible_type === 'string' &&
299
+ Array.isArray(value.conversion_triggers));
300
+ }
301
+ /**
302
+ * Type guard for OcfConvertibleCancellation objects.
303
+ */
304
+ function isOcfConvertibleCancellation(value) {
305
+ if (!isObject(value))
306
+ return false;
307
+ return (isNonEmptyString(value.id) &&
308
+ isNonEmptyString(value.date) &&
309
+ isNonEmptyString(value.security_id) &&
310
+ isNonEmptyString(value.reason_text));
311
+ }
312
+ /**
313
+ * Type guard for OcfValuation objects.
314
+ */
315
+ function isOcfValuation(value) {
316
+ if (!isObject(value))
317
+ return false;
318
+ return (isNonEmptyString(value.id) &&
319
+ isNonEmptyString(value.stock_class_id) &&
320
+ isNonEmptyString(value.effective_date) &&
321
+ typeof value.valuation_type === 'string' &&
322
+ isMonetary(value.price_per_share));
323
+ }
324
+ /**
325
+ * Type guard for OcfDocument objects.
326
+ */
327
+ function isOcfDocument(value) {
328
+ if (!isObject(value))
329
+ return false;
330
+ return (isNonEmptyString(value.id) &&
331
+ isNonEmptyString(value.md5) &&
332
+ (value.path === undefined || typeof value.path === 'string') &&
333
+ (value.uri === undefined || typeof value.uri === 'string'));
334
+ }
335
+ /**
336
+ * Detect the OCF object type from an unknown value.
337
+ *
338
+ * This is useful when you receive data that could be any OCF type
339
+ * and need to determine which type it is before processing.
340
+ *
341
+ * @example
342
+ * ```typescript
343
+ * const type = detectOcfObjectType(data);
344
+ * switch (type) {
345
+ * case 'ISSUER':
346
+ * // Handle issuer
347
+ * break;
348
+ * case 'STAKEHOLDER':
349
+ * // Handle stakeholder
350
+ * break;
351
+ * // ...
352
+ * }
353
+ * ```
354
+ */
355
+ function detectOcfObjectType(value) {
356
+ // First check if the object has an explicit object_type field
357
+ if (isObject(value) && 'object_type' in value && typeof value.object_type === 'string') {
358
+ const objectType = value.object_type;
359
+ // Map common OCF object_type values
360
+ const knownTypes = [
361
+ 'ISSUER',
362
+ 'STAKEHOLDER',
363
+ 'STOCK_CLASS',
364
+ 'STOCK_LEGEND_TEMPLATE',
365
+ 'STOCK_PLAN',
366
+ 'VESTING_TERMS',
367
+ 'VALUATION',
368
+ 'DOCUMENT',
369
+ ];
370
+ if (knownTypes.includes(objectType)) {
371
+ return objectType;
372
+ }
373
+ // Transaction types often have TX_ prefix
374
+ if (objectType.startsWith('TX_')) {
375
+ const txType = objectType.substring(3); // Remove TX_ prefix
376
+ if (txType.includes('STOCK_ISSUANCE'))
377
+ return 'STOCK_ISSUANCE';
378
+ if (txType.includes('STOCK_TRANSFER'))
379
+ return 'STOCK_TRANSFER';
380
+ if (txType.includes('STOCK_CANCELLATION'))
381
+ return 'STOCK_CANCELLATION';
382
+ if (txType.includes('STOCK_REPURCHASE'))
383
+ return 'STOCK_REPURCHASE';
384
+ if (txType.includes('EQUITY_COMPENSATION_ISSUANCE'))
385
+ return 'EQUITY_COMPENSATION_ISSUANCE';
386
+ if (txType.includes('EQUITY_COMPENSATION_EXERCISE'))
387
+ return 'EQUITY_COMPENSATION_EXERCISE';
388
+ if (txType.includes('EQUITY_COMPENSATION_CANCELLATION'))
389
+ return 'EQUITY_COMPENSATION_CANCELLATION';
390
+ if (txType.includes('WARRANT_ISSUANCE'))
391
+ return 'WARRANT_ISSUANCE';
392
+ if (txType.includes('WARRANT_CANCELLATION'))
393
+ return 'WARRANT_CANCELLATION';
394
+ if (txType.includes('CONVERTIBLE_ISSUANCE'))
395
+ return 'CONVERTIBLE_ISSUANCE';
396
+ if (txType.includes('CONVERTIBLE_CANCELLATION'))
397
+ return 'CONVERTIBLE_CANCELLATION';
398
+ }
399
+ }
400
+ // Fall back to structural detection using type guards
401
+ if (isOcfIssuer(value))
402
+ return 'ISSUER';
403
+ if (isOcfStakeholder(value))
404
+ return 'STAKEHOLDER';
405
+ if (isOcfStockClass(value))
406
+ return 'STOCK_CLASS';
407
+ if (isOcfStockIssuance(value))
408
+ return 'STOCK_ISSUANCE';
409
+ if (isOcfStockTransfer(value))
410
+ return 'STOCK_TRANSFER';
411
+ if (isOcfStockCancellation(value))
412
+ return 'STOCK_CANCELLATION';
413
+ if (isOcfStockRepurchase(value))
414
+ return 'STOCK_REPURCHASE';
415
+ if (isOcfStockLegendTemplate(value))
416
+ return 'STOCK_LEGEND_TEMPLATE';
417
+ if (isOcfStockPlan(value))
418
+ return 'STOCK_PLAN';
419
+ if (isOcfVestingTerms(value))
420
+ return 'VESTING_TERMS';
421
+ if (isOcfEquityCompensationIssuance(value))
422
+ return 'EQUITY_COMPENSATION_ISSUANCE';
423
+ if (isOcfEquityCompensationExercise(value))
424
+ return 'EQUITY_COMPENSATION_EXERCISE';
425
+ if (isOcfEquityCompensationCancellation(value))
426
+ return 'EQUITY_COMPENSATION_CANCELLATION';
427
+ if (isOcfWarrantIssuance(value))
428
+ return 'WARRANT_ISSUANCE';
429
+ if (isOcfWarrantCancellation(value))
430
+ return 'WARRANT_CANCELLATION';
431
+ if (isOcfConvertibleIssuance(value))
432
+ return 'CONVERTIBLE_ISSUANCE';
433
+ if (isOcfConvertibleCancellation(value))
434
+ return 'CONVERTIBLE_CANCELLATION';
435
+ if (isOcfValuation(value))
436
+ return 'VALUATION';
437
+ if (isOcfDocument(value))
438
+ return 'DOCUMENT';
439
+ return 'UNKNOWN';
440
+ }
441
+ /**
442
+ * Assert that a value is of a specific OCF type, throwing if not.
443
+ *
444
+ * @example
445
+ * ```typescript
446
+ * const issuer = assertOcfIssuer(data); // Throws if not an OcfIssuer
447
+ * console.log(issuer.legal_name); // TypeScript knows this is valid
448
+ * ```
449
+ */
450
+ function assertOcfIssuer(value, message) {
451
+ if (!isOcfIssuer(value)) {
452
+ throw new Error(message ?? 'Expected OcfIssuer object');
453
+ }
454
+ }
455
+ function assertOcfStakeholder(value, message) {
456
+ if (!isOcfStakeholder(value)) {
457
+ throw new Error(message ?? 'Expected OcfStakeholder object');
458
+ }
459
+ }
460
+ function assertOcfStockClass(value, message) {
461
+ if (!isOcfStockClass(value)) {
462
+ throw new Error(message ?? 'Expected OcfStockClass object');
463
+ }
464
+ }
465
+ //# sourceMappingURL=typeGuards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typeGuards.js","sourceRoot":"","sources":["../../src/utils/typeGuards.ts"],"names":[],"mappings":"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"}