parse-server 2.8.4 → 8.6.2

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 (240) hide show
  1. package/LICENSE +167 -25
  2. package/NOTICE +10 -0
  3. package/README.md +929 -278
  4. package/lib/AccountLockout.js +47 -30
  5. package/lib/Adapters/AdapterLoader.js +21 -6
  6. package/lib/Adapters/Analytics/AnalyticsAdapter.js +15 -12
  7. package/lib/Adapters/Auth/AuthAdapter.js +116 -13
  8. package/lib/Adapters/Auth/BaseCodeAuthAdapter.js +99 -0
  9. package/lib/Adapters/Auth/OAuth1Client.js +27 -46
  10. package/lib/Adapters/Auth/apple.js +123 -0
  11. package/lib/Adapters/Auth/facebook.js +162 -35
  12. package/lib/Adapters/Auth/gcenter.js +217 -0
  13. package/lib/Adapters/Auth/github.js +118 -48
  14. package/lib/Adapters/Auth/google.js +160 -51
  15. package/lib/Adapters/Auth/gpgames.js +125 -0
  16. package/lib/Adapters/Auth/httpsRequest.js +6 -7
  17. package/lib/Adapters/Auth/index.js +170 -62
  18. package/lib/Adapters/Auth/instagram.js +114 -40
  19. package/lib/Adapters/Auth/janraincapture.js +52 -23
  20. package/lib/Adapters/Auth/janrainengage.js +19 -36
  21. package/lib/Adapters/Auth/keycloak.js +148 -0
  22. package/lib/Adapters/Auth/ldap.js +167 -0
  23. package/lib/Adapters/Auth/line.js +125 -0
  24. package/lib/Adapters/Auth/linkedin.js +111 -55
  25. package/lib/Adapters/Auth/meetup.js +24 -34
  26. package/lib/Adapters/Auth/mfa.js +324 -0
  27. package/lib/Adapters/Auth/microsoft.js +111 -0
  28. package/lib/Adapters/Auth/oauth2.js +97 -162
  29. package/lib/Adapters/Auth/phantauth.js +53 -0
  30. package/lib/Adapters/Auth/qq.js +108 -49
  31. package/lib/Adapters/Auth/spotify.js +107 -55
  32. package/lib/Adapters/Auth/twitter.js +188 -48
  33. package/lib/Adapters/Auth/utils.js +28 -0
  34. package/lib/Adapters/Auth/vkontakte.js +26 -39
  35. package/lib/Adapters/Auth/wechat.js +106 -44
  36. package/lib/Adapters/Auth/weibo.js +132 -58
  37. package/lib/Adapters/Cache/CacheAdapter.js +13 -8
  38. package/lib/Adapters/Cache/InMemoryCache.js +3 -13
  39. package/lib/Adapters/Cache/InMemoryCacheAdapter.js +5 -13
  40. package/lib/Adapters/Cache/LRUCache.js +13 -27
  41. package/lib/Adapters/Cache/NullCacheAdapter.js +3 -8
  42. package/lib/Adapters/Cache/RedisCacheAdapter.js +85 -76
  43. package/lib/Adapters/Cache/SchemaCache.js +25 -0
  44. package/lib/Adapters/Email/MailAdapter.js +10 -8
  45. package/lib/Adapters/Files/FilesAdapter.js +83 -25
  46. package/lib/Adapters/Files/GridFSBucketAdapter.js +231 -0
  47. package/lib/Adapters/Files/GridStoreAdapter.js +4 -91
  48. package/lib/Adapters/Logger/LoggerAdapter.js +18 -14
  49. package/lib/Adapters/Logger/WinstonLogger.js +69 -88
  50. package/lib/Adapters/Logger/WinstonLoggerAdapter.js +7 -16
  51. package/lib/Adapters/MessageQueue/EventEmitterMQ.js +8 -26
  52. package/lib/Adapters/PubSub/EventEmitterPubSub.js +12 -25
  53. package/lib/Adapters/PubSub/PubSubAdapter.js +34 -0
  54. package/lib/Adapters/PubSub/RedisPubSub.js +42 -19
  55. package/lib/Adapters/Push/PushAdapter.js +14 -7
  56. package/lib/Adapters/Storage/Mongo/MongoCollection.js +137 -45
  57. package/lib/Adapters/Storage/Mongo/MongoSchemaCollection.js +158 -63
  58. package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +320 -168
  59. package/lib/Adapters/Storage/Mongo/MongoTransform.js +279 -306
  60. package/lib/Adapters/Storage/Postgres/PostgresClient.js +14 -10
  61. package/lib/Adapters/Storage/Postgres/PostgresConfigParser.js +47 -21
  62. package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +854 -468
  63. package/lib/Adapters/Storage/Postgres/sql/index.js +4 -6
  64. package/lib/Adapters/Storage/StorageAdapter.js +1 -1
  65. package/lib/Adapters/WebSocketServer/WSAdapter.js +35 -0
  66. package/lib/Adapters/WebSocketServer/WSSAdapter.js +66 -0
  67. package/lib/Auth.js +488 -125
  68. package/lib/ClientSDK.js +2 -6
  69. package/lib/Config.js +525 -94
  70. package/lib/Controllers/AdaptableController.js +5 -25
  71. package/lib/Controllers/AnalyticsController.js +22 -23
  72. package/lib/Controllers/CacheController.js +10 -31
  73. package/lib/Controllers/DatabaseController.js +767 -313
  74. package/lib/Controllers/FilesController.js +49 -54
  75. package/lib/Controllers/HooksController.js +80 -84
  76. package/lib/Controllers/LiveQueryController.js +35 -22
  77. package/lib/Controllers/LoggerController.js +22 -58
  78. package/lib/Controllers/ParseGraphQLController.js +293 -0
  79. package/lib/Controllers/PushController.js +58 -49
  80. package/lib/Controllers/SchemaController.js +916 -422
  81. package/lib/Controllers/UserController.js +265 -180
  82. package/lib/Controllers/index.js +90 -125
  83. package/lib/Controllers/types.js +1 -1
  84. package/lib/Deprecator/Deprecations.js +30 -0
  85. package/lib/Deprecator/Deprecator.js +127 -0
  86. package/lib/Error.js +48 -0
  87. package/lib/GraphQL/ParseGraphQLSchema.js +375 -0
  88. package/lib/GraphQL/ParseGraphQLServer.js +214 -0
  89. package/lib/GraphQL/helpers/objectsMutations.js +30 -0
  90. package/lib/GraphQL/helpers/objectsQueries.js +246 -0
  91. package/lib/GraphQL/loaders/configMutations.js +87 -0
  92. package/lib/GraphQL/loaders/configQueries.js +79 -0
  93. package/lib/GraphQL/loaders/defaultGraphQLMutations.js +21 -0
  94. package/lib/GraphQL/loaders/defaultGraphQLQueries.js +23 -0
  95. package/lib/GraphQL/loaders/defaultGraphQLTypes.js +1098 -0
  96. package/lib/GraphQL/loaders/defaultRelaySchema.js +53 -0
  97. package/lib/GraphQL/loaders/filesMutations.js +107 -0
  98. package/lib/GraphQL/loaders/functionsMutations.js +78 -0
  99. package/lib/GraphQL/loaders/parseClassMutations.js +268 -0
  100. package/lib/GraphQL/loaders/parseClassQueries.js +127 -0
  101. package/lib/GraphQL/loaders/parseClassTypes.js +493 -0
  102. package/lib/GraphQL/loaders/schemaDirectives.js +62 -0
  103. package/lib/GraphQL/loaders/schemaMutations.js +162 -0
  104. package/lib/GraphQL/loaders/schemaQueries.js +81 -0
  105. package/lib/GraphQL/loaders/schemaTypes.js +341 -0
  106. package/lib/GraphQL/loaders/usersMutations.js +433 -0
  107. package/lib/GraphQL/loaders/usersQueries.js +90 -0
  108. package/lib/GraphQL/parseGraphQLUtils.js +63 -0
  109. package/lib/GraphQL/transformers/className.js +14 -0
  110. package/lib/GraphQL/transformers/constraintType.js +53 -0
  111. package/lib/GraphQL/transformers/inputType.js +51 -0
  112. package/lib/GraphQL/transformers/mutation.js +274 -0
  113. package/lib/GraphQL/transformers/outputType.js +51 -0
  114. package/lib/GraphQL/transformers/query.js +237 -0
  115. package/lib/GraphQL/transformers/schemaFields.js +99 -0
  116. package/lib/KeyPromiseQueue.js +48 -0
  117. package/lib/LiveQuery/Client.js +25 -33
  118. package/lib/LiveQuery/Id.js +2 -5
  119. package/lib/LiveQuery/ParseCloudCodePublisher.js +26 -23
  120. package/lib/LiveQuery/ParseLiveQueryServer.js +560 -285
  121. package/lib/LiveQuery/ParsePubSub.js +7 -16
  122. package/lib/LiveQuery/ParseWebSocketServer.js +42 -39
  123. package/lib/LiveQuery/QueryTools.js +76 -15
  124. package/lib/LiveQuery/RequestSchema.js +111 -97
  125. package/lib/LiveQuery/SessionTokenCache.js +23 -36
  126. package/lib/LiveQuery/Subscription.js +8 -17
  127. package/lib/LiveQuery/equalObjects.js +2 -3
  128. package/lib/Options/Definitions.js +1355 -382
  129. package/lib/Options/docs.js +301 -62
  130. package/lib/Options/index.js +11 -1
  131. package/lib/Options/parsers.js +14 -10
  132. package/lib/Page.js +44 -0
  133. package/lib/ParseMessageQueue.js +6 -13
  134. package/lib/ParseServer.js +474 -235
  135. package/lib/ParseServerRESTController.js +102 -40
  136. package/lib/PromiseRouter.js +39 -50
  137. package/lib/Push/PushQueue.js +24 -30
  138. package/lib/Push/PushWorker.js +32 -56
  139. package/lib/Push/utils.js +22 -35
  140. package/lib/RestQuery.js +361 -139
  141. package/lib/RestWrite.js +713 -344
  142. package/lib/Routers/AggregateRouter.js +97 -71
  143. package/lib/Routers/AnalyticsRouter.js +8 -14
  144. package/lib/Routers/AudiencesRouter.js +16 -35
  145. package/lib/Routers/ClassesRouter.js +86 -72
  146. package/lib/Routers/CloudCodeRouter.js +28 -37
  147. package/lib/Routers/FeaturesRouter.js +22 -25
  148. package/lib/Routers/FilesRouter.js +266 -171
  149. package/lib/Routers/FunctionsRouter.js +87 -103
  150. package/lib/Routers/GlobalConfigRouter.js +94 -33
  151. package/lib/Routers/GraphQLRouter.js +41 -0
  152. package/lib/Routers/HooksRouter.js +43 -47
  153. package/lib/Routers/IAPValidationRouter.js +57 -70
  154. package/lib/Routers/InstallationsRouter.js +17 -25
  155. package/lib/Routers/LogsRouter.js +10 -25
  156. package/lib/Routers/PagesRouter.js +647 -0
  157. package/lib/Routers/PublicAPIRouter.js +104 -112
  158. package/lib/Routers/PurgeRouter.js +19 -29
  159. package/lib/Routers/PushRouter.js +14 -28
  160. package/lib/Routers/RolesRouter.js +7 -14
  161. package/lib/Routers/SchemasRouter.js +63 -42
  162. package/lib/Routers/SecurityRouter.js +34 -0
  163. package/lib/Routers/SessionsRouter.js +25 -38
  164. package/lib/Routers/UsersRouter.js +463 -190
  165. package/lib/SchemaMigrations/DefinedSchemas.js +379 -0
  166. package/lib/SchemaMigrations/Migrations.js +30 -0
  167. package/lib/Security/Check.js +109 -0
  168. package/lib/Security/CheckGroup.js +44 -0
  169. package/lib/Security/CheckGroups/CheckGroupDatabase.js +44 -0
  170. package/lib/Security/CheckGroups/CheckGroupServerConfig.js +96 -0
  171. package/lib/Security/CheckGroups/CheckGroups.js +21 -0
  172. package/lib/Security/CheckRunner.js +213 -0
  173. package/lib/SharedRest.js +29 -0
  174. package/lib/StatusHandler.js +96 -93
  175. package/lib/TestUtils.js +70 -14
  176. package/lib/Utils.js +468 -0
  177. package/lib/batch.js +74 -40
  178. package/lib/cache.js +8 -8
  179. package/lib/cli/definitions/parse-live-query-server.js +4 -3
  180. package/lib/cli/definitions/parse-server.js +4 -3
  181. package/lib/cli/parse-live-query-server.js +9 -17
  182. package/lib/cli/parse-server.js +49 -47
  183. package/lib/cli/utils/commander.js +20 -29
  184. package/lib/cli/utils/runner.js +31 -32
  185. package/lib/cloud-code/Parse.Cloud.js +711 -36
  186. package/lib/cloud-code/Parse.Server.js +21 -0
  187. package/lib/cryptoUtils.js +6 -11
  188. package/lib/defaults.js +21 -15
  189. package/lib/deprecated.js +1 -1
  190. package/lib/index.js +78 -67
  191. package/lib/logger.js +12 -20
  192. package/lib/middlewares.js +484 -160
  193. package/lib/password.js +10 -6
  194. package/lib/request.js +175 -0
  195. package/lib/requiredParameter.js +4 -3
  196. package/lib/rest.js +157 -82
  197. package/lib/triggers.js +627 -185
  198. package/lib/vendor/README.md +3 -3
  199. package/lib/vendor/mongodbUrl.js +224 -137
  200. package/package.json +135 -57
  201. package/postinstall.js +38 -50
  202. package/public_html/invalid_verification_link.html +3 -3
  203. package/types/@types/@parse/fs-files-adapter/index.d.ts +5 -0
  204. package/types/@types/deepcopy/index.d.ts +5 -0
  205. package/types/LiveQuery/ParseLiveQueryServer.d.ts +40 -0
  206. package/types/Options/index.d.ts +301 -0
  207. package/types/ParseServer.d.ts +65 -0
  208. package/types/eslint.config.mjs +30 -0
  209. package/types/index.d.ts +21 -0
  210. package/types/logger.d.ts +2 -0
  211. package/types/tests.ts +44 -0
  212. package/types/tsconfig.json +24 -0
  213. package/CHANGELOG.md +0 -1246
  214. package/PATENTS +0 -37
  215. package/bin/dev +0 -37
  216. package/lib/.DS_Store +0 -0
  217. package/lib/Adapters/Auth/common.js +0 -2
  218. package/lib/Adapters/Auth/facebookaccountkit.js +0 -69
  219. package/lib/Controllers/SchemaCache.js +0 -97
  220. package/lib/LiveQuery/.DS_Store +0 -0
  221. package/lib/cli/utils/parsers.js +0 -77
  222. package/lib/cloud-code/.DS_Store +0 -0
  223. package/lib/cloud-code/HTTPResponse.js +0 -57
  224. package/lib/cloud-code/Untitled-1 +0 -123
  225. package/lib/cloud-code/httpRequest.js +0 -102
  226. package/lib/cloud-code/team.html +0 -123
  227. package/lib/graphql/ParseClass.js +0 -234
  228. package/lib/graphql/Schema.js +0 -197
  229. package/lib/graphql/index.js +0 -1
  230. package/lib/graphql/types/ACL.js +0 -35
  231. package/lib/graphql/types/Date.js +0 -25
  232. package/lib/graphql/types/File.js +0 -24
  233. package/lib/graphql/types/GeoPoint.js +0 -35
  234. package/lib/graphql/types/JSONObject.js +0 -30
  235. package/lib/graphql/types/NumberInput.js +0 -43
  236. package/lib/graphql/types/NumberQuery.js +0 -42
  237. package/lib/graphql/types/Pointer.js +0 -35
  238. package/lib/graphql/types/QueryConstraint.js +0 -61
  239. package/lib/graphql/types/StringQuery.js +0 -39
  240. package/lib/graphql/types/index.js +0 -110
@@ -1,123 +0,0 @@
1
- <!DOCTYPE html><html class="no-js lang-fr-ca" lang="fr-ca"><head><title>Équipe</title><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"><meta name="baidu-site-verification" content="MZyTvcJYkp" /><meta property="fb:app_id" content="142556252515404"><meta property="og:title" content="Équipe"><meta property="og:site_name" content="Busbud"><meta property="og:type" content="website"><meta property="og:url" content="https://www.busbud.com/fr-ca/about/team"><meta property="og:image" content="https://busbud-pubweb-assets.global.ssl.fastly.net/images/2784feb.largeicon.png"><meta property="og:image:height" content="512"><meta property="og:image:width" content="512"><link rel="apple-touch-icon" sizes="180x180" href="//busbud-pubweb-assets.global.ssl.fastly.net/images/favicons/52ed922.apple-touch-icon.png"><link rel="icon" type="image/png" sizes="32x32" href="//busbud-pubweb-assets.global.ssl.fastly.net/images/favicons/c52fff8.favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="//busbud-pubweb-assets.global.ssl.fastly.net/images/favicons/9ded9aa.favicon-16x16.png"><link rel="mask-icon" color="#127ccd" href="//busbud-pubweb-assets.global.ssl.fastly.net/images/favicons/f17798c.safari-pinned-tab.svg"><link rel="shortcut icon" href="//busbud-pubweb-assets.global.ssl.fastly.net/images/favicons/74b1f36.favicon.ico"><link rel="manifest" href="//busbud-pubweb-assets.global.ssl.fastly.net/images/favicons/d285949.manifest.json"><meta name="apple-mobile-web-app-title" content="Busbud"><meta name="application-name" content="Busbud"><meta name="msapplication-config" content="//busbud-pubweb-assets.global.ssl.fastly.net/images/favicons/9a452a8.browserconfig.xml"><meta name="theme-color" content="#0B72BE"><link rel="canonical" href="https://www.busbud.com/fr-ca/about/team"><link rel="alternate" hreflang="de" href="https://www.busbud.com/de/about/team"><link rel="alternate" hreflang="en" href="https://www.busbud.com/en/about/team"><link rel="alternate" hreflang="en-ca" href="https://www.busbud.com/en-ca/about/team"><link rel="alternate" hreflang="en-gb" href="https://www.busbud.com/en-gb/about/team"><link rel="alternate" hreflang="es" href="https://www.busbud.com/es/about/team"><link rel="alternate" hreflang="es-mx" href="https://www.busbud.com/es-mx/about/team"><link rel="alternate" hreflang="fr" href="https://www.busbud.com/fr/about/team"><link rel="alternate" hreflang="fr-ca" href="https://www.busbud.com/fr-ca/about/team"><link rel="alternate" hreflang="it" href="https://www.busbud.com/it/about/team"><link rel="alternate" hreflang="nl" href="https://www.busbud.com/nl/about/team"><link rel="alternate" hreflang="pl" href="https://www.busbud.com/pl/about/team"><link rel="alternate" hreflang="pt" href="https://www.busbud.com/pt/about/team"><link rel="alternate" hreflang="sv" href="https://www.busbud.com/sv/about/team"><link rel="alternate" hreflang="tr" href="https://www.busbud.com/tr/about/team"><link rel="alternate" hreflang="zh" href="https://www.busbud.com/zh/about/team"><link rel="alternate" hreflang="x-default" href="https://www.busbud.com/about/team"><link rel="alternate" hreflang="es-br" href="https://www.busbud.com/es-419/about/team"><link rel="alternate" hreflang="es-co" href="https://www.busbud.com/es-419/about/team"><link rel="alternate" hreflang="es-ar" href="https://www.busbud.com/es-419/about/team"><link rel="alternate" hreflang="es-pe" href="https://www.busbud.com/es-419/about/team"><link rel="alternate" hreflang="es-ve" href="https://www.busbud.com/es-419/about/team"><link rel="alternate" hreflang="es-cl" href="https://www.busbud.com/es-419/about/team"><link rel="alternate" hreflang="es-gl" href="https://www.busbud.com/es-419/about/team"><link rel="alternate" hreflang="es-ec" href="https://www.busbud.com/es-419/about/team"><link rel="alternate" hreflang="es-bo" href="https://www.busbud.com/es-419/about/team"><link rel="alternate" hreflang="es-do" href="https://www.busbud.com/es-419/about/team"><link rel="alternate" hreflang="es-hn" href="https://www.busbud.com/es-419/about/team"><link rel="alternate" hreflang="es-py" href="https://www.busbud.com/es-419/about/team"><link rel="alternate" hreflang="es-sv" href="https://www.busbud.com/es-419/about/team"><link rel="alternate" hreflang="es-ni" href="https://www.busbud.com/es-419/about/team"><link rel="alternate" hreflang="es-cr" href="https://www.busbud.com/es-419/about/team"><link rel="alternate" hreflang="es-pa" href="https://www.busbud.com/es-419/about/team"><link rel="alternate" hreflang="es-pr" href="https://www.busbud.com/es-419/about/team"><link rel="alternate" hreflang="es-uy" href="https://www.busbud.com/es-419/about/team"><script type="application/ld+json">{
2
- "@context": "http://schema.org",
3
- "@type": "Organization",
4
- "name": "Busbud",
5
- "url": "https://www.busbud.com",
6
- "logo": "https://busbud-pubweb-assets.global.ssl.fastly.net/images/2784feb.largeicon.png",
7
- "sameAs": [
8
- "https://www.facebook.com/Busbud",
9
- "https://twitter.com/Busbud",
10
- "https://www.instagram.com/busbud_com/",
11
- "https://www.linkedin.com/company/busbud",
12
- "https://en.wikipedia.org/wiki/Busbud"
13
- ]
14
- }</script><script src="https://code.jquery.com/jquery-3.3.1.slim.js"/><script>function BBPerfPing(e,n,t){function o(o){var r=a.navigator,d="/i?requestId="+i(e),g={sample:o,entityId:t&&t.id||"",entityType:t&&t.type||"",totalLongTasksDuration:-1};try{var y=c&&c.timing;if(g.connectionType=r&&r.connection&&r.connection.effectiveType,s in c){var p=c[s]("navigation"),v=p&&p[0];v&&Object.keys(v.toJSON()).forEach(function(e){var n=v[e];g[e]=n&&n.toFixed?n.toFixed(0):n},""),(p=c[s]("paint"))&&p.forEach(function(e){e.startTime&&(g[e.name]=e.startTime.toFixed(0))}),u.length&&(g.totalLongTasksDuration=parseInt(u.reduce(function(e,n){return e+n.duration},0),10))}else Object.keys(y.toJSON()).forEach(function(e){g[e]=0===y[e]?0:y[e]-y.navigationStart},"");if(n&&void 0!==window.btoa){var l=JSON.stringify(Object.keys(n).map(function(e){return{k:e,v:n[e].replace("control","#")}}));g.experiments=btoa(l.length+l)}d+=Object.keys(g).filter(function(e){return e!==f}).sort().concat(f).reduce(function(e,n){return e+"&"+i(n)+"="+i(g[n])},"")}catch(e){d+="&error="+i(e&&(e.message||e)).slice(0,200)}return(new Image).src=d,!1}var r,i=encodeURIComponent,a=window,c=a.performance,s="getEntriesByType",f="experiments",u=[];if(s in c&&c[s]("longtask"))try{(r=new PerformanceObserver(function(e){for(var n=e.getEntries(),t=0;t<n.length;t++)u.push(n[t])})).observe({entryTypes:["longtask"],buffered:!0})}catch(i){}o("head"),addEventListener("load",function(){o("onload"),r&&r.disconnect()})}</script><script data-id="perfping">BBPerfPing('2018080917457c01e72efbbc30a7b6b188f9b38bcb0bae59d48fe80181ba84e791720adba00a', {"outage_notifications":"control","account_purchase":"control","contentful_perf":"control","co_no_google_autocomplete":"control","geocoding_search_places":"control","xp_insurance_in_checkout":"1","interconnection_fallback":"control","localized_search_date":"control","multi_city":"1","new_passenger_questions":"control","busbud_fee":"control","partner_page_without_map":"control","recent_searches":"control","resources_preload_enabled":"control","thank_you_jwt":"control","unified_checkout":"control","travel_reviews_limits":"control","unified_results":"control"}, undefined)</script><script>!function(){var e=document.getElementsByTagName("html")[0];e&&(e.className=e.className.replace("no-js","js"))}();</script><link rel="stylesheet" href="//busbud-pubweb-assets.global.ssl.fastly.net/css/13eff9a.core.css"><link rel="stylesheet" href="//busbud-pubweb-assets.global.ssl.fastly.net/css/e33dd73.about-section.css"><style>.lazy-load,.lazy-loaded{-webkit-transition:opacity .3s;transition:opacity .3s;opacity:0}.lazy-loaded{opacity:1}.hero-lazy{background-position:50%;background-size:cover;background-repeat:no-repeat;position:absolute;left:0;top:0;bottom:0;right:0}</style><script>!function(){function e(){this.cache=[],this.load_threshhold=300}var t=window.addEventListener||function(e,t){window.attachEvent("on"+e,t)},a=window.removeEventListener||function(e,t){window.detachEvent("on"+e,t)};e.prototype.addObservers=function(){t("scroll",this.loadVisibleImages.bind(this)),t("resize",this.loadVisibleImages.bind(this))},e.prototype.removeObservers=function(){a("scroll",this.loadVisibleImages.bind(this),!1),a("resize",this.loadVisibleImages.bind(this),!1)},e.prototype.getOffsetTop=function(e){var t=0;if(e.offsetParent){do{t+=e.offsetTop}while(e=e.offsetParent);return t}},e.prototype.loadVisibleImages=function(){var e=this.getOffsetTop,t=window.pageYOffset||document.documentElement.scrollTop,a=window.innerHeight||document.documentElement.clientHeight,i={min:t-this.load_threshhold,max:t+a+this.load_threshhold};this.cache=this.cache.filter(function(t){var a=e(t),o=t.height||0;if(a>=i.min-o&&a<=i.max){var s=new Image;return t.className.indexOf("hero-lazy")>-1&&window.innerWidth<641||(s.onload=function(){"DIV"===t.tagName?t.style.backgroundImage="url('"+t.getAttribute("data-src")+"')":t.src=t.getAttribute("data-src"),t.removeAttribute("data-src"),t.className=t.className.replace(/(^|\s+)lazy-load(\s+|$)/,"$1lazy-loaded$2"),delete s},s.src=t.getAttribute("data-src"),!1)}return!0}),0===this.cache.length&&this.removeObservers()},e.prototype.init=function(){var e=this;t("load",function t(){Array.prototype.slice.call(document.querySelectorAll("img[data-src]")).forEach(function(t){t.src||(t.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",t.className=t.className+" lazy-load"),e.cache.push(t)}),e.cache=e.cache.concat(Array.prototype.slice.call(document.querySelectorAll("div[data-src]"))),e.addObservers(),e.loadVisibleImages(),a("load",t,!1)})},(new e).init()}();</script></head><body><div class="mobile-modal" id="language-modal" style="display:none" tabindex="-1" role="dialog" aria-labelledby="language-modal-label"><div class="mobile-modal-content" role="document"><div class="mobile-modal-header clearfix"><button class="close float-right" data-dismiss="modal" aria-label="Close"><svg name="times" width="24" height="24" preserveAspectRatio="xMidYMid meet"><use xlink:href="#icon-times" href="#icon-times" aria-hidden="true"></use></svg></button><h4 class="mobile-modal-title" id="language-modal-label">Sélectionner la langue</h4></div><div class="mobile-modal-body"><ul class="list-mobile"><li class="list-item"><a href="/de/about/team">Deutsch</a></li><li class="list-item"><a href="/en/about/team">English</a></li><li class="list-item"><a href="/en-ca/about/team">English (Canada)</a></li><li class="list-item"><a href="/en-gb/about/team">English (UK)</a></li><li class="list-item"><a href="/es/about/team">Español (España)</a></li><li class="list-item"><a href="/es-419/about/team">Español (Latinoamérica)</a></li><li class="list-item"><a href="/es-mx/about/team">Español (Mexico)</a></li><li class="list-item"><a href="/fr/about/team">Français</a></li><li class="list-item"><a href="/it/about/team">Italiano</a></li><li class="list-item"><a href="/nl/about/team">Nederlands</a></li><li class="list-item"><a href="/pl/about/team">Polski</a></li><li class="list-item"><a href="/pt/about/team">Português</a></li><li class="list-item"><a href="/sv/about/team">Svenska</a></li><li class="list-item"><a href="/tr/about/team">Türkçe</a></li><li class="list-item"><a href="/zh/about/team">中文简体</a></li></ul></div></div></div><div class="mobile-modal" id="currency-modal" style="display:none" tabindex="-1" role="dialog" aria-labelledby="currency-modal-label"><div class="mobile-modal-content" role="document"><div class="mobile-modal-header clearfix"><button class="close float-right" data-dismiss="modal" aria-label="Close"><svg name="times" width="24" height="24" preserveAspectRatio="xMidYMid meet"><use xlink:href="#icon-times" href="#icon-times" aria-hidden="true"></use></svg></button><h4 class="mobile-modal-title" id="currency-modal-label">Sélectionner une devise</h4></div><div class="mobile-modal-body"><ul class="list-mobile"><li class="list-item"><div class="list-link" data-url="/fr-ca/about/team?currency=USD">$ (USD)</div></li><li class="list-item"><div class="list-link" data-url="/fr-ca/about/team?currency=EUR">€ (EUR)</div></li><li class="list-item"><div class="list-link" data-url="/fr-ca/about/team?currency=GBP">£ (GBP)</div></li><li class="list-item"><div class="list-link" data-url="/fr-ca/about/team?currency=AUD">$ (AUD)</div></li><li class="list-item"><div class="list-link" data-url="/fr-ca/about/team?currency=BRL">R$ (BRL)</div></li><li class="list-item"><div class="list-link" data-url="/fr-ca/about/team?currency=MXN">$ (MXN)</div></li><li class="list-item"><div class="list-link" data-url="/fr-ca/about/team?currency=ARS">$ (ARS)</div></li><li class="list-item"><div class="list-link" data-url="/fr-ca/about/team?currency=INR">₹ (INR)</div></li><li class="list-item"><div class="list-link" data-url="/fr-ca/about/team?currency=CNY">¥ (CNY)</div></li><li class="list-item"><div class="list-link" data-url="/fr-ca/about/team?currency=JPY">¥ (JPY)</div></li><li class="list-item"><div class="list-link" data-url="/fr-ca/about/team?currency=RUB">р (RUB)</div></li><li class="list-item"><div class="list-link" data-url="/fr-ca/about/team?currency=KRW">₩ (KRW)</div></li><li class="list-item"><div class="list-link" data-url="/fr-ca/about/team?currency=PEN">S/ (PEN)</div></li><li class="list-item"><div class="list-link" data-url="/fr-ca/about/team?currency=PLN">zł (PLN)</div></li><li class="list-item"><div class="list-link" data-url="/fr-ca/about/team?currency=TRY">₺ (TRY)</div></li><li class="list-item"><div class="list-link" data-url="/fr-ca/about/team?currency=SEK">kr (SEK)</div></li><li class="list-item"><div class="list-link" data-url="/fr-ca/about/team?currency=CZK">Kč (CZK)</div></li><li class="list-item"><div class="list-link" data-url="/fr-ca/about/team?currency=NZD">$ (NZD)</div></li><li class="list-item"><div class="list-link" data-url="/fr-ca/about/team?currency=MAD">dh (MAD)</div></li><li class="list-item"><div class="list-link" data-url="/fr-ca/about/team?currency=ZAR">R (ZAR)</div></li><li class="list-item"><div class="list-link" data-url="/fr-ca/about/team?currency=CLP">$ (CLP)</div></li><li class="list-item"><div class="list-link" data-url="/fr-ca/about/team?currency=COP">$ (COP)</div></li><li class="list-item"><div class="list-link" data-url="/fr-ca/about/team?currency=CHF">CHF (CHF)</div></li><li class="list-item"><div class="list-link" data-url="/fr-ca/about/team?currency=DKK">kr (DKK)</div></li><li class="list-item"><div class="list-link" data-url="/fr-ca/about/team?currency=ILS">₪ (ILS)</div></li><li class="list-item"><div class="list-link" data-url="/fr-ca/about/team?currency=NOK">kr (NOK)</div></li><li class="list-item"><div class="list-link" data-url="/fr-ca/about/team?currency=SGD">S$ (SGD)</div></li><li class="list-item"><div class="list-link" data-url="/fr-ca/about/team?currency=HKD">HK$ (HKD)</div></li><li class="list-item"><div class="list-link" data-url="/fr-ca/about/team?currency=THB">฿ (THB)</div></li></ul></div></div></div><div class="mobile-modal mobile-menu" id="mobile-menu-modal" style="display:none" tabindex="-1" role="dialog" aria-labelledby="mobile-menu-modal-label"><div class="mobile-modal-content" role="document"><div class="mobile-modal-header clearfix no-shadow"><button class="close float-right" data-dismiss="modal" aria-label="Close"><svg name="times" width="24" height="24" preserveAspectRatio="xMidYMid meet"><use xlink:href="#icon-times" href="#icon-times" aria-hidden="true"></use></svg></button><h4 class="mobile-modal-title" id="mobile-menu-modal-label"></h4></div><div class="mobile-modal-body"><ul class="list-mobile list-group"><li class="list-item-bold"><a href="/fr-ca/activity" class="d-flex align-items-center"><svg name="history" class="nav-icon" width="18" height="18" preserveAspectRatio="xMidYMid meet"><use xlink:href="#icon-history" href="#icon-history" aria-hidden="true"></use></svg>Mes recherches</a></li><li class="list-item-bold"><a href="/fr-ca/account/signin" class="d-flex align-items-center"><svg name="user" width="18" height="18" preserveAspectRatio="xMidYMid meet"><use xlink:href="#icon-user" href="#icon-user" aria-hidden="true"></use></svg>Se connecter</a></li><li class="list-item-bold"><a href="/fr-ca" class="d-flex align-items-center"><svg name="search" width="18" height="18" preserveAspectRatio="xMidYMid meet"><use xlink:href="#icon-search" href="#icon-search" aria-hidden="true"></use></svg>Rechercher</a></li></ul><ul class="list-mobile list-group"><li><a href="/fr-ca/support">Aide</a></li><li><a href="/fr-ca/about">À propos</a></li><li><ul class="list-mobile"><li class="list-item-unbordered"><span class="list-title" id="coverage-collapse">Couverture<i class="icon-right icon-dropdown"><svg name="angle-down" class="icon-right" width="15" height="15" preserveAspectRatio="xMidYMid meet"><use xlink:href="#icon-angle-down" href="#icon-angle-down" aria-hidden="true"></use></svg></i></span></li><li id="coverage-links" class="list-item-unbordered" style="display:none"><ul class="list-mobile list-nested"><li><a href="/fr-ca/sitemap/wr/0">Tous les itinéraires</a></li><li><a href="/fr-ca/sitemap/wc/0">Toutes les villes</a></li><li><a href="/fr-ca/sitemap/wp/0">Tous les partenaires</a></li><li><a href="/fr-ca/sitemap/ws/0">Toutes les gares d&#x27;autobus</a></li></ul></li></ul></li><li><ul class="list-mobile"><li class="list-item-unbordered"><span class="list-title" id="company-collapse">Compagnie<i class="icon-right icon-dropdown"><svg name="angle-down" class="icon-right" width="15" height="15" preserveAspectRatio="xMidYMid meet"><use xlink:href="#icon-angle-down" href="#icon-angle-down" aria-hidden="true"></use></svg></i></span></li><li id="company-links" class="list-item-unbordered" style="display:none"><ul class="list-mobile list-nested"><li><a href="https://www.busbud.com/blog/fr/" rel="nofollow">Blog</a></li><li><a href="/fr-ca/about/press" rel="nofollow">Médias</a></li><li><a href="/fr-ca/careers" rel="nofollow">Carrières</a></li><li><a href="https://www.busbud.com/partner/fr/">Produits d&#x27;affiliation</a></li><li><a href="https://www.busbud.com/partner/supply/">Partenaires de transport</a></li><li><a href="https://www.busbud.com/promo-mobile/">Application mobile</a></li></ul></li></ul></li></ul><ul class="list-mobile picker-wrapper"><li class="list-item-input-group"><span id="language-input" class="list-item-input">Français (Canada) (CA)<svg name="angle-down" class="icon-right" width="15" height="15" preserveAspectRatio="xMidYMid meet"><use xlink:href="#icon-angle-down" href="#icon-angle-down" aria-hidden="true"></use></svg></span></li><li class="list-item-input-group"><span id="currency-input" class="list-item-input">$ (CAD)<svg name="angle-down" class="icon-right" width="15" height="15" preserveAspectRatio="xMidYMid meet"><use xlink:href="#icon-angle-down" href="#icon-angle-down" aria-hidden="true"></use></svg></span></li></ul></div></div></div><div class="view-main is-visible" id="main-view"><div class="sticky-wrapper"><div class="header"><div class="icon icon-left"><a href="/fr-ca/activity"><span class="nav-badge nav-badge-mobile js-header-activity-badge" style="display:none" data-count-url="/activity/searches/count"></span><svg name="history" width="24" height="24" preserveAspectRatio="xMidYMid meet"><use xlink:href="#icon-history" href="#icon-history" aria-hidden="true"></use></svg></a></div><div class="row"><div class="column header-container"><a class="header-brand" href="/fr-ca"><img class="mobile-logo" alt="Busbud" aria-label="Busbud" title="Busbud" src="https://busbud.imgix.net/busbud-logos/busbud_logo.svg?auto=compress%2Cformat"/></a><ul class="nav nav-pills"><li class="nav-item"><a class="pill nav-link" href="/fr-ca/activity"><span class="nav-badge js-header-activity-badge" style="display:none" data-count-url="/activity/searches/count"></span><svg name="history" class="nav-icon" width="16" height="16" preserveAspectRatio="xMidYMid meet"><use xlink:href="#icon-history" href="#icon-history" aria-hidden="true"></use></svg>Mes recherches</a></li><li class="nav-item"><a class="pill nav-link" href="/fr-ca/about"><svg name="bus" class="nav-icon" width="16" height="16" preserveAspectRatio="xMidYMid meet"><use xlink:href="#icon-bus" href="#icon-bus" aria-hidden="true"></use></svg>À propos</a></li><li class="nav-item"><a class="pill nav-link" href="/fr-ca/support"><svg name="life-ring" class="nav-icon" width="16" height="16" preserveAspectRatio="xMidYMid meet"><use xlink:href="#icon-life-ring" href="#icon-life-ring" aria-hidden="true"></use></svg>Aide</a></li><li class="nav-item dropdown"><div class="account-header"><a id="js-header-signin-link" href="/fr-ca/account/signin" class="pill nav-link"><svg name="user" class="nav-icon" width="16" height="16" preserveAspectRatio="xMidYMid meet"><use xlink:href="#icon-user" href="#icon-user" aria-hidden="true"></use></svg>Se connecter</a></div></li></ul></div></div><div class="icon icon-right js-mobile-menu-button"><svg name="bars" label="Menu" width="24" height="24" preserveAspectRatio="xMidYMid meet"><use xlink:href="#icon-bars" href="#icon-bars" aria-label="Menu"></use></svg></div></div><div id="content"><div class="row"><div class="column medium-9 medium-push-3"><h1>Équipe</h1></div></div><div class="row"><div class="column medium-9 medium-push-3"><div id="team-page"><div class="card" id="travel"><header class="card-header"><h3>Les membres de l'équipe Busbud ont jusqu'à présent voyagé dans 107 pays!</h3><a class="permalink" href="#travel"><i class="bb-icon icon-chain"></i></a></header><div class="text-center"><img src="//busbud-pubweb-assets.global.ssl.fastly.net/images/about/57ae2d4.busbud-travel-map.png"></div><div class="card-content"><p class="text-right">Les pays en bleu foncé correspondent aux pays les plus visités.</p></div></div><p><p>Découvrez l&#39;équipe Busbud, toujours prête à explorer de nouveaux endroits, mais fièrement basée à Montréal! Nous accordons une grande importance à la diversité sous toutes ses formes : nous ne tenons aucunement compte de <a href="/fr-ca/about/diversity">l&#39;origine ethnique, du genre, de la religion, de l&#39;orientation sexuelle, des capacités, des points de vue, des antécédents ou des qualifications</a>. Nous serions très heureux de vous compter parmi nous! Consultez la <a href="/fr-ca/careers">page consacrée à nos offres d&#39;emploi</a> et n&#39;hésitez pas à nous poser des questions pour mieux nous connaître.</p>
15
- </p><div class="card" id="team"><header class="card-header"><h3>Membres de l'équipe<a class="permalink" href="#team"><i class="bb-icon icon-chain"></i></a></h3></header><div class="team-members"><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40528-2-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Louis-Philippe</h4><div class="member-title">CEO - Co-Founder</div><div class="member-birthplace">Originaire de : Montreal, Canada</div><div class="member-country-count">Pays visités : 47</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40527-1-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Michael</h4><div class="member-title">CTO - Co-founder</div><div class="member-birthplace">Originaire de : Montreal, Canada</div><div class="member-country-count">Pays visités : 18</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40526-1-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Frederic</h4><div class="member-title">CPO - Co-founder</div><div class="member-birthplace">Originaire de : Montreal, Canada</div><div class="member-country-count">Pays visités : 17</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40559-1-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Carl</h4><div class="member-title">Product Manager</div><div class="member-birthplace">Originaire de : Lawrence, Kansas, USA</div><div class="member-country-count">Pays visités : 41</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40551-1-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Daniel</h4><div class="member-title">Manager, Partnerships Latin America</div><div class="member-birthplace">Originaire de : Bogota, Colombia</div><div class="member-country-count">Pays visités : 20</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40554-1-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Marin</h4><div class="member-title">Director, Partnerships</div><div class="member-birthplace">Originaire de : Rennes, France</div><div class="member-country-count">Pays visités : 37</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40568-2-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Dustin</h4><div class="member-title">Developer</div><div class="member-birthplace">Originaire de : Montreal, Canada</div><div class="member-country-count">Pays visités : 3</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40578-1-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Liseth</h4><div class="member-title">Manager, Customer Experience</div><div class="member-birthplace">Originaire de : Caracas, Venezuela</div><div class="member-country-count">Pays visités : 18</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40580-2-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Nicolas</h4><div class="member-title">Developer</div><div class="member-birthplace">Originaire de : Paris, France</div><div class="member-country-count">Pays visités : 4</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40582-3-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Valérian</h4><div class="member-title">Developer</div><div class="member-birthplace">Originaire de : Grenoble, France</div><div class="member-country-count">Pays visités : 5</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40586-1-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Nicolas</h4><div class="member-title">Developer</div><div class="member-birthplace">Originaire de : Blois, France</div><div class="member-country-count">Pays visités : 11</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40587-2-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>David</h4><div class="member-title">VP Finance and Corporate Development</div><div class="member-birthplace">Originaire de : Perth-Andover, Canada</div><div class="member-country-count">Pays visités : 41</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40588-1-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Manon</h4><div class="member-title">Head of People &amp; Culture</div><div class="member-birthplace">Originaire de : Albi, France</div><div class="member-country-count">Pays visités : 25</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40589-4-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Noémie</h4><div class="member-title">Director, Marketing &amp; Communications</div><div class="member-birthplace">Originaire de : Quebec, Canada</div><div class="member-country-count">Pays visités : 13</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40591-2-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Pedro</h4><div class="member-title">Director, Partnerships Latin America </div><div class="member-birthplace">Originaire de : Merida, Mexico</div><div class="member-country-count">Pays visités : 18</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40593-3-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Camille</h4><div class="member-title">Developer</div><div class="member-birthplace">Originaire de : Clermont-Ferrand, France</div><div class="member-country-count">Pays visités : 11</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40599-1-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Sean</h4><div class="member-title">COO</div><div class="member-birthplace">Originaire de : Toronto, Canada</div><div class="member-country-count">Pays visités : 18</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40602-1-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Roxanne</h4><div class="member-title">Associate, QA</div><div class="member-birthplace">Originaire de : Montreal, Canada</div><div class="member-country-count">Pays visités : 12</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40606-1-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Guillaume</h4><div class="member-title">Associate, Customer Experience</div><div class="member-birthplace">Originaire de : Brest, France</div><div class="member-country-count">Pays visités : 17</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40608-2-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>David</h4><div class="member-title">Geography and QA Associate</div><div class="member-birthplace">Originaire de : Halifax, Canada</div><div class="member-country-count">Pays visités : 8</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40607-6-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Fabien</h4><div class="member-title">Performance Marketing Manager</div><div class="member-birthplace">Originaire de : Rennes, France</div><div class="member-country-count">Pays visités : 13</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40611-1-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Jessica</h4><div class="member-title">Controller</div><div class="member-birthplace">Originaire de : Montreal, Canada</div><div class="member-country-count">Pays visités : 9</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40613-2-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Martin</h4><div class="member-title">Developer</div><div class="member-birthplace">Originaire de : Quebec, Canada</div><div class="member-country-count">Pays visités : 3</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40616-1-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Eliot</h4><div class="member-title">Associate, Customer Experience</div><div class="member-birthplace">Originaire de : Paris, France</div><div class="member-country-count"></div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40617-2-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Benoit</h4><div class="member-title">Developer</div><div class="member-birthplace">Originaire de : Strasbourg, France</div><div class="member-country-count">Pays visités : 21</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40618-1-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Marie-Antoinette</h4><div class="member-title">Associate, Customer Experience (Part-time)</div><div class="member-birthplace">Originaire de : Montreal, Canada</div><div class="member-country-count">Pays visités : 7</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40619-1-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Cristhian</h4><div class="member-title">Manager, Connectivity</div><div class="member-birthplace">Originaire de : Mexico City</div><div class="member-country-count">Pays visités : 7</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40620-0-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Dunya</h4><div class="member-title">Performance Marketing Associate</div><div class="member-birthplace">Originaire de : Istanbul</div><div class="member-country-count">Pays visités : 14</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40621-0-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Victor</h4><div class="member-title">Developer</div><div class="member-birthplace">Originaire de : Kyiv</div><div class="member-country-count">Pays visités : 22</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40623-1-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Camila</h4><div class="member-title">Developer</div><div class="member-birthplace">Originaire de : Rio de Janeiro</div><div class="member-country-count">Pays visités : 17</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40624-0-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Ahmad</h4><div class="member-title">Developer</div><div class="member-birthplace"></div><div class="member-country-count">Pays visités : 2</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40627-1-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Doug</h4><div class="member-title">VP of Engineering</div><div class="member-birthplace">Originaire de : Edmonton, AB</div><div class="member-country-count">Pays visités : 8</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40622-0-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Nicolas</h4><div class="member-title">Developer</div><div class="member-birthplace">Originaire de : Fréjus, France</div><div class="member-country-count">Pays visités : 12</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40629-0-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Shewit</h4><div class="member-title">Associate, Customer Experience</div><div class="member-birthplace"></div><div class="member-country-count"></div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40630-0-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Valerie</h4><div class="member-title">Accountant</div><div class="member-birthplace">Originaire de : Laval</div><div class="member-country-count">Pays visités : 9</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40631-0-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Swann</h4><div class="member-title">Developer</div><div class="member-birthplace">Originaire de : Colmar</div><div class="member-country-count"></div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40625-0-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Michael</h4><div class="member-title">Developer</div><div class="member-birthplace">Originaire de : Saint Jean de Maurienne</div><div class="member-country-count">Pays visités : 19</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40632-0-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Oliver Luke</h4><div class="member-title">Associate, Customer Experience</div><div class="member-birthplace">Originaire de : Oxford, United Kingdom</div><div class="member-country-count">Pays visités : 25</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40633-0-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Francisca</h4><div class="member-title">Associate, Customer Experience</div><div class="member-birthplace">Originaire de : Viseu, Portugal</div><div class="member-country-count">Pays visités : 6</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40635-0-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Emilie</h4><div class="member-title">Associate, Customer Experience</div><div class="member-birthplace">Originaire de : Montreal</div><div class="member-country-count">Pays visités : 11</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40636-0-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Lesley</h4><div class="member-title">People and Culture, Intern</div><div class="member-birthplace">Originaire de : Montreal</div><div class="member-country-count">Pays visités : 6</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40637-0-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Simon</h4><div class="member-title">Intern, Marketing</div><div class="member-birthplace">Originaire de : Paris</div><div class="member-country-count">Pays visités : 1</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40614-1-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Rebecca</h4><div class="member-title">Intern, Developer</div><div class="member-birthplace">Originaire de : Quebec, Canada</div><div class="member-country-count">Pays visités : 6</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40638-0-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Alexander</h4><div class="member-title">Developer</div><div class="member-birthplace">Originaire de : Oxford</div><div class="member-country-count">Pays visités : 13</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40626-0-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Daniel</h4><div class="member-title">Developer</div><div class="member-birthplace">Originaire de : Mogi das Cruzes, Brazil</div><div class="member-country-count">Pays visités : 11</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40640-0-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Winnie</h4><div class="member-title">Product Designer</div><div class="member-birthplace">Originaire de : Lyon (8e)</div><div class="member-country-count">Pays visités : 6</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40643-0-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Kyria</h4><div class="member-title">Product copywriter</div><div class="member-birthplace">Originaire de : Corner Brook, Newfoundland</div><div class="member-country-count">Pays visités : 7</div></div></div></div><div class="member"><div class="img rounded needsclick"><div class="inset-shadow"></div><img src="https://2d536de778e1d60a4e70-a5861f0f8a0d8ccc66decc38d05815b4.ssl.cf1.rackcdn.com/photos/40642-0-1.jpg"></div><div class="member-description"><div class="arrow-wrapper"><h4>Nicole</h4><div class="member-title">Intern, Developer</div><div class="member-birthplace">Originaire de : Vancouver, BC</div><div class="member-country-count">Pays visités : 2</div></div></div></div></div></div></div></div><div class="column medium-3 medium-pull-9"><div class="secondary-nav main-heading card card-unpadded" id="about-nav"><div class="card-content"><ul class="list links"><li><a class="full" href="/fr-ca/about" title="À propos de nous"><strong class="left">À propos de nous</strong><div class="right"><svg class="angle-icon" height="18" width="18"><use xlink:href="#icon-angle-right" aria-hidden="true"></use></svg></div></a></li><li><a class="full" href="/fr-ca/about/toolbox" title="Boîte à outils"><strong class="left">Boîte à outils</strong><div class="right"><svg class="angle-icon" height="18" width="18"><use xlink:href="#icon-angle-right" aria-hidden="true"></use></svg></div></a></li><li><a class="full" href="/fr-ca/about/press" title="Médias"><strong class="left">Médias</strong><div class="right"><svg class="angle-icon" height="18" width="18"><use xlink:href="#icon-angle-right" aria-hidden="true"></use></svg></div></a></li><li><a class="full" href="/fr-ca/about/team" title="Équipe"><strong class="left">Équipe</strong><div class="right"><svg class="angle-icon" height="18" width="18"><use xlink:href="#icon-angle-right" aria-hidden="true"></use></svg></div></a></li><li><a class="full" href="/fr-ca/careers" title="Carrières"><strong class="left">Carrières</strong><div class="right"><svg class="angle-icon" height="18" width="18"><use xlink:href="#icon-angle-right" aria-hidden="true"></use></svg></div></a></li><li><a class="full" href="/fr-ca/about/diversity" title="Diversité"><strong class="left">Diversité</strong><div class="right"><svg class="angle-icon" height="18" width="18"><use xlink:href="#icon-angle-right" aria-hidden="true"></use></svg></div></a></li><li><a class="full" href="/fr-ca/about/partners" title="S'associer avec Busbud"><strong class="left">S'associer avec Busbud</strong><div class="right"><svg class="angle-icon" height="18" width="18"><use xlink:href="#icon-angle-right" aria-hidden="true"></use></svg></div></a></li><li><a class="full" href="/fr-ca/about/contact" title="Contact"><strong class="left">Contact</strong><div class="right"><svg class="angle-icon" height="18" width="18"><use xlink:href="#icon-angle-right" aria-hidden="true"></use></svg></div></a></li></ul></div></div></div></div></div></div><footer class="footer" id="main-footer"><div class="row footer-content"><div class="column small-6 medium-3"><ul class="list"><li><h4 class="list-header">Couverture</h4></li><li><a href="/fr-ca/sitemap/wr/0">Tous les itinéraires</a></li><li><a href="/fr-ca/sitemap/wc/0">Toutes les villes</a></li><li><a href="/fr-ca/sitemap/wp/0">Tous les partenaires</a></li><li><a href="/fr-ca/sitemap/ws/0">Toutes les gares d'autobus</a></li></ul></div><div class="column small-6 medium-3"><ul class="list"><li><h4 class="list-header">Compagnie</h4></li><li><a href="https://www.busbud.com/blog/fr/" rel="nofollow noopener">Blog</a></li><li><a href="https://www.busbud.com/fr-ca/about">À propos</a></li><li><a href="https://www.busbud.com/fr-ca/about/press" rel="nofollow">Médias</a></li><li><a href="https://www.busbud.com/fr-ca/careers" rel="nofollow">Carrières</a></li><li><a href="https://www.busbud.com/partner/fr/" rel="noopener">Produits d'affiliation</a></li><li><a href="https://www.busbud.com/partner/supply/" rel="noopener">Partenaires de transport</a></li><li><a href="https://www.busbud.com/promo-mobile/">Application mobile</a></li></ul></div><div class="column small-6 medium-3"><ul class="list"><li><h4 class="list-header">Service à la clientèle</h4></li><li><a href="https://help.busbud.com/hc/fr" rel="noopener">Aide</a></li><li><a href="/fr-ca/support">Contact</a></li><li><a href="https://www.busbud.com/fr-ca/about/tos" rel="nofollow">Conditions d'utilisation</a></li><li><a href="https://www.busbud.com/fr-ca/about/privacy" rel="nofollow">Confidentialité</a></li></ul></div><div class="column small-6 medium-3"><h4 class="list-header">Communauté</h4><ul class="inline-list social-links"><li><a class="social facebook" href="https://facebook.com/busbud" title="Facebook" target="_blank" rel="nofollow noopener"><svg height="24" width="24"><use xlink:href="#icon-facebook" aria-hidden="true"></use></svg></a></li><li><a class="social twitter" href="https://twitter.com/busbud" title="Twitter" target="_blank" rel="nofollow noopener"><svg height="24" width="24"><use xlink:href="#icon-twitter" aria-hidden="true"></use></svg></a></li><li><a class="social instagram" href="https://www.instagram.com/busbud_com/" title="Instagram" target="_blank" rel="nofollow noopener"><svg height="24" width="24"><use xlink:href="#icon-instagram" aria-hidden="true"></use></svg></a></li></ul><script>var BB = BB || {};
16
- BB.setLocation = function(target) {
17
- window.location.href = target.value;
18
- };
19
- </script><div id="language-select"><div class="select-form-group"><select class="select-form-control" onchange="BB.setLocation(this)" aria-label="Français (Canada)"><option value="/de/about/team">Deutsch</option><option value="/en/about/team">English</option><option value="/en-ca/about/team">English (Canada)</option><option value="/en-gb/about/team">English (UK)</option><option value="/es/about/team">Español (España)</option><option value="/es-419/about/team">Español (Latinoamérica)</option><option value="/es-mx/about/team">Español (Mexico)</option><option value="/fr/about/team">Français</option><option selected disabled value="/fr-ca/about/team">Français (Canada)</option><option value="/it/about/team">Italiano</option><option value="/nl/about/team">Nederlands</option><option value="/pl/about/team">Polski</option><option value="/pt/about/team">Português</option><option value="/sv/about/team">Svenska</option><option value="/tr/about/team">Türkçe</option><option value="/zh/about/team">中文简体</option></select><span class="select-dropdown-icon text-sm"><svg width="14" height="14"><use xlink:href="#icon-angle-down" aria-hidden="true"></use></svg></span></div></div><div id="currency-select"><div class="select-form-group"><select class="select-form-control" onchange="BB.setLocation(this)" aria-label="$ CAD"><option value="/fr-ca/about/team?currency=USD">$ USD</option><option value="/fr-ca/about/team?currency=EUR">€ EUR</option><option value="/fr-ca/about/team?currency=GBP">£ GBP</option><option selected disabled value="/fr-ca/about/team?currency=CAD">$ CAD</option><option value="/fr-ca/about/team?currency=AUD">$ AUD</option><option value="/fr-ca/about/team?currency=BRL">R$ BRL</option><option value="/fr-ca/about/team?currency=MXN">$ MXN</option><option value="/fr-ca/about/team?currency=ARS">$ ARS</option><option value="/fr-ca/about/team?currency=INR">₹ INR</option><option value="/fr-ca/about/team?currency=CNY">¥ CNY</option><option value="/fr-ca/about/team?currency=JPY">¥ JPY</option><option value="/fr-ca/about/team?currency=RUB">р RUB</option><option value="/fr-ca/about/team?currency=KRW">₩ KRW</option><option value="/fr-ca/about/team?currency=PEN">S/ PEN</option><option value="/fr-ca/about/team?currency=PLN">zł PLN</option><option value="/fr-ca/about/team?currency=TRY">₺ TRY</option><option value="/fr-ca/about/team?currency=SEK">kr SEK</option><option value="/fr-ca/about/team?currency=CZK">Kč CZK</option><option value="/fr-ca/about/team?currency=NZD">$ NZD</option><option value="/fr-ca/about/team?currency=MAD">dh MAD</option><option value="/fr-ca/about/team?currency=ZAR">R ZAR</option><option value="/fr-ca/about/team?currency=CLP">$ CLP</option><option value="/fr-ca/about/team?currency=COP">$ COP</option><option value="/fr-ca/about/team?currency=CHF">CHF CHF</option><option value="/fr-ca/about/team?currency=DKK">kr DKK</option><option value="/fr-ca/about/team?currency=ILS">₪ ILS</option><option value="/fr-ca/about/team?currency=NOK">kr NOK</option><option value="/fr-ca/about/team?currency=SGD">S$ SGD</option><option value="/fr-ca/about/team?currency=HKD">HK$ HKD</option><option value="/fr-ca/about/team?currency=THB">฿ THB</option></select><span class="select-dropdown-icon text-sm"><svg width="14" height="14"><use xlink:href="#icon-angle-down" aria-hidden="true"></use></svg></span></div></div></div></div></footer><footer class="footer" id="mobile-footer"><div class="row"><a href="https://www.busbud.com/fr-ca/support" rel="noopener">Foire aux questions</a><span class="separator">|</span><a href="https://www.busbud.com/fr-ca/about/tos" rel="nofollow">Conditions d'utilisation</a><span class="separator">|</span><a href="https://www.busbud.com/fr-ca/about/privacy" rel="nofollow">Confidentialité</a></div><div class="row"><ul class="inline-list social-links"><li><a class="social facebook" href="https://facebook.com/busbud" title="Facebook" target="_blank" rel="nofollow noopener"><svg height="24" width="24"><use xlink:href="#icon-facebook" aria-hidden="true"></use></svg></a></li><li><a class="social twitter" href="https://twitter.com/busbud" title="Twitter" target="_blank" rel="nofollow noopener"><svg vheight="24" width="24"><use xlink:href="#icon-twitter" aria-hidden="true"></use></svg></a></li><li><a class="social instagram" href="https://www.instagram.com/busbud_com/" title="Instagram" target="_blank" rel="nofollow noopener"><svg height="24" width="24"><use xlink:href="#icon-instagram" aria-hidden="true"></use></svg></a></li></ul></div></footer><div class="footer-addendum"><a class="text-secondary" href="https://builtinmtl.com" target="_blank" rel="nofollow noopener">Built in Montreal</a> | © 2018 Busbud, Inc. | Tous droits réservés</div><noscript><div>Veuillez activer Javascript pour un affichage correct du site.</div></noscript></div><div id="fb-root"></div><!-- @split-content--><script data-id="bb">var BB = BB || {};
20
- BB.inst = {
21
- G:'nACrHxkCTGqdkRFUrHgBkQ',
22
- I:'',
23
- S:'idgf',
24
- session_id:'nACrHxkCTGqdkRFUrHgBkQ-idgf',
25
- request_id:'2018080917457c01e72efbbc30a7b6b188f9b38bcb0bae59d48fe80181ba84e791720adba00a'
26
- };
27
- BB.NAPI_URL = '//napi.busbud.com';
28
-
29
- // Use /napi proxy if browser doesn't support CORS
30
- if (window.XDomainRequest) {
31
- BB.NAPI_URL = '/napi';
32
- }
33
-
34
- BB.NAPI_AUTH_TOKEN = 'GUEST_ba-8Ee5YSLCO9Tv9_LKHsg';
35
- BB.config = {
36
- lang: 'fr-ca',
37
- locale: 'fr-ca',
38
- currency: {
39
- code: 'CAD',
40
- rules: {"symbol":"$","symbol_left":1,"space":0,"cents":1,"commas":0,"label":"Canadian Dollar"}
41
- },
42
- csrf: '',
43
- env: 'production',
44
- release: 'edc4537315162c5905b2e7a5b42fa971db4c0070',
45
- sentry: 'https://194d84ff397748b694ce874dc87672ad@app.getsentry.com/23009',
46
- CHECKOUTCOM_BASE_URL: 'https://api2.checkout.com/v2',
47
- CHECKOUTCOM_PUBLIC_KEY: 'pk_a917ff84-ed5a-48fe-bf2b-a09a5213c014',
48
- APPLE_MERCHANT_IDENTIFIER: 'merchant.com.busbud.productionpubweb',
49
- APPLE_PAY_TEST_CARD: '',
50
- NAPI_LOG_LEVEL: null
51
- };
52
- BB.user = {
53
- cart: 'nACrHxkCTGqdkRFUrHgBkQ'
54
- };
55
- BB.features = {"DELAYED_BOOKING_ENABLED":true,"CHECKOUTCOM_TOKEN_ENABLED":false,"TRAVEL_REVIEWS_ENABLED":true,"OUTAGE_NOTIFICATIONS_ENABLED":false,"ACCOUNT_PURCHASE_ENABLED":true,"CONTENTFUL_PERF_ENABLED":false,"NO_GOOGLE_AUTOCOMPLETE":false,"GEOCODING_SEARCH_PLACES":false,"INSURANCE_IN_CHECKOUT_ENABLED":true,"INTERCONNECTION_FALLBACK_ENABLED":true,"XP_LOCALIZED_SEARCH_DATE":true,"MULTI_CITY_ENABLED":true,"MULTI_CITY_REGIONS":{"DC":{"dqchwp":"alexandria","dqchbz":"fairfax","dqchet":"springfield","dqcj3c":"vienna","dqcjjt":"arlington","dqcjqb":"washington","dqcjv1":"bethesda","dqcjz4":"silver-spring","dqcmc7":"college-park"},"MONTREAL":{"f25d9g":"dorval","f25dvk":"montreal","f25ep0":"longueuil","f25eup":"terrebonne","f25fgp":"st-bruno-de-montarville","f25fs3":"chambly","f25gh3":"saint-basile-le-grand","f25gnm":"saint-hilaire","f25u0x":"repentigny","f2h52t":"sainte-madeleine","f25fcd":"Saint-Hubert","f25kkh":"Saint-Jérôme","f25e5p":"laval"},"NEW_YORK_CITY":{"dr5r8p":"Newark","dr5reg":"New York City","dr78c0":"New Rochelle","dr7935":"White Plains","dr5x9y":"Queens Village","dr7349":"Paramus","dr724f":"Secaucus","dr5rgq":"Union City","dr72kv":"Fort Lee"},"VANCOUVER":{"c28xe4":"Delta","c28rwn":"Richmond","c28xu3":"Surrey","c2b2nm":"Vancouver","c2b8ms":"Coquitlam"},"TORONTO":{"dpxr69":"Oakville","dpz2wn":"North York","dpz88g":"Toronto","dpxrgx":"Mississauga","dpzceu":"Whitby","dpz9h2":"Scarborough"},"BOSTON":{"drt2yz":"Boston","drt3jc":"Cambridge","drt2ge":"newton","drt3pp":"everett","drt3pw":"chelsea","drt695":"lowell"},"OTTAWA":{"f244tq":"Gatineau","f244m6":"Ottawa"},"PARIS":{"u09yp0":"Chessy","u09ye1":"Mitry-Mory","u09wc8":"Herblay","u09w5h":"Courbevoie","u09tyb":"Charenton-le-Pont","u09tyz":"Bagnolet","u09t8e":"Versailles","u09tvm":"Paris","u09v8w":"Champigny-sur-Marne","ub9chp":"Orly","u09yp3":"Coupvray","u09wes":"Ermont","u09twd":"Vitry-sur-Seine","u09tnp":"Orly","u09wmy":"Saint-Denis","u09w7q":"Argenteuil","u09t5q":"Massy","u09yc2":"Roissy-en-France","u09y4c":"Chelles"}},"NEW_PASSENGER_QUESTIONS_ENABLED":true,"BUSBUD_FEE_ENABLED":false,"BUSBUD_FEE_VARIANT":0,"PARTNER_PAGE_MAP_ENABLED":false,"RECENT_SEARCHES_ENABLED":true,"RECENT_SEARCHES_BADGE":true,"RESOURCES_PRELOAD_ENABLED":true,"THANK_YOU_JWT_ENABLED":false,"UNIFIED_CHECKOUT":false,"TRAVEL_REVIEWS_LIMITS_ENABLED":true,"TRAVEL_REVIEWS_MODAL_LIMIT_PER_OPERATOR_LANG":20,"UNIFIED_RESULTS":false};
56
- BB.device = {"type":"desktop","vendor":"generic","user_agent_quality":"normal","is_mobile":false,"is_tablet":false,"is_desktop":true,"is_bot":false,"is_internetexplorer":false};
57
- BB.whitelabel = '';
58
- BB.whitelabel_settings = {};
59
- BB.experiments = {"outage_notifications":"control","account_purchase":"control","contentful_perf":"control","co_no_google_autocomplete":"control","geocoding_search_places":"control","xp_insurance_in_checkout":"1","interconnection_fallback":"control","localized_search_date":"control","multi_city":"1","new_passenger_questions":"control","busbud_fee":"control","partner_page_without_map":"control","recent_searches":"control","resources_preload_enabled":"control","thank_you_jwt":"control","unified_checkout":"control","travel_reviews_limits":"control","unified_results":"control"};
60
- BB.analytics = {"config":{"locale":"fr-ca","language":"fr-ca","currency":"CAD","environment":"production","app":"web","request_id":"2018080917457c01e72efbbc30a7b6b188f9b38bcb0bae59d48fe80181ba84e791720adba00a","tracking":true,"whitelabel":false,"amplitude_enabled":true,"amplitude_key":"b735e7d91ade5bff2527f751a24cbb28","amplitude_loaded_by_pubweb":true},"page":{"name":"about","site_section":"about","about_page":"team","path":"\u002Fabout\u002Fteam","details":{"about_page":"team"},"previous_site_section":"about"},"user":{"logged_in":false,"user_id":null,"client_id":"nACrHxkCTGqdkRFUrHgBkQ","user_agent_quality":"normal"},"section_properties":{},"connection":{}};</script><script data-id="icon">//- AJAX the external SVG file to prevent being blocked by CORS
61
- //- Issue: https://bugs.chromium.org/p/chromium/issues/detail?id=470601
62
- //- Solution: https://css-tricks.com/ajaxing-svg-sprite/
63
- var ajax = new XMLHttpRequest();
64
- ajax.open("GET", '//busbud-pubweb-assets.global.ssl.fastly.net/icons/0dbe981.icons-defs.svg', true);
65
- ajax.send();
66
- ajax.onload = function(e) {
67
- var icons = document.createElement("div");
68
- icons.innerHTML = ajax.responseText;
69
- icons.style.display = "none";
70
- document.body.insertBefore(icons, document.body.childNodes[0]);
71
- }</script><script data-id="tracking">var gtmLayer = gtmLayer || [];</script><script data-id="amplitude">/*eslint-disable*/
72
- (function(e,t){var n=e.amplitude||{_q:[],_iq:{}};var r=t.createElement("script")
73
- ;r.type="text/javascript";r.async=true
74
- ;r.src="https://cdn.amplitude.com/libs/amplitude-4.2.1-min.gz.js"
75
- ;r.onload=function(){if(e.amplitude.runQueuedFunctions){
76
- e.amplitude.runQueuedFunctions()}else{
77
- console.log("[Amplitude] Error: could not load SDK")}}
78
- ;var i=t.getElementsByTagName("script")[0];i.parentNode.insertBefore(r,i)
79
- ;function s(e,t){e.prototype[t]=function(){
80
- this._q.push([t].concat(Array.prototype.slice.call(arguments,0)));return this}}
81
- var o=function(){this._q=[];return this}
82
- ;var a=["add","append","clearAll","prepend","set","setOnce","unset"]
83
- ;for(var u=0;u<a.length;u++){s(o,a[u])}n.Identify=o;var c=function(){this._q=[]
84
- ;return this}
85
- ;var l=["setProductId","setQuantity","setPrice","setRevenueType","setEventProperties"]
86
- ;for(var p=0;p<l.length;p++){s(c,l[p])}n.Revenue=c
87
- ;var d=["init","logEvent","logRevenue","setUserId","setUserProperties","setOptOut","setVersionName","setDomain","setDeviceId","setGlobalUserProperties","identify","clearUserProperties","setGroup","logRevenueV2","regenerateDeviceId","logEventWithTimestamp","logEventWithGroups","setSessionId","resetSessionId"]
88
- ;function v(e){function t(t){e[t]=function(){
89
- e._q.push([t].concat(Array.prototype.slice.call(arguments,0)))}}
90
- for(var n=0;n<d.length;n++){t(d[n])}}v(n);n.getInstance=function(e){
91
- e=(!e||e.length===0?"$default_instance":e).toLowerCase()
92
- ;if(!n._iq.hasOwnProperty(e)){n._iq[e]={_q:[]};v(n._iq[e])}return n._iq[e]}
93
- ;e.amplitude=n})(window,document);
94
-
95
- amplitude.getInstance().init('b735e7d91ade5bff2527f751a24cbb28', null, {
96
- saveEvents: true,
97
- includeUtm: true,
98
- includeReferrer: true
99
- });</script><script>!function(e){var t={};function i(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{}};return e[n].call(s.exports,s,s.exports,i),s.l=!0,s.exports}i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)i.d(n,s,function(t){return e[t]}.bind(null,s));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=687)}({5:function(e,t){var i;i=function(){return this}();try{i=i||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(i=window)}e.exports=i},686:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t}}();var s=Array.prototype,a=function(){function e(t,i,n,s,a,c,r,o){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.services=["ga","mixpanel","customerio"],this._has_native_object_assign="function"==typeof Object.assign,this.gtmLayer=t,this.analytics=i,this.performance=s,this.getAmplitude=a||function(){},this.mouseflow=c,this.connection=r,this.device_screen=o,this.experiments=Object.keys(n).reduce(function(e,t){var i=n[t];return e[t]={variation:i},e},{}),this.analytics.config=this.analytics.config||{},this.analytics.page={name:this.analytics.page.name,path:this.analytics.page.path||window.location.pathname,site_section:this.analytics.page.site_section||"none",previous_site_section:this.analytics.page.previous_site_section||"none",details:this.analytics.page.details||{},content:this.analytics.page.content||{}},this.analytics.connection=this.analytics.connection||{},this.analytics.device_screen=this.analytics.device_screen||{},this.section_properties=this.analytics.section_properties,this.state={}}return n(e,[{key:"init",value:function(){var e=this._assign({},this.analytics.config,this.analytics.page,{content:null}),t={operator:this.analytics.page.details.operator,source:this.analytics.page.details.partner_source,origin_country:this.section_properties.search_origin_country,route:this.section_properties.search_route,trip_type:this.section_properties.search_trip_type,direction:this.analytics.page.details.results_direction,discount_code:this.section_properties.search_discount_code},i={ecommerce:this.analytics.ecommerce||{},user:this.analytics.user||{},experiments:this.experiments||{},section_properties:this.section_properties};this.gtmLayer.push(this._assign({},e,t,i)),this.connection&&this.connection.addEventListener&&(this.connection.addEventListener("change",this._saveNetworkInfo.bind(this)),this._saveNetworkInfo()),this._saveDeviceScreenInfo(),this.analytics.config.amplitude_enabled&&this.amplitudeInit()}},{key:"track",value:function(e,t,i){e.services=t||this.services;var n=this._assign({},e,{ecommerce:null}),s=e.ecommerce||this.analytics.ecommerce||{},a=e.user||this.analytics.user||{},c=e.experiments||this.experiments||{};this.gtmLayer.push({event:e.trigger||"Manual event",bb_event:n,ecommerce:s,user:a,experiments:c}),this.gtmLayer.push({bb_event:null}),this.analytics.config.amplitude_enabled&&this.amplitudeEvent(this.getAmplitude(),{event_properties:n,user_properties:a,purchased_products:s.purchase?s.purchase.products:void 0,experiments:c,site_section:this.analytics.page.site_section,site_language:this.analytics.config.language,site_currency:this.analytics.config.currency,site_app:this.analytics.config.app}),i&&i()}},{key:"trackLink",value:function(e,t,i){var n=i.getAttribute("href");this.track(e),n&&"_blank"!==i.getAttribute("target")&&(t.preventDefault(),setTimeout(function(){window.location.href=n},300))}},{key:"page",value:function(e,t,i){e.services=t||this.services,this.analytics.page.name=e.name,this.analytics.page.path=e.path;var n=this._assign({},e,{ecommerce:null}),s=e.user||this.analytics.user||{},a=e.experiments||this.experiments||{};this.gtmLayer.push({event:e.trigger||"Virtual pageview",path:e.path||this.analytics.page.path,bb_event:n,ecommerce:e.ecommerce||this.analytics.ecommerce||{},user:s,experiments:a}),this.gtmLayer.push({bb_event:null}),this.analytics.config.amplitude_enabled&&this.amplitudePageview(this.getAmplitude(),{page_properties:this.analytics.page.details,event_properties:n,user_properties:s,experiments:a,site_section:this.analytics.page.site_section,site_language:this.analytics.config.language,site_currency:this.analytics.config.currency,site_app:this.analytics.config.app}),i&&i()}},{key:"identify",value:function(e,t){this.analytics.user.user_id=e.user_id,this.analytics.user.locale=e.locale,this._setCookie("I",e.user_id,730,"/"),this.gtmLayer.push({event:"Identification",user:{user_id:e.user_id}}),this.analytics.config.amplitude_enabled&&this.amplitudeIdentify(this.getAmplitude(),{user_id:e.user_id,user_properties:e}),t&&t()}},{key:"push",value:function(e){this.gtmLayer.push(e);var t=e.section_properties;t&&(this.section_properties=this._assign(this.section_properties,t))}},{key:"amplitudeEvent",value:function(e,t){if(e){var i=t.event_properties||{},n=t.purchased_products,s=i.details||{};if(n){var a=[],c=[],r=[];n.forEach(function(e){a.push(e.name),c.push(e.brand),r.push(e.variant)}),s.purchased_sources=c,s.purchased_routes=a,s.purchased_operators=r,n.length>0&&(s.purchased_tickets=n.length*n[0].quantity)}var o=i.action,u={site_section:this.analytics.page.site_section,previous_site_section:this.analytics.page.previous_site_section,locale:this.analytics.config.locale,language:this.analytics.config.locale,currency:this.analytics.config.currency,app:this.analytics.config.app};s=this._assign(u,this.section_properties,this._getExperimentProperties(),s,this.analytics.connection,{device_screen:this.analytics.device_screen}),e.getInstance().logEvent(o,s)}}},{key:"amplitudeIdentify",value:function(e,t){if(e){var i=t.user_id,n=this._assign({},this._omit(t.user_properties||{},["client_id","user_agent_quality","currency","logged_in","phone"]));n.logged_in&&delete n.logged_in;var s=e&&e.getInstance&&e.getInstance();s&&(s.setUserId(i),s.setUserProperties(n))}}},{key:"amplitudeIdentifyOnLanding",value:function(e,t){if(e){var i=t.site_section;if(this.analytics&&this.analytics.page.name){var n=(new e.Identify).set("landing_site_section",i);e.getInstance().identify(n)}}}},{key:"amplitudePageview",value:function(e,t){if(e&&this.analytics.page.name){var i=t.page_properties||{},n=t.event_properties||{},s=this._assign({},i,n.details),a=this.analytics.page.name+"_pageview";s=this._assign({site_section:this.analytics.page.site_section,previous_site_section:this.analytics.page.previous_site_section,locale:this.analytics.config.locale,language:this.analytics.config.locale,currency:this.analytics.config.currency,app:this.analytics.config.app,user_agent_quality:this.analytics.user.user_agent_quality},s,this.section_properties,this._getExperimentProperties()),e.getInstance().logEvent(a,s)}}},{key:"amplitudeInit",value:function(){this.amplitudePageview(this.getAmplitude(),{page_properties:this.analytics.page.details,event_properties:{},user_properties:this.analytics.user,experiments:this.experiments,site_section:this.analytics.page.site_section,site_language:this.analytics.config.language,site_currency:this.analytics.config.currency,site_app:this.analytics.config.app}),this.amplitudeIdentifyOnLanding(this.getAmplitude(),{site_section:this.analytics.page.site_section})}},{key:"cioEvent",value:function(e,t){}},{key:"cioIdentify",value:function(e,t){}},{key:"mouseflowTag",value:function(e){this.mouseflow&&this.mouseflow.push(["tag",e])}},{key:"_getExperimentProperties",value:function(){var e=this;return Object.keys(this.experiments).reduce(function(t,i){return t["xp_"+i]=e.experiments[i].variation,t},{})}},{key:"_saveNetworkInfo",value:function(){this.analytics.connection.connection_type=this.connection.type,this.analytics.connection.connection_downlink=this.connection.downlink,this.analytics.connection.connection_rtt=this.connection.rtt,this.analytics.connection.connection_downlink_max=this.connection.downlinkMax,this.analytics.connection.connection_effective_type=this.connection.effectiveType,this.analytics.connection.connection_save_data=this.connection.saveData}},{key:"_saveDeviceScreenInfo",value:function(){this.device_screen&&(this.analytics.device_screen.availHeight=this.device_screen.availHeight,this.analytics.device_screen.availWidth=this.device_screen.availWidth,this.analytics.device_screen.height=this.device_screen.height,this.analytics.device_screen.width=this.device_screen.width)}},{key:"_assign",value:function(e){if(this._has_native_object_assign)return Object.assign.apply(Object,arguments);if(void 0===e||null===e)throw new TypeError("Cannot convert undefined or null to object");for(var t=Object(e),i=1;i<arguments.length;i++){var n=arguments[i];if(void 0!==n&&null!==n)for(var s in n)n.hasOwnProperty(s)&&(t[s]=n[s])}return t}},{key:"_omit",value:function(e){var t={},i=s.concat.apply(s,s.slice.call(arguments,1));for(var n in e)-1===i.indexOf(n)&&(t[n]=e[n]);return t}},{key:"_setCookie",value:function(e,t,i,n,s,a){var c=void 0;if(i){var r=new Date;r.setTime(r.getTime()+24*i*60*60*1e3),c=r.toGMTString()}n||(n="/"),s||-1!==window.location.host.indexOf("busbud.com")&&(s=".busbud.com");var o=e+"="+escape(t);o+=c?";expires="+c:"",o+=n?";path="+n:"",o+=s?";domain="+s:"",o+=a?";secure":"",document.cookie=o}}]),e}();t.default=a,e.exports=t.default},687:function(e,t,i){"use strict";(function(e){var t=function(e){return e&&e.__esModule?e:{default:e}}(i(686));window._mfq=window._mfq||[];var n=new t.default(window.gtmLayer,window.BB.analytics,window.BB.experiments,window.performance,function(){return window.amplitude},window._mfq,window.navigator&&window.navigator.connection,window.screen);e.tracker=n,e.GTMtracker=n,n.init()}).call(this,i(5))}});</script><script src="//busbud-pubweb-assets.global.ssl.fastly.net/js/a72fe9c.vendor-all-bundle.js"></script><script src="//busbud-pubweb-assets.global.ssl.fastly.net/js/884b4a6.core-bundle.js"></script><script src="//busbud-pubweb-assets.global.ssl.fastly.net/js/9b04480.i18n-fr-ca-bundle.js"></script><!-- Riskified beacon to track user behavior throughout site. Builds a profile--><!-- on user that helps approve or deny purchases.--><script data-id="riskified">(function(){function a(){var a="//beacon.riskified.com?shop=busbud.com&sid="+"nACrHxkCTGqdkRFUrHgBkQ-idgf",
100
- b=document.createElement("script"),c=document.getElementsByTagName("script")[0];
101
- b.type="text/javascript";b.async=!0;b.src=a;c.parentNode.insertBefore(b,c)}
102
- window.attachEvent?window.attachEvent("onload",a):window.addEventListener("load",a,!1)})();</script><script data-id="sift-science">var _sift=window._sift=window._sift || [];
103
- _sift.push(['_setAccount','626c43c9ad']);_sift.push(['_setUserId','']);
104
- _sift.push(['_setSessionId','nACrHxkCTGqdkRFUrHgBkQ-idgf']);_sift.push(['_trackPageview']);
105
- (function(){function ls(){var e=document.createElement('script');e.src='https://cdn.siftscience.com/s.js';
106
- document.body.appendChild(e);}if(window.attachEvent){window.attachEvent('onload', ls);}else{
107
- window.addEventListener('load',ls,false);}})();</script><script>$(function(){
108
-
109
- // loading image fouc
110
- $('.member').each(function(i, img){
111
- var delay = 50 * i;
112
- setTimeout(function(){
113
- $(img).css({
114
- opacity: 1
115
- });
116
- }, delay)
117
- });
118
- });
119
- </script><noscript data-id="gtm"><iframe src="//www.googletagmanager.com/ns.html?id=GTM-NRH5H3" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript><script data-id="gtm">(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
120
- new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
121
- j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
122
- '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
123
- })(window,document,'script','gtmLayer','GTM-NRH5H3');</script></body></html><!-- /fr-ca/about/team -->
@@ -1,234 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.ParseClass = exports.ParseObject = exports.ParseObjectInterface = undefined;
7
- exports.loadClass = loadClass;
8
-
9
- var _graphql = require('graphql');
10
-
11
- var _types = require('./types');
12
-
13
- function graphQLField(fieldName, field) {
14
- const gQLType = (0, _types.type)(fieldName, field);
15
- if (!gQLType) {
16
- /* eslint-disable */
17
- console.log('no type: ', fieldName, field);
18
- return;
19
- }
20
- const fieldType = gQLType === _types.GraphQLPointer ? `Pointer<${field.targetClass}>` : `${field.type}`;
21
- return {
22
- name: fieldName,
23
- type: gQLType,
24
- description: `Accessor for ${fieldName} (${fieldType})`
25
- };
26
- }
27
-
28
- function graphQLInputField(fieldName, field) {
29
- const gQLType = (0, _types.inputType)(fieldName, field);
30
- if (!gQLType) {
31
- return;
32
- }
33
- const fieldType = gQLType === _types.GraphQLPointer ? `Pointer<${field.targetClass}>` : `${field.type}`;
34
- return {
35
- name: fieldName,
36
- type: gQLType,
37
- description: `Setter for ${fieldName} (${fieldType})`
38
- };
39
- }
40
-
41
- function graphQLQueryField(fieldName, field) {
42
- const gQLType = (0, _types.queryType)(fieldName, field);
43
- if (!gQLType) {
44
- return;
45
- }
46
- return {
47
- name: fieldName,
48
- type: gQLType,
49
- description: `Query for ${fieldName} (${field.type})`
50
- };
51
- }
52
-
53
- const ParseClassCache = {};
54
-
55
- function loadClass(className, schema) {
56
- if (!ParseClassCache[className]) {
57
- const c = new ParseClass(className, schema);
58
- const objectType = c.graphQLObjectType();
59
- const inputType = c.graphQLInputObjectType();
60
- const updateType = c.graphQLUpdateInputObjectType();
61
- const queryType = c.graphQLQueryInputObjectType();
62
- ParseClassCache[className] = { objectType, inputType, updateType, queryType, class: c };
63
- }
64
- return ParseClassCache[className];
65
- }
66
-
67
- const reservedFieldNames = ['objectId', 'createdAt', 'updatedAt'];
68
-
69
- const ParseObjectInterface = exports.ParseObjectInterface = new _graphql.GraphQLInterfaceType({
70
- name: 'ObjectType',
71
- fields: {
72
- objectId: {
73
- type: (0, _types.type)('objectId')
74
- },
75
- createdAt: {
76
- type: (0, _types.type)(null, { type: 'Date' })
77
- },
78
- updatedAt: {
79
- type: (0, _types.type)(null, { type: 'Date' })
80
- },
81
- ACL: {
82
- type: (0, _types.type)(null, { type: 'ACL' })
83
- }
84
- }
85
- });
86
-
87
- const ParseObject = exports.ParseObject = new _graphql.GraphQLObjectType({
88
- name: 'Object',
89
- interfaces: [ParseObjectInterface],
90
- fields: {
91
- objectId: {
92
- type: (0, _types.type)('objectId')
93
- },
94
- createdAt: {
95
- type: (0, _types.type)(null, { type: 'Date' })
96
- },
97
- updatedAt: {
98
- type: (0, _types.type)(null, { type: 'Date' })
99
- },
100
- ACL: {
101
- type: (0, _types.type)(null, { type: 'ACL' })
102
- },
103
- data: {
104
- type: _types.GraphQLJSONObject
105
- }
106
- },
107
- isTypeOf: (args, context, info) => {
108
- // Use that type when impossible to map to a Schema type
109
- return typeof info.schema._typeMap[args.className] === 'undefined';
110
- },
111
- resolve: () => {
112
- /* eslint-disable */
113
- console.log('RESOLVE CALLED!');
114
- /* eslint-enable */
115
- }
116
- });
117
-
118
- class ParseClass {
119
-
120
- constructor(className, schema) {
121
- this.className = className;
122
- this.schema = schema;
123
- this.class = this.schema[className];
124
- }
125
-
126
- graphQLConfig() {
127
- const className = this.className;
128
- return {
129
- name: className,
130
- description: `Parse Class ${className}`,
131
- interfaces: [ParseObjectInterface],
132
- fields: () => {
133
- return this.buildFields(graphQLField);
134
- },
135
- resolve: () => {
136
- return;
137
- },
138
- isTypeOf: function (a) {
139
- return a.className == className;
140
- }
141
- };
142
- }
143
-
144
- buildFields(mapper, filterReserved, defaultValues = {}) {
145
- const fields = this.class.fields;
146
- return Object.keys(fields).reduce((memo, fieldName) => {
147
- if (filterReserved && reservedFieldNames.indexOf(fieldName) >= 0) {
148
- return memo;
149
- }
150
- const field = fields[fieldName];
151
- const gQLField = mapper(fieldName, field);
152
- if (!gQLField) {
153
- if (field.type == 'Pointer') {
154
- memo[fieldName] = {
155
- type: loadClass(field.targetClass, this.schema).objectType
156
- };
157
- }
158
- return memo;
159
- }
160
- memo[fieldName] = gQLField;
161
- return memo;
162
- }, defaultValues);
163
- }
164
-
165
- graphQLInputConfig() {
166
- const className = this.className;
167
- return {
168
- name: className + 'Input',
169
- description: `Parse Class ${className} Input`,
170
- fields: () => {
171
- return this.buildFields(graphQLInputField, true);
172
- },
173
- resolve: this.get.bind(this),
174
- isTypeOf: function (input) {
175
- return input.className == className;
176
- }
177
- };
178
- }
179
-
180
- graphQLQueryConfig() {
181
- const className = this.className;
182
- return {
183
- name: className + 'Query',
184
- description: `Parse Class ${className} Query`,
185
- fields: () => {
186
- return this.buildFields(graphQLQueryField, true);
187
- },
188
- resolve: this.get.bind(this),
189
- isTypeOf: function (input) {
190
- return input.className == className;
191
- }
192
- };
193
- }
194
-
195
- graphQLUpdateInputConfig() {
196
- const className = this.className;
197
- return {
198
- name: className + 'Update',
199
- description: `Parse Class ${className} Update`,
200
- fields: () => {
201
- return this.buildFields(graphQLInputField, true);
202
- },
203
- resolve: this.get.bind(this),
204
- isTypeOf: function (input) {
205
- return input.className == className;
206
- }
207
- };
208
- }
209
-
210
- graphQLUpdateInputObjectType() {
211
- return new _graphql.GraphQLInputObjectType(this.graphQLUpdateInputConfig());
212
- }
213
-
214
- graphQLInputObjectType() {
215
- return new _graphql.GraphQLInputObjectType(this.graphQLInputConfig());
216
- }
217
-
218
- graphQLQueryInputObjectType() {
219
- return new _graphql.GraphQLInputObjectType(this.graphQLQueryConfig());
220
- }
221
-
222
- graphQLObjectType() {
223
- return new _graphql.GraphQLObjectType(this.graphQLConfig());
224
- }
225
-
226
- get(a, b, c) {
227
- /*eslint-disable*/
228
- console.log('ParseClass resolve...');
229
- console.log(a, b, c);
230
- /* eslint-enable */
231
- return null;
232
- }
233
- }
234
- exports.ParseClass = ParseClass;