@livepreso/api 6.46.0 → 6.47.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (350) hide show
  1. package/.rush/temp/package-deps_build.json +156 -141
  2. package/.rush/temp/shrinkwrap-deps.json +424 -374
  3. package/CHANGELOG.json +17 -0
  4. package/CHANGELOG.md +8 -1
  5. package/api.build.log +6 -1
  6. package/cjs/api.js +18 -3
  7. package/cjs/api.js.map +1 -1
  8. package/cjs/api.spec.js +4 -0
  9. package/cjs/api.spec.js.map +1 -1
  10. package/cjs/auth.js +29 -2
  11. package/cjs/auth.js.map +1 -1
  12. package/cjs/auth.spec.js +77 -52
  13. package/cjs/auth.spec.js.map +1 -1
  14. package/cjs/caching.js +7 -2
  15. package/cjs/caching.js.map +1 -1
  16. package/cjs/collections/activity.js +56 -16
  17. package/cjs/collections/activity.js.map +1 -1
  18. package/cjs/collections/adjunct-sections.js +10 -1
  19. package/cjs/collections/adjunct-sections.js.map +1 -1
  20. package/cjs/collections/adjunct-slides.js +10 -1
  21. package/cjs/collections/adjunct-slides.js.map +1 -1
  22. package/cjs/collections/adjunct-sub-slides.js +9 -1
  23. package/cjs/collections/adjunct-sub-slides.js.map +1 -1
  24. package/cjs/collections/appointment-adjunct-tags.js +9 -1
  25. package/cjs/collections/appointment-adjunct-tags.js.map +1 -1
  26. package/cjs/collections/appointment-deckversion-tags.js +9 -1
  27. package/cjs/collections/appointment-deckversion-tags.js.map +1 -1
  28. package/cjs/collections/appointment-editors.js +10 -1
  29. package/cjs/collections/appointment-editors.js.map +1 -1
  30. package/cjs/collections/appointment-section-tags.js +9 -1
  31. package/cjs/collections/appointment-section-tags.js.map +1 -1
  32. package/cjs/collections/appointment-slide-tags.js +9 -1
  33. package/cjs/collections/appointment-slide-tags.js.map +1 -1
  34. package/cjs/collections/appointment-tags.js +103 -64
  35. package/cjs/collections/appointment-tags.js.map +1 -1
  36. package/cjs/collections/appointment-templates.js +10 -1
  37. package/cjs/collections/appointment-templates.js.map +1 -1
  38. package/cjs/collections/appointments.js +29 -9
  39. package/cjs/collections/appointments.js.map +1 -1
  40. package/cjs/collections/assets.js +9 -1
  41. package/cjs/collections/assets.js.map +1 -1
  42. package/cjs/collections/auto-adjuncts.js +21 -6
  43. package/cjs/collections/auto-adjuncts.js.map +1 -1
  44. package/cjs/collections/base.js +112 -34
  45. package/cjs/collections/base.js.map +1 -1
  46. package/cjs/collections/base.spec.js +233 -186
  47. package/cjs/collections/base.spec.js.map +1 -1
  48. package/cjs/collections/cms-vals.js +16 -4
  49. package/cjs/collections/cms-vals.js.map +1 -1
  50. package/cjs/collections/contact-phones.js +9 -1
  51. package/cjs/collections/contact-phones.js.map +1 -1
  52. package/cjs/collections/contacts.js +9 -1
  53. package/cjs/collections/contacts.js.map +1 -1
  54. package/cjs/collections/created-assets.js +10 -1
  55. package/cjs/collections/created-assets.js.map +1 -1
  56. package/cjs/collections/customers.js +9 -1
  57. package/cjs/collections/customers.js.map +1 -1
  58. package/cjs/collections/deck-notes.js +10 -1
  59. package/cjs/collections/deck-notes.js.map +1 -1
  60. package/cjs/collections/deck-version-screenshots.js +17 -4
  61. package/cjs/collections/deck-version-screenshots.js.map +1 -1
  62. package/cjs/collections/deck-versions.js +20 -5
  63. package/cjs/collections/deck-versions.js.map +1 -1
  64. package/cjs/collections/decks.js +9 -1
  65. package/cjs/collections/decks.js.map +1 -1
  66. package/cjs/collections/deleted-assets.js +10 -1
  67. package/cjs/collections/deleted-assets.js.map +1 -1
  68. package/cjs/collections/dispatches.js +13 -1
  69. package/cjs/collections/dispatches.js.map +1 -1
  70. package/cjs/collections/event-objects.js +9 -1
  71. package/cjs/collections/event-objects.js.map +1 -1
  72. package/cjs/collections/events.js +9 -1
  73. package/cjs/collections/events.js.map +1 -1
  74. package/cjs/collections/groups.js +9 -1
  75. package/cjs/collections/groups.js.map +1 -1
  76. package/cjs/collections/images.js +9 -1
  77. package/cjs/collections/images.js.map +1 -1
  78. package/cjs/collections/locations.js +9 -1
  79. package/cjs/collections/locations.js.map +1 -1
  80. package/cjs/collections/opportunities.js +9 -1
  81. package/cjs/collections/opportunities.js.map +1 -1
  82. package/cjs/collections/pack-diffs.js +9 -1
  83. package/cjs/collections/pack-diffs.js.map +1 -1
  84. package/cjs/collections/packs.js +9 -1
  85. package/cjs/collections/packs.js.map +1 -1
  86. package/cjs/collections/presets.js +9 -1
  87. package/cjs/collections/presets.js.map +1 -1
  88. package/cjs/collections/section-selections.js +9 -1
  89. package/cjs/collections/section-selections.js.map +1 -1
  90. package/cjs/collections/sections.js +9 -1
  91. package/cjs/collections/sections.js.map +1 -1
  92. package/cjs/collections/signers.js +28 -0
  93. package/cjs/collections/signers.js.map +1 -0
  94. package/cjs/collections/signing-requests.js +28 -0
  95. package/cjs/collections/signing-requests.js.map +1 -0
  96. package/cjs/collections/slide-selections.js +9 -1
  97. package/cjs/collections/slide-selections.js.map +1 -1
  98. package/cjs/collections/slides.js +9 -1
  99. package/cjs/collections/slides.js.map +1 -1
  100. package/cjs/collections/snapshots.js +9 -1
  101. package/cjs/collections/snapshots.js.map +1 -1
  102. package/cjs/collections/sub-slides.js +9 -1
  103. package/cjs/collections/sub-slides.js.map +1 -1
  104. package/cjs/collections/tags.js +9 -1
  105. package/cjs/collections/tags.js.map +1 -1
  106. package/cjs/collections/teams.js +9 -1
  107. package/cjs/collections/teams.js.map +1 -1
  108. package/cjs/collections/templates.js +9 -1
  109. package/cjs/collections/templates.js.map +1 -1
  110. package/cjs/collections/uploads.js +9 -1
  111. package/cjs/collections/uploads.js.map +1 -1
  112. package/cjs/collections/users.js +9 -1
  113. package/cjs/collections/users.js.map +1 -1
  114. package/cjs/collections.js +116 -11
  115. package/cjs/collections.js.map +1 -1
  116. package/cjs/fixtures.js +60 -15
  117. package/cjs/fixtures.js.map +1 -1
  118. package/cjs/index.js +36 -2
  119. package/cjs/index.js.map +1 -1
  120. package/cjs/log.js +1 -0
  121. package/cjs/log.js.map +1 -1
  122. package/cjs/middleware.js +7 -2
  123. package/cjs/middleware.js.map +1 -1
  124. package/cjs/middlewares/auth.js +17 -1
  125. package/cjs/middlewares/auth.js.map +1 -1
  126. package/cjs/middlewares/base.js +9 -3
  127. package/cjs/middlewares/base.js.map +1 -1
  128. package/cjs/middlewares/json.js +19 -1
  129. package/cjs/middlewares/json.js.map +1 -1
  130. package/cjs/middlewares/redirect.js +21 -5
  131. package/cjs/middlewares/redirect.js.map +1 -1
  132. package/cjs/models/activity-item.js +29 -5
  133. package/cjs/models/activity-item.js.map +1 -1
  134. package/cjs/models/adjunct-section.js +19 -1
  135. package/cjs/models/adjunct-section.js.map +1 -1
  136. package/cjs/models/adjunct-slide.js +19 -1
  137. package/cjs/models/adjunct-slide.js.map +1 -1
  138. package/cjs/models/adjunct-sub-slide.js +16 -1
  139. package/cjs/models/adjunct-sub-slide.js.map +1 -1
  140. package/cjs/models/adjunct.js +22 -6
  141. package/cjs/models/adjunct.js.map +1 -1
  142. package/cjs/models/api.js +6 -1
  143. package/cjs/models/api.js.map +1 -1
  144. package/cjs/models/appointment-adjunct-tags.js +13 -1
  145. package/cjs/models/appointment-adjunct-tags.js.map +1 -1
  146. package/cjs/models/appointment-deckversion-tags.js +13 -1
  147. package/cjs/models/appointment-deckversion-tags.js.map +1 -1
  148. package/cjs/models/appointment-editor.js +14 -1
  149. package/cjs/models/appointment-editor.js.map +1 -1
  150. package/cjs/models/appointment-section-tags.js +13 -1
  151. package/cjs/models/appointment-section-tags.js.map +1 -1
  152. package/cjs/models/appointment-slide-tags.js +13 -1
  153. package/cjs/models/appointment-slide-tags.js.map +1 -1
  154. package/cjs/models/appointment-stats.js +11 -1
  155. package/cjs/models/appointment-stats.js.map +1 -1
  156. package/cjs/models/appointment-tags.js +10 -1
  157. package/cjs/models/appointment-tags.js.map +1 -1
  158. package/cjs/models/appointment-template.js +6 -1
  159. package/cjs/models/appointment-template.js.map +1 -1
  160. package/cjs/models/appointment-viewing.js +8 -1
  161. package/cjs/models/appointment-viewing.js.map +1 -1
  162. package/cjs/models/appointment.js +98 -20
  163. package/cjs/models/appointment.js.map +1 -1
  164. package/cjs/models/asset.js +12 -1
  165. package/cjs/models/asset.js.map +1 -1
  166. package/cjs/models/auto-adjunct-key-check.js +15 -1
  167. package/cjs/models/auto-adjunct-key-check.js.map +1 -1
  168. package/cjs/models/auto-adjunct.js +13 -1
  169. package/cjs/models/auto-adjunct.js.map +1 -1
  170. package/cjs/models/base.js +175 -53
  171. package/cjs/models/base.js.map +1 -1
  172. package/cjs/models/base.spec.js +31 -0
  173. package/cjs/models/base.spec.js.map +1 -1
  174. package/cjs/models/choicelist.js +8 -1
  175. package/cjs/models/choicelist.js.map +1 -1
  176. package/cjs/models/cms-val.js +26 -5
  177. package/cjs/models/cms-val.js.map +1 -1
  178. package/cjs/models/cms-val.spec.js +19 -12
  179. package/cjs/models/cms-val.spec.js.map +1 -1
  180. package/cjs/models/contact-phone.js +13 -1
  181. package/cjs/models/contact-phone.js.map +1 -1
  182. package/cjs/models/contact.js +18 -1
  183. package/cjs/models/contact.js.map +1 -1
  184. package/cjs/models/customer.js +30 -3
  185. package/cjs/models/customer.js.map +1 -1
  186. package/cjs/models/deck-note.js +9 -1
  187. package/cjs/models/deck-note.js.map +1 -1
  188. package/cjs/models/deck-tags.js +12 -1
  189. package/cjs/models/deck-tags.js.map +1 -1
  190. package/cjs/models/deck-version-screenshot.js +13 -1
  191. package/cjs/models/deck-version-screenshot.js.map +1 -1
  192. package/cjs/models/deck-version.js +40 -1
  193. package/cjs/models/deck-version.js.map +1 -1
  194. package/cjs/models/deck.js +14 -1
  195. package/cjs/models/deck.js.map +1 -1
  196. package/cjs/models/dispatch-preview.js +13 -1
  197. package/cjs/models/dispatch-preview.js.map +1 -1
  198. package/cjs/models/dispatch.js +23 -1
  199. package/cjs/models/dispatch.js.map +1 -1
  200. package/cjs/models/envs.js +6 -1
  201. package/cjs/models/envs.js.map +1 -1
  202. package/cjs/models/event-object.js +11 -1
  203. package/cjs/models/event-object.js.map +1 -1
  204. package/cjs/models/event.js +13 -1
  205. package/cjs/models/event.js.map +1 -1
  206. package/cjs/models/feed-data.js +13 -1
  207. package/cjs/models/feed-data.js.map +1 -1
  208. package/cjs/models/file.js +11 -1
  209. package/cjs/models/file.js.map +1 -1
  210. package/cjs/models/group.js +11 -1
  211. package/cjs/models/group.js.map +1 -1
  212. package/cjs/models/handover.js +13 -1
  213. package/cjs/models/handover.js.map +1 -1
  214. package/cjs/models/hosted-preso.js +15 -1
  215. package/cjs/models/hosted-preso.js.map +1 -1
  216. package/cjs/models/image.js +16 -1
  217. package/cjs/models/image.js.map +1 -1
  218. package/cjs/models/location.js +13 -1
  219. package/cjs/models/location.js.map +1 -1
  220. package/cjs/models/manifest-json.js +88 -21
  221. package/cjs/models/manifest-json.js.map +1 -1
  222. package/cjs/models/onshare.js +14 -1
  223. package/cjs/models/onshare.js.map +1 -1
  224. package/cjs/models/opportunity.js +14 -1
  225. package/cjs/models/opportunity.js.map +1 -1
  226. package/cjs/models/pack-diff.js +14 -1
  227. package/cjs/models/pack-diff.js.map +1 -1
  228. package/cjs/models/pack.js +12 -1
  229. package/cjs/models/pack.js.map +1 -1
  230. package/cjs/models/preset.js +21 -2
  231. package/cjs/models/preset.js.map +1 -1
  232. package/cjs/models/refresh-request.js +22 -4
  233. package/cjs/models/refresh-request.js.map +1 -1
  234. package/cjs/models/room.js +9 -1
  235. package/cjs/models/room.js.map +1 -1
  236. package/cjs/models/salesforce-lookup.js +12 -1
  237. package/cjs/models/salesforce-lookup.js.map +1 -1
  238. package/cjs/models/section-selection.js +14 -1
  239. package/cjs/models/section-selection.js.map +1 -1
  240. package/cjs/models/section.js +14 -1
  241. package/cjs/models/section.js.map +1 -1
  242. package/cjs/models/signer.js +47 -0
  243. package/cjs/models/signer.js.map +1 -0
  244. package/cjs/models/signing-request.js +66 -0
  245. package/cjs/models/signing-request.js.map +1 -0
  246. package/cjs/models/slide-selection.js +14 -1
  247. package/cjs/models/slide-selection.js.map +1 -1
  248. package/cjs/models/slide.js +14 -1
  249. package/cjs/models/slide.js.map +1 -1
  250. package/cjs/models/snapshot.js +45 -4
  251. package/cjs/models/snapshot.js.map +1 -1
  252. package/cjs/models/snapshot.spec.js +32 -25
  253. package/cjs/models/snapshot.spec.js.map +1 -1
  254. package/cjs/models/sub-slide.js +12 -1
  255. package/cjs/models/sub-slide.js.map +1 -1
  256. package/cjs/models/support-ticket.js +11 -1
  257. package/cjs/models/support-ticket.js.map +1 -1
  258. package/cjs/models/tag.js +13 -1
  259. package/cjs/models/tag.js.map +1 -1
  260. package/cjs/models/team.js +13 -1
  261. package/cjs/models/team.js.map +1 -1
  262. package/cjs/models/template.js +78 -48
  263. package/cjs/models/template.js.map +1 -1
  264. package/cjs/models/tenancy.js +11 -1
  265. package/cjs/models/tenancy.js.map +1 -1
  266. package/cjs/models/timing-log.js +78 -21
  267. package/cjs/models/timing-log.js.map +1 -1
  268. package/cjs/models/timing-log.spec.js +37 -24
  269. package/cjs/models/timing-log.spec.js.map +1 -1
  270. package/cjs/models/token.js +11 -1
  271. package/cjs/models/token.js.map +1 -1
  272. package/cjs/models/transcribe-socket.js +8 -1
  273. package/cjs/models/transcribe-socket.js.map +1 -1
  274. package/cjs/models/upload.js +7 -1
  275. package/cjs/models/upload.js.map +1 -1
  276. package/cjs/models/user.js +26 -3
  277. package/cjs/models/user.js.map +1 -1
  278. package/cjs/models/user.spec.js +30 -20
  279. package/cjs/models/user.spec.js.map +1 -1
  280. package/cjs/models.js +160 -11
  281. package/cjs/models.js.map +1 -1
  282. package/cjs/presentation/appointment-presentation.js +35 -9
  283. package/cjs/presentation/appointment-presentation.js.map +1 -1
  284. package/cjs/presentation/base-presentation-collection.js +7 -1
  285. package/cjs/presentation/base-presentation-collection.js.map +1 -1
  286. package/cjs/presentation/base-presentation-model.js +65 -22
  287. package/cjs/presentation/base-presentation-model.js.map +1 -1
  288. package/cjs/presentation/base-presentation-model.spec.js +27 -6
  289. package/cjs/presentation/base-presentation-model.spec.js.map +1 -1
  290. package/cjs/presentation/presentation-deck.js +82 -41
  291. package/cjs/presentation/presentation-deck.js.map +1 -1
  292. package/cjs/presentation/presentation-deck.spec.js +95 -72
  293. package/cjs/presentation/presentation-deck.spec.js.map +1 -1
  294. package/cjs/presentation/presentation-decks.js +9 -1
  295. package/cjs/presentation/presentation-decks.js.map +1 -1
  296. package/cjs/presentation/presentation-section.js +74 -9
  297. package/cjs/presentation/presentation-section.js.map +1 -1
  298. package/cjs/presentation/presentation-section.spec.js +256 -203
  299. package/cjs/presentation/presentation-section.spec.js.map +1 -1
  300. package/cjs/presentation/presentation-sections.js +9 -1
  301. package/cjs/presentation/presentation-sections.js.map +1 -1
  302. package/cjs/presentation/presentation-slide.js +77 -16
  303. package/cjs/presentation/presentation-slide.js.map +1 -1
  304. package/cjs/presentation/presentation-slide.spec.js +176 -136
  305. package/cjs/presentation/presentation-slide.spec.js.map +1 -1
  306. package/cjs/presentation/presentation-slides.js +9 -1
  307. package/cjs/presentation/presentation-slides.js.map +1 -1
  308. package/cjs/presentation/presentation-subslide.js +23 -3
  309. package/cjs/presentation/presentation-subslide.js.map +1 -1
  310. package/cjs/presentation/presentation-subslide.spec.js +125 -101
  311. package/cjs/presentation/presentation-subslide.spec.js.map +1 -1
  312. package/cjs/presentation/presentation-subslides.js +9 -1
  313. package/cjs/presentation/presentation-subslides.js.map +1 -1
  314. package/cjs/presentation/presentation.js +115 -61
  315. package/cjs/presentation/presentation.js.map +1 -1
  316. package/cjs/presentation.js +20 -0
  317. package/cjs/presentation.js.map +1 -1
  318. package/cjs/selections.js +29 -4
  319. package/cjs/selections.js.map +1 -1
  320. package/cjs/state-register.js +11 -3
  321. package/cjs/state-register.js.map +1 -1
  322. package/cjs/sync.js +76 -32
  323. package/cjs/sync.js.map +1 -1
  324. package/cjs/utils.js +49 -21
  325. package/cjs/utils.js.map +1 -1
  326. package/cjs/utils.spec.js +5 -1
  327. package/cjs/utils.spec.js.map +1 -1
  328. package/package.json +4 -4
  329. package/src/collections/signers.js +18 -0
  330. package/src/collections/signing-requests.js +18 -0
  331. package/src/collections.js +2 -1
  332. package/src/fixtures.js +11 -9
  333. package/src/index.js +2 -3
  334. package/src/models/activity-item.js +8 -0
  335. package/src/models/appointment.js +3 -0
  336. package/src/models/deck-version.js +1 -0
  337. package/src/models/manifest-json.js +9 -0
  338. package/src/models/preset.js +1 -0
  339. package/src/models/refresh-request.js +1 -0
  340. package/src/models/signer.js +37 -0
  341. package/src/models/signing-request.js +56 -0
  342. package/src/models/snapshot.js +19 -0
  343. package/src/models.js +2 -1
  344. package/src/utils.spec.js +4 -4
  345. package/cjs/collections/appointment-duplicates.js +0 -21
  346. package/cjs/collections/appointment-duplicates.js.map +0 -1
  347. package/cjs/models/appointment-duplicate.js +0 -72
  348. package/cjs/models/appointment-duplicate.js.map +0 -1
  349. package/src/collections/appointment-duplicates.js +0 -19
  350. package/src/models/appointment-duplicate.js +0 -73
package/cjs/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":["_lodash","_interopRequireDefault","require","_url","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","default","getOwnPropertyDescriptors","defineProperties","defineProperty","DATE_FORMAT","exports","DATE_FORMAT_T","getShortURL","url","url2","parse","path","removeMultiByteChars","_txt","txt","replace","HOSTNAME_RE","getHostname","data","Error","concat","match","replaceHostname","before","after","hostnameBefore","hostnameAfter","indexOf","Array","isArray","map","item","_","isObject","reduce","newObj","key","getMaxID","deckVersionModel","ids","section_set","section","slides","slide_set","slide","subslides","subslide_set","subslide","id","_toConsumableArray2","flatten","max","setSequentialSequences","deck","sections","index","sequence","isImpostor","model","tags","isImpostorDeck","first","Boolean","find","sanitizeBase64","obj","conditionFn","undefined","v","_typeof2","acc","re","test"],"sources":["../src/utils.js"],"sourcesContent":["import _ from \"lodash\";\n/* eslint-disable no-control-regex */\nimport url2 from \"url\";\n\nexport const DATE_FORMAT = \"YYYY-MM-DD HH:mm:ss.SSSSSS[Z]\";\nexport const DATE_FORMAT_T = \"YYYY-MM-DDTHH:mm:ss.SSSSSS[Z]\";\n\nexport function getShortURL(url) {\n\treturn url2.parse(url).path;\n}\n\n/**\n * Sometimes a string(especially from another platform) has characters encoded using another method.\n * In these circumstances those characters, when encoded with utf-8, look like errors.\n * see http://i18nqa.com/debug/utf8-debug.html for examples\n */\nexport function removeMultiByteChars(_txt) {\n\t// replace possible whitespace characters (non-breaking space, thin space etc.) with a normal space\n\tconst txt = _txt.replace(/(\\xA0|\\x20|\\x07| )/gmu, \" \");\n\n\t// remove every other cursed character entirely.\n\treturn txt.replace(\n\t\t/[\\xC0-\\xDF][\\x80-\\xBF]|[\\xE0-\\xEF][\\x80-\\xBF]{2}|[\\xF0-\\xF7][\\x80-\\xBF]{3}|[\\x80-\\xBF][\\xC0-\\xFF]/gmu,\n\t\t\"\",\n\t);\n}\n\nconst HOSTNAME_RE = /^(?:https?:\\/\\/)?([\\w-\\._]*)/;\n\nexport function getHostname(data) {\n\tif (typeof data !== \"string\") {\n\t\tthrow new Error(\n\t\t\t`Arg must contain a hostname, ie: \"test.livepreso.com\". Found \"${data}\"`,\n\t\t);\n\t}\n\n\treturn data.match(HOSTNAME_RE)[1];\n}\n\n/**\n * Replaces the hostname in some data (regardless of it being a string, array or object),\n * it will recursively update it all.\n *\n * Eg:\n *\n * replaceHostname(\"https://test.com/api/cool/1/\", \"test.com\", \"real.com\")\n * > \"https://real.com/api/cool/1/\"\n *\n */\nexport function replaceHostname(data, before, after) {\n\t// Don't do anything if they're the same!\n\tif (before === after) {\n\t\treturn data;\n\t}\n\n\tconst hostnameBefore = getHostname(before, \"Before\");\n\tconst hostnameAfter = getHostname(after, \"After\");\n\n\tif (typeof data === \"string\" && data.indexOf(\"http\") === 0) {\n\t\treturn data.replace(hostnameBefore, hostnameAfter);\n\t} else if (Array.isArray(data)) {\n\t\treturn data.map((item) => replaceHostname(item, before, after));\n\t} else if (_.isObject(data)) {\n\t\treturn Object.keys(data).reduce((newObj, key) => {\n\t\t\tnewObj[key] = replaceHostname(data[key], before, after);\n\t\t\treturn newObj;\n\t\t}, {});\n\t}\n\treturn data;\n}\n\n// Takes the deckversion model and retrieves the highest id between all of\n// the sections, slides and subslides\nexport function getMaxID(deckVersionModel) {\n\tconst ids = deckVersionModel.section_set.map((section) => {\n\t\tlet slides = [];\n\t\tif (section.slide_set) {\n\t\t\tslides = section.slide_set.map((slide) => {\n\t\t\t\tlet subslides = [];\n\n\t\t\t\tif (slide.subslide_set) {\n\t\t\t\t\tsubslides = slide.subslide_set.map((subslide) => subslide.id);\n\t\t\t\t}\n\n\t\t\t\treturn [slide.id, ...subslides];\n\t\t\t});\n\t\t}\n\n\t\treturn [section.id, ..._.flatten(slides)];\n\t});\n\n\treturn _.max(_.flatten(ids));\n}\n\n// The sections, slides and subslides are currently ordered by sequence\n// but the sequence is not necessarily 0-based and sequential (e.g. in the\n// case of impostor decks). We fix that here.\nexport function setSequentialSequences(deck) {\n\tdeck.sections.forEach((section, index) => {\n\t\tsection.sequence = index;\n\t\tsection.index = index;\n\n\t\tsection.slides.forEach((slide, index) => {\n\t\t\tslide.sequence = index;\n\t\t\tslide.index = index;\n\n\t\t\tslide.subslides.forEach((subslide, index) => {\n\t\t\t\tsubslide.sequence = index;\n\t\t\t\tsubslide.index = index;\n\t\t\t});\n\t\t});\n\t});\n}\n\n// A simple function to check the tags of a model - if it has the \"section-header\"\n// tag then it's an impostor slide\nexport function isImpostor(model) {\n\tconst tags = model.tags || [];\n\n\treturn tags.indexOf(\"section-header\") !== -1;\n}\n\n// An impostor deck will have impostor slides - checking for these is the\n// most reliable method of determining whether a deck is an impostor deck,\n// and is also the same method that the server uses.\nexport function isImpostorDeck(deckVersionModel) {\n\tconst section = deckVersionModel.section_set.first();\n\n\treturn Boolean(\n\t\tsection && section.slide_set.find((slide) => isImpostor(slide)),\n\t);\n}\n\n/**\n * Strips base64 strings recursively.\n *\n * Optionally accepts a condition function, which you can use you add any extra\n * checks to test whether you want to clear the string.\n */\nexport function sanitizeBase64(obj, conditionFn = () => true) {\n\tif (Array.isArray(obj)) {\n\t\treturn obj.map((v) => sanitizeBase64(v, conditionFn));\n\t} else if (\n\t\ttypeof obj === \"object\" &&\n\t\tobj !== null &&\n\t\ttypeof obj !== \"undefined\"\n\t) {\n\t\treturn Object.keys(obj).reduce((acc, key) => {\n\t\t\treturn { ...acc, [key]: sanitizeBase64(obj[key], conditionFn) };\n\t\t}, {});\n\t} else if (typeof obj === \"string\") {\n\t\tconst re = /^data:image\\/[a-zA-Z]+;base64,[A-Za-z0-9+/=]+$/;\n\t\tif (re.test(obj) && conditionFn(obj)) {\n\t\t\treturn \"\";\n\t\t}\n\t}\n\treturn obj;\n}\n"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/utils.js"],"names":["DATE_FORMAT","DATE_FORMAT_T","getShortURL","url","url2","parse","path","removeMultiByteChars","_txt","txt","replace","HOSTNAME_RE","getHostname","data","Error","match","replaceHostname","before","after","hostnameBefore","hostnameAfter","indexOf","Array","isArray","map","item","_","isObject","Object","keys","reduce","newObj","key","getMaxID","deckVersionModel","ids","section_set","section","slides","slide_set","slide","subslides","subslide_set","subslide","id","flatten","max","setSequentialSequences","deck","sections","forEach","index","sequence","isImpostor","model","tags","isImpostorDeck","first","Boolean","find","sanitizeBase64","obj","conditionFn","v","acc","re","test"],"mappings":"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","sourcesContent":["import _ from \"lodash\";\n/* eslint-disable no-control-regex */\nimport url2 from \"url\";\n\nexport const DATE_FORMAT = \"YYYY-MM-DD HH:mm:ss.SSSSSS[Z]\";\nexport const DATE_FORMAT_T = \"YYYY-MM-DDTHH:mm:ss.SSSSSS[Z]\";\n\nexport function getShortURL(url) {\n\treturn url2.parse(url).path;\n}\n\n/**\n * Sometimes a string(especially from another platform) has characters encoded using another method.\n * In these circumstances those characters, when encoded with utf-8, look like errors.\n * see http://i18nqa.com/debug/utf8-debug.html for examples\n */\nexport function removeMultiByteChars(_txt) {\n\t// replace possible whitespace characters (non-breaking space, thin space etc.) with a normal space\n\tconst txt = _txt.replace(/(\\xA0|\\x20|\\x07| )/gmu, \" \");\n\n\t// remove every other cursed character entirely.\n\treturn txt.replace(\n\t\t/[\\xC0-\\xDF][\\x80-\\xBF]|[\\xE0-\\xEF][\\x80-\\xBF]{2}|[\\xF0-\\xF7][\\x80-\\xBF]{3}|[\\x80-\\xBF][\\xC0-\\xFF]/gmu,\n\t\t\"\",\n\t);\n}\n\nconst HOSTNAME_RE = /^(?:https?:\\/\\/)?([\\w-\\._]*)/;\n\nexport function getHostname(data) {\n\tif (typeof data !== \"string\") {\n\t\tthrow new Error(\n\t\t\t`Arg must contain a hostname, ie: \"test.livepreso.com\". Found \"${data}\"`,\n\t\t);\n\t}\n\n\treturn data.match(HOSTNAME_RE)[1];\n}\n\n/**\n * Replaces the hostname in some data (regardless of it being a string, array or object),\n * it will recursively update it all.\n *\n * Eg:\n *\n * replaceHostname(\"https://test.com/api/cool/1/\", \"test.com\", \"real.com\")\n * > \"https://real.com/api/cool/1/\"\n *\n */\nexport function replaceHostname(data, before, after) {\n\t// Don't do anything if they're the same!\n\tif (before === after) {\n\t\treturn data;\n\t}\n\n\tconst hostnameBefore = getHostname(before, \"Before\");\n\tconst hostnameAfter = getHostname(after, \"After\");\n\n\tif (typeof data === \"string\" && data.indexOf(\"http\") === 0) {\n\t\treturn data.replace(hostnameBefore, hostnameAfter);\n\t} else if (Array.isArray(data)) {\n\t\treturn data.map((item) => replaceHostname(item, before, after));\n\t} else if (_.isObject(data)) {\n\t\treturn Object.keys(data).reduce((newObj, key) => {\n\t\t\tnewObj[key] = replaceHostname(data[key], before, after);\n\t\t\treturn newObj;\n\t\t}, {});\n\t}\n\treturn data;\n}\n\n// Takes the deckversion model and retrieves the highest id between all of\n// the sections, slides and subslides\nexport function getMaxID(deckVersionModel) {\n\tconst ids = deckVersionModel.section_set.map((section) => {\n\t\tlet slides = [];\n\t\tif (section.slide_set) {\n\t\t\tslides = section.slide_set.map((slide) => {\n\t\t\t\tlet subslides = [];\n\n\t\t\t\tif (slide.subslide_set) {\n\t\t\t\t\tsubslides = slide.subslide_set.map((subslide) => subslide.id);\n\t\t\t\t}\n\n\t\t\t\treturn [slide.id, ...subslides];\n\t\t\t});\n\t\t}\n\n\t\treturn [section.id, ..._.flatten(slides)];\n\t});\n\n\treturn _.max(_.flatten(ids));\n}\n\n// The sections, slides and subslides are currently ordered by sequence\n// but the sequence is not necessarily 0-based and sequential (e.g. in the\n// case of impostor decks). We fix that here.\nexport function setSequentialSequences(deck) {\n\tdeck.sections.forEach((section, index) => {\n\t\tsection.sequence = index;\n\t\tsection.index = index;\n\n\t\tsection.slides.forEach((slide, index) => {\n\t\t\tslide.sequence = index;\n\t\t\tslide.index = index;\n\n\t\t\tslide.subslides.forEach((subslide, index) => {\n\t\t\t\tsubslide.sequence = index;\n\t\t\t\tsubslide.index = index;\n\t\t\t});\n\t\t});\n\t});\n}\n\n// A simple function to check the tags of a model - if it has the \"section-header\"\n// tag then it's an impostor slide\nexport function isImpostor(model) {\n\tconst tags = model.tags || [];\n\n\treturn tags.indexOf(\"section-header\") !== -1;\n}\n\n// An impostor deck will have impostor slides - checking for these is the\n// most reliable method of determining whether a deck is an impostor deck,\n// and is also the same method that the server uses.\nexport function isImpostorDeck(deckVersionModel) {\n\tconst section = deckVersionModel.section_set.first();\n\n\treturn Boolean(\n\t\tsection && section.slide_set.find((slide) => isImpostor(slide)),\n\t);\n}\n\n/**\n * Strips base64 strings recursively.\n *\n * Optionally accepts a condition function, which you can use you add any extra\n * checks to test whether you want to clear the string.\n */\nexport function sanitizeBase64(obj, conditionFn = () => true) {\n\tif (Array.isArray(obj)) {\n\t\treturn obj.map((v) => sanitizeBase64(v, conditionFn));\n\t} else if (\n\t\ttypeof obj === \"object\" &&\n\t\tobj !== null &&\n\t\ttypeof obj !== \"undefined\"\n\t) {\n\t\treturn Object.keys(obj).reduce((acc, key) => {\n\t\t\treturn { ...acc, [key]: sanitizeBase64(obj[key], conditionFn) };\n\t\t}, {});\n\t} else if (typeof obj === \"string\") {\n\t\tconst re = /^data:image\\/[a-zA-Z]+;base64,[A-Za-z0-9+/=]+$/;\n\t\tif (re.test(obj) && conditionFn(obj)) {\n\t\t\treturn \"\";\n\t\t}\n\t}\n\treturn obj;\n}\n"],"file":"utils.js"}
package/cjs/utils.spec.js CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  var _utils = require("./utils.js");
4
+
4
5
  describe("getShortURL()", function () {
5
6
  test("shorten a full url to a short one", function () {
6
7
  var url = "http://client.salespreso.com/api/users/1/";
@@ -16,7 +17,7 @@ describe("removeMultiByteChars()", function () {
16
17
  var testString = "SUZI LUCK’S CANTEEN & COCKTAIL BAR";
17
18
  expect((0, _utils.removeMultiByteChars)(testString)).toEqual("SUZI LUCKS CANTEEN & COCKTAIL BAR");
18
19
  });
19
- test("sanatize urls correctly", function () {
20
+ test("sanitize urls correctly", function () {
20
21
  var testString = "http://client.salespreso.com/api/users/1/’";
21
22
  var testString2 = "/api/users/1/’";
22
23
  var testString3 = "/api/users/1/?param=1&test=3&_r=4";
@@ -30,6 +31,7 @@ describe("getHostname()", function () {
30
31
  var actual = function actual() {
31
32
  return (0, _utils.getHostname)(null);
32
33
  };
34
+
33
35
  expect(actual).toThrow();
34
36
  });
35
37
  it("returns a hostname from a full URL", function () {
@@ -50,12 +52,14 @@ describe("replaceHostname()", function () {
50
52
  var actual = function actual() {
51
53
  return (0, _utils.replaceHostname)("foo", null, "brand.new.com");
52
54
  };
55
+
53
56
  expect(actual).toThrow();
54
57
  });
55
58
  it("throws an error if not to hostname", function () {
56
59
  var actual = function actual() {
57
60
  return (0, _utils.replaceHostname)("foo", "old.url.com", null);
58
61
  };
62
+
59
63
  expect(actual).toThrow();
60
64
  });
61
65
  it("replaces hostname of a string", function () {
@@ -1 +1 @@
1
- {"version":3,"file":"utils.spec.js","names":["_utils","require","describe","test","url","expect","getShortURL","toEqual","testString","removeMultiByteChars","testString2","testString3","it","actual","getHostname","toThrow","replaceHostname","data","expected","beforeURL","afterURL","first","anArray","nestedObject","second"],"sources":["../src/utils.spec.js"],"sourcesContent":["import {\n\tgetHostname,\n\tgetShortURL,\n\tremoveMultiByteChars,\n\treplaceHostname,\n} from \"./utils.js\";\n\ndescribe(\"getShortURL()\", () => {\n\ttest(\"shorten a full url to a short one\", function () {\n\t\tconst url = \"http://client.salespreso.com/api/users/1/\";\n\t\texpect(getShortURL(url)).toEqual(\"/api/users/1/\");\n\t});\n\n\ttest(\"not break an already short url\", function () {\n\t\tconst url = \"/api/users/1/\";\n\t\texpect(getShortURL(url)).toEqual(\"/api/users/1/\");\n\t});\n});\n\ndescribe(\"removeMultiByteChars()\", () => {\n\ttest(\"correctly strip offending multibyte characters from string\", function () {\n\t\tconst testString = \"SUZI LUCK’S CANTEEN & COCKTAIL BAR\";\n\t\texpect(removeMultiByteChars(testString)).toEqual(\n\t\t\t\"SUZI LUCKS CANTEEN & COCKTAIL BAR\",\n\t\t);\n\t});\n\n\ttest(\"sanatize urls correctly\", function () {\n\t\tconst testString = \"http://client.salespreso.com/api/users/1/’\";\n\t\tconst testString2 = \"/api/users/1/’\";\n\t\tconst testString3 = \"/api/users/1/?param=1&test=3&_r=4\";\n\t\texpect(removeMultiByteChars(testString)).toEqual(\n\t\t\t\"http://client.salespreso.com/api/users/1/\",\n\t\t);\n\t\texpect(removeMultiByteChars(testString2)).toEqual(\"/api/users/1/\");\n\t\texpect(removeMultiByteChars(testString3)).toEqual(\n\t\t\t\"/api/users/1/?param=1&test=3&_r=4\",\n\t\t);\n\t});\n});\n\ndescribe(\"getHostname()\", () => {\n\tit(\"throws an error if hostname isn't a string\", () => {\n\t\tconst actual = () => getHostname(null);\n\t\texpect(actual).toThrow();\n\t});\n\n\tit(\"returns a hostname from a full URL\", () => {\n\t\tconst actual = getHostname(\"https://www.horse.com/api/horses/1/\");\n\t\texpect(actual).toEqual(\"www.horse.com\");\n\t});\n\n\tit(\"returns a hostname from just the domain\", () => {\n\t\tconst actual = getHostname(\"https://www.horse.com/\");\n\t\texpect(actual).toEqual(\"www.horse.com\");\n\t});\n\n\tit(\"just returns the hostname\", () => {\n\t\tconst actual = getHostname(\"www.horse.com\");\n\t\texpect(actual).toEqual(\"www.horse.com\");\n\t});\n});\n\ndescribe(\"replaceHostname()\", () => {\n\tit(\"throws an error if not from hostname\", () => {\n\t\tconst actual = () => replaceHostname(\"foo\", null, \"brand.new.com\");\n\t\texpect(actual).toThrow();\n\t});\n\n\tit(\"throws an error if not to hostname\", () => {\n\t\tconst actual = () => replaceHostname(\"foo\", \"old.url.com\", null);\n\t\texpect(actual).toThrow();\n\t});\n\n\tit(\"replaces hostname of a string\", () => {\n\t\tconst data = \"https://old.url.com/api/appointments/1/\";\n\t\tconst expected = \"https://brand.new.com/api/appointments/1/\";\n\t\tconst actual = replaceHostname(data, \"old.url.com\", \"brand.new.com\");\n\t\texpect(actual).toEqual(expected);\n\t});\n\n\tit(\"takes into account the protocol\", () => {\n\t\tconst data = \"http://old.url.com/api/appointments/1/\";\n\t\tconst expected = \"http://brand.new.com/api/appointments/1/\";\n\t\tconst actual = replaceHostname(\n\t\t\tdata,\n\t\t\t\"https://old.url.com/\",\n\t\t\t\"https://brand.new.com/\",\n\t\t);\n\t\texpect(actual).toEqual(expected);\n\t});\n\n\tit(\"replaces hostnames in an array\", () => {\n\t\tconst data = [\n\t\t\t\"https://old.url.com/api/appointments/1/\",\n\t\t\t\"https://old.url.com/api/foo/1/bars/1/\",\n\t\t];\n\t\tconst expected = [\n\t\t\t\"https://brand.new.com/api/appointments/1/\",\n\t\t\t\"https://brand.new.com/api/foo/1/bars/1/\",\n\t\t];\n\t\tconst actual = replaceHostname(data, \"old.url.com\", \"brand.new.com\");\n\t\texpect(actual).toEqual(expected);\n\t});\n\n\tit(\"replaces hostnames in an object\", () => {\n\t\tconst data = {\n\t\t\turl: \"https://old.url.com/api/appointments/1/\",\n\t\t};\n\t\tconst expected = {\n\t\t\turl: \"https://brand.new.com/api/appointments/1/\",\n\t\t};\n\n\t\tconst actual = replaceHostname(data, \"old.url.com\", \"brand.new.com\");\n\t\texpect(actual).toEqual(expected);\n\t});\n\n\tit(\"hostnames not related aren't affected\", () => {\n\t\tconst data = {\n\t\t\turl: \"https://some.otherurl.com/helloworld/\",\n\t\t};\n\t\tconst expected = {\n\t\t\turl: \"https://some.otherurl.com/helloworld/\",\n\t\t};\n\n\t\tconst actual = replaceHostname(data, \"old.url.com\", \"brand.new.com\");\n\t\texpect(actual).toEqual(expected);\n\t});\n\n\tit(\"updates data that is nested\", () => {\n\t\tconst beforeURL = \"https://old.url.com/api/appointments/1/\";\n\t\tconst afterURL = \"https://some.otherurl.com/api/appointments/1/\";\n\n\t\tconst data = {\n\t\t\tfirst: beforeURL,\n\t\t\tanArray: [beforeURL, beforeURL],\n\t\t\tnestedObject: {\n\t\t\t\tfirst: beforeURL,\n\t\t\t\tsecond: beforeURL,\n\t\t\t},\n\t\t};\n\n\t\tconst expected = {\n\t\t\tfirst: afterURL,\n\t\t\tanArray: [afterURL, afterURL],\n\t\t\tnestedObject: {\n\t\t\t\tfirst: afterURL,\n\t\t\t\tsecond: afterURL,\n\t\t\t},\n\t\t};\n\n\t\tconst actual = replaceHostname(data, \"old.url.com\", \"some.otherurl.com\");\n\t\texpect(actual).toEqual(expected);\n\t});\n\n\tit(\"does not affect hostname within a string\", () => {\n\t\tconst data = \"room:old.url.com:123\";\n\t\tconst expected = \"room:old.url.com:123\";\n\t\tconst actual = replaceHostname(data, \"old.url.com\", \"some.otherurl.com\");\n\t\texpect(actual).toEqual(expected);\n\t});\n});\n"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/utils.spec.js"],"names":["describe","test","url","expect","toEqual","testString","testString2","testString3","it","actual","toThrow","data","expected","beforeURL","afterURL","first","anArray","nestedObject","second"],"mappings":";;AAAA;;AAOAA,QAAQ,CAAC,eAAD,EAAkB,YAAM;AAC/BC,EAAAA,IAAI,CAAC,mCAAD,EAAsC,YAAM;AAC/C,QAAMC,GAAG,GAAG,2CAAZ;AACAC,IAAAA,MAAM,CAAC,wBAAYD,GAAZ,CAAD,CAAN,CAAyBE,OAAzB,CAAiC,eAAjC;AACA,GAHG,CAAJ;AAKAH,EAAAA,IAAI,CAAC,gCAAD,EAAmC,YAAM;AAC5C,QAAMC,GAAG,GAAG,eAAZ;AACAC,IAAAA,MAAM,CAAC,wBAAYD,GAAZ,CAAD,CAAN,CAAyBE,OAAzB,CAAiC,eAAjC;AACA,GAHG,CAAJ;AAIA,CAVO,CAAR;AAYAJ,QAAQ,CAAC,wBAAD,EAA2B,YAAM;AACxCC,EAAAA,IAAI,CAAC,4DAAD,EAA+D,YAAM;AACxE,QAAMI,UAAU,GAAG,wCAAnB;AACAF,IAAAA,MAAM,CAAC,iCAAqBE,UAArB,CAAD,CAAN,CAAyCD,OAAzC,CACC,mCADD;AAGA,GALG,CAAJ;AAOAH,EAAAA,IAAI,CAAC,yBAAD,EAA4B,YAAM;AACrC,QAAMI,UAAU,GAAG,8CAAnB;AACA,QAAMC,WAAW,GAAG,kBAApB;AACA,QAAMC,WAAW,GAAG,mCAApB;AACAJ,IAAAA,MAAM,CAAC,iCAAqBE,UAArB,CAAD,CAAN,CAAyCD,OAAzC,CACC,2CADD;AAGAD,IAAAA,MAAM,CAAC,iCAAqBG,WAArB,CAAD,CAAN,CAA0CF,OAA1C,CAAkD,eAAlD;AACAD,IAAAA,MAAM,CAAC,iCAAqBI,WAArB,CAAD,CAAN,CAA0CH,OAA1C,CACC,mCADD;AAGA,GAXG,CAAJ;AAYA,CApBO,CAAR;AAsBAJ,QAAQ,CAAC,eAAD,EAAkB,YAAM;AAC/BQ,EAAAA,EAAE,CAAC,4CAAD,EAA+C,YAAM;AACtD,QAAMC,MAAM,GAAG,SAATA,MAAS;AAAA,aAAM,wBAAY,IAAZ,CAAN;AAAA,KAAf;;AACAN,IAAAA,MAAM,CAACM,MAAD,CAAN,CAAeC,OAAf;AACA,GAHC,CAAF;AAKAF,EAAAA,EAAE,CAAC,oCAAD,EAAuC,YAAM;AAC9C,QAAMC,MAAM,GAAG,wBAAY,qCAAZ,CAAf;AACAN,IAAAA,MAAM,CAACM,MAAD,CAAN,CAAeL,OAAf,CAAuB,eAAvB;AACA,GAHC,CAAF;AAKAI,EAAAA,EAAE,CAAC,yCAAD,EAA4C,YAAM;AACnD,QAAMC,MAAM,GAAG,wBAAY,wBAAZ,CAAf;AACAN,IAAAA,MAAM,CAACM,MAAD,CAAN,CAAeL,OAAf,CAAuB,eAAvB;AACA,GAHC,CAAF;AAKAI,EAAAA,EAAE,CAAC,2BAAD,EAA8B,YAAM;AACrC,QAAMC,MAAM,GAAG,wBAAY,eAAZ,CAAf;AACAN,IAAAA,MAAM,CAACM,MAAD,CAAN,CAAeL,OAAf,CAAuB,eAAvB;AACA,GAHC,CAAF;AAIA,CApBO,CAAR;AAsBAJ,QAAQ,CAAC,mBAAD,EAAsB,YAAM;AACnCQ,EAAAA,EAAE,CAAC,sCAAD,EAAyC,YAAM;AAChD,QAAMC,MAAM,GAAG,SAATA,MAAS;AAAA,aAAM,4BAAgB,KAAhB,EAAuB,IAAvB,EAA6B,eAA7B,CAAN;AAAA,KAAf;;AACAN,IAAAA,MAAM,CAACM,MAAD,CAAN,CAAeC,OAAf;AACA,GAHC,CAAF;AAKAF,EAAAA,EAAE,CAAC,oCAAD,EAAuC,YAAM;AAC9C,QAAMC,MAAM,GAAG,SAATA,MAAS;AAAA,aAAM,4BAAgB,KAAhB,EAAuB,aAAvB,EAAsC,IAAtC,CAAN;AAAA,KAAf;;AACAN,IAAAA,MAAM,CAACM,MAAD,CAAN,CAAeC,OAAf;AACA,GAHC,CAAF;AAKAF,EAAAA,EAAE,CAAC,+BAAD,EAAkC,YAAM;AACzC,QAAMG,IAAI,GAAG,yCAAb;AACA,QAAMC,QAAQ,GAAG,2CAAjB;AACA,QAAMH,MAAM,GAAG,4BAAgBE,IAAhB,EAAsB,aAAtB,EAAqC,eAArC,CAAf;AACAR,IAAAA,MAAM,CAACM,MAAD,CAAN,CAAeL,OAAf,CAAuBQ,QAAvB;AACA,GALC,CAAF;AAOAJ,EAAAA,EAAE,CAAC,iCAAD,EAAoC,YAAM;AAC3C,QAAMG,IAAI,GAAG,wCAAb;AACA,QAAMC,QAAQ,GAAG,0CAAjB;AACA,QAAMH,MAAM,GAAG,4BACdE,IADc,EAEd,sBAFc,EAGd,wBAHc,CAAf;AAKAR,IAAAA,MAAM,CAACM,MAAD,CAAN,CAAeL,OAAf,CAAuBQ,QAAvB;AACA,GATC,CAAF;AAWAJ,EAAAA,EAAE,CAAC,gCAAD,EAAmC,YAAM;AAC1C,QAAMG,IAAI,GAAG,CACZ,yCADY,EAEZ,uCAFY,CAAb;AAIA,QAAMC,QAAQ,GAAG,CAChB,2CADgB,EAEhB,yCAFgB,CAAjB;AAIA,QAAMH,MAAM,GAAG,4BAAgBE,IAAhB,EAAsB,aAAtB,EAAqC,eAArC,CAAf;AACAR,IAAAA,MAAM,CAACM,MAAD,CAAN,CAAeL,OAAf,CAAuBQ,QAAvB;AACA,GAXC,CAAF;AAaAJ,EAAAA,EAAE,CAAC,iCAAD,EAAoC,YAAM;AAC3C,QAAMG,IAAI,GAAG;AACZT,MAAAA,GAAG,EAAE;AADO,KAAb;AAGA,QAAMU,QAAQ,GAAG;AAChBV,MAAAA,GAAG,EAAE;AADW,KAAjB;AAIA,QAAMO,MAAM,GAAG,4BAAgBE,IAAhB,EAAsB,aAAtB,EAAqC,eAArC,CAAf;AACAR,IAAAA,MAAM,CAACM,MAAD,CAAN,CAAeL,OAAf,CAAuBQ,QAAvB;AACA,GAVC,CAAF;AAYAJ,EAAAA,EAAE,CAAC,uCAAD,EAA0C,YAAM;AACjD,QAAMG,IAAI,GAAG;AACZT,MAAAA,GAAG,EAAE;AADO,KAAb;AAGA,QAAMU,QAAQ,GAAG;AAChBV,MAAAA,GAAG,EAAE;AADW,KAAjB;AAIA,QAAMO,MAAM,GAAG,4BAAgBE,IAAhB,EAAsB,aAAtB,EAAqC,eAArC,CAAf;AACAR,IAAAA,MAAM,CAACM,MAAD,CAAN,CAAeL,OAAf,CAAuBQ,QAAvB;AACA,GAVC,CAAF;AAYAJ,EAAAA,EAAE,CAAC,6BAAD,EAAgC,YAAM;AACvC,QAAMK,SAAS,GAAG,yCAAlB;AACA,QAAMC,QAAQ,GAAG,+CAAjB;AAEA,QAAMH,IAAI,GAAG;AACZI,MAAAA,KAAK,EAAEF,SADK;AAEZG,MAAAA,OAAO,EAAE,CAACH,SAAD,EAAYA,SAAZ,CAFG;AAGZI,MAAAA,YAAY,EAAE;AACbF,QAAAA,KAAK,EAAEF,SADM;AAEbK,QAAAA,MAAM,EAAEL;AAFK;AAHF,KAAb;AASA,QAAMD,QAAQ,GAAG;AAChBG,MAAAA,KAAK,EAAED,QADS;AAEhBE,MAAAA,OAAO,EAAE,CAACF,QAAD,EAAWA,QAAX,CAFO;AAGhBG,MAAAA,YAAY,EAAE;AACbF,QAAAA,KAAK,EAAED,QADM;AAEbI,QAAAA,MAAM,EAAEJ;AAFK;AAHE,KAAjB;AASA,QAAML,MAAM,GAAG,4BAAgBE,IAAhB,EAAsB,aAAtB,EAAqC,mBAArC,CAAf;AACAR,IAAAA,MAAM,CAACM,MAAD,CAAN,CAAeL,OAAf,CAAuBQ,QAAvB;AACA,GAxBC,CAAF;AA0BAJ,EAAAA,EAAE,CAAC,0CAAD,EAA6C,YAAM;AACpD,QAAMG,IAAI,GAAG,sBAAb;AACA,QAAMC,QAAQ,GAAG,sBAAjB;AACA,QAAMH,MAAM,GAAG,4BAAgBE,IAAhB,EAAsB,aAAtB,EAAqC,mBAArC,CAAf;AACAR,IAAAA,MAAM,CAACM,MAAD,CAAN,CAAeL,OAAf,CAAuBQ,QAAvB;AACA,GALC,CAAF;AAMA,CAlGO,CAAR","sourcesContent":["import {\n\tgetHostname,\n\tgetShortURL,\n\tremoveMultiByteChars,\n\treplaceHostname,\n} from \"./utils.js\";\n\ndescribe(\"getShortURL()\", () => {\n\ttest(\"shorten a full url to a short one\", () => {\n\t\tconst url = \"http://client.salespreso.com/api/users/1/\";\n\t\texpect(getShortURL(url)).toEqual(\"/api/users/1/\");\n\t});\n\n\ttest(\"not break an already short url\", () => {\n\t\tconst url = \"/api/users/1/\";\n\t\texpect(getShortURL(url)).toEqual(\"/api/users/1/\");\n\t});\n});\n\ndescribe(\"removeMultiByteChars()\", () => {\n\ttest(\"correctly strip offending multibyte characters from string\", () => {\n\t\tconst testString = \"SUZI LUCK’S CANTEEN & COCKTAIL BAR\";\n\t\texpect(removeMultiByteChars(testString)).toEqual(\n\t\t\t\"SUZI LUCKS CANTEEN & COCKTAIL BAR\",\n\t\t);\n\t});\n\n\ttest(\"sanitize urls correctly\", () => {\n\t\tconst testString = \"http://client.salespreso.com/api/users/1/’\";\n\t\tconst testString2 = \"/api/users/1/’\";\n\t\tconst testString3 = \"/api/users/1/?param=1&test=3&_r=4\";\n\t\texpect(removeMultiByteChars(testString)).toEqual(\n\t\t\t\"http://client.salespreso.com/api/users/1/\",\n\t\t);\n\t\texpect(removeMultiByteChars(testString2)).toEqual(\"/api/users/1/\");\n\t\texpect(removeMultiByteChars(testString3)).toEqual(\n\t\t\t\"/api/users/1/?param=1&test=3&_r=4\",\n\t\t);\n\t});\n});\n\ndescribe(\"getHostname()\", () => {\n\tit(\"throws an error if hostname isn't a string\", () => {\n\t\tconst actual = () => getHostname(null);\n\t\texpect(actual).toThrow();\n\t});\n\n\tit(\"returns a hostname from a full URL\", () => {\n\t\tconst actual = getHostname(\"https://www.horse.com/api/horses/1/\");\n\t\texpect(actual).toEqual(\"www.horse.com\");\n\t});\n\n\tit(\"returns a hostname from just the domain\", () => {\n\t\tconst actual = getHostname(\"https://www.horse.com/\");\n\t\texpect(actual).toEqual(\"www.horse.com\");\n\t});\n\n\tit(\"just returns the hostname\", () => {\n\t\tconst actual = getHostname(\"www.horse.com\");\n\t\texpect(actual).toEqual(\"www.horse.com\");\n\t});\n});\n\ndescribe(\"replaceHostname()\", () => {\n\tit(\"throws an error if not from hostname\", () => {\n\t\tconst actual = () => replaceHostname(\"foo\", null, \"brand.new.com\");\n\t\texpect(actual).toThrow();\n\t});\n\n\tit(\"throws an error if not to hostname\", () => {\n\t\tconst actual = () => replaceHostname(\"foo\", \"old.url.com\", null);\n\t\texpect(actual).toThrow();\n\t});\n\n\tit(\"replaces hostname of a string\", () => {\n\t\tconst data = \"https://old.url.com/api/appointments/1/\";\n\t\tconst expected = \"https://brand.new.com/api/appointments/1/\";\n\t\tconst actual = replaceHostname(data, \"old.url.com\", \"brand.new.com\");\n\t\texpect(actual).toEqual(expected);\n\t});\n\n\tit(\"takes into account the protocol\", () => {\n\t\tconst data = \"http://old.url.com/api/appointments/1/\";\n\t\tconst expected = \"http://brand.new.com/api/appointments/1/\";\n\t\tconst actual = replaceHostname(\n\t\t\tdata,\n\t\t\t\"https://old.url.com/\",\n\t\t\t\"https://brand.new.com/\",\n\t\t);\n\t\texpect(actual).toEqual(expected);\n\t});\n\n\tit(\"replaces hostnames in an array\", () => {\n\t\tconst data = [\n\t\t\t\"https://old.url.com/api/appointments/1/\",\n\t\t\t\"https://old.url.com/api/foo/1/bars/1/\",\n\t\t];\n\t\tconst expected = [\n\t\t\t\"https://brand.new.com/api/appointments/1/\",\n\t\t\t\"https://brand.new.com/api/foo/1/bars/1/\",\n\t\t];\n\t\tconst actual = replaceHostname(data, \"old.url.com\", \"brand.new.com\");\n\t\texpect(actual).toEqual(expected);\n\t});\n\n\tit(\"replaces hostnames in an object\", () => {\n\t\tconst data = {\n\t\t\turl: \"https://old.url.com/api/appointments/1/\",\n\t\t};\n\t\tconst expected = {\n\t\t\turl: \"https://brand.new.com/api/appointments/1/\",\n\t\t};\n\n\t\tconst actual = replaceHostname(data, \"old.url.com\", \"brand.new.com\");\n\t\texpect(actual).toEqual(expected);\n\t});\n\n\tit(\"hostnames not related aren't affected\", () => {\n\t\tconst data = {\n\t\t\turl: \"https://some.otherurl.com/helloworld/\",\n\t\t};\n\t\tconst expected = {\n\t\t\turl: \"https://some.otherurl.com/helloworld/\",\n\t\t};\n\n\t\tconst actual = replaceHostname(data, \"old.url.com\", \"brand.new.com\");\n\t\texpect(actual).toEqual(expected);\n\t});\n\n\tit(\"updates data that is nested\", () => {\n\t\tconst beforeURL = \"https://old.url.com/api/appointments/1/\";\n\t\tconst afterURL = \"https://some.otherurl.com/api/appointments/1/\";\n\n\t\tconst data = {\n\t\t\tfirst: beforeURL,\n\t\t\tanArray: [beforeURL, beforeURL],\n\t\t\tnestedObject: {\n\t\t\t\tfirst: beforeURL,\n\t\t\t\tsecond: beforeURL,\n\t\t\t},\n\t\t};\n\n\t\tconst expected = {\n\t\t\tfirst: afterURL,\n\t\t\tanArray: [afterURL, afterURL],\n\t\t\tnestedObject: {\n\t\t\t\tfirst: afterURL,\n\t\t\t\tsecond: afterURL,\n\t\t\t},\n\t\t};\n\n\t\tconst actual = replaceHostname(data, \"old.url.com\", \"some.otherurl.com\");\n\t\texpect(actual).toEqual(expected);\n\t});\n\n\tit(\"does not affect hostname within a string\", () => {\n\t\tconst data = \"room:old.url.com:123\";\n\t\tconst expected = \"room:old.url.com:123\";\n\t\tconst actual = replaceHostname(data, \"old.url.com\", \"some.otherurl.com\");\n\t\texpect(actual).toEqual(expected);\n\t});\n});\n"],"file":"utils.spec.js"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@livepreso/api",
3
3
  "license": "UNLICENSED",
4
- "version": "6.46.0",
4
+ "version": "6.47.0",
5
5
  "description": "Everything to do with talking to the SalePreso API",
6
6
  "main": "index.js",
7
7
  "module": "esm/index.js",
@@ -12,19 +12,19 @@
12
12
  ],
13
13
  "keywords": [],
14
14
  "dependencies": {
15
- "@livepreso/log": "^1.3.10",
15
+ "@livepreso/log": "^1.3.11",
16
16
  "ampersand-collection": "^2.0.0",
17
17
  "ampersand-model": "^8.0.0",
18
18
  "ampersand-rest-collection": "^6.0.0",
19
19
  "process": "^0.11.10",
20
- "bluebird": "^3.5.0",
20
+ "bluebird": "~3.7.2",
21
21
  "consola": "^2.11.0",
22
22
  "dedent-js": "~1.0.1",
23
23
  "lodash": "^4.17.4",
24
24
  "moment": "^2.18.1",
25
25
  "qs": "^6.4.0",
26
26
  "superagent": "^3.5.2",
27
- "superagent-bluebird-promise": "^4.2.0",
27
+ "superagent-bluebird-promise": "~4.2.0",
28
28
  "systemjs": "^6.9.0"
29
29
  },
30
30
  "devDependencies": {
@@ -0,0 +1,18 @@
1
+ import "../models/signer.js";
2
+
3
+ import { BaseCollection } from "./base.js";
4
+ import { register } from "../state-register.js";
5
+
6
+ /**
7
+ * @constructor
8
+ * @alias collections.SignerCollection
9
+ * @extends collections.BaseCollection
10
+ * @see models.Signer
11
+ */
12
+ export const SignerCollection = BaseCollection.extend(
13
+ /** @lends collections.SignerCollection# */ {
14
+ model: "SignerModel",
15
+ },
16
+ );
17
+
18
+ register("SignerCollection", SignerCollection);
@@ -0,0 +1,18 @@
1
+ import "../models/signing-request.js";
2
+
3
+ import { BaseCollection } from "./base.js";
4
+ import { register } from "../state-register.js";
5
+
6
+ /**
7
+ * @constructor
8
+ * @alias collections.SigningRequestCollection
9
+ * @extends collections.BaseCollection
10
+ * @see models.SigningRequest
11
+ */
12
+ export const SigningRequestCollection = BaseCollection.extend(
13
+ /** @lends collections.SigningRequestCollection# */ {
14
+ model: "SigningRequestModel",
15
+ },
16
+ );
17
+
18
+ register("SigningRequestCollection", SigningRequestCollection);
@@ -28,6 +28,8 @@ export * from "./collections/packs";
28
28
  export * from "./collections/presets";
29
29
  export * from "./collections/section-selections";
30
30
  export * from "./collections/sections";
31
+ export * from "./collections/signing-requests";
32
+ export * from "./collections/signers";
31
33
  export * from "./collections/slide-selections";
32
34
  export * from "./collections/slides";
33
35
  export * from "./collections/snapshots";
@@ -37,7 +39,6 @@ export * from "./collections/images";
37
39
  export * from "./collections/users";
38
40
  export * from "./collections/uploads";
39
41
  export * from "./collections/appointment-editors.js";
40
- export * from "./collections/appointment-duplicates.js";
41
42
  export * from "./collections/tags.js";
42
43
  export * from "./collections/teams.js";
43
44
  export * from "./collections/templates.js";
package/src/fixtures.js CHANGED
@@ -63,13 +63,10 @@ function makeFactory(name, Model, ignoreFields = []) {
63
63
 
64
64
  const allModels = { ...models, ...presentationModels };
65
65
 
66
- const factories = Object.keys(allModels).reduce(
67
- (registered, key) => {
68
- registered[key] = makeFactory(key, allModels[key]);
69
- return registered;
70
- },
71
- {},
72
- );
66
+ const factories = Object.keys(allModels).reduce((registered, key) => {
67
+ registered[key] = makeFactory(key, allModels[key]);
68
+ return registered;
69
+ }, {});
73
70
 
74
71
  export function M(modelName, opts) {
75
72
  if (!factories[modelName]) {
@@ -101,7 +98,9 @@ factories.AppointmentModel.attr("latest_snapshot", null)
101
98
  .attr("appointmentsslide_set", [])
102
99
  .after((appt) => {
103
100
  if (!appt.latest_snapshot) {
104
- appt.latest_snapshot = M("SnapshotModel", { appointment: appt });
101
+ appt.latest_snapshot = M("SnapshotModel", {
102
+ appointment: appt,
103
+ });
105
104
  }
106
105
 
107
106
  if (!appt.latest_feed_data) {
@@ -125,7 +124,10 @@ factories.DeckModel.attr("approved_version", null)
125
124
  }
126
125
  });
127
126
 
128
- factories.SnapshotModel.attr("creation_status", "ready");
127
+ factories.SnapshotModel.attr("creation_status", "ready").after((snapshot) => {
128
+ snapshot.created_date = new Date();
129
+ snapshot.modified_date = new Date();
130
+ });
129
131
 
130
132
  factories.AutoAdjunctModel.attr("team", null)
131
133
  .attr("enabled", true)
package/src/index.js CHANGED
@@ -1,6 +1,3 @@
1
- import "./models.js";
2
- import "./collections.js";
3
-
4
1
  export function getAssetRoot(path) {
5
2
  if (!path) {
6
3
  return "";
@@ -11,3 +8,5 @@ export function getAssetRoot(path) {
11
8
  export * from "./api";
12
9
  export * from "./auth";
13
10
  export * from "./presentation";
11
+ export * from "./models.js";
12
+ export * from "./collections.js";
@@ -40,12 +40,20 @@ export const ActivityItemModel = BaseModel.extend(
40
40
  view_type: "string",
41
41
  is_muted: "boolean",
42
42
  appointment_is_deleted: "boolean",
43
+ signing_backend: "string",
44
+ status: "string",
45
+ concluded_date: "date",
46
+ signed_document: "string",
47
+ original_document: "string",
48
+ cancellation_reason: "string",
49
+ requested_by_contact: "boolean",
43
50
  },
44
51
 
45
52
  children: {
46
53
  hostedpreso: "HostedPresoModel",
47
54
  dispatch: "DispatchModel",
48
55
  appointmentviewing: "AppointmentViewingModel",
56
+ signingrequest: "SigningRequestModel",
49
57
  },
50
58
 
51
59
  serialize() {
@@ -58,6 +58,7 @@ export const AppointmentModel = BaseModel.extend(
58
58
  * @property {string} viewtype
59
59
  * @property {boolean} support_mode
60
60
  * @property {boolean} is_muted
61
+ * @property {boolean} is_signing_enabled
61
62
  * @property {date} no_edit_after
62
63
  * @property {date} no_share_after
63
64
  * @property {date} no_delete_after
@@ -83,6 +84,7 @@ export const AppointmentModel = BaseModel.extend(
83
84
  viewtype: "string",
84
85
  support_mode: "boolean",
85
86
  is_muted: "boolean",
87
+ is_signing_enabled: "boolean",
86
88
  no_edit_after: "date",
87
89
  no_share_after: "date",
88
90
  no_delete_after: "date",
@@ -377,6 +379,7 @@ export const AppointmentModel = BaseModel.extend(
377
379
  preset: this._retrieveURL(appointment.preset),
378
380
  locks: appointment.locks,
379
381
  is_muted: appointment.is_muted,
382
+ is_signing_enabled: appointment.is_signing_enabled,
380
383
  no_edit_after: appointment.no_edit_after,
381
384
  no_share_after: appointment.no_share_after,
382
385
  no_delete_after: appointment.no_delete_after,
@@ -59,6 +59,7 @@ export const DeckVersionModel = BaseModel.extend(
59
59
  upgrade_description: "string",
60
60
  friendly_release_notes: "string",
61
61
  has_editable_share_support: "boolean",
62
+ has_signing_support: "boolean",
62
63
  point_in_time_share_policy: "string",
63
64
  tags: "array",
64
65
  cmsvalkey_set: "array",
@@ -26,6 +26,7 @@ export const ManifestJSONModel = BaseModel.extend(
26
26
  * @property {object} dimensions
27
27
  * @property {object} pdfpreferences
28
28
  * @property {boolean} has_editable_share_support
29
+ * @property {boolean} has_signing_support
29
30
  * @property {boolean} notify_salesperson_after_feeds_fetched
30
31
  * @property {boolean} require_verification
31
32
  * @property {boolean} companywide_editable
@@ -78,6 +79,10 @@ export const ManifestJSONModel = BaseModel.extend(
78
79
  type: "boolean",
79
80
  default: false,
80
81
  },
82
+ has_signing_support: {
83
+ type: "boolean",
84
+ default: false,
85
+ },
81
86
  point_in_time_share_policy: {
82
87
  type: "string",
83
88
  },
@@ -337,6 +342,10 @@ ManifestJSONModel.createFromProject = function (projectFile) {
337
342
  projectFile.has_editable_share_support;
338
343
  }
339
344
 
345
+ if (projectFile.has_signing_support) {
346
+ manifest.has_signing_support = projectFile.has_signing_support;
347
+ }
348
+
340
349
  if (projectFile.point_in_time_share_policy) {
341
350
  manifest.point_in_time_share_policy =
342
351
  projectFile.point_in_time_share_policy;
@@ -30,6 +30,7 @@ export const PresetModel = BaseModel.extend(
30
30
  name: "stringSanitized",
31
31
  context: "object",
32
32
  hash_id: "string",
33
+ _tenancy: "object",
33
34
  },
34
35
 
35
36
  /**
@@ -2,6 +2,7 @@ import "./customer.js";
2
2
  import "./user.js";
3
3
 
4
4
  import { BaseModel } from "./base.js";
5
+ import Promise from "bluebird";
5
6
  import { register } from "../state-register.js";
6
7
 
7
8
  /**
@@ -0,0 +1,37 @@
1
+ import "../models/contact.js";
2
+
3
+ import { BaseModel } from "./base.js";
4
+ import { register } from "../state-register.js";
5
+
6
+ /**
7
+ * @constructor
8
+ * @alias models.Signer
9
+ * @extends models.BaseModel
10
+ */
11
+ export const SignerModel = BaseModel.extend(
12
+ /** @lends models.SignerModel# */ {
13
+ // modelName: "signers",
14
+
15
+ /**
16
+ * @property {string} first_name
17
+ * @property {string} last_name
18
+ * @property {string} full_name
19
+ * @property {string} backend_config
20
+ */
21
+ props: {
22
+ first_name: "string",
23
+ last_name: "string",
24
+ full_name: "string",
25
+ backend_config: "string",
26
+ },
27
+
28
+ /**
29
+ * @property {models.ContactModel} contact
30
+ */
31
+ children: {
32
+ contact: "ContactModel",
33
+ },
34
+ },
35
+ );
36
+
37
+ register("SignerModel", SignerModel);
@@ -0,0 +1,56 @@
1
+ import "./customer.js";
2
+
3
+ import { BaseModel } from "./base.js";
4
+ import { register } from "../state-register.js";
5
+
6
+ import "../collections/signers.js";
7
+
8
+ /**
9
+ * @constructor
10
+ * @alias models.SigningRequestModel
11
+ * @extends models.BaseModel
12
+ */
13
+ export const SigningRequestModel = BaseModel.extend(
14
+ /** @lends models.SigningRequestModel# */ {
15
+ modelName: "signingrequests",
16
+
17
+ /**
18
+ * @property {date} created_date
19
+ * @property {date} modified_date
20
+ * @property {date} signed_date
21
+ * @property {string} signing_backend
22
+ * @property {string} status
23
+ * @property {string} original_document
24
+ * @property {string} signed_document
25
+ * @property {array} choicelist
26
+ */
27
+ props: {
28
+ created_date: "date",
29
+ modified_date: "date",
30
+ signed_date: "date",
31
+ signing_backend: "string",
32
+ status: "string",
33
+ original_document: "string",
34
+ signed_document: "string",
35
+ choicelist: "array",
36
+ },
37
+
38
+ /**
39
+ * @property {collections.SignerCollection} signer_set
40
+ */
41
+ collections: {
42
+ signer_set: "SignerCollection",
43
+ },
44
+
45
+ /**
46
+ * @property {models.SnapshotModel} snapshot
47
+ * @property {models.UserModel} requested_by
48
+ */
49
+ children: {
50
+ snapshot: "SnapshotModel",
51
+ requested_by: "UserModel",
52
+ },
53
+ },
54
+ );
55
+
56
+ register("SigningRequestModel", SigningRequestModel);
@@ -1,6 +1,7 @@
1
1
  import "./appointment.js";
2
2
 
3
3
  import { BaseModel } from "./base.js";
4
+ import Promise from "bluebird";
4
5
  import { register } from "../state-register.js";
5
6
  import { sanitizeBase64 } from "../utils.js";
6
7
 
@@ -16,11 +17,15 @@ export const SnapshotModel = BaseModel.extend(
16
17
  /**
17
18
  * @property {object} context
18
19
  * @property {boolean} creation_status
20
+ * @property {date} created_date
21
+ * @property {date} modified_date
19
22
  */
20
23
  props: {
21
24
  context: "object",
22
25
  creation_status: "string",
23
26
  force_requires_capture: "boolean",
27
+ created_date: "date",
28
+ modified_date: "date",
24
29
  },
25
30
 
26
31
  /**
@@ -30,6 +35,20 @@ export const SnapshotModel = BaseModel.extend(
30
35
  appointment: "AppointmentModel",
31
36
  },
32
37
 
38
+ waitForReady(opts = {}, attempts = 20) {
39
+ if (attempts === 0) {
40
+ return Promise.reject();
41
+ }
42
+ return this.fetch(opts).then(() => {
43
+ if (["ready", "failed"].indexOf(this.creation_status) > -1) {
44
+ return Promise.resolve();
45
+ }
46
+ return Promise.delay(1000).then(() =>
47
+ this.waitForReady(opts, attempts - 1),
48
+ );
49
+ });
50
+ },
51
+
33
52
  toServer() {
34
53
  const data = {
35
54
  context: JSON.stringify(
package/src/models.js CHANGED
@@ -44,6 +44,8 @@ export * from "./models/room";
44
44
  export * from "./models/salesforce-lookup.js";
45
45
  export * from "./models/section";
46
46
  export * from "./models/section-selection";
47
+ export * from "./models/signing-request";
48
+ export * from "./models/signer";
47
49
  export * from "./models/slide";
48
50
  export * from "./models/slide-selection";
49
51
  export * from "./models/snapshot";
@@ -56,7 +58,6 @@ export * from "./models/upload.js";
56
58
  export * from "./models/user";
57
59
  export * from "./models/onshare";
58
60
  export * from "./models/appointment-editor.js";
59
- export * from "./models/appointment-duplicate.js";
60
61
  export * from "./models/appointment-stats.js";
61
62
  export * from "./models/appointment-viewing.js";
62
63
  export * from "./models/appointment-deckversion-tags.js";
package/src/utils.spec.js CHANGED
@@ -6,26 +6,26 @@ import {
6
6
  } from "./utils.js";
7
7
 
8
8
  describe("getShortURL()", () => {
9
- test("shorten a full url to a short one", function () {
9
+ test("shorten a full url to a short one", () => {
10
10
  const url = "http://client.salespreso.com/api/users/1/";
11
11
  expect(getShortURL(url)).toEqual("/api/users/1/");
12
12
  });
13
13
 
14
- test("not break an already short url", function () {
14
+ test("not break an already short url", () => {
15
15
  const url = "/api/users/1/";
16
16
  expect(getShortURL(url)).toEqual("/api/users/1/");
17
17
  });
18
18
  });
19
19
 
20
20
  describe("removeMultiByteChars()", () => {
21
- test("correctly strip offending multibyte characters from string", function () {
21
+ test("correctly strip offending multibyte characters from string", () => {
22
22
  const testString = "SUZI LUCK’S CANTEEN & COCKTAIL BAR";
23
23
  expect(removeMultiByteChars(testString)).toEqual(
24
24
  "SUZI LUCKS CANTEEN & COCKTAIL BAR",
25
25
  );
26
26
  });
27
27
 
28
- test("sanatize urls correctly", function () {
28
+ test("sanitize urls correctly", () => {
29
29
  const testString = "http://client.salespreso.com/api/users/1/’";
30
30
  const testString2 = "/api/users/1/’";
31
31
  const testString3 = "/api/users/1/?param=1&test=3&_r=4";
@@ -1,21 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.AppointmentDuplicateCollection = void 0;
7
- require("../models/appointment-duplicate.js");
8
- var _base = require("./base.js");
9
- var _stateRegister = require("../state-register.js");
10
- /**
11
- * @constructor
12
- * @alias collections.AppointmentDuplicateCollection
13
- * @extends collections.BaseCollection
14
- * @see models.AppointmentDuplicateModel
15
- */
16
- var AppointmentDuplicateCollection = exports.AppointmentDuplicateCollection = _base.BaseCollection.extend( /** @lends collections.AppointmentDuplicateCollection# */{
17
- comparator: "sequence",
18
- model: "AppointmentDuplicateModel"
19
- });
20
- (0, _stateRegister.register)("AppointmentDuplicateCollection", AppointmentDuplicateCollection);
21
- //# sourceMappingURL=appointment-duplicates.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"appointment-duplicates.js","names":["require","_base","_stateRegister","AppointmentDuplicateCollection","exports","BaseCollection","extend","comparator","model","register"],"sources":["../../src/collections/appointment-duplicates.js"],"sourcesContent":["import \"../models/appointment-duplicate.js\";\n\nimport { BaseCollection } from \"./base.js\";\nimport { register } from \"../state-register.js\";\n\n/**\n * @constructor\n * @alias collections.AppointmentDuplicateCollection\n * @extends collections.BaseCollection\n * @see models.AppointmentDuplicateModel\n */\nexport const AppointmentDuplicateCollection = BaseCollection.extend(\n\t/** @lends collections.AppointmentDuplicateCollection# */ {\n\t\tcomparator: \"sequence\",\n\t\tmodel: \"AppointmentDuplicateModel\",\n\t},\n);\n\nregister(\"AppointmentDuplicateCollection\", AppointmentDuplicateCollection);\n"],"mappings":";;;;;;AAAAA,OAAA;AAEA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAF,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,IAAMG,8BAA8B,GAAAC,OAAA,CAAAD,8BAAA,GAAGE,oBAAc,CAACC,MAAM,EAClE,yDAA0D;EACzDC,UAAU,EAAE,UAAU;EACtBC,KAAK,EAAE;AACR,CACD,CAAC;AAED,IAAAC,uBAAQ,EAAC,gCAAgC,EAAEN,8BAA8B,CAAC"}