expo-invoke 1.3.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/android/src/main/java/expo/modules/invoke/InteractiveWidgetReceiver.kt +47 -0
  2. package/android/src/main/java/expo/modules/invoke/InvokeSliceProvider.kt +83 -0
  3. package/android/src/main/java/expo/modules/invoke/ShortcutsHelper.kt +38 -32
  4. package/build/plugin/android/withAndroidInvoke.d.ts +3 -1
  5. package/build/plugin/android/withAndroidInvoke.js +71 -15
  6. package/build/plugin/android/withAndroidInvoke.js.map +1 -1
  7. package/build/plugin/codegen/generateSwiftAppClip.d.ts +2 -0
  8. package/build/plugin/codegen/generateSwiftAppClip.js +20 -0
  9. package/build/plugin/codegen/generateSwiftAppClip.js.map +1 -0
  10. package/build/plugin/codegen/generateSwiftEntities.d.ts +2 -0
  11. package/build/plugin/codegen/generateSwiftEntities.js +91 -0
  12. package/build/plugin/codegen/generateSwiftEntities.js.map +1 -0
  13. package/build/plugin/codegen/generateSwiftFocusFilters.d.ts +2 -0
  14. package/build/plugin/codegen/generateSwiftFocusFilters.js +42 -0
  15. package/build/plugin/codegen/generateSwiftFocusFilters.js.map +1 -0
  16. package/build/plugin/codegen/generateSwiftIntents.d.ts +2 -0
  17. package/build/plugin/codegen/generateSwiftIntents.js +43 -13
  18. package/build/plugin/codegen/generateSwiftIntents.js.map +1 -1
  19. package/build/plugin/ios/withIOSInvoke.d.ts +8 -1
  20. package/build/plugin/ios/withIOSInvoke.js +61 -10
  21. package/build/plugin/ios/withIOSInvoke.js.map +1 -1
  22. package/build/plugin/src/withInvoke.d.ts +20 -3
  23. package/build/plugin/src/withInvoke.js +23 -4
  24. package/build/plugin/src/withInvoke.js.map +1 -1
  25. package/build/src/components/AddToSiriButton.d.ts +1 -1
  26. package/build/src/components/AddToSiriButton.d.ts.map +1 -1
  27. package/build/src/components/InvokeDebugger.d.ts +1 -1
  28. package/build/src/components/InvokeDebugger.d.ts.map +1 -1
  29. package/build/src/components/ShortcutChip.d.ts +1 -1
  30. package/build/src/components/ShortcutChip.d.ts.map +1 -1
  31. package/build/src/hooks/useBackgroundIntent.d.ts +15 -0
  32. package/build/src/hooks/useBackgroundIntent.d.ts.map +1 -0
  33. package/build/src/hooks/useBackgroundIntent.js +41 -0
  34. package/build/src/hooks/useBackgroundIntent.js.map +1 -0
  35. package/build/src/hooks/useEntityQuery.d.ts +26 -0
  36. package/build/src/hooks/useEntityQuery.d.ts.map +1 -0
  37. package/build/src/hooks/useEntityQuery.js +47 -0
  38. package/build/src/hooks/useEntityQuery.js.map +1 -0
  39. package/build/src/hooks/useFocusFilter.d.ts +1 -1
  40. package/build/src/hooks/useFocusFilter.d.ts.map +1 -1
  41. package/build/src/hooks/useFocusFilter.js.map +1 -1
  42. package/build/src/hooks/useFocusFilterState.d.ts +28 -0
  43. package/build/src/hooks/useFocusFilterState.d.ts.map +1 -0
  44. package/build/src/hooks/useFocusFilterState.js +47 -0
  45. package/build/src/hooks/useFocusFilterState.js.map +1 -0
  46. package/build/src/hooks/useInvoke.d.ts.map +1 -1
  47. package/build/src/hooks/useInvoke.js +3 -0
  48. package/build/src/hooks/useInvoke.js.map +1 -1
  49. package/build/src/hooks/useInvokeAnalytics.d.ts +10 -14
  50. package/build/src/hooks/useInvokeAnalytics.d.ts.map +1 -1
  51. package/build/src/hooks/useInvokeAnalytics.js +21 -14
  52. package/build/src/hooks/useInvokeAnalytics.js.map +1 -1
  53. package/build/src/hooks/useInvokeQueue.d.ts +32 -0
  54. package/build/src/hooks/useInvokeQueue.d.ts.map +1 -0
  55. package/build/src/hooks/useInvokeQueue.js +77 -0
  56. package/build/src/hooks/useInvokeQueue.js.map +1 -0
  57. package/build/src/hooks/useLiveActivity.d.ts +37 -0
  58. package/build/src/hooks/useLiveActivity.d.ts.map +1 -0
  59. package/build/src/hooks/useLiveActivity.js +74 -0
  60. package/build/src/hooks/useLiveActivity.js.map +1 -0
  61. package/build/src/hooks/useOTAConfig.d.ts +24 -0
  62. package/build/src/hooks/useOTAConfig.d.ts.map +1 -0
  63. package/build/src/hooks/useOTAConfig.js +40 -0
  64. package/build/src/hooks/useOTAConfig.js.map +1 -0
  65. package/build/src/hooks/usePushToTalk.d.ts +35 -0
  66. package/build/src/hooks/usePushToTalk.d.ts.map +1 -0
  67. package/build/src/hooks/usePushToTalk.js +101 -0
  68. package/build/src/hooks/usePushToTalk.js.map +1 -0
  69. package/build/src/hooks/useSlice.d.ts +19 -0
  70. package/build/src/hooks/useSlice.d.ts.map +1 -0
  71. package/build/src/hooks/useSlice.js +22 -0
  72. package/build/src/hooks/useSlice.js.map +1 -0
  73. package/build/src/index.d.ts +19 -3
  74. package/build/src/index.d.ts.map +1 -1
  75. package/build/src/index.js +16 -1
  76. package/build/src/index.js.map +1 -1
  77. package/build/src/module.d.ts +18 -3
  78. package/build/src/module.d.ts.map +1 -1
  79. package/build/src/module.js +77 -0
  80. package/build/src/module.js.map +1 -1
  81. package/build/src/types/index.d.ts +117 -4
  82. package/build/src/types/index.d.ts.map +1 -1
  83. package/build/src/utils/analytics.d.ts +1 -7
  84. package/build/src/utils/analytics.d.ts.map +1 -1
  85. package/build/src/utils/analytics.js +9 -0
  86. package/build/src/utils/analytics.js.map +1 -1
  87. package/build/src/utils/invokeError.d.ts +28 -0
  88. package/build/src/utils/invokeError.d.ts.map +1 -0
  89. package/build/src/utils/invokeError.js +57 -0
  90. package/build/src/utils/invokeError.js.map +1 -0
  91. package/build/src/utils/otaConfig.d.ts +9 -0
  92. package/build/src/utils/otaConfig.d.ts.map +1 -0
  93. package/build/src/utils/otaConfig.js +45 -0
  94. package/build/src/utils/otaConfig.js.map +1 -0
  95. package/build/src/utils/persistentAnalytics.d.ts +5 -0
  96. package/build/src/utils/persistentAnalytics.d.ts.map +1 -0
  97. package/build/src/utils/persistentAnalytics.js +52 -0
  98. package/build/src/utils/persistentAnalytics.js.map +1 -0
  99. package/build/src/utils/validation.d.ts +12 -0
  100. package/build/src/utils/validation.d.ts.map +1 -1
  101. package/build/src/utils/validation.js +81 -1
  102. package/build/src/utils/validation.js.map +1 -1
  103. package/build/src/web/index.d.ts +39 -0
  104. package/build/src/web/index.d.ts.map +1 -0
  105. package/build/src/web/index.js +37 -0
  106. package/build/src/web/index.js.map +1 -0
  107. package/build/src/web/module.d.ts +40 -0
  108. package/build/src/web/module.d.ts.map +1 -0
  109. package/build/src/web/module.js +46 -0
  110. package/build/src/web/module.js.map +1 -0
  111. package/ios/AppClip/AppClipHandler.swift +41 -0
  112. package/ios/Background/BackgroundIntentBridge.swift +56 -0
  113. package/ios/Entities/EntityQueryBridge.swift +40 -0
  114. package/ios/FocusFilter/FocusFilterRegistrar.swift +40 -0
  115. package/ios/LiveActivity/LiveActivityManager.swift +83 -0
  116. package/ios/PTT/PTTManager.swift +51 -0
  117. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../../src/utils/analytics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7D,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;CACjD;AAKD,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAMvD;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAEnD;AAED,wBAAgB,YAAY,IAAI,QAAQ,CAAC,eAAe,CAAC,CAExD;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,GAAG,MAAM,IAAI,CAMpF"}
1
+ {"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../../src/utils/analytics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAQhE,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAWvD;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAEnD;AAED,wBAAgB,YAAY,IAAI,QAAQ,CAAC,eAAe,CAAC,CAExD;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,GAAG,MAAM,IAAI,CAMpF"}
@@ -1,5 +1,8 @@
1
+ import { persistAnalytics } from './persistentAnalytics';
2
+ import { reportInvokeError } from './invokeError';
1
3
  const _record = { fired: {}, donated: {}, bySource: {} };
2
4
  const _globalListeners = [];
5
+ let _persistDebounce = null;
3
6
  export function trackFired(intent) {
4
7
  var _a, _b;
5
8
  _record.fired[intent.intentId] = ((_a = _record.fired[intent.intentId]) !== null && _a !== void 0 ? _a : 0) + 1;
@@ -10,6 +13,12 @@ export function trackFired(intent) {
10
13
  }
11
14
  catch { /* ignore */ }
12
15
  }
16
+ // Debounced persist — write to disk 2s after the last fire to avoid excessive I/O
17
+ if (_persistDebounce)
18
+ clearTimeout(_persistDebounce);
19
+ _persistDebounce = setTimeout(() => {
20
+ persistAnalytics(_record).catch((e) => reportInvokeError('ANALYTICS_WRITE_FAILED', e));
21
+ }, 2000);
13
22
  }
14
23
  export function trackDonated(intentId) {
15
24
  var _a;
@@ -1 +1 @@
1
- {"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../../src/utils/analytics.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,GAAoB,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AAC1E,MAAM,gBAAgB,GAA4C,EAAE,CAAC;AAErE,MAAM,UAAU,UAAU,CAAC,MAAsB;;IAC/C,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAA,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,mCAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC3E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAA,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,mCAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7E,KAAK,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;QACjC,IAAI,CAAC;YAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAgB;;IAC3C,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAA,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,mCAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAA0C;IACtE,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChC,OAAO,GAAG,EAAE;QACV,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,gBAAgB,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../../src/utils/analytics.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,OAAO,GAAoB,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AAC1E,MAAM,gBAAgB,GAA4C,EAAE,CAAC;AACrE,IAAI,gBAAgB,GAAyC,IAAI,CAAC;AAElE,MAAM,UAAU,UAAU,CAAC,MAAsB;;IAC/C,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAA,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,mCAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC3E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAA,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,mCAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7E,KAAK,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;QACjC,IAAI,CAAC;YAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAC3C,CAAC;IACD,kFAAkF;IAClF,IAAI,gBAAgB;QAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC;IACrD,gBAAgB,GAAG,UAAU,CAAC,GAAG,EAAE;QACjC,gBAAgB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC,CAAC;IACzF,CAAC,EAAE,IAAI,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAgB;;IAC3C,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAA,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,mCAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAA0C;IACtE,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChC,OAAO,GAAG,EAAE;QACV,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,gBAAgB,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,28 @@
1
+ export type InvokeErrorCode = 'NATIVE_UNAVAILABLE' | 'INTENT_PARSE_FAILED' | 'LIVE_ACTIVITY_FAILED' | 'PTT_SESSION_FAILED' | 'ENTITY_QUERY_FAILED' | 'BACKGROUND_HANDLER_TIMEOUT' | 'BACKGROUND_HANDLER_FAILED' | 'OTA_FETCH_FAILED' | 'ANALYTICS_WRITE_FAILED' | 'WIDGET_DATA_FAILED' | 'SHORTCUT_PARSE_FAILED' | 'FOCUS_FILTER_FAILED' | 'UNKNOWN';
2
+ export interface InvokeError {
3
+ code: InvokeErrorCode;
4
+ message: string;
5
+ /** Actionable fix hint shown in console.warn and available to callers */
6
+ suggestion: string;
7
+ /** Original Error object preserved for stack traces */
8
+ cause?: unknown;
9
+ }
10
+ export declare function createInvokeError(code: InvokeErrorCode, cause?: unknown): InvokeError;
11
+ type ErrorHandler = (error: InvokeError) => void;
12
+ /**
13
+ * Override the default error handler (console.warn) with your own.
14
+ * Use this to route errors to Sentry, Datadog, or a custom logger.
15
+ *
16
+ * @example
17
+ * setInvokeErrorHandler((err) => Sentry.captureMessage(`expo-invoke: ${err.code}`));
18
+ */
19
+ export declare function setInvokeErrorHandler(handler: ErrorHandler): void;
20
+ /** Reset to the default console.warn handler. Useful in tests. */
21
+ export declare function resetInvokeErrorHandler(): void;
22
+ /**
23
+ * Report an error via the global handler and return the created InvokeError.
24
+ * Never throws — always returns safely so callers can branch on the result.
25
+ */
26
+ export declare function reportInvokeError(code: InvokeErrorCode, cause?: unknown): InvokeError;
27
+ export {};
28
+ //# sourceMappingURL=invokeError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invokeError.d.ts","sourceRoot":"","sources":["../../../src/utils/invokeError.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GACvB,oBAAoB,GACpB,qBAAqB,GACrB,sBAAsB,GACtB,oBAAoB,GACpB,qBAAqB,GACrB,4BAA4B,GAC5B,2BAA2B,GAC3B,kBAAkB,GAClB,wBAAwB,GACxB,oBAAoB,GACpB,uBAAuB,GACvB,qBAAqB,GACrB,SAAS,CAAC;AAEd,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,UAAU,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AA+BD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,WAAW,CAIrF;AAED,KAAK,YAAY,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;AAOjD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAEjE;AAED,kEAAkE;AAClE,wBAAgB,uBAAuB,IAAI,IAAI,CAK9C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,WAAW,CAUrF"}
@@ -0,0 +1,57 @@
1
+ const SUGGESTIONS = {
2
+ NATIVE_UNAVAILABLE: 'Run `npx expo prebuild` and rebuild the native app. The expo-invoke native module was not found.',
3
+ INTENT_PARSE_FAILED: 'The native module emitted malformed intent data. Update expo-invoke or file a bug at https://github.com/your-org/expo-invoke/issues.',
4
+ LIVE_ACTIVITY_FAILED: 'Ensure `enableLiveActivities: true` is set in your expo-invoke config in app.json, and the device runs iOS 16.1+.',
5
+ PTT_SESSION_FAILED: 'Ensure `enablePushToTalk: true` and `pttUsageDescription` are set in your expo-invoke config, and the device runs iOS 16+.',
6
+ ENTITY_QUERY_FAILED: 'Your entity query handler threw an error. Return an empty array instead of throwing.',
7
+ BACKGROUND_HANDLER_TIMEOUT: 'Background intent handlers must resolve within 10 seconds. Make your handler faster or reduce its scope.',
8
+ BACKGROUND_HANDLER_FAILED: 'Your background intent handler threw an error. Wrap its body in try-catch.',
9
+ OTA_FETCH_FAILED: 'Could not fetch OTA config. Check the URL is correct and the device has network connectivity.',
10
+ ANALYTICS_WRITE_FAILED: 'expo-file-system may not be installed. Add `expo-file-system` to your dependencies.',
11
+ WIDGET_DATA_FAILED: 'Widget data operation failed. Ensure the App Group ID in `appGroupId` is correctly configured in app.json.',
12
+ SHORTCUT_PARSE_FAILED: 'getDynamicShortcuts returned data that could not be parsed. Run `npx expo prebuild` and rebuild.',
13
+ FOCUS_FILTER_FAILED: 'Ensure focus filters are registered in your expo-invoke config and the device runs iOS 16+.',
14
+ UNKNOWN: 'An unexpected error occurred in expo-invoke. Enable verbose logging or file a bug.',
15
+ };
16
+ export function createInvokeError(code, cause) {
17
+ const message = cause instanceof Error ? cause.message : typeof cause === 'string' ? cause : code;
18
+ return { code, message, suggestion: SUGGESTIONS[code], cause };
19
+ }
20
+ let _globalHandler = (e) => {
21
+ // eslint-disable-next-line no-console
22
+ console.warn(`[expo-invoke] ${e.code}: ${e.message}\n Fix: ${e.suggestion}`);
23
+ };
24
+ /**
25
+ * Override the default error handler (console.warn) with your own.
26
+ * Use this to route errors to Sentry, Datadog, or a custom logger.
27
+ *
28
+ * @example
29
+ * setInvokeErrorHandler((err) => Sentry.captureMessage(`expo-invoke: ${err.code}`));
30
+ */
31
+ export function setInvokeErrorHandler(handler) {
32
+ _globalHandler = handler;
33
+ }
34
+ /** Reset to the default console.warn handler. Useful in tests. */
35
+ export function resetInvokeErrorHandler() {
36
+ _globalHandler = (e) => {
37
+ // eslint-disable-next-line no-console
38
+ console.warn(`[expo-invoke] ${e.code}: ${e.message}\n Fix: ${e.suggestion}`);
39
+ };
40
+ }
41
+ /**
42
+ * Report an error via the global handler and return the created InvokeError.
43
+ * Never throws — always returns safely so callers can branch on the result.
44
+ */
45
+ export function reportInvokeError(code, cause) {
46
+ const err = createInvokeError(code, cause);
47
+ try {
48
+ _globalHandler(err);
49
+ }
50
+ catch {
51
+ // If the user's custom handler throws, fall back to console.warn so we don't crash
52
+ // eslint-disable-next-line no-console
53
+ console.warn(`[expo-invoke] ${err.code}: ${err.message}`);
54
+ }
55
+ return err;
56
+ }
57
+ //# sourceMappingURL=invokeError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invokeError.js","sourceRoot":"","sources":["../../../src/utils/invokeError.ts"],"names":[],"mappings":"AAwBA,MAAM,WAAW,GAAoC;IACnD,kBAAkB,EAChB,kGAAkG;IACpG,mBAAmB,EACjB,sIAAsI;IACxI,oBAAoB,EAClB,mHAAmH;IACrH,kBAAkB,EAChB,4HAA4H;IAC9H,mBAAmB,EACjB,sFAAsF;IACxF,0BAA0B,EACxB,0GAA0G;IAC5G,yBAAyB,EACvB,4EAA4E;IAC9E,gBAAgB,EACd,+FAA+F;IACjG,sBAAsB,EACpB,qFAAqF;IACvF,kBAAkB,EAChB,4GAA4G;IAC9G,qBAAqB,EACnB,kGAAkG;IACpG,mBAAmB,EACjB,6FAA6F;IAC/F,OAAO,EACL,oFAAoF;CACvF,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,IAAqB,EAAE,KAAe;IACtE,MAAM,OAAO,GACX,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IACpF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC;AACjE,CAAC;AAID,IAAI,cAAc,GAAiB,CAAC,CAAC,EAAE,EAAE;IACvC,sCAAsC;IACtC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,YAAY,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;AAChF,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAqB;IACzD,cAAc,GAAG,OAAO,CAAC;AAC3B,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,uBAAuB;IACrC,cAAc,GAAG,CAAC,CAAC,EAAE,EAAE;QACrB,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,YAAY,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;IAChF,CAAC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAqB,EAAE,KAAe;IACtE,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3C,IAAI,CAAC;QACH,cAAc,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,mFAAmF;QACnF,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { OTAConfig, OTAIntentPatch } from '../types';
2
+ export declare function fetchOTAConfig(url: string, cacheTtlMs?: number): Promise<OTAConfig | null>;
3
+ export declare function applyOTAConfig(config: OTAConfig): void;
4
+ export declare function getOTAConfig(): OTAConfig | null;
5
+ /** Returns true if the intent has been disabled by an OTA patch */
6
+ export declare function isIntentDisabled(intentId: string): boolean;
7
+ /** Returns the OTA patch for an intent, or undefined */
8
+ export declare function getPatch(intentId: string): OTAIntentPatch | undefined;
9
+ //# sourceMappingURL=otaConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otaConfig.d.ts","sourceRoot":"","sources":["../../../src/utils/otaConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAS1D,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,SAAuB,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAgB9G;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAQtD;AAED,wBAAgB,YAAY,IAAI,SAAS,GAAG,IAAI,CAE/C;AAED,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,wDAAwD;AACxD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAErE"}
@@ -0,0 +1,45 @@
1
+ let _current = null;
2
+ const _disabledIntents = new Set();
3
+ const DEFAULT_CACHE_TTL_MS = 60 * 60 * 1000; // 1 hour
4
+ let _lastFetchAt = 0;
5
+ let _lastFetchUrl = '';
6
+ export async function fetchOTAConfig(url, cacheTtlMs = DEFAULT_CACHE_TTL_MS) {
7
+ const now = Date.now();
8
+ if (_lastFetchUrl === url && now - _lastFetchAt < cacheTtlMs && _current) {
9
+ return _current;
10
+ }
11
+ try {
12
+ const res = await fetch(url, { headers: { 'Content-Type': 'application/json' } });
13
+ if (!res.ok)
14
+ return _current;
15
+ const config = await res.json();
16
+ _lastFetchAt = now;
17
+ _lastFetchUrl = url;
18
+ applyOTAConfig(config);
19
+ return config;
20
+ }
21
+ catch {
22
+ return _current;
23
+ }
24
+ }
25
+ export function applyOTAConfig(config) {
26
+ _current = config;
27
+ _disabledIntents.clear();
28
+ for (const patch of config.patches) {
29
+ if (patch.enabled === false) {
30
+ _disabledIntents.add(patch.intentId);
31
+ }
32
+ }
33
+ }
34
+ export function getOTAConfig() {
35
+ return _current;
36
+ }
37
+ /** Returns true if the intent has been disabled by an OTA patch */
38
+ export function isIntentDisabled(intentId) {
39
+ return _disabledIntents.has(intentId);
40
+ }
41
+ /** Returns the OTA patch for an intent, or undefined */
42
+ export function getPatch(intentId) {
43
+ return _current === null || _current === void 0 ? void 0 : _current.patches.find((p) => p.intentId === intentId);
44
+ }
45
+ //# sourceMappingURL=otaConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otaConfig.js","sourceRoot":"","sources":["../../../src/utils/otaConfig.ts"],"names":[],"mappings":"AAEA,IAAI,QAAQ,GAAqB,IAAI,CAAC;AACtC,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;AAE3C,MAAM,oBAAoB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,SAAS;AACtD,IAAI,YAAY,GAAG,CAAC,CAAC;AACrB,IAAI,aAAa,GAAG,EAAE,CAAC;AAEvB,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAW,EAAE,UAAU,GAAG,oBAAoB;IACjF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,IAAI,aAAa,KAAK,GAAG,IAAI,GAAG,GAAG,YAAY,GAAG,UAAU,IAAI,QAAQ,EAAE,CAAC;QACzE,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;QAClF,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,QAAQ,CAAC;QAC7B,MAAM,MAAM,GAAc,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC3C,YAAY,GAAG,GAAG,CAAC;QACnB,aAAa,GAAG,GAAG,CAAC;QACpB,cAAc,CAAC,MAAM,CAAC,CAAC;QACvB,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAiB;IAC9C,QAAQ,GAAG,MAAM,CAAC;IAClB,gBAAgB,CAAC,KAAK,EAAE,CAAC;IACzB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnC,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YAC5B,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,OAAO,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACxC,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,QAAQ,CAAC,QAAgB;IACvC,OAAO,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;AAChE,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { AnalyticsRecord } from '../types';
2
+ export declare function loadPersistedAnalytics(): Promise<AnalyticsRecord>;
3
+ export declare function persistAnalytics(record: AnalyticsRecord): Promise<void>;
4
+ export declare function clearPersistedAnalytics(): Promise<void>;
5
+ //# sourceMappingURL=persistentAnalytics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistentAnalytics.d.ts","sourceRoot":"","sources":["../../../src/utils/persistentAnalytics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAoBhD,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,eAAe,CAAC,CAWvE;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAO7E;AAED,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAQ7D"}
@@ -0,0 +1,52 @@
1
+ // Lazily resolved — avoids a hard dep on expo-file-system.
2
+ // If the package is not installed the module resolves to null and all calls become no-ops.
3
+ let _fsPromise = null;
4
+ async function getFS() {
5
+ if (_fsPromise !== null)
6
+ return _fsPromise;
7
+ _fsPromise = import('expo-file-system').catch(() => null);
8
+ return _fsPromise;
9
+ }
10
+ const FILE_NAME = 'expo-invoke-analytics.json';
11
+ async function filePath() {
12
+ const fs = await getFS();
13
+ if (!(fs === null || fs === void 0 ? void 0 : fs.documentDirectory))
14
+ return null;
15
+ return `${fs.documentDirectory}${FILE_NAME}`;
16
+ }
17
+ export async function loadPersistedAnalytics() {
18
+ const empty = { fired: {}, donated: {}, bySource: {} };
19
+ try {
20
+ const fs = await getFS();
21
+ const path = await filePath();
22
+ if (!fs || !path)
23
+ return empty;
24
+ const raw = await fs.readAsStringAsync(path);
25
+ return JSON.parse(raw);
26
+ }
27
+ catch {
28
+ return empty;
29
+ }
30
+ }
31
+ export async function persistAnalytics(record) {
32
+ try {
33
+ const fs = await getFS();
34
+ const path = await filePath();
35
+ if (!fs || !path)
36
+ return;
37
+ await fs.writeAsStringAsync(path, JSON.stringify(record));
38
+ }
39
+ catch { /* ignore write errors */ }
40
+ }
41
+ export async function clearPersistedAnalytics() {
42
+ try {
43
+ const fs = await getFS();
44
+ const path = await filePath();
45
+ if (!fs || !path)
46
+ return;
47
+ const empty = { fired: {}, donated: {}, bySource: {} };
48
+ await fs.writeAsStringAsync(path, JSON.stringify(empty));
49
+ }
50
+ catch { /* ignore */ }
51
+ }
52
+ //# sourceMappingURL=persistentAnalytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistentAnalytics.js","sourceRoot":"","sources":["../../../src/utils/persistentAnalytics.ts"],"names":[],"mappings":"AAEA,2DAA2D;AAC3D,2FAA2F;AAC3F,IAAI,UAAU,GAA2H,IAAI,CAAC;AAE9I,KAAK,UAAU,KAAK;IAClB,IAAI,UAAU,KAAK,IAAI;QAAE,OAAO,UAAU,CAAC;IAC3C,UAAU,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAC1D,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,SAAS,GAAG,4BAA4B,CAAC;AAE/C,KAAK,UAAU,QAAQ;IACrB,MAAM,EAAE,GAAG,MAAM,KAAK,EAAE,CAAC;IACzB,IAAI,CAAC,CAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,iBAAiB,CAAA;QAAE,OAAO,IAAI,CAAC;IACxC,OAAO,GAAG,EAAE,CAAC,iBAAiB,GAAG,SAAS,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC1C,MAAM,KAAK,GAAoB,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IACxE,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAC/B,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAoB,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAuB;IAC5D,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI;YAAE,OAAO;QACzB,MAAM,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC,CAAC,yBAAyB,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB;IAC3C,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI;YAAE,OAAO;QACzB,MAAM,KAAK,GAAoB,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QACxE,MAAM,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;AAC1B,CAAC"}
@@ -2,6 +2,8 @@ import type { InvokeConfig } from '../types';
2
2
  export interface ValidationError {
3
3
  field: string;
4
4
  message: string;
5
+ /** Actionable hint for fixing this issue */
6
+ fix?: string;
5
7
  }
6
8
  export interface ValidationResult {
7
9
  valid: boolean;
@@ -9,3 +11,13 @@ export interface ValidationResult {
9
11
  warnings: ValidationError[];
10
12
  }
11
13
  export declare function validateConfig(config: InvokeConfig): ValidationResult;
14
+ /**
15
+ * Validate plugin-level options (called during `npx expo prebuild`).
16
+ * Returns errors as thrown messages so prebuild fails with clear guidance.
17
+ */
18
+ export declare function validatePluginOptions(options: {
19
+ enablePushToTalk?: boolean;
20
+ pttUsageDescription?: string;
21
+ enableLiveActivities?: boolean;
22
+ liveActivityTypes?: string[];
23
+ }): void;
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/utils/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,UAAU,CAAC;AAE/D,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAgFD,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,gBAAgB,CA0DrE"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/utils/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAgC,MAAM,UAAU,CAAC;AAM3E,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAoFD,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,gBAAgB,CAqHrE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE;IAC7C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B,GAAG,IAAI,CAkBP"}
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.validateConfig = validateConfig;
4
+ exports.validatePluginOptions = validatePluginOptions;
5
+ const VALID_WIDGET_SIZES = [
6
+ 'small', 'medium', 'large', 'extraLarge', 'accessory', 'accessoryStandBy',
7
+ ];
4
8
  const VALID_IDENTIFIER = /^[a-z][a-z0-9_]*$/i;
5
9
  const MAX_PHRASE_LENGTH = 140;
6
10
  const MAX_IOS_SHORTCUTS = 10;
@@ -11,12 +15,14 @@ function validatePhrase(phrase, intentId) {
11
15
  errs.push({
12
16
  field: `intents[${intentId}].phrases`,
13
17
  message: `Phrase "${phrase.slice(0, 40)}..." exceeds ${MAX_PHRASE_LENGTH} characters.`,
18
+ fix: `Shorten the phrase to under ${MAX_PHRASE_LENGTH} characters.`,
14
19
  });
15
20
  }
16
21
  if (!phrase.includes('${applicationName}')) {
17
22
  errs.push({
18
23
  field: `intents[${intentId}].phrases`,
19
24
  message: `Phrase "${phrase.slice(0, 60)}" should include \${applicationName} for Siri to locate the app.`,
25
+ fix: `Add \${applicationName} to the phrase, e.g. "Create an errand in \${applicationName}".`,
20
26
  });
21
27
  }
22
28
  return errs;
@@ -28,12 +34,14 @@ function validateIntent(intent) {
28
34
  errs.push({
29
35
  field: `intents[${intent.id}].id`,
30
36
  message: `Intent id "${intent.id}" must be a valid identifier (letters, numbers, underscores).`,
37
+ fix: `Rename to use only letters, digits, and underscores. Example: "create_errand" not "create errand".`,
31
38
  });
32
39
  }
33
40
  if (!intent.phrases || intent.phrases.length === 0) {
34
41
  errs.push({
35
42
  field: `intents[${intent.id}].phrases`,
36
43
  message: `Intent "${intent.id}" must have at least one voice phrase.`,
44
+ fix: `Add a "phrases" array to this intent, e.g. ["Create an errand in \${applicationName}"].`,
37
45
  });
38
46
  }
39
47
  for (const phrase of (_a = intent.phrases) !== null && _a !== void 0 ? _a : []) {
@@ -71,7 +79,7 @@ function validateIntent(intent) {
71
79
  return errs;
72
80
  }
73
81
  function validateConfig(config) {
74
- var _a;
82
+ var _a, _b, _c, _d, _e, _f;
75
83
  const errors = [];
76
84
  const warnings = [];
77
85
  if (!config.intents || config.intents.length === 0) {
@@ -119,10 +127,82 @@ function validateConfig(config) {
119
127
  message: `${shortcutIntents.length} intents with shortTitle — Android allows max ${MAX_ANDROID_SHORTCUTS} launcher shortcuts.`,
120
128
  });
121
129
  }
130
+ // Validate widget sizes
131
+ for (const widget of (_b = config.widgets) !== null && _b !== void 0 ? _b : []) {
132
+ for (const size of widget.sizes) {
133
+ if (!VALID_WIDGET_SIZES.includes(size)) {
134
+ errors.push({
135
+ field: `widgets[${widget.id}].sizes`,
136
+ message: `Invalid widget size "${size}". Valid sizes: ${VALID_WIDGET_SIZES.join(', ')}.`,
137
+ });
138
+ }
139
+ }
140
+ }
141
+ // Validate entity references
142
+ const entityIds = new Set(((_c = config.entities) !== null && _c !== void 0 ? _c : []).map((e) => e.id));
143
+ for (const intent of config.intents) {
144
+ for (const param of (_d = intent.parameters) !== null && _d !== void 0 ? _d : []) {
145
+ if (param.type === 'entity' && !entityIds.has(param.entityId)) {
146
+ errors.push({
147
+ field: `intents[${intent.id}].parameters`,
148
+ message: `Parameter "${param.name}" references unknown entity "${param.entityId}". Add it to the entities array.`,
149
+ fix: `Add an entity with id "${param.entityId}" to the top-level "entities" array in your expo-invoke config.`,
150
+ });
151
+ }
152
+ }
153
+ }
154
+ // Validate entity queryIntentId references (reuse intentIds set built above)
155
+ for (const entity of (_e = config.entities) !== null && _e !== void 0 ? _e : []) {
156
+ if (entity.queryIntentId && !intentIds.has(entity.queryIntentId)) {
157
+ errors.push({
158
+ field: `entities[${entity.id}].queryIntentId`,
159
+ message: `Entity "${entity.id}" references unknown intent "${entity.queryIntentId}" in queryIntentId.`,
160
+ fix: `Add an intent with id "${entity.queryIntentId}" or correct the entity's queryIntentId field.`,
161
+ });
162
+ }
163
+ }
164
+ // Validate slice intentId references
165
+ for (const slice of (_f = config.slices) !== null && _f !== void 0 ? _f : []) {
166
+ if (slice.intentId && !intentIds.has(slice.intentId)) {
167
+ errors.push({
168
+ field: `slices[${slice.id}].intentId`,
169
+ message: `Slice "${slice.id}" references unknown intent "${slice.intentId}".`,
170
+ fix: `Add an intent with id "${slice.intentId}" or correct the slice's intentId field.`,
171
+ });
172
+ }
173
+ }
174
+ // Validate intent IDs — catch spaces or special chars that break codegen
175
+ for (const intent of config.intents) {
176
+ if (/\s/.test(intent.id)) {
177
+ errors.push({
178
+ field: `intents[${intent.id}].id`,
179
+ message: `Intent id "${intent.id}" contains whitespace.`,
180
+ fix: `Use underscores instead of spaces: "${intent.id.replace(/\s+/g, '_')}".`,
181
+ });
182
+ }
183
+ }
122
184
  return {
123
185
  valid: errors.length === 0,
124
186
  errors,
125
187
  warnings,
126
188
  };
127
189
  }
190
+ /**
191
+ * Validate plugin-level options (called during `npx expo prebuild`).
192
+ * Returns errors as thrown messages so prebuild fails with clear guidance.
193
+ */
194
+ function validatePluginOptions(options) {
195
+ if (options.enablePushToTalk && !options.pttUsageDescription) {
196
+ throw new Error(`[expo-invoke] \`enablePushToTalk\` is true but \`pttUsageDescription\` is missing.\n` +
197
+ `Fix: Add a \`pttUsageDescription\` string to your expo-invoke plugin config in app.json.\n` +
198
+ `Example: ["expo-invoke", { "enablePushToTalk": true, "pttUsageDescription": "For walkie-talkie features." }]`);
199
+ }
200
+ if (options.enableLiveActivities && (!options.liveActivityTypes || options.liveActivityTypes.length === 0)) {
201
+ // Warning only — Live Activities can still work without a type list
202
+ // eslint-disable-next-line no-console
203
+ console.warn(`[expo-invoke] \`enableLiveActivities\` is true but \`liveActivityTypes\` is empty.\n` +
204
+ `Fix: Add the ActivityAttributes Swift class names to \`liveActivityTypes\`.\n` +
205
+ `Example: ["expo-invoke", { "enableLiveActivities": true, "liveActivityTypes": ["ErrandActivityAttributes"] }]`);
206
+ }
207
+ }
128
208
  //# sourceMappingURL=validation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/utils/validation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/utils/validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ export * from './module';
2
+ export { useInvokeInit } from '../hooks/useInvokeInit';
3
+ export { useInvoke } from '../hooks/useInvoke';
4
+ export { useDonation } from '../hooks/useDonation';
5
+ export { useShortcuts } from '../hooks/useShortcuts';
6
+ export { useWidgetData } from '../hooks/useWidgetData';
7
+ export { useSpotlight } from '../hooks/useSpotlight';
8
+ export { useQuickTile } from '../hooks/useQuickTile';
9
+ export { useHandoff } from '../hooks/useHandoff';
10
+ export { useLiveActivityIntent } from '../hooks/useLiveActivityIntent';
11
+ export { useInvokeHistory } from '../hooks/useInvokeHistory';
12
+ export { useInvokeAnalytics } from '../hooks/useInvokeAnalytics';
13
+ export { useAddToSiri } from '../hooks/useAddToSiri';
14
+ export { useFocusFilter } from '../hooks/useFocusFilter';
15
+ export { useInvokeQueue } from '../hooks/useInvokeQueue';
16
+ export { useLiveActivity } from '../hooks/useLiveActivity';
17
+ export { useFocusFilterState } from '../hooks/useFocusFilterState';
18
+ export { useBackgroundIntent } from '../hooks/useBackgroundIntent';
19
+ export { useEntityQuery } from '../hooks/useEntityQuery';
20
+ export { usePushToTalk } from '../hooks/usePushToTalk';
21
+ export { useSlice } from '../hooks/useSlice';
22
+ export { useOTAConfig } from '../hooks/useOTAConfig';
23
+ export { onIntentFired, onIntentFired as onInvoke } from '../utils/analytics';
24
+ export { AddToSiriButton } from '../components/AddToSiriButton';
25
+ export { ShortcutChip } from '../components/ShortcutChip';
26
+ export { InvokeDebugger } from '../components/InvokeDebugger';
27
+ export { mockInvoke, simulateColdStart, simulateWarmStart, createMockIntent } from '../utils/testing';
28
+ export { fetchOTAConfig, applyOTAConfig, getOTAConfig } from '../utils/otaConfig';
29
+ export { loadPersistedAnalytics, persistAnalytics, clearPersistedAnalytics } from '../utils/persistentAnalytics';
30
+ export type { InvokeSource, IntentDefinition, IntentParameter, ParameterType, ParameterValue, ResolvedIntent, DonationInput, ShortcutDefinition, SpotlightItem, WidgetDefinition, WidgetAction, WidgetSize, WidgetDataValue, NotificationCategoryDefinition, NotificationActionDefinition, LocationParameter, PersonParameter, EnumOption, InvokeConfig, AppEntityDefinition, AppEntityProperty, BackgroundIntentResult, LiveActivityConfig, LiveActivityAlertConfig, LiveActivityInfo, FocusFilterDefinition, FocusFilterParameter, AppClipDefinition, SliceDefinition, PTTSessionState, OTAIntentPatch, OTAConfig, AnalyticsRecord, FocusMode, } from '../types';
31
+ export type { UseInvokeOptions, UseInvokeResult } from '../hooks/useInvoke';
32
+ export type { UseShortcutsResult } from '../hooks/useShortcuts';
33
+ export type { UseSpotlightResult } from '../hooks/useSpotlight';
34
+ export type { UseQuickTileResult } from '../hooks/useQuickTile';
35
+ export type { UseHandoffResult } from '../hooks/useHandoff';
36
+ export type { InvokeAnalytics } from '../hooks/useInvokeAnalytics';
37
+ export type { UseLiveActivityIntentResult } from '../hooks/useLiveActivityIntent';
38
+ export type { UseWidgetDataResult } from '../hooks/useWidgetData';
39
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/web/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ // Web entry point — re-exports all native functions as no-ops so web builds don't crash.
2
+ // Bundlers that respect the "browser" exports field in package.json use this file.
3
+ export * from './module';
4
+ // Hooks are platform-agnostic (they read from the action store / no-op module above)
5
+ export { useInvokeInit } from '../hooks/useInvokeInit';
6
+ export { useInvoke } from '../hooks/useInvoke';
7
+ export { useDonation } from '../hooks/useDonation';
8
+ export { useShortcuts } from '../hooks/useShortcuts';
9
+ export { useWidgetData } from '../hooks/useWidgetData';
10
+ export { useSpotlight } from '../hooks/useSpotlight';
11
+ export { useQuickTile } from '../hooks/useQuickTile';
12
+ export { useHandoff } from '../hooks/useHandoff';
13
+ export { useLiveActivityIntent } from '../hooks/useLiveActivityIntent';
14
+ export { useInvokeHistory } from '../hooks/useInvokeHistory';
15
+ export { useInvokeAnalytics } from '../hooks/useInvokeAnalytics';
16
+ export { useAddToSiri } from '../hooks/useAddToSiri';
17
+ export { useFocusFilter } from '../hooks/useFocusFilter';
18
+ export { useInvokeQueue } from '../hooks/useInvokeQueue';
19
+ export { useLiveActivity } from '../hooks/useLiveActivity';
20
+ export { useFocusFilterState } from '../hooks/useFocusFilterState';
21
+ export { useBackgroundIntent } from '../hooks/useBackgroundIntent';
22
+ export { useEntityQuery } from '../hooks/useEntityQuery';
23
+ export { usePushToTalk } from '../hooks/usePushToTalk';
24
+ export { useSlice } from '../hooks/useSlice';
25
+ export { useOTAConfig } from '../hooks/useOTAConfig';
26
+ // Analytics
27
+ export { onIntentFired, onIntentFired as onInvoke } from '../utils/analytics';
28
+ // Components — all render null gracefully on web
29
+ export { AddToSiriButton } from '../components/AddToSiriButton';
30
+ export { ShortcutChip } from '../components/ShortcutChip';
31
+ export { InvokeDebugger } from '../components/InvokeDebugger';
32
+ // Testing utilities
33
+ export { mockInvoke, simulateColdStart, simulateWarmStart, createMockIntent } from '../utils/testing';
34
+ // OTA / analytics utilities
35
+ export { fetchOTAConfig, applyOTAConfig, getOTAConfig } from '../utils/otaConfig';
36
+ export { loadPersistedAnalytics, persistAnalytics, clearPersistedAnalytics } from '../utils/persistentAnalytics';
37
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/web/index.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,mFAAmF;AAEnF,cAAc,UAAU,CAAC;AAEzB,qFAAqF;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,YAAY;AACZ,OAAO,EAAE,aAAa,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9E,iDAAiD;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,oBAAoB;AACpB,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEtG,4BAA4B;AAC5B,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,40 @@
1
+ import type { ResolvedIntent, DonationInput, ShortcutDefinition, SpotlightItem, WidgetDataValue, InvokeConfig, FocusMode, LiveActivityConfig, LiveActivityInfo, BackgroundIntentResult, PTTSessionState, AnalyticsRecord, ParameterValue } from '../types';
2
+ import type { EventSubscription } from 'expo-modules-core';
3
+ export declare function configure(_config: InvokeConfig): void;
4
+ export declare function getInitialIntent(): ResolvedIntent | null;
5
+ export declare function addIntentListener(_listener: (intent: ResolvedIntent) => void): EventSubscription;
6
+ export declare function donateAction(_input: DonationInput): void;
7
+ export declare function deleteAction(_intentId: string): void;
8
+ export declare function deleteAllActions(): void;
9
+ export declare function setDynamicShortcuts(_shortcuts: ShortcutDefinition[]): void;
10
+ export declare function getDynamicShortcuts(): ShortcutDefinition[];
11
+ export declare function clearDynamicShortcuts(): void;
12
+ export declare function indexSpotlightItems(_items: SpotlightItem[]): void;
13
+ export declare function deindexSpotlightItems(_ids: string[]): void;
14
+ export declare function setWidgetData(_key: string, _value: WidgetDataValue | Record<string, WidgetDataValue>): void;
15
+ export declare function getWidgetData(_key: string): WidgetDataValue | Record<string, WidgetDataValue> | null;
16
+ export declare function reloadWidget(_widgetKind: string | null): void;
17
+ export declare function updateQuickTile(_state: string, _label: string): void;
18
+ export declare function advertiseHandoff(_intentId: string, _params?: Record<string, unknown>): void;
19
+ export declare function stopHandoff(): void;
20
+ export declare function setLiveActivityIntent(_activityId: string, _intentId: string): void;
21
+ export declare function addIntentToSiri(_intentId: string): void;
22
+ export declare function getFocusMode(): FocusMode;
23
+ export declare function reportFocusFilterResult(_filterId: string, _success: boolean): void;
24
+ export declare function provideEntityResults(_entityId: string, _results: Record<string, ParameterValue>[]): void;
25
+ export declare function registerBackgroundHandler(_intentId: string): void;
26
+ export declare function reportBackgroundResult(_intentId: string, _result: BackgroundIntentResult): void;
27
+ export declare function startLiveActivity(_config: LiveActivityConfig): Promise<string>;
28
+ export declare function updateLiveActivity(_activityId: string, _contentState: Record<string, ParameterValue>): void;
29
+ export declare function endLiveActivity(_activityId: string, _finalState?: Record<string, ParameterValue>): void;
30
+ export declare function getLiveActivities(): Promise<LiveActivityInfo[]>;
31
+ export declare function startPTTSession(_channelId: string, _participantName?: string): Promise<void>;
32
+ export declare function endPTTSession(_channelId: string): Promise<void>;
33
+ export declare function setTransmitting(_channelId: string, _isTransmitting: boolean): Promise<void>;
34
+ export declare function getPTTState(_channelId: string): Promise<PTTSessionState>;
35
+ export declare function notifySliceChange(_sliceId: string): void;
36
+ export declare function getAnalyticsPersisted(): Promise<AnalyticsRecord>;
37
+ export declare function clearAnalyticsPersisted(): Promise<void>;
38
+ export type { FocusMode, ParameterValue } from '../types';
39
+ export type QuickTileState = 'active' | 'inactive' | 'unavailable';
40
+ //# sourceMappingURL=module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/web/module.ts"],"names":[],"mappings":"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"}