@prabhask5/stellar-engine 1.1.6 → 1.1.7

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 (145) hide show
  1. package/README.md +65 -25
  2. package/dist/actions/truncateTooltip.d.ts +42 -0
  3. package/dist/actions/truncateTooltip.d.ts.map +1 -0
  4. package/dist/actions/truncateTooltip.js +257 -0
  5. package/dist/actions/truncateTooltip.js.map +1 -0
  6. package/dist/auth/singleUser.d.ts.map +1 -1
  7. package/dist/auth/singleUser.js +6 -35
  8. package/dist/auth/singleUser.js.map +1 -1
  9. package/dist/bin/install-pwa.d.ts +9 -0
  10. package/dist/bin/install-pwa.d.ts.map +1 -0
  11. package/dist/bin/install-pwa.js +1421 -0
  12. package/dist/bin/install-pwa.js.map +1 -0
  13. package/dist/engine.d.ts.map +1 -1
  14. package/dist/engine.js +75 -1
  15. package/dist/engine.js.map +1 -1
  16. package/dist/entries/actions.d.ts +1 -0
  17. package/dist/entries/actions.d.ts.map +1 -1
  18. package/dist/entries/actions.js +1 -0
  19. package/dist/entries/actions.js.map +1 -1
  20. package/dist/entries/kit.d.ts +10 -9
  21. package/dist/entries/kit.d.ts.map +1 -1
  22. package/dist/entries/kit.js +7 -8
  23. package/dist/entries/kit.js.map +1 -1
  24. package/dist/entries/types.d.ts +1 -1
  25. package/dist/entries/types.d.ts.map +1 -1
  26. package/dist/entries/utils.d.ts +1 -1
  27. package/dist/entries/utils.d.ts.map +1 -1
  28. package/dist/entries/utils.js +1 -1
  29. package/dist/entries/utils.js.map +1 -1
  30. package/dist/entries/vite.d.ts +3 -0
  31. package/dist/entries/vite.d.ts.map +1 -0
  32. package/dist/entries/vite.js +3 -0
  33. package/dist/entries/vite.js.map +1 -0
  34. package/dist/index.d.ts +2 -2
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +1 -1
  37. package/dist/index.js.map +1 -1
  38. package/dist/kit/auth.d.ts +25 -0
  39. package/dist/kit/auth.d.ts.map +1 -0
  40. package/dist/kit/auth.js +31 -0
  41. package/dist/kit/auth.js.map +1 -0
  42. package/dist/kit/confirm.d.ts +30 -0
  43. package/dist/kit/confirm.d.ts.map +1 -0
  44. package/dist/kit/confirm.js +82 -0
  45. package/dist/kit/confirm.js.map +1 -0
  46. package/dist/kit/loads.d.ts +62 -0
  47. package/dist/kit/loads.d.ts.map +1 -0
  48. package/dist/kit/loads.js +89 -0
  49. package/dist/kit/loads.js.map +1 -0
  50. package/dist/kit/server.d.ts +43 -0
  51. package/dist/kit/server.d.ts.map +1 -0
  52. package/dist/kit/server.js +154 -0
  53. package/dist/kit/server.js.map +1 -0
  54. package/dist/kit/sw.d.ts +47 -0
  55. package/dist/kit/sw.d.ts.map +1 -0
  56. package/dist/kit/sw.js +164 -0
  57. package/dist/kit/sw.js.map +1 -0
  58. package/dist/runtime/runtimeConfig.d.ts +0 -8
  59. package/dist/runtime/runtimeConfig.d.ts.map +1 -1
  60. package/dist/runtime/runtimeConfig.js.map +1 -1
  61. package/dist/supabase/auth.d.ts +1 -1
  62. package/dist/supabase/auth.d.ts.map +1 -1
  63. package/dist/supabase/auth.js.map +1 -1
  64. package/dist/sw/build/vite-plugin.d.ts +29 -0
  65. package/dist/sw/build/vite-plugin.d.ts.map +1 -0
  66. package/dist/sw/build/vite-plugin.js +124 -0
  67. package/dist/sw/build/vite-plugin.js.map +1 -0
  68. package/dist/sw/sw.js +614 -0
  69. package/dist/types.d.ts +0 -19
  70. package/dist/types.d.ts.map +1 -1
  71. package/package.json +20 -22
  72. package/src/components/DeferredChangesBanner.svelte +477 -0
  73. package/src/components/SyncStatus.svelte +1732 -0
  74. package/dist/crdt/awareness.d.ts +0 -54
  75. package/dist/crdt/awareness.d.ts.map +0 -1
  76. package/dist/crdt/awareness.js +0 -219
  77. package/dist/crdt/awareness.js.map +0 -1
  78. package/dist/crdt/doc.d.ts +0 -56
  79. package/dist/crdt/doc.d.ts.map +0 -1
  80. package/dist/crdt/doc.js +0 -130
  81. package/dist/crdt/doc.js.map +0 -1
  82. package/dist/crdt/index.d.ts +0 -15
  83. package/dist/crdt/index.d.ts.map +0 -1
  84. package/dist/crdt/index.js +0 -20
  85. package/dist/crdt/index.js.map +0 -1
  86. package/dist/crdt/offline.d.ts +0 -91
  87. package/dist/crdt/offline.d.ts.map +0 -1
  88. package/dist/crdt/offline.js +0 -353
  89. package/dist/crdt/offline.js.map +0 -1
  90. package/dist/crdt/sync.d.ts +0 -58
  91. package/dist/crdt/sync.d.ts.map +0 -1
  92. package/dist/crdt/sync.js +0 -399
  93. package/dist/crdt/sync.js.map +0 -1
  94. package/dist/crdt/types.d.ts +0 -62
  95. package/dist/crdt/types.d.ts.map +0 -1
  96. package/dist/crdt/types.js +0 -7
  97. package/dist/crdt/types.js.map +0 -1
  98. package/dist/email/sendEmail.d.ts +0 -31
  99. package/dist/email/sendEmail.d.ts.map +0 -1
  100. package/dist/email/sendEmail.js +0 -39
  101. package/dist/email/sendEmail.js.map +0 -1
  102. package/dist/email/validateSmtp.d.ts +0 -18
  103. package/dist/email/validateSmtp.d.ts.map +0 -1
  104. package/dist/email/validateSmtp.js +0 -33
  105. package/dist/email/validateSmtp.js.map +0 -1
  106. package/dist/entries/crdt.d.ts +0 -3
  107. package/dist/entries/crdt.d.ts.map +0 -1
  108. package/dist/entries/crdt.js +0 -13
  109. package/dist/entries/crdt.js.map +0 -1
  110. package/dist/entries/email.d.ts +0 -4
  111. package/dist/entries/email.d.ts.map +0 -1
  112. package/dist/entries/email.js +0 -4
  113. package/dist/entries/email.js.map +0 -1
  114. package/dist/kit/authPresets.d.ts +0 -28
  115. package/dist/kit/authPresets.d.ts.map +0 -1
  116. package/dist/kit/authPresets.js +0 -23
  117. package/dist/kit/authPresets.js.map +0 -1
  118. package/dist/kit/configEndpoint.d.ts +0 -18
  119. package/dist/kit/configEndpoint.d.ts.map +0 -1
  120. package/dist/kit/configEndpoint.js +0 -27
  121. package/dist/kit/configEndpoint.js.map +0 -1
  122. package/dist/kit/deployEndpoint.d.ts +0 -22
  123. package/dist/kit/deployEndpoint.d.ts.map +0 -1
  124. package/dist/kit/deployEndpoint.js +0 -79
  125. package/dist/kit/deployEndpoint.js.map +0 -1
  126. package/dist/kit/layoutLoad.d.ts +0 -23
  127. package/dist/kit/layoutLoad.d.ts.map +0 -1
  128. package/dist/kit/layoutLoad.js +0 -41
  129. package/dist/kit/layoutLoad.js.map +0 -1
  130. package/dist/kit/protectedLoad.d.ts +0 -16
  131. package/dist/kit/protectedLoad.d.ts.map +0 -1
  132. package/dist/kit/protectedLoad.js +0 -28
  133. package/dist/kit/protectedLoad.js.map +0 -1
  134. package/dist/kit/setupLoad.d.ts +0 -11
  135. package/dist/kit/setupLoad.d.ts.map +0 -1
  136. package/dist/kit/setupLoad.js +0 -28
  137. package/dist/kit/setupLoad.js.map +0 -1
  138. package/dist/kit/validateEndpoint.d.ts +0 -9
  139. package/dist/kit/validateEndpoint.d.ts.map +0 -1
  140. package/dist/kit/validateEndpoint.js +0 -25
  141. package/dist/kit/validateEndpoint.js.map +0 -1
  142. package/dist/kit/vercelApi.d.ts +0 -6
  143. package/dist/kit/vercelApi.d.ts.map +0 -1
  144. package/dist/kit/vercelApi.js +0 -48
  145. package/dist/kit/vercelApi.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAG9D,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAClD,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGxE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG1C,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,eAAe,EAChB,MAAM,QAAQ,CAAC;AAChB,YAAY,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAG7C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAGnG,OAAO,EACL,MAAM,EACN,MAAM,EACN,OAAO,EACP,cAAc,EACd,WAAW,EACX,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,EACd,aAAa,EACb,SAAS,EACT,eAAe,EAChB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAGpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG/D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAGzE,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,uBAAuB,EACvB,eAAe,EACf,uBAAuB,EACvB,0BAA0B,EAC1B,sBAAsB,EACtB,MAAM,EACN,qBAAqB,EACrB,6BAA6B,EAC7B,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,SAAS,EACT,sBAAsB,EACtB,kBAAkB,EAClB,cAAc,EACf,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGlD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG7C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAC3E,YAAY,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGzD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG5F,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG3E,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAGpG,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,UAAU,EACV,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,eAAe,EAChB,MAAM,SAAS,CAAC;AAGjB,YAAY,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAGrD,OAAO,EAAE,2BAA2B,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -35,7 +35,7 @@ export { supabase } from './supabase/client';
35
35
  // Runtime config
36
36
  export { initConfig, getConfig, setConfig } from './runtime/runtimeConfig';
37
37
  // Debug
38
- export { debug, debugLog, debugWarn, debugError, isDebugMode, setDebugMode } from './debug';
38
+ export { debug, isDebugMode, setDebugMode } from './debug';
39
39
  // Utilities
40
40
  export { generateId, now, calculateNewOrder, snakeToCamel } from './utils';
41
41
  // Svelte actions
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGtC,WAAW;AACX,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGlD,mBAAmB;AACnB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,0BAA0B;AAC1B,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,eAAe,EAChB,MAAM,QAAQ,CAAC;AAGhB,2BAA2B;AAC3B,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAEnG,OAAO;AACP,OAAO,EACL,MAAM,EACN,MAAM,EACN,OAAO,EACP,cAAc,EACd,WAAW,EACX,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,EACd,aAAa,EACb,SAAS,EACT,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAGzB,iBAAiB;AACjB,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAG3D,QAAQ;AACR,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,cAAc;AACd,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,gBAAgB;AAChB,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAEzE,mBAAmB;AACnB,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,uBAAuB,EACvB,eAAe,EACf,uBAAuB,EACvB,0BAA0B,EAC1B,sBAAsB,EACtB,MAAM,EACN,qBAAqB,EACrB,6BAA6B,EAC7B,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,mBAAmB,CAAC;AAE3B,sBAAsB;AACtB,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,SAAS,EACT,sBAAsB,EACtB,kBAAkB,EAClB,cAAc,EACf,MAAM,2BAA2B,CAAC;AAEnC,SAAS;AACT,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEjF,0DAA0D;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD,gDAAgD;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,iBAAiB;AACjB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAG3E,QAAQ;AACR,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5F,YAAY;AACZ,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE3E,iBAAiB;AACjB,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAqBpG,2DAA2D;AAC3D,OAAO,EAAE,2BAA2B,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGtC,WAAW;AACX,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGlD,mBAAmB;AACnB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,0BAA0B;AAC1B,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,eAAe,EAChB,MAAM,QAAQ,CAAC;AAGhB,2BAA2B;AAC3B,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAEnG,OAAO;AACP,OAAO,EACL,MAAM,EACN,MAAM,EACN,OAAO,EACP,cAAc,EACd,WAAW,EACX,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,EACd,aAAa,EACb,SAAS,EACT,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAGzB,iBAAiB;AACjB,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAG3D,QAAQ;AACR,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,cAAc;AACd,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,gBAAgB;AAChB,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAEzE,mBAAmB;AACnB,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,uBAAuB,EACvB,eAAe,EACf,uBAAuB,EACvB,0BAA0B,EAC1B,sBAAsB,EACtB,MAAM,EACN,qBAAqB,EACrB,6BAA6B,EAC7B,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,mBAAmB,CAAC;AAE3B,sBAAsB;AACtB,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,SAAS,EACT,sBAAsB,EACtB,kBAAkB,EAClB,cAAc,EACf,MAAM,2BAA2B,CAAC;AAEnC,SAAS;AACT,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEjF,0DAA0D;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD,gDAAgD;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,iBAAiB;AACjB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAG3E,QAAQ;AACR,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE3D,YAAY;AACZ,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE3E,iBAAiB;AACjB,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAmBpG,2DAA2D;AAC3D,OAAO,EAAE,2BAA2B,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @fileoverview Auth hydration helper for the root layout component.
3
+ *
4
+ * Reads layout load data and calls the appropriate `authState.set*()`
5
+ * method so child components get reactive access to auth state.
6
+ */
7
+ import type { AuthMode, OfflineCredentials } from '../types.js';
8
+ import type { Session } from '@supabase/supabase-js';
9
+ /** Shape of the layout data expected by `hydrateAuthState`. */
10
+ export interface AuthLayoutData {
11
+ authMode: AuthMode;
12
+ session: Session | null;
13
+ offlineProfile: OfflineCredentials | null;
14
+ }
15
+ /**
16
+ * Reads layout load data (`{ authMode, session, offlineProfile }`) and calls
17
+ * the appropriate `authState.set*()` method.
18
+ *
19
+ * Call this from a Svelte 5 `$effect()` in your root `+layout.svelte`:
20
+ * ```ts
21
+ * $effect(() => { hydrateAuthState(data); });
22
+ * ```
23
+ */
24
+ export declare function hydrateAuthState(layoutData: AuthLayoutData): void;
25
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/kit/auth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAMrD,+DAA+D;AAC/D,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,cAAc,EAAE,kBAAkB,GAAG,IAAI,CAAC;CAC3C;AAMD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI,CAQjE"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @fileoverview Auth hydration helper for the root layout component.
3
+ *
4
+ * Reads layout load data and calls the appropriate `authState.set*()`
5
+ * method so child components get reactive access to auth state.
6
+ */
7
+ import { authState } from '../stores/authState.js';
8
+ // =============================================================================
9
+ // PUBLIC API
10
+ // =============================================================================
11
+ /**
12
+ * Reads layout load data (`{ authMode, session, offlineProfile }`) and calls
13
+ * the appropriate `authState.set*()` method.
14
+ *
15
+ * Call this from a Svelte 5 `$effect()` in your root `+layout.svelte`:
16
+ * ```ts
17
+ * $effect(() => { hydrateAuthState(data); });
18
+ * ```
19
+ */
20
+ export function hydrateAuthState(layoutData) {
21
+ if (layoutData.authMode === 'supabase' && layoutData.session) {
22
+ authState.setSupabaseAuth(layoutData.session);
23
+ }
24
+ else if (layoutData.authMode === 'offline' && layoutData.offlineProfile) {
25
+ authState.setOfflineAuth(layoutData.offlineProfile);
26
+ }
27
+ else {
28
+ authState.setNoAuth();
29
+ }
30
+ }
31
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/kit/auth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAenD,gFAAgF;AAChF,cAAc;AACd,gFAAgF;AAEhF;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAA0B;IACzD,IAAI,UAAU,CAAC,QAAQ,KAAK,UAAU,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QAC7D,SAAS,CAAC,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;SAAM,IAAI,UAAU,CAAC,QAAQ,KAAK,SAAS,IAAI,UAAU,CAAC,cAAc,EAAE,CAAC;QAC1E,SAAS,CAAC,cAAc,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,SAAS,CAAC,SAAS,EAAE,CAAC;IACxB,CAAC;AACH,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @fileoverview Email confirmation helpers for the `/confirm` route.
3
+ *
4
+ * Extracts the OTP verification + device trust + error translation logic
5
+ * so the scaffolded confirm page can focus on UI.
6
+ */
7
+ /** Result of an email confirmation attempt. */
8
+ export interface ConfirmResult {
9
+ success: boolean;
10
+ error?: string;
11
+ }
12
+ /**
13
+ * Handles email confirmation: verifies the OTP token, trusts the pending
14
+ * device for device-verification types, and translates Supabase error
15
+ * messages to user-friendly strings.
16
+ *
17
+ * @param tokenHash - The `token_hash` from the confirmation URL query params.
18
+ * @param type - The verification type from Supabase (`signup`, `email`, `email_change`, `magiclink`).
19
+ * @returns `{ success: true }` on success, or `{ success: false, error }` on failure.
20
+ */
21
+ export declare function handleEmailConfirmation(tokenHash: string, type: 'signup' | 'email' | 'email_change' | 'magiclink'): Promise<ConfirmResult>;
22
+ /**
23
+ * Broadcasts an auth confirmation event via `BroadcastChannel` so other
24
+ * tabs (e.g. the login page) can pick up the auth state change.
25
+ *
26
+ * @param channelName - The BroadcastChannel name (must match the login page).
27
+ * @param type - The verification type to include in the message.
28
+ */
29
+ export declare function broadcastAuthConfirmed(channelName: string, type: string): Promise<'closed' | 'can_close' | 'no_broadcast'>;
30
+ //# sourceMappingURL=confirm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirm.d.ts","sourceRoot":"","sources":["../../src/kit/confirm.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,+CAA+C;AAC/C,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD;;;;;;;;GAQG;AACH,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,cAAc,GAAG,WAAW,GACtD,OAAO,CAAC,aAAa,CAAC,CAkCxB;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,QAAQ,GAAG,WAAW,GAAG,cAAc,CAAC,CAyBlD"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * @fileoverview Email confirmation helpers for the `/confirm` route.
3
+ *
4
+ * Extracts the OTP verification + device trust + error translation logic
5
+ * so the scaffolded confirm page can focus on UI.
6
+ */
7
+ import { verifyOtp } from '../supabase/auth.js';
8
+ import { trustPendingDevice } from '../auth/deviceVerification.js';
9
+ // =============================================================================
10
+ // PUBLIC API
11
+ // =============================================================================
12
+ /**
13
+ * Handles email confirmation: verifies the OTP token, trusts the pending
14
+ * device for device-verification types, and translates Supabase error
15
+ * messages to user-friendly strings.
16
+ *
17
+ * @param tokenHash - The `token_hash` from the confirmation URL query params.
18
+ * @param type - The verification type from Supabase (`signup`, `email`, `email_change`, `magiclink`).
19
+ * @returns `{ success: true }` on success, or `{ success: false, error }` on failure.
20
+ */
21
+ export async function handleEmailConfirmation(tokenHash, type) {
22
+ try {
23
+ const otpType = type === 'magiclink' ? 'email' : type;
24
+ const { error } = await verifyOtp(tokenHash, otpType);
25
+ // For device-verification OTPs, trust the originating device
26
+ if (!error && (type === 'email' || type === 'magiclink')) {
27
+ await trustPendingDevice();
28
+ }
29
+ if (error) {
30
+ const errorLower = error.toLowerCase();
31
+ if (errorLower.includes('already') ||
32
+ errorLower.includes('confirmed') ||
33
+ errorLower.includes('used')) {
34
+ return {
35
+ success: false,
36
+ error: 'This email has already been confirmed. You can sign in to your account.'
37
+ };
38
+ }
39
+ else if (errorLower.includes('expired') || errorLower.includes('invalid')) {
40
+ return {
41
+ success: false,
42
+ error: 'This confirmation link has expired. Please request a new one from the login page.'
43
+ };
44
+ }
45
+ return { success: false, error };
46
+ }
47
+ return { success: true };
48
+ }
49
+ catch {
50
+ return { success: false, error: 'An unexpected error occurred. Please try again.' };
51
+ }
52
+ }
53
+ /**
54
+ * Broadcasts an auth confirmation event via `BroadcastChannel` so other
55
+ * tabs (e.g. the login page) can pick up the auth state change.
56
+ *
57
+ * @param channelName - The BroadcastChannel name (must match the login page).
58
+ * @param type - The verification type to include in the message.
59
+ */
60
+ export async function broadcastAuthConfirmed(channelName, type) {
61
+ if (typeof window === 'undefined' || !('BroadcastChannel' in window)) {
62
+ return 'no_broadcast';
63
+ }
64
+ const channel = new BroadcastChannel(channelName);
65
+ channel.postMessage({
66
+ type: 'AUTH_CONFIRMED',
67
+ verificationType: type
68
+ });
69
+ // Give the original tab time to process the message
70
+ await new Promise((resolve) => setTimeout(resolve, 500));
71
+ channel.close();
72
+ // Attempt to close this confirmation tab
73
+ try {
74
+ window.close();
75
+ }
76
+ catch {
77
+ // Browser policy may block window.close()
78
+ }
79
+ // If still here → close failed
80
+ return 'can_close';
81
+ }
82
+ //# sourceMappingURL=confirm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirm.js","sourceRoot":"","sources":["../../src/kit/confirm.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAYnE,gFAAgF;AAChF,cAAc;AACd,gFAAgF;AAEhF;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,SAAiB,EACjB,IAAuD;IAEvD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QACtD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,SAAS,CAAC,SAAS,EAAE,OAA8C,CAAC,CAAC;QAE7F,6DAA6D;QAC7D,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,WAAW,CAAC,EAAE,CAAC;YACzD,MAAM,kBAAkB,EAAE,CAAC;QAC7B,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;YACvC,IACE,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAC9B,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAChC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAC3B,CAAC;gBACD,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,yEAAyE;iBACjF,CAAC;YACJ,CAAC;iBAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC5E,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,mFAAmF;iBAC3F,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QACnC,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,iDAAiD,EAAE,CAAC;IACtF,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,WAAmB,EACnB,IAAY;IAEZ,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,kBAAkB,IAAI,MAAM,CAAC,EAAE,CAAC;QACrE,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAElD,OAAO,CAAC,WAAW,CAAC;QAClB,IAAI,EAAE,gBAAgB;QACtB,gBAAgB,EAAE,IAAI;KACvB,CAAC,CAAC;IAEH,oDAAoD;IACpD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,KAAK,EAAE,CAAC;IAEhB,yCAAyC;IACzC,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,0CAA0C;IAC5C,CAAC;IAED,+BAA+B;IAC/B,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * @fileoverview SvelteKit load function helpers.
3
+ *
4
+ * Extracts orchestration logic from layout/page load functions so
5
+ * scaffolded routes can be thin wrappers around these helpers.
6
+ */
7
+ import type { AuthStateResult } from '../auth/resolveAuthState.js';
8
+ /** Data returned by `resolveRootLayout`. */
9
+ export interface RootLayoutData extends AuthStateResult {
10
+ singleUserSetUp?: boolean;
11
+ }
12
+ /** Data returned by `resolveProtectedLayout`. */
13
+ export interface ProtectedLayoutData {
14
+ session: AuthStateResult['session'];
15
+ authMode: AuthStateResult['authMode'];
16
+ offlineProfile: AuthStateResult['offlineProfile'];
17
+ }
18
+ /** Data returned by `resolveSetupAccess`. */
19
+ export interface SetupAccessData {
20
+ isFirstSetup: boolean;
21
+ }
22
+ /**
23
+ * Orchestrates the root layout load sequence:
24
+ * 1. Calls the app's `initEngine` function (for database schema setup)
25
+ * 2. Runs `initConfig()` — redirects to `/setup` if unconfigured
26
+ * 3. Resolves auth state
27
+ * 4. Starts sync engine if authenticated
28
+ *
29
+ * @param initEngineFn - The app's `initEngine()` call (executed before config init).
30
+ * Should already have been called at module scope in the browser.
31
+ * @param url - The current page URL (for setup redirect check).
32
+ * @returns Layout data with session, auth mode, offline profile, and setup status.
33
+ */
34
+ export declare function resolveRootLayout(url: {
35
+ pathname: string;
36
+ }, _initEngineFn?: () => void): Promise<RootLayoutData>;
37
+ /**
38
+ * Auth guard for protected routes. Resolves auth state and returns
39
+ * redirect info if unauthenticated.
40
+ *
41
+ * @param url - The current page URL (for building redirect parameter).
42
+ * @returns Auth data, or `null` if a redirect to `/login` is needed.
43
+ * When null, caller should `throw redirect(302, loginUrl)`.
44
+ */
45
+ export declare function resolveProtectedLayout(url: {
46
+ pathname: string;
47
+ search: string;
48
+ }): Promise<{
49
+ data: ProtectedLayoutData;
50
+ redirectUrl: string | null;
51
+ }>;
52
+ /**
53
+ * Setup page guard: if unconfigured → public access; if configured → admin-only.
54
+ *
55
+ * @returns `{ isFirstSetup }` with access info, or `null` with a redirectUrl
56
+ * if the user should be redirected away.
57
+ */
58
+ export declare function resolveSetupAccess(): Promise<{
59
+ data: SetupAccessData;
60
+ redirectUrl: string | null;
61
+ }>;
62
+ //# sourceMappingURL=loads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loads.d.ts","sourceRoot":"","sources":["../../src/kit/loads.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAMnE,4CAA4C;AAC5C,MAAM,WAAW,cAAe,SAAQ,eAAe;IACrD,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,iDAAiD;AACjD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACpC,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC;IACtC,cAAc,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;CACnD;AAED,6CAA6C;AAC7C,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,OAAO,CAAC;CACvB;AAMD;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,EACzB,aAAa,CAAC,EAAE,MAAM,IAAI,GACzB,OAAO,CAAC,cAAc,CAAC,CAsBzB;AAMD;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAAC,GAAG,EAAE;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAarE;AAMD;;;;;GAKG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC;IAClD,IAAI,EAAE,eAAe,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAAC,CAgBD"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * @fileoverview SvelteKit load function helpers.
3
+ *
4
+ * Extracts orchestration logic from layout/page load functions so
5
+ * scaffolded routes can be thin wrappers around these helpers.
6
+ */
7
+ import { initConfig, getConfig } from '../runtime/runtimeConfig.js';
8
+ import { resolveAuthState } from '../auth/resolveAuthState.js';
9
+ import { startSyncEngine } from '../engine.js';
10
+ import { getValidSession } from '../supabase/auth.js';
11
+ import { isAdmin } from '../auth/admin.js';
12
+ // =============================================================================
13
+ // ROOT LAYOUT
14
+ // =============================================================================
15
+ /**
16
+ * Orchestrates the root layout load sequence:
17
+ * 1. Calls the app's `initEngine` function (for database schema setup)
18
+ * 2. Runs `initConfig()` — redirects to `/setup` if unconfigured
19
+ * 3. Resolves auth state
20
+ * 4. Starts sync engine if authenticated
21
+ *
22
+ * @param initEngineFn - The app's `initEngine()` call (executed before config init).
23
+ * Should already have been called at module scope in the browser.
24
+ * @param url - The current page URL (for setup redirect check).
25
+ * @returns Layout data with session, auth mode, offline profile, and setup status.
26
+ */
27
+ export async function resolveRootLayout(url, _initEngineFn) {
28
+ const config = await initConfig();
29
+ // No config yet → first-time user, redirect to setup wizard
30
+ if (!config && url.pathname !== '/setup') {
31
+ return { session: null, authMode: 'none', offlineProfile: null, singleUserSetUp: false };
32
+ }
33
+ // Still on setup page with no config — return blank state
34
+ if (!config) {
35
+ return { session: null, authMode: 'none', offlineProfile: null, singleUserSetUp: false };
36
+ }
37
+ // Resolve auth — determines Supabase / offline / none
38
+ const result = await resolveAuthState();
39
+ // Start sync engine only when the user is actually authenticated
40
+ if (result.authMode !== 'none') {
41
+ await startSyncEngine();
42
+ }
43
+ return result;
44
+ }
45
+ // =============================================================================
46
+ // PROTECTED LAYOUT
47
+ // =============================================================================
48
+ /**
49
+ * Auth guard for protected routes. Resolves auth state and returns
50
+ * redirect info if unauthenticated.
51
+ *
52
+ * @param url - The current page URL (for building redirect parameter).
53
+ * @returns Auth data, or `null` if a redirect to `/login` is needed.
54
+ * When null, caller should `throw redirect(302, loginUrl)`.
55
+ */
56
+ export async function resolveProtectedLayout(url) {
57
+ const result = await resolveAuthState();
58
+ if (result.authMode === 'none') {
59
+ const returnUrl = url.pathname + url.search;
60
+ const loginUrl = returnUrl && returnUrl !== '/'
61
+ ? `/login?redirect=${encodeURIComponent(returnUrl)}`
62
+ : '/login';
63
+ return { data: result, redirectUrl: loginUrl };
64
+ }
65
+ return { data: result, redirectUrl: null };
66
+ }
67
+ // =============================================================================
68
+ // SETUP ACCESS
69
+ // =============================================================================
70
+ /**
71
+ * Setup page guard: if unconfigured → public access; if configured → admin-only.
72
+ *
73
+ * @returns `{ isFirstSetup }` with access info, or `null` with a redirectUrl
74
+ * if the user should be redirected away.
75
+ */
76
+ export async function resolveSetupAccess() {
77
+ if (!getConfig()) {
78
+ return { data: { isFirstSetup: true }, redirectUrl: null };
79
+ }
80
+ const session = await getValidSession();
81
+ if (!session?.user) {
82
+ return { data: { isFirstSetup: false }, redirectUrl: '/login' };
83
+ }
84
+ if (!isAdmin(session.user)) {
85
+ return { data: { isFirstSetup: false }, redirectUrl: '/' };
86
+ }
87
+ return { data: { isFirstSetup: false }, redirectUrl: null };
88
+ }
89
+ //# sourceMappingURL=loads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loads.js","sourceRoot":"","sources":["../../src/kit/loads.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @fileoverview Server-side API helpers for SvelteKit route handlers.
3
+ *
4
+ * Extracts reusable backend logic so scaffolded API routes can be thin wrappers.
5
+ */
6
+ /** Configuration for deploying Supabase credentials to Vercel. */
7
+ export interface DeployConfig {
8
+ vercelToken: string;
9
+ projectId: string;
10
+ supabaseUrl: string;
11
+ supabaseAnonKey: string;
12
+ }
13
+ /** Result of a Vercel deployment attempt. */
14
+ export interface DeployResult {
15
+ success: boolean;
16
+ deploymentUrl?: string;
17
+ error?: string;
18
+ }
19
+ /** Server config status returned by `getServerConfig()`. */
20
+ export interface ServerConfig {
21
+ configured: boolean;
22
+ supabaseUrl?: string;
23
+ supabaseAnonKey?: string;
24
+ }
25
+ /**
26
+ * Reads Supabase configuration from `process.env` at runtime.
27
+ * Returns `{ configured: true, supabaseUrl, supabaseAnonKey }` when both
28
+ * env vars exist, or `{ configured: false }` otherwise.
29
+ */
30
+ export declare function getServerConfig(): ServerConfig;
31
+ /**
32
+ * Full Vercel deployment flow: upsert env vars, then trigger a production
33
+ * redeployment via git-based or clone-based strategy.
34
+ */
35
+ export declare function deployToVercel(config: DeployConfig): Promise<DeployResult>;
36
+ /**
37
+ * Factory returning a SvelteKit POST handler that validates Supabase credentials.
38
+ * The handler parses the request body and delegates to `validateSupabaseCredentials`.
39
+ */
40
+ export declare function createValidateHandler(): ({ request }: {
41
+ request: Request;
42
+ }) => Promise<Response>;
43
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/kit/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAeH,kEAAkE;AAClE,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,6CAA6C;AAC7C,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,4DAA4D;AAC5D,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AA+ED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAQ9C;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CA+DhF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,KACrB,aAAa;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,KAAG,OAAO,CAAC,QAAQ,CAAC,CAwBpE"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * @fileoverview Server-side API helpers for SvelteKit route handlers.
3
+ *
4
+ * Extracts reusable backend logic so scaffolded API routes can be thin wrappers.
5
+ */
6
+ // =============================================================================
7
+ // HELPERS — Vercel API Utilities
8
+ // =============================================================================
9
+ /**
10
+ * Low-level wrapper around the Vercel REST API.
11
+ */
12
+ async function vercelApi(path, token, method = 'GET', body) {
13
+ return fetch(`https://api.vercel.com${path}`, {
14
+ method,
15
+ headers: {
16
+ Authorization: `Bearer ${token}`,
17
+ 'Content-Type': 'application/json'
18
+ },
19
+ body: body ? JSON.stringify(body) : undefined
20
+ });
21
+ }
22
+ /**
23
+ * Creates or updates a single environment variable on a Vercel project.
24
+ *
25
+ * Strategy:
26
+ * 1. Attempt to create via `POST /v10/projects/:id/env`.
27
+ * 2. If `ENV_ALREADY_EXISTS`, list all env vars to find the existing
28
+ * entry's ID, then patch it with the new value.
29
+ */
30
+ async function setEnvVar(projectId, token, key, value) {
31
+ const createRes = await vercelApi(`/v10/projects/${projectId}/env`, token, 'POST', {
32
+ key,
33
+ value,
34
+ target: ['production', 'preview', 'development'],
35
+ type: 'plain'
36
+ });
37
+ if (createRes.ok)
38
+ return;
39
+ const createData = await createRes.json();
40
+ const errorCode = createData.error?.code || '';
41
+ const errorMessage = createData.error?.message || '';
42
+ if (errorCode === 'ENV_ALREADY_EXISTS' || errorMessage.includes('already exists')) {
43
+ const listRes = await vercelApi(`/v9/projects/${projectId}/env`, token);
44
+ if (!listRes.ok) {
45
+ throw new Error(`Failed to list env vars: ${listRes.statusText}`);
46
+ }
47
+ const listData = await listRes.json();
48
+ const existing = listData.envs?.find((e) => e.key === key);
49
+ if (existing) {
50
+ const updateRes = await vercelApi(`/v9/projects/${projectId}/env/${existing.id}`, token, 'PATCH', { value });
51
+ if (!updateRes.ok) {
52
+ throw new Error(`Failed to update env var ${key}: ${updateRes.statusText}`);
53
+ }
54
+ }
55
+ else {
56
+ throw new Error(`Env var ${key} reported as existing but not found in list`);
57
+ }
58
+ }
59
+ else {
60
+ throw new Error(`Failed to create env var ${key}: ${createData.error?.message || createRes.statusText}`);
61
+ }
62
+ }
63
+ // =============================================================================
64
+ // PUBLIC API
65
+ // =============================================================================
66
+ /**
67
+ * Reads Supabase configuration from `process.env` at runtime.
68
+ * Returns `{ configured: true, supabaseUrl, supabaseAnonKey }` when both
69
+ * env vars exist, or `{ configured: false }` otherwise.
70
+ */
71
+ export function getServerConfig() {
72
+ const supabaseUrl = process.env.PUBLIC_SUPABASE_URL || '';
73
+ const supabaseAnonKey = process.env.PUBLIC_SUPABASE_PUBLISHABLE_DEFAULT_KEY || '';
74
+ if (supabaseUrl && supabaseAnonKey) {
75
+ return { configured: true, supabaseUrl, supabaseAnonKey };
76
+ }
77
+ return { configured: false };
78
+ }
79
+ /**
80
+ * Full Vercel deployment flow: upsert env vars, then trigger a production
81
+ * redeployment via git-based or clone-based strategy.
82
+ */
83
+ export async function deployToVercel(config) {
84
+ try {
85
+ // Phase 1 — Upsert environment variables
86
+ await setEnvVar(config.projectId, config.vercelToken, 'PUBLIC_SUPABASE_URL', config.supabaseUrl);
87
+ await setEnvVar(config.projectId, config.vercelToken, 'PUBLIC_SUPABASE_PUBLISHABLE_DEFAULT_KEY', config.supabaseAnonKey);
88
+ // Phase 2 — Trigger production redeployment
89
+ const deploymentId = process.env.VERCEL_DEPLOYMENT_ID || process.env.VERCEL_URL;
90
+ const gitRepo = process.env.VERCEL_GIT_REPO_SLUG;
91
+ const gitOwner = process.env.VERCEL_GIT_REPO_OWNER;
92
+ const gitRef = process.env.VERCEL_GIT_COMMIT_REF || 'main';
93
+ let deploymentUrl = '';
94
+ // Strategy A — Git-based redeployment (preferred)
95
+ if (gitRepo && gitOwner) {
96
+ const deployRes = await vercelApi(`/v13/deployments`, config.vercelToken, 'POST', {
97
+ name: config.projectId,
98
+ project: config.projectId,
99
+ target: 'production',
100
+ gitSource: {
101
+ type: 'github',
102
+ repoId: `${gitOwner}/${gitRepo}`,
103
+ ref: gitRef
104
+ }
105
+ });
106
+ if (deployRes.ok) {
107
+ const deployData = await deployRes.json();
108
+ deploymentUrl = deployData.url || '';
109
+ }
110
+ }
111
+ // Strategy B — Clone current deployment (fallback)
112
+ if (!deploymentUrl && deploymentId) {
113
+ const redeployRes = await vercelApi(`/v13/deployments`, config.vercelToken, 'POST', {
114
+ name: config.projectId,
115
+ project: config.projectId,
116
+ target: 'production',
117
+ deploymentId
118
+ });
119
+ if (redeployRes.ok) {
120
+ const redeployData = await redeployRes.json();
121
+ deploymentUrl = redeployData.url || '';
122
+ }
123
+ }
124
+ return { success: true, deploymentUrl };
125
+ }
126
+ catch (e) {
127
+ const message = e instanceof Error ? e.message : 'Unknown error';
128
+ return { success: false, error: message };
129
+ }
130
+ }
131
+ /**
132
+ * Factory returning a SvelteKit POST handler that validates Supabase credentials.
133
+ * The handler parses the request body and delegates to `validateSupabaseCredentials`.
134
+ */
135
+ export function createValidateHandler() {
136
+ return async ({ request }) => {
137
+ const { validateSupabaseCredentials } = await import('../supabase/validate.js');
138
+ try {
139
+ const { supabaseUrl, supabaseAnonKey } = await request.json();
140
+ if (!supabaseUrl || !supabaseAnonKey) {
141
+ return new Response(JSON.stringify({ valid: false, error: 'Supabase URL and Anon Key are required' }), { status: 400, headers: { 'Content-Type': 'application/json' } });
142
+ }
143
+ const result = await validateSupabaseCredentials(supabaseUrl, supabaseAnonKey);
144
+ return new Response(JSON.stringify(result), {
145
+ headers: { 'Content-Type': 'application/json' }
146
+ });
147
+ }
148
+ catch (e) {
149
+ const message = e instanceof Error ? e.message : 'Unknown error';
150
+ return new Response(JSON.stringify({ valid: false, error: `Could not connect to Supabase: ${message}` }), { headers: { 'Content-Type': 'application/json' } });
151
+ }
152
+ };
153
+ }
154
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/kit/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * @fileoverview Service worker lifecycle helpers.
3
+ *
4
+ * Extracts SW monitoring and update logic so components and pages
5
+ * can use clean APIs without duplicating browser-specific code.
6
+ */
7
+ /** Options for `pollForNewServiceWorker`. */
8
+ export interface PollOptions {
9
+ /** Polling interval in milliseconds (default: 5000). */
10
+ intervalMs?: number;
11
+ /** Maximum number of polling attempts (default: 60). */
12
+ maxAttempts?: number;
13
+ /** Callback invoked when a new SW is detected in waiting state. */
14
+ onFound?: () => void;
15
+ }
16
+ /** Callbacks for `monitorSwLifecycle`. */
17
+ export interface SwLifecycleCallbacks {
18
+ /** Called whenever an update-available condition is detected. */
19
+ onUpdateAvailable: () => void;
20
+ }
21
+ /**
22
+ * Polls `registration.update()` until a new service worker is detected
23
+ * in the waiting state. Useful after triggering a deployment to detect
24
+ * when the new build is live.
25
+ *
26
+ * @returns A cleanup function that stops polling.
27
+ */
28
+ export declare function pollForNewServiceWorker(options?: PollOptions): () => void;
29
+ /**
30
+ * Sends `SKIP_WAITING` to the waiting service worker, listens for
31
+ * `controllerchange`, then reloads the page. Includes a double-reload guard.
32
+ */
33
+ export declare function handleSwUpdate(): Promise<void>;
34
+ /**
35
+ * Comprehensive SW monitoring covering all detection strategies:
36
+ * 1. Immediate check for waiting worker
37
+ * 2. Delayed retries at 1s/3s (iOS PWA quirk)
38
+ * 3. `SW_INSTALLED` message listener
39
+ * 4. `updatefound` → `statechange` tracking
40
+ * 5. `visibilitychange` re-check
41
+ * 6. 2-minute polling interval
42
+ *
43
+ * @param callbacks - Object with `onUpdateAvailable` callback.
44
+ * @returns A cleanup function that removes all listeners and intervals.
45
+ */
46
+ export declare function monitorSwLifecycle(callbacks: SwLifecycleCallbacks): () => void;
47
+ //# sourceMappingURL=sw.d.ts.map