@linkforty/core 1.29.0 → 1.30.1
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.
- package/README.md +6 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/routes/redirect.d.ts +21 -1
- package/dist/routes/redirect.d.ts.map +1 -1
- package/dist/routes/redirect.js +43 -9
- package/dist/routes/redirect.js.map +1 -1
- package/dist/routes/redirect.store-url.test.d.ts +2 -0
- package/dist/routes/redirect.store-url.test.d.ts.map +1 -0
- package/dist/routes/redirect.store-url.test.js +144 -0
- package/dist/routes/redirect.store-url.test.js.map +1 -0
- package/dist/routes/redirect.web-link.test.d.ts +2 -0
- package/dist/routes/redirect.web-link.test.d.ts.map +1 -0
- package/dist/routes/{redirect.web-only.test.js → redirect.web-link.test.js} +30 -14
- package/dist/routes/redirect.web-link.test.js.map +1 -0
- package/dist/routes/templates.d.ts.map +1 -1
- package/dist/routes/templates.js +0 -4
- package/dist/routes/templates.js.map +1 -1
- package/dist/routes/well-known.d.ts.map +1 -1
- package/dist/routes/well-known.js +21 -20
- package/dist/routes/well-known.js.map +1 -1
- package/dist/types/index.d.ts +0 -2
- package/dist/types/index.d.ts.map +1 -1
- package/llms.txt +3 -0
- package/package.json +1 -1
- package/dist/lib/app-association.d.ts +0 -64
- package/dist/lib/app-association.d.ts.map +0 -1
- package/dist/lib/app-association.js +0 -97
- package/dist/lib/app-association.js.map +0 -1
- package/dist/lib/app-association.test.d.ts +0 -2
- package/dist/lib/app-association.test.d.ts.map +0 -1
- package/dist/lib/app-association.test.js +0 -59
- package/dist/lib/app-association.test.js.map +0 -1
- package/dist/routes/redirect.web-only.test.d.ts +0 -2
- package/dist/routes/redirect.web-only.test.d.ts.map +0 -1
- package/dist/routes/redirect.web-only.test.js.map +0 -1
- package/dist/routes/well-known.test.d.ts +0 -2
- package/dist/routes/well-known.test.d.ts.map +0 -1
- package/dist/routes/well-known.test.js +0 -49
- package/dist/routes/well-known.test.js.map +0 -1
package/README.md
CHANGED
|
@@ -384,6 +384,12 @@ interface RedirectRouteOptions {
|
|
|
384
384
|
// cookies or identifiers. Unset means the page sends nothing.
|
|
385
385
|
beaconUrl?: string;
|
|
386
386
|
};
|
|
387
|
+
// Return true when the request is on a host reserved for web links. Every
|
|
388
|
+
// link on it then sends every device to its web destination with a plain
|
|
389
|
+
// 302: no launchpad page, no scheme attempt, no store. Don't serve
|
|
390
|
+
// association files on that host, so no installed app can claim its URLs.
|
|
391
|
+
// A hook that throws is logged and treated as false.
|
|
392
|
+
isWebLinkRequest?: (request) => Promise<boolean> | boolean;
|
|
387
393
|
}
|
|
388
394
|
```
|
|
389
395
|
|
package/dist/index.d.ts
CHANGED
|
@@ -35,7 +35,6 @@ export * from './lib/fingerprint.js';
|
|
|
35
35
|
export * from './lib/webhook.js';
|
|
36
36
|
export * from './lib/link-safety.js';
|
|
37
37
|
export * from './lib/launchpad.js';
|
|
38
|
-
export * from './lib/app-association.js';
|
|
39
38
|
export * from './lib/event-emitter.js';
|
|
40
39
|
export * from './types/index.js';
|
|
41
40
|
export type { RedirectRouteOptions } from './routes/redirect.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAGnD,OAAO,EAAsB,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAkB,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAUjF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,KAAK,CAAC,EAAE;QACN,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,IAAI,CAAC,EAAE;QACL,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;KAC3B,CAAC;IACF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oJAAoJ;IACpJ,UAAU,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC9B,gFAAgF;IAChF,QAAQ,CAAC,EAAE,oBAAoB,CAAC;CACjC;AAED;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAAC,OAAO,GAAE,aAAkB,kTAiC7D;AAGD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAGnD,OAAO,EAAsB,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAkB,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAUjF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,KAAK,CAAC,EAAE;QACN,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,IAAI,CAAC,EAAE;QACL,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;KAC3B,CAAC;IACF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oJAAoJ;IACpJ,UAAU,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC9B,gFAAgF;IAChF,QAAQ,CAAC,EAAE,oBAAoB,CAAC;CACjC;AAED;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAAC,OAAO,GAAE,aAAkB,kTAiC7D;AAGD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -57,7 +57,6 @@ export * from './lib/fingerprint.js';
|
|
|
57
57
|
export * from './lib/webhook.js';
|
|
58
58
|
export * from './lib/link-safety.js';
|
|
59
59
|
export * from './lib/launchpad.js';
|
|
60
|
-
export * from './lib/app-association.js';
|
|
61
60
|
export * from './lib/event-emitter.js';
|
|
62
61
|
export * from './types/index.js';
|
|
63
62
|
export { redirectRoutes, linkRoutes, analyticsRoutes, sdkRoutes, webhookRoutes, templateRoutes, qrRoutes, previewRoutes, debugRoutes, wellKnownRoutes, healthRoutes } from './routes/index.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAA4B,MAAM,SAAS,CAAC;AACnD,OAAO,IAAI,MAAM,eAAe,CAAC;AACjC,OAAO,KAAK,MAAM,gBAAgB,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAmB,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,cAAc,EAA6B,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAoBlD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAAyB,EAAE;IAC5D,MAAM,OAAO,GAAG,OAAO,CAAC;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;QAC5D,UAAU,EAAE,OAAO,CAAC,UAAU;KAC/B,CAAC,CAAC;IAEH,OAAO;IACP,MAAM,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;QAC3B,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,IAAI,GAAG;KACpC,CAAC,CAAC;IAEH,mBAAmB;IACnB,IAAI,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE;YAC5B,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG;SACvB,CAAC,CAAC;IACL,CAAC;IAED,WAAW;IACX,MAAM,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE3C,SAAS;IACT,MAAM,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACrC,MAAM,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACxC,MAAM,OAAO,CAAC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAC/D,MAAM,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACxC,MAAM,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACtC,MAAM,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvC,MAAM,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEjC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gCAAgC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAA4B,MAAM,SAAS,CAAC;AACnD,OAAO,IAAI,MAAM,eAAe,CAAC;AACjC,OAAO,KAAK,MAAM,gBAAgB,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAmB,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,cAAc,EAA6B,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAoBlD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAAyB,EAAE;IAC5D,MAAM,OAAO,GAAG,OAAO,CAAC;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;QAC5D,UAAU,EAAE,OAAO,CAAC,UAAU;KAC/B,CAAC,CAAC;IAEH,OAAO;IACP,MAAM,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;QAC3B,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,IAAI,GAAG;KACpC,CAAC,CAAC;IAEH,mBAAmB;IACnB,IAAI,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE;YAC5B,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG;SACvB,CAAC,CAAC;IACL,CAAC;IAED,WAAW;IACX,MAAM,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE3C,SAAS;IACT,MAAM,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACrC,MAAM,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACxC,MAAM,OAAO,CAAC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAC/D,MAAM,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACxC,MAAM,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACtC,MAAM,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvC,MAAM,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEjC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gCAAgC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AAEjC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FastifyInstance } from 'fastify';
|
|
1
|
+
import { FastifyInstance, FastifyRequest } from 'fastify';
|
|
2
2
|
import { type LaunchpadContent, type LaunchpadSettings } from '../lib/launchpad.js';
|
|
3
3
|
/**
|
|
4
4
|
* Detect iOS in-app browsers where Universal Links don't fire.
|
|
@@ -30,6 +30,17 @@ export declare function pickMobileFallbackUrl(device: 'ios' | 'android', userAge
|
|
|
30
30
|
url: string;
|
|
31
31
|
reason: string;
|
|
32
32
|
} | null;
|
|
33
|
+
/**
|
|
34
|
+
* True when `url` is an App Store or Google Play URL.
|
|
35
|
+
*
|
|
36
|
+
* A store URL is sent exactly as configured, never decorated like a website.
|
|
37
|
+
* Google Play identifies the app by its own `?id=`, so appending the link's
|
|
38
|
+
* deep-link parameters let a parameter named `id` replace the app's id and
|
|
39
|
+
* Play answered 404. Neither store passes query parameters on to the app, so
|
|
40
|
+
* nothing is lost by leaving them off: after install, the deep-link data
|
|
41
|
+
* reaches the app through deferred deep linking, not through the store URL.
|
|
42
|
+
*/
|
|
43
|
+
export declare function isAppStoreUrl(url: string): boolean;
|
|
33
44
|
export interface RedirectRouteOptions {
|
|
34
45
|
/**
|
|
35
46
|
* Absolute URL of an abuse-reporting page. When set, the interstitial warning
|
|
@@ -54,6 +65,15 @@ export interface RedirectRouteOptions {
|
|
|
54
65
|
*/
|
|
55
66
|
beaconUrl?: string;
|
|
56
67
|
};
|
|
68
|
+
/**
|
|
69
|
+
* Whether this request arrived on a host reserved for web links. On such a
|
|
70
|
+
* host every link sends every device to its web destination with a plain
|
|
71
|
+
* 302: no Launchpad page, no scheme attempt, no store. The deployment owns
|
|
72
|
+
* the rule (a host list, a database flag); the redirect only asks. Pair it
|
|
73
|
+
* with not serving association files on that host, so no installed app can
|
|
74
|
+
* claim its URLs either. A hook that throws is logged and treated as false.
|
|
75
|
+
*/
|
|
76
|
+
isWebLinkRequest?: (request: FastifyRequest) => Promise<boolean> | boolean;
|
|
57
77
|
}
|
|
58
78
|
export declare function redirectRoutes(fastify: FastifyInstance, options?: RedirectRouteOptions): Promise<void>;
|
|
59
79
|
//# sourceMappingURL=redirect.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redirect.d.ts","sourceRoot":"","sources":["../../src/routes/redirect.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"redirect.d.ts","sourceRoot":"","sources":["../../src/routes/redirect.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAgB1D,OAAO,EASL,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACvB,MAAM,qBAAqB,CAAC;AAK7B;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAa5D;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAiBhE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,KAAK,GAAG,SAAS,EACzB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,cAAc,EAAE,MAAM,GAAG,IAAI,GAC5B;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAexC;AAKD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAMlD;AAmID,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,SAAS,CAAC,EAAE;QACV;;;;WAIG;QACH,cAAc,CAAC,EAAE,CACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,QAAQ,EAAE,iBAAiB,KACxB,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,gBAAgB,GAAG,IAAI,CAAC;QAChE;;;;WAIG;QACH,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF;;;;;;;OAOG;IACH,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CAC5E;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,eAAe,EACxB,OAAO,GAAE,oBAAyB,iBAmvBnC"}
|
package/dist/routes/redirect.js
CHANGED
|
@@ -7,7 +7,6 @@ import { emitClickEvent } from '../lib/event-emitter.js';
|
|
|
7
7
|
import { classifyBot, edgeBotSignal } from '../lib/bot-detection.js';
|
|
8
8
|
import { evaluateLinkSafetyDecision, blockCauseIsAbuse, generateWarningLinkHTML, generateBlockedLinkHTML, createOwnerSuspensionSelect, escapeHtml, safeSchemeHref, } from '../lib/link-safety.js';
|
|
9
9
|
import { createLaunchpadNonce, defaultLaunchpadContent, launchpadContentSecurityPolicy, readLaunchpadLinkMode, readLaunchpadSettings, renderLaunchpadPage, shouldServeLaunchpadOnDesktop, shouldServeLaunchpadOnMobile, } from '../lib/launchpad.js';
|
|
10
|
-
import { isWebOnlyTemplate } from '../lib/app-association.js';
|
|
11
10
|
/** Longest query string the Launchpad page carries into its QR code and og:url. */
|
|
12
11
|
const MAX_PAGE_URL_SEARCH = 512;
|
|
13
12
|
/**
|
|
@@ -86,6 +85,26 @@ export function pickMobileFallbackUrl(device, userAgent, iosUrl, androidUrl, web
|
|
|
86
85
|
}
|
|
87
86
|
return null;
|
|
88
87
|
}
|
|
88
|
+
/** Hosts whose URLs are app store listings, not websites. */
|
|
89
|
+
const APP_STORE_HOSTS = new Set(['play.google.com', 'apps.apple.com', 'itunes.apple.com']);
|
|
90
|
+
/**
|
|
91
|
+
* True when `url` is an App Store or Google Play URL.
|
|
92
|
+
*
|
|
93
|
+
* A store URL is sent exactly as configured, never decorated like a website.
|
|
94
|
+
* Google Play identifies the app by its own `?id=`, so appending the link's
|
|
95
|
+
* deep-link parameters let a parameter named `id` replace the app's id and
|
|
96
|
+
* Play answered 404. Neither store passes query parameters on to the app, so
|
|
97
|
+
* nothing is lost by leaving them off: after install, the deep-link data
|
|
98
|
+
* reaches the app through deferred deep linking, not through the store URL.
|
|
99
|
+
*/
|
|
100
|
+
export function isAppStoreUrl(url) {
|
|
101
|
+
try {
|
|
102
|
+
return APP_STORE_HOSTS.has(new URL(url).hostname.toLowerCase());
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
89
108
|
/**
|
|
90
109
|
* The URI-scheme URL that opens this link's content in the app, with the
|
|
91
110
|
* link's deep-link parameters appended as a query string. Shared by the
|
|
@@ -381,6 +400,17 @@ export async function redirectRoutes(fastify, options = {}) {
|
|
|
381
400
|
return reply.status(404).send({ error: 'Link not found' });
|
|
382
401
|
}
|
|
383
402
|
}
|
|
403
|
+
// Asked once per click: the async click record and the response below
|
|
404
|
+
// must agree on where the visitor was sent.
|
|
405
|
+
let isWebLink = false;
|
|
406
|
+
if (options.isWebLinkRequest) {
|
|
407
|
+
try {
|
|
408
|
+
isWebLink = (await options.isWebLinkRequest(request)) === true;
|
|
409
|
+
}
|
|
410
|
+
catch (err) {
|
|
411
|
+
fastify.log.error({ err, shortCode }, 'isWebLinkRequest threw; treating the request as an app-link host');
|
|
412
|
+
}
|
|
413
|
+
}
|
|
384
414
|
// Generate the click id up front (rather than letting the DB default it on
|
|
385
415
|
// insert) so the synchronous redirect below can carry it on the destination
|
|
386
416
|
// URL while the click row is still written asynchronously with the same id.
|
|
@@ -468,10 +498,10 @@ export async function redirectRoutes(fastify, options = {}) {
|
|
|
468
498
|
const webFallback = link.web_fallback_url || tplSettings.defaultWebFallbackUrl || oAppConfig.webFallbackUrl || null;
|
|
469
499
|
let redirectUrl = link.original_url;
|
|
470
500
|
let redirectReason = 'original_url';
|
|
471
|
-
if (
|
|
472
|
-
// Mirrors the web-
|
|
501
|
+
if (isWebLink) {
|
|
502
|
+
// Mirrors the web-link 302 in the main handler below.
|
|
473
503
|
redirectUrl = webFallback || link.original_url;
|
|
474
|
-
redirectReason = '
|
|
504
|
+
redirectReason = 'web_link_host';
|
|
475
505
|
}
|
|
476
506
|
else if (deviceType === 'ios') {
|
|
477
507
|
if (link.ios_universal_link) {
|
|
@@ -591,6 +621,10 @@ export async function redirectRoutes(fastify, options = {}) {
|
|
|
591
621
|
* URL as one who was redirected.
|
|
592
622
|
*/
|
|
593
623
|
const decorateWebDestination = (destination) => {
|
|
624
|
+
// A store listing is not a website: send it exactly as configured. See
|
|
625
|
+
// isAppStoreUrl() for why decorating it broke Google Play.
|
|
626
|
+
if (isAppStoreUrl(destination))
|
|
627
|
+
return destination;
|
|
594
628
|
// For HTTP(S) URLs, add UTM parameters
|
|
595
629
|
let url = buildRedirectUrl(destination, link.utm_parameters) || destination;
|
|
596
630
|
// Add deep link parameters as query params
|
|
@@ -676,12 +710,12 @@ export async function redirectRoutes(fastify, options = {}) {
|
|
|
676
710
|
}));
|
|
677
711
|
};
|
|
678
712
|
/**
|
|
679
|
-
* Web-
|
|
680
|
-
*
|
|
681
|
-
*
|
|
682
|
-
*
|
|
713
|
+
* Web-link host (`isWebLinkRequest`): every device gets the destination a
|
|
714
|
+
* desktop visitor gets, as a plain 302 — no Launchpad page, no scheme
|
|
715
|
+
* interstitial, no store. Whatever app fields the link carries are for its
|
|
716
|
+
* other hosts.
|
|
683
717
|
*/
|
|
684
|
-
if (
|
|
718
|
+
if (isWebLink) {
|
|
685
719
|
const webDestination = webFallbackUrl || link.original_url;
|
|
686
720
|
if (webDestination)
|
|
687
721
|
return reply.redirect(302, decorateWebDestination(webDestination));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redirect.js","sourceRoot":"","sources":["../../src/routes/redirect.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"redirect.js","sourceRoot":"","sources":["../../src/routes/redirect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redirect.store-url.test.d.ts","sourceRoot":"","sources":["../../src/routes/redirect.store-url.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Store URLs leave the redirect exactly as configured.
|
|
3
|
+
*
|
|
4
|
+
* The destination decorator adds UTM tags, deep-link parameters and the
|
|
5
|
+
* opt-in click id — right for a website, wrong for a store listing. Google
|
|
6
|
+
* Play identifies the app by `?id=`, so a deep-link parameter named `id`
|
|
7
|
+
* replaced it and Play answered 404 to every Android visitor sent to install.
|
|
8
|
+
*
|
|
9
|
+
* The app-open guard cases matter as much as the fix: an in-app browser must
|
|
10
|
+
* still be sent to the web fallback (where a Universal Link / App Link gets a
|
|
11
|
+
* second chance to open an installed app), decorated as before.
|
|
12
|
+
*
|
|
13
|
+
* Follows redirect.launchpad.test.ts: the real `redirectRoutes` plugin through
|
|
14
|
+
* `fastify.inject()`, only the data layer mocked.
|
|
15
|
+
*/
|
|
16
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
17
|
+
import Fastify from 'fastify';
|
|
18
|
+
import { redirectRoutes, isAppStoreUrl } from './redirect.js';
|
|
19
|
+
const query = vi.fn();
|
|
20
|
+
vi.mock('../lib/database.js', () => ({
|
|
21
|
+
db: {
|
|
22
|
+
query: (...args) => query(...args),
|
|
23
|
+
},
|
|
24
|
+
}));
|
|
25
|
+
const DESKTOP_UA = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0 Safari/537.36';
|
|
26
|
+
const IPHONE_UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1';
|
|
27
|
+
const ANDROID_CHROME_UA = 'Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0 Mobile Safari/537.36';
|
|
28
|
+
const ANDROID_INSTAGRAM_UA = 'Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Mobile Safari/537.36 Instagram 320.0.0.0';
|
|
29
|
+
const PLAY = 'https://play.google.com/store/apps/details?id=com.example.app';
|
|
30
|
+
const APP_STORE = 'https://apps.apple.com/app/id1234567890';
|
|
31
|
+
const WEB = 'https://example.com/event';
|
|
32
|
+
/** A link carrying everything the decorator would add, including an `id` parameter. */
|
|
33
|
+
function linkRow(overrides = {}) {
|
|
34
|
+
return {
|
|
35
|
+
id: '00000000-0000-0000-0000-0000000000aa',
|
|
36
|
+
short_code: 'abc123',
|
|
37
|
+
title: null,
|
|
38
|
+
description: null,
|
|
39
|
+
og_title: null,
|
|
40
|
+
og_description: null,
|
|
41
|
+
og_image_url: null,
|
|
42
|
+
original_url: null,
|
|
43
|
+
web_fallback_url: null,
|
|
44
|
+
ios_app_store_url: APP_STORE,
|
|
45
|
+
android_app_store_url: PLAY,
|
|
46
|
+
ios_universal_link: null,
|
|
47
|
+
android_app_link: null,
|
|
48
|
+
app_scheme: null,
|
|
49
|
+
deep_link_path: null,
|
|
50
|
+
launchpad_mode: 'inherit',
|
|
51
|
+
is_active: true,
|
|
52
|
+
warn_at: null,
|
|
53
|
+
owner_suspended_at: null,
|
|
54
|
+
expires_at: null,
|
|
55
|
+
targeting_rules: null,
|
|
56
|
+
template_settings: null,
|
|
57
|
+
org_settings: null,
|
|
58
|
+
utm_parameters: { source: 'newsletter', medium: 'email' },
|
|
59
|
+
deep_link_parameters: { id: 'evt_42', route: 'EVENT_VIEW' },
|
|
60
|
+
append_click_id: true,
|
|
61
|
+
...overrides,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function mockDb(row) {
|
|
65
|
+
query.mockReset();
|
|
66
|
+
query.mockImplementation(async (sql) => {
|
|
67
|
+
if (/information_schema\.columns/i.test(sql))
|
|
68
|
+
return { rows: [{ '?column?': 1 }], rowCount: 1 };
|
|
69
|
+
if (/^\s*SELECT\s+l\.\*/i.test(sql) || /FROM links l/i.test(sql))
|
|
70
|
+
return { rows: [row], rowCount: 1 };
|
|
71
|
+
return { rows: [], rowCount: 0 };
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
const get = (app, ua) => app.inject({ method: 'GET', url: '/abc123', headers: { 'user-agent': ua, host: 'go.example' } });
|
|
75
|
+
let app;
|
|
76
|
+
beforeEach(async () => {
|
|
77
|
+
app = Fastify();
|
|
78
|
+
await app.register(redirectRoutes);
|
|
79
|
+
await app.ready();
|
|
80
|
+
});
|
|
81
|
+
afterEach(async () => {
|
|
82
|
+
await new Promise((r) => setImmediate(r));
|
|
83
|
+
await app.close();
|
|
84
|
+
});
|
|
85
|
+
describe('store URLs are sent exactly as configured', () => {
|
|
86
|
+
it('Android Chrome → the Play URL untouched, so a deep-link `id` cannot replace the app id', async () => {
|
|
87
|
+
mockDb(linkRow({ web_fallback_url: WEB }));
|
|
88
|
+
const res = await get(app, ANDROID_CHROME_UA);
|
|
89
|
+
expect(res.statusCode).toBe(302);
|
|
90
|
+
expect(res.headers.location).toBe(PLAY);
|
|
91
|
+
});
|
|
92
|
+
it('iOS Safari → the App Store URL untouched', async () => {
|
|
93
|
+
mockDb(linkRow({ web_fallback_url: WEB }));
|
|
94
|
+
const res = await get(app, IPHONE_UA);
|
|
95
|
+
expect(res.statusCode).toBe(302);
|
|
96
|
+
expect(res.headers.location).toBe(APP_STORE);
|
|
97
|
+
});
|
|
98
|
+
it('a store URL configured as the web fallback is not decorated either', async () => {
|
|
99
|
+
mockDb(linkRow({ android_app_store_url: null, web_fallback_url: PLAY }));
|
|
100
|
+
const res = await get(app, ANDROID_CHROME_UA);
|
|
101
|
+
expect(res.headers.location).toBe(PLAY);
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
describe('websites are decorated exactly as before', () => {
|
|
105
|
+
it('desktop → web fallback with UTM, deep-link parameters and the click id', async () => {
|
|
106
|
+
mockDb(linkRow({ web_fallback_url: WEB }));
|
|
107
|
+
const res = await get(app, DESKTOP_UA);
|
|
108
|
+
expect(res.statusCode).toBe(302);
|
|
109
|
+
const url = new URL(String(res.headers.location));
|
|
110
|
+
expect(url.origin + url.pathname).toBe(WEB);
|
|
111
|
+
expect(url.searchParams.get('id')).toBe('evt_42');
|
|
112
|
+
expect(url.searchParams.get('route')).toBe('EVENT_VIEW');
|
|
113
|
+
expect(url.searchParams.get('utm_source')).toBe('newsletter');
|
|
114
|
+
expect(url.searchParams.get('lf_click')).toBeTruthy();
|
|
115
|
+
});
|
|
116
|
+
it('app-open guard: an Android in-app browser still goes to the web fallback, not the store', async () => {
|
|
117
|
+
mockDb(linkRow({ web_fallback_url: WEB }));
|
|
118
|
+
const res = await get(app, ANDROID_INSTAGRAM_UA);
|
|
119
|
+
expect(res.statusCode).toBe(302);
|
|
120
|
+
const url = new URL(String(res.headers.location));
|
|
121
|
+
expect(url.hostname).toBe('example.com');
|
|
122
|
+
expect(url.searchParams.get('id')).toBe('evt_42');
|
|
123
|
+
});
|
|
124
|
+
it('app-open guard: an App Link still wins over every fallback', async () => {
|
|
125
|
+
mockDb(linkRow({ web_fallback_url: WEB, android_app_link: 'https://app.example.com/e/42' }));
|
|
126
|
+
const res = await get(app, ANDROID_CHROME_UA);
|
|
127
|
+
expect(new URL(String(res.headers.location)).hostname).toBe('app.example.com');
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
describe('isAppStoreUrl', () => {
|
|
131
|
+
it('recognises Google Play and the App Store, whatever the case', () => {
|
|
132
|
+
expect(isAppStoreUrl(PLAY)).toBe(true);
|
|
133
|
+
expect(isAppStoreUrl(APP_STORE)).toBe(true);
|
|
134
|
+
expect(isAppStoreUrl('https://itunes.apple.com/us/app/id1')).toBe(true);
|
|
135
|
+
expect(isAppStoreUrl('https://PLAY.google.com/store/apps/details?id=x')).toBe(true);
|
|
136
|
+
});
|
|
137
|
+
it('does not treat websites, look-alikes or garbage as stores', () => {
|
|
138
|
+
expect(isAppStoreUrl(WEB)).toBe(false);
|
|
139
|
+
expect(isAppStoreUrl('https://play.google.com.evil.example/x')).toBe(false);
|
|
140
|
+
expect(isAppStoreUrl('https://example.com/?u=https://play.google.com')).toBe(false);
|
|
141
|
+
expect(isAppStoreUrl('not a url')).toBe(false);
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
//# sourceMappingURL=redirect.store-url.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redirect.store-url.test.js","sourceRoot":"","sources":["../../src/routes/redirect.store-url.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redirect.web-link.test.d.ts","sourceRoot":"","sources":["../../src/routes/redirect.web-link.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* scheme interstitial or a store.
|
|
2
|
+
* On a host the deployment reserves for web links (`isWebLinkRequest`), every
|
|
3
|
+
* link opens the website on every device: a plain 302 to the destination
|
|
4
|
+
* desktop gets, never the Launchpad page, the scheme interstitial or a store.
|
|
5
|
+
* Follows redirect.launchpad.test.ts.
|
|
5
6
|
*/
|
|
6
7
|
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
7
8
|
import Fastify from 'fastify';
|
|
@@ -16,7 +17,11 @@ const DESKTOP_UA = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/
|
|
|
16
17
|
const IPHONE_UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1';
|
|
17
18
|
const ANDROID_UA = 'Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0 Mobile Safari/537.36';
|
|
18
19
|
const FB_IOS_UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 [FBAN/FBIOS;FBAV/450.0.0.0.0]';
|
|
19
|
-
const
|
|
20
|
+
const WEB_HOST = 'links.example';
|
|
21
|
+
/** The deployment's rule: one host is for web links. */
|
|
22
|
+
const options = {
|
|
23
|
+
isWebLinkRequest: (request) => request.headers.host === WEB_HOST,
|
|
24
|
+
};
|
|
20
25
|
/** Launchpad page mode: without the flag, a mobile visitor to an app-less link gets the page. */
|
|
21
26
|
const PAGE_MODE = { launchpad: { mobile: 'page' } };
|
|
22
27
|
function linkRow(overrides = {}) {
|
|
@@ -42,7 +47,7 @@ function linkRow(overrides = {}) {
|
|
|
42
47
|
owner_suspended_at: null,
|
|
43
48
|
expires_at: null,
|
|
44
49
|
targeting_rules: null,
|
|
45
|
-
template_settings:
|
|
50
|
+
template_settings: null,
|
|
46
51
|
org_settings: PAGE_MODE,
|
|
47
52
|
utm_parameters: null,
|
|
48
53
|
deep_link_parameters: null,
|
|
@@ -62,18 +67,18 @@ function mockDb(row) {
|
|
|
62
67
|
return { rows: [], rowCount: 0 };
|
|
63
68
|
});
|
|
64
69
|
}
|
|
65
|
-
const get = (app, ua) => app.inject({ method: 'GET', url: '/abc123', headers: { 'user-agent': ua, host
|
|
70
|
+
const get = (app, ua, host = WEB_HOST) => app.inject({ method: 'GET', url: '/abc123', headers: { 'user-agent': ua, host } });
|
|
66
71
|
let app;
|
|
67
72
|
beforeEach(async () => {
|
|
68
73
|
app = Fastify();
|
|
69
|
-
await app.register(redirectRoutes);
|
|
74
|
+
await app.register(redirectRoutes, options);
|
|
70
75
|
await app.ready();
|
|
71
76
|
});
|
|
72
77
|
afterEach(async () => {
|
|
73
78
|
await new Promise((r) => setImmediate(r));
|
|
74
79
|
await app.close();
|
|
75
80
|
});
|
|
76
|
-
describe('web-
|
|
81
|
+
describe('web-link host', () => {
|
|
77
82
|
it('302s every device to the web destination, even with the workspace in Launchpad page mode', async () => {
|
|
78
83
|
mockDb(linkRow());
|
|
79
84
|
for (const ua of [IPHONE_UA, ANDROID_UA, FB_IOS_UA, DESKTOP_UA]) {
|
|
@@ -109,14 +114,25 @@ describe('web-only template', () => {
|
|
|
109
114
|
expect(location.searchParams.get('utm_source')).toBe('email');
|
|
110
115
|
expect(location.searchParams.get('utm_campaign')).toBe('oct');
|
|
111
116
|
});
|
|
112
|
-
it('leaves
|
|
113
|
-
mockDb(linkRow({
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
+
it('leaves every other host alone: the same link gets the Launchpad page on an app-link host', async () => {
|
|
118
|
+
mockDb(linkRow({ ios_app_store_url: 'https://apps.apple.com/app/id1' }));
|
|
119
|
+
const res = await get(app, IPHONE_UA, 'go.example');
|
|
120
|
+
expect(res.statusCode).toBe(200);
|
|
121
|
+
expect(res.headers['content-type']).toMatch(/text\/html/);
|
|
122
|
+
});
|
|
123
|
+
it('treats a hook that throws as an app-link host rather than failing the click', async () => {
|
|
124
|
+
await app.close();
|
|
125
|
+
app = Fastify();
|
|
126
|
+
await app.register(redirectRoutes, {
|
|
127
|
+
isWebLinkRequest: () => {
|
|
128
|
+
throw new Error('lookup failed');
|
|
129
|
+
},
|
|
130
|
+
});
|
|
131
|
+
await app.ready();
|
|
132
|
+
mockDb(linkRow({ ios_app_store_url: 'https://apps.apple.com/app/id1' }));
|
|
117
133
|
const res = await get(app, IPHONE_UA);
|
|
118
134
|
expect(res.statusCode).toBe(200);
|
|
119
135
|
expect(res.headers['content-type']).toMatch(/text\/html/);
|
|
120
136
|
});
|
|
121
137
|
});
|
|
122
|
-
//# sourceMappingURL=redirect.web-
|
|
138
|
+
//# sourceMappingURL=redirect.web-link.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redirect.web-link.test.js","sourceRoot":"","sources":["../../src/routes/redirect.web-link.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/routes/templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAkB,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/routes/templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAkB,MAAM,SAAS,CAAC;AAgE1D,wBAAsB,cAAc,CAAC,OAAO,EAAE,eAAe,iBA+S5D"}
|
package/dist/routes/templates.js
CHANGED
|
@@ -27,8 +27,6 @@ const createTemplateSchema = z.object({
|
|
|
27
27
|
languages: z.array(z.string()).optional(),
|
|
28
28
|
}).optional(),
|
|
29
29
|
expiresAfterDays: z.number().optional(),
|
|
30
|
-
// Links open the website on every device, never the app (lib/app-association.ts)
|
|
31
|
-
webOnly: z.boolean().optional(),
|
|
32
30
|
}).optional(),
|
|
33
31
|
isDefault: z.boolean().default(false),
|
|
34
32
|
});
|
|
@@ -56,8 +54,6 @@ const updateTemplateSchema = z.object({
|
|
|
56
54
|
languages: z.array(z.string()).optional(),
|
|
57
55
|
}).optional(),
|
|
58
56
|
expiresAfterDays: z.number().optional(),
|
|
59
|
-
// Links open the website on every device, never the app (lib/app-association.ts)
|
|
60
|
-
webOnly: z.boolean().optional(),
|
|
61
57
|
}).optional(),
|
|
62
58
|
isDefault: z.boolean().optional(),
|
|
63
59
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/routes/templates.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAExC,MAAM,YAAY,GAAG,cAAc,CAAC,sCAAsC,EAAE,CAAC,CAAC,CAAC;AAE/E,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACpC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,2BAA2B,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,uCAAuC,CAAC;IACtG,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,QAAQ,EAAE;QACvE,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,QAAQ,EAAE;QAC/E,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC,QAAQ,EAAE;QACxF,6BAA6B,EAAE,CAAC,CAAC,MAAM,EAAE;aACtC,GAAG,CAAC,CAAC,EAAE,4CAA4C,CAAC;aACpD,GAAG,CAAC,IAAI,EAAE,uDAAuD,CAAC;aAClE,QAAQ,EAAE;QACb,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC;YACtB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC7B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC7B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC/B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC3B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SAC/B,CAAC,CAAC,QAAQ,EAAE;QACb,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC;YACvB,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;YACzC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;YAC9D,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;SAC1C,CAAC,CAAC,QAAQ,EAAE;QACb,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/routes/templates.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"well-known.d.ts","sourceRoot":"","sources":["../../src/routes/well-known.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"well-known.d.ts","sourceRoot":"","sources":["../../src/routes/well-known.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE1C,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,iBAyF7D"}
|
|
@@ -9,24 +9,6 @@
|
|
|
9
9
|
* - ANDROID_PACKAGE_NAME: Your Android package name (e.g., "com.example.app")
|
|
10
10
|
* - ANDROID_SHA256_FINGERPRINTS: Comma-separated SHA-256 fingerprints (e.g., "AA:BB:CC:...,DD:EE:FF:...")
|
|
11
11
|
*/
|
|
12
|
-
import { db } from '../lib/database.js';
|
|
13
|
-
import { buildAppleAppSiteAssociation, buildAssetLinks } from '../lib/app-association.js';
|
|
14
|
-
/**
|
|
15
|
-
* Slugs of templates whose links must open the web, never the app (see
|
|
16
|
-
* lib/app-association.ts). Single-tenant: every web-only template on this
|
|
17
|
-
* deployment. A failed lookup claims every path, as before the flag existed —
|
|
18
|
-
* missing exclusions are better than no association file at all.
|
|
19
|
-
*/
|
|
20
|
-
async function webOnlyTemplateSlugs(log) {
|
|
21
|
-
try {
|
|
22
|
-
const result = await db.query(`SELECT slug FROM link_templates WHERE settings->>'webOnly' = 'true'`);
|
|
23
|
-
return result.rows.map((r) => r.slug);
|
|
24
|
-
}
|
|
25
|
-
catch (err) {
|
|
26
|
-
log.error({ err }, 'Failed to load web-only templates; association file claims every path');
|
|
27
|
-
return [];
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
12
|
export async function wellKnownRoutes(fastify) {
|
|
31
13
|
/**
|
|
32
14
|
* Apple App Site Association (AASA)
|
|
@@ -45,7 +27,17 @@ export async function wellKnownRoutes(fastify) {
|
|
|
45
27
|
docs: 'https://docs.linkforty.com/guides/sdk-integration#ios-universal-links'
|
|
46
28
|
});
|
|
47
29
|
}
|
|
48
|
-
const aasa =
|
|
30
|
+
const aasa = {
|
|
31
|
+
applinks: {
|
|
32
|
+
apps: [],
|
|
33
|
+
details: [
|
|
34
|
+
{
|
|
35
|
+
appID: `${teamId}.${bundleId}`,
|
|
36
|
+
paths: ['*'] // Match all paths
|
|
37
|
+
}
|
|
38
|
+
]
|
|
39
|
+
}
|
|
40
|
+
};
|
|
49
41
|
// AASA file must be served:
|
|
50
42
|
// 1. Without .json extension
|
|
51
43
|
// 2. With application/json content-type
|
|
@@ -83,7 +75,16 @@ export async function wellKnownRoutes(fastify) {
|
|
|
83
75
|
example: 'ANDROID_SHA256_FINGERPRINTS=AA:BB:CC:DD:EE:FF:...,11:22:33:44:55:66:...'
|
|
84
76
|
});
|
|
85
77
|
}
|
|
86
|
-
const assetlinks =
|
|
78
|
+
const assetlinks = [
|
|
79
|
+
{
|
|
80
|
+
relation: ['delegate_permission/common.handle_all_urls'],
|
|
81
|
+
target: {
|
|
82
|
+
namespace: 'android_app',
|
|
83
|
+
package_name: packageName,
|
|
84
|
+
sha256_cert_fingerprints: fingerprints
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
];
|
|
87
88
|
return reply
|
|
88
89
|
.header('Content-Type', 'application/json')
|
|
89
90
|
.send(assetlinks);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"well-known.js","sourceRoot":"","sources":["../../src/routes/well-known.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"well-known.js","sourceRoot":"","sources":["../../src/routes/well-known.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAwB;IAC5D;;;;;;OAMG;IACH,OAAO,CAAC,GAAG,CAAC,yCAAyC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAC9E,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;QACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QAE3C,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC5B,KAAK,EAAE,uBAAuB;gBAC9B,OAAO,EAAE,kGAAkG;gBAC3G,IAAI,EAAE,uEAAuE;aAC9E,CAAC,CAAC;QACL,CAAC;QAED,MAAM,IAAI,GAAG;YACX,QAAQ,EAAE;gBACR,IAAI,EAAE,EAAE;gBACR,OAAO,EAAE;oBACP;wBACE,KAAK,EAAE,GAAG,MAAM,IAAI,QAAQ,EAAE;wBAC9B,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,kBAAkB;qBAChC;iBACF;aACF;SACF,CAAC;QAEF,4BAA4B;QAC5B,6BAA6B;QAC7B,wCAAwC;QACxC,gCAAgC;QAChC,OAAO,KAAK;aACT,MAAM,CAAC,cAAc,EAAE,kBAAkB,CAAC;aAC1C,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH;;;;;;OAMG;IACH,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACnE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;QACrD,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;QAEhE,IAAI,CAAC,WAAW,IAAI,CAAC,eAAe,EAAE,CAAC;YACrC,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC5B,KAAK,EAAE,uBAAuB;gBAC9B,OAAO,EAAE,6HAA6H;gBACtI,IAAI,EAAE,qEAAqE;aAC5E,CAAC,CAAC;QACL,CAAC;QAED,qCAAqC;QACrC,MAAM,YAAY,GAAG,eAAe;aACjC,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,OAAO,CAAC,CAAC;QAEnB,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC5B,KAAK,EAAE,uBAAuB;gBAC9B,OAAO,EAAE,wGAAwG;gBACjH,OAAO,EAAE,yEAAyE;aACnF,CAAC,CAAC;QACL,CAAC;QAED,MAAM,UAAU,GAAG;YACjB;gBACE,QAAQ,EAAE,CAAC,4CAA4C,CAAC;gBACxD,MAAM,EAAE;oBACN,SAAS,EAAE,aAAa;oBACxB,YAAY,EAAE,WAAW;oBACzB,wBAAwB,EAAE,YAAY;iBACvC;aACF;SACF,CAAC;QAEF,OAAO,KAAK;aACT,MAAM,CAAC,cAAc,EAAE,kBAAkB,CAAC;aAC1C,IAAI,CAAC,UAAU,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -9,8 +9,6 @@ export interface LinkTemplateSettings {
|
|
|
9
9
|
utmParameters?: UTMParameters;
|
|
10
10
|
targetingRules?: TargetingRules;
|
|
11
11
|
expiresAfterDays?: number;
|
|
12
|
-
/** Links open the website on every device, never the app. Opt-in; app links are the default. */
|
|
13
|
-
webOnly?: boolean;
|
|
14
12
|
}
|
|
15
13
|
/**
|
|
16
14
|
* A reusable link template that pre-populates settings when creating new links.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
package/llms.txt
CHANGED
|
@@ -113,6 +113,9 @@ interface ServerOptions {
|
|
|
113
113
|
// "cta_open") from the page. Unset = the page sends nothing.
|
|
114
114
|
beaconUrl?: string;
|
|
115
115
|
};
|
|
116
|
+
// True = request is on a host reserved for web links: every device gets a
|
|
117
|
+
// plain 302 to the web destination. Serve no association files on it.
|
|
118
|
+
isWebLinkRequest?: (request) => Promise<boolean> | boolean;
|
|
116
119
|
};
|
|
117
120
|
}
|
|
118
121
|
```
|
package/package.json
CHANGED
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Web-only templates and the domain association files that honour them.
|
|
3
|
-
*
|
|
4
|
-
* A template flagged `webOnly` declares that its links are for the web: they
|
|
5
|
-
* must open the website on every device, even when the app is installed. Two
|
|
6
|
-
* things have to agree for that to hold:
|
|
7
|
-
*
|
|
8
|
-
* 1. The redirect sends the visitor to the web destination (routes/redirect.ts).
|
|
9
|
-
* 2. The OS never hands the URL to the app in the first place. iOS and
|
|
10
|
-
* Android decide that from the domain's association files *before* any
|
|
11
|
-
* request reaches us, so the template's path is excluded there.
|
|
12
|
-
*
|
|
13
|
-
* App links stay the default: a template is web-only only when the flag is
|
|
14
|
-
* exactly `true`. When no template is web-only, both files are byte-for-byte
|
|
15
|
-
* what they were before this existed.
|
|
16
|
-
*/
|
|
17
|
-
/** True when a template's settings declare its links web-only. */
|
|
18
|
-
export declare function isWebOnlyTemplate(settings: unknown): boolean;
|
|
19
|
-
/**
|
|
20
|
-
* Apple caps the file at 128KB, and an oversized or unparseable file stops
|
|
21
|
-
* every Universal Link on the domain, not just the excluded ones. Stay well
|
|
22
|
-
* under it: past this budget the exclusions are dropped and the file falls
|
|
23
|
-
* back to claiming every path, which is how it behaved before.
|
|
24
|
-
*/
|
|
25
|
-
export declare const AASA_EXCLUSION_BUDGET_BYTES: number;
|
|
26
|
-
export interface AppleAppSiteAssociation {
|
|
27
|
-
applinks: {
|
|
28
|
-
apps: never[];
|
|
29
|
-
details: Array<{
|
|
30
|
-
appID: string;
|
|
31
|
-
paths: string[];
|
|
32
|
-
appIDs?: string[];
|
|
33
|
-
components?: Array<Record<string, unknown>>;
|
|
34
|
-
}>;
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* The AASA document for one app. `components` is read by iOS 13+; `paths`
|
|
39
|
-
* (with `NOT`) by older versions, which ignore `components`. Excludes come
|
|
40
|
-
* first because both matchers stop at the first pattern that matches.
|
|
41
|
-
*
|
|
42
|
-
* `onBudgetExceeded` is told when exclusions had to be dropped, so the caller
|
|
43
|
-
* can log it — the file itself stays valid either way.
|
|
44
|
-
*/
|
|
45
|
-
export declare function buildAppleAppSiteAssociation(appId: string, webOnlySlugs?: readonly string[], onBudgetExceeded?: (excludedCount: number, bytes: number) => void): AppleAppSiteAssociation;
|
|
46
|
-
export interface AssetLinksStatement {
|
|
47
|
-
relation: string[];
|
|
48
|
-
target: {
|
|
49
|
-
namespace: 'android_app';
|
|
50
|
-
package_name: string;
|
|
51
|
-
sha256_cert_fingerprints: string[];
|
|
52
|
-
};
|
|
53
|
-
relation_extensions?: Record<string, {
|
|
54
|
-
dynamic_app_link_components: Array<Record<string, unknown>>;
|
|
55
|
-
}>;
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* The assetlinks.json document for one app. Exclusions are Android 15+
|
|
59
|
-
* "dynamic App Links" rules: they can only narrow what the app's manifest
|
|
60
|
-
* already claims, older Android ignores them, and a malformed block makes
|
|
61
|
-
* Android drop the rules rather than the association.
|
|
62
|
-
*/
|
|
63
|
-
export declare function buildAssetLinks(packageName: string, fingerprints: string[], webOnlySlugs?: readonly string[]): AssetLinksStatement[];
|
|
64
|
-
//# sourceMappingURL=app-association.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"app-association.d.ts","sourceRoot":"","sources":["../../src/lib/app-association.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,kEAAkE;AAClE,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAE5D;AAaD;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,QAAa,CAAC;AAEtD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE;QACR,IAAI,EAAE,KAAK,EAAE,CAAC;QACd,OAAO,EAAE,KAAK,CAAC;YACb,KAAK,EAAE,MAAM,CAAC;YACd,KAAK,EAAE,MAAM,EAAE,CAAC;YAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;YAClB,UAAU,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;SAC7C,CAAC,CAAC;KACJ,CAAC;CACH;AAED;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,MAAM,EACb,YAAY,GAAE,SAAS,MAAM,EAAO,EACpC,gBAAgB,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GAChE,uBAAuB,CA6BzB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE;QAAE,SAAS,EAAE,aAAa,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,wBAAwB,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC/F,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,2BAA2B,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;KAAE,CAAC,CAAC;CACvG;AAID;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EAAE,EACtB,YAAY,GAAE,SAAS,MAAM,EAAO,GACnC,mBAAmB,EAAE,CAcvB"}
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Web-only templates and the domain association files that honour them.
|
|
3
|
-
*
|
|
4
|
-
* A template flagged `webOnly` declares that its links are for the web: they
|
|
5
|
-
* must open the website on every device, even when the app is installed. Two
|
|
6
|
-
* things have to agree for that to hold:
|
|
7
|
-
*
|
|
8
|
-
* 1. The redirect sends the visitor to the web destination (routes/redirect.ts).
|
|
9
|
-
* 2. The OS never hands the URL to the app in the first place. iOS and
|
|
10
|
-
* Android decide that from the domain's association files *before* any
|
|
11
|
-
* request reaches us, so the template's path is excluded there.
|
|
12
|
-
*
|
|
13
|
-
* App links stay the default: a template is web-only only when the flag is
|
|
14
|
-
* exactly `true`. When no template is web-only, both files are byte-for-byte
|
|
15
|
-
* what they were before this existed.
|
|
16
|
-
*/
|
|
17
|
-
/** True when a template's settings declare its links web-only. */
|
|
18
|
-
export function isWebOnlyTemplate(settings) {
|
|
19
|
-
return !!settings && typeof settings === 'object' && settings.webOnly === true;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Slugs safe to write into a path pattern. `*` and `?` are wildcards in both
|
|
23
|
-
* Apple's and Google's matchers, so anything outside the generated slug
|
|
24
|
-
* alphabet is skipped rather than escaped.
|
|
25
|
-
*/
|
|
26
|
-
const SAFE_SLUG = /^[A-Za-z0-9_-]+$/;
|
|
27
|
-
function excludablePaths(webOnlySlugs) {
|
|
28
|
-
return [...new Set(webOnlySlugs)].filter((s) => SAFE_SLUG.test(s)).sort().map((s) => `/${s}/*`);
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Apple caps the file at 128KB, and an oversized or unparseable file stops
|
|
32
|
-
* every Universal Link on the domain, not just the excluded ones. Stay well
|
|
33
|
-
* under it: past this budget the exclusions are dropped and the file falls
|
|
34
|
-
* back to claiming every path, which is how it behaved before.
|
|
35
|
-
*/
|
|
36
|
-
export const AASA_EXCLUSION_BUDGET_BYTES = 100 * 1024;
|
|
37
|
-
/**
|
|
38
|
-
* The AASA document for one app. `components` is read by iOS 13+; `paths`
|
|
39
|
-
* (with `NOT`) by older versions, which ignore `components`. Excludes come
|
|
40
|
-
* first because both matchers stop at the first pattern that matches.
|
|
41
|
-
*
|
|
42
|
-
* `onBudgetExceeded` is told when exclusions had to be dropped, so the caller
|
|
43
|
-
* can log it — the file itself stays valid either way.
|
|
44
|
-
*/
|
|
45
|
-
export function buildAppleAppSiteAssociation(appId, webOnlySlugs = [], onBudgetExceeded) {
|
|
46
|
-
const claimAll = {
|
|
47
|
-
applinks: { apps: [], details: [{ appID: appId, paths: ['*'] }] },
|
|
48
|
-
};
|
|
49
|
-
const excluded = excludablePaths(webOnlySlugs);
|
|
50
|
-
if (excluded.length === 0)
|
|
51
|
-
return claimAll;
|
|
52
|
-
const withExclusions = {
|
|
53
|
-
applinks: {
|
|
54
|
-
apps: [],
|
|
55
|
-
details: [
|
|
56
|
-
{
|
|
57
|
-
appID: appId,
|
|
58
|
-
paths: [...excluded.map((p) => `NOT ${p}`), '*'],
|
|
59
|
-
appIDs: [appId],
|
|
60
|
-
components: [
|
|
61
|
-
...excluded.map((p) => ({ '/': p, exclude: true, comment: 'Web-only template' })),
|
|
62
|
-
{ '/': '*' },
|
|
63
|
-
],
|
|
64
|
-
},
|
|
65
|
-
],
|
|
66
|
-
},
|
|
67
|
-
};
|
|
68
|
-
const bytes = Buffer.byteLength(JSON.stringify(withExclusions));
|
|
69
|
-
if (bytes > AASA_EXCLUSION_BUDGET_BYTES) {
|
|
70
|
-
onBudgetExceeded?.(excluded.length, bytes);
|
|
71
|
-
return claimAll;
|
|
72
|
-
}
|
|
73
|
-
return withExclusions;
|
|
74
|
-
}
|
|
75
|
-
const HANDLE_ALL_URLS = 'delegate_permission/common.handle_all_urls';
|
|
76
|
-
/**
|
|
77
|
-
* The assetlinks.json document for one app. Exclusions are Android 15+
|
|
78
|
-
* "dynamic App Links" rules: they can only narrow what the app's manifest
|
|
79
|
-
* already claims, older Android ignores them, and a malformed block makes
|
|
80
|
-
* Android drop the rules rather than the association.
|
|
81
|
-
*/
|
|
82
|
-
export function buildAssetLinks(packageName, fingerprints, webOnlySlugs = []) {
|
|
83
|
-
const statement = {
|
|
84
|
-
relation: [HANDLE_ALL_URLS],
|
|
85
|
-
target: { namespace: 'android_app', package_name: packageName, sha256_cert_fingerprints: fingerprints },
|
|
86
|
-
};
|
|
87
|
-
const excluded = excludablePaths(webOnlySlugs);
|
|
88
|
-
if (excluded.length > 0) {
|
|
89
|
-
statement.relation_extensions = {
|
|
90
|
-
[HANDLE_ALL_URLS]: {
|
|
91
|
-
dynamic_app_link_components: [...excluded.map((p) => ({ '/': p, exclude: true })), { '/': '*' }],
|
|
92
|
-
},
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
return [statement];
|
|
96
|
-
}
|
|
97
|
-
//# sourceMappingURL=app-association.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"app-association.js","sourceRoot":"","sources":["../../src/lib/app-association.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"app-association.test.d.ts","sourceRoot":"","sources":["../../src/lib/app-association.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi } from 'vitest';
|
|
2
|
-
import { AASA_EXCLUSION_BUDGET_BYTES, buildAppleAppSiteAssociation, buildAssetLinks, isWebOnlyTemplate, } from './app-association.js';
|
|
3
|
-
const APP = 'TEAM123456.com.acme.app';
|
|
4
|
-
describe('isWebOnlyTemplate', () => {
|
|
5
|
-
it('is true only for an explicit true: app links are the default', () => {
|
|
6
|
-
expect(isWebOnlyTemplate({ webOnly: true })).toBe(true);
|
|
7
|
-
for (const settings of [null, undefined, {}, { webOnly: false }, { webOnly: 'true' }, 'webOnly']) {
|
|
8
|
-
expect(isWebOnlyTemplate(settings), JSON.stringify(settings)).toBe(false);
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
});
|
|
12
|
-
describe('buildAppleAppSiteAssociation', () => {
|
|
13
|
-
it('is exactly the claim-everything file when no template is web-only', () => {
|
|
14
|
-
expect(buildAppleAppSiteAssociation(APP)).toEqual({
|
|
15
|
-
applinks: { apps: [], details: [{ appID: APP, paths: ['*'] }] },
|
|
16
|
-
});
|
|
17
|
-
});
|
|
18
|
-
it('excludes each web-only template path ahead of the catch-all, for old and new iOS', () => {
|
|
19
|
-
const detail = buildAppleAppSiteAssociation(APP, ['news2024', 'abc123']).applinks.details[0];
|
|
20
|
-
expect(detail.paths).toEqual(['NOT /abc123/*', 'NOT /news2024/*', '*']);
|
|
21
|
-
expect(detail.appIDs).toEqual([APP]);
|
|
22
|
-
expect(detail.components).toEqual([
|
|
23
|
-
{ '/': '/abc123/*', exclude: true, comment: 'Web-only template' },
|
|
24
|
-
{ '/': '/news2024/*', exclude: true, comment: 'Web-only template' },
|
|
25
|
-
{ '/': '*' },
|
|
26
|
-
]);
|
|
27
|
-
});
|
|
28
|
-
it('never writes a slug that a matcher would read as a wildcard, and de-duplicates', () => {
|
|
29
|
-
const detail = buildAppleAppSiteAssociation(APP, ['ok', 'ok', 'bad*', 'q?', 'a/b']).applinks.details[0];
|
|
30
|
-
expect(detail.paths).toEqual(['NOT /ok/*', '*']);
|
|
31
|
-
});
|
|
32
|
-
it('falls back to claiming every path, and says so, rather than serve a file iOS would reject', () => {
|
|
33
|
-
const onBudgetExceeded = vi.fn();
|
|
34
|
-
const slugs = Array.from({ length: 3000 }, (_, i) => `t${String(i).padStart(7, '0')}`);
|
|
35
|
-
const aasa = buildAppleAppSiteAssociation(APP, slugs, onBudgetExceeded);
|
|
36
|
-
expect(aasa.applinks.details[0]).toEqual({ appID: APP, paths: ['*'] });
|
|
37
|
-
expect(onBudgetExceeded).toHaveBeenCalledWith(3000, expect.any(Number));
|
|
38
|
-
expect(onBudgetExceeded.mock.calls[0][1]).toBeGreaterThan(AASA_EXCLUSION_BUDGET_BYTES);
|
|
39
|
-
});
|
|
40
|
-
});
|
|
41
|
-
describe('buildAssetLinks', () => {
|
|
42
|
-
it('is the plain statement when no template is web-only', () => {
|
|
43
|
-
expect(buildAssetLinks('com.acme.app', ['AA:BB'])).toEqual([
|
|
44
|
-
{
|
|
45
|
-
relation: ['delegate_permission/common.handle_all_urls'],
|
|
46
|
-
target: { namespace: 'android_app', package_name: 'com.acme.app', sha256_cert_fingerprints: ['AA:BB'] },
|
|
47
|
-
},
|
|
48
|
-
]);
|
|
49
|
-
});
|
|
50
|
-
it('adds Android 15+ dynamic exclusions ahead of the catch-all', () => {
|
|
51
|
-
const [statement] = buildAssetLinks('com.acme.app', ['AA:BB'], ['news2024']);
|
|
52
|
-
expect(statement.relation_extensions).toEqual({
|
|
53
|
-
'delegate_permission/common.handle_all_urls': {
|
|
54
|
-
dynamic_app_link_components: [{ '/': '/news2024/*', exclude: true }, { '/': '*' }],
|
|
55
|
-
},
|
|
56
|
-
});
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
//# sourceMappingURL=app-association.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"app-association.test.js","sourceRoot":"","sources":["../../src/lib/app-association.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"redirect.web-only.test.d.ts","sourceRoot":"","sources":["../../src/routes/redirect.web-only.test.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"redirect.web-only.test.js","sourceRoot":"","sources":["../../src/routes/redirect.web-only.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"well-known.test.d.ts","sourceRoot":"","sources":["../../src/routes/well-known.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi, beforeEach, afterEach, afterAll } from 'vitest';
|
|
2
|
-
import Fastify from 'fastify';
|
|
3
|
-
import { wellKnownRoutes } from './well-known.js';
|
|
4
|
-
const query = vi.fn();
|
|
5
|
-
vi.mock('../lib/database.js', () => ({
|
|
6
|
-
db: {
|
|
7
|
-
query: (...args) => query(...args),
|
|
8
|
-
},
|
|
9
|
-
}));
|
|
10
|
-
const savedEnv = { ...process.env };
|
|
11
|
-
let app;
|
|
12
|
-
beforeEach(async () => {
|
|
13
|
-
process.env.IOS_TEAM_ID = 'TEAM123456';
|
|
14
|
-
process.env.IOS_BUNDLE_ID = 'com.acme.app';
|
|
15
|
-
process.env.ANDROID_PACKAGE_NAME = 'com.acme.app';
|
|
16
|
-
process.env.ANDROID_SHA256_FINGERPRINTS = 'AA:BB';
|
|
17
|
-
query.mockReset();
|
|
18
|
-
app = Fastify();
|
|
19
|
-
await app.register(wellKnownRoutes);
|
|
20
|
-
await app.ready();
|
|
21
|
-
});
|
|
22
|
-
afterEach(async () => {
|
|
23
|
-
await app.close();
|
|
24
|
-
});
|
|
25
|
-
afterAll(() => {
|
|
26
|
-
process.env = savedEnv;
|
|
27
|
-
});
|
|
28
|
-
const aasa = () => app.inject({ method: 'GET', url: '/.well-known/apple-app-site-association' });
|
|
29
|
-
const assetlinks = () => app.inject({ method: 'GET', url: '/.well-known/assetlinks.json' });
|
|
30
|
-
describe('well-known with web-only templates', () => {
|
|
31
|
-
it('excludes web-only template paths from both files', async () => {
|
|
32
|
-
query.mockResolvedValue({ rows: [{ slug: 'news2024' }] });
|
|
33
|
-
const apple = (await aasa()).json().applinks.details[0];
|
|
34
|
-
expect(apple.paths).toEqual(['NOT /news2024/*', '*']);
|
|
35
|
-
expect(query.mock.calls[0][0]).toContain(`settings->>'webOnly' = 'true'`);
|
|
36
|
-
const [android] = (await assetlinks()).json();
|
|
37
|
-
expect(android.relation_extensions['delegate_permission/common.handle_all_urls'].dynamic_app_link_components[0])
|
|
38
|
-
.toEqual({ '/': '/news2024/*', exclude: true });
|
|
39
|
-
});
|
|
40
|
-
it('serves the claim-everything files when there are none, or when the lookup fails', async () => {
|
|
41
|
-
query.mockResolvedValueOnce({ rows: [] });
|
|
42
|
-
expect((await aasa()).json().applinks.details[0]).toEqual({ appID: 'TEAM123456.com.acme.app', paths: ['*'] });
|
|
43
|
-
query.mockRejectedValueOnce(new Error('db down'));
|
|
44
|
-
const res = await assetlinks();
|
|
45
|
-
expect(res.statusCode).toBe(200);
|
|
46
|
-
expect(res.json()[0].relation_extensions).toBeUndefined();
|
|
47
|
-
});
|
|
48
|
-
});
|
|
49
|
-
//# sourceMappingURL=well-known.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"well-known.test.js","sourceRoot":"","sources":["../../src/routes/well-known.test.ts"],"names":[],"mappings":"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"}
|