@propxchain/core-client 0.2.1 → 0.3.0-canary.24

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 (63) hide show
  1. package/README.md +2 -3
  2. package/dist/auth.d.ts +7 -7
  3. package/dist/auth.d.ts.map +1 -1
  4. package/dist/auth.js +5 -5
  5. package/dist/auth.js.map +1 -1
  6. package/dist/canisters/document_storage/document_storage.did.d.ts.map +1 -1
  7. package/dist/canisters/document_storage/document_storage.did.js +90 -21
  8. package/dist/canisters/document_storage/document_storage.did.js.map +1 -1
  9. package/dist/canisters/document_verification/document_verification.did.d.ts.map +1 -1
  10. package/dist/canisters/document_verification/document_verification.did.js +132 -0
  11. package/dist/canisters/document_verification/document_verification.did.js.map +1 -1
  12. package/dist/canisters/email_service/email_service.did.d.ts.map +1 -1
  13. package/dist/canisters/email_service/email_service.did.js +40 -0
  14. package/dist/canisters/email_service/email_service.did.js.map +1 -1
  15. package/dist/canisters/land_registry_integration/land_registry_integration.did.d.ts.map +1 -1
  16. package/dist/canisters/land_registry_integration/land_registry_integration.did.js +186 -12
  17. package/dist/canisters/land_registry_integration/land_registry_integration.did.js.map +1 -1
  18. package/dist/canisters/ledger_manager/ledger_manager.did.d.ts.map +1 -1
  19. package/dist/canisters/ledger_manager/ledger_manager.did.js +55 -0
  20. package/dist/canisters/ledger_manager/ledger_manager.did.js.map +1 -1
  21. package/dist/canisters/transaction_manager/transaction_manager.did.d.ts.map +1 -1
  22. package/dist/canisters/transaction_manager/transaction_manager.did.js +338 -40
  23. package/dist/canisters/transaction_manager/transaction_manager.did.js.map +1 -1
  24. package/dist/canisters/user_management/user_management.did.d.ts.map +1 -1
  25. package/dist/canisters/user_management/user_management.did.js +122 -2
  26. package/dist/canisters/user_management/user_management.did.js.map +1 -1
  27. package/dist/client.js +1 -1
  28. package/dist/client.js.map +1 -1
  29. package/dist/index.d.ts +1 -1
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +1 -1
  32. package/dist/index.js.map +1 -1
  33. package/dist/mock.js +1 -1
  34. package/dist/mock.js.map +1 -1
  35. package/dist/types.d.ts +1 -1
  36. package/dist/types.d.ts.map +1 -1
  37. package/package.json +3 -6
  38. package/src/auth.ts +8 -9
  39. package/src/canisters/document_storage/document_storage.did +82 -12
  40. package/src/canisters/document_storage/document_storage.did.d.ts +86 -9
  41. package/src/canisters/document_storage/document_storage.did.js +128 -19
  42. package/src/canisters/document_verification/document_verification.did +150 -0
  43. package/src/canisters/document_verification/document_verification.did.d.ts +125 -1
  44. package/src/canisters/document_verification/document_verification.did.js +160 -0
  45. package/src/canisters/email_service/email_service.did +49 -0
  46. package/src/canisters/email_service/email_service.did.d.ts +49 -2
  47. package/src/canisters/email_service/email_service.did.js +68 -0
  48. package/src/canisters/land_registry_integration/land_registry_integration.did +118 -19
  49. package/src/canisters/land_registry_integration/land_registry_integration.did.d.ts +89 -19
  50. package/src/canisters/land_registry_integration/land_registry_integration.did.js +213 -11
  51. package/src/canisters/ledger_manager/ledger_manager.did +78 -0
  52. package/src/canisters/ledger_manager/ledger_manager.did.d.ts +66 -0
  53. package/src/canisters/ledger_manager/ledger_manager.did.js +75 -0
  54. package/src/canisters/transaction_manager/transaction_manager.did +438 -47
  55. package/src/canisters/transaction_manager/transaction_manager.did.d.ts +379 -36
  56. package/src/canisters/transaction_manager/transaction_manager.did.js +346 -40
  57. package/src/canisters/user_management/user_management.did +153 -3
  58. package/src/canisters/user_management/user_management.did.d.ts +121 -2
  59. package/src/canisters/user_management/user_management.did.js +166 -6
  60. package/src/client.ts +1 -1
  61. package/src/index.ts +2 -2
  62. package/src/mock.ts +1 -1
  63. package/src/types.ts +1 -1
@@ -1,3 +1,14 @@
1
+ type WarrantyItem =
2
+ record {
3
+ document: TA6Document;
4
+ present: TA6Answer;
5
+ };
6
+ type Urgency =
7
+ variant {
8
+ blocking;
9
+ later;
10
+ soon;
11
+ };
1
12
  type TransactionTimeline =
2
13
  record {
3
14
  blockchainCompletedAt: opt int;
@@ -115,55 +126,48 @@ type TA7LeaseholdInformation =
115
126
  serviceChargePaymentFrequency: text;
116
127
  sublettingAllowed: bool;
117
128
  };
129
+ type TA6Response =
130
+ record {
131
+ answer: TA6Answer;
132
+ details: opt text;
133
+ };
118
134
  type TA6PropertyInformation =
119
135
  record {
120
- alterations: opt TA6Alterations;
121
- boundaries: text;
122
- boundaryDisputes: opt TA6BoundaryDisputes;
123
136
  completedAt: opt int;
124
137
  completedBy: principal;
125
- connectionAgreements: text;
126
- disputes: opt TA6Disputes;
127
- environmentalDetails: text;
128
- environmentalIssues: vec text;
129
- estateManagement: opt TA6EstateManagement;
130
- guarantees: text;
131
- insurance: text;
138
+ formVersion: text;
139
+ jurisdiction: Jurisdiction;
132
140
  lastModifiedAt: int;
133
141
  lastModifiedBy: principal;
134
- notices: opt TA6Notices;
135
- otherInformation: text;
136
- parkingDetails: text;
137
- parkingSpaces: nat;
138
- rightsAndEasements: text;
139
- services: text;
140
- };
141
- type TA6Notices =
142
- record {
143
- details: text;
144
- noticeType: text;
145
- };
146
- type TA6EstateManagement =
147
- record {
148
- annualCharge: nat;
149
- isManaged: bool;
150
- managementCompany: text;
151
- };
152
- type TA6Disputes =
153
- record {
154
- details: text;
155
- disputeType: text;
156
- };
157
- type TA6BoundaryDisputes =
158
- record {
159
- details: text;
160
- hasDisputes: bool;
142
+ section1: Section1PropertyAndSeller;
143
+ section10: Section10Parking;
144
+ section11: Section11Services;
145
+ section12: Section12Connections;
146
+ section13: Section13Transaction;
147
+ section14: Section14Completion;
148
+ section15: Section15AdditionalInfo;
149
+ section2: Section2Boundaries;
150
+ section3: Section3Disputes;
151
+ section4: Section4Notices;
152
+ section5: Section5Alterations;
153
+ section6: Section6Guarantees;
154
+ section7: Section7Insurance;
155
+ section8: Section8Environmental;
156
+ section9: Section9Rights;
157
+ };
158
+ type TA6Document =
159
+ variant {
160
+ Attached: nat;
161
+ NotApplicable;
162
+ NotAvailable;
163
+ ToFollow;
161
164
  };
162
- type TA6Alterations =
163
- record {
164
- details: text;
165
- hasAlterations: bool;
166
- requiresPermission: bool;
165
+ type TA6Answer =
166
+ variant {
167
+ No;
168
+ NotApplicable;
169
+ NotKnown;
170
+ Yes;
167
171
  };
168
172
  type TA10Room =
169
173
  record {
@@ -228,6 +232,198 @@ type SolicitorRecord =
228
232
  tasks: vec SolicitorTask;
229
233
  verified: bool;
230
234
  };
235
+ type SolicitorContact =
236
+ record {
237
+ address: text;
238
+ contactName: text;
239
+ email: opt text;
240
+ firmName: text;
241
+ phone: opt text;
242
+ postcode: text;
243
+ };
244
+ type SolarPower =
245
+ record {
246
+ electricityBill: TA6Document;
247
+ fitOrSegAgreement: TA6Document;
248
+ installDate: opt text;
249
+ mcsCertificate: TA6Document;
250
+ ownedOutright: opt bool;
251
+ supplyAgreement: TA6Document;
252
+ };
253
+ type SewerageSystem =
254
+ record {
255
+ dischargeType: opt DischargeType;
256
+ infiltrationSystem: TA6Answer;
257
+ lastServiceDate: opt text;
258
+ location: opt text;
259
+ otherDetails: opt text;
260
+ regulationCompliant: TA6Answer;
261
+ source: SewerageSource;
262
+ };
263
+ type SewerageSource =
264
+ variant {
265
+ Cesspool;
266
+ Mains;
267
+ Other;
268
+ SepticTank;
269
+ SewageTreatmentPlant;
270
+ };
271
+ type SellerRole =
272
+ variant {
273
+ Administrator;
274
+ Attorney;
275
+ Executor;
276
+ Seller;
277
+ Trustee;
278
+ };
279
+ type SellerParty =
280
+ record {
281
+ fullName: text;
282
+ ownershipOrAuthorityDate: opt text;
283
+ role: SellerRole;
284
+ };
285
+ type Section9Rights =
286
+ record {
287
+ q9_1Rights: vec Right;
288
+ q9_1RightsExercised: TA6Response;
289
+ q9_2Amount: opt nat;
290
+ q9_2Contributions: TA6Response;
291
+ q9_3Disagreements: TA6Response;
292
+ q9_4OthersRights: TA6Response;
293
+ q9_4Rights: vec Right;
294
+ q9_5Amount: opt nat;
295
+ q9_5ContributionsReceived: TA6Response;
296
+ q9_6Disagreements: TA6Response;
297
+ q9_7CrossingOtherProperty: TA6Response;
298
+ q9_8LeadingToOthers: TA6Response;
299
+ q9_9Arrangement: opt Arrangement;
300
+ };
301
+ type Section8Environmental =
302
+ record {
303
+ q8_1Flooded: TA6Response;
304
+ q8_2FloodDefences: TA6Response;
305
+ q8_3RadonTest: TA6Response;
306
+ q8_4RadonMeasures: TA6Response;
307
+ q8_5CurrentBill: TA6Document;
308
+ q8_5GreenDeal: TA6Response;
309
+ q8_6JapaneseKnotweed: TA6Response;
310
+ q8_7KnotweedSurvey: TA6Answer;
311
+ q8_7SurveyDocument: TA6Document;
312
+ };
313
+ type Section7Insurance =
314
+ record {
315
+ q7_1DoYouInsure: TA6Answer;
316
+ q7_1WhoInsuresIfNot: opt text;
317
+ q7_2DifficultOrSpecialConditions: TA6Response;
318
+ q7_3Claims: TA6Response;
319
+ };
320
+ type Section6Guarantees =
321
+ record {
322
+ q6_1CentralHeating: WarrantyItem;
323
+ q6_1DampProofing: WarrantyItem;
324
+ q6_1ElectricalWork: WarrantyItem;
325
+ q6_1NewHomeWarranty: WarrantyItem;
326
+ q6_1Other: WarrantyItem;
327
+ q6_1OtherDetails: opt text;
328
+ q6_1Roofing: WarrantyItem;
329
+ q6_1TimberTreatment: WarrantyItem;
330
+ q6_1Underpinning: WarrantyItem;
331
+ q6_1WindowsDoors: WarrantyItem;
332
+ q6_2Claims: TA6Response;
333
+ q6_3Breaches: TA6Response;
334
+ };
335
+ type Section5Alterations =
336
+ record {
337
+ q5_1Alterations: AlterationTypes;
338
+ q5_2Documents: vec TA6Document;
339
+ q5_3NonResidentialUse: TA6Response;
340
+ q5_4Breaches: TA6Response;
341
+ q5_5UnresolvedIssues: TA6Response;
342
+ q5_6Solar: opt SolarPower;
343
+ q5_7ListedBuilding: TA6Response;
344
+ q5_8ConservationArea: TA6Response;
345
+ q5_9TreePreservationOrder: TA6Response;
346
+ };
347
+ type Section4Notices =
348
+ record {
349
+ q4_1NoticesReceived: TA6Response;
350
+ q4_2NearbyDevelopment: TA6Response;
351
+ q4_3NearbyUseChange: TA6Response;
352
+ };
353
+ type Section3Disputes =
354
+ record {
355
+ q3_1ExistingDisputes: TA6Response;
356
+ q3_2PotentialDisputes: TA6Response;
357
+ };
358
+ type Section2Boundaries =
359
+ record {
360
+ q2_1Features: vec BoundaryFeature;
361
+ q2_2IrregularDescription: opt text;
362
+ q2_3MovedOrAltered: TA6Response;
363
+ };
364
+ type Section1PropertyAndSeller =
365
+ record {
366
+ postcode: text;
367
+ propertyAddress: text;
368
+ sellerCompany: opt CompanySeller;
369
+ sellers: vec SellerParty;
370
+ solicitor: SolicitorContact;
371
+ uprn: opt text;
372
+ };
373
+ type Section15AdditionalInfo =
374
+ record {
375
+ additionalNotes: opt text;
376
+ consentsAttachedList: opt text;
377
+ consentsNotAvailableList: opt text;
378
+ consentsToFollowList: opt text;
379
+ q15_1ConsentsAttached: vec TA6Document;
380
+ };
381
+ type Section14Completion =
382
+ record {
383
+ q14_1ProceedsClearCharges: TA6Response;
384
+ q14_2Commitments: CompletionCommitments;
385
+ };
386
+ type Section13Transaction =
387
+ record {
388
+ q13_1DependentPurchase: TA6Response;
389
+ q13_2MovingDateRequirements: TA6Response;
390
+ q13_3SellerLivesAtProperty: TA6Answer;
391
+ q13_4OtherOccupiers17Plus: TA6Response;
392
+ q13_5: TA6Response;
393
+ q13_6: TA6Response;
394
+ q13_7Occupiers: vec Occupier;
395
+ };
396
+ type Section12Connections =
397
+ record {
398
+ q12_1Connections: TA6Response;
399
+ q12_1Documents: vec TA6Document;
400
+ };
401
+ type Section11Services =
402
+ record {
403
+ q11_1ElectricalWorks: TA6Response;
404
+ q11_2Document: TA6Document;
405
+ q11_2ElectricalCertificates: TA6Answer;
406
+ q11_3Date: opt text;
407
+ q11_3Eicr: TA6Answer;
408
+ q11_3Report: TA6Document;
409
+ q11_4HeatingSystems: vec HeatingSystem;
410
+ q11_5MainsConnections: MainsConnections;
411
+ q11_6SewerageSource: SewerageSource;
412
+ q11_7SewerageSystem: opt SewerageSystem;
413
+ };
414
+ type Section10Parking =
415
+ record {
416
+ q10_1Arrangements: vec ParkingType;
417
+ q10_1Details: opt text;
418
+ q10_2PermitRequired: TA6Response;
419
+ q10_3EvChargingPoint: TA6Response;
420
+ q10_3InstallConsent: TA6Document;
421
+ };
422
+ type Right =
423
+ record {
424
+ description: text;
425
+ overProperty: opt text;
426
+ };
231
427
  type Result_9 =
232
428
  variant {
233
429
  err: text;
@@ -266,12 +462,20 @@ type Result_3 =
266
462
  err: text;
267
463
  ok: OfficialSearchResult;
268
464
  };
465
+ type Result_20 =
466
+ variant {
467
+ err: text;
468
+ ok: record {
469
+ registrations: nat;
470
+ transactions: nat;
471
+ };
472
+ };
269
473
  type Result_2 =
270
474
  variant {
271
475
  err: text;
272
476
  ok: TransactionParty;
273
477
  };
274
- type Result_18 =
478
+ type Result_19 =
275
479
  variant {
276
480
  err: text;
277
481
  ok: record {
@@ -279,11 +483,16 @@ type Result_18 =
279
483
  text;
280
484
  };
281
485
  };
282
- type Result_17 =
486
+ type Result_18 =
283
487
  variant {
284
488
  err: text;
285
489
  ok: Phase;
286
490
  };
491
+ type Result_17 =
492
+ variant {
493
+ err: text;
494
+ ok: NextStepRecommendation;
495
+ };
287
496
  type Result_16 =
288
497
  variant {
289
498
  err: text;
@@ -371,6 +580,16 @@ type PartyProgress =
371
580
  parties: vec TransactionParty;
372
581
  totalParties: nat;
373
582
  };
583
+ type ParkingType =
584
+ variant {
585
+ Allocated;
586
+ Driveway;
587
+ Garage;
588
+ None;
589
+ OnRoad;
590
+ Other;
591
+ Permit;
592
+ };
374
593
  type OfficialSearchResult =
375
594
  record {
376
595
  advisoryEntries: vec text;
@@ -380,6 +599,12 @@ type OfficialSearchResult =
380
599
  priorityExpiry: text;
381
600
  registerChanged: bool;
382
601
  };
602
+ type Occupier =
603
+ record {
604
+ age: opt nat;
605
+ consentToSale: TA6Document;
606
+ fullName: text;
607
+ };
383
608
  type Notification =
384
609
  record {
385
610
  createdAt: Time;
@@ -392,6 +617,30 @@ type Notification =
392
617
  transactionId: text;
393
618
  uploadedBy: principal;
394
619
  };
620
+ type NextStepRecommendation =
621
+ record {
622
+ blocker: text;
623
+ blockerLabel: text;
624
+ options: vec NextStepOption;
625
+ partial: bool;
626
+ urgency: Urgency;
627
+ why: text;
628
+ };
629
+ type NextStepOption =
630
+ record {
631
+ action: text;
632
+ displayLabel: text;
633
+ estimatedDelayIfSkipped: opt nat;
634
+ whyThis: text;
635
+ };
636
+ type MainsConnections =
637
+ record {
638
+ broadband: TA6Answer;
639
+ electricity: TA6Answer;
640
+ gas: TA6Answer;
641
+ sewerage: TA6Answer;
642
+ water: TA6Answer;
643
+ };
395
644
  type LandRegistryStatus =
396
645
  variant {
397
646
  application_received;
@@ -441,6 +690,62 @@ type LandRegistryIntegration =
441
690
  submittedToLRAt: opt int;
442
691
  totalLRCosts: nat;
443
692
  };
693
+ type Jurisdiction =
694
+ variant {
695
+ England;
696
+ Wales;
697
+ };
698
+ type HeatingType =
699
+ variant {
700
+ DistrictHeating;
701
+ Electric;
702
+ GasCentral;
703
+ HeatPumpAir;
704
+ HeatPumpGround;
705
+ Lpg;
706
+ Oil;
707
+ Other;
708
+ SolarThermal;
709
+ SolidFuel;
710
+ };
711
+ type HeatingSystem =
712
+ record {
713
+ certificate: TA6Document;
714
+ heatingType: HeatingType;
715
+ installDate: opt text;
716
+ lastServiceDate: opt text;
717
+ otherDetails: opt text;
718
+ };
719
+ type DischargeType =
720
+ variant {
721
+ GroundWater;
722
+ SurfaceWater;
723
+ };
724
+ type CompletionCommitments =
725
+ record {
726
+ leaveServiceInfo: TA6Answer;
727
+ removeSellersItems: TA6Answer;
728
+ vacantPossession: TA6Answer;
729
+ };
730
+ type CompanySeller =
731
+ record {
732
+ companyName: text;
733
+ companyNumber: text;
734
+ countryOfIncorporation: text;
735
+ director: text;
736
+ };
737
+ type BoundaryOwnership =
738
+ variant {
739
+ NotKnown;
740
+ OwnedByNeighbour;
741
+ OwnedBySeller;
742
+ Shared;
743
+ };
744
+ type BoundaryFeature =
745
+ record {
746
+ ownership: BoundaryOwnership;
747
+ position: text;
748
+ };
444
749
  type BotConnection =
445
750
  record {
446
751
  addedAt: int;
@@ -448,6 +753,12 @@ type BotConnection =
448
753
  name: text;
449
754
  "principal": principal;
450
755
  };
756
+ type Arrangement =
757
+ record {
758
+ contributionAmount: opt nat;
759
+ description: text;
760
+ document: TA6Document;
761
+ };
451
762
  type ApplicationStatusUpdate =
452
763
  record {
453
764
  applicationReference: text;
@@ -457,6 +768,19 @@ type ApplicationStatusUpdate =
457
768
  previousStatus: LandRegistryStatus;
458
769
  statusChanged: bool;
459
770
  };
771
+ type AlterationTypes =
772
+ record {
773
+ changeOfUse: bool;
774
+ conservatory: bool;
775
+ extension: bool;
776
+ garageConversion: bool;
777
+ internalWallsRemoved: bool;
778
+ loftConversion: bool;
779
+ other: bool;
780
+ otherDetails: opt text;
781
+ structuralRoofWorks: bool;
782
+ windowsPost2002: bool;
783
+ };
460
784
  type AMLStatus =
461
785
  variant {
462
786
  not_started;
@@ -473,6 +797,7 @@ service : {
473
797
  (Result);
474
798
  assignSolicitorRecord: (transactionId: text, solicitorRecord:
475
799
  SolicitorRecord) -> (Result_1);
800
+ backfillTransactionMembers: () -> (Result_20);
476
801
  bootstrapDocumentStorageCanister: (canisterId: principal) -> (Result);
477
802
  canAccessTransaction: (transactionId: text) -> (bool) query;
478
803
  connectBot: (transactionId: text, botPrincipal: principal, botName:
@@ -492,7 +817,7 @@ service : {
492
817
  postcode: text, titleNumber: text, seller: principal, previousOwner:
493
818
  text, amount: nat64, transactionType: text, userRole: text, propertyType:
494
819
  text, propertyCategory: text, mode: text, deposit: nat64, mortgageAmount:
495
- nat64, completionDate: text) -> (Result_18);
820
+ nat64, completionDate: text) -> (Result_19);
496
821
  deleteTransaction: (transactionId: text) -> (Result);
497
822
  disconnectBot: (transactionId: text, botPrincipal: principal) -> (Result_1);
498
823
  doesTransactionExist: (transactionId: text) -> (bool) query;
@@ -501,17 +826,20 @@ service : {
501
826
  text;
502
827
  }) query;
503
828
  getAllTransactions: () -> (vec Transaction) query;
504
- getCurrentPhase: (transactionId: text) -> (Result_17) query;
829
+ getCurrentPhase: (transactionId: text) -> (Result_18) query;
505
830
  getCycles: () -> (nat) query;
506
831
  getDocumentStorageCanister: () -> (opt principal) query;
507
832
  getExpiringSearches: (withinDays: nat) -> (vec Transaction) query;
508
833
  getFlowState: (transactionId: text) -> (opt text) query;
509
834
  getInviteCode: (transactionId: text) -> (Result) query;
835
+ getLandRegistryCanister: () -> (text) query;
510
836
  getLandRegistryDetail: (transactionID: text) ->
511
837
  (opt LandRegistryIntegration) query;
838
+ getLedgerManagerCanister: () -> (text) query;
512
839
  getListingData: (transactionId: text) -> (opt text) query;
513
840
  getMyNotifications: () -> (vec Notification) query;
514
841
  getMyTransactions: () -> (vec Transaction) query;
842
+ getNextStep: (id: text) -> (Result_17) composite_query;
515
843
  getOutstandingRequisitions: () -> (vec record {
516
844
  text;
517
845
  Requisition;
@@ -519,6 +847,7 @@ service : {
519
847
  getPartyProgress: (transactionId: text) -> (Result_16) query;
520
848
  getPendingLRApplications: () -> (vec Transaction) query;
521
849
  getPhaseMilestones: (transactionId: text) -> (Result_15) query;
850
+ getPropertyRegistryCanister: () -> (text) query;
522
851
  getSolicitorStatus: (transactionId: text) -> (Result_14) query;
523
852
  getTA10: (txId: text) -> (Result_13) query;
524
853
  getTA6: (txId: text) -> (Result_12) query;
@@ -542,27 +871,83 @@ service : {
542
871
  (opt TransactionTimeline) query;
543
872
  initiate_blockchain_completion: (transactionID: text, buyerFundsHash:
544
873
  text, completionStatementHash: text) -> (Result);
874
+ joinAsBotByInviteCode: (inviteCode: text, botName: text) -> (Result_6);
545
875
  joinTransactionByInviteCode: (inviteCode: text) -> (Result_6);
876
+ joinTransactionByInviteCodeAsBuyer: (inviteCode: text) -> (Result_6);
877
+ /// Caller-initiated removal from a transaction they joined but didn't
878
+ /// create. Counterpart to `removeParty` (which is seller/admin-driven and
879
+ /// gated against primary parties) — this is the "I want out" path for a
880
+ /// joined buyer or any other access-list member.
881
+ ///
882
+ /// Gates:
883
+ /// - Anonymous callers rejected outright.
884
+ /// - Seller / createdBy cannot leave their own transaction (they
885
+ /// dispose via deleteTransaction).
886
+ /// - Caller must currently have access to the transaction.
887
+ /// - Locked after contract exchange (same posture as assignBuyer):
888
+ /// once the deal is signed nobody walks away by toggling a button.
889
+ ///
890
+ /// Effects:
891
+ /// - Caller is removed from `accessList`.
892
+ /// - If the caller is the assigned buyer (`txn.buyer == msg.caller`),
893
+ /// the buyer slot is reset to the seller placeholder, matching the
894
+ /// sentinel state that `assignBuyer` checks for. The transaction
895
+ /// re-enters the "Awaiting buyer" state and the invite code is
896
+ /// reusable by a new joiner.
897
+ /// - Audit event `buyer_left` (or `party_left` for non-buyer leavers)
898
+ /// is logged via the existing ledger pattern.
899
+ ///
900
+ /// Concurrency: uses the same acquireTxLock/finally releaseTxLock
901
+ /// posture as assignBuyer so a leave can't race against an in-flight
902
+ /// stage write.
903
+ leaveTransaction: (transactionId: text) -> (Result);
546
904
  linkTransactionToChain: (myTransactionId: text, buyingTransactionId:
547
905
  text) -> (Result_1);
548
906
  markAllNotificationsRead: () -> (nat);
549
907
  markContractDrafted: (transactionId: text) -> (Result_1);
550
908
  markNotificationRead: (notificationId: nat) -> (Result_1);
551
909
  markSearchesOrdered: (transactionId: text) -> (Result_1);
910
+ /// Heal developer-plot transactions whose `seller` doesn't match the
911
+ /// org's current developer principal. Two cases this addresses:
912
+ /// 1. Pre-migration txs (seller = buyer placeholder) created before the
913
+ /// developer-on-chain work landed.
914
+ /// 2. Stale-pin txs where the org's pinned principal changed after the
915
+ /// tx was created (e.g. admin password reset → new ICP key, or org
916
+ /// ownership transferred to a different admin).
917
+ ///
918
+ /// Idempotent over the target: re-running with the same developerPrincipal
919
+ /// returns an error (already at target), so admin-driven backfill scripts
920
+ /// don't silently re-touch state. Always rejects:
921
+ /// - non-development mode txs
922
+ /// - developerPrincipal == buyer (would break Principal.equal checks)
923
+ /// - anonymous principal
924
+ migrateDevPlotSeller: (transactionId: text, developerPrincipal:
925
+ principal) -> (Result);
552
926
  onDocumentRegistered: (transactionId: text, docType: text, documentHash:
553
927
  text, uploadedBy: principal) -> ();
554
928
  on_blockchain_completion_success: (transactionID: text) -> (Result);
555
929
  pollAllPendingApplications: () -> (Result_5);
556
930
  pollApplicationStatus: (transactionID: text) -> (Result_4);
931
+ /// Closes #31 (TOCTOU): per-transaction lock blocks concurrent solicitors
932
+ /// from racing to record exchange while canModifyTransaction await is in flight.
557
933
  recordContractExchange: (transactionID: text, buyerSolicitorSignature:
558
934
  text, sellerSolicitorSignature: text) -> (Result);
935
+ recordConveyancerSelected: (txId: text, conveyancerId: text,
936
+ acceptedQuoteHash: text, finalAmountPence: nat) -> (Result_1);
559
937
  recordFormUpload: (txId: text, formType: text, fileHash: text, fileName:
560
938
  text) -> (Result_1);
561
939
  /// Record a single party's signature on-chain.
562
940
  /// The canister identifies the caller as buyer or seller from the transaction principals.
563
941
  /// When both parties have signed, the status auto-advances to #exchanged.
942
+ /// Closes #31 (TOCTOU): per-transaction lock blocks concurrent mutation
943
+ /// (buyer + seller racing to sign) while canModifyTransaction await is in flight.
564
944
  recordPartySignature: (transactionID: text, signatureHash: text,
565
945
  signingRole: text) -> (Result);
946
+ recordQuoteReceived: (txId: text, conveyancerId: text, quoteHash: text,
947
+ quotedAmountPence: nat) -> (Result_1);
948
+ recordQuoteRequested: (txId: text, conveyancerId: text) -> (Result_1);
949
+ /// Closes #31 (TOCTOU): per-transaction lock blocks concurrent mutation
950
+ /// while the isAdmin await is in flight.
566
951
  recordRequisition: (transactionID: text, requisition: Requisition) ->
567
952
  (Result_1);
568
953
  removeParty: (transactionId: text, partyPrincipal: principal) -> (Result_1);
@@ -571,12 +956,17 @@ service : {
571
956
  seller;
572
957
  }) -> (Result_1);
573
958
  requestOfficialSearch: (transactionID: text) -> (Result_3);
959
+ /// Closes #31 (TOCTOU): per-transaction lock blocks concurrent mutation
960
+ /// while canModifyTransaction await is in flight.
574
961
  respondToRequisition: (transactionID: text, requisitionId: text,
575
962
  responseText: text, _supportingDocumentHashes: vec text) -> (Result_1);
576
963
  revokeBuyer: (transactionId: text, buyerPrincipal: principal) -> (Result);
577
964
  setDocumentStorageCanister: (canisterId: principal) -> (Result);
578
965
  setFlowState: (transactionId: text, jsonData: text) -> (Result);
966
+ setLandRegistryCanister: (canisterId: text) -> (Result);
967
+ setLedgerManagerCanister: (canisterId: text) -> (Result);
579
968
  setListingData: (transactionId: text, jsonData: text) -> (Result);
969
+ setPropertyRegistryCanister: (canisterId: text) -> (Result);
580
970
  setUserManagementCanister: (canisterId: text) -> (Result);
581
971
  trigger_land_registry_submission: (transactionID: text) -> (Result);
582
972
  updatePartyAMLDoc: (transactionId: text, partyPrincipal: principal,
@@ -592,7 +982,8 @@ service : {
592
982
  updateTA10: (txId: text, data: TA10FittingsAndContents) -> (Result_1);
593
983
  updateTA6: (txId: text, data: TA6PropertyInformation) -> (Result_1);
594
984
  updateTA7: (txId: text, data: TA7LeaseholdInformation) -> (Result_1);
595
- updateTransactionStatus: (transactionId: nat, newStatus: text) -> (bool);
985
+ updateTitleNumber: (transactionId: text, newTitleNumber: text) -> (Result);
986
+ updateTransactionStatus: (_transactionId: nat, _newStatus: text) -> (bool);
596
987
  update_land_registry_status: (transactionID: text, lrStatus:
597
988
  LandRegistryStatus, confirmationNumber: opt text, estimatedCompletionTime:
598
989
  opt int) -> (Result);