@d19n/youfibre-odin-sdk 2.0.13-beta.1 → 2.0.13

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 (239) hide show
  1. package/README.md +11 -10
  2. package/dist/actions-v2/CreateOrderFromBrskDto.d.ts +75 -0
  3. package/dist/actions-v2/CreateOrderItemFromBrskDto.d.ts +191 -0
  4. package/dist/actions-v2/CreateOrderItemFromBrskDto.js +52 -0
  5. package/dist/entities-v2/Order.d.ts +7 -0
  6. package/dist/entities-v2/Order.js +2 -0
  7. package/dist/entities-v2/OrderItem.d.ts +7 -0
  8. package/dist/entities-v2/OrderItem.js +2 -0
  9. package/dist/entities-v2/Product.d.ts +0 -42
  10. package/dist/entities-v2/Product.js +0 -2
  11. package/dist/records-v2/AccountCreditRecord.d.ts +62 -1
  12. package/dist/records-v2/AccountCreditRecord.js +91 -0
  13. package/dist/records-v2/AccountRecord.d.ts +306 -2
  14. package/dist/records-v2/AccountRecord.js +451 -0
  15. package/dist/records-v2/ActivityLogRecord.d.ts +122 -1
  16. package/dist/records-v2/ActivityLogRecord.js +190 -0
  17. package/dist/records-v2/ActivityRecord.d.ts +255 -2
  18. package/dist/records-v2/ActivityRecord.js +387 -0
  19. package/dist/records-v2/AddressRecord.d.ts +321 -0
  20. package/dist/records-v2/AddressRecord.js +532 -0
  21. package/dist/records-v2/AffiliateCodeRecord.d.ts +102 -1
  22. package/dist/records-v2/AffiliateCodeRecord.js +157 -0
  23. package/dist/records-v2/AppointmentRecord.d.ts +141 -0
  24. package/dist/records-v2/AppointmentRecord.js +235 -0
  25. package/dist/records-v2/BillingAdjustmentRecord.d.ts +81 -0
  26. package/dist/records-v2/BillingAdjustmentRecord.js +136 -0
  27. package/dist/records-v2/BillingRequestRecord.d.ts +178 -2
  28. package/dist/records-v2/BillingRequestRecord.js +271 -0
  29. package/dist/records-v2/BlockageA55Record.d.ts +103 -2
  30. package/dist/records-v2/BlockageA55Record.js +157 -0
  31. package/dist/records-v2/BrskEntityMigrationErrorRecord.d.ts +21 -1
  32. package/dist/records-v2/BrskEntityMigrationErrorRecord.js +21 -0
  33. package/dist/records-v2/CallEventRecord.d.ts +82 -1
  34. package/dist/records-v2/CallEventRecord.js +124 -0
  35. package/dist/records-v2/CallLegRecord.d.ts +82 -1
  36. package/dist/records-v2/CallLegRecord.js +124 -0
  37. package/dist/records-v2/CallRecord.d.ts +202 -1
  38. package/dist/records-v2/CallRecord.js +322 -0
  39. package/dist/records-v2/CallTransferRecord.d.ts +102 -1
  40. package/dist/records-v2/CallTransferRecord.js +157 -0
  41. package/dist/records-v2/CampaignRecord.d.ts +83 -2
  42. package/dist/records-v2/CampaignRecord.js +124 -0
  43. package/dist/records-v2/CaseRecord.d.ts +418 -2
  44. package/dist/records-v2/CaseRecord.js +667 -0
  45. package/dist/records-v2/ChangeReasonRecord.d.ts +171 -2
  46. package/dist/records-v2/ChangeReasonRecord.js +238 -0
  47. package/dist/records-v2/ChurnRequestRecord.d.ts +62 -1
  48. package/dist/records-v2/ChurnRequestRecord.js +91 -0
  49. package/dist/records-v2/ContactRecord.d.ts +560 -0
  50. package/dist/records-v2/ContactRecord.js +927 -0
  51. package/dist/records-v2/ContractBuyOutRecord.d.ts +162 -1
  52. package/dist/records-v2/ContractBuyOutRecord.js +256 -0
  53. package/dist/records-v2/ConversationFeedbackRecord.d.ts +102 -1
  54. package/dist/records-v2/ConversationFeedbackRecord.js +157 -0
  55. package/dist/records-v2/ConversationRecord.d.ts +102 -1
  56. package/dist/records-v2/ConversationRecord.js +157 -0
  57. package/dist/records-v2/CreditNoteRecord.d.ts +81 -0
  58. package/dist/records-v2/CreditNoteRecord.js +136 -0
  59. package/dist/records-v2/CrmDatasetRecord.d.ts +191 -2
  60. package/dist/records-v2/CrmDatasetRecord.js +271 -0
  61. package/dist/records-v2/CustomerDeviceAtaRecord.d.ts +21 -0
  62. package/dist/records-v2/CustomerDeviceAtaRecord.js +37 -0
  63. package/dist/records-v2/CustomerDeviceConfigurationRecord.d.ts +62 -1
  64. package/dist/records-v2/CustomerDeviceConfigurationRecord.js +91 -0
  65. package/dist/records-v2/CustomerDeviceOntRecord.d.ts +181 -0
  66. package/dist/records-v2/CustomerDeviceOntRecord.js +301 -0
  67. package/dist/records-v2/CustomerDeviceRouterRecord.d.ts +141 -0
  68. package/dist/records-v2/CustomerDeviceRouterRecord.js +235 -0
  69. package/dist/records-v2/CustomerPhonePortingRecord.d.ts +21 -0
  70. package/dist/records-v2/CustomerPhonePortingRecord.js +37 -0
  71. package/dist/records-v2/DiscountRecord.d.ts +121 -0
  72. package/dist/records-v2/DiscountRecord.js +202 -0
  73. package/dist/records-v2/EmailRecord.d.ts +230 -2
  74. package/dist/records-v2/EmailRecord.js +336 -0
  75. package/dist/records-v2/EmailSenderRecord.d.ts +42 -1
  76. package/dist/records-v2/EmailSenderRecord.js +58 -0
  77. package/dist/records-v2/EmailTemplateRecord.d.ts +21 -1
  78. package/dist/records-v2/EmailTemplateRecord.js +21 -0
  79. package/dist/records-v2/FieldServiceDispatchedProductRecord.d.ts +135 -2
  80. package/dist/records-v2/FieldServiceDispatchedProductRecord.js +189 -0
  81. package/dist/records-v2/FieldServiceProductRecord.d.ts +115 -2
  82. package/dist/records-v2/FieldServiceProductRecord.js +156 -0
  83. package/dist/records-v2/FileRecord.d.ts +1211 -2
  84. package/dist/records-v2/FileRecord.js +1902 -0
  85. package/dist/records-v2/ImpersonationTrackerRecord.d.ts +62 -1
  86. package/dist/records-v2/ImpersonationTrackerRecord.js +91 -0
  87. package/dist/records-v2/InternalInstallAuditRecord.d.ts +83 -2
  88. package/dist/records-v2/InternalInstallAuditRecord.js +124 -0
  89. package/dist/records-v2/InvoiceItemRecord.d.ts +40 -0
  90. package/dist/records-v2/InvoiceItemRecord.js +69 -0
  91. package/dist/records-v2/InvoiceRecord.d.ts +399 -2
  92. package/dist/records-v2/InvoiceRecord.js +635 -0
  93. package/dist/records-v2/KnowledgeArticleRecord.d.ts +98 -2
  94. package/dist/records-v2/KnowledgeArticleRecord.js +139 -0
  95. package/dist/records-v2/LeadRecord.d.ts +261 -0
  96. package/dist/records-v2/LeadRecord.js +433 -0
  97. package/dist/records-v2/MessageRecord.d.ts +99 -2
  98. package/dist/records-v2/MessageRecord.js +140 -0
  99. package/dist/records-v2/NetworkDeviceRecord.d.ts +43 -2
  100. package/dist/records-v2/NetworkDeviceRecord.js +58 -0
  101. package/dist/records-v2/NoteRecord.d.ts +1121 -1
  102. package/dist/records-v2/NoteRecord.js +1839 -0
  103. package/dist/records-v2/OfferRecord.d.ts +154 -2
  104. package/dist/records-v2/OfferRecord.js +221 -0
  105. package/dist/records-v2/OhAuditOfInstallationRecord.d.ts +83 -2
  106. package/dist/records-v2/OhAuditOfInstallationRecord.js +124 -0
  107. package/dist/records-v2/OhExternalAuditRecord.d.ts +83 -2
  108. package/dist/records-v2/OhExternalAuditRecord.js +124 -0
  109. package/dist/records-v2/OhInProgressAuditRecord.d.ts +83 -2
  110. package/dist/records-v2/OhInProgressAuditRecord.js +124 -0
  111. package/dist/records-v2/OhInstallationAuditRecord.d.ts +83 -2
  112. package/dist/records-v2/OhInstallationAuditRecord.js +124 -0
  113. package/dist/records-v2/OhRetroAuditRecord.d.ts +83 -2
  114. package/dist/records-v2/OhRetroAuditRecord.js +124 -0
  115. package/dist/records-v2/OneTouchSwitchRecord.d.ts +255 -2
  116. package/dist/records-v2/OneTouchSwitchRecord.js +387 -0
  117. package/dist/records-v2/OntReplacementApprovalRecord.d.ts +62 -1
  118. package/dist/records-v2/OntReplacementApprovalRecord.js +91 -0
  119. package/dist/records-v2/OrderCheckRecord.d.ts +21 -0
  120. package/dist/records-v2/OrderCheckRecord.js +37 -0
  121. package/dist/records-v2/OrderItemRecord.d.ts +309 -0
  122. package/dist/records-v2/OrderItemRecord.js +501 -0
  123. package/dist/records-v2/OrderKciRecord.d.ts +42 -1
  124. package/dist/records-v2/OrderKciRecord.js +58 -0
  125. package/dist/records-v2/OrderRecord.d.ts +620 -0
  126. package/dist/records-v2/OrderRecord.js +1026 -0
  127. package/dist/records-v2/OutageRecord.d.ts +42 -1
  128. package/dist/records-v2/OutageRecord.js +58 -0
  129. package/dist/records-v2/OverlayRealA55Record.d.ts +83 -2
  130. package/dist/records-v2/OverlayRealA55Record.js +124 -0
  131. package/dist/records-v2/PICRequestRecord.d.ts +62 -1
  132. package/dist/records-v2/PICRequestRecord.js +91 -0
  133. package/dist/records-v2/PaymentMethodRecord.d.ts +121 -0
  134. package/dist/records-v2/PaymentMethodRecord.js +202 -0
  135. package/dist/records-v2/PaymentMethodRefundRecord.d.ts +181 -0
  136. package/dist/records-v2/PaymentMethodRefundRecord.js +301 -0
  137. package/dist/records-v2/PaymentRecord.d.ts +82 -1
  138. package/dist/records-v2/PaymentRecord.js +124 -0
  139. package/dist/records-v2/PermissionToFailRecord.d.ts +61 -0
  140. package/dist/records-v2/PermissionToFailRecord.js +103 -0
  141. package/dist/records-v2/PgAccountValidationRecord.d.ts +21 -1
  142. package/dist/records-v2/PgAccountValidationRecord.js +21 -0
  143. package/dist/records-v2/PgContactRecord.d.ts +62 -1
  144. package/dist/records-v2/PgContactRecord.js +91 -0
  145. package/dist/records-v2/PgDirectDebitFileRecord.d.ts +95 -2
  146. package/dist/records-v2/PgDirectDebitFileRecord.js +123 -0
  147. package/dist/records-v2/PgDisputeRecord.d.ts +62 -1
  148. package/dist/records-v2/PgDisputeRecord.js +91 -0
  149. package/dist/records-v2/PgFileAllocationRecord.d.ts +115 -2
  150. package/dist/records-v2/PgFileAllocationRecord.js +156 -0
  151. package/dist/records-v2/PgLogRecord.d.ts +21 -1
  152. package/dist/records-v2/PgLogRecord.js +21 -0
  153. package/dist/records-v2/PgPaymentMethodRecord.d.ts +102 -1
  154. package/dist/records-v2/PgPaymentMethodRecord.js +157 -0
  155. package/dist/records-v2/PgSortCodeSubstitutionRecord.d.ts +21 -1
  156. package/dist/records-v2/PgSortCodeSubstitutionRecord.js +21 -0
  157. package/dist/records-v2/PgTransactionRecord.d.ts +135 -2
  158. package/dist/records-v2/PgTransactionRecord.js +189 -0
  159. package/dist/records-v2/PgVocalinkRecord.d.ts +21 -1
  160. package/dist/records-v2/PgVocalinkRecord.js +21 -0
  161. package/dist/records-v2/PgWebhookAttemptRecord.d.ts +42 -1
  162. package/dist/records-v2/PgWebhookAttemptRecord.js +58 -0
  163. package/dist/records-v2/PgWebhookRecord.d.ts +122 -1
  164. package/dist/records-v2/PgWebhookRecord.js +190 -0
  165. package/dist/records-v2/PhoneNumberRecord.d.ts +41 -0
  166. package/dist/records-v2/PhoneNumberRecord.js +70 -0
  167. package/dist/records-v2/PriceBookRecord.d.ts +21 -0
  168. package/dist/records-v2/PriceBookRecord.js +37 -0
  169. package/dist/records-v2/ProductRecord.d.ts +258 -2
  170. package/dist/records-v2/ProductRecord.js +351 -0
  171. package/dist/records-v2/PushNotificationRecord.d.ts +162 -1
  172. package/dist/records-v2/PushNotificationRecord.js +256 -0
  173. package/dist/records-v2/ReferralRecord.d.ts +143 -2
  174. package/dist/records-v2/ReferralRecord.js +223 -0
  175. package/dist/records-v2/RemediationOutcomeFormRecord.d.ts +83 -2
  176. package/dist/records-v2/RemediationOutcomeFormRecord.js +124 -0
  177. package/dist/records-v2/RemediationRequiredReasonRecord.d.ts +103 -2
  178. package/dist/records-v2/RemediationRequiredReasonRecord.js +157 -0
  179. package/dist/records-v2/ReturnsRecord.d.ts +62 -1
  180. package/dist/records-v2/ReturnsRecord.js +91 -0
  181. package/dist/records-v2/RewardRecord.d.ts +123 -2
  182. package/dist/records-v2/RewardRecord.js +190 -0
  183. package/dist/records-v2/SalesTerritoryRecord.d.ts +79 -2
  184. package/dist/records-v2/SalesTerritoryRecord.js +107 -0
  185. package/dist/records-v2/ScheduleSlotRecord.d.ts +42 -1
  186. package/dist/records-v2/ScheduleSlotRecord.js +58 -0
  187. package/dist/records-v2/ServiceAppointmentConfigRecord.d.ts +287 -2
  188. package/dist/records-v2/ServiceAppointmentConfigRecord.js +367 -0
  189. package/dist/records-v2/ServiceAppointmentRecord.d.ts +81 -0
  190. package/dist/records-v2/ServiceAppointmentRecord.js +136 -0
  191. package/dist/records-v2/ServiceRecord.d.ts +40 -0
  192. package/dist/records-v2/ServiceRecord.js +69 -0
  193. package/dist/records-v2/ServiceVisitAuditRecord.d.ts +83 -2
  194. package/dist/records-v2/ServiceVisitAuditRecord.js +124 -0
  195. package/dist/records-v2/SiteSpecificRiskAssessmentOutcomeFormRecord.d.ts +83 -2
  196. package/dist/records-v2/SiteSpecificRiskAssessmentOutcomeFormRecord.js +124 -0
  197. package/dist/records-v2/SmsMessageRecord.d.ts +175 -2
  198. package/dist/records-v2/SmsMessageRecord.js +255 -0
  199. package/dist/records-v2/SweeperMaintenanceAuditRecord.d.ts +83 -2
  200. package/dist/records-v2/SweeperMaintenanceAuditRecord.js +124 -0
  201. package/dist/records-v2/TeamRecord.d.ts +101 -0
  202. package/dist/records-v2/TeamRecord.js +169 -0
  203. package/dist/records-v2/TestEntityForVisualBuilderRecord.d.ts +115 -2
  204. package/dist/records-v2/TestEntityForVisualBuilderRecord.js +156 -0
  205. package/dist/records-v2/TimeSlotRecord.d.ts +21 -0
  206. package/dist/records-v2/TimeSlotRecord.js +37 -0
  207. package/dist/records-v2/TransactionRecord.d.ts +181 -1
  208. package/dist/records-v2/TransactionRecord.js +288 -0
  209. package/dist/records-v2/TwilioUserUpdateRecord.d.ts +42 -1
  210. package/dist/records-v2/TwilioUserUpdateRecord.js +58 -0
  211. package/dist/records-v2/UgAuditOfInstallationRecord.d.ts +83 -2
  212. package/dist/records-v2/UgAuditOfInstallationRecord.js +124 -0
  213. package/dist/records-v2/UgExternalAuditRecord.d.ts +83 -2
  214. package/dist/records-v2/UgExternalAuditRecord.js +124 -0
  215. package/dist/records-v2/UgInProgressAuditRecord.d.ts +83 -2
  216. package/dist/records-v2/UgInProgressAuditRecord.js +124 -0
  217. package/dist/records-v2/UgInstallationAuditRecord.d.ts +83 -2
  218. package/dist/records-v2/UgInstallationAuditRecord.js +124 -0
  219. package/dist/records-v2/UgRetroAuditRecord.d.ts +83 -2
  220. package/dist/records-v2/UgRetroAuditRecord.js +124 -0
  221. package/dist/records-v2/UserRecord.d.ts +400 -0
  222. package/dist/records-v2/UserRecord.js +663 -0
  223. package/dist/records-v2/VisitRecord.d.ts +121 -0
  224. package/dist/records-v2/VisitRecord.js +202 -0
  225. package/dist/records-v2/VoiceConfigurationRecord.d.ts +21 -0
  226. package/dist/records-v2/VoiceConfigurationRecord.js +37 -0
  227. package/dist/records-v2/WayleaveAuditRecord.d.ts +83 -2
  228. package/dist/records-v2/WayleaveAuditRecord.js +124 -0
  229. package/dist/records-v2/WorkOrderRecord.d.ts +1226 -2
  230. package/dist/records-v2/WorkOrderRecord.js +1865 -0
  231. package/dist/records-v2/WorkOrderStatusUpdateRecord.d.ts +75 -2
  232. package/dist/records-v2/WorkOrderStatusUpdateRecord.js +90 -0
  233. package/dist/records-v2/YfFieldServiceVisitRecord.d.ts +83 -2
  234. package/dist/records-v2/YfFieldServiceVisitRecord.js +124 -0
  235. package/dist/records-v2/YfStockAuditRecord.d.ts +103 -2
  236. package/dist/records-v2/YfStockAuditRecord.js +157 -0
  237. package/dist/records-v2/index.d.ts +1 -1
  238. package/dist/records-v2/index.js +5 -5
  239. package/package.json +1 -1
@@ -14,6 +14,8 @@
14
14
  * await record.createAffiliateCode({ ... }).execute();
15
15
  * ```
16
16
  *
17
+ * Entity Types: DEFAULT
18
+ *
17
19
  * AUTO-GENERATED - DO NOT EDIT DIRECTLY
18
20
  */
19
21
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
@@ -29,6 +31,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
29
31
  exports.isAffiliateCodeRecord = exports.AffiliateCodeRecord = void 0;
30
32
  const uuid_1 = require("uuid");
31
33
  const core_1 = require("@d19n/odin-types/dist/core");
34
+ const record_link_manager_1 = require("@d19n/odin-sdk-generator/dist/record-link-manager");
35
+ const CampaignRecord_1 = require("./CampaignRecord");
36
+ const ContactRecord_1 = require("./ContactRecord");
37
+ const ReferralRecord_1 = require("./ReferralRecord");
38
+ const RewardRecord_1 = require("./RewardRecord");
32
39
  /**
33
40
  * Builder for action execution with dryRun support
34
41
  *
@@ -140,6 +147,145 @@ class AffiliateCodeRecord {
140
147
  /** Access the underlying OdinRecord (null for new records) */
141
148
  get record() { return this._record; }
142
149
  // ============================================
150
+ // TYPE GUARDS (with TypeScript type predicates)
151
+ // ============================================
152
+ /**
153
+ * Type guard: check if this record is of type DEFAULT
154
+ *
155
+ * When this returns true, TypeScript automatically narrows the type,
156
+ * giving you access to DEFAULT-specific properties.
157
+ *
158
+ * @example
159
+ * ```typescript
160
+ * if (record.isDefault()) {
161
+ * // TypeScript knows record.properties is AffiliateCodeProperties
162
+ * console.log(record.properties.SomeTypeSpecificField);
163
+ * }
164
+ * ```
165
+ * @remarks This is the default record type
166
+ */
167
+ isDefault() { var _a; return ((_a = this._record) === null || _a === void 0 ? void 0 : _a.type) === 'DEFAULT'; }
168
+ /**
169
+ * Access linked Campaign records
170
+ * @remarks Available labels: CampaignAffiliateCodes
171
+ * @throws Error if called on a new (unsaved) record
172
+ *
173
+ * @example
174
+ * ```typescript
175
+ * // Get all linked Campaign records
176
+ * const items = await record.campaigns.list();
177
+ * const first = await record.campaigns.first();
178
+ *
179
+ * // Filter by label
180
+ * const specific = await record.campaigns.first({ label: 'CampaignAffiliateCodes' });
181
+ * ```
182
+ */
183
+ get campaigns() {
184
+ var _a;
185
+ if (!((_a = this._record) === null || _a === void 0 ? void 0 : _a.id))
186
+ throw new Error('Cannot access links on a new (unsaved) record');
187
+ if (!this._campaigns) {
188
+ this._campaigns = new record_link_manager_1.RecordLinkManager(this._provider, this._record, {
189
+ sourceEntity: 'CrmModule:AffiliateCode',
190
+ targetEntity: 'CrmModule:Campaign',
191
+ targetModuleName: 'CrmModule',
192
+ targetEntityName: 'Campaign',
193
+ labels: ['CampaignAffiliateCodes'],
194
+ }, CampaignRecord_1.CampaignRecord);
195
+ }
196
+ return this._campaigns;
197
+ }
198
+ /**
199
+ * Access linked Contact records
200
+ * @remarks Available labels: ContactAffiliateCodes
201
+ * @throws Error if called on a new (unsaved) record
202
+ *
203
+ * @example
204
+ * ```typescript
205
+ * // Get all linked Contact records
206
+ * const items = await record.contacts.list();
207
+ * const first = await record.contacts.first();
208
+ *
209
+ * // Filter by label
210
+ * const specific = await record.contacts.first({ label: 'ContactAffiliateCodes' });
211
+ * ```
212
+ */
213
+ get contacts() {
214
+ var _a;
215
+ if (!((_a = this._record) === null || _a === void 0 ? void 0 : _a.id))
216
+ throw new Error('Cannot access links on a new (unsaved) record');
217
+ if (!this._contacts) {
218
+ this._contacts = new record_link_manager_1.RecordLinkManager(this._provider, this._record, {
219
+ sourceEntity: 'CrmModule:AffiliateCode',
220
+ targetEntity: 'CrmModule:Contact',
221
+ targetModuleName: 'CrmModule',
222
+ targetEntityName: 'Contact',
223
+ labels: ['ContactAffiliateCodes'],
224
+ }, ContactRecord_1.ContactRecord);
225
+ }
226
+ return this._contacts;
227
+ }
228
+ /**
229
+ * Access linked Referral records
230
+ * @remarks Available labels: AffiliateCodeReferrals
231
+ * @throws Error if called on a new (unsaved) record
232
+ *
233
+ * @example
234
+ * ```typescript
235
+ * // Get all linked Referral records
236
+ * const items = await record.referrals.list();
237
+ * const first = await record.referrals.first();
238
+ *
239
+ * // Filter by label
240
+ * const specific = await record.referrals.first({ label: 'AffiliateCodeReferrals' });
241
+ * ```
242
+ */
243
+ get referrals() {
244
+ var _a;
245
+ if (!((_a = this._record) === null || _a === void 0 ? void 0 : _a.id))
246
+ throw new Error('Cannot access links on a new (unsaved) record');
247
+ if (!this._referrals) {
248
+ this._referrals = new record_link_manager_1.RecordLinkManager(this._provider, this._record, {
249
+ sourceEntity: 'CrmModule:AffiliateCode',
250
+ targetEntity: 'CrmModule:Referral',
251
+ targetModuleName: 'CrmModule',
252
+ targetEntityName: 'Referral',
253
+ labels: ['AffiliateCodeReferrals'],
254
+ }, ReferralRecord_1.ReferralRecord);
255
+ }
256
+ return this._referrals;
257
+ }
258
+ /**
259
+ * Access linked Reward records
260
+ * @remarks Available labels: AffiliateCodeRewards
261
+ * @throws Error if called on a new (unsaved) record
262
+ *
263
+ * @example
264
+ * ```typescript
265
+ * // Get all linked Reward records
266
+ * const items = await record.rewards.list();
267
+ * const first = await record.rewards.first();
268
+ *
269
+ * // Filter by label
270
+ * const specific = await record.rewards.first({ label: 'AffiliateCodeRewards' });
271
+ * ```
272
+ */
273
+ get rewards() {
274
+ var _a;
275
+ if (!((_a = this._record) === null || _a === void 0 ? void 0 : _a.id))
276
+ throw new Error('Cannot access links on a new (unsaved) record');
277
+ if (!this._rewards) {
278
+ this._rewards = new record_link_manager_1.RecordLinkManager(this._provider, this._record, {
279
+ sourceEntity: 'CrmModule:AffiliateCode',
280
+ targetEntity: 'CrmModule:Reward',
281
+ targetModuleName: 'CrmModule',
282
+ targetEntityName: 'Reward',
283
+ labels: ['AffiliateCodeRewards'],
284
+ }, RewardRecord_1.RewardRecord);
285
+ }
286
+ return this._rewards;
287
+ }
288
+ // ============================================
143
289
  // LINK MANAGEMENT
144
290
  // ============================================
145
291
  /**
@@ -215,6 +361,17 @@ class AffiliateCodeRecord {
215
361
  }
216
362
  }
217
363
  exports.AffiliateCodeRecord = AffiliateCodeRecord;
364
+ // ============================================
365
+ // TYPED LINK ACCESSORS
366
+ // ============================================
367
+ /** Valid labels for Campaign associations */
368
+ AffiliateCodeRecord.campaignsLabels = ['CampaignAffiliateCodes'];
369
+ /** Valid labels for Contact associations */
370
+ AffiliateCodeRecord.contactsLabels = ['ContactAffiliateCodes'];
371
+ /** Valid labels for Referral associations */
372
+ AffiliateCodeRecord.referralsLabels = ['AffiliateCodeReferrals'];
373
+ /** Valid labels for Reward associations */
374
+ AffiliateCodeRecord.rewardsLabels = ['AffiliateCodeRewards'];
218
375
  /** Type guard to check if an object is a AffiliateCodeRecord */
219
376
  function isAffiliateCodeRecord(obj) {
220
377
  return obj instanceof AffiliateCodeRecord;
@@ -19,8 +19,16 @@ import { OdinRecord, OdinRecordLinkDto } from '@d19n/odin-types/dist/core';
19
19
  import { PipelineStageEntity } from '@d19n/odin-types/dist/core';
20
20
  import { IDbRecordCreateUpdateRes } from '@d19n/odin-types/dist/core/interfaces/v1.db.interfaces';
21
21
  import { IOdinProvider } from '@d19n/odin-sdk-generator/dist/odin-sdk-types';
22
+ import { RecordLinkManager } from '@d19n/odin-sdk-generator/dist/record-link-manager';
22
23
  import { AppointmentProperties } from '../entities-v2/Appointment';
23
24
  import { CreateAppointmentProperties } from '../actions-v2/CreateAppointmentDto';
25
+ import { FileRecord } from './FileRecord';
26
+ import { AddressRecord } from './AddressRecord';
27
+ import { NoteRecord } from './NoteRecord';
28
+ import { VisitRecord } from './VisitRecord';
29
+ import { ContactRecord } from './ContactRecord';
30
+ import { OrderRecord } from './OrderRecord';
31
+ import { LeadRecord } from './LeadRecord';
24
32
  /**
25
33
  * Builder for action execution with dryRun support
26
34
  *
@@ -84,6 +92,13 @@ export declare class AppointmentRecord<TProps = AppointmentProperties> {
84
92
  private _provider;
85
93
  private _pendingLinks;
86
94
  private _preGeneratedId;
95
+ private _files?;
96
+ private _addresses?;
97
+ private _notes?;
98
+ private _visits?;
99
+ private _contacts?;
100
+ private _orders?;
101
+ private _leads?;
87
102
  /**
88
103
  * Create a record wrapper.
89
104
  * @param record - The underlying record, or null for create operations
@@ -109,6 +124,132 @@ export declare class AppointmentRecord<TProps = AppointmentProperties> {
109
124
  get groups(): string[];
110
125
  /** Access the underlying OdinRecord (null for new records) */
111
126
  get record(): OdinRecord<TProps> | null;
127
+ /** Valid labels for File associations */
128
+ static readonly filesLabels: readonly ["Appointment__File"];
129
+ /**
130
+ * Access linked File records
131
+ * @remarks Available labels: Appointment__File
132
+ * @throws Error if called on a new (unsaved) record
133
+ *
134
+ * @example
135
+ * ```typescript
136
+ * // Get all linked File records
137
+ * const items = await record.files.list();
138
+ * const first = await record.files.first();
139
+ *
140
+ * // Filter by label
141
+ * const specific = await record.files.first({ label: 'Appointment__File' });
142
+ * ```
143
+ */
144
+ get files(): RecordLinkManager<FileRecord, typeof AppointmentRecord['filesLabels'][number]>;
145
+ /** Valid labels for Address associations */
146
+ static readonly addressesLabels: readonly ["Address__Appointment"];
147
+ /**
148
+ * Access linked Address records
149
+ * @remarks Available labels: Address__Appointment
150
+ * @throws Error if called on a new (unsaved) record
151
+ *
152
+ * @example
153
+ * ```typescript
154
+ * // Get all linked Address records
155
+ * const items = await record.addresses.list();
156
+ * const first = await record.addresses.first();
157
+ *
158
+ * // Filter by label
159
+ * const specific = await record.addresses.first({ label: 'Address__Appointment' });
160
+ * ```
161
+ */
162
+ get addresses(): RecordLinkManager<AddressRecord, typeof AppointmentRecord['addressesLabels'][number]>;
163
+ /** Valid labels for Note associations */
164
+ static readonly notesLabels: readonly ["Appointment__Note"];
165
+ /**
166
+ * Access linked Note records
167
+ * @remarks Available labels: Appointment__Note
168
+ * @throws Error if called on a new (unsaved) record
169
+ *
170
+ * @example
171
+ * ```typescript
172
+ * // Get all linked Note records
173
+ * const items = await record.notes.list();
174
+ * const first = await record.notes.first();
175
+ *
176
+ * // Filter by label
177
+ * const specific = await record.notes.first({ label: 'Appointment__Note' });
178
+ * ```
179
+ */
180
+ get notes(): RecordLinkManager<NoteRecord, typeof AppointmentRecord['notesLabels'][number]>;
181
+ /** Valid labels for Visit associations */
182
+ static readonly visitsLabels: readonly ["Visit__Appointment"];
183
+ /**
184
+ * Access linked Visit records
185
+ * @remarks Available labels: Visit__Appointment
186
+ * @throws Error if called on a new (unsaved) record
187
+ *
188
+ * @example
189
+ * ```typescript
190
+ * // Get all linked Visit records
191
+ * const items = await record.visits.list();
192
+ * const first = await record.visits.first();
193
+ *
194
+ * // Filter by label
195
+ * const specific = await record.visits.first({ label: 'Visit__Appointment' });
196
+ * ```
197
+ */
198
+ get visits(): RecordLinkManager<VisitRecord, typeof AppointmentRecord['visitsLabels'][number]>;
199
+ /** Valid labels for Contact associations */
200
+ static readonly contactsLabels: readonly ["Contact__Appointment"];
201
+ /**
202
+ * Access linked Contact records
203
+ * @remarks Available labels: Contact__Appointment
204
+ * @throws Error if called on a new (unsaved) record
205
+ *
206
+ * @example
207
+ * ```typescript
208
+ * // Get all linked Contact records
209
+ * const items = await record.contacts.list();
210
+ * const first = await record.contacts.first();
211
+ *
212
+ * // Filter by label
213
+ * const specific = await record.contacts.first({ label: 'Contact__Appointment' });
214
+ * ```
215
+ */
216
+ get contacts(): RecordLinkManager<ContactRecord, typeof AppointmentRecord['contactsLabels'][number]>;
217
+ /** Valid labels for Order associations */
218
+ static readonly ordersLabels: readonly ["Order__Appointment"];
219
+ /**
220
+ * Access linked Order records
221
+ * @remarks Available labels: Order__Appointment
222
+ * @throws Error if called on a new (unsaved) record
223
+ *
224
+ * @example
225
+ * ```typescript
226
+ * // Get all linked Order records
227
+ * const items = await record.orders.list();
228
+ * const first = await record.orders.first();
229
+ *
230
+ * // Filter by label
231
+ * const specific = await record.orders.first({ label: 'Order__Appointment' });
232
+ * ```
233
+ */
234
+ get orders(): RecordLinkManager<OrderRecord, typeof AppointmentRecord['ordersLabels'][number]>;
235
+ /** Valid labels for Lead associations */
236
+ static readonly leadsLabels: readonly ["Lead_Appointment"];
237
+ /**
238
+ * Access linked Lead records
239
+ * @remarks Available labels: Lead_Appointment
240
+ * @throws Error if called on a new (unsaved) record
241
+ *
242
+ * @example
243
+ * ```typescript
244
+ * // Get all linked Lead records
245
+ * const items = await record.leads.list();
246
+ * const first = await record.leads.first();
247
+ *
248
+ * // Filter by label
249
+ * const specific = await record.leads.first({ label: 'Lead_Appointment' });
250
+ * ```
251
+ */
252
+ get leads(): RecordLinkManager<LeadRecord, typeof AppointmentRecord['leadsLabels'][number]>;
112
253
  /**
113
254
  * Queue a link to be created with the next action.
114
255
  * Works for both create and update actions.
@@ -29,6 +29,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.isAppointmentRecord = exports.AppointmentRecord = void 0;
30
30
  const uuid_1 = require("uuid");
31
31
  const core_1 = require("@d19n/odin-types/dist/core");
32
+ const record_link_manager_1 = require("@d19n/odin-sdk-generator/dist/record-link-manager");
33
+ const FileRecord_1 = require("./FileRecord");
34
+ const AddressRecord_1 = require("./AddressRecord");
35
+ const NoteRecord_1 = require("./NoteRecord");
36
+ const VisitRecord_1 = require("./VisitRecord");
37
+ const ContactRecord_1 = require("./ContactRecord");
38
+ const OrderRecord_1 = require("./OrderRecord");
39
+ const LeadRecord_1 = require("./LeadRecord");
32
40
  /**
33
41
  * Builder for action execution with dryRun support
34
42
  *
@@ -139,6 +147,216 @@ class AppointmentRecord {
139
147
  get groups() { var _a; return ((_a = this._record) === null || _a === void 0 ? void 0 : _a.groups) || []; }
140
148
  /** Access the underlying OdinRecord (null for new records) */
141
149
  get record() { return this._record; }
150
+ /**
151
+ * Access linked File records
152
+ * @remarks Available labels: Appointment__File
153
+ * @throws Error if called on a new (unsaved) record
154
+ *
155
+ * @example
156
+ * ```typescript
157
+ * // Get all linked File records
158
+ * const items = await record.files.list();
159
+ * const first = await record.files.first();
160
+ *
161
+ * // Filter by label
162
+ * const specific = await record.files.first({ label: 'Appointment__File' });
163
+ * ```
164
+ */
165
+ get files() {
166
+ var _a;
167
+ if (!((_a = this._record) === null || _a === void 0 ? void 0 : _a.id))
168
+ throw new Error('Cannot access links on a new (unsaved) record');
169
+ if (!this._files) {
170
+ this._files = new record_link_manager_1.RecordLinkManager(this._provider, this._record, {
171
+ sourceEntity: 'CrmModule:Appointment',
172
+ targetEntity: 'SchemaModule:File',
173
+ targetModuleName: 'SchemaModule',
174
+ targetEntityName: 'File',
175
+ labels: ['Appointment__File'],
176
+ }, FileRecord_1.FileRecord);
177
+ }
178
+ return this._files;
179
+ }
180
+ /**
181
+ * Access linked Address records
182
+ * @remarks Available labels: Address__Appointment
183
+ * @throws Error if called on a new (unsaved) record
184
+ *
185
+ * @example
186
+ * ```typescript
187
+ * // Get all linked Address records
188
+ * const items = await record.addresses.list();
189
+ * const first = await record.addresses.first();
190
+ *
191
+ * // Filter by label
192
+ * const specific = await record.addresses.first({ label: 'Address__Appointment' });
193
+ * ```
194
+ */
195
+ get addresses() {
196
+ var _a;
197
+ if (!((_a = this._record) === null || _a === void 0 ? void 0 : _a.id))
198
+ throw new Error('Cannot access links on a new (unsaved) record');
199
+ if (!this._addresses) {
200
+ this._addresses = new record_link_manager_1.RecordLinkManager(this._provider, this._record, {
201
+ sourceEntity: 'CrmModule:Appointment',
202
+ targetEntity: 'CrmModule:Address',
203
+ targetModuleName: 'CrmModule',
204
+ targetEntityName: 'Address',
205
+ labels: ['Address__Appointment'],
206
+ }, AddressRecord_1.AddressRecord);
207
+ }
208
+ return this._addresses;
209
+ }
210
+ /**
211
+ * Access linked Note records
212
+ * @remarks Available labels: Appointment__Note
213
+ * @throws Error if called on a new (unsaved) record
214
+ *
215
+ * @example
216
+ * ```typescript
217
+ * // Get all linked Note records
218
+ * const items = await record.notes.list();
219
+ * const first = await record.notes.first();
220
+ *
221
+ * // Filter by label
222
+ * const specific = await record.notes.first({ label: 'Appointment__Note' });
223
+ * ```
224
+ */
225
+ get notes() {
226
+ var _a;
227
+ if (!((_a = this._record) === null || _a === void 0 ? void 0 : _a.id))
228
+ throw new Error('Cannot access links on a new (unsaved) record');
229
+ if (!this._notes) {
230
+ this._notes = new record_link_manager_1.RecordLinkManager(this._provider, this._record, {
231
+ sourceEntity: 'CrmModule:Appointment',
232
+ targetEntity: 'SupportModule:Note',
233
+ targetModuleName: 'SupportModule',
234
+ targetEntityName: 'Note',
235
+ labels: ['Appointment__Note'],
236
+ }, NoteRecord_1.NoteRecord);
237
+ }
238
+ return this._notes;
239
+ }
240
+ /**
241
+ * Access linked Visit records
242
+ * @remarks Available labels: Visit__Appointment
243
+ * @throws Error if called on a new (unsaved) record
244
+ *
245
+ * @example
246
+ * ```typescript
247
+ * // Get all linked Visit records
248
+ * const items = await record.visits.list();
249
+ * const first = await record.visits.first();
250
+ *
251
+ * // Filter by label
252
+ * const specific = await record.visits.first({ label: 'Visit__Appointment' });
253
+ * ```
254
+ */
255
+ get visits() {
256
+ var _a;
257
+ if (!((_a = this._record) === null || _a === void 0 ? void 0 : _a.id))
258
+ throw new Error('Cannot access links on a new (unsaved) record');
259
+ if (!this._visits) {
260
+ this._visits = new record_link_manager_1.RecordLinkManager(this._provider, this._record, {
261
+ sourceEntity: 'CrmModule:Appointment',
262
+ targetEntity: 'CrmModule:Visit',
263
+ targetModuleName: 'CrmModule',
264
+ targetEntityName: 'Visit',
265
+ labels: ['Visit__Appointment'],
266
+ }, VisitRecord_1.VisitRecord);
267
+ }
268
+ return this._visits;
269
+ }
270
+ /**
271
+ * Access linked Contact records
272
+ * @remarks Available labels: Contact__Appointment
273
+ * @throws Error if called on a new (unsaved) record
274
+ *
275
+ * @example
276
+ * ```typescript
277
+ * // Get all linked Contact records
278
+ * const items = await record.contacts.list();
279
+ * const first = await record.contacts.first();
280
+ *
281
+ * // Filter by label
282
+ * const specific = await record.contacts.first({ label: 'Contact__Appointment' });
283
+ * ```
284
+ */
285
+ get contacts() {
286
+ var _a;
287
+ if (!((_a = this._record) === null || _a === void 0 ? void 0 : _a.id))
288
+ throw new Error('Cannot access links on a new (unsaved) record');
289
+ if (!this._contacts) {
290
+ this._contacts = new record_link_manager_1.RecordLinkManager(this._provider, this._record, {
291
+ sourceEntity: 'CrmModule:Appointment',
292
+ targetEntity: 'CrmModule:Contact',
293
+ targetModuleName: 'CrmModule',
294
+ targetEntityName: 'Contact',
295
+ labels: ['Contact__Appointment'],
296
+ }, ContactRecord_1.ContactRecord);
297
+ }
298
+ return this._contacts;
299
+ }
300
+ /**
301
+ * Access linked Order records
302
+ * @remarks Available labels: Order__Appointment
303
+ * @throws Error if called on a new (unsaved) record
304
+ *
305
+ * @example
306
+ * ```typescript
307
+ * // Get all linked Order records
308
+ * const items = await record.orders.list();
309
+ * const first = await record.orders.first();
310
+ *
311
+ * // Filter by label
312
+ * const specific = await record.orders.first({ label: 'Order__Appointment' });
313
+ * ```
314
+ */
315
+ get orders() {
316
+ var _a;
317
+ if (!((_a = this._record) === null || _a === void 0 ? void 0 : _a.id))
318
+ throw new Error('Cannot access links on a new (unsaved) record');
319
+ if (!this._orders) {
320
+ this._orders = new record_link_manager_1.RecordLinkManager(this._provider, this._record, {
321
+ sourceEntity: 'CrmModule:Appointment',
322
+ targetEntity: 'OrderModule:Order',
323
+ targetModuleName: 'OrderModule',
324
+ targetEntityName: 'Order',
325
+ labels: ['Order__Appointment'],
326
+ }, OrderRecord_1.OrderRecord);
327
+ }
328
+ return this._orders;
329
+ }
330
+ /**
331
+ * Access linked Lead records
332
+ * @remarks Available labels: Lead_Appointment
333
+ * @throws Error if called on a new (unsaved) record
334
+ *
335
+ * @example
336
+ * ```typescript
337
+ * // Get all linked Lead records
338
+ * const items = await record.leads.list();
339
+ * const first = await record.leads.first();
340
+ *
341
+ * // Filter by label
342
+ * const specific = await record.leads.first({ label: 'Lead_Appointment' });
343
+ * ```
344
+ */
345
+ get leads() {
346
+ var _a;
347
+ if (!((_a = this._record) === null || _a === void 0 ? void 0 : _a.id))
348
+ throw new Error('Cannot access links on a new (unsaved) record');
349
+ if (!this._leads) {
350
+ this._leads = new record_link_manager_1.RecordLinkManager(this._provider, this._record, {
351
+ sourceEntity: 'CrmModule:Appointment',
352
+ targetEntity: 'CrmModule:Lead',
353
+ targetModuleName: 'CrmModule',
354
+ targetEntityName: 'Lead',
355
+ labels: ['Lead_Appointment'],
356
+ }, LeadRecord_1.LeadRecord);
357
+ }
358
+ return this._leads;
359
+ }
142
360
  // ============================================
143
361
  // LINK MANAGEMENT
144
362
  // ============================================
@@ -215,6 +433,23 @@ class AppointmentRecord {
215
433
  }
216
434
  }
217
435
  exports.AppointmentRecord = AppointmentRecord;
436
+ // ============================================
437
+ // TYPED LINK ACCESSORS
438
+ // ============================================
439
+ /** Valid labels for File associations */
440
+ AppointmentRecord.filesLabels = ['Appointment__File'];
441
+ /** Valid labels for Address associations */
442
+ AppointmentRecord.addressesLabels = ['Address__Appointment'];
443
+ /** Valid labels for Note associations */
444
+ AppointmentRecord.notesLabels = ['Appointment__Note'];
445
+ /** Valid labels for Visit associations */
446
+ AppointmentRecord.visitsLabels = ['Visit__Appointment'];
447
+ /** Valid labels for Contact associations */
448
+ AppointmentRecord.contactsLabels = ['Contact__Appointment'];
449
+ /** Valid labels for Order associations */
450
+ AppointmentRecord.ordersLabels = ['Order__Appointment'];
451
+ /** Valid labels for Lead associations */
452
+ AppointmentRecord.leadsLabels = ['Lead_Appointment'];
218
453
  /** Type guard to check if an object is a AppointmentRecord */
219
454
  function isAppointmentRecord(obj) {
220
455
  return obj instanceof AppointmentRecord;